Linux 的命令行操作是运维和开发的基本功。本文整理最常用的文件管理和文本处理命令,每个命令附常用用法和典型示例,适合日常翻查。
一、文件目录操作
ls — 列出目录内容
ls # 列出当前目录文件
ls -l # 详细信息(权限、大小、修改时间)
ls -a # 显示隐藏文件(以 . 开头)
ls -lh # 人性化显示文件大小(K/M/G)
ls -lt # 按修改时间排序,最新的在前
ls -lS # 按文件大小排序
ls -R # 递归显示子目录示例: 按时间倒序列出最近修改的 5 个文件
ls -lt | head -6cd — 切换目录
cd /path/to/dir # 切换到绝对路径
cd .. # 返回上一级目录
cd ../.. # 返回上两级
cd ~ # 回到用户家目录
cd - # 回到上一个目录pwd — 显示当前路径
pwd # 输出当前工作目录的绝对路径mkdir — 创建目录
mkdir dir_name # 创建单个目录
mkdir -p a/b/c/d # 递归创建多级目录
mkdir -p project/{src,docs,test,dist} # 批量创建子目录技巧: -p 是最常用的参数,目录已存在也不会报错。
cp — 复制文件或目录
cp file1 file2 # 复制 file1 为 file2
cp file1 file2 dir/ # 复制文件到目录
cp -r dir1/ dir2/ # 递归复制整个目录
cp -a dir1/ dir2/ # 归档复制(保留权限、时间戳)
cp -i file1 file2 # 覆盖前提示确认
cp -v file1 file2 # 显示复制过程示例: 备份配置文件
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bakmv — 移动或重命名
mv file1 file2 # 重命名
mv file dir/ # 移动到目录
mv -i file dir/ # 覆盖前提示
mv -u file dir/ # 仅当源文件更新时才移动rm — 删除文件或目录
rm file # 删除文件
rm -r dir/ # 递归删除目录及其内容
rm -f file # 强制删除,不提示
rm -rf dir/ # 强制递归删除(❗谨慎使用)⚠️ 安全提示:
rm -rf /会删除整个系统!生产环境慎用。建议用rm -i别名。
touch — 创建空文件或更新时间戳
touch newfile.txt # 创建空文件(已存在则更新时间戳)
touch -t 202308010800 file # 设置文件时间为指定日期find — 查找文件
find . -name "*.log" # 按文件名查找
find /var -type f -size +100M # 查找大于 100MB 的文件
find . -mtime -7 # 最近 7 天修改过的文件
find . -type d -empty # 查找空目录
find . -name "*.tmp" -delete # 查找并删除示例: 查找日志文件中包含 "ERROR" 的大文件
find /var/log -name "*.log" -size +10M -exec grep -l "ERROR" {} \;tree — 显示目录树
tree # 显示目录结构树
tree -L 2 # 限制显示深度为 2 层
tree -d # 只显示目录💡 某些系统需安装:
apt install tree/yum install tree
stat — 查看文件详细信息
stat file.txt # 显示文件大小、权限、inode、时间戳等du — 查看磁盘使用量
du -sh dir/ # 查看目录总大小
du -sh * # 查看当前目录下每个项目的大小
du -sh * | sort -rh # 按大小排序(从大到小)二、文件内容查看
cat — 显示文件内容
cat file.txt # 显示全部内容
cat -n file.txt # 显示行号
cat file1 file2 > combined.txt # 合并多个文件less — 分页查看(推荐)
less file.txt # 打开分页查看
# 操作键:
# ↓ / Enter 下一行
# ↑ 上一行
# Space / f 下一页
# b 上一页
# /pattern 搜索
# n / N 下一个/上一个匹配
# g 跳转到开头
# G 跳转到末尾
# q 退出对比: less 比 more 功能更强,支持上下翻页和搜索。
head — 查看文件开头
head file.txt # 显示前 10 行
head -n 20 file.txt # 显示前 20 行
head -c 100 file.txt # 显示前 100 个字节tail — 查看文件末尾
tail file.txt # 显示最后 10 行
tail -n 20 file.txt # 显示最后 20 行
tail -f app.log # 实时跟踪日志输出
tail -100f app.log # 显示最后 100 行并跟踪💡
tail -f是调试日志的利器,Ctrl+C退出跟踪。
wc — 统计行数、单词数
wc -l file.txt # 行数
wc -w file.txt # 单词数
wc -c file.txt # 字符数(字节)示例: 统计当前目录文件数
ls | wc -l三、文本搜索与处理
grep — 文本搜索(核心命令)
grep "pattern" file.txt # 搜索关键字
grep -i "pattern" file.txt # 忽略大小写
grep -r "pattern" /path/ # 递归搜索目录
grep -n "pattern" file.txt # 显示行号
grep -C 3 "pattern" file.txt # 显示匹配行前后各 3 行
grep -v "pattern" file.txt # 反向匹配(不含该模式的)
grep -l "pattern" *.txt # 只显示匹配的文件名
grep -c "pattern" file.txt # 统计匹配行数
grep -E "err(or|or)" file.txt # 扩展正则经典用法:
# 查看日志中所有 ERROR,排除心跳检测
grep "ERROR" app.log | grep -v "heartbeat"
# 查找配置文件中的非注释行
grep -v "^#" /etc/nginx/nginx.conf | grep -v "^$"sed — 流编辑器
sed 's/old/new/' file.txt # 替换每行第一个匹配
sed 's/old/new/g' file.txt # 全局替换(一行内所有匹配)
sed -i 's/old/new/g' file.txt # 直接修改文件
sed -n '10,20p' file.txt # 显示 10-20 行
sed '/pattern/d' file.txt # 删除匹配行示例: 批量替换配置文件
sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_configawk — 文本分析与处理
awk '{print $1}' file.txt # 打印第一列
awk '{print $1, $NF}' file.txt # 打印第一列和最后一列
awk -F: '{print $1}' /etc/passwd # 指定分隔符(:)
awk '$3 > 100 {print $0}' file.txt # 条件过滤
awk '{sum+=$1} END {print sum}' # 求和实用示例:
# 查看各 IP 访问次数(日志分析)
awk '{print $1}' access.log | sort | uniq -c | sort -rn
# 计算平均值
echo "10 20 30 40" | awk '{sum=0; for(i=1;i<=NF;i++) sum+=$i; print sum/NF}'sort — 排序
sort file.txt # 按字典序排序
sort -n file.txt # 按数值排序
sort -r file.txt # 逆序
sort -k 2 file.txt # 按第二列排序
sort -t: -k 3 -n /etc/passwd # 以 : 分隔,按第 3 列数值排序uniq — 去重
uniq file.txt # 去除连续重复行(❗必须先 sort)
sort file.txt | uniq # 先排序再去重
sort file.txt | uniq -c # 统计重复次数
sort file.txt | uniq -d # 只显示重复的行cut — 按列截取
cut -d: -f1 /etc/passwd # 以 : 分隔,取第一列(用户名)
cut -c1-10 file.txt # 取每行前 10 个字符
cut -d' ' -f2- file.txt # 取第二列及之后tr — 字符替换与删除
cat file.txt | tr 'a-z' 'A-Z' # 小写转大写
cat file.txt | tr -d '\r' # 删除 Windows 回车符
cat file.txt | tr -s ' ' # 压缩连续空格为一个diff — 文件比较
diff file1 file2 # 逐行比较
diff -u file1 file2 # 统一格式输出(生成补丁常用)
diff -r dir1/ dir2/ # 递归比较目录xargs — 将输出转为参数
find . -name "*.tmp" | xargs rm # 查找并删除
cat urls.txt | xargs -P 4 curl -O # 并行下载(4个并发)四、综合实战示例
日志分析三板斧
# 统计 500 错误最多的 IP
grep " 500 " access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10
# 统计每小时请求量
awk '{print $4}' access.log | cut -d: -f1,2 | sort | uniq -c
# 查找最近 30 分钟修改的文件
find . -name "*.py" -mmin -30磁盘清理
# 查找大文件
du -sh /* 2>/dev/null | sort -rh | head -10
# 清理旧日志
find /var/log -name "*.log.*" -mtime +30 -delete
# 查看各目录占用
du -sh /home/* | sort -rh配置文件批量修改
# 备份所有 .conf 文件,然后替换配置项
for f in /etc/nginx/conf.d/*.conf; do
cp "$f" "$f.bak"
sed -i 's/worker_connections 1024/worker_connections 2048/' "$f"
done小结: 文件与文本操作是 Linux CLI 最频繁的日常操作。掌握 grep、sed、awk 三剑客可以解决 80% 的文本处理需求。多动手练习,把常用参数记熟,效率会大幅提升。
下一篇将介绍 Linux 系统管理与权限相关命令。