Linux 常用命令整理(一):文件与文本操作

2023-08-19 Linux 运维

Linux 的命令行操作是运维和开发的基本功。本文整理最常用的文件管理和文本处理命令,每个命令附常用用法和典型示例,适合日常翻查。

一、文件目录操作

ls — 列出目录内容

ls                    # 列出当前目录文件
ls -l                 # 详细信息(权限、大小、修改时间)
ls -a                 # 显示隐藏文件(以 . 开头)
ls -lh                # 人性化显示文件大小(K/M/G)
ls -lt                # 按修改时间排序,最新的在前
ls -lS                # 按文件大小排序
ls -R                 # 递归显示子目录

示例: 按时间倒序列出最近修改的 5 个文件

ls -lt | head -6

cd — 切换目录

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.bak

mv — 移动或重命名

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_config

awk — 文本分析与处理

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 系统管理与权限相关命令。