Linux基础篇学习——Linux磁盘管理及维护

磁盘知识

物理组成

磁盘盘(盘片) 存储数据
机械手臂与在机械手臂上的磁盘读取头
主轴马达 转动磁盘盘,让机械手臂的读取头在磁盘盘上写数据

盘片组成

在这里插入图片描述
磁头 进行读写操作

磁头开机前停在启停区(盘面最内侧,不含有磁性粒子的区域)

盘面 硬盘的每一个盘片都有两个盘面,从上到下的顺序依次是 0~N
磁道 Track 磁盘在格式化时被划分成许多同心圆,这些同心圆轨迹叫做磁道,编号从外到内顺序依次是0~N

为什么操作系统的启动所需程序,存储在0磁道?
相同转速情况下,越外圈线速度越快,提高开机效率

柱面 Cylinder 所有盘面上的同一磁道构成一个圆柱,通常称做柱面

一个磁道写满数据后,在同一个柱面的下一个盘面去写;一个柱面写满数据后,才移动到下一个柱面写数据
优点:减少寻道的频繁度

扇区 Sector 操作系统以扇区形式将信息存储在硬盘上

1.扇区(sector)是最小的物理存储单位,有512bytes和4K两种格式
2.将扇区组成一个圆是磁柱
3.最小分区单位通常为扇区
4.磁盘分区表主要有两种格式,一种是限制较多的MBR分区,一种是GPT格式
5.MBR分区中,第一个扇区最重要,主要存放开机区的MBR和分区表
6.GPT分区表除了分区数量扩充较多之外,支持的磁盘容量超过2TB

MBR 主引导记录区 位于0盘面的第0个磁道的第一个扇区,共512字节

内容 占用空间/字节
MBR主引导记录 446
DPT硬盘分区表 64
分区结束标志“55,AA” 2

硬盘分区表包括4个主分区的分区表:3个主分区+1个扩展(逻辑)分区
 文件系统的存储单位

磁盘分类

从工作原理
机械磁盘HDD 驱动马达转动磁盘盘 存在磁盘读取延迟
固态硬盘SSD 通过闪存直接读取 优点:无数据延迟,快速,省电
从磁盘尺寸 3.5 2.5 1.8
从插拔方式 热插拔 非热插拔
从硬盘主要传输接口
SATA 取代IDE
SAS 串行式SCSI 支持热插拔

kernel对不同接口硬盘命名方式

OS IDE(并口) SATA(串口) SCSI
RHEL5 /dev/hda /dev/sda /dev/sda
RHEL6 /dev/sda /dev/sda /dev/sda
RHEL7 /dev/sda /dev/sda /dev/sda
KVM /dev/vda(半虚拟化驱动) /dev/sda(全虚拟化驱动)

HP服务器硬盘

/dev/cciss/c0d0
/dev/cciss/c0d0p1 //c0第一个控制器, d0第一块磁盘, p1分区1
/dev/cciss/c0d0p2 //c0第一个控制器, d0第一块磁盘, p2分区2

从存储连接方式
本地存储
外部存储 SCSI线 STAT线 SAS线 FC线(光纤)
网络存储 以太网络 FC网络
从分区方式
MBR <2TB
GPT >2TB 128个主分区
从MBR转到GPT,或从GPT转换到MBR会导致数据全部丢失

硬盘存储原理

存储 用数据的控制电路通过硬盘读写头去改变磁盘表面上极细微的磁性粒子簇的S/N极来加以存储 磁粉的S/N极分别代表二进制中的0和1
删除 删除数据即删除对此数据的索引,不恢复磁粉状态,新数据写入直接覆盖原来的磁粉


磁盘分区核心命令

fdisk 查看系统的分区信息

fdisk [options] <disk>    change partition table
fdisk [options] -l <disk> list partition table(s)
fdisk -s <partition>      give partition size(s) in blocks

fdisk -l 查看系统的分区详细信息

[root@localhost ~]# fdisk -l /dev/sda

Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000253e4

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      411647      204800   83  Linux
/dev/sda2          411648    21383167    10485760   83  Linux
/dev/sda3        21383168    25577471     2097152   82  Linux swap / Solaris

fdisk -s 给出分区大小(块数)

[root@localhost ~]# fdisk -s /dev/sdb5
102400

fdisk 对磁盘进行分区

[root@zycentos7 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x7e808483.

Command (m for help): m
Command action
   a   toggle a bootable flag	;设置启动分区
   b   edit bsd disklabel	;编辑分区标签
   c   toggle the dos compatibility flag
   d   delete a partition	;删除一个分区
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types	;列出分区类型
   m   print this menu	;输出帮助信息
   n   add a new partition	;建立一个新的分区
   o   create a new empty DOS partition table	;创建一个新的空白DOS分区表
   p   print the partition table	;打印分区表
   q   quit without saving changes	;退出不保存设置
   s   create a new empty Sun disklabel
   t   change a partition's system id	;改变分区的id
   u   change display/entry units	;改变显示的单位
   v   verify the partition table	;检查验证分区表
   w   write table to disk and exit	;保存分区表
   x   extra functionality (experts only)

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)	;p是主分区
   e   extended	;e是扩展分区
Select (default p): p
Partition number (1-4, default 1): 1	;定义分区号
First sector (2048-10485759, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759): +1G
Partition 1 of type Linux and of size 1 GiB is set

Command (m for help): p

Disk /dev/sdb: 5368 MB, 5368709120 bytes, 10485760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x7e808483

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux

主分区最多4个

Command (m for help): n
If you want to create more than four partitions, you must replace a
primary partition with an extended partition first.

将第4主分区设置为扩展分区

Command (m for help): d
Partition number (1-4, default 4): 4
Partition 4 is deleted

Command (m for help): n
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended
Select (default e): e
Selected partition 4
First sector (6293504-10485759, default 6293504):
Using default value 6293504
Last sector, +sectors or +size{K,M,G} (6293504-10485759, default 10485759):
Using default value 10485759
Partition 4 of type Extended and of size 2 GiB is set

保存退出,查看磁盘分区结果

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

[root@zycentos7 ~]# fdisk -l /dev/sdb

Disk /dev/sdb: 5368 MB, 5368709120 bytes, 10485760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x7e808483

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux
/dev/sdb2         2099200     4196351     1048576   83  Linux
/dev/sdb3         4196352     6293503     1048576   83  Linux
/dev/sdb4         6293504    10485759     2096128    5  Extended

文件系统相关的命令

mkfs 创建ext系列文件系统的工具

mkfs - build a Linux filesystem

[root@zycentos7 ~]# mkfs.ext
mkfs.ext2  mkfs.ext3  mkfs.ext4

mke2fs 管理ext系列文件系统的工具

mke2fs - create an ext2/ext3/ext4 filesystem

mke2fs [OPTIONS] device
选项 含义
-t {ext2/ext3/ext4} 指明要创建的文件系统类型
-b {1024/2048/4096} 指明文件系统的块大小
-L LABEL 指明卷标
-j 创建有日志功能的文件系统
-i 指明inode与字节的比率(即每多少字节创建一个indode)
-N # 直接指明要给此文件系统创建的inode的数量
-m # 指定预留的空间,百分比
-O [^]FEATURE 以指定的特性创建目标文件系统

mke2fs -j = mke2fs -t ext3 = mkfs -t ext3 = mkfs.ext3

[root@zycentos7 ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376

Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

e2label 卷标的设定与查看

[root@zycentos7 ~]# e2label /dev/sdb1 LINUX	;设定
[root@zycentos7 ~]# e2label /dev/sdb1	;查看
LINUX

tune2fs 查看或修改ext系列文件系统的某些属性

块大小创建后不可修改

tune2fs [OPTIONS] device
选项 含义
-l 查看超级块的内容
-j 为“ext2”文件系统添加日志功能,将其转换为“ext3”文件系统
-L LABEL 修改卷标
-m # 调整预留空间百分比
-r 调整系统保留空间(磁盘块个数)
-O [^]FEATHER 开启或关闭某种特性
-o [^]mount_options 开启或关闭某种默认挂载选项(acl、^acl)

练习1 将/dev/sdb5分区的保留比调为1%

[root@localhost ~]# tune2fs -m 1 /dev/sdb5
tune2fs 1.42.9 (28-Dec-2013)
Setting reserved blocks percentage to 1% (2618 blocks)

练习2 调整/dev/sdb5分区的保留空间为40000个磁盘块

[root@localhost ~]# tune2fs -r 40000 /dev/sdb5
tune2fs 1.42.9 (28-Dec-2013)
Setting reserved blocks count to 40000

dumpe2fs 显示ext系列文件系统的属性信息

dumpe2fs [-h] device

resize2fs 调整ext2\ext3\ext4文件系统的大小

resize2fs [选项] device [size]
选项 含义
-d debug-flags 打开resize2fs调试特性
-f 强制执行
-F 执行之前刷新文件系统缓冲区
-M 将文件系统缩小到最小值
-p 显示已完成任务的百分比
-P 显示文件系统的最小值

用于实现文件系统检测的工具

因进程意外中止或系统崩溃等原因导致定稿操作非正常终止时,可能会造成文件损坏,此时应该离线检测并修复文件系统

e2fsck 磁盘修复,检查时先卸载

e2fsck - check a Linux ext2/ext3/ext4 file system
选项 含义
-a 检查 partition,如发现问题会自动修复
-b 设定 superblock 位置
-B size 指定 size 作为区块大小
-c 检查 partition 是否有坏轨
-d 输出 e2fsck debug 结果
-f e2fsck 预设只会对错误的文件系统检查,加上 -f 是强制检查
-F 在检查前将硬盘的 buffer cache 清空,避免发生错误
-l list 记录了坏轨区块加入 list 中
-n 以 (read-only) 开启档案系统
-p 关闭互动模式,如有问题自动修复,等同 -a
-v 显示详细报告
-y 启用使用者互动模式

fsck 检查与修复文件系统,可以同时检查一个或者多个

fsck [-sACVRP] [-t fstype] [--] [fsck-options] filesys [...]
选项 含义
filesys device 名称(eg./dev/sda1),mount 点 (eg. / 或 /usr)
-t 给定文件系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数
-s 依序一个一个地执行 fsck 的指令来检查
-A 对/etc/fstab 中所有列出来的 partition 做检查
-C 显示完整的检查进度
-d 列印 e2fsck 的 debug 结果
-p 同时有 -A 条件时,同时有多个 fsck 的检查一起执行
-R 同时有 -A 条件时,省略 / 不检查
-V 详细显示模式
-a 如果检查有错则自动修复
-r 如果检查有错则由使用者回答是否修复

blkid 获取文件系统TYPE、UUID、LEBEL

blkid 获取文件系统TYPE、UUID、LEBEL
blkid -L LABEL 根据LABEL定位设备
blkid -U UUID 根据UUID定位设备

[root@zycentos7 ~]# blkid /dev/sdb1
/dev/sdb1: LABEL="LINUX" UUID="ec141f3e-ddad-4622-a1b1-e720ec636b0b" TYPE="ext4"

mount 挂载

文件系统的使用,首先要挂载

mount 【参数】 【OPTIONS】 文件系统 挂载点

挂载点mount_point用于作为另一个文件系统的访问入口
挂载点事先存在
应该使用未被或不会被其他进程使用到的目录
挂载点下原有的文件将会被隐藏

挂载时若没有指定挂载选项,则为默认选项
defaults:Use default options: rw, suid, dev, exec, auto, nouser, async, and relatime

命令选项

命令选项 含义
-a 使/etc/fstab文件立即生效
-r readonly,只读挂载
-w read and write, 读写挂载
-n 禁止设备挂载或卸载的操作同步更新至/etc/mtab文件中
-t vfstype 指明要挂载的设备上的文件系统的类型(可省略,此时mount会通过blkid来判断要挂载的设备的文件系统类型)
-L LABEL 挂载时以卷标的方式指明设备
-U UUID 挂载时以UUID的方式指明设备
-o options 挂载选项
sync/async 同步/异步操作
atime/noatime 文件或目录在被访问时是否更新其访问时间戳
diratime/nodiratime 目录在被访问时是否更新其访问时间戳
remount 重新挂载
acl 支持使用acl功能

使用技巧

可以将目录绑定至另一个目录上,作为其临时访问入口

mount --bind 源目录 目标目录
[root@localhost ~]# mount --bind /media /root/mydir
[root@localhost ~]# mount /dev/sr0 /media
mount: /dev/sr0 is write-protected, mounting read-only
[root@localhost ~]# ls /media
CentOS_BuildTag  GPL       LiveOS    RPM-GPG-KEY-CentOS-7
EFI              images    Packages  RPM-GPG-KEY-CentOS-Testing-7
EULA             isolinux  repodata  TRANS.TBL
[root@localhost ~]# ls /root/mydir
CentOS_BuildTag  GPL       LiveOS    RPM-GPG-KEY-CentOS-7
EFI              images    Packages  RPM-GPG-KEY-CentOS-Testing-7
EULA             isolinux  repodata  TRANS.TBL

常见挂载选项

选项 含义
rw 读写
ro 只读
suid 支持suid
dev/nodev 支持/不支持设备文件
exec/noexec 允许/不允许执行二进制文件
auto/noauto mount -a 开机自动/不自动挂载
async/sync 异步/同步写入
usrquota 支持用户级磁盘配额功能
grpquota 支持组级磁盘配额功能
acl 支持acl功能
remount 在线重新挂载
pri 指定优先级

练习1 noexec不允许执行二进制文件

[root@localhost ~]# mount -o noexec /dev/sdb5 /myfile/
[root@localhost ~]# df -h|grep myfile
/dev/sdb5        93M  1.6M   87M   2% /myfile
[root@localhost ~]# cp -rf /bin/date /myfile/
[root@localhost ~]# /myfile/date
-bash: /myfile/date: Permission denied
[root@localhost ~]# mount|grep myfile
/dev/sdb5 on /myfile type ext3 (rw,noexec,relatime,seclabel,data=ordered)

练习2 使用iso挂载

[root@localhost ~]# mount -t iso9660 -o loop /dev/sr0 /media

卸载:umount

umount 挂载点/文件系统

出现无法卸载的问题

[root@zycentos7 ~]# umount /media
umount: /media: target is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

(1)是不是在挂载点下执行卸载
(2)是不是有进程在占用挂载点及其下的文件

查看被哪个或哪些进程占用 lsof MOUNT_POINTfuser -v MOUNT_POINT

[root@zycentos7 ~]# lsof /media
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    7369 root  cwd    DIR   11,0     2048 1856 /media
vim     7387 root  cwd    DIR   11,0     2048 1856 /media
[root@zycentos7 ~]# fuser -v /media
                     USER        PID ACCESS COMMAND
/media:              root     kernel mount /media
                     root       7369 ..c.. bash
                     root       7387 ..c.. vim

如何处理:终止所有正在访问某挂载点的进程 fuser -km MOUNT_POINT

[root@zycentos7 ~]# yum install -y psmisc	;安装fuser
[root@zycentos7 ~]# fuser -km /media
/media:               7369c  7387c

查看当前系统上所有已挂载的设备

df -h
mount
cat /etc/mtab
cat /proc/mounts

挂载的配置文件

[root@zycentos7 ~]# vim /etc/fstab
# /etc/fstab
# Created by anaconda on Sat Sep  7 15:26:22 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=24ca1580-265c-464a-af36-87208001adff /                       xfs     defaults        0 0
UUID=6031ffb6-9740-4b92-8dfc-5f03593140c0 /boot                   xfs     defaults        0 0
UUID=c02a231e-bd7b-4cab-a500-630527702090 swap                    swap    defaults        0 0
配置文件列数 说明
1 文件系统:/dev/sdb1,UUID,LABEL
2 挂载点
3 文件系统类型(iso9660,ext,xfs)
4 文件系统的参数
5 dump备份(0不备份,1每天备份,2不定日期备份)
6 fsck检验扇区(0不检验,1最早检验,2一级别检验完成之后进行检验)

查看UUID和LABEL blkid /dev/sdb5dumpe2fs -h /dev/sdb5

对比分区名,LABEL,UUID

使用设备名称 /dev/sda 来挂载分区时是固定的,若磁盘的插槽顺序发生变化,会出现名称与设备不对应的问题
使用label挂载要随时注意LABEL NAME
使用UUID,每个分区被格式化以后都会有一个UUID作为唯一的标识号,不会发生错乱


dd 转换和复制文件

用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换

项目 Value
if=filename 输入文件名,缺省为标准输入,即指定源文件
of=filename 输出文件名,缺省为标准输出,即指定目的文件
bs=bytes 同时设置读入/输出的块大小为bytes个字节
count=blocks 仅拷贝blocks个块,块大小等于ibs指定的字节数
conv=lcase 把大写字符转换为小写字符
conv=ucase 把小写字符转换为大写字符

练习1 复制/dev/sda1数据到指定文件中

[root@zycentos7 ~]# dd if=/dev/sda1 of=dev_sda1.bak

练习2 删除/dev/sda1分区的数据

[root@zycentos7 ~]# dd if=/dev/zero of=/dev/sba1  

/dev/zero是0字符设备,可以连续不断的产生特殊数据流

练习3 生成任意大小的文件

[root@zycentos7 ~]# dd if=/dev/zero of=test.data bs=1M count=2
2+0 records in
2+0 records out
2097152 bytes (2.1 MB) copied, 0.00206577 s, 1.0 GB/s
[root@zycentos7 ~]# ls -alh test.data
-rw-r--r--. 1 root root 2.0M Nov  4 20:44 test.data

练习4 备份与恢复MBR
备份MBR

[root@localhost ~]# dd if=/dev/sda of=/root/image count=1 bs=512
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.000573952 s, 892 kB/s
[root@localhost ~]# du -h image
4.0K    image

恢复MBR

[root@localhost ~]# dd if=/root/image of=/dev/sda
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.000218222 s, 2.3 MB/s

备份光驱

[root@localhost ~]# dd if=/dev/cdrom of=disk.img
dd if=/dev/sr0 of=disk.img

备份镜像

[root@localhost ~]# dd if=/dev/sr0 of=disk.img

练习5 拷贝内容到磁盘

[root@localhost ~]# dd if=/dev/mem of=mem.bin
dd: error reading ‘/dev/mem’: Operation not permitted
2048+0 records in
2048+0 records out
1048576 bytes (1.0 MB) copied, 0.0585989 s, 17.9 MB/s
[root@localhost ~]# du -h mem.bin
1.0M    mem.bin

练习6 确定系统最佳的块大小

[root@localhost ~]# dd if=/dev/zero bs=1024 count=1000000 of=1Gb.file
1000000+0 records in
1000000+0 records out
1024000000 bytes (1.0 GB) copied, 24.9583 s, 41.0 MB/s
[root@localhost ~]# dd if=/dev/zero bs=2048 count=500000 of=1Gb.file
500000+0 records in
500000+0 records out
1024000000 bytes (1.0 GB) copied, 3.95915 s, 259 MB/s
[root@localhost ~]# dd if=/dev/zero bs=4096 count=250000 of=1Gb.file
250000+0 records in
250000+0 records out
1024000000 bytes (1.0 GB) copied, 17.7855 s, 57.6 MB/s
[root@localhost ~]# dd if=/dev/zero bs=8092 count=125000 of=1Gb.file
125000+0 records in
125000+0 records out
1011500000 bytes (1.0 GB) copied, 2.16878 s, 466 MB/s

练习7 测试硬盘的读写速度

[root@zycentos7 ~]# dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
1000000+0 records in
1000000+0 records out
1024000000 bytes (1.0 GB) copied, 15.7944 s, 64.8 MB/s
[root@zycentos7 ~]# dd if=/root/1Gb.file bs=64k | dd of=/dev/null
15625+0 records in
15625+0 records out
1024000000 bytes (1.0 GB) copied, 6.03152 s, 170 MB/s
2000000+0 records in
2000000+0 records out
1024000000 bytes (1.0 GB) copied, 6.04139 s, 169 MB/s

练习8 修复硬盘

[root@zycentos7 ~]# dd if=/dev/sda of=/dev/sda
[root@zycentos7 ~]# dd if=/dev/hda of=/dev/hda

练习9 将一个大视频的第i个字节的值改成0x41(大小字母A的ASCLL值)

[root@zycentos7 ~]# echo A |dd of=bigfile seek=$i bs=1 count=1 conv=nortunc

df 显示磁盘分区上可以使用的磁盘空间

-a  查看全部文件系统,单位默认KB
-h  以KB、MB、GB的单位来显示

[root@localhost ~]# df -h /dev/sdb5
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        476M     0  476M   0% /dev

du 显示目录中文件的大小

-h  以K、M、G为单位显示,提高可读性

-a  包括显示隐藏文件,单位 KB
-b  单位字节byte
-c  同时显示总和,单位KB
-m  单位MB
-s  仅显示目录的总值,单位KB


lsof 列出当前系统打开的文件

lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。

[root@localhost ~]# lsof|head -5
COMMAND    PID  TID    USER   FD      TYPE             DEVICE  SIZE/OFF     NODE				 NAME
systemd      1         root  cwd       DIR                8,2       262                          64 /
systemd      1         root  rtd       DIR                8,2       262                          64 /
systemd      1         root  txt       REG                8,2   1616360   169687                 12 /usr/lib/systemd/systemd
systemd      1         root  mem       REG                8,2     20112      500                 74 /usr/lib64/libuuid.so.1.3.0
列信息 意义
COMMAND 进程的名称
PID 进程标识符
PPID 父进程标识符(需要指定-R参数)
USER 进程所有者
FD 文件描述符(如cwd,txt)
TYPE 文件类型(如DIR,REG)
DEVICE 指定磁盘的名称
SIZE/OFF 文件的大小
NODE 索引节点(文件在磁盘上的标识)
NAME 打开文件的确切名称
  1. 列出所有打开的文件 lsof
    如果不加任何参数,就会打开所有被打开的文件
  2. 列出某个用户打开的文件信息 lsof -u username
[root@localhost ~]# lsof -u root|head -2
COMMAND     PID USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd       1 root  cwd       DIR                8,2       262         64 /
  1. 列出除了某个用户外的被打开的文件信息 lsof -u ^root

  2. 显示commond进程现在打开的文件 lsof -c command [-c command1]

[root@localhost ~]# lsof -c httpd|head -2
COMMAND   PID   USER   FD      TYPE             DEVICE SIZE/OFF     NODE NAME
httpd   10023   root  cwd       DIR                8,2      277       64 /
  1. 列出进程号为pid的进程所打开的文件 lsof -p pid [,pid1,pid2]
[root@localhost ~]# service httpd start
[root@localhost ~]# ps -ef|grep httpd|head -1
root      10023      1  0 11:03 ?        00:00:00 /usr/sbin/httpd -DFOREGRO
[root@localhost ~]# lsof -p 10023|head -2
COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF     NODE NAME
httpd   10023 root  cwd    DIR                8,2      277       64 /
  1. 显示目录下被开启的文件lsof +d 目录
  2. 显示目录下被开启的文件(递归)lsof +D 目录
  3. 显示指定文件描述符的进程 lsof -d FD
    使用fd为4的进程 lsof -d 4
    FD类型为txt的进程 lsof -d txt
  4. 显示符合条件的进程情况 lsof -i
lsof -i[46] [protocol][@hostname|hostaddr][:service|port] 
列表项 含义
46 IPv4 or IPv6
protocol TCP or UDP
hostname Internet host name
hostaddr IPv4地址
service etc/service中的 service name (可以不只一个)
port 端口号 (可以不只一个)

查看22端口连接情况,默认为sshd端口

[root@zycentos7 ~]# lsof -i:22
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    6807 root    3u  IPv4  37710      0t0  TCP *:ssh (LISTEN)
sshd    6807 root    4u  IPv6  37716      0t0  TCP *:ssh (LISTEN)
sshd    7149 root    3u  IPv4  39988      0t0  TCP bogon:ssh->bogon:21302 (ESTABLISHED)
sshd    7153 root    3u  IPv4  40090      0t0  TCP bogon:ssh->bogon:21316 (ESTABLISHED)
  1. 查找已删除但未关闭文件 lsof | grep delete
发布了43 篇原创文章 · 获赞 30 · 访问量 5937

猜你喜欢

转载自blog.csdn.net/qq_42049496/article/details/102939225