20个你必须掌握的Linux文件操作命令实战指南
目录
- 📂 基础文件浏览命令
- 🗂️ 目录操作命令
- 📝 文件创建与编辑
- 📋 文件复制与移动
- 🗑️ 文件删除命令
- 🔍 文件查找与搜索
- 👀 文件内容查看
- 🔒 文件权限与属性
- 📦 文件压缩与解压
- 🛠️ 高级文件操作
- 🤖 实战自动化脚本
- 💡 常见问题与最佳实践
- 🚀 现代工具推荐
- ⚡ 性能与安全专栏
1. 📂 基础文件浏览命令
1.1 ls - 列出目录内容
基本语法:
ls [选项] [目录/文件]
常用参数:
-l
:详细信息格式-a
:显示隐藏文件-h
:人性化显示文件大小-t
:按修改时间排序-r
:逆序排列-R
:递归显示子目录
实战案例:
# 基础用法
ls # 列出当前目录文件
ls /home/user # 列出指定目录文件
# 详细信息显示
ls -l # 显示详细信息
ls -la # 显示所有文件(包括隐藏文件)
ls -lh # 人性化显示文件大小
# 排序与过滤
ls -lt # 按修改时间排序
ls -ltr # 按修改时间逆序排序
ls -lS # 按文件大小排序
# 高级用法
ls -R /var/log # 递归显示子目录
ls -1 # 每行显示一个文件
ls *.txt # 显示所有txt文件
ls -d */ # 只显示目录
输出解析:
-rw-r--r-- 1 user group 1024 Nov 15 10:30 file.txt
# 权限 链接数 所有者 组 大小 修改时间 文件名
易混辨析:
ls
只显示文件名,ls -l
显示详细信息,ls -a
显示隐藏文件。ls -R
递归显示,适合目录树查看。
高频面试问答:
Q: 如何只显示当前目录下的所有目录?
A:ls -d */
1.2 pwd - 显示当前工作目录
基本语法:
pwd [选项]
常用参数:
-P
:显示物理路径(不显示符号链接)-L
:显示逻辑路径(默认)
实战案例:
pwd # 显示当前目录
pwd -P # 显示物理路径
echo "当前目录:$(pwd)" # 在脚本中使用
1.3 cd - 切换目录
基本语法:
cd [目录]
特殊符号:
~
:用户主目录-
:上一个工作目录..
:上级目录.
:当前目录
实战案例:
cd /home/user # 切换到绝对路径
cd ../documents # 切换到相对路径
cd ~ # 回到主目录
cd - # 返回上一个目录
cd # 不带参数,回到主目录
# 快速导航技巧
export CDPATH=".:~:~/projects" # 设置cd搜索路径
2. 🗂️ 目录操作命令
2.1 mkdir - 创建目录
基本语法:
mkdir [选项] 目录名
常用参数:
-p
:递归创建多级目录-m
:设置目录权限-v
:显示创建过程
实战案例:
# 基础创建
mkdir project # 创建单个目录
mkdir dir1 dir2 dir3 # 创建多个目录
# 递归创建
mkdir -p project/src/main/java # 创建多级目录
mkdir -p logs/{2023,2024}/{01..12} # 批量创建目录结构
# 设置权限
mkdir -m 755 public_dir # 创建目录并设置权限
mkdir -pv ~/backup/$(date +%Y-%m-%d) # 创建带日期的备份目录
2.2 rmdir - 删除空目录
基本语法:
rmdir [选项] 目录名
常用参数:
-p
:递归删除空的父目录-v
:显示删除过程
实战案例:
rmdir empty_dir # 删除空目录
rmdir -p dir1/dir2/dir3 # 递归删除空目录
rmdir -v temp_* # 删除所有temp开头的空目录
易混辨析:
mkdir
用于创建,rmdir
只能删除空目录,rm -r
可删除非空目录。
高频面试问答:
Q: 如何一次性创建多级目录?
A:mkdir -p a/b/c
3. 📝 文件创建与编辑
3.1 touch - 创建文件或更新时间戳
基本语法:
touch [选项] 文件名
常用参数:
-a
:只更新访问时间-m
:只更新修改时间-t
:指定时间戳-c
:不创建新文件
实战案例:
# 创建文件
touch file.txt # 创建空文件
touch file1.txt file2.txt # 创建多个文件
touch {1..10}.txt # 批量创建文件
# 时间戳操作
touch -t 202311151030 file.txt # 设置特定时间戳
touch -a file.txt # 只更新访问时间
touch -c existing_file # 只更新时间,不创建新文件
# 实用技巧
touch backup_$(date +%Y%m%d).sql # 创建带时间戳的文件
3.2 nano/vim - 文本编辑器
nano基础用法:
nano file.txt # 编辑文件
# Ctrl+O: 保存 Ctrl+X: 退出 Ctrl+K: 剪切行
vim基础用法:
vim file.txt # 编辑文件
# i: 插入模式 Esc: 命令模式 :wq: 保存退出 :q!: 不保存退出
易混辨析:
touch
不会编辑内容,只能创建或更新时间。nano
适合新手,vim
功能强大但学习曲线陡峭。
高频面试问答:
Q: 如何批量创建10个文件?
A:touch {1..10}.txt
4. 📋 文件复制与移动
4.1 cp - 复制文件或目录
基本语法:
cp [选项] 源文件 目标文件
常用参数:
-r
:递归复制目录-p
:保持文件属性-a
:归档模式(等同于-pPR)-u
:只复制更新的文件-v
:显示复制过程-i
:交互式确认
实战案例:
# 基础复制
cp file.txt backup.txt # 复制文件
cp file.txt /backup/ # 复制到目录
# 目录复制
cp -r project/ backup/ # 递归复制目录
cp -a /home/user /backup/ # 完整复制(保持所有属性)
# 高级用法
cp -u *.txt backup/ # 只复制更新的文件
cp -i important.txt backup/ # 交互式确认
cp --backup=numbered file.txt backup/ # 创建编号备份
# 批量操作
cp *.{jpg,png,gif} images/ # 复制多种格式文件
find . -name "*.log" -exec cp {} backup/ \; # 查找并复制
4.2 mv - 移动或重命名文件
基本语法:
mv [选项] 源文件 目标文件
常用参数:
-i
:交互式确认-u
:只移动更新的文件-v
:显示移动过程-b
:创建备份
实战案例:
# 重命名
mv old_name.txt new_name.txt # 重命名文件
mv old_dir new_dir # 重命名目录
# 移动文件
mv file.txt /target/ # 移动文件到目录
mv *.txt documents/ # 移动所有txt文件
# 批量重命名
for file in *.jpeg; do
mv "$file" "${file%.jpeg}.jpg"
done
# 安全移动
mv -i important.txt backup/ # 交互式确认
mv -b config.txt /etc/ # 移动时创建备份
命令 | 主要用途 | 是否递归 | 常见易错点 |
---|---|---|---|
cp | 复制 | -r参数 | 覆盖同名文件 |
mv | 移动/重命名 | - | 目标已存在会覆盖 |
rm | 删除 | -r参数 | -rf极度危险,慎用 |
易混辨析:
cp
复制,mv
移动/重命名,rm
删除。cp -r
递归目录,mv
可跨分区移动。
高频面试问答:
Q: 如何安全地批量移动文件?
A:mv -i *.txt target/
5. 🗑️ 文件删除命令
5.1 rm - 删除文件或目录
基本语法:
rm [选项] 文件/目录
常用参数:
-r
:递归删除目录-f
:强制删除,不提示-i
:交互式确认-v
:显示删除过程
实战案例:
# 基础删除
rm file.txt # 删除文件
rm file1.txt file2.txt # 删除多个文件
# 目录删除
rm -r directory/ # 递归删除目录
rm -rf temp/ # 强制删除目录(危险操作)
# 安全删除
rm -i *.txt # 交互式删除
rm -v backup_* # 显示删除过程
# 高级用法
find . -name "*.tmp" -delete # 查找并删除临时文件
rm -f ~/.cache/* # 清理缓存文件
⚠️ 安全提醒:
# 危险命令,谨慎使用
rm -rf / # 极其危险,会删除整个系统
rm -rf /* # 同样危险
# 安全实践
alias rm='rm -i' # 设置别名,默认交互式
易混辨析:
rm
删除文件,rmdir
只能删除空目录。rm -rf
极度危险,建议设置别名防误删。
高频面试问答:
Q: 如何防止误删重要文件?
A: 设置别名alias rm='rm -i'
,或自建回收站。
6. 🔍 文件查找与搜索
6.1 find - 查找文件和目录
基本语法:
find [路径] [条件] [动作]
常用条件:
-name
:按名称查找-type
:按类型查找(f文件,d目录)-size
:按大小查找-mtime
:按修改时间查找-perm
:按权限查找
实战案例:
# 按名称查找
find . -name "*.txt" # 查找txt文件
find /home -name "config*" # 查找config开头的文件
find . -iname "*.JPG" # 忽略大小写查找
# 按类型查找
find . -type f # 只查找文件
find . -type d # 只查找目录
find . -type l # 查找符号链接
# 按大小查找
find . -size +100M # 查找大于100MB的文件
find . -size -1k # 查找小于1KB的文件
find /var/log -size +50M -delete # 查找并删除大文件
# 按时间查找
find . -mtime -7 # 查找7天内修改的文件
find . -mtime +30 # 查找30天前修改的文件
find . -newer reference.txt # 查找比参考文件新的文件
# 复合条件
find . -name "*.log" -size +10M -mtime +7 # 多条件组合
find . \( -name "*.tmp" -o -name "*.cache" \) -delete # 或条件
# 执行动作
find . -name "*.bak" -exec rm {} \; # 查找并删除
find . -type f -exec chmod 644 {} \; # 查找并修改权限
find . -name "*.txt" -exec grep "error" {} \; # 查找并搜索内容
6.2 locate - 快速文件定位
基本语法:
locate [选项] 模式
实战案例:
locate nginx.conf # 快速定位文件
locate -i mysql # 忽略大小写
locate -n 5 "*.log" # 限制结果数量
updatedb # 更新locate数据库
6.3 which - 查找命令位置
实战案例:
which python # 查找python命令位置
which -a java # 显示所有匹配的路径
6.4 whereis - 查找命令、源码、手册
实战案例:
whereis ls # 查找ls命令相关文件
whereis -b mysql # 只查找二进制文件
命令 | 适用场景 | 实时性 | 速度 |
---|---|---|---|
find | 实时查找 | 实时 | 慢 |
locate | 快速定位 | 非实时 | 快 |
grep | 内容搜索 | 实时 | 快 |
易混辨析:
find
适合复杂条件实时查找,locate
依赖数据库,需updatedb
更新。grep
用于内容搜索,常与find
结合。
高频面试问答:
Q: 如何查找7天内修改的所有txt文件?
A:find . -name "*.txt" -mtime -7
7. 👀 文件内容查看
7.1 cat - 显示文件内容
基本语法:
cat [选项] 文件名
常用参数:
-n
:显示行号-b
:只对非空行显示行号-A
:显示所有字符(包括不可见字符)
实战案例:
cat file.txt # 显示文件内容
cat -n file.txt # 显示行号
cat file1.txt file2.txt # 连接多个文件
cat > new_file.txt # 创建新文件并输入内容
cat >> existing_file.txt # 追加内容到文件
7.2 less/more - 分页查看文件
less命令:
less file.txt # 分页查看文件
# 空格键:下一页 b:上一页 q:退出 /pattern:搜索
more命令:
more file.txt # 分页查看文件
# 空格键:下一页 q:退出
7.3 head - 查看文件开头
基本语法:
head [选项] 文件名
实战案例:
head file.txt # 显示前10行
head -n 20 file.txt # 显示前20行
head -c 100 file.txt # 显示前100个字符
head -n -5 file.txt # 显示除最后5行外的所有行
7.4 tail - 查看文件结尾
基本语法:
tail [选项] 文件名
实战案例:
tail file.txt # 显示最后10行
tail -n 20 file.txt # 显示最后20行
tail -f /var/log/syslog # 实时监控文件变化
tail -F /var/log/app.log # 监控文件,即使文件被重新创建
tail +10 file.txt # 从第10行开始显示
命令 | 主要用途 | 适合大文件 | 备注 |
---|---|---|---|
cat | 直接显示 | 否 | 适合小文件 |
less | 分页浏览 | 是 | 可前后翻页 |
head | 查看开头 | 是 | 默认前10行 |
tail | 查看结尾 | 是 | 支持实时跟踪 |
grep | 搜索内容 | 是 | 支持正则 |
易混辨析:
cat
适合小文件,less
适合大文件分页。tail -f
适合日志实时监控。
高频面试问答:
Q: 如何实时查看日志文件新增内容?
A:tail -f logfile
8. 🔒 文件权限与属性
8.1 chmod - 修改文件权限
基本语法:
chmod [选项] 权限 文件名
权限表示方法:
- 数字方式:755、644、777等
- 符号方式:u+x、g-w、o=r等
实战案例:
# 数字方式
chmod 755 script.sh # 设置为rwxr-xr-x
chmod 644 file.txt # 设置为rw-r--r--
chmod -R 755 directory/ # 递归设置目录权限
# 符号方式
chmod u+x script.sh # 给所有者添加执行权限
chmod g-w file.txt # 移除组的写权限
chmod o=r file.txt # 设置其他用户只读权限
chmod a+r file.txt # 给所有用户添加读权限
# 实用场景
find . -name "*.sh" -exec chmod +x {} \; # 给所有脚本添加执行权限
chmod 600 ~/.ssh/id_rsa # 设置SSH私钥权限
chmod 1777 /tmp # 设置粘滞位
8.2 chown - 修改文件所有者
基本语法:
chown [选项] 所有者[:组] 文件名
实战案例:
chown user file.txt # 修改文件所有者
chown user:group file.txt # 修改所有者和组
chown -R user:group dir/ # 递归修改目录
chown :group file.txt # 只修改组
8.3 chgrp - 修改文件所属组
实战案例:
chgrp group file.txt # 修改文件所属组
chgrp -R group directory/ # 递归修改目录组
命令 | 主要用途 | 递归操作 | 备注 |
---|---|---|---|
chmod | 改权限 | -R参数 | 数字/符号两种方式 |
chown | 改所有者 | -R参数 | 可改组 |
chgrp | 改所属组 | -R参数 | 只改组 |
易混辨析:
chmod
改权限,chown
改所有者,chgrp
改组。chmod 755
常用于目录,chmod 644
常用于文件。
高频面试问答:
Q: 如何递归修改目录及其下所有文件权限?
A:chmod -R 755 dir/
9. 📦 文件压缩与解压
9.1 tar - 打包和解包
基本语法:
tar [选项] 文件名 目录/文件
常用参数:
-c
:创建归档-x
:解压归档-t
:列出归档内容-v
:显示详细过程-f
:指定归档文件名-z
:gzip压缩-j
:bzip2压缩
实战案例:
# 打包
tar -cvf archive.tar directory/ # 打包目录
tar -czvf archive.tar.gz directory/ # 打包并gzip压缩
tar -cjvf archive.tar.bz2 directory/ # 打包并bzip2压缩
# 解包
tar -xvf archive.tar # 解包
tar -xzvf archive.tar.gz # 解压gzip压缩包
tar -xjvf archive.tar.bz2 # 解压bzip2压缩包
# 查看内容
tar -tvf archive.tar # 查看归档内容
tar -tzvf archive.tar.gz # 查看压缩包内容
# 高级用法
tar -czf backup_$(date +%Y%m%d).tar.gz /home/user # 带时间戳备份
tar -xzf archive.tar.gz -C /target/ # 解压到指定目录
tar --exclude="*.log" -czf clean_backup.tar.gz project/ # 排除特定文件
9.2 gzip/gunzip - gzip压缩
实战案例:
gzip file.txt # 压缩文件(原文件被删除)
gzip -k file.txt # 压缩文件(保留原文件)
gunzip file.txt.gz # 解压文件
gzip -r directory/ # 递归压缩目录中的文件
9.3 zip/unzip - zip压缩
实战案例:
zip archive.zip file1.txt file2.txt # 创建zip文件
zip -r archive.zip directory/ # 递归压缩目录
unzip archive.zip # 解压zip文件
unzip -l archive.zip # 查看zip文件内容
unzip archive.zip -d /target/ # 解压到指定目录
命令 | 主要用途 | 是否压缩 | 常见用法 |
---|---|---|---|
tar | 打包/解包 | 可配合 | tar -czvf … |
gzip | 压缩 | 是 | gzip file |
zip | 压缩 | 是 | zip -r … |
unzip | 解压 | - | unzip … |
易混辨析:
tar
可打包多个文件,配合-z
实现压缩。gzip
只能压缩单个文件,常与tar
结合。
高频面试问答:
Q: 如何打包并压缩整个目录?
A:tar -czvf archive.tar.gz dir/
10. 🛠️ 高级文件操作
10.1 ln - 创建链接
基本语法:
ln [选项] 源文件 链接名
实战案例:
ln file.txt hardlink.txt # 创建硬链接
ln -s file.txt symlink.txt # 创建符号链接
ln -s /usr/bin/python3 /usr/local/bin/python # 创建命令链接
10.2 stat - 显示文件详细信息
实战案例:
stat file.txt # 显示文件详细信息
stat -c "%n %s %y" *.txt # 自定义输出格式
10.3 file - 检测文件类型
实战案例:
file * # 检测所有文件类型
file -b image.jpg # 只显示文件类型描述
file -i file.txt # 显示MIME类型
10.4 du - 查看目录大小
基本语法:
du [选项] 目录
实战案例:
du -h directory/ # 人性化显示目录大小
du -sh * # 显示当前目录下各项大小
du -ah directory/ # 显示所有文件大小
du -h --max-depth=1 # 只显示一级子目录大小
10.5 df - 查看磁盘使用情况
实战案例:
df -h # 人性化显示磁盘使用情况
df -i # 显示inode使用情况
df -T # 显示文件系统类型
易混辨析:
ln
默认创建硬链接,ln -s
创建符号链接。du
查看目录大小,df
查看磁盘分区使用。
高频面试问答:
Q: 如何查看当前目录下各文件夹大小?
A:du -sh *
11. 🤖 实战自动化脚本
11.1 日志文件清理脚本
#!/bin/bash
# 清理日志文件脚本
LOG_DIR="/var/log"
BACKUP_DIR="/backup/logs"
DAYS_TO_KEEP=30
# 创建备份目录
mkdir -p "$BACKUP_DIR"
# 查找并压缩旧日志文件
find "$LOG_DIR" -name "*.log" -mtime +$DAYS_TO_KEEP -type f | while read logfile; do
echo "处理文件: $logfile"
# 压缩文件
gzip "$logfile"
# 移动到备份目录
mv "${logfile}.gz" "$BACKUP_DIR/"
echo "已备份: $(basename $logfile)"
done
# 删除超过90天的备份文件
find "$BACKUP_DIR" -name "*.gz" -mtime +90 -delete
echo "日志清理完成"
11.2 文件同步脚本
#!/bin/bash
# 文件同步脚本
SOURCE_DIR="/home/user/documents"
BACKUP_DIR="/backup/documents"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
# 创建增量备份
rsync -av --delete \
--backup --backup-dir="$BACKUP_DIR/deleted_$TIMESTAMP" \
"$SOURCE_DIR/" "$BACKUP_DIR/current/"
# 创建快照
tar -czf "$BACKUP_DIR/snapshot_$TIMESTAMP.tar.gz" \
-C "$BACKUP_DIR" current/
echo "同步完成,快照已创建: snapshot_$TIMESTAMP.tar.gz"
11.3 重复文件查找脚本
#!/bin/bash
# 查找重复文件脚本
TARGET_DIR="${1:-.}"
echo "在目录 $TARGET_DIR 中查找重复文件..."
find "$TARGET_DIR" -type f -exec md5sum {} + | \
sort | \
uniq -d -w 32 | \
while read hash file; do
echo "重复文件: $file (MD5: $hash)"
find "$TARGET_DIR" -type f -exec md5sum {} + | \
grep "^$hash" | \
cut -d' ' -f3-
echo "---"
done
11.4 文件组织脚本
#!/bin/bash
# 按文件类型组织文件脚本
SOURCE_DIR="${1:-.}"
TARGET_DIR="${2:-./organized}"
# 创建目标目录结构
mkdir -p "$TARGET_DIR"/{images,documents,videos,audio,archives,scripts,others}
# 按扩展名分类文件
find "$SOURCE_DIR" -maxdepth 1 -type f | while read file; do
filename=$(basename "$file")
extension="${filename##*.}"
case "${extension,,}" in
jpg|jpeg|png|gif|bmp|svg|webp)
mv "$file" "$TARGET_DIR/images/"
;;
pdf|doc|docx|txt|rtf|odt)
mv "$file" "$TARGET_DIR/documents/"
;;
mp4|avi|mkv|mov|wmv|flv)
mv "$file" "$TARGET_DIR/videos/"
;;
mp3|wav|flac|aac|ogg)
mv "$file" "$TARGET_DIR/audio/"
;;
zip|tar|gz|rar|7z)
mv "$file" "$TARGET_DIR/archives/"
;;
sh|py|js|php|pl)
mv "$file" "$TARGET_DIR/scripts/"
;;
*)
mv "$file" "$TARGET_DIR/others/"
;;
esac
echo "已移动: $filename"
done
echo "文件组织完成"
12. 💡 常见问题与最佳实践
12.1 权限问题解决
# 常见权限问题
ls -la # 检查文件权限
sudo chown -R $USER:$USER /path/to/directory # 修改所有权
find . -type f -exec chmod 644 {} \; # 批量修改文件权限
find . -type d -exec chmod 755 {} \; # 批量修改目录权限
12.2 安全操作实践
# 安全删除实践
alias rm='rm -i' # 设置交互式删除别名
alias cp='cp -i' # 设置交互式复制别名
alias mv='mv -i' # 设置交互式移动别名
# 创建回收站功能
mkdir -p ~/.trash
alias del='mv "$@" ~/.trash/' # 移动到回收站而不是直接删除
# 定期清理回收站
find ~/.trash -mtime +30 -delete # 删除30天前的文件
12.3 性能优化技巧
# 使用并行处理
find . -name "*.txt" -print0 | xargs -0 -P 4 grep "pattern"
# 使用更快的查找工具
fd pattern # 替代find的现代工具
rg pattern # 替代grep的现代工具
# 批量操作优化
# 避免在循环中频繁调用外部命令
# 使用内置命令和shell功能
12.4 文件名处理技巧
# 处理包含空格的文件名
find . -name "* *" -print0 | xargs -0 ls -la
# 批量重命名
rename 's/old/new/' *.txt # 使用rename命令
for file in *.jpeg; do mv "$file" "${file%.jpeg}.jpg"; done
# 处理特殊字符
ls -1 | tr ' ' '_' # 将空格替换为下划线
12.5 备份策略
# 3-2-1备份策略示例
# 3份副本,2种不同介质,1份异地备份
# 本地备份
rsync -av --delete /home/user/ /backup/local/
# 网络备份
rsync -av --delete /home/user/ user@remote:/backup/
# 增量备份
rsync -av --link-dest=/backup/last /home/user/ /backup/$(date +%Y%m%d)/
12.6 监控和日志
# 监控文件变化
inotifywait -m -r -e modify,create,delete /path/to/watch
# 日志文件管理
logrotate /etc/logrotate.conf # 日志轮转
# 磁盘空间监控
df -h | awk '$5 > 80 {print $0}' # 检查使用率超过80%的分区
13. 🚀 现代工具推荐
- fd:更快更友好的find替代品
- rg(ripgrep):超快递归文本搜索,替代grep
- exa:彩色美观的ls替代品
- bat:带语法高亮的cat替代品
示例:
fd "pattern" ./src
rg "TODO" .
exa -lh --tree
bat file.txt
工具 | 传统命令 | 优势 |
---|---|---|
fd | find | 语法简洁,速度快 |
rg | grep | 递归快,支持正则 |
exa | ls | 彩色美观,支持树形 |
bat | cat | 语法高亮,行号 |
14. ⚡ 性能与安全专栏
并行与批量操作
xargs -P
并行处理parallel
高级批量处理- 避免在循环中频繁调用外部命令,优先用shell内置
防误删与安全实践
alias rm='rm -i'
设置交互式删除- 自建回收站:
alias del='mv "$@" ~/.trash/'
- 定期清理回收站:
find ~/.trash -mtime +30 -delete
大文件与高效备份
rsync
增量同步与备份tar
分卷打包dd
处理大文件镜像
监控与自动化
inotifywait
实时监控文件变化logrotate
日志轮转df -h | awk '$5 > 80 {print $0}'
检查磁盘空间
总结
本指南涵盖了20个Linux文件操作的核心命令,并对易混点、现代工具、性能与安全等方面进行了全面优化。建议多实践、多组合,提升效率与安全意识,成为Linux文件管理高手!