Linux命令实战笔记:文件操作与磁盘管理核心技巧
文件类型识别与链接操作
file命令详解
file命令用于判断文件的实际类型和编码格式,其基本用法为:
file 目标文件
# 输出示例
example.txt: ASCII text
常用选项包括:
- -b:仅显示文件类型,不包含文件名
- -i:输出MIME类型信息(如text/plain; charset=utf-8)
- -F:自定义文件名与类型之间的分隔符,避免在文本处理时与冒号冲突
- -L:查看符号链接指向的实际文件信息
- -f:从指定文本文件中读取文件列表,批量检测文件类型
- -z:检查压缩包内部的原始文件信息
ln链接管理
Linux链接分为硬链接和软链接。硬链接共享相同的inode,修改任一文件都会同步;软链接则存储目标文件的路径。
创建链接:
# 硬链接(共享同一数据块)
ln 源文件 链接名
# 软链接(类似快捷方式)
ln -s 源文件 链接名
# 查看inode号确认链接关系
ls -i 文件名
硬链接的限制:
1. 不能跨文件系统
2. 普通用户无法对目录创建硬链接(防止目录循环引用)
使用ls -l可查看文件链接数,第二列数字表示链接数量:
ls -l 文件名
-rw-r--r-- 2 user group 123 Aug 10 10:00 example.txt
当需要对已存在的软链接重新定义时,使用ln -snf强行覆盖。对于目录软链接的重复定义,-n选项可以避免在目录下生成嵌套循环。
文件搜索与筛选
find基础用法
find命令提供了强大的文件搜索能力,语法格式:
find [搜索路径] -name "文件名模式"
常用选项:
- -type:按类型过滤(d目录,f普通文件,l符号链接等)
- -regex:使用正则表达式匹配路径
- -user/-group:按所有者或所属组搜索
- -perm:按权限搜索(如-perm 755)
- -exec:对找到的每个文件执行特定命令,使用{}代表文件,以\;结尾
- -maxdepth:限制搜索目录深度
实例:删除一天前的mysql二进制日志
find . -regex 'binlog\.[0-9]+' -a -mtime +1 -exec rm -f {} \;
按时间搜索
时间参数含义:
- amin/cmin/mmin:按分钟计访问/状态变化/修改时间
- atime/ctime/mtime:按天计
# 最近10分钟内修改的文件
find -mmin -10
# 超过2天未访问的文件
find -atime +2
# 比指定文件更新修改的文件
find -newer ref_file
高级用法:-newerXY比较不同文件的时间属性
# 查找访问时间比ref_file修改时间更新的文件
find -neweram ref_file
# 查找访问时间晚于指定时刻的文件
find -newerat '2024-01-01 00:00:00'
按文件大小搜索
# 大于50MB的文件
find -size +50M
# 小于1KB的文件
find -size -1k
# 精确等于100MB的文件
find -size 100M
单位说明:c表示字节,w表示2字节字,b表示512字节块,k/M/G分别对应千字节、兆字节、吉字节。
逻辑运算与正则
多个条件组合:
- !expr:取反
- expr1 -a expr2:逻辑与(默认行为)
- expr1 -o expr2:逻辑或
- \( expr \):提高优先级,括号需转义
正则匹配需指定类型:
# 使用posix-extended正则
find -regextype posix-extended -regex '.*\.(txt|md)$'
磁盘空间分析与文件压缩
du命令实战
du是检查磁盘占用空间的核心工具:
# 人类可读格式
du -sh 目录/
# 显示当前目录下各子项的占用,按大小排序
du -sh * | sort -hr
常用参数:
- -s:只显示总计
- -c:在末尾显示总量
- -d:控制目录深度(如-d 1)
- --exclude:排除匹配模式
注意:du显示的是磁盘占用块大小,而ls -l显示的是文件逻辑大小。对于稀疏文件,ls显示的大小可能远大于du实际占用量。
文件压缩工具集
gzip基础:
# 压缩(自动删除源文件)
gzip 文件1 文件2
# 解压
gzip -d 文件.gz
# 保留源文件
gzip -c 源文件 > 输出.gz
tar配合压缩:
# 打包并压缩
tar -czvf 输出.tar.gz 文件1 目录1
# 解包(自动识别压缩格式)
tar -xzvf 包.tar.gz
# 仅解压包中的特定文件
tar -xzvf 包.tar.gz 指定路径文件
参数说明:-c创建包,-x解包,-z调用gzip,-j调用bzip2,-v显示过程,-f指定文件名(需放在最后)。
压缩级别控制:
# gzip:-1到-9,默认-6
gzip -9 大文件
# bzip2:比gzip压缩率更高的替代方案
bzip2 文件
bunzip2 文件.bz2
# zip:保留源文件且支持目录
zip -r 压缩包.zip 源目录
unzip -d 目标目录 压缩包.zip
dd命令的高级应用
数据备份与恢复
# 完整备份磁盘
dd if=/dev/sda of=/data/sda.img
# 备份分区
dd if=/dev/sda2 of=/data/sda2.img bs=4K
# 备份MBR(主引导记录,共512字节)
dd if=/dev/sda of=/data/mbr_backup.img count=1 bs=512
# 从备份文件恢复
dd if=/data/sda.img of=/dev/sdb
结合压缩:
# 备份并压缩
dd if=/dev/sda | gzip > /data/sda.img.gz
# 恢复压缩备份
gzip -dc /data/sda.img.gz | dd of=/dev/sdb
性能测试与清理
# 测试写性能(向磁盘写入1GB数据)
dd if=/dev/zero of=/tmp/test_file bs=1M count=1024
# 测试读性能
dd if=/tmp/test_file of=/dev/null bs=64k
# 使用随机数据覆盖磁盘(安全擦除)
dd if=/dev/urandom of=/dev/sda