Skip to content

Latest commit

 

History

History
321 lines (282 loc) · 10.9 KB

appendix-a-cheatsheet.md

File metadata and controls

321 lines (282 loc) · 10.9 KB

附录 A:命令速查表

按场景组织。每条都是日常真正会用到的,不是命令手册的搬运。

一、系统信息

$ 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 用编辑器写当前命令

← 返回目录 · 附录 B:术语中英对照 →