按场景组织。每条都是日常真正会用到的,不是命令手册的搬运。
$ uname -a # 内核版本、架构
$ cat /etc/os-release # 发行版信息 ← 脚本里判断发行版用这个
$ hostnamectl # 主机名、内核、虚拟化类型
$ uptime -p # 开机时长
$ date; timedatectl # 时间与时区
$ lscpu # CPU 详情
$ lsblk -f # 磁盘与文件系统
$ lspci -k # PCI 设备与驱动 ← 硬件驱动问题必看
$ lsusb # USB 设备
$ lsmod # 已加载内核模块
$ dmesg -T | tail -30 # 内核日志
$ systemd-analyze # 启动耗时
$ systemd-analyze blame | head # 各服务启动耗时$ ps aux --sort=-%cpu | head # CPU 排行
$ ps aux --sort=-%mem | head # 内存排行
$ ps -eo pid,ppid,user,stat,etime,cmd | grep xxx
$ pstree -p # 进程树
$ pgrep -a name # 按名找 PID
$ top -o %CPU # 实时(按 1 展开核,P/M 排序)
$ htop # 交互式
$ kill -15 PID ; kill -9 PID # 温和 / 强制
$ nice -n 10 cmd # 低优先级启动
$ renice -n 5 -p PID
$ iotop -o # 按 IO 排(root)
$ pidstat -u -d 1 # 每进程 CPU/IO(sysstat)
$ systemctl list-units --failed # 失败的服务 ← 排障起手式
$ systemctl --user list-units # 用户级服务$ ls -lah # 人类可读 + 隐藏文件
$ ls -lt --time-style=long-iso # 按时间排
$ tree -L 2 -h # 树形(需安装)
$ cd - # 回上一个目录
$ find . -type f -name "*.log" -mtime +7
$ find . -type f -size +100M -exec ls -lh {} +
$ find / -xdev -type f -newer /tmp/ref 2>/dev/null
$ locate filename # 从数据库搜(先 updatedb)
$ du -sh */ | sort -h # 目录占用排行
$ ncdu / # 交互式磁盘分析
$ ln -s target link # 软链接
$ stat -c '%A %U:%G %s %y %n' f # 元数据
$ namei -l /path/to/file # 逐层权限检查 ← 权限问题必备
$ file unknown.bin # 认文件类型
$ readlink -f link # 解析软链接
$ realpath ./x
$ touch -d "2020-01-01" f # 改时间戳
$ truncate -s 0 logfile # 清空文件(保留 inode)$ grep -rn "pattern" --include="*.py" .
$ grep -i -C2 -E "err|warn" file
$ sed -n '10,20p' file
$ sed -i.bak 's/old/new/g' file # ⚠️ 先备份
$ sed '/^$/d' file # 删空行
$ awk -F: '{print $1, $3}' /etc/passwd
$ awk '/ERROR/{c++} END{print c}' log
$ cut -d, -f1,3 data.csv
$ sort -k2 -n | uniq -c | sort -rn | head -10
$ tr -d '\r' < dosfile > unixfile # 去掉 Windows 换行
$ column -t -s, # 对齐输出
$ wc -l file
$ head -n 20 -q *.log
$ tail -f -n 100 log
$ diff -u a b ; diff -r dir1 dir2
$ jq '.items[].name' data.json # JSON 处理
$ yq '.spec.containers[].image' k8s.yaml # YAML 处理
$ perl -pe 's/a/b/g' file
$ xargs -r -n1 -I{} echo {}
$ paste -sd, file
$ expand / unexpand(tab 空格互转)$ tar czf a.tar.gz dir/ # 创建 gzip 压缩包
$ tar xzf a.tar.gz # 解压
$ tar cJf a.tar.xz dir/ # xz(更小更慢)
$ tar tzf a.tar.gz | head # 只看内容不解压
$ tar xzf a.tar.gz -C /tmp path/inside # 只解压特定路径
$ tar czf - dir/ | ssh host 'tar xzf - -C /dest' # 流式传输
$ zip -r a.zip dir/ ; unzip a.zip -d /tmp
$ 7z x a.7z # 7zip
$ zstd -19 file # zstd 压缩
$ split -b 100M bigfile part_ # 分卷
$ cat part_* > bigfile # 合并$ ip -br a # 接口与地址(简要)
$ ip -br link
$ ip route ; ip route get 8.8.8.8
$ ip neigh # ARP 表
$ ss -tulnp # 监听端口 ← 最重要的一条
$ ss -tnp state established
$ ss -s # 连接统计
$ ping -c4 host ; mtr host # 连通性
$ traceroute host ; tracepath host
$ dig +short host ; dig @8.8.8.8 host ; dig -x IP
$ getent hosts name # 走系统解析链 ← 最接近程序行为
$ resolvectl status # DNS 配置(systemd-resolved)
$ curl -v -m 10 https://host/ # 应用层验证
$ curl -I http://host/ # 只看响应头
$ curl -o file -O url # 下载
$ wget -c url # 断点续传下载
$ nc -zv host 80 # 测端口连通
$ tcpdump -i any -nn port 80 # 抓包
$ nmcli device status # NetworkManager 状态
$ nmcli con show ; nmcli con up NAME
$ ethtool eth0 # 网卡详情
$ iwconfig / iw dev # 无线$ id ; whoami ; groups
$ sudo -i # root shell
$ sudo -u user cmd
$ sudo -l # 我能做什么
$ sudo visudo # 编辑 sudoers(唯一正确方式)
$ useradd -m -s /bin/bash u ; passwd u
$ usermod -aG group user # ⚠️ -a 必须带
$ chown -R user:group dir
$ chmod 750 dir ; chmod +x file
$ chmod g+s shared_dir # SGID
$ setfacl -m u:alice:rw file ; getfacl file
$ umask 022
$ find / -perm -4000 -type f 2>/dev/null # SUID 审计
$ last ; lastb ; who ; w
$ getent passwd user ; getent group group$ df -hT ; df -i # 空间与 inode
$ lsblk -f ; blkid # 设备与 UUID
$ findmnt # 挂载树
$ mount | column -t
$ sudo mount /dev/sdb1 /mnt ; sudo umount /mnt
$ sudo mount -a # 按 fstab 挂载(验证)
$ sudo fuser -vm /mnt/data # 谁在占用
$ sudo mkfs.ext4 /dev/sdb1
$ sudo fsck -f /dev/sdb1 # ⚠️ 必须未挂载
$ sudo tune2fs -m 0 /dev/sdb1 # 去掉 5% 保留
$ sudo lvs ; sudo vgs ; sudo pvs
$ sudo lvextend -L +10G /dev/vg/lv && sudo resize2fs /dev/vg/lv
$ cat /proc/mdstat # RAID 状态
$ sudo smartctl -a /dev/sda # 硬盘健康
$ sudo fstrim -av # SSD TRIM
$ swapon --show ; free -h
$ sudo lsof +L1 | head # 已删除但仍占空间的文件$ systemctl status svc ; systemctl start/stop/restart/reload svc
$ systemctl enable/disable --now svc
$ systemctl daemon-reload # ⚠️ 改 unit 后必做
$ systemctl cat svc ; systemctl edit svc
$ systemctl list-timers
$ journalctl -u svc -f
$ journalctl -b -p err
$ journalctl --since "1 hour ago"
$ journalctl -k
$ sudo journalctl --vacuum-size=500M
$ dmesg -T -l err,crit,alert,emerg
$ tail -f /var/log/syslog
$ sudo lastb | head
$ sudo logrotate -d /etc/logrotate.conf # 演练# Debian / Ubuntu
$ sudo apt update && sudo apt upgrade
$ apt search kw ; apt show pkg
$ sudo apt install pkg ; sudo apt remove --purge pkg
$ apt list --installed | grep pkg
$ dpkg -L pkg ; dpkg -S /path/to/file
$ sudo apt install -f # 修依赖
$ apt-mark hold pkg
# RHEL / Fedora
$ sudo dnf check-update ; sudo dnf upgrade
$ dnf search kw ; dnf info pkg
$ sudo dnf install pkg ; sudo dnf remove pkg
$ rpm -ql pkg ; rpm -qf /path/to/file
$ dnf provides '*/missing_file'
$ sudo dnf history list
# Arch
$ sudo pacman -Syu # ⚠️ 永远带上 y 和 u
$ pacman -Ss kw ; pacman -Qi pkg ; pacman -Ql pkg ; pacman -Qo /path
# 通用
$ which -a cmd ; type -a cmd ; command -v cmd
$ hash -r$ virsh list --all ; virsh start vm ; virsh console vm
$ virsh domifaddr vm --source agent
$ virsh snapshot-create-as vm snap1
$ virt-install --name vm1 --memory 2048 --vcpus 2 ...
$ qemu-img info disk.qcow2 ; qemu-img resize disk.qcow2 +10G
$ docker ps -a ; docker images
$ docker run -d --name c -p 8080:80 -v vol:/data img
$ docker logs -f c ; docker exec -it c sh
$ docker stats ; docker inspect c
$ docker system df ; docker system prune -a
$ docker volume ls ; docker network ls
$ podman run --rm -it alpine sh
$ kubectl get pods -A ; kubectl describe pod x ; kubectl logs -f x
$ crictl ps # 节点侧直接看容器$ ssh user@host ; ssh -p 2222 user@host
$ ssh -v user@host # 调试
$ ssh-keygen -t ed25519 -C "comment"
$ ssh-copy-id user@host
$ ssh-add ~/.ssh/id_ed25519
$ ssh -L 15432:localhost:5432 user@db # 本地转发
$ ssh -R 8080:localhost:3000 user@pub # 远程转发
$ ssh -D 1080 user@host # SOCKS 代理
$ ssh -J bastion target # 跳板
$ scp -P 2222 -r dir/ user@host:/tmp/
$ rsync -avzP --dry-run src/ host:/dest/ # ← 先演练
$ rsync -avz --delete src/ dest/
$ sftp user@host
$ tmux new -s work ; tmux attach -t work ; Ctrl+b d$ sudo iptables -L -n -v --line-numbers
$ sudo iptables -S
$ sudo nft list ruleset # 现代系统看这个
$ sudo nft -c -f /etc/nftables.conf # 语法检查
$ sudo ufw status verbose ; sudo ufw allow 22/tcp ; sudo ufw enable
$ sudo firewall-cmd --list-all ; sudo firewall-cmd --add-service=http --permanent ; sudo firewall-cmd --reload
$ sudo fail2ban-client status sshd$ sysctl -a | grep net.ipv4
$ sysctl net.ipv4.ip_forward
$ sudo sysctl -w net.ipv4.ip_forward=1 # 临时
$ sudo sysctl --system # 重载所有 sysctl.d
$ echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
$ ls /etc/sysctl.d/ ; cat /etc/sysctl.d/*.conf$ uptime ; vmstat 1 5
$ mpstat -P ALL 1
$ free -h ; cat /proc/meminfo
$ iostat -xz 1
$ sar -u -n DEV 1 3 ; sar -A -f /var/log/sysstat/sa15
$ pidstat -u -d -r 1
$ perf top ; perf record -g -p PID -- sleep 10 ; perf report
$ strace -p PID ; strace -f -e trace=network ./app
$ lsof -p PID ; lsof -i :8080
$ cat /proc/PID/status ; cat /proc/PID/stack
$ cat /proc/pressure/io # PSI:真实的"卡顿"程度
$ bpftrace -l | head
$ coredumpctl list| 快捷键 | 作用 |
|---|---|
Ctrl+R |
反向搜索历史 ← 最高效 |
Ctrl+A / Ctrl+E |
行首 / 行尾 |
Ctrl+U / Ctrl+K |
删到行首 / 行尾 |
Ctrl+W |
删掉前一个词 |
Ctrl+L |
清屏 |
Ctrl+C / Ctrl+D |
中断 / EOF |
Ctrl+Z |
挂起到后台(fg 恢复) |
!! / !$ / !* |
上一条命令 / 其最后参数 / 其所有参数 |
Alt+. |
插入上条命令的最后参数 |
Ctrl+x Ctrl+e |
用编辑器写当前命令 |