从入门到精通,掌握最全面的运维工具
今天,我整理分享100个最常用的运维命令,按功能分类,每个都有详细说明(部分命令会和之前文章冲突)。
看完你将掌握:
收藏这一篇,日常运维不求人!
📋 目录
一、文件操作(15个命令)
1. ls - 列出文件
功能:列出目录内容
语法:
ls [选项] [目录]
常用选项:
实战案例:
# 案例1:基础列表$ lsfile1.txt file2.txt dir1 dir2# 案例2:详细信息$ ls -lhtotal 12K-rw-r--r-- 1 root root 1.2K Jan 1 10:00 file1.txt-rw-r--r-- 1 root root 2.3K Jan 1 11:00 file2.txtdrwxr-xr-x 2 root root 4.0K Jan 1 12:00 dir1# 案例3:显示隐藏文件$ ls -latotal 20Kdrwxr-xr-x 3 root root 4.0K Jan 1 12:00 .drwxr-xr-x 5 root root 4.0K Jan 1 09:00 ..-rw-r--r-- 1 root root 123 Jan 1 10:00 .hidden-rw-r--r-- 1 root root 1.2K Jan 1 10:00 file1.txt# 案例4:按时间排序$ ls -lt# 最新的文件在前# 案例5:按大小排序$ ls -lhS# 最大的文件在前# 案例6:递归显示$ ls -R./dir1:file3.txt file4.txt./dir2:file5.txt# 案例7:只显示目录$ ls -ld */drwxr-xr-x 2 root root 4096 Jan 1 12:00 dir1/drwxr-xr-x 2 root root 4096 Jan 1 12:00 dir2/# 案例8:彩色显示$ ls --color=auto
字段说明(ls -l):
-rw-r--r-- 1 root root 1234 Jan 1 10:00 file.txt↑ ↑ ↑ ↑ ↑ ↑ ↑权限 链接 所有者 组 大小 修改时间 文件名权限:- 第1位:文件类型(-普通文件/d目录/l链接)- 2-4位:所有者权限(rwx)- 5-7位:组权限(rwx)- 8-10位:其他人权限(rwx)
2. cd - 切换目录
功能:改变当前工作目录
语法:
cd [目录]
实战案例:
# 案例1:进入目录$ cd /var/log# 案例2:返回上级目录$ cd ..# 案例3:返回上上级目录$ cd ../..# 案例4:返回家目录$ cd# 或$ cd ~# 案例5:返回上次目录$ cd -/var/log$ cd -/home/user# 案例6:进入用户家目录$ cd ~username# 案例7:使用绝对路径$ cd /usr/local/bin# 案例8:使用相对路径$ cd ./subdir
技巧:
# 快速跳转$ cd /var/log/nginx # Tab键自动补全# 环境变量$ cd$HOME$ cd$OLDPWD# 上次目录
3. pwd - 当前目录
功能:显示当前工作目录的完整路径
语法:
pwd [选项]
常用选项:
实战案例:
# 案例1:显示当前目录$ pwd/home/user/project# 案例2:显示物理路径$ cd /var/mail # 这是一个符号链接$ pwd -L/var/mail$ pwd -P/var/spool/mail# 案例3:在脚本中使用#!/bin/bashSCRIPT_DIR=$(pwd)echo"Script is running in: $SCRIPT_DIR"
4. mkdir - 创建目录
功能:创建新目录
语法:
mkdir [选项] 目录名
常用选项:
实战案例:
# 案例1:创建单个目录$ mkdir mydir# 案例2:创建多个目录$ mkdir dir1 dir2 dir3# 案例3:递归创建$ mkdir -p /data/project/src/main# 自动创建所有不存在的父目录# 案例4:设置权限$ mkdir -m 755 mydir# 创建时设置权限为755# 案例5:显示详细信息$ mkdir -pv /data/backup/2024/01mkdir: created directory '/data'mkdir: created directory '/data/backup'mkdir: created directory '/data/backup/2024'mkdir: created directory '/data/backup/2024/01'# 案例6:批量创建$ mkdir -p project/{src,bin,lib,doc}# 创建project目录及其子目录# 案例7:按日期创建$ mkdir backup-$(date +%Y%m%d)backup-20240101
5. rmdir - 删除空目录
功能:删除空目录
语法:
rmdir [选项] 目录名
常用选项:
实战案例:
# 案例1:删除空目录$ rmdir emptydir# 案例2:递归删除空目录$ rmdir -p dir1/dir2/dir3# 如果dir3、dir2、dir1都为空,全部删除# 案例3:删除多个空目录$ rmdir dir1 dir2 dir3# 案例4:显示详细信息$ rmdir -v emptydirrmdir: removing directory, 'emptydir'
注意:
6. rm - 删除文件
功能:删除文件或目录
语法:
rm [选项] 文件/目录
常用选项:
实战案例:
# 案例1:删除文件$ rm file.txt# 案例2:强制删除$ rm -f file.txt# 不提示,直接删除# 案例3:交互式删除$ rm -i file.txtrm: remove regular file 'file.txt'? y# 案例4:删除目录$ rm -r mydir# 递归删除目录及其内容# 案例5:强制删除目录$ rm -rf mydir# 不提示,强制删除# 案例6:删除多个文件$ rm file1.txt file2.txt file3.txt# 案例7:使用通配符$ rm *.txt# 删除所有.txt文件$ rm -f *.log# 强制删除所有.log文件# 案例8:显示详细信息$ rm -rfv mydirremoved 'mydir/file1.txt'removed 'mydir/file2.txt'removed directory 'mydir'
危险操作警告:
# ⚠️ 极度危险,永远不要执行!$ rm -rf /$ rm -rf /*# 安全删除建议$ rm -i file.txt # 使用-i确认$ mv file.txt /tmp/ # 先移动到临时目录
7. cp - 复制文件
功能:复制文件或目录
语法:
cp [选项] 源文件 目标文件
常用选项:
实战案例:
# 案例1:复制文件$ cp file1.txt file2.txt# 案例2:复制到目录$ cp file.txt /backup/# 案例3:复制多个文件$ cp file1.txt file2.txt file3.txt /backup/# 案例4:复制目录$ cp -r dir1 dir2# 递归复制dir1到dir2# 案例5:保留属性$ cp -p file.txt /backup/# 保留权限、时间戳等# 案例6:归档复制$ cp -a /data /backup/# 完整复制,保留所有属性和链接# 案例7:交互式复制$ cp -i file.txt /backup/cp: overwrite '/backup/file.txt'? y# 案例8:只复制更新的文件$ cp -u *.txt /backup/# 只复制比目标新的文件# 案例9:显示详细信息$ cp -rv dir1 dir2'dir1/file1.txt' -> 'dir2/file1.txt''dir1/file2.txt' -> 'dir2/file2.txt'# 案例10:备份文件$ cp file.txt file.txt.bak# 创建备份$ cp file.txt{,.bak}# 同上,更简洁
8. mv - 移动/重命名
功能:移动文件或重命名
语法:
mv [选项] 源文件 目标文件
常用选项:
实战案例:
# 案例1:重命名文件$ mv oldname.txt newname.txt# 案例2:移动文件$ mv file.txt /backup/# 案例3:移动多个文件$ mv file1.txt file2.txt file3.txt /backup/# 案例4:移动目录$ mv dir1 /backup/# 案例5:重命名目录$ mv olddir newdir# 案例6:交互式移动$ mv -i file.txt /backup/mv: overwrite '/backup/file.txt'? y# 案例7:强制移动$ mv -f file.txt /backup/# 案例8:显示详细信息$ mv -v file.txt /backup/'file.txt' -> '/backup/file.txt'# 案例9:批量重命名$ for file in *.txt; domv"$file""${file%.txt}.bak"done# 案例10:使用通配符$ mv *.log /var/log/archive/
9. touch - 创建文件
功能:创建空文件或更新文件时间戳
语法:
touch [选项] 文件名
常用选项:
实战案例:
# 案例1:创建空文件$ touch newfile.txt# 案例2:创建多个文件$ touch file1.txt file2.txt file3.txt# 案例3:批量创建$ touch file{1..10}.txt# 创建file1.txt到file10.txt# 案例4:更新时间戳$ touch existingfile.txt# 更新为当前时间# 案例5:指定时间戳$ touch -t 202401011200 file.txt# 设置为2024-01-01 12:00# 案例6:使用参考文件$ touch -r reference.txt target.txt# target.txt的时间与reference.txt相同# 案例7:只更新访问时间$ touch -a file.txt# 案例8:不创建文件$ touch -c nonexistent.txt# 如果文件不存在,不创建
10. cat - 查看文件
功能:连接文件并打印到标准输出
语法:
cat [选项] 文件
常用选项:
实战案例:
# 案例1:查看文件$ cat file.txtHello WorldThis is a test file# 案例2:显示行号$ cat -n file.txt 1 Hello World 2 This is a test file 3 # 案例3:显示非空行行号$ cat -b file.txt 1 Hello World 2 This is a test file# 案例4:合并文件$ cat file1.txt file2.txt > merged.txt# 案例5:追加内容$ cat file1.txt >> file2.txt# 案例6:创建文件$ cat > newfile.txtType your content herePress Ctrl+D to save^D# 案例7:显示不可见字符$ cat -A file.txtHello World$This is a test file$$# 案例8:压缩空行$ cat -s file.txt# 多个连续空行压缩为一个# 案例9:查看多个文件$ cat file1.txt file2.txt file3.txt# 案例10:倒序查看$ tac file.txt# 从最后一行开始显示
11-15. 文件操作其他命令(快速版)
11. tac - 反向查看
# 从最后一行开始显示$ tac file.txtLast lineMiddle lineFirst line
12. nl - 带行号查看
# 显示行号$ nl file.txt 1 First line 2 Second line 3 Third line# 只对非空行编号$ nl -b a file.txt
13. od - 八进制查看
# 八进制显示$ od file.txt# 十六进制显示$ od -x file.txt# 字符显示$ od -c file.txt
14. file - 文件类型
# 识别文件类型$ file file.txtfile.txt: ASCII text$ file image.jpgimage.jpg: JPEG image data$ file /bin/ls/bin/ls: ELF 64-bit LSB executable$ file script.shscript.sh: Bourne-Again shell script, ASCII text executable
15. stat - 文件状态
# 查看文件详细信息$ stat file.txt File: file.txt Size: 1234 Blocks: 8 IO Block: 4096 regular fileDevice: 801h/2049d Inode: 123456 Links: 1Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)Access: 2024-01-01 10:00:00.000000000 +0800Modify: 2024-01-01 09:00:00.000000000 +0800Change: 2024-01-01 09:00:00.000000000 +0800 Birth: -# 简洁格式$ stat -c "%n %s %y" file.txtfile.txt 1234 2024-01-01 09:00:00.000000000 +0800
二、文本处理(15个命令)
16. grep - 文本搜索
功能:在文件中搜索匹配的行
语法:
grep [选项] 模式 文件
常用选项:
实战案例:
# 案例1:基础搜索$ grep "error" /var/log/syslog# 案例2:忽略大小写$ grep -i "error" /var/log/syslog# 案例3:显示行号$ grep -n "error" /var/log/syslog123:Jan 1 10:00:00 server error: connection failed456:Jan 1 11:00:00 server error: timeout# 案例4:显示上下文$ grep -C 3 "error" /var/log/syslog# 显示匹配行及前后3行# 案例5:统计匹配数$ grep -c "error" /var/log/syslog42# 案例6:递归搜索$ grep -r "TODO" /project/src/# 案例7:多个模式$ grep -E "error|warning|critical" /var/log/syslog# 案例8:反向匹配$ grep -v "DEBUG" /var/log/app.log# 显示不包含DEBUG的行# 案例9:匹配整个单词$ grep -w "error" /var/log/syslog# 只匹配error,不匹配errors# 案例10:只显示文件名$ grep -l "error" /var/log/*.log/var/log/syslog/var/log/messages# 案例11:使用正则表达式$ grep -E "^[0-9]{3}" file.txt# 匹配以3个数字开头的行# 案例12:管道使用$ ps aux | grep nginx$ cat file.txt | grep "pattern"# 案例13:多文件搜索$ grep "error" file1.txt file2.txt file3.txt# 案例14:排除文件$ grep -r "error" /var/log/ --exclude="*.gz"# 案例15:高亮显示$ grep --color=auto "error" /var/log/syslog
正则表达式:
^ # 行首$ # 行尾. # 任意字符* # 0次或多次+ # 1次或多次(-E)? # 0次或1次(-E)[] # 字符集[^] # 非字符集\ # 转义字符# 示例$ grep "^error" file.txt # 以error开头$ grep "error$" file.txt # 以error结尾$ grep "e.r" file.txt # e和r之间有任意字符$ grep "erro*r" file.txt # err后有0个或多个o$ grep -E "error+" file.txt # erro后有1个或多个r
17-30. 文本处理其他命令(精简版)
17. egrep/fgrep - 扩展grep
# egrep = grep -E(扩展正则)$ egrep "error|warning" file.txt# fgrep = grep -F(固定字符串,不解析正则)$ fgrep "a.b" file.txt # 匹配字面的"a.b"
18. sed - 流编辑器
# 替换$ sed 's/old/new/' file.txt # 替换每行第一个$ sed 's/old/new/g' file.txt # 替换所有$ sed 's/old/new/gi' file.txt # 忽略大小写# 删除行$ sed '/pattern/d' file.txt # 删除匹配的行$ sed '1d' file.txt # 删除第1行$ sed '1,10d' file.txt # 删除1-10行# 插入行$ sed '1i\New line' file.txt # 在第1行前插入$ sed '1a\New line' file.txt # 在第1行后插入# 提取行$ sed -n '10,20p' file.txt # 显示10-20行$ sed -n '/pattern/p' file.txt # 显示匹配的行# 就地编辑$ sed -i 's/old/new/g' file.txt # 直接修改文件$ sed -i.bak 's/old/new/g' file.txt # 修改前备份
19. awk - 文本分析
# 打印列$ awk '{print $1}' file.txt # 打印第1列$ awk '{print $1, $3}' file.txt # 打印第1和第3列$ awk '{print $NF}' file.txt # 打印最后一列# 条件过滤$ awk '$3 > 100' file.txt # 第3列>100的行$ awk '$1 == "error"' file.txt # 第1列等于error# 统计$ awk '{sum+=$1} END {print sum}' file.txt # 求和$ awk '{count++} END {print count}' file.txt # 计数# 指定分隔符$ awk -F: '{print $1}' /etc/passwd # 以:分隔# 格式化输出$ awk '{printf "%-10s %5d\n", $1, $2}' file.txt# 实战:分析日志$ awk '$9 == 404' /var/log/nginx/access.log # 404错误$ awk '{print $1}' access.log | sort | uniq -c | sort -rn # 统计IP
20. cut - 列提取
# 按字符提取$ cut -c1-10 file.txt # 提取1-10字符# 按字段提取$ cut -d: -f1 /etc/passwd # 以:分隔,提取第1字段$ cut -d: -f1,3 /etc/passwd # 提取第1和第3字段$ cut -d: -f1-3 /etc/passwd # 提取第1到第3字段# 指定分隔符$ cut -d' ' -f2 file.txt # 以空格分隔$ cut -d',' -f1,3 file.csv # CSV文件
21. paste - 列合并
# 合并文件$ paste file1.txt file2.txt # 横向合并# 指定分隔符$ paste -d',' file1.txt file2.txt # 以逗号分隔# 串行合并$ paste -s file.txt # 所有行合并为一行
22. join - 文件合并
# 按第一列合并$ join file1.txt file2.txt# 指定字段$ join -1 2 -2 1 file1.txt file2.txt # file1第2列与file2第1列# 指定分隔符$ join -t: file1.txt file2.txt
23. sort - 排序
# 基础排序$ sort file.txt # 字典序排序# 数字排序$ sort -n file.txt # 数字排序# 反向排序$ sort -r file.txt # 反向# 按列排序$ sort -k2 file.txt # 按第2列排序$ sort -k2 -n file.txt # 按第2列数字排序# 去重排序$ sort -u file.txt # 排序并去重# 检查是否已排序$ sort -c file.txt# 实战$ du -h | sort -h # 按大小排序$ ps aux | sort -k3 -rn | head -10 # CPU占用排序
24. uniq - 去重
# 去重(需要先排序)$ sort file.txt | uniq# 统计重复$ sort file.txt | uniq -c 3 apple 2 banana 1 orange# 只显示重复的$ sort file.txt | uniq -d# 只显示唯一的$ sort file.txt | uniq -u# 忽略大小写$ sort file.txt | uniq -i
25. wc - 统计
# 统计行数$ wc -l file.txt100 file.txt# 统计单词数$ wc -w file.txt500 file.txt# 统计字节数$ wc -c file.txt2048 file.txt# 统计字符数$ wc -m file.txt2048 file.txt# 全部统计$ wc file.txt100 500 2048 file.txt行数 单词 字节# 实战$ ps aux | wc -l # 进程数$ grep "error" /var/log/syslog | wc -l # 错误数
26. tr - 字符转换
# 大小写转换$ echo"Hello" | tr'a-z''A-Z'HELLO$ echo"HELLO" | tr'A-Z''a-z'hello# 删除字符$ echo"Hello123" | tr -d '0-9'Hello# 压缩重复字符$ echo"Hello World" | tr -s ' 'Hello World# 替换字符$ echo"Hello" | tr'l''L'HeLLo
27. expand/unexpand - 制表符转换
# 制表符转空格$ expand file.txt# 空格转制表符$ unexpand file.txt# 指定制表符宽度$ expand -t 4 file.txt
28. split - 文件分割
# 按行数分割$ split -l 1000 file.txt part_# 每1000行一个文件,命名为part_aa, part_ab...# 按大小分割$ split -b 10M file.txt part_# 每10MB一个文件# 指定后缀长度$ split -l 1000 -a 3 file.txt part_# 后缀3位:part_aaa, part_aab...# 数字后缀$ split -l 1000 -d file.txt part_# part_00, part_01...
29. csplit - 上下文分割
# 按模式分割$ csplit file.txt '/pattern/''{*}'# 按行号分割$ csplit file.txt 100 200 300# 分割为4个文件
30. diff - 文件比较
# 比较文件$ diff file1.txt file2.txt1c1< Line 1 in file1---> Line 1 in file2# 并排显示$ diff -y file1.txt file2.txt# 统一格式$ diff -u file1.txt file2.txt# 递归比较目录$ diff -r dir1 dir2# 忽略空白$ diff -w file1.txt file2.txt# 生成补丁$ diff -u old.txt new.txt > patch.diff# 应用补丁$ patch old.txt < patch.diff
三、权限管理(10个命令)
31. chmod - 修改权限
功能:修改文件或目录的权限
语法:
chmod [选项] 模式 文件
权限表示:
数字模式:r(读) = 4w(写) = 2x(执行) = 1符号模式:u(所有者) g(组) o(其他) a(所有)+(添加) -(删除) =(设置)
实战案例:
# 案例1:数字模式$ chmod 755 file.txt# rwxr-xr-x# 所有者:rwx(7),组:r-x(5),其他:r-x(5)$ chmod 644 file.txt# rw-r--r--# 所有者:rw-(6),组:r--(4),其他:r--(4)# 案例2:符号模式$ chmod u+x file.txt # 所有者添加执行权限$ chmod g-w file.txt # 组删除写权限$ chmod o=r file.txt # 其他人只读$ chmod a+x file.txt # 所有人添加执行权限# 案例3:递归修改$ chmod -R 755 /data/www# 案例4:只修改目录$ find /data -type d -execchmod 755 {} \;# 案例5:只修改文件$ find /data -type f -execchmod 644 {} \;# 案例6:设置SUID$ chmod u+s /usr/bin/passwd# 设置SUID位,执行时以文件所有者身份运行# 案例7:设置SGID$ chmod g+s /data/shared# 目录设置SGID,新文件继承目录的组# 案例8:设置粘滞位$ chmod +t /tmp# 只有文件所有者可以删除自己的文件# 案例9:参考文件$ chmod --reference=ref.txt target.txt# target.txt权限与ref.txt相同
常用权限:
755:rwxr-xr-x # 目录、可执行文件644:rw-r--r-- # 普通文件600:rw------- # 私密文件777:rwxrwxrwx # 完全开放(不推荐)
32. chown - 修改所有者
功能:修改文件或目录的所有者和组
语法:
chown [选项] 所有者[:组] 文件
实战案例:
# 案例1:修改所有者$ chown user file.txt# 案例2:修改所有者和组$ chown user:group file.txt# 案例3:只修改组$ chown :group file.txt# 案例4:递归修改$ chown -R user:group /data/www# 案例5:参考文件$ chown --reference=ref.txt target.txt# 案例6:显示详细信息$ chown -v user:group file.txtchanged ownership of 'file.txt' from root:root to user:group
33. chgrp - 修改组
# 修改组$ chgrp group file.txt# 递归修改$ chgrp -R group /data/www# 参考文件$ chgrp --reference=ref.txt target.txt
34. umask - 默认权限
# 查看umask$ umask0022# 设置umask$ umask 0027# 计算默认权限# 文件:666 - umask = 644# 目录:777 - umask = 750
35. sudo - 提权执行
# 以root执行$ sudocommand# 以指定用户执行$ sudo -u user command# 切换到root$ sudo -i$ sudo su -# 编辑文件$ sudo vi /etc/hosts# 查看sudo权限$ sudo -l
36. su - 切换用户
# 切换到root$ su -# 切换到指定用户$ su - username# 执行命令后退出$ su - user -c "command"
37. id - 用户信息
# 查看当前用户$ iduid=1000(user) gid=1000(user) groups=1000(user),27(sudo)# 查看指定用户$ id username# 只显示UID$ id -u# 只显示GID$ id -g
38. groups - 用户组
# 查看当前用户的组$ groupsuser sudo docker# 查看指定用户的组$ groups username
39. whoami - 当前用户
# 显示当前用户名$ whoamiuser
40. passwd - 修改密码
# 修改当前用户密码$ passwd# 修改指定用户密码(需root)$ sudo passwd username# 锁定用户$ sudo passwd -l username# 解锁用户$ sudo passwd -u username# 删除密码$ sudo passwd -d username# 强制下次登录修改密码$ sudo passwd -e username
四、进程管理(10个命令)
41-50. 进程管理命令(精简版)
41. ps - 进程列表
$ ps aux # 所有进程$ ps -ef # System V风格$ ps aux --sort=-%cpu | head -10 # CPU排序$ ps aux --sort=-%mem | head -10 # 内存排序$ ps -eo pid,ppid,cmd,%cpu,%mem # 自定义输出
42. top - 进程监控
$ top # 实时监控$ top -p 1234 # 监控指定进程$ top -u user # 监控指定用户$ top -H -p 1234 # 显示线程# 交互:P(CPU排序) M(内存排序) k(杀进程) q(退出)
43. htop - 增强监控
$ htop # 彩色交互界面$ htop -p 1234 # 监控指定进程$ htop -u user # 监控指定用户
44. kill - 终止进程
$ kill 1234 # 正常终止$ kill -9 1234 # 强制终止$ kill -HUP 1234 # 重新加载配置$ kill -l # 列出所有信号
45. killall - 批量终止
$ killall nginx # 终止所有nginx$ killall -9 java # 强制终止所有java$ killall -u user # 终止用户的所有进程
46. pkill - 模式终止
$ pkill nginx # 终止nginx进程$ pkill -9 java # 强制终止$ pkill -u user # 终止用户进程$ pkill -f "java.*app.jar"# 匹配完整命令行
47. pgrep - 进程查找
$ pgrep nginx # 查找nginx进程$ pgrep -l nginx # 显示进程名$ pgrep -u user # 查找用户进程$ pgrep -c nginx # 统计进程数
48. nice - 设置优先级
$ nice -n 19 ./backup.sh # 低优先级运行$ nice -n -20 ./critical.sh # 高优先级(需root)
49. renice - 调整优先级
$ renice 10 -p 1234 # 调整进程优先级$ renice 15 -u user # 调整用户所有进程
50. nohup - 后台运行
$ nohup ./long_task.sh & # 后台运行$ nohup ./task.sh > task.log 2>&1 & # 指定日志
五、网络操作(10个命令)
51-60. 网络命令(精简版)
51. ping - 连通性测试
$ ping -c 4 192.168.1.1 # 发送4个包$ ping -i 0.2 192.168.1.1 # 间隔0.2秒$ ping -s 1472 192.168.1.1 # 大包测试MTU
52. traceroute - 路由追踪
$ traceroute 8.8.8.8 # 追踪路由$ traceroute -n 8.8.8.8 # 不解析域名
53. netstat - 网络统计
$ netstat -ant # TCP连接$ netstat -tlnp # 监听端口$ netstat -s # 统计信息$ netstat -rn # 路由表
54. ss - Socket统计
$ ss -ant # TCP连接$ ss -tlnp # 监听端口$ ss -s # 统计信息$ ss state established # 已建立的连接
55. ip - 网络配置
$ ip addr show # 显示IP地址$ ip link show # 显示网卡$ ip route show # 显示路由$ ip addr add 192.168.1.100/24 dev eth0 # 添加IP$ ip linkset eth0 up # 启用网卡
56. ifconfig - 网络接口(旧)
$ ifconfig # 显示所有接口$ ifconfig eth0 # 显示指定接口$ ifconfig eth0 up # 启用接口$ ifconfig eth0 down # 禁用接口
57. route - 路由表
$ route -n # 显示路由表$ route add -net 192.168.2.0/24 gw 192.168.1.1 # 添加路由$ route del -net 192.168.2.0/24 # 删除路由
58. curl - HTTP客户端
$ curl http://example.com # GET请求$ curl -I http://example.com # 只看响应头$ curl -o file.html http://example.com # 保存到文件$ curl -O http://example.com/file.zip # 保存(原文件名)$ curl -X POST -d "data" http://api.com # POST请求$ curl -H "Content-Type: application/json" http://api.com # 自定义头
59. wget - 文件下载
$ wget 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=100k http://... # 限速下载
60. scp - 安全复制
$ scp file.txt user@host:/path/ # 上传文件$ scp user@host:/path/file.txt . # 下载文件$ scp -r dir user@host:/path/ # 上传目录$ scp -P 2222 file.txt user@host:/path/ # 指定端口
六、系统信息(10个命令)
61-70. 系统信息命令(精简版)
61. uname - 系统信息
$ uname -a # 所有信息$ uname -r # 内核版本$ uname -m # 硬件架构$ uname -n # 主机名
62. hostname - 主机名
$ hostname # 显示主机名$ hostname -f # 完整域名$ hostname -I # 所有IP地址$ hostnamectl set-hostname new-name # 设置主机名
63. uptime - 运行时间
$ uptime# 运行时间和负载 15:30:45 up 127 days, 14:23, 3 users, load average: 2.5, 1.8, 1.2
64. date - 日期时间
$ date# 当前时间$ date"+%Y-%m-%d %H:%M:%S"# 格式化$ date +%s # 时间戳$ date -d @1704096645 # 时间戳转日期$ date -d "2 days ago"# 2天前
65. cal - 日历
$ cal # 当月日历$ cal 2024 # 全年日历$ cal 1 2024 # 指定月份
66. who - 登录用户
$ who# 当前登录用户$ who -b # 系统启动时间$ who -r # 运行级别
67. w - 用户活动
$ w # 用户活动详情 15:30:45 up 127 days, 14:23, 3 users, load average: 2.5, 1.8, 1.2USER TTY FROM LOGIN@ IDLE JCPU PCPU WHATroot pts/0 192.168.1.200 10:00 5:30m 0.12s 0.12s -bash
68. last - 登录历史
$ last # 登录历史$ last -n 10 # 最近10条$ last reboot # 重启记录$ last -x # 包括关机记录
69. lastlog - 最后登录
$ lastlog # 所有用户最后登录$ lastlog -u user # 指定用户
70. finger - 用户信息
$ finger # 所有用户信息$ finger user # 指定用户
七、磁盘管理(10个命令)
71-80. 磁盘管理命令(精简版)
71. df - 磁盘空间
$ df -h # 人类可读$ df -hi # inode信息$ df -hT # 显示文件系统类型$ df -h /data # 指定挂载点
72. du - 目录大小
$ du -sh /data # 目录总大小$ du -h --max-depth=1 /data | sort -rh # 子目录大小排序$ du -ah /data | sort -rh | head -20 # 最大的20个文件
73. mount - 挂载
$ mount # 显示所有挂载$ mount /dev/sdb1 /mnt # 挂载设备$ mount -t nfs server:/share /mnt # 挂载NFS$ mount -o loop image.iso /mnt # 挂载ISO
74. umount - 卸载
$ umount /mnt # 卸载$ umount -l /mnt # 强制卸载$ fuser -km /mnt # 终止占用进程后卸载
75. fdisk - 分区工具
$ fdisk -l # 列出所有分区$ fdisk /dev/sdb # 分区磁盘# 交互命令:n(新建) d(删除) p(显示) w(保存) q(退出)
76. parted - 分区工具
$ parted -l # 列出分区$ parted /dev/sdb # 分区磁盘# 支持GPT,大于2TB磁盘
77. mkfs - 创建文件系统
$ mkfs.ext4 /dev/sdb1 # 创建ext4$ mkfs.xfs /dev/sdb1 # 创建xfs$ mkfs -t ext4 /dev/sdb1 # 指定类型
78. fsck - 文件系统检查
$ fsck /dev/sdb1 # 检查文件系统$ fsck -y /dev/sdb1 # 自动修复$ fsck -n /dev/sdb1 # 只检查不修复
79. lsblk - 块设备列表
$ lsblk # 树形显示$ lsblk -f # 显示文件系统$ lsblk -o NAME,SIZE,TYPE,MOUNTPOINT # 自定义输出
80. blkid - 块设备ID
$ blkid # 显示所有设备UUID$ blkid /dev/sdb1 # 指定设备
八、压缩解压(10个命令)
81-90. 压缩解压命令(精简版)
81. tar - 打包工具
# 打包$ tar -cvf archive.tar file1 file2 # 创建tar包$ tar -czvf archive.tar.gz dir/ # 创建tar.gz$ tar -cjvf archive.tar.bz2 dir/ # 创建tar.bz2$ tar -cJvf archive.tar.xz dir/ # 创建tar.xz# 解包$ tar -xvf archive.tar # 解包tar$ tar -xzvf archive.tar.gz # 解包tar.gz$ tar -xjvf archive.tar.bz2 # 解包tar.bz2# 查看$ tar -tvf archive.tar # 查看内容# 追加$ tar -rvf archive.tar newfile # 追加文件# 解压到指定目录$ tar -xzvf archive.tar.gz -C /tmp/
82. gzip/gunzip - gzip压缩
$ gzip file.txt # 压缩(删除原文件)$ gzip -k file.txt # 保留原文件$ gzip -9 file.txt # 最大压缩$ gunzip file.txt.gz # 解压$ gzip -d file.txt.gz # 解压
83. bzip2/bunzip2 - bzip2压缩
$ bzip2 file.txt # 压缩$ bzip2 -k file.txt # 保留原文件$ bunzip2 file.txt.bz2 # 解压$ bzip2 -d file.txt.bz2 # 解压
84. xz/unxz - xz压缩
$ xz file.txt # 压缩$ xz -k file.txt # 保留原文件$ unxz file.txt.xz # 解压$ xz -d file.txt.xz # 解压
85. zip/unzip - zip压缩
$ zip archive.zip file1 file2 # 压缩文件$ zip -r archive.zip dir/ # 压缩目录$ unzip archive.zip # 解压$ unzip -l archive.zip # 查看内容$ unzip archive.zip -d /tmp/ # 解压到指定目录
86. rar/unrar - rar压缩
$ rar a archive.rar file1 file2 # 压缩$ rar a -r archive.rar dir/ # 压缩目录$ unrar x archive.rar # 解压$ unrar l archive.rar # 查看内容
87. 7z - 7zip压缩
$ 7z a archive.7z file1 file2 # 压缩$ 7z a -r archive.7z dir/ # 压缩目录$ 7z x archive.7z # 解压$ 7z l archive.7z # 查看内容
88. compress/uncompress - 压缩(旧)
$ compress file.txt # 压缩$ uncompress file.txt.Z # 解压
89. zcat - 查看压缩文件
$ zcat file.txt.gz # 查看gzip文件$ bzcat file.txt.bz2 # 查看bzip2文件$ xzcat file.txt.xz # 查看xz文件
90. zless - 分页查看压缩文件
$ zless file.txt.gz # 分页查看gzip文件$ bzless file.txt.bz2 # 分页查看bzip2文件$ xzless file.txt.xz # 分页查看xz文件
九、软件管理(5个命令)
91-95. 软件管理命令(精简版)
91. yum/dnf - RedHat系软件管理
# 安装$ yum install package # 安装软件包$ yum install -y package # 不确认直接安装# 更新$ yum update # 更新所有$ yum update package # 更新指定包# 删除$ yum remove package # 删除软件包# 搜索$ yum search keyword # 搜索软件包$ yum list installed # 已安装列表$ yum list available # 可用列表# 信息$ yum info package # 软件包信息# 清理$ yum clean all # 清理缓存
92. apt/apt-get - Debian系软件管理
# 更新索引$ apt update # 更新软件包索引# 安装$ apt install package # 安装软件包$ apt install -y package # 不确认直接安装# 更新$ apt upgrade # 更新所有$ apt upgrade package # 更新指定包# 删除$ apt remove package # 删除软件包$ apt purge package # 删除包及配置# 搜索$ apt search keyword # 搜索软件包$ apt list --installed # 已安装列表# 信息$ apt show package # 软件包信息# 清理$ apt clean # 清理缓存$ apt autoremove # 删除不需要的依赖
93. rpm - RPM包管理
# 安装$ rpm -ivh package.rpm # 安装RPM包# 更新$ rpm -Uvh package.rpm # 更新RPM包# 删除$ rpm -e package # 删除软件包# 查询$ rpm -qa # 所有已安装包$ rpm -qi package # 包信息$ rpm -ql package # 包文件列表$ rpm -qf /path/to/file # 文件属于哪个包
94. dpkg - DEB包管理
# 安装$ dpkg -i package.deb # 安装DEB包# 删除$ dpkg -r package # 删除软件包$ dpkg -P package # 删除包及配置# 查询$ dpkg -l # 所有已安装包$ dpkg -L package # 包文件列表$ dpkg -S /path/to/file # 文件属于哪个包
95. pip - Python包管理
# 安装$ pip install package # 安装Python包$ pip install -r requirements.txt # 从文件安装# 更新$ pip install --upgrade package # 更新包# 删除$ pip uninstall package # 删除包# 查询$ pip list # 已安装列表$ pip show package # 包信息$ pip search keyword # 搜索包
十、其他实用命令(5个命令)
96-100. 其他命令(精简版)
96. history - 命令历史
$ history# 显示历史命令$ history 10 # 最近10条$ history | grep keyword # 搜索历史$ !123 # 执行第123条命令$ !! # 执行上一条命令$ !$ # 上一条命令的最后参数$ Ctrl+R # 反向搜索历史
97. alias - 命令别名
$ alias ll='ls -lh'# 创建别名$ alias grep='grep --color=auto'# 彩色grep$ aliasrm='rm -i'# 安全删除$ alias# 显示所有别名$ unalias ll # 删除别名# 永久别名(添加到~/.bashrc)$ echo"alias ll='ls -lh'" >> ~/.bashrc$ source ~/.bashrc
98. echo - 输出文本
$ echo"Hello World"# 输出文本$ echo$PATH# 输出变量$ echo -n "No newline"# 不换行$ echo -e "Line1\nLine2"# 解析转义字符$ echo"text" > file.txt # 重定向到文件$ echo"text" >> file.txt # 追加到文件
99. xargs - 参数传递
$ find . -name "*.txt" | xargs rm# 删除找到的文件$ cat files.txt | xargs -I {} cp {} /backup/ # 批量复制$ echo"file1 file2" | xargs -n 1 echo# 每次处理1个参数$ find . -name "*.log" | xargs -P 4 gzip # 并行压缩
100. tee - 双向输出
$ command | tee file.txt # 输出到屏幕和文件$ command | tee -a file.txt # 追加到文件$ command | tee file1.txt file2.txt # 输出到多个文件$ command 2>&1 | tee log.txt # 包含错误输出
📊 命令速查表
按功能分类
按使用频率排序(Top 20)
按难度分级
初级(必须掌握):
文件:ls, cd, pwd, mkdir, rm, cp, mv, cat文本:grep, tail, head系统:ps, top, df, du, free网络:ping, ssh
中级(建议掌握):
文件:find, touch, ln, stat文本:sed, awk, sort, uniq, wc权限:chmod, chown, sudo进程:kill, killall, nohup网络:curl, wget, scp, netstat压缩:tar, gzip, zip
高级(深入学习):
文本:awk高级用法, sed脚本系统:systemctl, journalctl网络:tcpdump, iptables磁盘:fdisk, lvm调试:strace, lsof
🎯 实战场景
场景1:日常文件管理
# 1. 查看目录内容$ ls -lh# 2. 进入目录$ cd /data/project# 3. 创建目录结构$ mkdir -p src/{main,test}/java# 4. 复制文件$ cp -r /backup/project/* .# 5. 查找文件$ find . -name "*.java" -type f# 6. 批量重命名$ for file in *.txt; domv"$file""${file%.txt}.bak"done# 7. 删除临时文件$ find . -name "*.tmp" -delete# 8. 查看文件大小$ du -sh *# 9. 压缩备份$ tar -czvf backup-$(date +%Y%m%d).tar.gz project/# 10. 清理旧备份$ find /backup -name "*.tar.gz" -mtime +30 -delete
场景2:日志分析
# 1. 实时查看日志$ tail -f /var/log/nginx/access.log# 2. 查找错误$ grep -i "error" /var/log/syslog | tail -20# 3. 统计错误数$ grep -c "error" /var/log/app.log# 4. 分析访问日志# 统计访问最多的IP$ awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10# 统计状态码$ awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn# 统计访问最多的URL$ awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10# 5. 查找特定时间的日志$ grep "Jan 1 15:" /var/log/syslog# 6. 提取关键信息$ grep "error" /var/log/app.log | awk '{print $1, $2, $5}' | sort | uniq -c# 7. 日志归档$ tar -czvf logs-$(date +%Y%m%d).tar.gz /var/log/*.log$ find /var/log -name "*.log" -mtime +7 -exec gzip {} \;
场景3:系统监控
# 1. 快速检查系统状态$ uptime && df -h && free -h# 2. 查看CPU占用$ ps aux --sort=-%cpu | head -10# 3. 查看内存占用$ ps aux --sort=-%mem | head -10# 4. 实时监控$ top# 或$ htop# 5. 查看磁盘IO$ iostat -x 1# 6. 查看网络连接$ ss -ant | grep ESTABLISHED | wc -l# 7. 查看进程树$ pstree -p# 8. 监控特定进程$ watch -n 1 'ps aux | grep nginx'# 9. 系统资源报告$ sar -u 1 10 # CPU$ sar -r 1 10 # 内存$ sar -b 1 10 # IO
场景4:服务管理
# 1. 查看服务状态$ systemctl status nginx# 2. 启动服务$ systemctl start nginx# 3. 停止服务$ systemctl stop nginx# 4. 重启服务$ systemctl restart nginx# 5. 重新加载配置$ systemctl reload nginx# 6. 设置开机自启$ systemctl enable nginx# 7. 查看服务日志$ journalctl -u nginx -n 50# 8. 实时跟踪日志$ journalctl -u nginx -f# 9. 查看所有服务$ systemctl list-units --type=service# 10. 查看失败的服务$ systemctl --failed
场景5:网络诊断
# 1. 测试连通性$ ping -c 4 192.168.1.1# 2. 追踪路由$ traceroute 8.8.8.8# 3. 综合诊断$ mtr -r -c 100 8.8.8.8# 4. DNS查询$ nslookup www.baidu.com$ dig www.baidu.com# 5. 查看端口$ ss -tlnp | grep :80# 6. 测试端口$ nc -zv 192.168.1.100 80# 7. 下载测试$ wget -O /dev/null http://speedtest.com/file.bin# 8. 抓包分析$ tcpdump -i eth0 -w capture.pcap port 80# 9. 查看网络统计$ netstat -s# 10. 查看路由表$ ip route show
场景6:用户管理
# 1. 添加用户$ useradd -m -s /bin/bash username# 2. 设置密码$ passwd username# 3. 添加到sudo组$ usermod -aG sudo username# 4. 删除用户$ userdel -r username# 5. 查看用户信息$ id username$ finger username# 6. 查看登录历史$ last username# 7. 锁定用户$ passwd -l username# 8. 解锁用户$ passwd -u username# 9. 修改用户shell$ chsh -s /bin/zsh username# 10. 查看所有用户$ cat /etc/passwd
场景7:磁盘管理
# 1. 查看磁盘空间$ df -h# 2. 查看inode$ df -hi# 3. 找出大目录$ du -h --max-depth=1 / | sort -rh | head -10# 4. 找出大文件$ find / -type f -size +1G -execls -lh {} \;# 5. 清理日志$ find /var/log -name "*.log" -mtime +30 -delete# 6. 清理临时文件$ find /tmp -type f -mtime +7 -delete# 7. 清理包缓存$ yum clean all # CentOS$ apt clean # Ubuntu# 8. 查看磁盘IO$ iostat -x 1# 9. 查看挂载$ mount | column -t# 10. 检查文件系统$ fsck /dev/sdb1
场景8:备份恢复
# 1. 完整备份$ tar -czvf backup-$(date +%Y%m%d).tar.gz /data# 2. 增量备份$ rsync -av --delete /data/ /backup/data/# 3. 远程备份$ rsync -avz -e ssh /data/ user@backup-server:/backup/# 4. 数据库备份$ mysqldump -u root -p database > backup.sql# 5. 恢复备份$ tar -xzvf backup-20240101.tar.gz -C /restore/# 6. 定时备份(crontab)$ crontab -e0 2 * * * /scripts/backup.sh# 7. 验证备份$ tar -tzvf backup.tar.gz | head# 8. 备份权限$ getfacl -R /data > permissions.acl$ setfacl --restore=permissions.acl# 9. 同步备份$ rsync -av --progress /data/ /backup/# 10. 清理旧备份$ find /backup -name "*.tar.gz" -mtime +30 -delete
场景9:性能优化
# 1. 查看系统负载$ uptime$ w# 2. 分析CPU使用$ top$ mpstat -P ALL 1# 3. 分析内存使用$ free -h$ vmstat 1# 4. 分析磁盘IO$ iostat -x 1$ iotop# 5. 分析网络$ iftop -i eth0$ nethogs eth0# 6. 查找性能瓶颈$ perf top$ perf record -g -p <pid># 7. 优化系统参数$ sysctl -w vm.swappiness=10$ sysctl -w net.core.somaxconn=65535# 8. 清理缓存$ echo 3 > /proc/sys/vm/drop_caches# 9. 调整进程优先级$ renice -10 -p <pid># 10. 限制资源使用$ ulimit -n 65535 # 文件描述符$ ulimit -u 4096 # 进程数
场景10:安全加固
# 1. 修改SSH端口$ vi /etc/ssh/sshd_configPort 2222# 2. 禁用root登录PermitRootLogin no# 3. 配置防火墙$ firewall-cmd --add-port=80/tcp --permanent$ firewall-cmd --reload# 4. 查看登录失败$ lastb | head -20# 5. 查看sudo日志$ grep sudo /var/log/auth.log# 6. 设置密码策略$ vi /etc/login.defsPASS_MAX_DAYS 90PASS_MIN_DAYS 1PASS_MIN_LEN 8# 7. 锁定账户$ passwd -l username# 8. 查看开放端口$ ss -tlnp# 9. 扫描恶意文件$ find / -name "*.php" -mtime -1# 10. 检查异常进程$ ps aux | grep -v "^\[" | awk '{if($3>50)print}'
💡 使用技巧
1. 命令行快捷键
Ctrl+A # 移到行首Ctrl+E # 移到行尾Ctrl+U # 删除到行首Ctrl+K # 删除到行尾Ctrl+W # 删除前一个单词Ctrl+L # 清屏Ctrl+R # 反向搜索历史Ctrl+C # 终止当前命令Ctrl+Z # 暂停当前命令Ctrl+D # 退出当前shellTab # 自动补全Tab Tab # 显示所有可能的补全
2. 管道和重定向
# 管道$ command1 | command2 # 将command1的输出作为command2的输入# 重定向$ command > file # 输出到文件(覆盖)$ command >> file # 输出到文件(追加)$ command < file # 从文件读取输入$ command 2> file # 错误输出到文件$ command 2>&1 # 错误输出到标准输出$ command &> file # 所有输出到文件# 组合使用$ command 2>&1 | tee log.txt # 输出到屏幕和文件$ command > /dev/null 2>&1 # 丢弃所有输出
3. 通配符
* # 匹配任意字符? # 匹配单个字符[abc] # 匹配a、b或c[a-z] # 匹配a到z[!abc] # 不匹配a、b、c# 示例$ ls *.txt # 所有txt文件$ ls file?.txt # file1.txt, file2.txt$ ls file[1-3].txt # file1.txt, file2.txt, file3.txt$ rm !(*.txt) # 删除除txt外的所有文件
4. 命令替换
# 使用$()$ echo"Today is $(date +%Y-%m-%d)"# 使用反引号$ echo"Today is `date +%Y-%m-%d`"# 示例$ mkdir backup-$(date +%Y%m%d)$ tar -czf backup-$(hostname)-$(date +%Y%m%d).tar.gz /data
5. 批量操作
# for循环$ for file in *.txt; domv"$file""${file%.txt}.bak"done# while循环$ cat files.txt | whileread file; docp"$file" /backup/done# xargs$ find . -name "*.log" | xargs gzip$ cat files.txt | xargs -I {} cp {} /backup/# 并行执行$ find . -name "*.log" | xargs -P 4 gzip
6. 别名和函数
# 创建别名$ alias ll='ls -lh'$ alias grep='grep --color=auto'$ alias ..='cd ..'$ alias ...='cd ../..'# 创建函数$ mkcd() {mkdir -p "$1" && cd"$1"}$ backup() { tar -czvf "$1-$(date +%Y%m%d).tar.gz""$1"}# 添加到~/.bashrc永久生效$ echo"alias ll='ls -lh'" >> ~/.bashrc$ source ~/.bashrc
📚 推荐资源
在线资源
- 1. Linux命令大全:man.linuxde.net
- 2. 命令行艺术:github.com/jlevy/the-art-of-command-line
- 3. Linux工具快速教程:linuxtools-rst.readthedocs.io
书籍
- 1. 《Linux命令行与shell脚本编程大全》
练习平台
- 1. OverTheWire:overthewire.org
- 2. Linux Journey:linuxjourney.com
- 3. Vim Adventures:vim-adventures.com
🎉 总结
这100个命令覆盖了Linux运维的方方面面:
✅ 文件操作(15个)- 日常使用最频繁✅ 文本处理(15个)- 日志分析必备✅ 权限管理(10个)- 安全基础✅ 进程管理(10个)- 系统监控核心✅ 网络操作(10个)- 网络诊断工具✅ 系统信息(10个)- 系统状态查看✅ 磁盘管理(10个)- 存储管理✅ 压缩解压(10个)- 文件打包✅ 软件管理(5个)- 包管理✅ 其他工具(5个)- 效率提升
记住:
- 1. 先掌握高频命令(ls, cd, grep, ps, top)
- 2. 再学习文本处理(sed, awk, sort)
掌握这100个命令,你就能应对90%的日常运维工作!
觉得有用?点个赞👍,转发给更多需要的人!
#Linux #运维 #命令大全 #技术干货