三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Linux命令实战:从基础到进阶的必备技能

Linux命令实战:从基础到进阶的必备技能

1. Linux命令学习的重要性与背景

在当今技术环境中,Linux系统已成为服务器、云计算和嵌入式设备领域无可争议的主流操作系统。根据2023年的行业统计,超过90%的云计算基础设施和75%的智能手机(基于Android系统)都运行在Linux内核之上。对于任何希望进入IT行业或提升技术能力的人来说,掌握Linux命令都是必不可少的核心技能。

我最初接触Linux是在大学时期,当时为了完成一个课程项目需要在服务器上部署应用。面对黑底白字的终端界面,我完全不知所措——没有图形界面,所有操作都需要通过命令行完成。那次痛苦的经历让我意识到:Linux命令不是可选项,而是必须掌握的生存技能。

2. 文件与目录操作命令精要

2.1 基础导航命令

pwd命令(Print Working Directory)是每个Linux用户最先接触的命令之一。它看似简单,但在复杂的目录结构中能快速定位当前位置。我经常看到新手在多层目录中"迷路",这时一个简单的pwd就能解决问题。

ls命令可能是使用频率最高的命令。但大多数人只停留在ls的基本用法,忽略了它的强大参数:

ls -l # 长格式显示,包含权限、所有者、大小等信息 ls -a # 显示所有文件,包括隐藏文件(以.开头) ls -lh # 人类可读的文件大小显示(KB/MB/GB) ls -t # 按修改时间排序

经验分享:在服务器维护时,我习惯使用ls -lht组合,可以快速找到最近修改的大文件,这对排查磁盘空间问题特别有用。

2.2 文件操作进阶技巧

cpmv命令看似简单,但有些细节容易忽略:

cp -r dir1 dir2 # 递归复制目录 cp -u src dest # 只复制更新的文件 mv -i file1 file2 # 覆盖前询问确认

rm命令是Linux中最危险的命令之一。有一次我不小心在根目录执行了rm -rf *,差点酿成大祸。现在我会:

  1. 先用ls确认要删除的文件
  2. 使用rm -i开启交互模式
  3. 对重要目录设置chattr +i防止误删

3. 文本处理三剑客:grep、awk、sed

3.1 grep的实战应用

grep不仅是搜索工具,更是日志分析的利器:

grep "error" logfile.txt # 基本搜索 grep -i "warning" *.log # 忽略大小写 grep -r "function" /path/to/src # 递归搜索 grep -A3 -B2 "exception" log.txt # 显示匹配行的前后内容

排查技巧:当服务出现问题时,我通常会先用grep -n "关键词" 日志文件定位问题出现的具体行号,然后再分析上下文。

3.2 awk数据处理实战

awk特别适合处理结构化文本,比如日志分析:

awk '{print $1}' access.log # 打印第一列 awk '$3 > 100 {print $0}' data.txt # 过滤第三列大于100的行 awk -F',' '{sum+=$2} END{print sum}' data.csv # 计算第二列总和

3.3 sed流编辑器技巧

sed在批量修改配置文件时无可替代:

sed 's/old/new/g' file.txt # 全局替换 sed -i.bak 's/foo/bar/' config.ini # 直接修改文件并备份 sed '/pattern/d' file.txt # 删除匹配行 sed -n '10,20p' log.txt # 只打印10-20行

4. 系统监控与进程管理

4.1 实时监控命令

top命令是系统监控的瑞士军刀,但很多人不知道这些交互命令:

  • M:按内存使用排序
  • P:按CPU使用排序
  • 1:显示所有CPU核心详情
  • k:结束指定PID的进程

htoptop的增强版,提供了彩色界面和鼠标支持,安装命令:

sudo apt install htop # Debian/Ubuntu sudo yum install htop # CentOS/RHEL

4.2 进程管理深度解析

ps命令的参数组合非常灵活:

ps aux # 显示所有用户的所有进程 ps -ef --forest # 显示进程树状结构 ps -o pid,pcpu,pmem,cmd --sort=-%cpu | head -10 # CPU占用前十的进程

kill命令的正确使用方式:

kill -l # 查看所有信号 kill -9 PID # 强制终止(最后手段) kill -15 PID # 优雅终止(首选) pkill -f "pattern" # 按模式终止进程

5. 网络相关命令大全

5.1 网络状态诊断

netstat已被ss取代,但两者都值得掌握:

ss -tulnp # 查看所有监听端口 ss -s # 统计信息 netstat -r # 路由表 netstat -i # 网络接口统计

pingtraceroute的进阶用法:

ping -c 10 -i 0.2 example.com # 发送10个包,间隔0.2秒 traceroute -T -p 80 example.com # TCP方式跟踪80端口

5.2 安全传输工具

scprsync是服务器间传输文件的利器:

scp -P 2222 file.txt user@remote:/path/ # 指定端口 rsync -avz --progress src/ user@remote:dst/ # 增量同步 rsync -e "ssh -p 2222" # 指定SSH端口

6. 权限与用户管理

6.1 文件权限深度解析

Linux权限系统远比chmod 777复杂:

chmod u=rwx,g=rx,o= file.sh # 精确设置权限 chmod +x script.sh # 添加执行权限 chown user:group file # 改变所有者和组 chattr +i important.file # 设置不可修改属性

安全提示:永远不要随意使用chmod 777,这是安全的大忌。正确的做法是创建适当的用户组,然后设置chmod 750

6.2 用户管理最佳实践

创建系统用户的标准流程:

sudo useradd -m -s /bin/bash username # 创建用户 sudo passwd username # 设置密码 sudo usermod -aG sudo username # 添加到sudo组

检查用户活动的命令:

last # 登录历史 who # 当前登录用户 w # 详细登录信息 sudo -l # 查看自己的sudo权限

7. 实用工具与小技巧

7.1 终端多路复用器

tmux可以防止SSH断开导致任务终止:

tmux new -s session_name # 新建会话 Ctrl+b d # 分离会话 tmux attach -t session_name # 重新连接 tmux ls # 列出所有会话

7.2 命令行效率工具

history命令的妙用:

!100 # 执行历史中第100条命令 !! # 上一条命令 !ssh # 执行最近以ssh开头的命令 Ctrl+r # 反向搜索历史

alias可以简化常用命令:

alias ll='ls -alF' alias grep='grep --color=auto' alias update='sudo apt update && sudo apt upgrade'

8. 常见问题排查指南

8.1 磁盘空间问题

快速定位大文件:

du -sh * # 查看当前目录各文件大小 du -h --max-depth=1 / # 查看根目录各文件夹大小 df -h # 查看磁盘使用情况

处理"磁盘已满"但df显示有空间的特殊情况:

lsof +L1 # 查看被删除但仍被进程占用的文件 sudo /etc/init.d/service restart # 重启相关服务释放空间

8.2 性能瓶颈分析

系统负载高时的排查步骤:

  1. uptime查看负载平均值
  2. tophtop找CPU占用高的进程
  3. free -m检查内存使用
  4. iostat -x 1查看磁盘I/O
  5. dmesg | tail检查内核日志

9. 命令组合与脚本入门

9.1 强大的管道操作

将多个命令组合可以解决复杂问题:

# 统计当前目录下每种文件类型的数量 find . -type f | sed 's/.*\.//' | sort | uniq -c | sort -nr # 监控日志中特定错误出现的频率 tail -f app.log | grep --line-buffered "ERROR" | awk '{print $1,$2}' | uniq -c

9.2 基础Shell脚本

一个实用的备份脚本示例:

#!/bin/bash # 简单目录备份脚本 BACKUP_DIR="/backups" TARGET_DIR="$1" DATE=$(date +%Y%m%d) if [ ! -d "$TARGET_DIR" ]; then echo "错误:目录不存在" exit 1 fi tar -czf "$BACKUP_DIR/backup_$(basename $TARGET_DIR)_$DATE.tar.gz" "$TARGET_DIR" echo "备份完成:$BACKUP_DIR/backup_$(basename $TARGET_DIR)_$DATE.tar.gz"

10. 学习资源与进阶路径

10.1 官方文档与社区

  • man命令是最权威的学习资源,如man ls
  • tldr工具提供简洁的常用命令示例:npm install -g tldr
  • Linux文档项目(tldp.org)提供大量指南

10.2 实践建议

  1. 每天学习2-3个新命令并实际使用
  2. 尝试用命令行完成所有日常任务
  3. 建立自己的命令备忘单
  4. 参与开源项目,阅读他人的脚本

学习Linux命令就像学习一门新语言——开始时可能困难,但随着不断练习,你会发现自己思考问题的方式也在改变。我至今记得第一次用一行命令完成同事需要半小时手动操作的任务时的成就感。坚持下来,你会发现命令行不是障碍,而是提升效率的超级武器。

← 返回列表