命令并行

需求 解决方式 复杂示例
固定数量参数传递 xargs -n 2 command printf "a b\nc d\n" | xargs -n 2 echo → 执行 echo a becho c d
自定义参数位置替换 xargs -I {} cat list.txt | xargs -I {} cp {} /backup/{} → 每行替换 {} 为文件名
多列参数传递 xargs -n 2 sh -c 'cmd "$1" "$2"' _ cat pairs.txt | xargs -n 2 sh -c 'cp "$1" "$2"' _ → 每行两个字段作为源和目标
调试查看命令执行 xargs -t cat files.txt | xargs -t rm → 执行前打印实际命令,如 rm file1
并行执行任务 xargs -P 4 cat pairs.txt | xargs -n 2 -P 4 sh -c 'cp "$1" "$2"' _ → 并行执行 4 个复制任务

一、用户管理

1. 用户与组管理

  • useradd <用户名>:添加新用户
  • passwd <用户名>:设置或修改用户密码
  • userdel <用户名>:删除用户
  • usermod <选项> <用户名>:修改用户信息(如组、家目录、登录 shell)
  • groupadd <组名>:创建新用户组
  • groupdel <组名>:删除用户组
  • groups <用户名>:查看用户所属组
1
2
3
4
5
6
7
8
9
10
11
12
usermod -aG sudo alice      # 将用户 alice 添加到 sudo 组
usermod -d /home/newhome alice # 修改 alice 的家目录
usermod -s /bin/bash alice # 修改登录 shell 为 bash

groupadd developers # 创建一个名为 developers 的用户组

chmod 755 script.sh # 文件拥有者可读写执行,其他人可读执行
chmod u+x program.sh # 给用户增加执行权限

chown alice:developers /var/www/index.html # 修改文件所有者为 alice,所属组为 developers

chgrp developers project.log # 修改文件所属组为 developers

2. 用户身份与权限

  • id <用户名>:查看用户 UID、GID 信息
  • su <用户名>:切换用户身份
  • sudo <命令>:以管理员权限执行命令
  • chmod <权限> <文件>:修改文件权限
  • chown <用户:组> <文件>:修改文件所有者
  • chgrp <组> <文件>:修改文件所属组

二、进程管理

1. 查看进程

  • ps:查看当前终端的进程
    • 常用参数:
      • ps -ef:查看系统中所有进程
      • ps aux:查看所有进程的详细信息
  • top:动态显示进程状态
  • htop:更友好的交互式进程监控(需安装)
  • pgrep <关键字>:按名称搜索进程 ID

2. 控制进程

  • kill <PID>:结束指定进程
  • kill -9 <PID>:强制终止进程
  • pkill <进程名>:按名称终止进程
  • jobs:查看后台任务
  • bg:将任务放入后台
  • fg:将任务调回前台

三、网络管理

1. 网络信息查看

  • ifconfig:查看或配置网络接口(旧命令)
  • ip addr:查看 IP 地址信息
  • ip link:查看网络接口状态
  • ip route:查看路由表
  • ping <主机>:测试网络连通性
  • traceroute <主机>:跟踪数据包路径
  • netstat -tuln:查看监听端口
  • ss -tuln:替代 netstat 的现代命令
  • curl <URL> / wget <URL>:测试网络下载或接口请求

2. 网络服务与连接

  • scp <源> <目标>:在主机间复制文件
  • ssh <用户>@<主机>:远程登录
  • ftp <主机>:FTP 连接
  • nmap <主机>:端口扫描(需安装)
1
2
3
4
5
6
scp file.txt user@192.168.1.10:/home/user/    # 上传文件到远程主机
scp user@192.168.1.10:/home/user/file.txt . # 从远程主机下载文件到当前目录


ssh alice@192.168.1.10 # 以 alice 用户身份登录远程主机
ssh -p 2222 root@server.example.com # 使用自定义端口 2222 登录远程服务器

四、文本格式化与处理

1. 基本文本操作

  • cat <文件>:查看文件内容
  • tac <文件>:倒序显示文件内容
  • head -n <行数> <文件>:显示文件前 N 行
  • tail -n <行数> <文件>:显示文件后 N 行
  • less <文件> / more <文件>:分页查看文件

2. 文本搜索与筛选

  • grep <模式> <文件>:搜索匹配的行
    • 常用参数:
      • -i:忽略大小写
      • -v:反向匹配
      • -r:递归搜索目录
  • awk '{print $1, $2}' <文件>:字段提取与格式化输出
  • sed 's/旧/新/g' <文件>:流编辑器替换内容
1
2
3
4
5
6
awk '{print $1, $3}' /etc/passwd     # 输出每行的第1和第3个字段
awk -F: '{print $1}' /etc/passwd # 指定分隔符为冒号,输出用户名

sed 's/error/ERROR/g' logfile.txt # 将所有 "error" 替换为 "ERROR"
sed -i 's/localhost/127.0.0.1/g' config.conf # 直接修改文件内容

3. 排序与统计

  • sort <文件>:排序
  • uniq <文件>:去重
  • wc <文件>:统计行数、单词数、字符数
1
wc -l *.log            # 统计当前目录下所有日志文件的行数

五、管道与重定向

1. 标准输入输出

  • >:重定向输出到文件(覆盖)
  • >>:重定向输出到文件(追加)
  • <:从文件读取输入
  • 2>:重定向错误输出
  • &>:同时重定向标准输出和错误输出

2. 管道操作

  • command1 | command2:将前一命令输出作为后一命令输入
    • 示例:
      • ps aux | grep nginx:筛选 nginx 进程
      • cat file | grep "error" | sort | uniq

六、多参数与组合命令

1. 多参数命令

  • ls -alh:显示详细信息并以人类可读格式输出
  • tar -czvf archive.tar.gz dir/:打包压缩
  • find /path -type f -name "*.log":查找特定文件

2. 逻辑运算与多命令执行

  • command1 && command2:前者成功后执行后者
  • command1 || command2:前者失败后执行后者
  • command1; command2:顺序执行两条命令
  • ():在子 Shell 中执行命令组
  • { command1; command2; }:在当前 Shell 中执行命令组