Linux 常用命令速查

覆盖 80% 日常运维与开发场景,示例默认以 bash 为例;涉及需 root 的命令以 sudo 标注。

基础入门

  • 查看/切换目录
    • pwd 显示当前目录
    • ls [-alh] 列目录
    • cd path 切换目录,cd - 返回上一次目录
    • tree [-L 2] 目录树(如未装:sudo apt install tree / brew install tree)
  • 文件/目录操作
    • touch file 新建/更新时间戳
    • mkdir [-p] dir 创建目录
    • cp [-r] src dst 复制;-a 保留属性
    • mv src dst 移动/改名
    • rm [-rf] path 删除;谨慎使用 -rf
    • ln file link 硬链接;ln -s target link 软链接
  • 查看文件
    • cat file 拼接/输出
    • less file 分页查看(q 退出,/ 搜索)
    • head -n 20 file 前 N 行;tail -n 20/ -f 末尾/跟随
    • wc [-lwm] 统计行/词/字符
  • 重定向与管道
    • cmd > out 覆盖输出;>> 追加
    • cmd 2> err 将错误输出重定向
    • cmd1 | cmd2 管道传递
    • tee [-a] file 同时输出到屏幕与文件

权限与用户

  • 权限
    • chmod 755 file 数字权限;chmod u+x script 给拥有者加执行
    • chown user[:group] file 修改属主/属组
    • chgrp group file 修改属组
    • umask 查看/设置默认掩码
  • 用户/身份
    • whoami 当前用户;id 查看 UID/GID
    • who / w 查看登录会话
    • su - user 切换用户;sudo cmd 以管理员执行
    • passwd [user] 修改密码

查找与定位

  • which cmd 可执行文件路径
  • whereis name 二进制/源码/手册
  • find path -name "*.log" -type f 按名称/类型查找
  • find path -size +100M -mtime -3 大小/时间
  • grep -R "keyword" path 递归搜索文本;-n 显示行号,-i 忽略大小写,-E 扩展正则

文本处理三剑客与常用工具

  • grep 过滤:cat access.log | grep -E "(200|304)" | grep -v "health"
  • sed 替换:sed -E 's/foo/bar/g' file(-i 原地修改)
  • awk 取列/计算:awk '{print $1, $3}' file;awk -F, '{sum+=$2} END{print sum}' data.csv
  • sort 排序:sort -n 按数字;-r 倒序;-u 去重
  • uniq 去重/计数:sort file | uniq -c | sort -nr
  • cut 切列:cut -d, -f2-4 file.csv
  • tr 转换:tr '[:lower:]' '[:upper:]'
  • xargs 参数化:cat list.txt | xargs -I{} echo {}

归档与压缩

  • tar -czf app.tgz dir/ 打包压缩(.tgz/.tar.gz)
  • tar -xzf app.tgz -C /dst 解压到目录
  • gzip file 压缩单文件;gunzip file.gz 解压
  • zip -r a.zip dir/;unzip a.zip

网络与传输

  • curl
    • curl -I https://example.com 仅请求头
    • curl -sSL https://… | bash 静默/跟随跳转
    • curl -X POST -H 'Content-Type: application/json' -d '{"a":1}' https://example.com
  • wget -O out.bin URL 下载
  • ping -c 4 host 测通
  • traceroute host 路由跟踪(mac: brew install traceroute)
  • DNS:nslookup domain / dig domain +short
  • 端口/连接
    • ss -lntp 监听 TCP 端口(或 netstat -lntp)
    • lsof -i :8080 查看端口占用
  • 远程与同步
    • ssh user@host [-p 22] 远程登录
    • scp [-P 22] file user@host:/path 复制
    • rsync -av --progress src/ user@host:/dst/ 增量同步

进程与系统

  • 进程
    • ps aux | grep name 查进程
    • top / htop 交互式监控(mac: brew install htop)
    • kill [-9] PID 结束进程;pkill -f pattern 按名杀
  • 资源与磁盘
    • df -h 磁盘使用;
    • du -sh dir/ 目录体积;
    • du -sh * | sort -h
    • free -h 内存(mac 用 vm_stat)
    • uptime 运行时间与负载
  • 系统信息
    • uname -a 内核;
    • cat /etc/os-release 发行版
    • dmesg | tail 查看内核日志
    • journalctl -u service 查看 systemd 日志

服务与启动项

  • systemd(大多数现代发行版)
    • sudo systemctl status nginx
    • sudo systemctl start|stop|restart nginx
    • sudo systemctl enable|disable nginx 开机自启
  • 传统 service
    • sudo service nginx status|start|stop|restart

软件包管理(按发行版)

  • Debian/Ubuntu:apt
    • sudo apt update && sudo apt install pkg
    • apt search name;apt show pkg
  • RHEL/CentOS:yum/dnf
    • sudo yum install pkg 或 sudo dnf install pkg
  • Arch:pacman -S pkg
  • openSUSE:zypper in pkg
  • macOS:brew install pkg(Homebrew)

磁盘与挂载

  • lsblk 列块设备
  • mount | column -t 查看挂载;sudo mount /dev/sdb1 /mnt
  • sudo umount /mnt 卸载
  • fdisk -l /dev/sdb 分区;mkfs.ext4 /dev/sdb1 格式化(谨慎)

定时与时间

  • date '+%F %T' 当前时间
  • timedatectl 查看/设置时区:sudo timedatectl set-timezone Asia/Shanghai
  • crontab -e 编辑定时任务;crontab -l 查看
    • 示例:每日 2:30 备份:
      • 30 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

环境变量与 Shell

  • 查看/设置
    • env 列出所有;echo "$PATH"
    • export NAME=value 临时变量(当前会话)
    • source ~/.bashrc 使更改生效
  • 常见初始化文件
    • ~/.bashrc、~/.bash_profile、~/.profile、~/.zshrc

账号与组

  • sudo useradd -m user 创建用户;sudo passwd user 设密码
  • sudo usermod -aG sudo user 加 sudo 权限
  • groups user 查看组;sudo groupadd dev 新建组
  • sudo userdel -r user 删除用户及主目录

SSH 常用

  • 生成密钥:ssh-keygen -t ed25519 -C "you@example.com"
  • 分发公钥:ssh-copy-id user@host
  • 客户端配置:~/.ssh/config
  1. Host mybox
  2. HostName 1.2.3.4
  3. User ubuntu
  4. Port 22
  5. IdentityFile ~/.ssh/id_ed25519
bash复制

后台与会话管理

  • 在后台运行:cmd &;
  • 脱离终端:nohup cmd > out.log 2>&1 &
  • 查看/控制作业:jobs / fg %1 / bg %1
  • 终端复用:
    • tmux new -s sess;
    • tmux attach -t sess(或 screen)

实用组合示例

  • 找到占用空间最大的 20 个目录/文件:
  1. du -xhd1 / | sort -h | tail -n 20
bash复制
  • 实时查看并高亮错误日志:
  1. tail -F /var/log/app.log | grep --line-buffered -E "ERROR|WARN"
bash复制
  • 批量替换文件中的字符串:
  1. find . -type f -name "*.conf" -print0 | xargs -0 sed -i '' -e 's/OLD/NEW/g'
bash复制
  • 导出监听端口列表:
  1. ss -lntp | tee ports.txt
bash复制

权限速记

  • rwx -> 读(4)/写(2)/执行(1)
  • 755 = 拥有者 rwx(7),组与其他 rx(5)
  • 644 = 拥有者 rw(6),组与其他 r(4)

故障排查思路(简)

  1. 服务不可用 → 进程(top/ps) → 端口(ss/lsof) → 日志(journalctl/应用日志)
  2. 慢 → 负载(uptime)、CPU/内存(top)、IO(iostat)、网络(ss)
  3. 磁盘满 → df/du 定位 → 日志轮转/清理 → 持续观察

常用命令详解与示例

以下挑选常见高频命令,提供可复制示例与参数说明(GNU/Linux 与 macOS BSD 工具在少数参数上略有差异,已备注)。

ls 与 cd

  • 列出详细列表,并以易读单位显示大小:
  1. # -a 显示隐藏文件;-l 长列表;-h 人类可读大小
  2. ls -alh
bash复制
  • 按修改时间倒序查看最近文件:
  1. # -t 按修改时间;-r 反序(最晚在底部);-h 人类可读
  2. ls -ltrh
bash复制
  • 快速目录跳转:
  1. cd - # 返回上一次目录
  2. cd ~ # 回到用户主目录
  3. cd .. # 上一级目录
bash复制

cp / mv / rm

  • 递归复制保持属性(时间、权限、链接):
  1. # -a 等价 -dR --preserve=all(GNU);在 mac 可用 -R 保留层级
  2. cp -a src/ dst/
bash复制
  • 移动或重命名:
  1. mv old-name.txt new-name.txt
  2. mv ./build/* /var/www/app/
bash复制
  • 强制递归删除(高危):
  1. rm -rf -- *.tmp
  2. # -r 递归;-f 忽略不存在并不提示;-- 停止解析选项以防文件名以 - 开头
bash复制

find(查找与执行)

  • 查找 7 天前生成且超过 10MB 的日志并删除:
  1. # -type f 文件;-mtime +7 超过 7 天;-size +10M 大于 10MB;-delete 直接删除(谨慎)
  2. find /var/log -type f -name "*.log" -mtime +7 -size +10M -delete
bash复制
  • 与 xargs 配合零字节分隔,安全处理含空格文件名:
  1. # -print0 以 \0 结尾;xargs -0 按 \0 解析
  2. find . -type f -name "*.jpg" -print0 | xargs -0 -I{} mv {} images/
bash复制
  • 限制搜索深度并执行命令:
  1. # -maxdepth 2 最多两级;-exec ... \; 对结果逐个执行
  2. find . -maxdepth 2 -type d -name "node_modules" -exec du -sh {} \;
bash复制

grep(文本过滤)

  • 递归搜索并显示行号、忽略大小写、着色:
  1. # -R 递归;-i 忽略大小写;-n 行号;--color 着色
  2. grep -Rin --color=auto "error" ./logs
bash复制
  • 使用扩展正则匹配多模式并排除某些行:
  1. # -E 扩展正则;-v 反选(排除)
  2. grep -E "(ERROR|WARN)" app.log | grep -v "health"
bash复制

sed(流编辑器)

  • 原地替换字符串(Linux):
  1. sed -i 's/foo/bar/g' config.ini
  2. # -i 原地修改;s///g 全局替换
bash复制
  • 原地替换(macOS BSD sed 需提供备份后缀,空串代表不保留备份):
  1. sed -i '' -e 's/foo/bar/g' config.ini
bash复制
  • 仅打印 1~10 行:
  1. # -n 静默;p 打印匹配范围
  2. sed -n '1,10p' README.md
bash复制

awk(列处理与聚合)

  • 统计 CSV 第二列求和:
  1. # -F, 指定分隔符;$2 第二列;END 收尾时输出结果
  2. awk -F, '{sum+=$2} END{print sum}' data.csv
bash复制
  • 跳过表头并输出行号、第一和第三列:
  1. # NR 当前行号;$1/$3 第1/3列
  2. awk 'NR>1{print NR, $1, $3}' table.txt
bash复制

sort / uniq / cut / tr 组合

  • 统计 CSV 第二列去重计数并倒序:
  1. # cut -d 分隔符 -f 目标列;uniq -c 计数;sort -n 数字;-r 反序
  2. cut -d, -f2 data.csv | sort | uniq -c | sort -nr | head
bash复制
  • 转大写:
  1. tr '[:lower:]' '[:upper:]' < words.txt > words_upper.txt
bash复制

tar(打包/解包)

  • 压缩目录:
  1. # c 创建;z gzip;v 详情;f 文件名
  2. tar czvf app.tgz app/
bash复制
  • 解压到指定目录:
  1. # x 解包;-C 目标目录
  2. tar xzvf app.tgz -C /opt/app
bash复制

curl(HTTP 调试下载)

  • 显示响应头:
  1. # -I 仅请求头
  2. curl -I https://example.com
bash复制
  • 跟随跳转、静默、失败非 0 并展示错误:
  1. # -f 失败时退出非零;-s 静默;-S 显示错误;-L 跟随 3xx
  2. curl -fsSL https://example.com/install.sh -o install.sh
bash复制
  • 发送 JSON:
  1. # -X 指定方法;-H 请求头;-d 请求体(默认 application/x-www-form-urlencoded)
  2. curl -X POST -H 'Content-Type: application/json' \
  3. -d '{"name":"jinbo"}' https://api.example.com/users
bash复制

ssh / scp / rsync(远程与同步)

  • 指定私钥与端口登录:
  1. # -i 私钥;-p 端口
  2. ssh -i ~/.ssh/id_ed25519 -p 2222 user@host
bash复制
  • 压缩复制文件夹:
  1. # -r 递归;-C 压缩
  2. scp -r -C ./dist user@host:/var/www/app
bash复制
  • 增量同步并删除目标多余文件:
  1. # -a 归档;-v 详情;-z 压缩;--delete 目标删除多余;--exclude 排除
  2. rsync -avz --delete --exclude 'node_modules' ./ user@host:/srv/app/
bash复制

lsof / ss(端口与连接)

  • 查看 8080 被哪个进程监听:
  1. # -i 过滤协议与端口;-sTCP:LISTEN 监听态;-n 不解析主机名;-P 不解析端口名
  2. lsof -iTCP:8080 -sTCP:LISTEN -nP
bash复制
  • 列出本机监听 TCP 端口:
  1. # -l 监听;-n 不解析;-t TCP;-p 进程
  2. ss -lntp
bash复制

ps / top / htop(进程)

  • 全量进程并筛选:
  1. # a 所有终端;u 用户格式;x 无控制终端
  2. ps aux | grep node | grep -v grep
bash复制
  • top 常用按键:P 按 CPU,M 按内存,1 展开多核;htop 交互更友好(需另装)。

systemctl / journalctl(服务)

  • 查看服务状态与日志:
  1. sudo systemctl status nginx
  2. # -u 指定单位(服务);-f 跟随
  3. journalctl -u nginx -f
bash复制
  • 设置开机自启:
  1. sudo systemctl enable nginx
bash复制

chmod / chown(权限)

  • 典型权限:
  1. # chown 改属主/组;-R 递归
  2. chmod 644 file.txt # 拥有者 rw,组与其他 r
  3. chmod u+x deploy.sh # 拥有者加执行
  4. chmod g-w,o-r file # 组去写,其他去读
  5. chown -R user:group /srv/app
bash复制

df / du(磁盘使用)

  • 查看磁盘与目录体积:
  1. # df -h 人类可读;du -s 汇总;-h 人类可读
  2. df -h
  3. du -sh * | sort -h
bash复制

crontab(定时任务)

  • 编辑与查看:
  1. crontab -e # 编辑
  2. crontab -l # 查看
bash复制
  • 表达式 5 字段:分钟 小时 日 月 星期(0-6 周日为 0 或 7)
  1. # 每日 02:30 执行;输出与错误追加到日志
  2. 30 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
bash复制

nohup / tmux(后台与会话)

  • 让任务脱离终端并持续:
  1. # nohup 忽略挂起信号;& 后台;重定向输出
  2. nohup cmd > out.log 2>&1 &
bash复制
  • 基础 tmux:
  1. # 常用快捷键(默认前缀 Ctrl-b):" 横分窗,% 竖分窗,c 新窗口,d 脱离
  2. tmux new -s work # 新会话
  3. tmux ls # 列表
  4. tmux attach -t work # 连接
bash复制

tee(分流输出)

  • 同时打印与写入文件:
  1. # -a 追加写入;可与进程替换 <() 搭配
  2. ss -lntp | tee ports.txt
  3. tee -a app.log < <(date '+%F %T')
bash复制

GNU/BSD 差异提示

  • sed 原地替换:Linux 用 -i,macOS 需 -i ''
  • date/df/find 等在 BSD 上少数参数不同;遇到报错先 --helpman 命令
编程笔记 & 随笔杂谈