识别文件系统和设备
- Linux服务器上的文件是按文件系统层次结构(一个颠倒的目录树)访问的,该文件系统层次结构则是由系统可用的存储设备所提供的文件系统组装而来的。每个文件系统都是一个已格式化的存储设备,可用于存储文件。
- 文件系统和挂载点
-- 要让文件系统的内容在文件系统层次结构中可用,必须将它挂载到一个空目录上,该目录就被称为挂载点。挂载后,如果使用ls列出该目录,可以看到已挂载的文件系统内容,并可以正常访问和使用这些文件。 - 文件系统、存储和块设备
在Linux系统中,对存储设备的低级别访问是由一种称为块设备的特殊类型文件提供的,在挂载这些设备前,必须先使用文件系统对其进行格式化。
-- 块设备文件和其它设备文件存储在/dev目录中
-- 块设备命名规则:
SATA/SAS/USB附加存储:/dev/sda、/dev/sdb...
virtio-blk超虚拟化存储(部分虚拟机):/dev/vda、/dev/vdb...
NVMe附加存储(很多SSD):/dev/nvme0、/dev/nvme1...
SD/NMC/eMMC存储(SD卡):/dev/mmcblk0、/dev/mmcblk1...
很多虚拟机采用较新的virtio-scsi超虚拟化存储:/dev/sd* - 磁盘分区
通常不会将整个存储设备设为一个文件系统。都会划分为更小的区块叫做分区。分区本身就是块设备。在sata附加存储中,第一块磁盘的第一个分区是/dev/sda1,第二块磁盘的第三个分区就是/dev/sdb3,以此类推,超虚拟化设备亦是如此。对于NVMe附加SSD设备命名分区方式不同,第一块磁盘的第一个分区是/dev/nvme0p1,第二块磁盘的第三个分区是/dev/nvme1p3,以此类推,SD或MMC卡采用了类似的命名规则。 - 逻辑卷
整理磁盘和分区的另一种方式是通过逻辑卷管理LVM,通过LVM,一个或多个块设备可以汇集为一个存储池,称为卷组,然后卷组中的磁盘空间被分配到一个或多个逻辑卷,它们的功能等同于物理磁盘的分区。 - 检查文件系统
-- 使用df命令可以对本地或远程文件系统设备以及可用空间大小简要了解
-- 使用du命令可以查看目录树使用的空间
[root@myhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 1.7M 3.8G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 50G 6.8G 44G 14% /
/dev/sda2 1014M 184M 831M 19% /boot
/dev/sda1 1022M 12M 1011M 2% /boot/efi
/dev/mapper/centos-home 50G 203M 50G 1% /home
/dev/mapper/centos-var 200G 61G 140G 31% /var
tmpfs 779M 12K 779M 1% /run/user/42
tmpfs 779M 0 779M 0% /run/user/0
[root@myhost ~]# du -sh /var/
61G /var/
[root@myhost ~]# du -h /home/user
0 /home/user/.mozilla/extensions
0 /home/user/.mozilla/plugins
0 /home/user/.mozilla
4.0K /home/user/.cache/abrt
4.0K /home/user/.cache
0 /home/user/.config/abrt
0 /home/user/.config
4.0K /home/user/.local/share/keyrings
4.0K /home/user/.local/share
4.0K /home/user/.local
12K /home/user/.ssh
40K /home/user
挂载和卸载文件系统
手动挂载文件系统
可移动存储设备上的文件系统需要挂载才能访问。
- 识别块设备
lsblk
- 挂载块设备(已格式化好的块设备为文件系统)
#按设备名称挂载
mount /dev/vdb1 /mnt/data
#按设备UUID挂载
mount UUID="89e16107-da02-4aad-b061-9427241e9235" /mnt/data
- 卸载文件系统
umount /mnt/data
#如果挂载的文件系统正在使用,无法卸载。需要所有进程停止访问挂载点下的数据才能卸载成功
lsof命令列出所给目录所有打开的文件以及访问它们的进程,确定进程后要将进程杀死才能卸载
lsof /mnt/data
locate查找系统中的文件
-
locate
命令根据文件的名称和路径查找文件。这种方式速度比较快,因为是从mlocate数据库中查找这些信息。但是数据库不会实时更新,locate找不到自上次数据库更新以后创建的文件
#locate命令只要用户对文件所在目录有搜索权限即可
[root@myhost ~]# touch /home/kaier/hhhhhh
[root@myhost ~]# locate hhhhhh
[root@myhost ~]# updatedb
[root@myhost ~]# locate hhhhhh
/home/kaier/hhhhhh
#-i选项不区分大小写
[root@myhost ~]# locate -i messages
#-n选项返回搜索结果数量,-n 5就是匹配搜索的前5个
[root@myhost ~]# locate -in 5 passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/root/.vnc/sesman_passwd-root@myhost:10
find查找系统中的文件
find
命令实时搜索文件,通过在文件系统层次结构中执行实时搜索来查找文件,比locate命令慢但是准确率高很多。格式find [path] 条件 关键词
- 根据文件名搜索
[root@myhost ~]# find / -name testdir
/tmp/testdir
[root@myhost ~]# find /etc/ -name passwd
/etc/pam.d/passwd
/etc/passwd
#-i选项不区分大小写
[root@myhost ~]# find / -iname "*messages*"
- 根据所有权或权限搜索
#在目录中搜索有user组拥有的文件
[root@serverb ~]# find /home/user -group user
/home/user
/home/user/.bash_logout
/home/user/.bash_profile
/home/user/.bash_history
/home/user/.bashrc
/home/user/.ssh
/home/user/.ssh/authorized_keys
/home/user/.viminfo
#在目录中搜索有user用户拥有的文件
[root@serverb ~]# find /home/user -user user
/home/user
/home/user/.bash_logout
/home/user/.bash_profile
/home/user/.bash_history
/home/user/.bashrc
/home/user/.ssh
/home/user/.ssh/authorized_keys
/home/user/.viminfo
#在目录中搜索用户id1001的文件
[root@serverb ~]# find /home/user -uid 1001
/home/user
/home/user/.bash_logout
/home/user/.bash_profile
/home/user/.bash_history
/home/user/.bashrc
/home/user/.ssh
/home/user/.ssh/authorized_keys
/home/user/.viminfo
#在目录中搜索组gid1001的文件
[root@serverb ~]# find /home/user -gid 1001
/home/user
/home/user/.bash_logout
/home/user/.bash_profile
/home/user/.bash_history
/home/user/.bashrc
/home/user/.ssh
/home/user/.ssh/authorized_keys
/home/user/.viminfo
#搜索文件所有者和所属组不同的文件
[root@serverb ~]# find / -user root -group mail
find: ‘/proc/2693/task/2693/fd/6’: No such file or directory
find: ‘/proc/2693/task/2693/fdinfo/6’: No such file or directory
find: ‘/proc/2693/fd/5’: No such file or directory
find: ‘/proc/2693/fdinfo/5’: No such file or directory
/var/spool/mail
/var/spool/mail/root
[root@serverb ~]# find / -perm -755
#查找所有有suid权限的文件,并输出到/tmp/suid.txt文件中
[root@serverb ~]# find / -type f -perm -u=s -exec readlink -f {} \; >/tmp/suid.txt
- 根据大小搜索文件
#搜索大小为10M的文件(向上取整)
[root@serverb ~]# find / -size 10M
#搜索大小超过10G的文件
[root@serverb ~]# find / -size +10G
#搜索大小不到10kb的文件
[root@serverb ~]# find / -size -10k
- 根据修改时间搜索文件
#查找十天前修改的文件或目录
find / -mtime 10
#查找120分钟前修改的文件或目录
find / -mmin 120
#查找10天内修改过的文件或目录
find / -mtime -10
- 根据文件类型搜索文件
-- f,表示普通文件
-- d,表示目录
-- l,表示软连接
-- b,表示块设备
[root@serverb ~]# find /etc/ -type f
[root@serverb ~]# find /etc/ -type d
[root@serverb ~]# find / -type l
[root@serverb ~]# find /dev/ -type b
/dev/dm-1
/dev/dm-0
/dev/sda2
/dev/sda1
/dev/sda
/dev/sr0