1. Linux命令基础与使用场景
对于任何一位需要在Linux环境下工作的开发者或系统管理员来说,掌握常用命令就像木匠熟悉自己的工具一样重要。我在运维岗位工作的七年里,每天都要和这些命令打交道,它们不仅是解决问题的利器,更是理解Linux系统运行机制的窗口。
Linux命令大致可以分为几类:文件操作、系统监控、网络管理、权限控制和文本处理。每种命令都有其特定的使用场景和技巧,比如ls看似简单,但配合-lht参数就能直观显示文件大小和修改时间;grep加上-A/-B参数可以显示匹配行的上下文,这在分析日志时特别有用。
提示:所有命令都支持
--help参数获取简要帮助,更详细的文档可以用man 命令名查看。养成查阅手册的习惯能避免很多低级错误。
2. 文件与目录操作命令精要
2.1 基础导航与查看
pwd(Print Working Directory)是最简单的定位命令,特别是在多层目录操作时能确认当前位置。而cd命令的这几个用法可能新手不知道:
bash复制cd - # 返回上一个目录
cd ~ # 回到用户主目录
cd ../.. # 向上移动两级目录
ls命令的进阶用法值得深入:
bash复制ls -lh # 人类可读的文件大小显示
ls -lt # 按修改时间排序(最新在前)
ls -lS # 按文件大小排序(最大在前)
ls -d */ # 只显示目录
2.2 文件操作实战技巧
cp和mv命令使用时有个危险陷阱——它们默认静默覆盖已有文件。安全做法是:
bash复制cp -i source.txt dest/ # 交互式确认覆盖
mv -n file.txt dest/ # 禁止覆盖已有文件
rsync是更强大的同步工具,适合大量文件传输:
bash复制rsync -avzP /source/ user@remote:/dest/ # 带进度显示的增量同步
3. 系统监控与性能分析
3.1 进程管理三板斧
top命令的替代品htop提供了更友好的交互界面(需安装)。关键指标解读:
- Load average:三个数值分别代表1/5/15分钟的系统平均负载
- %CPU:进程占用CPU百分比
- RES:实际使用的物理内存
ps命令的常用组合:
bash复制ps aux | grep nginx # 查找特定进程
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head # 按内存使用排序
3.2 磁盘与内存分析
df和du组合使用可以快速定位磁盘问题:
bash复制df -h # 查看各分区使用情况
du -sh * | sort -h # 当前目录各文件/文件夹大小排序
内存分析要结合free和vmstat:
bash复制free -h # 查看内存使用概况
vmstat 1 5 # 每秒采样一次,共5次
4. 文本处理与日志分析
4.1 grep与正则表达式
grep是文本搜索的瑞士军刀,这些参数组合特别实用:
bash复制grep -rn "error" /var/log/ # 递归搜索目录
grep -A3 -B2 "exception" app.log # 显示匹配行前后内容
grep -v "debug" log.txt # 排除包含debug的行
4.2 awk与sed进阶
awk处理结构化文本的典型场景:
bash复制awk -F: '{print $1,$6}' /etc/passwd # 提取用户名和家目录
netstat -tuln | awk '/LISTEN/{print $4}' | awk -F: '{print $NF}' # 提取监听端口
sed的批量替换示例:
bash复制sed -i.bak 's/old/new/g' file.txt # 替换并创建备份
sed -n '10,20p' access.log # 只打印10-20行
5. 网络诊断与安全加固
5.1 网络状态检查
ss比传统的netstat更快速:
bash复制ss -tulnp # 查看所有监听端口及对应进程
ss -o state established '( dport = :443 or sport = :443 )' # 查看所有HTTPS连接
traceroute和mtr用于网络路径诊断:
bash复制mtr -n 8.8.8.8 # 实时显示到Google DNS的路由情况
5.2 安全相关命令
last和who命令查看登录历史:
bash复制last -n 10 # 显示最近10次登录
who -b # 查看系统最后一次启动时间
chmod和chown的权限管理:
bash复制find /var/www -type d -exec chmod 750 {} \; # 批量修改目录权限
chown -R www-data:www-data /var/www # 递归修改属主和属组
6. 实用组合命令与脚本片段
6.1 常用命令组合
查找大文件并排序:
bash复制find / -type f -size +100M -exec ls -lh {} + | sort -k5 -rh
统计Nginx日志中访问最多的IP:
bash复制awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -n 20
6.2 实用脚本片段
批量重命名文件:
bash复制for file in *.jpg; do mv "$file" "${file%.jpg}_backup.jpg"; done
监控目录变化并触发操作:
bash复制while inotifywait -r -e modify,create,delete /path/to/watch; do
rsync -avz /path/to/watch backup-server:/backup/
done
7. 命令使用中的常见陷阱
- 通配符扩展问题:
bash复制rm -rf $DIR/* # 如果DIR变量为空,会变成rm -rf /*
安全做法应该是:
bash复制rm -rf "${DIR:?}/"* # 如果DIR为空或未设置会报错退出
- 管道命令的错误处理:
bash复制grep "pattern" file.txt | wc -l # 如果grep失败,wc仍会执行
应该改为:
bash复制grep "pattern" file.txt && wc -l < file.txt
- 后台进程管理:
bash复制nohup ./script.sh & # 简单的后台运行
disown -h %1 # 将作业从当前shell分离
8. 命令历史与效率技巧
- 历史命令优化:
bash复制!$ # 上条命令的最后一个参数
!ssh # 执行最近以ssh开头的命令
^old^new # 替换上条命令中的字符串
- 别名设置:
在~/.bashrc中添加:
bash复制alias ll='ls -alF'
alias grep='grep --color=auto'
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
- 目录栈管理:
bash复制pushd /path/to/dir # 进入目录并压栈
popd # 返回上一个目录
dirs -v # 查看目录栈
掌握这些命令组合和技巧后,Linux命令行将不再是令人畏惧的黑窗口,而会成为你高效工作的利器。我个人的经验是,每天记录下解决特定问题的命令组合,三个月后你就会有自己的"命令手册"了。