高级工具 #

xargs - 构建命令行 #

基本用法 #

bash
# 将标准输入转换为命令行参数
$ echo "file1.txt file2.txt file3.txt" | xargs rm

# 从文件读取参数
$ cat files.txt | xargs rm

# 每行一个参数
$ find . -name "*.txt" | xargs rm

# 显示要执行的命令
$ echo "file1.txt" | xargs -t rm
rm file1.txt

常用选项 #

bash
# -n 每次执行的参数数量
$ echo "1 2 3 4 5" | xargs -n 2 echo
1 2
3 4
5

# -I 替换字符串
$ find . -name "*.txt" | xargs -I {} mv {} backup/{}

# 使用自定义占位符
$ find . -name "*.txt" | xargs -I FILE mv FILE backup/FILE

# -p 交互模式
$ find . -name "*.tmp" | xargs -p rm

# -t 显示执行的命令
$ find . -name "*.tmp" | xargs -t rm

# -r 如果没有输入则不执行
$ find . -name "*.nonexistent" | xargs -r rm

# -0 以 null 分隔
$ find . -name "*.txt" -print0 | xargs -0 rm

处理特殊字符 #

bash
# 使用 -0 处理包含空格的文件名
$ find . -name "*.txt" -print0 | xargs -0 rm

# 使用 -d 指定分隔符
$ echo "file1.txt:file2.txt:file3.txt" | xargs -d ':' rm

# 使用 -I 处理复杂文件名
$ find . -type f | xargs -I {} echo "Processing: {}"

实用示例 #

bash
# 批量处理文件
$ find . -name "*.jpg" | xargs -I {} convert {} {}.png

# 批量重命名
$ ls *.txt | xargs -I {} mv {} {}.bak

# 并行处理
$ find . -name "*.txt" | xargs -P 4 -I {} process_file {}

# 查找并删除
$ find . -name "*.tmp" -mtime +7 | xargs rm

# 批量下载
$ cat urls.txt | xargs -n 1 -P 4 wget

# 批量执行命令
$ cat servers.txt | xargs -I {} ssh {} 'uptime'

parallel - 并行执行 #

安装 #

bash
# Ubuntu/Debian
$ sudo apt install parallel

# CentOS/RHEL
$ sudo yum install parallel

# macOS
$ brew install parallel

基本用法 #

bash
# 并行执行命令
$ parallel echo ::: 1 2 3 4 5

# 从文件读取
$ parallel -a files.txt echo

# 从标准输入读取
$ cat files.txt | parallel echo

# 指定并行数
$ parallel -j 4 echo ::: {1..10}

# 无限并行
$ parallel -j 0 echo ::: {1..10}

常用选项 #

bash
# -j 指定并行数
$ parallel -j 4 command ::: arg1 arg2 arg3

# --jobs +N 使用 N 个核心
$ parallel --jobs +2 command ::: arg1 arg2

# --load 负载限制
$ parallel --load 50% command ::: arg1 arg2

# --noswap 不使用交换空间
$ parallel --noswap command ::: arg1 arg2

# --progress 显示进度
$ parallel --progress command ::: arg1 arg2

# --eta 显示预计时间
$ parallel --eta command ::: arg1 arg2

# --bar 显示进度条
$ parallel --bar command ::: arg1 arg2

# --keep-order 保持顺序
$ parallel --keep-order echo ::: 3 2 1

# --tag 添加标签
$ parallel --tag echo ::: a b c

参数替换 #

bash
# {} 默认替换
$ parallel echo {} ::: a b c

# {.} 去除扩展名
$ parallel echo {.} ::: file.txt file.jpg

# {/} 只取文件名
$ parallel echo {/} ::: /path/to/file.txt

# {//} 只取目录名
$ parallel echo {//} ::: /path/to/file.txt

# {/.} 文件名去除扩展名
$ parallel echo {/.} ::: /path/to/file.txt

# {#} 任务编号
$ parallel echo {#} {} ::: a b c

# 多个参数源
$ parallel echo {1} {2} ::: a b c ::: 1 2 3

实用示例 #

bash
# 批量转换图片
$ parallel convert {} {.}.png ::: *.jpg

# 批量压缩
$ parallel gzip ::: *.txt

# 批量下载
$ parallel wget ::: url1 url2 url3

# 批量 SSH 执行
$ parallel -a servers.txt ssh {} uptime

# 批量处理文件
$ find . -name "*.txt" | parallel process_file {}

# 并行计算
$ seq 100 | parallel -j 8 'echo {}^2 = $(({}*{}))'

screen - 终端多路复用 #

基本用法 #

bash
# 创建新会话
$ screen

# 创建命名会话
$ screen -S mysession

# 列出会话
$ screen -ls

# 恢复会话
$ screen -r mysession

# 强制恢复
$ screen -d -r mysession

# 终止会话
$ exit
# 或 Ctrl+A, D 分离

常用快捷键 #

text
┌─────────────────────────────────────────────────────────────┐
│                    screen 快捷键                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   Ctrl+A, D       分离会话                                  │
│   Ctrl+A, C       创建新窗口                                │
│   Ctrl+A, N       下一个窗口                                │
│   Ctrl+A, P       上一个窗口                                │
│   Ctrl+A, 0-9     切换到窗口 0-9                            │
│   Ctrl+A, "       窗口列表                                  │
│   Ctrl+A, A       重命名窗口                                │
│   Ctrl+A, K       关闭窗口                                  │
│   Ctrl+A, [       复制模式                                  │
│   Ctrl+A, ?       帮助                                      │
│                                                             │
└─────────────────────────────────────────────────────────────┘

实用示例 #

bash
# 后台运行脚本
$ screen -S deploy
$ ./deploy.sh
# Ctrl+A, D 分离

# 共享会话
# 用户 1
$ screen -S shared
# 用户 2
$ screen -x shared

# 日志记录
$ screen -L -S mysession

# 指定配置文件
$ screen -c ~/.screenrc

tmux - 终端多路复用器 #

安装 #

bash
# Ubuntu/Debian
$ sudo apt install tmux

# CentOS/RHEL
$ sudo yum install tmux

# macOS
$ brew install tmux

基本用法 #

bash
# 创建新会话
$ tmux
$ tmux new -s mysession

# 列出会话
$ tmux ls

# 恢复会话
$ tmux attach -t mysession
$ tmux a -t mysession

# 终止会话
$ tmux kill-session -t mysession

# 终止所有会话
$ tmux kill-server

常用快捷键 #

text
┌─────────────────────────────────────────────────────────────┐
│                    tmux 快捷键                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   会话管理                                                   │
│   Ctrl+B, D       分离会话                                  │
│   Ctrl+B, S       列出会话                                  │
│   Ctrl+B, $       重命名会话                                │
│                                                             │
│   窗口管理                                                   │
│   Ctrl+B, C       创建新窗口                                │
│   Ctrl+B, N       下一个窗口                                │
│   Ctrl+B, P       上一个窗口                                │
│   Ctrl+B, 0-9     切换到窗口 0-9                            │
│   Ctrl+B, ,       重命名窗口                                │
│   Ctrl+B, &       关闭窗口                                  │
│                                                             │
│   分屏                                                       │
│   Ctrl+B, %       垂直分屏                                  │
│   Ctrl+B, "       水平分屏                                  │
│   Ctrl+B, 方向键   切换分屏                                 │
│   Ctrl+B, X       关闭分屏                                  │
│   Ctrl+B, Z       全屏切换                                  │
│   Ctrl+B, {       交换分屏                                  │
│   Ctrl+B, }       交换分屏                                  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

配置文件 #

bash
# ~/.tmux.conf
# 修改前缀键
set -g prefix C-a
unbind C-b

# 启用鼠标
set -g mouse on

# 设置基础索引
set -g base-index 1
setw -g pane-base-index 1

# 分屏快捷键
bind | split-window -h
bind - split-window -v

# 重新加载配置
bind r source-file ~/.tmux.conf

# 状态栏美化
set -g status-bg black
set -g status-fg white

watch - 定期执行命令 #

基本用法 #

bash
# 定期执行命令
$ watch date

# 指定间隔(秒)
$ watch -n 5 date

# 显示差异
$ watch -d date

# 高亮差异
$ watch -d=cumulative date

# 不显示标题
$ watch -t date

# 精确时间
$ watch -n 0.1 date

实用示例 #

bash
# 监控磁盘空间
$ watch -n 5 df -h

# 监控内存
$ watch free -h

# 监控进程
$ watch 'ps aux | grep nginx'

# 监控日志
$ watch tail -n 20 /var/log/syslog

# 监控网络连接
$ watch -n 1 'netstat -an | grep :80 | wc -l'

# 监控文件变化
$ watch -d ls -l

其他实用工具 #

time - 测量命令执行时间 #

bash
# 测量执行时间
$ time sleep 2

real    0m2.001s
user    0m0.001s
sys     0m0.000s

# 输出到文件
$ time -o output.txt sleep 2

# 格式化输出
$ time -f "Time: %E" sleep 2

timeout - 限制命令执行时间 #

bash
# 限制执行时间
$ timeout 5s sleep 10

# 发送信号
$ timeout -s SIGKILL 5s sleep 10

# 保留退出状态
$ timeout --preserve-status 5s sleep 10

yes - 重复输出 #

bash
# 重复输出 y
$ yes | rm -i *.txt

# 重复输出指定字符串
$ yes "Hello" | head -5

# 自动确认
$ yes | cp -i *.txt backup/

小结 #

通过本节学习,你应该掌握:

  1. xargs:构建命令行参数
  2. parallel:并行执行命令
  3. screen:终端多路复用
  4. tmux:高级终端多路复用器
  5. watch:定期执行命令
  6. 其他工具:time、timeout、yes

恭喜你完成了 Linux 命令大全的学习!现在你已经掌握了从基础到高级的 Linux 命令行技能。

最后更新:2026-04-11