写在前面
刚接触 Linux 的时候,面对黑乎乎的终端窗口,很多人都会懵:这玩意儿怎么用?命令敲错了会不会把系统搞崩?
别慌,Linux 命令其实没那么难。日常工作中真正高频使用的命令也就几十个,掌握了这些,90% 的场景都能应付。这篇文章把这些命令按功能分好类,每个都配上实际例子,照着敲一遍就能学会。
建议先收藏,以后遇到问题直接查对应分类,比百度搜半天快多了。

一、文件和目录操作(最常用的)
1. ls – 查看目录内容
这是用得最多的命令,查看当前目录有什么文件和文件夹。
ls # 查看当前目录
ls -l # 详细列表,显示文件大小、权限、时间
ls -a # 显示隐藏文件(以.开头的)
ls -lh # 文件大小用 K/M/G 显示,更直观
ls /home # 查看指定目录
例子:
ls -lh
# 输出类似:
# drwxr-xr-x 2 root root 4.0K Jan 10 10:00 Documents
# -rw-r--r-- 1 root root 2.5M Jan 10 09:30 photo.jpg
d 开头的是目录,- 开头的是文件,4.0K 和 2.5M 是大小。
2. cd – 切换目录
从一个目录跳到另一个目录。
cd /home # 进入 home 目录
cd Documents # 进入当前目录下的 Documents
cd .. # 返回上一级目录
cd ~ # 回到用户主目录(比如 /root 或 /home/用户名)
cd - # 返回上一次所在的目录
小技巧: cd 后面不写路径,默认回到主目录,等于 cd ~。
3. pwd – 显示当前路径
有时候转了好几层目录,忘了自己在哪,pwd 告诉你当前位置。
pwd
# 输出:/home/user/Documents/Projects
4. mkdir – 创建目录
mkdir test # 创建一个叫 test 的目录
mkdir -p a/b/c # 创建多层目录,a 下面有 b,b 下面有 c
mkdir test1 test2 # 同时创建多个目录
-p 参数很好用,一次性建多层目录,不用一层一层建。
5. rm – 删除文件和目录
这个命令用得很多,但也有点危险,删了就找不回来了。
rm file.txt # 删除文件
rm -r folder # 删除目录(必须加 -r)
rm -rf folder # 删除目录且不提示确认(f 是强制)
rm -i file.txt # 删除前询问确认
注意事项:
- 删目录必须加 -r,否则报错
- rm -rf 没有确认提示,慎用,尤其是 rm -rf /(这会删掉整个系统)
- 建议习惯用 rm -i,删前多确认一次
6. cp – 复制文件和目录
cp file1.txt file2.txt # 把 file1 复制一份叫 file2
cp file.txt /home/backup/ # 复制到指定目录
cp -r folder1 folder2 # 复制目录(必须加 -r)
cp -p file.txt backup.txt # 复制时保留原文件的权限和时间
7. mv – 移动或重命名
mv 有两个功能:移动文件到其他目录,或者给文件改名字。
mv old.txt new.txt # 重命名文件
mv file.txt /home/docs/ # 移动文件到其他目录
mv folder1 /home/backup/ # 移动目录
mv *.txt /home/docs/ # 把所有 txt 文件移到 docs 目录
8. touch – 创建空文件或更新时间戳
touch newfile.txt # 创建一个空文件
touch existing.txt # 更新文件的时间戳(访问和修改时间)
touch a.txt b.txt # 同时创建多个文件
创建空文件干嘛用?有时候脚本需要判断文件是否存在,先 touch 一个占位。
9. cat – 查看文件内容
小文件直接 cat,大文件别用,会刷屏。
cat file.txt # 显示文件全部内容
cat -n file.txt # 显示内容并带行号
cat a.txt b.txt > c.txt # 把 a 和 b 合并写入 c
10. more 和 less – 分页查看大文件
文件太大,cat 会刷屏,用 more 或 less 分页看。
more largefile.txt # 分页查看,按空格翻页,按 q 退出
less largefile.txt # 比 more 更好用,可以上下翻页,按 q 退出
less 功能更强,可以搜索(按 / 输入关键词),建议大文件都用 less。
11. head 和 tail – 查看文件开头或结尾
只看文件的前几行或后几行。
head file.txt # 显示前 10 行
head -n 20 file.txt # 显示前 20 行
tail file.txt # 显示后 10 行
tail -n 50 file.txt # 显示后 50 行
tail -f logfile.txt # 实时查看文件尾部(日志监控常用)
tail -f 监控日志特别有用,日志文件不断更新,你能实时看到新内容。
12. find – 查找文件
不知道文件在哪,find 帮你找。
find /home -name "*.txt" # 在 home 目录找所有 txt 文件
find . -name "test*" # 在当前目录找以 test 开头的文件
find / -size +100M # 找大于 100M 的文件
find /home -type d # 只找目录
find . -mtime -7 # 找最近 7 天修改过的文件
find 功能很强,可以按名字、大小、类型、时间等多种条件搜索。
13. grep – 搜索文件内容
在文件里找关键词,grep 是神器。
grep "error" logfile.txt # 在文件里找 error这个词
grep -i "error" logfile.txt # 忽略大小写,Error、ERROR都能匹配
grep -n "error" logfile.txt # 显示行号
grep -r "error" /home/logs/ # 递归搜索整个目录
grep -c "error" logfile.txt # 只显示匹配了多少行
grep -v "error" logfile.txt # 显示不包含 error 的行
配合其他命令用更强大:
cat logfile.txt | grep "error" # 先 cat 再 grep
ps aux | grep nginx # 查找 nginx 进程
14. ln – 创建链接
链接分两种:软链接(类似快捷方式)和硬链接。
ln -s /home/file.txt link.txt # 创建软链接(最常用)
ln /home/file.txt hardlink.txt # 创建硬链接
软链接更常用,删了原文件,软链接会失效;硬链接相当于文件的另一个入口,删了原文件,硬链接还能访问。
15. tree – 树状显示目录结构
比 ls 更直观,能看到目录的层级结构。
tree # 显示当前目录的树状结构
tree -L 2 # 只显示 2 层深度
tree /home # 显示指定目录
tree -d # 只显示目录,不显示文件
如果系统没有 tree,需要先安装:yum install tree 或 apt install tree。
16. file – 查看文件类型
有时候文件没后缀名,不知道是什么类型,file 命令告诉你。
file photo.jpg
# 输出:photo.jpg: JPEG image data, JFIF standard 1.01
file document.pdf
# 输出:document.pdf: PDF document, version 1.4
file script.sh
# 输出:script.sh: Bourne-Again shell script, ASCII text executable
17. stat – 查看文件详细信息
比 ls -l 更详细,能看到访问时间、修改时间、状态改变时间。
stat file.txt
# 输出包含:
# Size: 1024 # 文件大小
# Access: 2025-01-10 10:00:00 # 访问时间
# Modify: 2025-01-09 15:30:00 # 修改时间
# Change: 2025-01-09 15:30:00 # 状态改变时间
二、文件内容编辑和处理
18. echo – 输出文本
echo "Hello World" # 输出文字
echo "Hello" > file.txt # 把文字写入文件(覆盖原有内容)
echo "Hello" >> file.txt # 追加到文件末尾
echo -n "Hello" # 输出不换行
echo $PATH # 输出环境变量的值
写脚本时经常用 echo 输出提示信息或者写入文件。
19. wc – 统计文件行数、字数、字节数
wc file.txt # 显示行数、字数、字节数
wc -l file.txt # 只显示行数
wc -w file.txt # 只显示字数
wc -c file.txt # 只显示字节数
wc -l *.txt # 统计所有 txt 文件的行数
20. sort – 排序文件内容
sort file.txt # 按字母顺序排序
sort -n file.txt # 按数字排序
sort -r file.txt # 反向排序
sort -u file.txt # 排序并去重
sort -k 2 file.txt # 按第 2 列排序
21. uniq – 去除重复行
uniq file.txt # 去除连续重复的行
uniq -c file.txt # 显示每行出现的次数
sort file.txt | uniq # 先排序再去重(更彻底)
uniq 只去除连续重复的行,配合 sort 用效果更好。
22. cut – 提取文件中的列
文件是按列排列的(比如 CSV),提取某一列用 cut。
cut -d ',' -f 1 file.csv # 用逗号分隔,取第 1 列
cut -d ':' -f 1,3 /etc/passwd # 用冒号分隔,取第 1 和第 3 列
cut -c 1-5 file.txt # 取每行的第 1-5 个字符
23. diff – 比较两个文件的差异
diff file1.txt file2.txt # 显示差异
diff -u file1.txt file2.txt # 用 unified 格式显示(更易读)
diff -r folder1 folder2 # 比较两个目录的差异
24. sed – 流编辑器(替换文本)
sed 功能很强大,最常用的是替换文本。
sed 's/old/new/' file.txt # 把每行第一个 old 替换为 new
sed 's/old/new/g' file.txt # 把所有 old 替换为 new(g 表示全局)
sed -i 's/old/new/g' file.txt # 直接修改文件(-i 表示修改原文件)
sed '/^$/d' file.txt # 删除空行
sed '5d' file.txt # 删除第 5 行
sed 还能做很多复杂操作,但这几个是最常用的。
25. awk – 文本处理工具
awk 比 sed 更强大,可以按列处理数据,还能做计算。
awk '{print $1}' file.txt # 打印每行的第 1 列(默认空格分隔)
awk -F ',' '{print $1,$3}' file.csv # 用逗号分隔,打印第 1 和第 3 列
awk '{sum += $1} END {print sum}' numbers.txt # 计算第 1 列的总和
awk '$3 > 100' file.txt # 打印第 3 列大于 100 的行
awk 'NR==5' file.txt # 只打印第 5 行
awk 适合处理结构化文本,比如日志分析、数据提取。
26. tr – 字符转换
tr 'a-z' 'A-Z' file.txt # 小写转大写
tr 'A-Z' 'a-z' file.txt # 大写转小写
tr -d '0-9' file.txt # 删除所有数字
tr -s ' ' file.txt # 把多个空格压缩成一个
27. tee – 同时输出到屏幕和文件
tee output.txt # 输出到屏幕并写入文件
tee -a output.txt # 追加写入文件
ls | tee list.txt # ls 结果显示在屏幕并写入 list.txt
配合管道使用,既能看到结果又能保存记录。
三、压缩和解压
28. tar – 打包和压缩(最常用)
tar 是 Linux 最常用的打包工具,配合 gzip 或 bzip2 压缩。
tar -cvf archive.tar folder # 打包文件夹(不压缩)
tar -czvf archive.tar.gz folder # 打包并用 gzip 压缩
tar -cjvf archive.tar.bz2 folder # 打包并用 bzip2 压缩
tar -xvf archive.tar # 解包
tar -xzvf archive.tar.gz # 解包 gzip 压缩的文件
tar -xjvf archive.tar.bz2 # 解包 bzip2 压缩的文件
tar -xzvf archive.tar.gz -C /home/ # 解包到指定目录
参数解释:
- c:创建(打包)
- x:解包
- v:显示过程
- f:指定文件名
- z:gzip 压缩/解压
- j:bzip2 压缩/解压
- C:指定目标目录
记住这几个组合就够了:打包用 czvf,解压用 xzvf。
29. gzip 和 gunzip – gzip 压缩解压
gzip file.txt # 压缩文件,生成 file.txt.gz(原文件消失)
gzip -k file.txt # 压缩但保留原文件
gunzip file.txt.gz # 解压
gzip -d file.txt.gz # 解压(等于 gunzip)
gzip -r folder # 递归压缩目录里的所有文件
gzip 只能压缩单个文件,要压缩多个文件先用 tar 打包。
30. zip 和 unzip – zip 格式压缩解压
zip 格式在 Windows 上很常见,Linux 也能用。
zip archive.zip file1 file2 # 压缩多个文件
zip -r archive.zip folder # 压缩目录
unzip archive.zip # 解压
unzip archive.zip -d /home/ # 解压到指定目录
unzip -l archive.zip # 查看压缩包内容(不解压)
31. xz 和 unxz – xz 格式压缩解压
xz 压缩率比 gzip 更高,但速度慢一些。
xz file.txt # 压缩文件,生成 file.txt.xz
xz -k file.txt # 压缩但保留原文件
xz -d file.txt.xz # 解压
unxz file.txt.xz # 解压(等于 xz -d)
四、系统信息查看
32. uname – 查看系统信息
uname -a # 显示所有系统信息
uname -r # 只显示内核版本
uname -m # 显示系统架构(x86_64 等)
uname -n # 显示主机名
33. hostname – 查看和设置主机名
hostname # 显示主机名
hostname newname # 设置新主机名(临时生效)
hostnamectl set-hostname newname # 永久设置主机名(CentOS 7+)
34. uptime – 查看系统运行时间和负载
uptime
# 输出类似:
# 10:30:00 up 5 days, 2:15, 3 users, load average: 0.5, 0.3, 0.1
up 5 days:系统运行了 5 天
load average:系统负载,三个数值分别是 1 分钟、5 分钟、15 分钟的平均负载。一般超过 CPU 核心数就说明负载较高。
35. date – 显示和设置时间
date # 显示当前时间
date +%Y-%m-%d # 只显示日期(格式:2025-01-10)
date +%H:%M:%S # 只显示时间
date -s "2025-01-10 10:00:00" # 设置时间
36. cal – 显示日历
cal # 显示当月日历
cal 2025 # 显示 2025 年全年日历
cal 1 2025 # 显示 2025 年 1 月
37. free – 查看内存使用情况
free # 显示内存使用(单位 KB)
free -h # 用 MB/GB 显示,更直观
free -m # 单位 MB
输出解释:
- total:总内存
- used:已使用
- free:空闲
- available:可用(包括可回收的缓存)
- buff/cache:缓冲和缓存
看内存够不够,主要看 available。
38. df – 查看磁盘使用情况
df # 显示磁盘使用
df -h # 用 MB/GB 显示
df -T # 显示文件系统类型
df -i # 显示 inode 使用情况
inode 是什么?Linux 系统中,文件存储需要两个东西:数据块(存内容)和 inode(存元信息,比如权限、时间)。有时候磁盘空间还有很多,但 inode 满了,也无法创建新文件。
39. du – 查看目录占用空间
du folder # 显示目录占用
du -h folder # 用 MB/GB 显示
du -sh folder # 只显示总大小(不显示子目录)
du -h --max-depth=1 folder # 只显示 1 层深度
du -ah | sort -rh | head -10 # 找出占用最大的 10 个文件/目录
40. top – 实时查看系统状态
top 是查看系统状态的”神器”,能看到 CPU、内存、进程等信息。
top # 打开 top 监控界面
进入 top 后:
- 按 P:按 CPU 使用率排序
- 按 M:按内存使用率排序
- 按 T:按运行时间排序
- 按 k:输入 PID 可以杀进程
- 按 q:退出
常用看几项:
- CPU 使用率:us(用户)、sy(系统)、id(空闲)
- 内存:看 free 和 available
- 进程列表:看哪个进程占用高
41. htop – 更友好的系统监控
htop 比 top 界面更美观,操作更方便。
htop # 打开 htop
需要先安装:yum install htop 或 apt install htop。
htop 可以鼠标点击操作,支持横向滚动,比 top 好用很多。
42. vmstat – 查看系统性能统计
vmstat # 显示一次统计
vmstat 1 5 # 每秒刷新,共刷新 5 次
vmstat -s # 显示详细统计
43. iostat – 查看 IO 状态
iostat # 显示 IO 统计
iostat -x # 更详细的信息
iostat 1 5 # 每秒刷新,共 5 次
44. lsblk – 查看块设备信息
lsblk # 显示块设备(硬盘、分区等)
lsblk -f # 显示文件系统类型和挂载点
45. lspci – 查看 PCI 设备
lspci # 显示 PCI 设备列表
lspci -v # 详细信息
看网卡、显卡等硬件信息用这个。
46. lsusb – 查看 USB 设备
lsusb # 显示 USB 设备列表
lsusb -v # 详细信息
47. dmidecode – 查看硬件信息
dmidecode -t system # 查看系统信息(制造商、型号等)
dmidecode -t memory # 查看内存信息
dmidecode -t processor # 查看处理器信息
需要 root 权限。
五、进程管理
48. ps – 查看进程
ps # 显示当前用户的进程
ps aux # 显示所有进程详细信息
ps -ef # 另一种格式显示所有进程
ps aux | grep nginx # 查找 nginx 进程
输出解释(aux 格式):
- USER:运行进程的用户
- PID:进程 ID
- %CPU:CPU 使用率
- %MEM:内存使用率
- COMMAND:进程命令
49. pgrep 和 pkill – 查找和杀死进程
pgrep nginx # 查找 nginx 进程的 PID
pgrep -u root nginx # 查找 root 用户运行的 nginx 进程
pkill nginx # 杀死所有 nginx 进程
pkill -9 nginx # 强制杀死(-9 是强制信号)
pkill -u root # 杀死 root 用户的所有进程
比 ps | grep 再 kill 方便多了。
50. kill – 杀死进程
kill 1234 # 杀死 PID 为 1234 的进程
kill -9 1234 # 强制杀死
kill -l # 列出所有信号
常用信号:
- 15(默认):正常终止,进程可以清理资源
- 9:强制终止,进程立即结束
- 2:中断(Ctrl+C)
- 1:重启进程
51. killall – 按名字杀死进程
killall nginx # 杀死所有 nginx 进程
killall -9 nginx # 强制杀死
killall -u root nginx # 只杀死 root 用户运行的
52. nice 和 renice – 设置进程优先级
优先级范围:-20(最高)到 19(最低)。默认是 0。
nice -n 10 ./script.sh # 以优先级 10 运行脚本(较低)
nice -n -5 ./script.sh # 以优先级 -5 运行(较高)
renice -n 5 -p 1234 # 把 PID 1234 的优先级改为 5
renice -n -10 -u root # 把 root 用户所有进程优先级改为 -10
53. nohup – 后台运行不中断
SSH 断开后,前台进程会被杀掉。nohup 让进程在后台持续运行。
nohup ./script.sh & # 后台运行,输出写到 nohup.out
nohup ./script.sh > output.log 2>&1 & # 输出到指定文件
& 表示后台运行,2>&1 表示把错误输出也写到文件里。
54. jobs、fg、bg – 作业控制
jobs # 查看后台作业
fg %1 # 把作业 1 调到前台
bg %1 # 把作业 1 放到后台继续运行
Ctrl+Z # 暂停当前前台进程(放入后台)
Ctrl+C # 终止当前前台进程
55. watch – 定时执行命令
watch -n 1 free -h # 每秒刷新内存使用情况
watch -n 5 "ps aux | grep nginx" # 每 5 秒查看 nginx 进程
watch -d free -h # 高亮显示变化的部分
六、网络相关
56. ifconfig – 查看和配置网络接口
ifconfig # 显示所有网络接口
ifconfig eth0 # 只显示 eth0
ifconfig eth0 192.168.1.100 # 设置 IP 地址(临时)
ifconfig eth0 up # 启用网卡
ifconfig eth0 down # 禁用网卡
CentOS 7+ 可能没有 ifconfig,用 ip 命令替代。
57. ip – 新一代网络配置命令
ip addr # 显示所有 IP 地址
ip addr show eth0 # 显示 eth0 的 IP
ip link # 显示网络接口
ip link set eth0 up # 启用网卡
ip link set eth0 down # 禁用网卡
ip addr add 192.168.1.100/24 dev eth0 # 设置 IP 地址
ip route # 显示路由表
ip route add default via 192.168.1.1 # 设置默认路由
58. ping – 测试网络连通性
ping 192.168.1.1 # ping IP
ping www.baidu.com # ping 域名
ping -c 5 192.168.1.1 # ping 5 次后停止
ping -i 2 192.168.1.1 # 每次间隔 2 秒
ping -s 1000 192.168.1.1 # 发送 1000 字节的包
ping 不通不一定是网络问题,可能是对方禁 ping 或防火墙拦截。
59. traceroute – 查看网络路径
traceroute www.baidu.com # 查看到达百度经过的路由
traceroute -n 192.168.1.100 # 不解析域名,只显示 IP
能看到网络包经过哪些路由器,哪一段慢。
60. nslookup 和 dig – DNS 查询
nslookup www.baidu.com # 查询域名解析
nslookup www.baidu.com 8.8.8.8 # 用指定 DNS 服务器查询
dig www.baidu.com # 更详细的 DNS 信息
dig @8.8.8.8 www.baidu.com # 用指定 DNS 查询
dig +short www.baidu.com # 只显示解析结果
61. netstat – 查看网络连接和端口
netstat # 显示所有网络连接
netstat -tunlp # 显示 TCP/UDP 端口和对应进程
netstat -an # 显示所有连接(包括监听)
netstat -rn # 显示路由表
netstat -i # 显示网络接口统计
看端口占用常用:netstat -tunlp | grep 80
62. ss – 新一代网络统计工具
ss 比 netstat 更快,功能更强。
ss # 显示所有 socket
ss -tunlp # 显示 TCP/UDP 端口和进程
ss -s # 显示统计摘要
ss -l # 只显示监听的 socket
ss -tan | grep :80 # 查看端口 80 的连接
63. curl – 发送 HTTP 请求
curl http://www.baidu.com # 获取网页内容
curl -I http://www.baidu.com # 只获取响应头
curl -o file.html http://www.baidu.com # 保存到文件
curl -X POST -d "data=test" http://example.com/api # POST 请求
curl -H "Content-Type: application/json" http://example.com # 自定义请求头
curl -u user:pass http://example.com # 带认证
curl --proxy http://proxy.example.com:8080 http://www.baidu.com # 使用代理
curl 功能很强,测试 API、下载文件、模拟请求都能用。
64. wget – 下载文件
wget http://example.com/file.zip # 下载文件
wget -O newname.zip http://example.com/file.zip # 重命名保存
wget -c http://example.com/file.zip # 断点续传
wget -b http://example.com/file.zip # 后台下载
wget -r http://example.com/ # 递归下载整个网站
wget --limit-rate=1m http://example.com/file.zip # 限速下载
65. ssh – 远程连接
ssh user@192.168.1.100 # 连接远程服务器
ssh -p 2222 user@192.168.1.100 # 指定端口
ssh -i key.pem user@192.168.1.100 # 使用密钥登录
ssh -L 8080:localhost:80 user@192.168.1.100 # 本地端口转发
ssh -R 80:localhost:8080 user@192.168.1.100 # 远程端口转发
66. scp – 远程复制文件
scp file.txt user@192.168.1.100:/home/ # 上传文件到远程
scp user@192.168.1.100:/home/file.txt ./ # 从远程下载文件
scp -r folder user@192.168.1.100:/home/ # 上传目录
scp -P 2222 file.txt user@192.168.1.100:/home/ # 指定端口
67. sftp – 安全文件传输
sftp user@192.168.1.100 # 连接远程
进入 sftp 后可用命令:
- put file.txt:上传文件
- get file.txt:下载文件
- ls:查看远程目录
- cd:切换远程目录
- lcd:切换本地目录
- quit:退出
68. nmap – 网络扫描工具
nmap 192.168.1.100 # 扫描主机开放的端口
nmap -p 80,443 192.168.1.100 # 只扫描指定端口
nmap -sV 192.168.1.100 # 检测端口服务版本
nmap -A 192.168.1.100 # 全面扫描
nmap 192.168.1.0/24 # 扫描整个网段
需要先安装:yum install nmap 或 apt install nmap。
七、用户和权限管理
69. useradd – 创建用户
useradd username # 创建用户
useradd -m username # 创建用户并创建主目录
useradd -s /bin/bash username # 指定 shell
useradd -g groupname username # 指定主组
useradd -G group1,group2 username # 指定附加组
70. userdel – 删除用户
userdel username # 删除用户
userdel -r username # 删除用户和主目录
71. usermod – 修改用户
usermod -l newname oldname # 改用户名
usermod -s /bin/zsh username # 修改 shell
usermod -G group1,group2 username # 修改附加组
usermod -aG group username # 添加到附加组(不覆盖原有组)
usermod -L username # 锁定用户
usermod -U username # 解锁用户
72. passwd – 设置密码
passwd # 修改自己的密码
passwd username # 修改指定用户密码(需要 root)
passwd -l username # 锁定用户密码
passwd -u username # 解锁用户密码
passwd -d username # 删除用户密码(不能登录)
passwd -e username # 强制用户下次登录时改密码
73. groupadd – 创建组
groupadd groupname # 创建组
groupadd -g 1000 groupname # 指定 GID
74. groupdel – 删除组
groupdel groupname # 删除组
75. groups – 查看用户所属组
groups # 查看自己所属组
groups username # 查看指定用户所属组
76. id – 查看用户信息
id # 查看自己的 UID、GID、组
id username # 查看指定用户信息
id -u username # 只显示 UID
id -g username # 只显示主 GID
77. who – 查看登录用户
who # 显示所有登录用户
who -b # 显示系统启动时间
who -r # 显示运行级别
78. w – 显示登录用户和活动
w # 显示登录用户和正在做的事
比 who 更详细,能看到用户正在运行的命令。
79. last – 查看登录历史
last # 显示所有登录历史
last -n 10 # 只显示最近 10 次
last username # 只显示指定用户的登录历史
last -x # 显示系统重启和关机记录
80. su – 切换用户
su # 切换到 root
su username # 切换到指定用户
su - username # 切换用户并加载其环境变量
su -c "command" username # 以指定用户执行命令
su – 会切换到新用户的环境,su 只切换用户但不切换环境。
81. sudo – 以 root 权限执行命令
普通用户需要 root 权限执行某些命令,用 sudo。
sudo command # 以 root 权限执行命令
sudo -u username command # 以指定用户执行命令
sudo -l # 查看自己可以用 sudo 执行哪些命令
sudo -k # 清除 sudo 密码缓存(下次执行要重新输入密码)
sudo -b command # 后台执行命令
需要先配置 sudo 权限:visudo 编辑 /etc/sudoers 文件,添加:
username ALL=(ALL) ALL
82. chmod – 修改文件权限
Linux 文件权限分三部分:用户(u)、组(g)、其他人(o)。每部分有读(r=4)、写(w=2)、执行(x=1)三种权限。
chmod 755 file.sh # 用户:7=4+2+1(读写执行),组:5=4+1(读执行),其他人:5(读执行)
chmod 644 file.txt # 用户读写,组和他人只读
chmod +x file.sh # 给所有人添加执行权限
chmod u+w file.txt # 给用户添加写权限
chmod g-r file.txt # 移除组的读权限
chmod -R 755 folder # 递归修改目录权限
常用权限组合:
- 755:脚本、程序(用户全权限,其他人可读可执行)
- 644:普通文件(用户读写,其他人只读)
- 600:私密文件(只有用户能读写)
- 777:所有人全权限(慎用)
83. chown – 修改文件所有者
chown user file.txt # 改用户
chown user:group file.txt # 改用户和组
chown :group file.txt # 只改组
chown -R user:group folder # 递归修改目录
chown --reference=ref.txt file.txt # 复制参考文件的权限
84. chgrp – 修改文件所属组
chgrp group file.txt # 改组
chgrp -R group folder # 递归修改
等于 chown :group file.txt。
85. umask – 设置默认权限
新创建的文件默认权限是多少?umask 决定的。
umask # 显示当前 umask 值(比如 0022)
umask 022 # 设置 umask(新文件默认 755,目录 644)
umask 077 # 设置 umask(新文件只有用户有权限)
umask 是权限的”补码”,实际权限 = 777 – umask。
86. lsattr 和 chattr – 查看和设置文件属性
除了普通权限,Linux 还有特殊属性。
lsattr file.txt # 查看属性
chattr +i file.txt # 设置不可修改属性(连 root 都不能改)
chattr -i file.txt # 移除不可修改属性
chattr +a file.txt # 只能追加内容,不能修改或删除
chattr -a file.txt # 移除追加属性
+i 很有用,保护重要配置文件不被误改。
八、磁盘和文件系统管理
87. fdisk – 磁盘分区工具
fdisk -l # 查看所有磁盘分区
fdisk /dev/sdb # 对 sdb 磁盘分区
进入 fdisk 后可用命令:
- n:新建分区
- d:删除分区
- p:查看分区表
- w:保存退出
- q:不保存退出
88. mkfs – 格式化分区
mkfs.ext4 /dev/sdb1 # 格式化为 ext4
mkfs.xfs /dev/sdb1 # 格式化为 xfs
mkfs -t ext4 /dev/sdb1 # 指定类型格式化
89. mount 和 umount – 挂载和卸载
mount /dev/sdb1 /mnt # 挂载分区到 /mnt 目录
mount -t ext4 /dev/sdb1 /mnt # 指定文件系统类型挂载
mount -o ro /dev/sdb1 /mnt # 只读挂载
mount /dev/cdrom /mnt # 挂载光驱
umount /mnt # 卸载
umount -l /mnt # 强制卸载(忙碌时)
永久挂载要写入 /etc/fstab 文件:
/dev/sdb1 /mnt ext4 defaults 0 0
90. blkid – 查看块设备 UUID
blkid # 显示所有块设备的 UUID 和类型
blkid /dev/sdb1 # 显示指定设备的 UUID
写 /etc/fstab 用 UUID 更稳定,比设备名可靠。
91. e2fsck – 检查和修复 ext 文件系统
e2fsck /dev/sdb1 # 检查文件系统
e2fsck -p /dev/sdb1 # 自动修复
e2fsck -f /dev/sdb1 # 强制检查
检查前要先卸载分区。
92. xfs_repair – 检查和修复 xfs 文件系统
xfs_repair /dev/sdb1 # 检查和修复 xfs 文件系统
xfs_repair -n /dev/sdb1 # 只检查不修复
九、软件包管理
93. yum – CentOS/RHEL 软件包管理
yum install package # 安装软件包
yum remove package # 删除软件包
yum update # 更新所有软件包
yum update package # 更新指定软件包
yum search keyword # 搜索软件包
yum list installed # 列出已安装软件包
yum info package # 显示软件包信息
yum clean all # 清理缓存
yum history # 查看安装历史
yum reinstall package # 重新安装
94. dnf – CentOS 8+/Fedora 软件包管理
dnf 是 yum 的下一代,命令基本一样:
dnf install package
dnf remove package
dnf update
dnf search keyword
dnf list installed
dnf info package
dnf clean all
95. apt – Debian/Ubuntu 软件包管理
apt install package # 安装软件包
apt remove package # 删除软件包
apt purge package # 删除软件包和配置文件
apt update # 更新软件源
apt upgrade # 升级所有软件包
apt search keyword # 搜索软件包
apt show package # 显示软件包信息
apt list --installed # 列出已安装软件包
apt autoremove # 清理不需要的依赖包
apt clean # 清理下载缓存
apt-get 和 apt 命令差不多,apt 是 apt-get 的简化版,推荐用 apt。
96. rpm – RPM 包管理(低层)
rpm -ivh package.rpm # 安装 rpm 包
rpm -e package # 删除软件包
rpm -qa # 列出所有已安装包
rpm -qi package # 显示软件包信息
rpm -ql package # 显示软件包安装的文件列表
rpm -qf /path/file # 查看文件属于哪个包
rpm -V package # 检查软件包文件是否被修改
rpm 直接安装 rpm 文件,不自动解决依赖,建议用 yum/dnf。
97. dpkg – Debian 包管理(低层)
dpkg -i package.deb # 安装 deb 包
dpkg -r package # 删除软件包
dpkg -P package # 删除软件包和配置文件
dpkg -l # 列出所有已安装包
dpkg -L package # 显示软件包安装的文件列表
dpkg -S /path/file # 查看文件属于哪个包
dpkg 直接安装 deb 文件,不自动解决依赖,建议用 apt。
98. pip – Python 包管理
pip install package # 安装 Python 包
pip uninstall package # 删除 Python 包
pip list # 列出已安装包
pip show package # 显示包信息
pip freeze # 输出已安装包列表(用于导出依赖)
pip install -r requirements.txt # 从文件安装依赖
pip search keyword # 搜索包(已禁用)
pip --version # 显示 pip 版本
pip install --upgrade package # 升级包
99. npm – Node.js 包管理
npm install package # 安装包
npm install -g package # 全局安装
npm uninstall package # 删除包
npm list # 列出已安装包
npm update package # 更新包
npm run script # 运行脚本
npm init # 创建 package.json
npm search keyword # 搜索包
十、服务管理
100. systemctl – CentOS 7+/Ubuntu 16+ 服务管理
systemctl start service # 启动服务
systemctl stop service # 停止服务
systemctl restart service # 重启服务
systemctl status service # 查看服务状态
systemctl enable service # 设置开机自启
systemctl disable service # 关闭开机自启
systemctl is-enabled service # 查看是否开机自启
systemctl list-units --type=service # 列出所有服务
systemctl list-unit-files --type=service # 列出所有服务配置文件
systemctl daemon-reload # 重载配置文件(修改配置后)
101. service – 传统服务管理
CentOS 6 和老版本用 service 命令。
service service_name start # 启动服务
service service_name stop # 停止服务
service service_name restart # 重启服务
service service_name status # 查看状态
service --status-all # 查看所有服务状态
102. journalctl – 查看系统日志
journalctl # 查看所有日志
journalctl -u nginx # 只看 nginx 服务日志
journalctl -f # 实时查看日志
journalctl --since today # 只看今天的日志
journalctl --since "2025-01-10" # 查看指定日期后的日志
journalctl -p err # 只看错误级别日志
journalctl -b # 只看本次启动的日志
journalctl -k # 只看内核日志
103. chkconfig – 设置服务开机自启(老版本)
chkconfig --list # 查看所有服务开机自启状态
chkconfig service on # 设置开机自启
chkconfig service off # 关闭开机自启
chkconfig --add service # 添加服务到管理列表
chkconfig --del service # 从管理列表删除服务
CentOS 7+ 用 systemctl enable/disable 替代。
十一、系统关机和重启
104. shutdown – 关机
shutdown # 一分钟后关机
shutdown -h now # 立即关机
shutdown -h +10 # 10 分钟后关机
shutdown -h 20:00 # 20:00 关机
shutdown -c # 取消关机
shutdown -k now # 只发送警告不关机
105. reboot – 重启
reboot # 重启
reboot -f # 强制重启(不调用 shutdown)
106. poweroff – 关机
poweroff # 关机
poweroff -f # 强制关机
等于 shutdown -h now。
107. halt – 停机
halt # 停机
halt -p # 停机并关闭电源
halt -f # 强制停机
108. init – 切换运行级别
init 0 # 关机
init 6 # 重启
init 3 # 切换到多用户模式(无图形界面)
init 5 # 切换到图形界面模式
十二、其他实用命令
109. history – 查看命令历史
history # 显示所有历史命令
history 10 # 显示最近 10 条
history -c # 清空历史
!10 # 执行第 10 条历史命令
!ls # 执行最近的 ls 命令
!! # 执行上一条命令
110. alias – 设置命令别名
alias # 显示所有别名
alias ll='ls -l' # 设置 ll 别名
alias l='ls -lah' # 设置 l 别名
unalias ll # 删除别名
写进 ~/.bashrc 永久生效。
111. source – 执行脚本文件
source ~/.bashrc # 执行配置文件(重新加载)
source script.sh # 执行脚本(在当前 shell)
等于 . ~/.bashrc。
112. export – 设置环境变量
export # 显示所有环境变量
export VAR=value # 设置环境变量
export PATH=$PATH:/new/path # 添加路径到 PATH
写进 ~/.bashrc 或 /etc/profile 永久生效。
113. env – 显示环境变量
env # 显示所有环境变量
env -i command # 清空环境变量执行命令
env VAR=value command # 设置临时环境变量执行命令
114. set – 显示 shell 变量
set # 显示所有变量(包括环境变量和 shell 变量)
set -o # 显示 shell 选项
set -e # 脚本出错立即退出
set -x # 显示执行的命令
115. unset – 删除变量
unset VAR # 删除变量
unset -f func # 删除函数
116. crontab – 定时任务管理
crontab -l # 查看定时任务
crontab -e # 编辑定时任务
crontab -r # 删除所有定时任务
crontab -u user -l # 查看指定用户的定时任务
定时任务格式:分 时 日 月 周 命令
例子:
# 每分钟执行
* * * * * /path/script.sh
# 每小时执行
0 * * * * /path/script.sh
# 每天 8 点执行
0 8 * * * /path/script.sh
# 每周一 8 点执行
0 8 * * 1 /path/script.sh
# 每月 1 号 0 点执行
0 0 1 * * /path/script.sh
117. at – 执行一次性定时任务
at now + 5 minutes # 5 分钟后执行
at 10:00 # 10 点执行
at 10:00 tomorrow # 明天 10 点执行
atq # 查看待执行任务
atrm job_number # 删除任务
输入命令后 Ctrl+D 保存。
118. time – 测量命令执行时间
time command # 测量命令执行时间
time -v command # 详细输出
输出类似:
real 0m1.234s # 实际时间
user 0m0.500s # 用户态时间
sys 0m0.100s # 内核态时间
119. man – 查看命令手册
man ls # 查看 ls 命令手册
man -k keyword # 搜索包含关键词的手册
man 5 passwd # 查看第 5 章手册(配置文件)
手册章节:
- 1:用户命令
- 2:系统调用
- 3:库函数
- 4:特殊文件
- 5:配置文件
- 6:游戏
- 7:杂项
- 8:管理命令
120. info – 查看信息文档
info ls # 查看 ls 信息文档
info coreutils # 查看 coreutils 信息
比 man 更详细,有超链接。
121. help – 查看内置命令帮助
help # 显示所有内置命令
help cd # 查看 cd 命令帮助
shell 内置命令(cd、echo 等)没有 man 手册,用 help。
122. whereis – 查找命令位置
whereis ls # 查找 ls 的位置
whereis -b ls # 只查找二进制文件
whereis -m ls # 只查找手册文件
123. which – 查找命令路径
which ls # 显示 ls 命令的完整路径
which -a ls # 显示所有匹配的路径
124. type – 查看命令类型
type ls # 查看 ls 是什么类型
type cd # 查看 cd 是什么类型
输出可能是:
- alias:别名
- builtin:内置命令
- file:外部命令文件
125. locate – 快速查找文件
locate file.txt # 快速查找文件
locate -i file.txt # 忽略大小写
locate -r "\.txt$" # 使用正则表达式
locate 比 find 快,因为它搜索预先建立的数据库。数据库需要定期更新:updatedb。
126. updatedb – 更新 locate 数据库
updatedb # 更新 locate 数据库
127. xargs – 构建命令行参数
find . -name "*.txt" | xargs rm # 找出所有 txt 文件并删除
find . -name "*.txt" | xargs -I {} mv {} backup/ # 移动到 backup 目录
cat urls.txt | xargs -n 1 curl # 每行一个参数执行 curl
ls | xargs -n 3 echo # 每次传递 3 个参数
管道传递的结果,有些命令不能直接接收(比如 rm),需要 xargs 转换。
128. banner – 打印大字标题
banner "HELLO" # 打印大字 HELLO
需要安装:yum install banner 或 apt install sysvbanner。
129. yes – 持续输出
yes # 持续输出 y
yes "hello" # 持续输出 hello
yes | rm -r folder # 删除时自动回答 y
130. seq – 生成数字序列
seq 10 # 输出 1 到 10
seq 5 10 # 输出 5 到 10
seq 1 2 10 # 输出 1,3,5,7,9(步长 2)
seq -s ',' 1 10 # 输出 1,2,3,4,5,6,7,8,9,10(分隔符)
seq -w 1 10 # 输出 01,02,...,10(等宽)
131. sleep – 延迟
sleep 5 # 廜迟 5 秒
sleep 1m # 廜迟 1 分钟
sleep 1h # 廜迟 1 小时
sleep 0.5 # 廜迟 0.5 秒
132. clear – 清屏
clear # 清屏
等于 Ctrl+L。
133. reset – 重置终端
reset # 重置终端
终端显示乱码时用这个重置。
134. script – 记录终端会话
script session.log # 开始记录会话到 session.log
script -a session.log # 追加记录
exit # 结束记录(或 Ctrl+D)
135. sha256sum – 计算文件 SHA256 哈希
sha256sum file.txt # 计算哈希值
sha256sum -c checksum.txt # 验证哈希值
类似的还有 sha1sum、sha512sum、md5sum。
136. base64 – 编码解码
base64 file.txt # 编码文件内容
base64 -d encoded.txt # 解码
echo "hello" | base64 # 编码字符串
echo "aGVsbG8=" | base64 -d # 解码字符串
137. hexdump – 查看文件十六进制内容
hexdump file.txt # 显示十六进制
hexdump -C file.txt # 显示十六进制和 ASCII
hexdump -n 100 file.txt # 只显示前 100 字节
138. dd – 复制和转换文件
dd 功能很强大,常用于磁盘操作。
dd if=/dev/sda of=disk.img # 复制磁盘到文件
dd if=disk.img of=/dev/sdb # 从文件复制到磁盘
dd if=/dev/zero of=test.bin bs=1M count=100 # 创建 100M 文件
dd if=file.txt of=new.txt bs=512 count=10 # 只复制前 512*10 字节
参数:
- if:输入文件
- of:输出文件
- bs:块大小
- count:块数量
139. split – 分割文件
split -b 100M largefile.bin # 按 100M 分割
split -l 1000 largefile.txt # 按 1000 行分割
split -b 100M largefile.bin part_ # 分割文件命名为 part_aa, part_ab...
140. paste – 合并文件行
paste file1.txt file2.txt # 逐行合并两个文件
paste -d ',' file1.txt file2.txt # 用逗号分隔合并
paste -s file.txt # 把所有行合并成一行
写在最后
这篇文章整理了 140 多个 Linux 常用命令,覆盖了文件操作、内容处理、压缩解压、系统信息、进程管理、网络、用户权限、磁盘管理、软件包、服务管理、关机重启、定时任务等方面。
实际工作中,经常用的也就 30-40 个,把这些练熟了,大部分场景都能搞定。遇到问题先查对应的分类,比到处百度省事得多。
建议:
- 先把文件操作(ls、cd、mkdir、rm、cp、mv)练熟,这是基本功
- grep、find、tar 这三个是高频命令,务必掌握
- 遇到不会的命令,先 man 一下看看手册
- 建个自己的命令速查表,常用的记下来
有问题欢迎留言讨论,我会持续更新这篇文章。
