1. Linux命令基础认知与学习路径
作为一个从2009年开始使用Linux的老用户,我至今记得第一次在终端里输入ls命令时的新奇感。当时那台运行着Ubuntu 9.04的老旧笔记本,成了我进入开源世界的钥匙。十几年过去,Linux命令已经成为我日常工作不可或缺的工具,今天我就系统性地梳理这些经验,帮助各位少走弯路。
Linux命令本质上是通过Shell(如bash)与内核交互的接口。与图形界面不同,命令行操作具有精准、可重复、可脚本化的特点。举个例子,当需要批量重命名1000个日志文件时,用rename命令配合正则表达式可能只需要10秒,而在GUI中手动操作可能需要半小时。
学习Linux命令的合理路径应该是:
- 先掌握20%最常用的核心命令(解决80%日常问题)
- 理解Linux文件系统结构和权限模型
- 学习命令组合与管道操作
- 掌握shell脚本自动化
- 深入特定领域的专业命令集
提示:不要试图一次性记住所有命令参数,应该先掌握基本用法,在实际需求中通过
--help或man逐步深化理解。
2. 文件与目录操作命令精要
2.1 基础导航与查看
pwd:打印当前工作目录(经常被忽略但很重要)ls -lht:我最常用的组合参数-l长格式显示-h人类可读的文件大小-t按修改时间排序
cd -:快速返回上一个目录(比反复按cd ..高效得多)
2.2 文件操作四件套
# 复制时保留权限和时间戳 cp -a source_dir destination # 交互式删除(避免误删重要文件) rm -i filename # 显示移动/重命名过程 mv -v oldname newname # 创建多级目录(避免目录不存在报错) mkdir -p path/to/newdir2.3 文件内容查看技巧
less比more更强大:支持反向搜索(?pattern)和跳转tail -f实时监控日志时,配合grep过滤关键信息:
tail -f /var/log/syslog | grep -i errorhead和tail组合提取文件中间部分(如第11-20行):
head -20 file | tail -103. 系统管理与进程控制实战
3.1 资源监控三板斧
# 动态查看系统资源(按内存排序按M显示) top -o %MEM -E m # 磁盘空间可视化分析 ncdu /path/to/scan # 网络连接状态统计 ss -tulnp | column -t3.2 进程管理进阶技巧
ps aux --sort=-%mem:按内存使用降序查看进程kill -9是最后手段,应先尝试kill -15(SIGTERM)- 使用
pgrep和pkill通过名称操作进程:
# 优雅重启nginx pkill -HUP nginx3.3 定时任务与后台运行
nohup command &:退出终端仍保持运行disown:将已有作业移出终端关联crontab -e最佳实践:
# 每天3点压缩日志 0 3 * * * /usr/bin/find /var/log -name "*.log" -mtime +7 -exec gzip {} \;4. 文本处理与数据分析神器
4.1 grep家族深度使用
# 递归搜索代码中的TODO注释 grep -rnw '/path/to/src' -e 'TODO' # 显示匹配行前后3行上下文 grep -A 3 -B 3 "pattern" file # 排除二进制文件搜索 grep -I "text" *4.2 sed流编辑器实战
- 批量替换文件内容:
sed -i 's/old/new/g' *.txt- 删除空白行:
sed '/^\s*$/d' file- 提取特定行范围:
sed -n '10,20p' access.log4.3 awk数据分析案例
# 统计nginx日志各IP访问量 awk '{print $1}' access.log | sort | uniq -c | sort -nr # 计算CSV文件第二列平均值 awk -F',' '{sum+=$2; count++} END {print sum/count}' data.csv # 格式化输出系统用户 awk -F: '{printf "%-15s %s\n", $1, $6}' /etc/passwd5. 网络操作与远程管理
5.1 网络诊断组合拳
# 显示完整路由路径(比traceroute信息更丰富) mtr google.com # 测试端口连通性 nc -zv example.com 443 # 获取网站HTTP头信息 curl -I https://example.com5.2 SSH高级用法
- 密钥对免密登录:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote- 端口转发案例:
# 本地访问remote:3306 ssh -L 3306:localhost:3306 user@remote- 配置文件(~/.ssh/config)简化连接:
Host myserver HostName server.example.com User myname Port 2222 IdentityFile ~/.ssh/work_key6. 实用工具与小技巧合集
6.1 压缩解压的正确姿势
# 保留权限创建tar.gz tar -czvf backup.tar.gz --preserve-permissions /path/to/backup # 排除特定目录 tar --exclude='node_modules' -czvf project.tar.gz project/ # 查看压缩包内容不解压 tar -tf archive.tar.gz6.2 查找命令的智慧
# 按名称查找并删除7天前的日志 find /var/log -name "*.log" -mtime +7 -delete # 查找大于100M的文件并排序 find / -type f -size +100M -exec ls -lh {} + | sort -k5 -rh # 查找所有可执行文件 find /usr -perm /a=x -type f6.3 终端生存技巧
ctrl+r:反向搜索历史命令!!:重复上条命令(sudo !!快速提权)ctrl+x+e:用默认编辑器编辑当前命令alt+.:插入上条命令的最后一个参数
7. 命令组合与脚本入门
7.1 管道艺术
# 统计当前目录各种文件类型的数量 find . -type f | sed 's/.*\.//' | sort | uniq -c | sort -nr # 监控失败的SSH登录尝试 tail -f /var/log/auth.log | grep "Failed password"7.2 基础脚本模板
#!/bin/bash # 注释:这是一个自动备份脚本 set -euo pipefail # 安全模式 BACKUP_DIR="/backups" LOG_FILE="/var/log/backup.log" { echo "[$(date)] 备份开始" tar -czf "$BACKUP_DIR/backup_$(date +%Y%m%d).tar.gz" /important/data find "$BACKUP_DIR" -name "*.tar.gz" -mtime +30 -delete echo "[$(date)] 备份完成" } >> "$LOG_FILE" 2>&17.3 实用函数示例
# 在.bashrc中添加 function calc() { echo "$*" | bc -l; } function weather() { curl "wttr.in/${1:-beijing}?0"; } function extract() { if [ -f "$1" ]; then case "$1" in *.tar.bz2) tar xjf "$1" ;; *.tar.gz) tar xzf "$1" ;; *.zip) unzip "$1" ;; *) echo "'$1' 无法解压" ;; esac else echo "'$1' 不是有效文件" fi }8. 安全与权限管理
8.1 权限设置最佳实践
# 递归设置目录为755,文件为644 find /path -type d -exec chmod 755 {} \; find /path -type f -exec chmod 644 {} \; # 给脚本添加执行权限(u=用户,g=组,o=其他) chmod u+x script.sh8.2 sudoers安全配置
- 通过
visudo编辑配置文件,避免语法错误 - 精细控制权限示例:
# 允许develop组无需密码执行特定命令 %develop ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/apt update8.3 文件属性保护
# 防止重要文件被意外修改 chattr +i /etc/passwd # 只能追加内容的日志文件(防篡改) chattr +a /var/log/secure9. 性能分析与优化
9.1 系统瓶颈定位
# CPU占用最高的10个进程 ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -11 # IO等待分析 iostat -x 1 # 内存使用详情 free -mth9.2 网络性能测试
# 测试带宽 iperf3 -c server_ip # 测量HTTP请求时间 curl -o /dev/null -s -w '连接: %{time_connect}\n传输: %{time_starttransfer}\n总时间: %{time_total}\n' https://example.com9.3 命令执行时间分析
# 简单计时 time ls -R / > /dev/null # 详细性能分析 /usr/bin/time -v grep -r "pattern" /large/dir10. 版本控制与开发相关
10.1 Git高效工作流
# 查看简洁状态 git status -sb # 交互式添加补丁 git add -p # 重写最后提交信息 git commit --amend # 查找引入bug的提交 git bisect start git bisect bad git bisect good v1.010.2 开发调试命令
# 查看库依赖 ldd /usr/bin/nginx # 跟踪系统调用 strace -f -e trace=file php script.php # 调试运行中的进程 gdb -p $(pgrep -f process_name)10.3 编译安装三部曲
./configure --prefix=/usr/local/custom make -j$(nproc) sudo make install11. 容器与虚拟化命令
11.1 Docker日常操作
# 清理无用容器和镜像 docker system prune -f # 查看容器资源使用 docker stats --no-stream # 进入容器调试 docker exec -it container_name /bin/bash11.2 虚拟机管理
# 查看KVM虚拟机列表 virsh list --all # 启动虚拟机无图形界面 virt-install --name vm1 --memory 2048 --vcpus 2 --disk size=20 --cdrom /path/to/iso --noautoconsole12. 终端定制与效率提升
12.1 提示符定制
在~/.bashrc中添加:
PS1='\[\e[32m\]\u@\h \[\e[33m\]\w \[\e[31m\]$(git branch 2>/dev/null | grep "^*" | colrm 1 2)\[\e[0m\]\n\$ '12.2 命令别名大全
alias ll='ls -alF' alias grep='grep --color=auto' alias df='df -h' alias du='du -h' alias mkdir='mkdir -pv' alias h='history | grep' alias myip='curl ipinfo.io/ip'12.3 终端复用神器tmux
# 新建会话并命名 tmux new -s dev # 分屏操作 Ctrl+b % # 垂直分割 Ctrl+b " # 水平分割 Ctrl+b 方向键 # 切换面板 # 后台运行并断开 Ctrl+b d