1. Linux命令概述:从入门到精通的必备工具
作为一个在Linux环境下摸爬滚打多年的老鸟,我深知命令行是Linux系统的灵魂所在。不同于图形界面,命令行提供了更高效、更灵活的系统操作方式。记得刚接触Linux时,面对黑底白字的终端窗口,我也曾感到无所适从。但掌握基础命令后,工作效率提升了不止一个量级。
Linux命令主要分为以下几类:
- 文件操作类:ls、cd、cp、mv、rm等
- 系统管理类:top、ps、kill、df、free等
- 网络相关类:ping、ifconfig、netstat、ssh等
- 文本处理类:grep、awk、sed、cat等
- 权限管理类:chmod、chown、sudo等
这些命令构成了Linux系统管理的基石,无论是系统管理员、开发人员还是普通用户,都需要熟练掌握。下面我将从实际应用场景出发,分享这些命令的使用技巧和注意事项。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 文件操作命令详解
2.1 基础文件操作命令
ls命令可能是使用频率最高的Linux命令了。除了基本的ls列出当前目录内容外,我强烈推荐使用以下参数组合:
bash复制ls -lht --color=auto
- -l:长格式显示,包含权限、所有者、大小等信息
- -h:人类可读的文件大小(KB/MB/GB)
- -t:按修改时间排序
- --color=auto:彩色显示不同类型文件
注意:在脚本中使用ls时,避免依赖颜色输出,因为可能被重定向到文件或其他程序。
cp命令用于复制文件,但有个常见陷阱:
bash复制cp file1 file2 dir/ # 正确
cp file1 file2 dir # 如果dir不是目录会出错
建议总是以斜杠结尾明确表示目标为目录。
2.2 高级文件查找与管理
find命令功能强大但语法复杂,以下是我常用的几种模式:
bash复制# 查找7天内修改过的php文件
find /var/www -name "*.php" -mtime -7
# 查找大于10MB的文件并列出详细信息
find /home -size +10M -exec ls -lh {} \;
# 查找并删除30天前的日志文件(谨慎使用)
find /var/log -name "*.log" -mtime +30 -delete
重要提示:在执行删除操作前,建议先用
-delete确认匹配的文件。
3. 系统监控与管理命令
3.1 进程管理三剑客
top命令是实时监控系统状态的利器。我的常用技巧:
- 按
1显示所有CPU核心的详细使用情况 - 按
M按内存使用排序 - 按
P按CPU使用排序 - 按
c显示完整命令路径
对于更简洁的进程查看,ps命令更合适:
bash复制ps aux --sort=-%mem | head -10 # 查看内存占用最高的10个进程
ps -ef | grep [n]ginx # 查找nginx进程([]避免grep自身显示)
kill命令不只是用来终止进程的:
bash复制kill -l # 列出所有信号
kill -9 PID # 强制终止(SIGKILL)
kill -HUP PID # 优雅重启(常用于重新加载配置)
3.2 磁盘与内存监控
df和du命令经常被混淆:
bash复制df -h # 查看文件系统磁盘空间使用情况
du -sh * # 查看当前目录各文件/文件夹大小
du -xh / | sort -h | tail -20 # 找出根目录下最大的20个文件/目录
free命令查看内存使用:
bash复制free -h
重点关注available列,这才是系统实际可用的内存。
4. 网络相关命令实战
4.1 网络诊断基础
ping是最基础但实用的网络诊断工具:
bash复制ping -c 4 example.com # 发送4个包后停止
ping -i 0.2 example.com # 加快ping频率(需要root)
traceroute(或tracepath)可以显示数据包路径:
bash复制traceroute -n example.com # -n不解析IP为主机名,加快显示
netstat已被ss取代,但两者都值得掌握:
bash复制ss -tulnp # 查看所有监听端口(-t TCP, -u UDP, -l listening, -n numeric, -p process)
netstat -tulnp # 旧版语法
4.2 安全文件传输
scp命令是跨服务器传输文件的利器:
bash复制scp -P 2222 file.txt user@remote:/path/ # 指定非标准端口
scp -r dir/ user@remote:/path/ # 递归复制目录
更安全的替代方案是rsync:
bash复制rsync -avz -e "ssh -p 2222" dir/ user@remote:/path/ # 增量同步,支持断点续传
5. 文本处理与管道技巧
5.1 grep与正则表达式
grep是文本搜索的瑞士军刀:
bash复制grep -r "pattern" /path/ # 递归搜索
grep -i "pattern" file # 忽略大小写
grep -v "pattern" file # 反向匹配
grep -E "pattern1|pattern2" file # 扩展正则
技巧:
grep -A 3 -B 2可以显示匹配行前后几行内容,对日志分析特别有用。
5.2 awk与sed进阶
awk处理结构化文本的强大工具:
bash复制awk '{print $1,$3}' file # 打印第1和第3列
awk -F: '{print $1,$6}' /etc/passwd # 指定冒号为分隔符
awk '$3 > 100 {print $0}' file # 条件过滤
sed适合流式文本编辑:
bash复制sed 's/foo/bar/g' file # 全局替换
sed -i.bak 's/foo/bar/g' file # 直接修改文件并备份
sed '/pattern/d' file # 删除匹配行
6. 权限管理与sudo技巧
6.1 文件权限深度解析
chmod的数字表示法:
code复制7 = 4(r) + 2(w) + 1(x)
6 = 4 + 2
5 = 4 + 1
常见组合:
bash复制chmod 755 dir/ # owner:rwx, group:r-x, others:r-x
chmod 600 file # 仅owner可读写
更直观的符号表示法:
bash复制chmod u+x file # 给owner添加执行权限
chmod g-w file # 移除group的写权限
chmod o=r file # 设置others只有读权限
chmod a+w file # 给所有用户添加写权限
6.2 sudo配置与安全
编辑sudoers文件的正确姿势:
bash复制visudo # 永远使用这个命令编辑sudoers,因为有语法检查
sudoers文件示例条目:
code复制user1 ALL=(ALL:ALL) NOPASSWD: /usr/bin/systemctl restart nginx
这允许user1无需密码即可执行指定的nginx重启命令。
7. 命令组合与效率技巧
7.1 管道的高级用法
组合命令处理日志的典型例子:
bash复制cat /var/log/nginx/access.log | grep "404" | awk '{print $7}' | sort | uniq -c | sort -nr | head -20
这个管道会:
- 读取nginx访问日志
- 过滤出404错误
- 提取URL路径($7)
- 排序后统计出现次数
- 按次数倒序排列
- 显示前20条
7.2 历史命令优化
提升历史命令使用效率的技巧:
bash复制!! # 重复上一条命令
!$ # 上条命令的最后一个参数
!^ # 上条命令的第一个参数
!ssh # 执行最近以ssh开头的命令
^old^new^ # 替换上条命令中的字符串
设置更实用的历史记录:
bash复制export HISTSIZE=10000
export HISTFILESIZE=20000
export HISTTIMEFORMAT='%F %T ' # 记录时间戳
export HISTCONTROL=ignoreboth # 忽略重复命令和空格开头的命令
8. 实用脚本片段分享
8.1 系统监控脚本
简单的磁盘空间监控脚本:
bash复制#!/bin/bash
THRESHOLD=90
CURRENT=$(df / | grep / | awk '{print $5}' | sed 's/%//g')
if [ "$CURRENT" -gt "$THRESHOLD" ]; then
echo "Warning: Disk space on / is at ${CURRENT}%" | mail -s "Disk Alert" admin@example.com
fi
8.2 日志分析脚本
分析nginx日志的常用脚本:
bash复制#!/bin/bash
LOG=$1
echo "Top 10 IPs:"
awk '{print $1}' $LOG | sort | uniq -c | sort -nr | head -10
echo -e "\nTop 10 URLs:"
awk -F\" '{print $2}' $LOG | awk '{print $2}' | sort | uniq -c | sort -nr | head -10
echo -e "\nResponse codes:"
awk '{print $9}' $LOG | sort | uniq -c | sort -nr
9. 常见问题排查指南
9.1 "Command not found"错误
可能原因及解决方案:
- 命令确实不存在:检查拼写或尝试
which command - 命令未安装:使用发行版的包管理器安装
- PATH环境变量问题:
echo $PATH检查,临时添加export PATH=$PATH:/new/path - 32/64位不兼容:在64位系统上可能需要安装32位库
9.2 权限被拒绝问题
排查步骤:
ls -l检查文件权限groups查看用户所属组- 检查SELinux状态:
getenforce和sestatus - 检查文件系统挂载选项:
mount | grep noexec
10. 命令速查表
常用命令快速参考:
| 类别 | 命令 | 常用参数 | 用途说明 |
|---|---|---|---|
| 文件操作 | ls | -lht, -a, -R | 列出目录内容 |
| cp | -r, -v, -u | 复制文件/目录 | |
| mv | -v, -n | 移动/重命名文件 | |
| 系统监控 | top | -d, -p | 实时系统监控 |
| ps | aux, -ef | 查看进程状态 | |
| 网络 | ping | -c, -i | 测试网络连通性 |
| ssh | -p, -i | 安全远程登录 | |
| 文本处理 | grep | -r, -i, -v | 文本搜索 |
| awk | -F, '{print $1}' | 文本处理与报告生成 |
掌握这些命令后,你会发现Linux命令行远比图形界面高效。建议每天学习几个新命令的参数和用法,逐步积累。遇到问题时,别忘了man command和command --help是你最好的朋友。
