做运维这些年,身边被问到最多的问题就是:「Linux命令那么多,到底该先学哪些?」
说真的,Linux的命令数量是真的多,man手册翻一遍没几天根本看不完。但说实话,日常工作中真正高频用到的,也就那么100来个。把这100多个命令吃透,足以应付90%的工作场景。
今天这篇,是我花了好几个周末,把这些年高频用的命令重新整理了一遍。每个命令都配上了常用参数和真实场景示例。建议先收藏起来,遇到不会的随时翻一翻,比查百度快多了。
一、本文速览
整篇文章按使用场景分了 10 大模块,从基础的「文件和目录」一路讲到「网络和服务」,最后还附了「故障排查」和「实用工具」。你可以从头读到尾,也可以挑自己薄弱的模块重点看。
• 文件和目录操作:ls / cd / cp / mv / rm 等
• 文件查看与编辑:cat / less / vi / sed 等
• 文本搜索与处理:grep / awk / sort 等
• 用户与权限:useradd / chmod / chown 等
• 系统监控与进程:ps / top / free / kill 等
• 磁盘与文件系统:df / du / mount / fdisk 等
• 压缩解压:tar / zip / gzip 等
• 网络命令:ping / curl / ssh / netstat 等
• 软件包管理:yum / apt / dnf 等
• 实用工具:history / alias / crontab 等
一、文件和目录操作
这是平时用得最多的一类命令,几乎每次登录服务器都会敲这些。建议先把这几个练熟,命令行也就算入门了。
1. pwd — 查看当前所在目录
刚登上一台服务器,不知道自己在哪?敲 pwd 就行。
[root@server ~]# pwd
/root
💡 很多人不知道 -P 参数的作用:它会显示真实的物理路径,不带任何软链接。比如 /var/mail 实际指向 /var/spool/mail,加上 -P 就显示真实位置。
2. cd — 切换目录
这应该是所有人接触 Linux 学会的第一个命令。
cd /etc/sysconfig # 绝对路径进入
cd network-scripts # 相对路径进入
cd .. # 返回上级目录
cd ~ # 回到当前用户的家目录
cd - # 回到上一次所在的目录(极其实用)
cd # 不带任何参数 = cd ~
💡 cd - 这个小技巧很多人不知道。比如你刚才在 A 目录改完配置,切到 B 目录看日志,想回到 A 目录继续改,直接 cd - 一下就回去了。
3. ls — 列出目录内容
ls 命令的参数组合非常多,记住下面这几个常用的就够用了:
ls # 简单列出
ls -l # 详细列表(最常用)
ls -lh # 文件大小以KB/MB显示,可读性更好
ls -a # 显示隐藏文件(以.开头的)
ls -la # 详细+隐藏文件
ls -lt # 按修改时间倒序(最新的在最上面)
ls -ltr # 按修改时间正序(最旧的在最上面)
ls -R # 递归列出所有子目录
ls -d # 只显示目录本身,不显示内容
ls -i # 显示文件的inode号
ls --color=auto # 不同类型文件用不同颜色显示
💡 我日常用得最多的是 ls -lhtr —— 先看时间倒序的详细列表,比 ls -la 实用得多。找最近改过的文件特别方便。
4. mkdir — 创建目录
mkdir test # 创建一个目录
mkdir -p a/b/c/d # 递归创建多级目录(最常用)
mkdir -m 755 test # 创建时指定权限
mkdir -v dir1 dir2 dir3 # 创建多个目录并显示详情
💡 -p 参数是必备的。日常工作中经常需要一次性建多级目录,没有 -p 的话父目录不存在就会报错。
5. touch — 创建空文件 / 更新文件时间戳
touch newfile.txt # 创建一个空文件
touch a.txt b.txt c.txt # 一次性创建多个
touch -t 202601011200 file.log # 手动指定时间戳
6. cp — 复制文件或目录
复制操作是日常最高频的命令之一。
cp a.txt b.txt # 复制文件
cp -r /etc /tmp/ # 递归复制整个目录(必备)
cp -p a.txt /tmp/ # 保留原文件的属性(时间戳、权限)
cp -a /etc /backup/ # 归档复制,等同于 -dpr,备份神器
cp -i a.txt /tmp/ # 覆盖前询问(推荐加上)
cp -v a.txt /tmp/ # 显示复制详情
cp -f a.txt /tmp/ # 强制覆盖(不询问)
cp -l a.txt b.txt # 创建硬链接而不是复制
💡 备份配置文件的时候强烈建议用 cp -ap,一个是保留权限,另一个是保留时间戳。这样以后查「这个配置什么时候改的」特别有用。
7. mv — 移动 / 重命名
mv 既能移动文件,也能重命名。在同一个目录下就是重命名,跨目录就是移动。
mv a.txt b.txt # 重命名
mv a.txt /tmp/ # 移动到指定目录
mv -i a.txt /tmp/ # 覆盖前询问
mv -n a.txt /tmp/ # 不覆盖已存在的文件
mv -u *.log /archive/ # 只移动比目标位置更新的文件
mv -v file /tmp/ # 显示移动详情
8. rm — 删除文件或目录
rm 是最危险的命令之一,没有回收站,删了就没了。
rm a.txt # 删除文件
rm -f a.txt # 强制删除,不询问
rm -r dir # 递归删除目录(删目录必加)
rm -rf dir # 强制递归删除(最危险也最常用)
rm -i a.txt # 删除前询问(推荐日常加上)
rm -v a.txt # 显示删除详情
rm -rf /* # 千万别敲!!!
⚠️ 生产环境上敲 rm -rf 之前,必须三思:路径对不对?确认到哪个目录了?是不是在根目录下?见过太多人因为手抖 rm -rf /* 把整个系统删了的惨案。
💡 两个安全小技巧:① 给 rm 设置别名 alias rm='rm -i' 强制询问;② 用 trash-cli 替代 rm,删除的文件会进回收站,可以找回。
9. rmdir — 删除空目录
这个命令现在用得比较少了,rm -r 都能干。但如果只想删空目录,rmdir 更安全。
rmdir emptydir # 删除空目录
rmdir -p a/b/c # 递归删除空目录
10. find — 文件查找之王
find 命令的强大在于「条件组合」,可以按名字、大小、时间、权限各种维度去搜。
find /etc -name "*.conf" # 按名字查找
find / -name "nginx.conf" 2>/dev/null # 全盘查找并屏蔽错误
find /var/log -type f -mtime +30 # 查找30天前修改的文件
find /var/log -type f -mtime -7 # 查找7天内修改的文件
find / -size +100M # 查找大于100M的文件
find / -size -1k # 查找小于1K的文件
find / -perm 755 # 按权限查找
find / -user mysql # 按属主查找
find / -name "*.log" -delete # 查找并删除
find . -name "*.txt" -exec cp {} /tmp/ \; # 查找并执行操作
find / -empty # 查找空文件或空目录
find . -name "*.sh" -newer a.sh # 比a.sh新的文件
💡 find 的 -exec 参数能接任何命令,这是它的精髓。比如批量改权限、批量打包、批量备份,写一个 find 命令能省下写脚本的功夫。
11. locate / which / whereis — 快速定位命令
locate nginx.conf # 从数据库快速查找(速度极快)
updatedb # 更新locate的数据库
which nginx # 查找命令的可执行文件位置
whereis nginx # 查找命令的二进制、源码、帮助文档
type cd # 查看命令是内置还是外部
💡 locate 比 find 快很多,因为它是从数据库里查的。但新创建的文件要等 updatedb 后才能查到(一般系统会每天自动更新)。
二、文件查看与编辑
想看一个文件里写了啥?想改配置?这几个命令必须掌握。
12. cat — 显示文件全部内容
cat a.txt # 一次性显示整个文件
cat -n a.txt # 显示行号
cat -b a.txt # 只给非空行编号
cat -A a.txt # 显示特殊字符(制表符、行尾符等)
cat a.txt b.txt > c.txt # 合并两个文件
cat >> a.txt << EOF # 追加多行内容(按需输入)
你好
世界
EOF
💡 查看小文件用 cat 很方便,但如果文件有几个G,cat 会卡死。这时候用 less 或 tail 更合适。
13. less / more — 分页查看
查看大文件必备。less 比 more 更强大,支持上下翻页、搜索。
less /var/log/messages
# less 内常用快捷键:
j / k # 上下滚动一行
Space / b # 下/上一页
g / G # 跳到文件头/尾
/keyword # 向下搜索关键字
?keyword # 向上搜索关键字
n / N # 跳到下一个/上一个匹配
q # 退出
F # 实时跟踪(类似tail -f)
💡 less 的搜索功能比 vim 还好用。直接 / 加上关键字,回车就高亮显示所有匹配项。
14. head / tail — 查看文件头尾
查看日志的时候这两个命令是最高频的。
head -n 20 access.log # 看前20行
tail -n 50 access.log # 看后50行
tail -f /var/log/messages # 实时跟踪日志(运维必会)
tail -F /var/log/syslog # 即使文件被轮转也能继续跟踪
head -c 1k file.txt # 看前1KB
tail -n +20 access.log # 从第20行开始显示到结尾
💡 线上排查问题时,tail -f + grep 组合简直是神器。比如看 Nginx 报错:tail -f /var/log/nginx/error.log | grep "error"。
15. vi / vim — 文本编辑器
vi 是 Linux 自带的编辑器,vim 是 vi 的增强版。学会 vi 几乎是每个 Linux 用户的必修课,因为有些精简系统只有 vi 没有 nano。
vi /etc/nginx/nginx.conf # 编辑文件
vim /etc/hosts # 编辑文件
# 三种模式:
# 1. 命令模式(默认进入)
# i → 进入编辑模式
# : → 进入末行模式
# / → 向下搜索
# ? → 向上搜索
# dd → 删除当前行
# yy → 复制当前行
# p → 粘贴
# u → 撤销
# gg → 到文件头
# G → 到文件尾
# 2. 编辑模式(按i进入)
# 正常打字
# Esc → 返回命令模式
# 3. 末行模式(按:进入)
# :w → 保存
# :q → 退出
# :wq → 保存并退出
# :q! → 强制退出不保存
# :set nu → 显示行号
# :%s/old/new/g → 全文替换
# :nohl → 取消高亮
💡 初学者最常见的问题:编辑完不知道怎么保存退出。记住先按 Esc 退出编辑模式,然后输入 :wq 回车就行。
16. sed — 流编辑器(批量替换)
sed 最大的用途是「批量替换文本」。
sed -i 's/old/new/g' file.txt # 全文替换(最常用)
sed -i 's/old/new/g' *.conf # 批量替换所有.conf文件
sed -i '3s/old/new/g' file.txt # 只替换第3行
sed -i '5,10s/old/new/g' file.txt # 替换5到10行
sed -i '/^#/d' file.txt # 删除所有以#开头的行
sed -i '/^$/d' file.txt # 删除所有空行
sed -n '5,10p' file.txt # 只显示5到10行
sed 's/old/new/' file.txt # 不加-i只预览,不实际修改
sed -i 's/^/prefix/' file.txt # 每行开头加内容
sed -i 's/$/suffix/' file.txt # 每行结尾加内容
💡 sed -i 一定要小心,没有备份就是直接改原文件。建议先用 sed 不加 -i 预览效果,确认无误后再加 -i。
17. awk — 文本分析工具
awk 是处理结构化文本的利器,对日志分析特别有用。
awk '{print $1}' access.log # 打印第1列
awk '{print $1,$4}' access.log # 打印第1和第4列
awk -F: '{print $1}' /etc/passwd # 以:为分隔符
awk '$3 > 100 {print}' file # 打印第3列大于100的行
awk '{sum+=$1} END {print sum}' file # 求和
awk '{count[$1]++} END {for(k in count) print k,count[k]}' file # 统计
awk 'NR==5,NR==10' file # 打印5到10行
awk 'length > 80' file # 打印长度超过80的行
💡 awk 的语法其实就是一个完整的脚本语言。日常用不到太复杂的,但基础的几列、过滤、求和,能让你处理日志快很多。
18. wc — 统计行数/字符数
wc -l file.txt # 统计行数(最常用)
wc -c file.txt # 统计字节数
wc -m file.txt # 统计字符数
wc -w file.txt # 统计单词数
wc -l access.log # 看访问日志有多少行
ls *.log | wc -l # 统计当前目录有几个log文件
三、文本搜索与处理
19. grep — 文本搜索之王
grep 是日志分析最常用的命令,没有之一。
grep "error" file.log # 简单搜索
grep -i "error" file.log # 忽略大小写
grep -n "error" file.log # 显示行号
grep -v "error" file.log # 反向匹配(不包含error的行)
grep -c "error" file.log # 统计匹配行数
grep -r "error" /var/log/ # 递归搜索目录
grep -l "error" *.log # 只显示包含关键字的文件名
grep -E "error|warn" file.log # 支持扩展正则(多个关键字)
grep -A 3 "error" file.log # 显示匹配行和后3行
grep -B 3 "error" file.log # 显示匹配行和前3行
grep -C 3 "error" file.log # 显示匹配行前后各3行
grep "^#" file.txt # 匹配以#开头的行
grep "192.168.1.1" access.log # 查特定IP的访问
ps -ef | grep nginx # 查nginx相关进程
💡 grep 和 ps / tail / find 组合是排查问题的「四大天王」。比如 ps -ef | grep nginx 几乎每个运维每天都要敲几十次。
20. sort / uniq — 排序与去重
sort file.txt # 默认按字母升序
sort -n file.txt # 按数字排序
sort -r file.txt # 倒序
sort -t: -k3 -n /etc/passwd # 以:分隔,按第3列数字排序
sort -u file.txt # 排序并去重(等于sort+uniq)
uniq file.txt # 去重(必须相邻重复才有效)
sort file.txt | uniq -c # 统计每行出现次数(超实用)
sort file.txt | uniq -c | sort -rn | head -10 # 找出出现最多的前10
💡 sort + uniq -c 是分析日志访问量的神器。比如「找出访问量最大的10个IP」一句话就能搞定。
21. diff / patch — 文件对比与打补丁
diff a.txt b.txt # 简单对比
diff -u a.txt b.txt # 统一格式(生成patch用)
diff -ru old/ new/ # 递归对比两个目录
diff a.txt b.txt > fix.patch # 生成补丁
patch a.txt < fix.patch # 打补丁
22. tr — 字符转换
echo "hello" | tr a-z A-Z # 小写转大写
echo "hello" | tr -d "l" # 删除指定字符
echo "hello" | tr -s "l" # 压缩连续重复的字符
tr ':' '\n' < file.txt # 替换:为换行
23. cut — 按列切割
cut -d: -f1 /etc/passwd # 以:分割,取第1列
cut -d, -f1,3 file.csv # 切多个列
cut -c1-10 file.txt # 切每行前10个字符
四、用户与权限管理
Linux 的权限系统是它最严谨的部分之一。搞懂权限,几乎所有权限问题都能自己排查。
24. chmod — 修改权限
chmod 有两种写法:数字法和符号法。
# 数字法(r=4 w=2 x=1)
chmod 755 file.sh # rwxr-xr-x
chmod 644 file.txt # rw-r--r--
chmod 600 id_rsa # 仅所有者可读写
chmod 777 file # 所有权限(危险,生产慎用)
# 符号法(u=用户 g=组 o=其他 a=全部)
chmod u+x file.sh # 给所有者加执行权限
chmod g+w file.txt # 给组加写权限
chmod o-r file.txt # 去掉其他人的读权限
chmod a+x script.sh # 所有人都加执行权限
chmod -R 755 dir # 递归修改目录下所有文件
💡 常见权限组合:① 普通文件 644,② 脚本/可执行文件 755,③ 私钥文件 600。生产环境千万别用 777,等于给所有用户开门。
25. chown — 修改属主/属组
chown user file # 改属主
chown user:group file # 改属主和属组
chown :group file # 只改属组
chown -R user:group dir # 递归修改
💡 改完属主记得检查一遍:ls -l。生产环境上经常因为 chown 改错导致服务起不来。
26. useradd / userdel / usermod — 用户管理
useradd alice # 创建用户
useradd -m -s /bin/bash alice # 创建并自动建家目录、指定shell
useradd -u 1005 -g dev alice # 指定UID和主组
useradd -M nginx # 不创建家目录(给服务账号用)
passwd alice # 设置密码
userdel -r alice # 删除用户并删除家目录
usermod -aG sudo alice # 把alice加入sudo组
usermod -s /bin/zsh alice # 修改默认shell
usermod -L alice # 锁定账户
usermod -U alice # 解锁账户
27. groupadd / groupdel — 组管理
groupadd dev # 创建组
groupdel dev # 删除组
gpasswd -a alice dev # 把用户加入组
gpasswd -d alice dev # 从组中删除用户
groups alice # 查看用户所属组
28. id / who / w — 查看用户信息
id # 查看当前用户的UID/GID
id alice # 查看指定用户
who # 当前登录的所有用户
w # 谁在干嘛(更详细)
whoami # 当前用户名
last # 历史登录记录
lastlog # 所有用户最后登录时间
五、系统监控与进程管理
29. ps — 查看进程
ps aux # 查看所有进程(最常用)
ps -ef # 查看所有进程(另一种风格)
ps aux | grep nginx # 查nginx相关进程
ps -u alice # 看alice用户的进程
ps -p 1234 # 看指定PID
ps --sort=-%cpu # 按CPU使用率倒序
ps --sort=-%mem # 按内存使用率倒序
ps -eo pid,user,pcpu,pmem,comm # 自定义显示字段
💡 ps aux 中的 STAT 列很关键:R=运行中 S=睡眠 Z=僵尸 T=停止。看到大量 Z 状态的进程要警惕,可能是父进程没回收子进程。
30. top / htop — 实时进程监控
top # 经典实时监控
htop # 增强版(更直观,需安装)
# top 内常用快捷键:
P # 按CPU排序
M # 按内存排序
1 # 显示每个CPU核心
k # 输入PID杀进程
q # 退出
c # 显示完整命令行
31. kill / pkill / killall — 杀进程
kill 1234 # 优雅结束(发送SIGTERM)
kill -9 1234 # 强制结束(SIGKILL)
kill -HUP 1234 # 重读配置(不重启进程)
kill -USR1 1234 # 用户自定义信号(nginx日志切割)
pkill nginx # 按进程名杀
pkill -f "python app.py" # 按完整命令行匹配
killall nginx # 同pkill,但只杀完全匹配名字的
⚠️ 生产环境上先用 kill 发送 SIGTERM 让进程优雅退出,30秒还没死再用 kill -9 强杀。直接 kill -9 可能导致数据丢失。
32. free — 查看内存
free -h # 人类可读格式(最常用)
free -m # 以MB为单位
free -g # 以GB为单位
free -s 2 # 每2秒刷新一次
💡 看内存重点关注 available 这一列,而不是 used。available 是「系统真正还能用的内存」,包含了可回收的缓存。
33. uptime — 系统负载
uptime # 显示运行时间和负载
w # 同uptime但更详细
输出中的 load average: 0.50, 0.40, 0.30 分别表示过去1分钟、5分钟、15分钟的平均负载。一般认为负载不超过 CPU 核心数是健康的。
34. uname / hostname — 系统信息
uname -a # 全部信息
uname -r # 内核版本
uname -m # CPU架构
hostname # 主机名
hostnamectl set-hostname newname # 永久改主机名(CentOS 7+)
35. date / cal — 时间日期
date # 当前时间
date "+%Y-%m-%d %H:%M:%S" # 自定义格式
date -d "yesterday" # 昨天
date -d "next monday" # 下周一
date -s "2026-01-01 00:00:00" # 手动改时间
cal # 日历
cal 2026 # 2026年日历
36. dmesg — 内核日志
系统启动出问题时,dmesg 是第一个要看的命令。
dmesg # 查看内核日志
dmesg | grep -i error # 看报错
dmesg -w # 实时跟踪内核日志
dmesg -c # 清空环形缓冲
37. lsof — 查看文件被谁占用
「文件被占用删不掉」是经典问题,lsof 帮你找到占用者。
lsof file.txt # 谁在用这个文件
lsof -i :80 # 谁在用80端口
lsof -u alice # alice打开的文件
lsof /var/log # 谁在用/var/log下的文件
lsof +D /data # 递归查/data目录下被打开的文件
38. strace — 跟踪进程系统调用
排查「为什么这个进程不工作」时特别有用,能看到进程实际在做什么系统调用。
strace -p 1234 # 跟踪指定进程
strace -e trace=open,read,write command # 只跟踪指定系统调用
strace -c command # 统计系统调用
strace -f command # 跟踪子进程
六、磁盘与文件系统
39. df — 磁盘空间
df -h # 人类可读(最常用)
df -T # 同时显示文件系统类型
df -i # 看inode使用情况
df /data # 看指定目录所在分区的使用情况
💡 df 看到的使用率超过 80% 就要警惕,超过 90% 很可能要出问题。磁盘满了最常见的服务报错就是「No space left on device」。
40. du — 目录占用空间
du -sh /var/log # 看目录总大小(最常用)
du -sh * | sort -h # 看当前目录各文件/子目录大小并排序
du -ah /data | sort -h | tail -20 # 找最大的20个文件
du --max-depth=1 /var # 看/var下一级各目录大小
du -h --exclude="*.log" /var # 排除.log文件
💡 排查「磁盘满了」问题的标准动作:df -h 看哪个盘满了 → du -sh /* 找最占空间的目录 → 一直du下去找到具体的大文件。
41. lsblk — 列出块设备
lsblk # 树形显示所有块设备
lsblk -f # 显示文件系统信息
42. mount / umount — 挂载/卸载
mount # 查看已挂载的文件系统
mount /dev/sdb1 /mnt # 挂载到/mnt
mount -t ext4 /dev/sdb1 /mnt # 指定文件系统类型
mount -o ro /dev/sdb1 /mnt # 以只读方式挂载
umount /mnt # 卸载
umount -l /mnt # 强制卸载(即使被占用)
43. fdisk / parted — 磁盘分区
fdisk -l # 列出所有磁盘分区
fdisk /dev/sdb # 给sdb分区(交互式)
parted /dev/sdb mklabel gpt # 创建GPT分区表
⚠️ 分区操作有数据丢失风险,重要数据必须先备份。生产环境操作前建议先在测试环境演练。
44. mkfs — 格式化文件系统
mkfs.ext4 /dev/sdb1 # 格式化为ext4
mkfs.xfs /dev/sdb1 # 格式化为xfs(CentOS 7默认)
mkfs -t ext4 /dev/sdb1 # 同上
七、压缩与解压
45. tar — 归档工具
tar 是 Linux 下最常用的归档命令,配合 gzip / bzip2 / xz 实现压缩。
# 打包(不压缩)
tar -cvf archive.tar dir/
# 打包并用gzip压缩(.tar.gz 或 .tgz)
tar -czvf archive.tar.gz dir/
# 打包并用bzip2压缩(.tar.bz2)
tar -cjvf archive.tar.bz2 dir/
# 打包并用xz压缩(.tar.xz,压缩率最高)
tar -cJvf archive.tar.xz dir/
# 解压(自动识别格式)
tar -xvf archive.tar.gz
# 解压到指定目录
tar -xvf archive.tar.gz -C /target/
# 查看压缩包内容不解压
tar -tvf archive.tar.gz
# 排除某些文件
tar -czvf backup.tar.gz --exclude='*.log' dir/
# 参数说明:
# -c 打包
# -x 解包
# -v 显示详情
# -f 指定文件
# -z gzip
# -j bzip2
# -J xz
# -C 指定解压目录
# -t 查看
# -P 使用绝对路径(危险)
💡 日常备份命令 tar -czvf backup_$(date +%Y%m%d).tar.gz /data,加上日期命名一目了然。
46. zip / unzip
zip -r archive.zip dir/ # 压缩目录
zip -e secure.zip file.txt # 带密码压缩
unzip archive.zip # 解压
unzip -d /target/ archive.zip # 解压到指定目录
unzip -l archive.zip # 查看内容
unzip -P password secure.zip # 带密码解压
47. gzip / gunzip
gzip file.txt # 压缩(会删除原文件)
gzip -k file.txt # 压缩但保留原文件
gzip -d file.txt.gz # 解压
gunzip file.txt.gz # 同上
gzip -9 file.txt # 最大压缩率
gzip -1 file.txt # 最快压缩速度
48. bzip2 / xz
bzip2 file.txt # bzip2压缩
xz file.txt # xz压缩(压缩率最高)
xz -d file.txt.xz # xz解压
八、网络相关命令
49. ping — 测试连通性
ping 8.8.8.8 # 默认一直ping
ping -c 4 8.8.8.8 # 只ping 4次
ping -i 2 8.8.8.8 # 间隔2秒
ping -s 1024 8.8.8.8 # 指定包大小
ping -t 10 8.8.8.8 # 设置TTL
💡 有些服务器为了安全会禁 ping,ping 不通不代表服务器不在线。生产环境判断服务器是否在线,ping 不如 telnet 端口靠谱。
50. curl — 文件传输工具
curl 是排查 HTTP 接口的利器,也是下载文件的好手。
curl https://example.com # 简单请求
curl -I https://example.com # 只看响应头
curl -o file.zip https://example.com/x.zip # 下载文件
curl -O https://example.com/x.zip # 下载并保留原名
curl -L https://example.com # 跟随重定向
curl -X POST -d "name=alice" https://api.example.com/users # POST请求
curl -H "Content-Type: application/json" -d '{"name":"alice"}' https://api.example.com
curl -u user:pass https://example.com # Basic认证
curl -x proxy:8080 https://example.com # 走代理
curl -s https://example.com # 静默模式(不显示进度)
curl -v https://example.com # 显示详细请求过程
curl -k https://example.com # 跳过SSL证书验证
curl -c cookie.txt -b cookie.txt https://example.com # 保存/发送cookie
💡 curl 的 -v 参数是排查问题的杀手锏,能看到完整的 SSL 握手、请求头、响应头。很多「接口调不通」的问题,看 -v 输出就能定位。
51. wget — 下载文件
wget https://example.com/file.zip # 下载
wget -c https://example.com/big.iso # 断点续传
wget -b https://example.com/file.zip # 后台下载
wget -i url.txt # 批量下载(url每行一个)
wget --limit-rate=1m https://example.com # 限速
wget -r -np https://example.com/dir/ # 递归下载整个目录
52. ssh — 远程登录
ssh user@192.168.1.10 # 远程登录
ssh -p 2222 user@server # 指定端口
ssh -i ~/.ssh/id_rsa user@server # 指定私钥
ssh -L 8080:localhost:80 user@server # 本地端口转发
ssh -R 8080:localhost:80 user@server # 远程端口转发
ssh -D 1080 user@server # 动态转发(代理)
ssh -N -f -L 3306:db:3306 user@bastion # 不登录只做转发
💡 ssh -N -f -L 是建立「跳板」的常用方式,把内网的数据库端口通过跳板机转到本地,方便本地工具连。
53. scp — 安全复制
scp file.txt user@server:/path/ # 推到远程
scp user@server:/path/file.txt ./ # 拉回本地
scp -r dir/ user@server:/path/ # 推目录
scp -P 2222 file.txt user@server:/path/ # 指定端口
scp -C file.txt user@server:/path/ # 压缩传输
54. rsync — 增量同步神器
rsync 是数据备份和迁移的首选工具,增量同步省时省力。
# 本地同步
rsync -avh /src/ /dst/
# 推送到远程
rsync -avh /src/ user@server:/dst/
# 拉取远程
rsync -avh user@server:/src/ /dst/
# 常用参数
# -a 归档模式(保留所有属性)
# -v 详细输出
# -h 人类可读
# -z 传输时压缩
# -P 显示进度+断点续传
# --delete 目标端删除源端没有的文件(镜像同步)
# --exclude 排除某些文件
# 实战:同步时排除日志文件
rsync -avh --exclude='*.log' /data/ backup:/backup/
💡 rsync -avh --delete 是镜像同步的「双刃剑」,源端删了文件目标端也会跟着删。生产环境用之前先不加 --delete 试跑一次确认。
55. netstat / ss — 网络状态
netstat -tunlp # 看所有监听的端口(最常用)
netstat -an # 看所有连接
netstat -tn # 只看TCP连接
netstat -tunlp | grep 80 # 看80端口谁在用
ss -tunlp # netstat的现代替代品(更快)
ss -s # 网络统计摘要
ss -tn state established # 看已建立的连接
💡 CentOS 7+ 默认没有 netstat,需要 yum install net-tools。推荐改用 ss,速度更快且无需额外安装。
56. ifconfig / ip — 网络配置
ifconfig # 看所有网卡(传统)
ifconfig eth0 # 看指定网卡
ifconfig eth0 192.168.1.100 # 临时改IP
ip addr # ip命令的现代替代
ip addr show # 同上
ip link set eth0 up # 启用网卡
ip link set eth0 down # 禁用网卡
ip route # 看路由表
ip route add default via 192.168.1.1 # 加默认路由
57. traceroute / mtr — 路由追踪
traceroute 8.8.8.8 # 路由追踪(需安装)
mtr -n 8.8.8.8 # 实时路由监控(更好用)
mtr -r -c 100 8.8.8.8 # 报告模式跑100次
💡 mtr 是排查「到某服务器中间哪一跳慢」的必备工具。能直观看到每一跳的丢包率和延迟,比 traceroute 实用多了。
58. nslookup / dig / host — DNS查询
nslookup www.baidu.com # DNS查询
dig www.baidu.com # 更详细的DNS查询
dig +trace www.baidu.com # 跟踪完整解析过程
host www.baidu.com # 简单DNS反查
59. telnet / nc — 端口测试
telnet 192.168.1.10 80 # 测试端口是否可达
nc -zv 192.168.1.10 80 # 用nc测试端口(推荐)
nc -zv 192.168.1.10 1-1000 # 扫一个端口段
nc -l 9999 # 监听9999端口
💡 生产环境判断「服务是否正常」最直接的方法就是测试端口。能连上不代表服务正常,但连不上一定有问题。
60. iptables — 防火墙
# 查看规则
iptables -L -n -v
iptables -t nat -L -n
# 放行端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 封禁IP
iptables -I INPUT -s 192.168.1.100 -j DROP
# 删除规则(先看行号)
iptables -L -n --line-numbers
iptables -D INPUT 3
# 保存规则
service iptables save
💡 CentOS 7+ 默认用 firewalld,Ubuntu 用 ufw。iptables 是底层工具,所有防火墙最终都基于它。
61. tcpdump — 网络抓包
排查网络问题最强大的工具。
tcpdump -i eth0 # 抓eth0所有包
tcpdump -i eth0 port 80 # 只抓80端口
tcpdump -i eth0 host 192.168.1.100 # 只抓指定IP
tcpdump -i eth0 -w capture.pcap # 保存到文件
tcpdump -i eth0 -nn -A port 80 # 显示包内容
tcpdump -i eth0 -nn -s0 -A port 80 | grep -i "GET" # 看HTTP请求
九、软件包管理
62. yum / dnf(CentOS / RHEL / Fedora)
yum install nginx # 安装软件
yum -y install nginx # 自动确认
yum remove nginx # 卸载
yum update # 更新所有
yum update nginx # 更新指定
yum search nginx # 搜索
yum info nginx # 查看软件信息
yum list installed # 列出已安装
yum list available # 列出可用
yum provides /usr/bin/nginx # 查哪个包提供这个文件
yum clean all # 清理缓存
yum makecache # 重建缓存
# CentOS 8+ 用 dnf:
dnf install nginx
63. apt(Ubuntu / Debian)
apt update # 更新源
apt upgrade # 更新所有包
apt install nginx # 安装
apt remove nginx # 卸载(保留配置)
apt purge nginx # 卸载并删除配置
apt search nginx # 搜索
apt show nginx # 查看信息
apt list --installed # 列出已安装
apt autoremove # 自动清理无用包
64. rpm(CentOS 低版本)
rpm -ivh package.rpm # 安装
rpm -Uvh package.rpm # 升级
rpm -e nginx # 卸载
rpm -qa # 列出所有已安装
rpm -qa | grep nginx # 查nginx相关
rpm -qi nginx # 查已安装的nginx信息
rpm -ql nginx # 列出nginx安装的所有文件
rpm -qf /usr/bin/nginx # 查某个文件属于哪个包
十、实用工具与技巧
65. history — 历史命令
history # 查看历史命令
history 20 # 只看最近20条
history -c # 清空历史
!100 # 执行历史第100条
!! # 重复上一条
!nginx # 执行最近一条以nginx开头的命令
history -d 100 # 删除第100条
Ctrl + R # 搜索历史(必备神技)
💡 Ctrl + R 是效率神器。按下之后输入命令的关键字,shell 会自动补全最近匹配的历史命令。再按一次 Ctrl + R 找更早的。
66. alias — 命令别名
alias # 查看所有别名
alias ll='ls -l' # 给ls -l起个别名
alias rm='rm -i' # 让rm默认询问
alias grep='grep --color=auto'
unalias ll # 取消别名
# 永久生效:写入 ~/.bashrc
echo "alias ll='ls -l'" >> ~/.bashrc
source ~/.bashrc
67. crontab — 定时任务
crontab -l # 查看当前用户的定时任务
crontab -e # 编辑定时任务
crontab -r # 删除所有任务(危险)
# 格式:分 时 日 月 周 命令
# 每天凌晨3点备份
0 3 * * * /opt/backup.sh
# 每5分钟执行一次
*/5 * * * * /opt/check.sh
# 每周一到周五上午9点
0 9 * * 1-5 /opt/work.sh
# 每月1号和15号
0 0 1,15 * * /opt/monthly.sh
💡 crontab 里命令最好用绝对路径,避免因为 PATH 环境变量不一致导致命令找不到。
68. systemctl — 服务管理(systemd)
systemctl start nginx # 启动服务
systemctl stop nginx # 停止服务
systemctl restart nginx # 重启服务
systemctl reload nginx # 重载配置(不重启进程)
systemctl status nginx # 查看状态
systemctl enable nginx # 开机自启
systemctl disable nginx # 取消开机自启
systemctl list-units --type=service # 列出所有服务
systemctl list-unit-files # 列出所有已安装的服务
journalctl -u nginx # 查看nginx的日志
journalctl -u nginx -f # 实时跟踪
69. screen / tmux — 终端复用
远程执行长任务时特别有用,断网了任务不会断。
# screen 用法
screen -S name # 创建会话
screen -ls # 列出会话
screen -r name # 重新连接
Ctrl+A D # 分离会话
# tmux 用法(推荐)
tmux new -s name # 创建会话
tmux ls # 列出会话
tmux attach -t name # 连接会话
Ctrl+B D # 分离会话
Ctrl+B C # 新建窗口
Ctrl+B 方向键 # 切换面板
70. watch — 定时执行
watch -n 2 "ls -lh /data" # 每2秒执行一次
watch -d "netstat -tn" # 高亮变化部分
watch -n 1 "date" # 每秒刷新时间
写在最后
看到这里,恭喜你已经掌握了 Linux 日常会用到的 70 大类高频命令。其实命令本身没什么难的,难的是「出问题时能想到用哪个」。
我的建议是:
• 1. 先把文件管理(ls / cd / cp / mv / rm)和查看(cat / less / tail)这两类练熟,应付80%日常操作。
• 2. 然后是进程(ps / top / kill)和网络(ping / curl / ssh),这是排查问题的核心。
• 3. 最后再学权限(chmod / chown)和服务管理(systemctl),涉及到配置变更才用得到。
强烈建议把这篇文章收藏起来,每次遇到不会的命令就来查一查。用多了,自然就记住了。
如果你觉得有用,欢迎转发给身边需要的朋友。后续我还会写更多 Linux 实战系列的文章,包括 Shell 脚本编写、性能调优、日志分析等等,敬请期待。
有想看的主题或遇到问题,欢迎在评论区留言。