1. Linux基础命令入门:为什么每个开发者都需要掌握
第一次接触Linux命令行时,我盯着那个闪烁的光标手足无措。那是在2012年,我刚入职一家互联网公司,服务器清一色跑着CentOS系统。当资深工程师三下五除二用几行命令就解决了困扰我半天的文件权限问题时,我才意识到命令行不是过时的老古董,而是程序员的高效武器库。
Linux命令行的魅力在于它的简洁与强大。一个简单的ls -l就能展示文件的详细属性,grep可以在几秒内搜索数GB的日志文件,管道符|让多个命令像乐高积木一样灵活组合。这些看似简单的工具,组合起来能解决90%的日常开发运维问题。更重要的是,几乎所有云服务器、容器环境都基于Linux,不会命令行就像在数字世界失去了双腿。
2. 文件操作:从零开始的生存技能
2.1 导航与查看:不迷路的基础
pwd(Print Working Directory)是我每天输入几十次的命令。它像GPS一样告诉你当前所在目录的绝对路径,特别是在通过SSH连接远程服务器时,避免在复杂的目录结构中迷失方向。
ls命令的变体值得专门记忆:
ls -l # 长格式显示(权限、所有者、大小等) ls -a # 显示隐藏文件(以点开头的文件) ls -lh # 人类可读的文件大小(KB/MB/GB) ls -t # 按修改时间排序实际经验:在排查磁盘空间问题时,我常用
ls -lSh组合,按文件大小降序排列,快速定位占用空间的大文件。
2.2 文件操作:CRUD的终端版本
创建空文件的几种方式:
touch filename # 标准做法 > filename # 重定向技巧 vim filename # 直接编辑保存复制文件时,cp命令的-i(交互模式)和-r(递归复制目录)选项特别实用:
cp -i source.txt dest/ # 覆盖前询问 cp -r dir1/ dir2/ # 复制整个目录移动/重命名文件时,mv命令的行为可能让新手困惑:
mv oldname newname # 重命名 mv file1 dir/ # 移动到目录 mv dir1/ dir2/ # 如果dir2存在,移动dir1到dir2下;否则重命名删除文件要格外小心,特别是rm -rf组合。我建议新手先在命令前加上echo测试:
echo rm -rf dir/* # 先打印将要删除的内容 rm -rf dir/* # 确认无误后再执行3. 文本处理:日志分析的瑞士军刀
3.1 查看文件内容
cat适合查看小文件,但遇到大日志文件时:
less large.log # 可上下翻页搜索(/关键词) head -n 20 log.txt # 查看前20行 tail -f app.log # 实时追踪日志更新(调试神器)3.2 文本搜索与过滤
grep是文本处理的王牌工具。几个实用场景:
grep "ERROR" *.log # 在所有日志中搜索ERROR grep -r "function" src/ # 递归搜索目录 grep -v "DEBUG" app.log # 排除包含DEBUG的行 grep -A3 -B2 "exception" log # 显示匹配行前后内容避坑提示:
grep默认使用基础正则表达式,特殊字符如()需要转义。使用grep -E或egrep支持扩展正则表达式。
3.3 文本处理三剑客
awk特别适合处理结构化文本(如CSV)。这个命令统计Nginx日志中各IP的访问次数:
awk '{print $1}' access.log | sort | uniq -c | sort -nrsed适合批量替换文本。例如将所有配置文件中的旧域名替换为新域名:
sed -i 's/old.com/new.com/g' *.confcut按列提取数据。提取/etc/passwd中的用户名:
cut -d: -f1 /etc/passwd4. 系统管理:从用户到进程
4.1 用户与权限管理
创建用户时指定家目录和登录shell:
useradd -m -s /bin/bash username修改文件权限的数字表示法(755=rwxr-xr-x):
chmod 755 script.sh chown user:group file.txt经验之谈:生产环境中,我习惯用
id命令先检查当前用户权限,避免因权限不足导致操作失败。
4.2 进程管理
查看进程的几种方式:
ps aux | grep nginx # 查看nginx进程 top # 动态查看资源占用 htop # 增强版top(需安装)杀死进程时,先用SIGTERM(15)优雅终止,无效再用SIGKILL(9)强制结束:
kill -15 PID kill -9 PID4.3 磁盘与内存
查看磁盘使用情况:
df -h # 文件系统概览 du -sh dir/ # 目录大小统计内存监控:
free -h # 内存使用情况 vmstat 1 # 实时系统资源监控5. 网络工具:从连接到诊断
5.1 网络连接
ping和traceroute是基础网络诊断工具:
ping -c 4 google.com # 发送4个测试包 traceroute example.com # 显示路由路径netstat已被ss取代,查看端口监听情况:
ss -tulnp # 查看所有监听端口5.2 文件传输
scp加密传输文件:
scp file.txt user@remote:/path/ # 上传 scp user@remote:/path/file.txt . # 下载rsync更适合同步大量文件(支持断点续传):
rsync -avzP src/ user@remote:dest/5.3 HTTP请求
curl是API测试的好帮手:
curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' http://api.example.com6. 效率提升:组合技与自动化
6.1 管道与重定向
管道符|将前一个命令的输出作为后一个命令的输入:
cat access.log | grep "404" | awk '{print $7}' | sort | uniq -c重定向操作符:
command > file # 标准输出重定向(覆盖) command >> file # 追加模式 command 2> error.log # 错误输出重定向6.2 别名与函数
在~/.bashrc中添加别名提高效率:
alias ll='ls -alF' alias grep='grep --color=auto'更复杂的操作可以定义函数:
function mkcd() { mkdir -p "$1" && cd "$1" }6.3 定时任务
crontab设置定时任务(编辑当前用户的cron表):
crontab -e示例:每天凌晨3点备份数据库:
0 3 * * * /usr/bin/mysqldump -u root -pPASSWORD dbname > /backups/db_$(date +\%Y\%m\%d).sql7. 实战案例:从日志分析到故障排查
7.1 案例一:找出访问量最大的IP
分析Nginx访问日志,找出前10个访问量最大的IP:
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -n 107.2 案例二:批量重命名照片
将所有的.jpg文件从IMG_001.jpg格式重命名为vacation_001.jpg:
for file in IMG_*.jpg; do mv "$file" "vacation_${file#IMG_}"; done7.3 案例三:监控目录变化
使用inotifywait监控目录新增文件(需安装inotify-tools):
while inotifywait -r -e create /path/to/dir; do echo "New file detected"; done8. 进阶学习路径
掌握基础命令后,可以继续深入:
- Shell脚本编程:将重复操作自动化
- 正则表达式:提升文本处理能力
- 系统性能分析:
strace,perf,sar等工具 - 网络抓包:
tcpdump,wireshark - 容器化环境:Docker, Kubernetes中的命令行操作
我个人的学习方法是:遇到问题先尝试用命令行解决,查阅man手册(如man grep),记录常用命令到笔记中。坚持一个月后,你会发现自己已经离不开这个高效的工具箱了。