Skip to content

文件管理

文件类型

查看文件类型

bash
file file1               # 查看文件类型
file -i file1            # 显示 MIME 类型
file -b file1            # 不显示文件名

Linux 文件类型

类型标识说明示例
-普通文件文本、二进制文件
d目录文件/home
l符号链接软链接
b块设备/dev/sda
c字符设备/dev/tty
p命名管道FIFO
s套接字Unix Socket
bash
ls -l /dev/sda
brw-rw---- 1 root disk 8, 0 Dec 25 12:00 /dev/sda

ls -l /dev/tty
crw-rw-rw- 1 root tty 5, 0 Dec 25 12:00 /dev/tty

链接文件

ln - 创建链接

硬链接

bash
ln file1 file2           # 创建硬链接
ls -li file1 file2       # 查看 inode 号

硬链接特点:

  • 指向同一个 inode
  • 删除原文件不影响链接
  • 不能跨文件系统
  • 不能链接目录

软链接(符号链接)

bash
ln -s file1 file2        # 创建软链接
ln -s /path/to/file link_name
ls -l link_name          # 查看链接指向

软链接特点:

  • 类似 Windows 快捷方式
  • 可以跨文件系统
  • 可以链接目录
  • 原文件删除后链接失效

对比

特性硬链接软链接
inode相同不同
跨文件系统
链接目录
原文件删除仍可用失效

文件属性

stat - 查看文件属性

bash
stat file1               # 查看详细属性
stat -c "%s" file1       # 只显示大小
stat -c "%U %G" file1    # 显示所有者和组

文件时间属性

时间说明
atime访问时间 (Access)
mtime修改时间 (Modify)
ctime状态改变时间 (Change)
bash
ls -lu file1             # 显示 atime
ls -l file1              # 显示 mtime
ls -lc file1             # 显示 ctime

修改时间戳

bash
touch -a file1           # 更新 atime
touch -m file1           # 更新 mtime
touch -d "2023-12-25" file1    # 设置指定日期
touch -r file1 file2     # 使用 file1 的时间

文件内容操作

tee - 同时输出到文件和屏幕

bash
echo "Hello" | tee file1
echo "World" | tee -a file1    # 追加
ls -l | tee output.txt
command 2>&1 | tee log.txt     # 包含错误输出

split - 分割文件

bash
split -b 10M largefile part_         # 按大小分割
split -l 1000 file.txt part_         # 按行数分割
split -d largefile part_             # 数字后缀
split -b 10M largefile part_ -d --additional-suffix=.txt

合并文件:

bash
cat part_* > largefile

truncate - 截断文件

bash
truncate -s 100M file1         # 扩展或截断到100M
truncate -s +10M file1         # 增加10M
truncate -s -10M file1         # 减少10M

文件比较

diff - 比较文件

bash
diff file1 file2               # 比较两个文件
diff -u file1 file2            # 统一格式
diff -r dir1 dir2              # 比较目录
diff -q file1 file2            # 只显示是否不同
diff -y file1 file2            # 并排显示

cmp - 按字节比较

bash
cmp file1 file2                # 比较文件
cmp -l file1 file2             # 显示所有差异
cmp -b file1 file2             # 显示差异字节

md5sum/sha256sum - 校验文件

bash
md5sum file1                   # 计算 MD5
sha256sum file1                # 计算 SHA256
md5sum -c checksum.md5         # 校验文件
sha256sum -c checksum.sha256

生成校验文件:

bash
md5sum file1 file2 > checksum.md5
sha256sum file1 file2 > checksum.sha256

文件搜索内容

grep - 搜索文件内容

bash
grep "pattern" file1           # 搜索内容
grep -i "pattern" file1        # 忽略大小写
grep -r "pattern" dir1/        # 递归搜索
grep -n "pattern" file1        # 显示行号
grep -v "pattern" file1        # 反向匹配
grep -c "pattern" file1        # 统计匹配行数
grep -l "pattern" *.txt        # 只显示文件名
grep -w "word" file1           # 匹配整个单词
grep -A 3 "pattern" file1      # 显示匹配行及后3行
grep -B 3 "pattern" file1      # 显示匹配行及前3行
grep -C 3 "pattern" file1      # 显示匹配行及前后各3行
grep -E "pattern1|pattern2" file1    # 扩展正则
grep --color=auto "pattern" file1    # 高亮显示

grep 正则表达式

bash
grep "^start" file1            # 以 start 开头
grep "end$" file1              # 以 end 结尾
grep "[0-9]" file1             # 包含数字
grep "[a-z]" file1             # 包含小写字母
grep "a\{3\}" file1            # a 出现3次
grep "a\{2,4\}" file1          # a 出现2-4次
grep "a.*b" file1              # a 和 b 之间任意字符
grep -E "a+" file1             # a 出现1次或多次
grep -E "a?" file1             # a 出现0次或1次

文件压缩与归档

tar - 归档文件

bash
tar -cvf archive.tar dir1/           # 创建归档
tar -xvf archive.tar                 # 解压归档
tar -tvf archive.tar                 # 查看归档内容
tar -rvf archive.tar file1           # 追加文件
tar -xvf archive.tar -C /target/     # 解压到指定目录

结合压缩:

bash
tar -czvf archive.tar.gz dir1/       # gzip 压缩
tar -cjvf archive.tar.bz2 dir1/      # bzip2 压缩
tar -cJvf archive.tar.xz dir1/       # xz 压缩
tar -xzvf archive.tar.gz             # 解压 gzip
tar -xjvf archive.tar.bz2            # 解压 bzip2
tar -xJvf archive.tar.xz             # 解压 xz

gzip - gzip 压缩

bash
gzip file1                    # 压缩文件(删除原文件)
gzip -k file1                 # 压缩文件(保留原文件)
gzip -d file1.gz              # 解压
gzip -9 file1                 # 最大压缩比
gzip -1 file1                 # 最快压缩
gunzip file1.gz               # 解压
zcat file1.gz                 # 查看压缩文件内容

zip/unzip - zip 压缩

bash
zip archive.zip file1 file2         # 压缩文件
zip -r archive.zip dir1/            # 压缩目录
zip -e archive.zip file1            # 加密压缩
zip -u archive.zip file1            # 更新压缩包
unzip archive.zip                   # 解压
unzip archive.zip -d /target/       # 解压到指定目录
unzip -l archive.zip                # 查看压缩包内容
unzip -t archive.zip                # 测试压缩包

bzip2 - bzip2 压缩

bash
bzip2 file1                   # 压缩
bzip2 -d file1.bz2            # 解压
bunzip2 file1.bz2             # 解压
bzcat file1.bz2               # 查看内容

xz - xz 压缩

bash
xz file1                      # 压缩
xz -d file1.xz                # 解压
xz -k file1                   # 保留原文件
xzcat file1.xz                # 查看内容

文件系统操作

df - 磁盘空间

bash
df                            # 显示磁盘使用
df -h                         # 人类可读格式
df -T                         # 显示文件系统类型
df -i                         # 显示 inode 使用
df -x tmpfs                   # 排除 tmpfs

du - 目录大小

bash
du                            # 显示目录大小
du -h                         # 人类可读格式
du -sh dir1                   # 显示总大小
du -h --max-depth=1           # 显示一层深度
du -ah                        # 显示所有文件
du -sh *                      # 显示当前目录下各文件大小
du -h --exclude="*.log"       # 排除文件

ln - 创建链接(补充)

bash
ln -sf /new/target link       # 强制更新软链接
readlink link                 # 读取链接目标
readlink -f link              # 获取绝对路径

下一步学习