Skip to content

文件管理

文件类型

file - 查看文件类型

bash
file file1                      # 查看文件类型
file -I file1                   # 显示 MIME 类型
file -b file1                   # 不显示文件名
file -z compressed.gz           # 查看压缩文件内容

macOS 文件类型

类型标识说明示例
-普通文件文本、二进制文件
d目录文件/Users
l符号链接软链接
b块设备/dev/disk0
c字符设备/dev/tty
p命名管道FIFO
s套接字Unix Socket

链接文件

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                 # 查看链接指向

软链接特点:

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

文件属性

stat - 查看文件属性

bash
stat file1                      # 查看详细属性
stat -f "%z" file1              # 只显示大小
stat -f "%Su %Sg" file1         # 显示所有者和组
stat -f "%Sm" file1             # 显示修改时间
stat -f "%N: %z bytes" file1    # 自定义格式

文件时间属性

时间说明
atime访问时间 (Access)
mtime修改时间 (Modify)
ctime状态改变时间 (Change)
birthtime创建时间
bash
ls -lu file1                    # 显示 atime
ls -l file1                     # 显示 mtime
ls -lc file1                    # 显示 ctime
stat -f "%SB" file1             # 显示创建时间

修改时间戳

bash
touch -a file1                  # 更新 atime
touch -m file1                  # 更新 mtime
touch -t 202312251200 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 -b 10M largefile part_ -d # 数字后缀

合并文件:

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             # 并排显示
diff --suppress-common-lines file1 file2  # 只显示差异

cmp - 按字节比较

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

校验文件

bash
md5 file1                       # 计算 MD5
shasum file1                    # 计算 SHA1
shasum -a 256 file1             # 计算 SHA256
shasum -a 512 file1             # 计算 SHA512
shasum -c checksum.sha256       # 校验文件

生成校验文件:

bash
md5 file1 file2 > checksum.md5
shasum -a 256 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 -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                  # 查看内容

ditto - macOS 复制工具

bash
ditto src dst                   # 复制目录
ditto -c -k src archive.zip     # 创建 zip 压缩包
ditto -x -k archive.zip dst     # 解压 zip
ditto --hfsCompression src dst  # 使用 HFS+ 压缩

文件系统操作

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"         # 排除文件

磁盘工具

bash
diskutil list                   # 列出所有磁盘
diskutil info disk0             # 磁盘信息
diskutil eraseDisk JHFS+ NewDisk disk0  # 格式化磁盘
diskutil verifyVolume /         # 验证卷
diskutil repairVolume /         # 修复卷

扩展属性

xattr - 扩展属性管理

bash
xattr file1                     # 列出属性
xattr -l file1                  # 显示属性值
xattr -w com.my.attr "value" file1  # 设置属性
xattr -d com.my.attr file1      # 删除属性
xattr -c file1                  # 删除所有属性
xattr -cr dir1                  # 递归删除所有属性

隔离属性

macOS 下载的文件会有隔离属性:

bash
xattr -d com.apple.quarantine file1  # 移除隔离属性
xattr -cr /Applications/app.app      # 移除应用隔离属性

下一步学习