
1. Unix命令基础与核心操作Unix命令是每个开发者必须掌握的基本技能就像木匠需要熟悉自己的工具箱一样。我在日常工作中发现即使是经验丰富的工程师也常常会忽略一些基础命令的高阶用法。让我们从最常用的文件操作命令开始1.1 文件操作三剑客ls命令可能是你使用频率最高的Unix命令但它的潜力远不止简单的文件列表ls -lhtr这个组合参数实现了-l 长格式显示-h 人类可读的文件大小-t 按修改时间排序-r 反向排序最新文件在底部实际经验在排查日志文件时我经常用这个组合快速定位最新修改的文件。加上-F参数还能显示文件类型标识符如/表示目录*表示可执行文件cp和mv命令看似简单但在处理大量文件时需要注意cp -p file1 file2 # 保留原文件属性权限、时间戳 mv -i *.txt ~/backup # 交互模式避免覆盖重要文件1.2 文本处理黄金组合grep、awk和sed被称为Unix文本处理三剑客。这里分享几个实用场景查找当前目录下所有Python文件中包含import requests的行grep -rn import requests --include*.py .统计nginx日志中每个IP的访问次数前10awk {print $1} access.log | sort | uniq -c | sort -nr | head -10批量修改文件扩展名.txt改为.mdfor file in *.txt; do mv $file ${file%.txt}.md; done1.3 权限管理精髓chmod的数值表示法很多人知道但实际使用时容易混淆chmod 755 file # 所有者rwx组r-x其他r-x更直观的记忆方法4 读(r)2 写(w)1 执行(x) 把需要的权限数值相加即可如7421rwx踩坑提醒修改目录权限时一定要加-R参数递归操作但千万小心不要误操作根目录我曾见过有人执行chmod -R 777 /导致系统崩溃的惨剧。2. 系统管理与进程控制2.1 进程监控实战ps命令的参数在不同Unix变种中差异很大。Linux下推荐使用ps aux # 查看所有用户进程 ps -ef # 完整格式列表top命令的替代方案htop更加强大F2进入配置界面F3搜索进程F4过滤进程F5树形显示F9杀死进程2.2 网络诊断技巧netstat已被ss替代多年但很多人还不知道ss -tulnp # 查看所有监听端口及对应进程快速测试端口连通性nc -zv example.com 80 # TCP测试 nc -zvu example.com 53 # UDP测试抓取HTTP请求需要root权限tcpdump -i eth0 -A port 80 | grep GET2.3 磁盘空间管理查找大文件的三种方法du -ah / | sort -rh | head -10 # 经典方法 ncdu / # 交互式可视化工具 find / -type f -size 100M -exec ls -lh {} # 精确查找清理旧内核Ubuntu/Debiandpkg --list | grep linux-image | awk {print $2} | sort -V | sed -n /uname -r/q;p | xargs sudo apt-get -y purge3. 高效工作流技巧3.1 终端多路复用tmux的基本工作流程新建会话tmux new -s session_name分离会话Ctrlb d列出会话tmux ls附加会话tmux a -t session_name我的tmux配置秘诀# ~/.tmux.conf set -g mouse on # 启用鼠标 set -g history-limit 10000 # 增加滚动缓冲区 bind | split-window -h # 垂直分割 bind - split-window -v # 水平分割3.2 Shell脚本调试bash脚本调试开关#!/bin/bash -x # 执行时显示每条命令 set -euo pipefail # 严格模式错误退出、未定义变量报错、管道错误捕获日志记录最佳实践log() { local level$1 shift echo [$(date %Y-%m-%d %H:%M:%S)] [$level] $ 2 } log INFO This is an info message log ERROR Something went wrong3.3 命令组合艺术将多个命令组合起来的几种方式顺序执行cmd1; cmd2无论cmd1是否成功都执行cmd2条件执行cmd1 cmd2仅当cmd1成功时执行cmd2管道连接cmd1 | cmd2将cmd1输出作为cmd2输入进程替换cmd1 (cmd2)将cmd2输出作为文件传递给cmd1实用例子 - 备份MySQL数据库并压缩mysqldump -u user -p dbname | gzip backup_$(date %Y%m%d).sql.gz4. 常见问题排查指南4.1 权限问题诊断遇到Permission denied时的排查步骤检查文件权限ls -l /path/to/file检查父目录权限namei -l /path/to/file检查SELinux状态getenforce和ls -Z /path/to/file检查ACL设置getfacl /path/to/file4.2 进程占用处理解决Address already in use的方法ss -tulnp | grep :80 # 查找占用80端口的进程 kill -9 PID # 强制终止进程或者更优雅的方式fuser -k 80/tcp # 直接杀死使用该端口的进程4.3 环境变量问题当出现command not found时的检查清单检查命令是否存在which command_name检查PATH变量echo $PATH检查命令位置是否在PATH中如果是脚本检查shebang行第一行的#!/path/to/interpreter临时添加PATH的推荐方式export PATH/new/path:$PATH # 临时生效 # 永久生效应写入~/.bashrc或~/.zshrc5. 进阶工具链5.1 性能分析工具CPU性能分析perf top # 实时CPU使用分析 strace -c command # 系统调用统计内存分析free -h # 内存使用概览 vmstat 1 # 虚拟内存统计IO分析iostat -x 1 # 磁盘IO统计 iotop # 类似top的IO监控工具5.2 开发辅助工具代码统计cloc . # 统计项目代码行数JSON处理jq .key file.json # 提取JSON字段 curl -s http://api.com | jq # 格式化API响应CSV处理csvcut -c 1,3 file.csv # 提取指定列 csvgrep -c 2 -m pattern file.csv # 按列值过滤5.3 容器时代命令Docker替代命令podman ps # 无需root权限的容器管理 nerdctl --namespace k8s.io ps # 兼容containerd的命令行工具Kubernetes调试kubectl debug -it podname --imagebusybox # 调试Pod kubectl run -i --tty debug --imageubuntu --restartNever -- bash # 临时调试容器6. 个人效率提升6.1 命令别名配置我的~/.bashrc精选别名alias llls -alF alias grepgrep --colorauto alias dfdf -h alias dudu -h alias mkdirmkdir -pv alias hhistory alias jjobs -l alias portsss -tulnp alias myipcurl http://ipecho.net/plain; echo6.2 历史命令优化增强history功能的配置export HISTSIZE10000 export HISTFILESIZE20000 export HISTTIMEFORMAT%Y-%m-%d %H:%M:%S shopt -s histappend # 追加而不是覆盖历史文件快速搜索历史命令Ctrlr # 反向搜索 Ctrls # 正向搜索可能需要stty -ixon启用6.3 终端增强工具推荐安装的终端工具bat更好的cat替代品语法高亮exa现代化的ls替代品fd更快的find替代品ripgrep超快的grep替代品tldr简化的man页面安装方法Ubuntusudo apt install bat exa fd-find ripgrep tldr7. 安全最佳实践7.1 SSH安全配置~/.ssh/config推荐配置Host * ForwardAgent no ForwardX11 no ServerAliveInterval 60 TCPKeepAlive yes IdentitiesOnly yes StrictHostKeyChecking yes PasswordAuthentication no生成更安全的SSH密钥ssh-keygen -t ed25519 -a 100 # 比RSA更安全更快速7.2 敏感数据处理安全删除文件shred -u -z -n 5 file # 覆盖5次后删除检查文件哈希值sha256sum file # 最常用的哈希算法7.3 系统加固检查快速安全检查脚本# 检查SUID文件 find / -perm -4000 -type f -exec ls -ld {} \; 2/dev/null # 检查世界可写文件 find / -perm -2 -type f -exec ls -ld {} \; 2/dev/null # 检查无属主文件 find / -nouser -o -nogroup -exec ls -ld {} \; 2/dev/null8. 跨平台兼容技巧8.1 macOS与Linux差异主要命令差异对比功能Linux命令macOS命令查看IPip addrifconfig包管理apt/yum/dnfbrew磁盘工具lsblkdiskutil系统信息systemctllaunchctl时间同步timedatectlsntp8.2 编写可移植脚本检测操作系统类型的写法if [[ $OSTYPE linux-gnu* ]]; then # Linux命令 elif [[ $OSTYPE darwin* ]]; then # macOS命令 else echo Unsupported OS exit 1 fi使用兼容性工具# 获取公网IP兼容多平台 curl -s ifconfig.me curl -s icanhazip.com curl -s ipinfo.io/ip9. 实用命令速查表9.1 压缩解压大全常见压缩格式处理格式压缩命令解压命令.zipzip -r archive.zip dirunzip archive.zip.tartar -cvf archive.tar dirtar -xvf archive.tar.gzgzip filegunzip file.gz.tar.gztar -zcvf archive.tgz dirtar -zxvf archive.tgz.bz2bzip2 filebunzip2 file.bz2.xzxz fileunxz file.xz9.2 系统信息查询硬件信息查询命令lscpu # CPU信息 lsmem # 内存信息 lspci # PCI设备 lsusb # USB设备 lshw # 完整硬件报告系统版本查询uname -a # 内核版本 lsb_release -a # 发行版信息 cat /etc/*release # 详细的发行版信息10. 命令学习资源10.1 内置帮助系统三种获取帮助的方式命令自带帮助cmd --help或cmd -hman手册man cmdinfo文档info cmdman手册章节说明用户命令系统调用库函数特殊文件文件格式游戏杂项系统管理命令10.2 在线学习平台推荐的学习资源ExplainShell.com - 命令分解解释CommandLineFu.com - 实用命令收集LinuxJourney.com - 系统学习教程OverTheWire.org - 游戏化学习RosettaCode.org - 多语言命令对照10.3 持续学习建议我的命令学习心得每天学习一个新命令并实践遇到问题先查man手册建立个人命令手册我使用Markdown记录定期review历史命令发现优化点参与开源项目学习他人用法最后分享一个我常用的命令学习技巧 - 使用type查看命令类型type ls # 显示ls是别名还是内置命令 type -a echo # 显示所有同名的命令