Orange的运维学习日记--25.Linux文件系统基本管理
Orange的运维学习日记–25.Linux文件系统基本管理
识别文件系统和设备
在 Linux 中,存储设备通过块设备文件提供访问。块设备文件存放在 /dev
目录下,操作系统自动创建。挂载前需先格式化设备
常见块设备接口及命名
- SATA/SAS/USB/SCSI:
/dev/sda
、/dev/sdb
… - virtio-blk(虚拟机):
/dev/vda
、/dev/vdb
… - NVMe SSD:
/dev/nvme0n1
、/dev/nvme1n1
… - SD/MMC/eMMC:
/dev/mmcblk0
、/dev/mmcblk1
…
通常会将物理设备划分为多个分区,例如 /dev/sda1
、/dev/sda2
、/dev/nvme0n1p1
,并为每个分区选择不同文件系统或用途
文件系统是操作系统在存储设备或分区上组织和管理文件的方式。要让文件系统的内容可访问,需将其挂载到一个空目录(挂载点)下
查看设备和文件系统
lsblk
查看所有块设备及挂载情况
lsblk
示例输出
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
sr0 11:0 1 13.2G 0 rom
nvme0n1 259:0 0 200G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 199G 0 part ├─rl-root 253:0 0 70G 0 lvm /├─rl-swap 253:1 0 3.9G 0 lvm [SWAP]└─rl-home 253:2 0 125.1G 0 lvm /home
各字段说明
- NAME:设备名称或分区
- SIZE:设备容量
- TYPE:disk、part、lvm、rom 等类型
- MOUNTPOINT:挂载点
- RM:是否可移动设备(1 是可移动)
df
查看已挂载文件系统使用情况
df -hT
示例输出
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 17M 1.9G 1% /run
/dev/mapper/rl-root xfs 70G 6.5G 64G 10% /
/dev/sr0 iso9660 14G 14G 0 100% /dvd
/dev/nvme0n1p1 xfs 1014M 202M 813M 20% /boot
/dev/mapper/rl-home xfs 126G 925M 125G 1% /home
常用选项
-h
:以人类可读方式显示-T
:显示文件系统类型-H
:使用 1000 为单位基数
du
查看目录或文件磁盘使用情况
du -sh /boot
示例输出
140M /boot
常用用法
du /boot
:显示所有子目录大小du -s /boot
:只显示总计du -h
:以可读单位显示
查找大文件案例
在根文件系统中生成一个 4 GB 测试文件
dd if=/dev/zero of=/usr/share/doc/dhclient-4.2.5/bigfile-4G bs=1M count=4096
使用 du
配合 sort
依次定位大目录和大文件
du -sk /* | sort -n
du -sk /usr/* | sort -n
du -sk /usr/share/* | sort -n
du -sk /usr/share/doc/* | sort -n
使用 find
查找系统中超过 100 MB 的文件
find / -size +100M 2>/dev/null
挂载和卸载文件系统
环境准备
添加新的磁盘设备 /dev/sdb
并格式化为 XFS 文件系统
lsblk /dev/sdbmkfs.xfs /dev/sdb
挂载文件系统
mount [-fnrsvw] [-t vfstype] [-o options] device mountpoint
挂载示例
mkdir /datablkid /dev/sdbmount /dev/sdb /data
验证挂载
df -h /datatouch /data/file-{00..09}
ls /data
查看所有挂载
mount | grep '^/dev'
卸载文件系统
umount device|mountpoint
示例
umount /datadf -h /data
卸载失败处理
当卸载时报 “target is busy” 时,需要定位并终止占用进程
lsof
lsof /data
fuser
fuser -m /data
fuser -k -m /data
终止后重新卸载
cd /
umount /data
不同文件系统挂载案例
NTFS
yum install -y epel-release
yum install -y ntfs-3gmkdir /mnt/ntfs
mount -t ntfs-3g /dev/sdc1 /mnt/ntfs
exFAT
yum install -y git pkg-config fuse-devel gcc make autoconf automakegit clone https://github.com/relan/exfat.git
cd exfat
autoreconf --install
./configure
make && make installmount.exfat-fuse /dev/sdc1 /mnt/exfat
基于 ISO 的本地 yum 仓库
mkdir /dvd
mount /dev/sr0 /dvdmkdir /etc/yum.repos.d/old
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/oldcat << 'EOF' > /etc/yum.repos.d/dvd.repo
[BaseOS]
name=BaseOS from DVD
baseurl=file:///dvd/BaseOS
enable=1
gpgcheck=0[AppStream]
name=AppStream from DVD
baseurl=file:///dvd/AppStream
enable=1
gpgcheck=0
EOFyum repolist
yum makecache
yum install -y httpd
查找系统中文件
locate
依赖 mlocate 数据库,需定期执行 updatedb
更新
updatedblocate [OPTION]… [PATTERN]…
常用选项
-b
:只匹配文件名-i
:忽略大小写-c
:输出结果数量-r
:正则匹配
示例
locate httpd.confupdatedb
locate -i PASSWD
locate -b -c PASSWD
locate -r 'http.*conf'
find
在实时文件系统中遍历查找,需读取和执行权限
find [path] [expression] [action]
按文件名
-name
:区分大小写-iname
:忽略大小写
find /etc -name passwd
find /etc -iname passwd
按类型
-type b
:块设备-type c
:字符设备-type d
:目录-type f
:普通文件-type l
:符号链接-type p
:FIFO-type s
:套接字
按属主或属组
-user
/-uid
-group
/-gid
-nouser
、-nogroup
find / -user laoma
find / -nouser -o -nogroup
按权限
-perm mode
-perm -mode
-perm /mode
-readable
、-writable
、-executable
find . -perm 764 -ls
find / -perm -4000
find / -perm /7000
按大小
单位:c
、k
、M
、G
find / -size 10M
find / -size +10G
find / -size -10k
按时间
- 分钟:
-amin
、-cmin
、-mmin
- 天:
-atime
、-ctime
、-mtime
- 新旧:
-newer file
find / -amin -10
按硬链接和 inode
-links n
-inum n
find / -links +3
find / -inum 67160130
组合表达式
- 与:
expr1 expr2
或expr1 -a expr2
- 或:
expr1 -o expr2
- 非:
! expr
find / ! -size -200M 2>/dev/null
执行动作
-delete
-ls
-exec command \;
-exec command {} \;
find / -name PASSWD -delete
find /etc -name passwd -exec echo found {} \;
inks n`
- `-inum n````bash
find / -links +3
find / -inum 67160130
组合表达式
- 与:
expr1 expr2
或expr1 -a expr2
- 或:
expr1 -o expr2
- 非:
! expr
find / ! -size -200M 2>/dev/null
执行动作
-delete
-ls
-exec command \;
-exec command {} \;
find / -name PASSWD -delete
find /etc -name passwd -exec echo found {} \;