1. Linux指令基础与核心概念
作为一名Linux系统管理员,我每天的工作都离不开各种命令行操作。很多人觉得Linux指令复杂难记,其实只要理解了它的设计哲学,就能快速掌握这套高效工具。Linux命令行的核心思想可以概括为三点:一切皆文件、单一职责原则、组合使用威力大。
Linux系统中,所有设备、进程、网络连接都被抽象为文件。比如插入一个U盘,系统会生成/dev/sdb这样的设备文件;查看CPU信息可以直接读/proc/cpuinfo这个虚拟文件。这种设计使得我们可以用统一的文件操作命令处理各种资源。
提示:初学者常犯的错误是试图记住所有命令参数。实际上,掌握man和--help查看帮助文档的技巧比死记硬背更重要。
1.1 命令结构解析
典型的Linux命令由四部分组成:
code复制命令 [选项] [参数] [重定向]
• 命令:要执行的操作,如ls、cd等
• 选项:调整命令行为的开关,分短格式(-l)和长格式(--all)
• 参数:命令作用的对象,通常是文件或目录
• 重定向:控制输入输出流向,如>、>>、<
比如这条常用命令:
bash复制ls -al /home > filelist.txt 2>&1
表示以详细格式(-a显示隐藏文件,-l长列表)列出/home目录内容,将标准输出和错误输出都重定向到filelist.txt文件。
1.2 文件系统导航
刚接触Linux时,文件系统导航是最基础的技能。我建议先掌握这几个核心命令:
bash复制pwd # 显示当前工作目录
cd # 切换目录(绝对路径/相对路径)
ls # 列出目录内容
特别要注意的是:
- Linux路径分隔符是正斜杠(/),与Windows反斜杠()不同
- 家目录可以用~表示,比如
cd ~/Documents - 上一个目录用..表示,当前目录用.表示
我经常看到新手在脚本中这样写:
bash复制cd /some/long/path
./run_script.sh
其实更专业的写法是:
bash复制(cd /some/long/path && ./run_script.sh)
这样不会改变当前shell的工作目录。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 文件操作与管理指令
2.1 基础文件操作四件套
bash复制cp # 复制文件/目录
mv # 移动或重命名
rm # 删除
mkdir # 创建目录
这些命令看似简单,但有些细节需要注意:
- 使用
cp -r递归复制目录时,注意权限保留问题 mv命令在同一个文件系统内是原子操作,跨设备则相当于复制+删除rm -rf是危险操作,建议先执行ls确认目标
我在生产环境见过最惨痛的教训是有人执行了:
bash复制rm -rf / path/to/dir
注意/和path之间的空格!这会导致根目录被删除。现在我都习惯先用ls查看目标是否存在,再按Tab键自动补全路径。
2.2 文件查看与分析
bash复制cat # 连接文件并打印
less # 分页查看器
head # 显示文件开头
tail # 显示文件末尾
grep # 文本搜索
这些命令组合起来非常强大。比如查看最近100行日志中出现的错误:
bash复制tail -n 100 /var/log/syslog | grep -i error
专业技巧:使用
tail -f可以实时跟踪日志文件变化,配合grep过滤特别有用。
2.3 权限与属性管理
Linux的权限系统常让新手困惑。记住这个结构:
code复制-rwxr-xr-x 1 user group 4096 Jan 1 10:00 file
↑ 权限位 属主 属组 大小 修改时间 文件名
关键命令:
bash复制chmod # 修改权限
chown # 修改属主
chgrp # 修改属组
权限数字表示法:
- 4 = 读(r)
- 2 = 写(w)
- 1 = 执行(x)
所以chmod 755 file表示:
- 属主:7 = 4+2+1 (rwx)
- 属组:5 = 4+1 (r-x)
- 其他:5 = 4+1 (r-x)
3. 系统监控与进程管理
3.1 系统状态查看
bash复制top # 动态进程查看器
htop # 增强版top(需安装)
df # 磁盘空间
free # 内存使用
uptime # 系统运行时间
我更喜欢用htop,因为它支持:
- 鼠标操作
- 树状视图
- 颜色标记
- 直接杀死进程
安装方法:
bash复制sudo apt install htop # Debian/Ubuntu
sudo yum install htop # CentOS/RHEL
3.2 进程管理
bash复制ps # 进程快照
kill # 终止进程
pkill # 按名称杀进程
pgrep # 按名称查进程
查看Java进程的经典命令:
bash复制ps -ef | grep java
终止进程的几种方式:
bash复制kill PID # 发送TERM信号(15)
kill -9 PID # 强制终止(KILL信号)
pkill -f "pattern" # 按匹配模式终止
重要提示:kill -9是最后手段,可能导致资源未释放。应先尝试普通kill给进程清理的机会。
4. 网络相关指令
4.1 网络配置与诊断
bash复制ifconfig # 网络接口配置(旧)
ip # 新版网络工具
ping # 测试连通性
traceroute # 路由追踪
netstat # 网络统计
ss # 更快的netstat替代品
查看所有监听端口:
bash复制ss -tulnp
选项说明:
- -t: TCP
- -u: UDP
- -l: 监听状态
- -n: 不解析服务名
- -p: 显示进程信息
4.2 远程连接与文件传输
bash复制ssh # 安全shell连接
scp # 安全复制
rsync # 高效文件同步
从本地复制到远程:
bash复制scp file.txt user@remote:/path/
使用rsync增量同步:
bash复制rsync -avz /local/dir/ user@remote:/remote/dir/
选项说明:
- -a: 归档模式(保留权限等)
- -v: 详细输出
- -z: 压缩传输
5. 文本处理三剑客
5.1 grep:文本搜索
bash复制grep "pattern" file
常用选项:
- -i: 忽略大小写
- -v: 反向匹配
- -r: 递归目录
- -E: 扩展正则表达式
统计日志中每个错误出现的次数:
bash复制grep -o "ERROR_[0-9]*" logfile | sort | uniq -c | sort -nr
5.2 sed:流编辑器
bash复制sed 's/old/new/g' file
批量重命名文件:
bash复制for f in *.jpg; do mv "$f" "$(echo $f | sed 's/2020/2021/')"; done
5.3 awk:文本分析
bash复制awk '{print $1}' file # 打印第一列
统计Nginx日志中每个IP的访问次数:
bash复制awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10
6. 实用技巧与高级用法
6.1 命令组合与管道
Linux最强大的特性之一是可以将简单命令通过管道(|)组合成复杂操作。例如找出占用CPU最高的进程:
bash复制ps -eo pid,ppid,cmd,%cpu --sort=-%cpu | head
6.2 后台任务管理
bash复制command & # 后台运行
nohup command # 退出终端仍运行
jobs # 查看后台任务
fg %n # 前台恢复
bg %n # 后台继续
6.3 定时任务
使用crontab设置定时任务:
bash复制crontab -e
格式:
code复制* * * * * command
┬ ┬ ┬ ┬ ┬
│ │ │ │ └─ 星期几 (0 - 6) (0是周日)
│ │ │ └─── 月份 (1 - 12)
│ │ └───── 日 (1 - 31)
│ └─────── 小时 (0 - 23)
└───────── 分钟 (0 - 59)
每天凌晨3点备份的例子:
code复制0 3 * * * /usr/bin/rsync -a /data/ /backup/
6.4 历史命令优化
bash复制history # 查看历史
!n # 执行第n条历史命令
!! # 上一条命令
!string # 执行最近以string开头的命令
我通常在~/.bashrc中添加这些配置:
bash复制export HISTSIZE=10000
export HISTFILESIZE=20000
export HISTTIMEFORMAT="%F %T "
shopt -s histappend
这样可以:
- 保存更多历史记录
- 显示命令执行时间
- 避免多个终端会话覆盖历史
7. 开发相关指令
7.1 编译与构建
bash复制gcc # C编译器
make # 构建工具
cmake # 跨平台构建
典型C项目编译流程:
bash复制./configure
make
sudo make install
7.2 版本控制
bash复制git # 分布式版本控制
svn # 集中式版本控制
Git常用命令:
bash复制git clone
git status
git add
git commit
git push
git pull
7.3 调试工具
bash复制gdb # GNU调试器
strace # 系统调用跟踪
ltrace # 库调用跟踪
调试运行中的进程:
bash复制strace -p PID
8. 安全相关指令
8.1 用户与组管理
bash复制useradd # 添加用户
usermod # 修改用户
userdel # 删除用户
passwd # 修改密码
创建系统用户:
bash复制sudo useradd -r -s /sbin/nologin myservice
8.2 防火墙管理
bash复制iptables # 传统防火墙
ufw # 简化防火墙(Ubuntu)
firewalld # 新式防火墙(RHEL/CentOS)
查看iptables规则:
bash复制sudo iptables -L -n -v
8.3 文件完整性检查
bash复制md5sum # 计算MD5哈希
sha256sum # 计算SHA256哈希
验证文件完整性:
bash复制echo "expected_hash file" | sha256sum -c
9. 容器与虚拟化指令
9.1 Docker基础命令
bash复制docker ps # 查看容器
docker images # 查看镜像
docker run # 运行容器
docker build # 构建镜像
启动一个Nginx容器:
bash复制docker run -d -p 80:80 --name mynginx nginx
9.2 虚拟机管理
bash复制virsh # KVM管理工具
VBoxManage # VirtualBox命令行
列出KVM虚拟机:
bash复制virsh list --all
10. 性能分析与优化
10.1 系统性能监控
bash复制vmstat # 虚拟内存统计
iostat # I/O统计
mpstat # CPU统计
sar # 系统活动报告
10.2 进程级性能分析
bash复制perf # Linux性能分析工具
strace # 系统调用分析
valgrind # 内存调试工具
使用perf分析CPU使用:
bash复制perf top
11. 实用脚本示例
11.1 备份脚本
bash复制#!/bin/bash
# 简单备份脚本
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d)
TARGET_DIRS=("/etc" "/home" "/var/www")
mkdir -p $BACKUP_DIR/$DATE
for dir in "${TARGET_DIRS[@]}"; do
tar -czf $BACKUP_DIR/$DATE/$(basename $dir).tar.gz $dir
done
# 删除7天前的备份
find $BACKUP_DIR -type d -mtime +7 | xargs rm -rf
11.2 日志分析脚本
bash复制#!/bin/bash
# 分析Nginx日志中的404错误
LOG_FILE="/var/log/nginx/access.log"
OUTPUT_FILE="/tmp/404_analysis.txt"
echo "Top 10 404 URLs:" > $OUTPUT_FILE
grep ' 404 ' $LOG_FILE | awk '{print $7}' | sort | uniq -c | sort -nr | head -10 >> $OUTPUT_FILE
echo -e "\nTop 10 client IPs with 404:" >> $OUTPUT_FILE
grep ' 404 ' $LOG_FILE | awk '{print $1}' | sort | uniq -c | sort -nr | head -10 >> $OUTPUT_FILE
12. 终端使用技巧
12.1 快捷键
• Ctrl+C:终止当前命令
• Ctrl+Z:暂停当前命令(可用fg恢复)
• Ctrl+D:EOF(退出终端)
• Ctrl+R:反向搜索历史命令
• Ctrl+A:移动到行首
• Ctrl+E:移动到行尾
• Alt+.:插入上一个命令的最后一个参数
12.2 别名设置
在~/.bashrc中添加:
bash复制alias ll='ls -alF'
alias grep='grep --color=auto'
alias df='df -h'
alias du='du -h'
使配置生效:
bash复制source ~/.bashrc
12.3 命令补全
安装bash-completion增强补全功能:
bash复制sudo apt install bash-completion # Debian/Ubuntu
sudo yum install bash-completion # CentOS/RHEL
13. 常见问题排查
13.1 磁盘空间不足
查看磁盘使用情况:
bash复制df -h
找出大文件:
bash复制du -h / | sort -rh | head -20
13.2 内存不足
查看内存使用:
bash复制free -h
找出内存占用高的进程:
bash复制ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
13.3 网络连接问题
测试连通性:
bash复制ping -c 4 google.com
检查DNS解析:
bash复制nslookup google.com
dig google.com
查看路由:
bash复制traceroute google.com
14. 进阶学习资源
14.1 在线文档
• man7.org:完整的Linux手册页
• tldr.sh:简化版命令示例
• linux.die.net:Linux命令大全
14.2 书籍推荐
• 《Linux命令行与shell脚本编程大全》
• 《鸟哥的Linux私房菜》
• 《UNIX环境高级编程》
14.3 练习平台
• OverTheWire:Bandit游戏学习Linux安全
• LinuxJourney:交互式学习网站
• Codewars:有Linux相关的编程挑战
15. 个人经验分享
在多年的Linux系统管理工作中,我总结了这些实用建议:
-
善用Tab键补全:不仅能节省时间,还能避免拼写错误。我习惯在输入长路径时输入前几个字符就按Tab补全。
-
命令历史搜索:Ctrl+R反向搜索比滚动历史高效得多。输入部分命令片段就能快速定位。
-
脚本化重复工作:任何需要执行超过3次的操作,都应该考虑写成脚本。我维护着一个~/bin目录存放各种实用脚本。
-
理解原理而非死记:比如理解输入输出重定向的原理后,就能灵活组合各种命令,而不是死记硬背特定用法。
-
测试环境先行:危险操作(如rm -rf)先在测试环境验证。我曾经因为一个通配符表达式错误差点删除生产数据。
-
文档习惯:复杂的命令和脚本一定要添加注释。我使用如下格式:
bash复制# [2023-01-01] 创建者:张三
# 用途:备份MySQL数据库到S3
# 参数:$1-数据库名 $2-S3路径
-
版本控制:即使是个人使用的脚本也建议用git管理。我吃过好几次误修改后无法恢复的亏。
-
关注退出状态:命令执行后检查$?变量。很多脚本错误是因为忽略了前一个命令的失败状态。
-
使用配置文件:将可变参数提取到配置文件中。我的备份脚本都支持通过conf文件调整参数。
-
持续学习:Linux生态不断发展,定期了解新工具(如替代ifconfig的ip命令)。我每月会抽时间浏览Linux新闻和博客。
