1. Linux命令基础认知
第一次接触Linux终端时,那个闪烁的光标和纯文本界面总让人心生畏惧。但就像学骑自行车要先掌握平衡一样,命令行是Linux系统的灵魂所在。我在运维岗位工作的第三个月才真正明白:图形界面只是命令行的可视化包装,所有系统级操作最终都会转化为命令执行。
终端(Terminal)本质上是个文本输入输出环境,而Shell则是解释命令的程序。常见的Bash(Bourne Again Shell)就像个智能翻译官,把我们输入的ls、cd这类简写转换成系统能理解的指令。这里有个容易混淆的概念:打开终端时默认启动的是Shell程序,而命令行则是我们输入指令的交互界面。
重要提示:Linux命令区分大小写!
LS和ls会被系统视为完全不同的指令
2. 文件系统导航命令精要
2.1 目录操作三板斧
pwd(Print Working Directory)是我每天使用频率最高的命令之一。它像GPS定位一样显示当前所在路径,特别是在多级目录穿梭时能避免"迷路"。刚入行时我经常在复杂的项目目录里忘记位置,直到 mentor 教我用这个命令配合/var/log/这样的绝对路径使用。
cd命令的进阶用法值得专门记录:
bash复制cd ~ # 返回用户家目录
cd - # 回到上一个目录
cd ../.. # 向上跳两级目录
ls命令的参数组合才是真正体现Linux设计哲学的地方:
bash复制ls -l # 长格式显示文件详情
ls -a # 显示隐藏文件(以.开头)
ls -t # 按修改时间排序
ls -h # 人类可读的文件大小
2.2 文件操作核心命令
cp命令在复制大文件时有个性能技巧:添加-v参数显示进度,配合-r递归复制目录。有次迁移服务器数据时,我用cp -rv /data /backup实时监控了50GB资料的复制过程。
mv命令的原子性特性在部署时特别有用。更新网站时我会先用mv old_version temp再mv new_version old_version,确保用户访问不会出现文件缺失的中间状态。
rm命令的危险性所有运维都深有体会。我团队的新人曾经误执行过rm -rf /(千万别试!),现在我们都会配置alias rm='rm -i'强制确认删除。更安全的做法是使用trash-cli这类回收站工具。
3. 系统信息查询命令
3.1 硬件信息探查
df -h是我检查磁盘空间的标配命令,-h参数会自动转换单位(GB/MB)。当Apache服务报错时,第一时间就会用这个命令确认是不是磁盘写满了。
free -m显示内存使用情况,重点观察available列而非free列。有次服务器频繁崩溃,就是用这个命令发现缓存占用了90%的内存。
lscpu命令能输出CPU的完整信息,包括架构、核心数、线程数等。在配置编译环境时,我常用make -j $(nproc)根据CPU核心数自动设置编译线程数。
3.2 进程管理命令
top的交互式界面其实有很多隐藏功能:
- 按
1显示所有CPU核心详情 - 按
M按内存排序 - 按
P按CPU使用率排序
htop是top的增强版,支持鼠标操作和彩色显示。我们团队在排查内存泄漏时,会用它观察进程的RES内存增长趋势。
ps aux的组合参数是我常用的进程查看方式,配合grep过滤特别高效:
bash复制ps aux | grep nginx # 查找nginx相关进程
4. 文本处理命令三剑客
4.1 grep文本搜索
grep -r "error" /var/log/是我日常排错的起点。几个实用参数:
-i忽略大小写-n显示行号-C 3显示匹配行的前后3行
4.2 sed流编辑器
批量替换配置文件中的IP地址:
bash复制sed -i 's/192.168.1.1/10.0.0.1/g' *.conf
-i参数直接修改文件,务必先备份!有次我不小心把整个配置文件的注释全删了,就是因为没加--in-place测试。
4.3 awk数据处理
统计Nginx日志中每个IP的访问次数:
bash复制awk '{print $1}' access.log | sort | uniq -c | sort -nr
这个命令组合完美展示了Linux"小工具组合"的哲学。我常用类似方法分析API调用频次。
5. 权限管理深度解析
5.1 权限表示法
chmod的数字表示法其实很好记:
- 4 = 读(r)
- 2 = 写(w)
- 1 = 执行(x)
所以chmod 755 script.sh表示:
- 所有者:rwx (4+2+1=7)
- 所属组:r-x (4+0+1=5)
- 其他用户:r-x (4+0+1=5)
5.2 特殊权限位
chmod +t /shared_dir设置粘滞位后,就算目录可写,用户也只能删除自己的文件。我们公司的公共上传目录就采用这种设置。
sudo chown -R www-data:www-data /var/www这条命令在部署Web应用时经常用到,-R参数会递归修改所有子文件属主。
6. 网络相关命令实战
6.1 连接测试工具
ping命令的-c参数可以指定次数:
bash复制ping -c 4 google.com # 只发送4个测试包
telnet虽然古老但很实用,快速测试端口是否开放:
bash复制telnet 192.168.1.100 22 # 测试SSH端口
6.2 网络配置查看
ifconfig已被ip addr取代,但很多老系统还在用。显示所有网络接口的IPv6地址:
bash复制ip -6 addr show
netstat -tulnp显示所有监听端口及其进程,排查端口冲突时特别有用。我常用这个命令找出哪个程序占用了80端口。
7. 命令组合与脚本基础
7.1 管道符妙用
查找最近修改的日志文件并统计行数:
bash复制ls -t /var/log/*.log | head -5 | xargs wc -l
这个命令组合使用了管道(|)、head取前5个结果,再通过xargs将文件名传递给wc统计行数。
7.2 基础脚本编写
我的第一个实用脚本是自动备份脚本:
bash复制#!/bin/bash
# 备份/var/www目录到/home/backup
tar -czf /home/backup/www_$(date +%Y%m%d).tar.gz /var/www
find /home/backup -mtime +30 -delete # 删除30天前的备份
关键点:
#!/bin/bash指定解释器$(date +%Y%m%d)生成日期字符串-mtime +30匹配30天前的文件
8. 实用技巧与排错指南
8.1 历史命令优化
在~/.bashrc中添加这些配置:
bash复制export HISTSIZE=10000 # 内存中保存的历史命令数
export HISTFILESIZE=20000 # 历史文件记录数
shopt -s histappend # 多个终端会话共享历史
8.2 常见错误处理
"Command not found"的排查步骤:
- 检查命令拼写:
which 命令名 - 查看PATH变量:
echo $PATH - 确认软件是否安装:
dpkg -l | grep 软件名(Debian系)
遇到权限问题时,先用ls -l查看文件权限,再用namei -l 路径检查整个路径的权限链。有次配置Nginx时就因为/var目录权限不对导致403错误。