作为一个在Linux环境下摸爬滚打十多年的老运维,我始终认为命令行操作才是Linux系统的灵魂所在。与图形界面相比,命令行工具具有不可替代的优势:它们消耗资源更少、执行效率更高、可脚本化程度更好,更重要的是——当你通过SSH远程管理服务器时,命令行往往是唯一可用的交互方式。
Linux命令体系就像一套精密的瑞士军刀,每个工具都专注于解决特定问题。经过三十多年的发展,GNU核心工具集(coreutils)已经包含了超过200个常用命令,加上各发行版特有的工具,整个命令生态可谓包罗万象。对于初学者来说,掌握其中最常用的20%命令就能应对80%的日常操作。
提示:所有Linux命令都遵循"工具只做一件事并做好"的Unix哲学,通过管道(|)组合简单命令可以完成复杂任务
pwd命令虽然简单,但在复杂的目录结构中能快速定位当前位置。我习惯在.bashrc中设置PS1变量显示完整路径,避免频繁使用pwd:
bash复制# 在~/.bashrc中添加
PS1='[\u@\h \w]\$ '
ls命令的进阶用法值得深挖。除了常见的-l(长格式)和-a(显示隐藏文件)参数外,这些选项也很实用:
-h:人类可读的文件大小(自动转换为KB/MB)--time-style=long-iso:标准化时间格式-t:按修改时间排序-R:递归列出子目录我常用的组合是ls -lht --time-style=long-iso,输出示例:
code复制-rw-r--r-- 1 user group 2.3M 2023-07-15 14:30 report.pdf
drwxr-xr-x 2 user group 4.0K 2023-07-14 09:15 data/
cp/mv/rm这三个命令看似简单,但有些细节不注意可能酿成大祸:
cp命令的-u(只更新较新文件)和-v(显示详细过程)参数在批量操作时特别有用。复制目录务必加-r参数。
mv命令在跨文件系统移动大文件时实际执行的是"复制+删除"操作,耗时较长。建议先用df -h确认目标分区空间。
rm命令没有回收站机制!重要数据删除前建议先执行ls确认匹配文件,再替换为rm。alias一个安全删除函数很有必要:
bash复制safe_rm() {
echo "将要删除以下文件:"
ls "$@"
read -p "确认删除?[y/N] " yn
[[ $yn == [yY] ]] && rm -v "$@"
}
cat适合查看小文件,大文件应该使用less(支持搜索和翻页)。head和tail则是查看文件首尾的利器:
tail -f实时追踪日志文件变化(现在更推荐用journalctl -f查看systemd日志)tail -n +100显示从第100行开始的内容head -n -50显示除最后50行外的所有内容对于二进制文件,xxd和hexdump可以查看十六进制格式,strings能提取可打印字符。
top命令是系统监控的瑞士军刀,但它的交互界面有些过时。现代替代品包括:
htop:彩色显示,支持鼠标操作glances:跨平台监控工具bpytop:Python编写的炫酷监控工具关键指标解读:
free -h查看内存使用情况,注意available才是真正可用的内存(包含buffer/cache可回收部分)。
ps命令的参数风格有BSD和SysV两种体系。我推荐使用BSD风格的aux组合:
bash复制ps aux | grep nginx # 查看nginx相关进程
关键字段说明:
kill命令发送信号时,-9(SIGKILL)应该是最后手段。先尝试-15(SIGTERM)给进程正常退出的机会。pkill和killall可以按名称杀进程,但要小心误杀。
ping命令的进阶技巧:
-c 5:只发送5个包-i 0.5:设置0.5秒间隔-s 1400:设置包大小为1400字节(测试MTU)traceroute(或tracepath)可以显示路由路径。现代Linux通常使用mtr(My TraceRoute)工具,它结合了ping和traceroute的功能:
bash复制mtr -rwbzc 10 example.com
参数说明:
ss(Socket Statistics)已经取代了古老的netstat,它能显示更详细的连接信息:
bash复制ss -tulnp # 查看所有监听端口
输出字段:
lsof是更强大的网络诊断工具,例如查看谁在占用80端口:
bash复制lsof -i :80
grep的常见参数组合:
-i:忽略大小写-v:反向匹配-A 3:显示匹配行后3行-B 2:显示匹配行前2行-E:使用扩展正则(等同于egrep)ack和ripgrep(rg)是更现代的替代品,速度更快且默认递归搜索:
bash复制rg -t py 'import requests' # 在所有Python文件中搜索
sed最适合做批量文本替换,基本语法:
bash复制sed -i 's/old/new/g' file.txt # 全局替换
高级用法示例:
bash复制# 删除空白行
sed '/^$/d' file.txt
# 替换第10-20行的文本
sed '10,20s/foo/bar/' file.txt
# 在每行行首添加时间戳
sed 's/^/$(date "+%H:%M") /' log.txt
awk是一个完整的编程语言,特别适合处理表格数据。基本结构:
bash复制awk 'pattern {action}' file
实用案例:
bash复制# 统计nginx日志中每个IP的访问次数
awk '{print $1}' access.log | sort | uniq -c | sort -nr
# 计算CSV文件第二列的总和
awk -F, '{sum+=$2} END {print sum}' data.csv
# 格式化输出进程列表
ps aux | awk '{printf "%-10s %-10s %-10s\n", $1, $2, $11}'
adduser比useradd更友好,会自动创建家目录和设置默认shell。创建系统用户应该加--system参数:
bash复制adduser --system --no-create-home appuser
chmod的数字模式比符号模式更精确。记住这个公式:
所以chmod 755表示:
crontab -e编辑当前用户的定时任务。时间格式为:
code复制* * * * * command
┬ ┬ ┬ ┬ ┬
│ │ │ │ └─ 星期几 (0 - 6) (0是周日)
│ │ │ └─── 月份 (1 - 12)
│ │ └───── 日 (1 - 31)
│ └─────── 小时 (0 - 23)
└───────── 分钟 (0 - 59)
实用技巧:
@reboot表示系统启动时运行>> /var/log/myjob.log 2>&1flock -n /tmp/myjob.lock防止重复执行不同发行版的包管理命令:
| 操作 | Debian/Ubuntu (apt) | RHEL/CentOS (yum/dnf) | Arch (pacman) |
|---|---|---|---|
| 更新索引 | apt update |
yum check-update |
pacman -Sy |
| 安装 | apt install pkg |
yum install pkg |
pacman -S pkg |
| 删除 | apt remove pkg |
yum remove pkg |
pacman -R pkg |
| 搜索 | apt search term |
yum search term |
pacman -Ss term |
注意:生产环境中不要直接使用
apt upgrade,应该用apt-get dist-upgrade以避免配置冲突
df -h查看磁盘使用情况时,注意这些指标:
du命令分析目录大小,常用组合:
du -sh *:显示当前目录各子项大小du -h --max-depth=1:限制递归深度du -x:不跨越文件系统边界ncdu是交互式磁盘分析工具,比du更直观:
bash复制ncdu /var/log # 分析日志目录
mount命令挂载设备时,推荐使用UUID而非设备名(/dev/sda1可能变化):
bash复制blkid # 查看设备UUID
mount UUID="1234-ABCD" /mnt/data
fstab文件示例条目:
code复制UUID=1234-ABCD /mnt/data ext4 defaults,noatime 0 2
参数说明:
管道组合命令时,xargs可以解决参数列表过长的问题:
bash复制find /tmp -name "*.log" -mtime +30 | xargs rm -v
tee命令同时输出到屏幕和文件:
bash复制make 2>&1 | tee build.log # 保存编译输出
安全的文件遍历:
bash复制while IFS= read -r -d '' file; do
[[ -f "$file" ]] || continue
echo "Processing: $file"
done < <(find . -type f -print0)
带超时的命令执行:
bash复制timeout 10s slow_command || echo "Command timed out"
tmux或screen保持会话持久化:
bash复制tmux new -s mysession # 新建会话
tmux attach -t mysession # 重新连接
zsh+oh-my-zsh提供强大的自动补全和主题:
bash复制# 历史命令搜索
ctrl+r # 反向搜索
ctrl+s # 正向搜索