楼层: 首页/ 软件技术/ Linux/ 常用命令大全:二十条命令闯天下
03

常用命令大全:二十条命令闯天下

Command Line Handbook

别被"几千条命令"吓住。日常真正高频的也就三四十条,把下面这几大类练熟,你在服务器上就基本不慌了。每条都给:语法 → 常用选项 → 真实例子 → 输出。看不懂选项表没关系,先混眼熟,用的时候回来查。

一、文件操作:增删改查搬位置

这是每天都要按几百次的"手脚命令"。记住三个反人类点:移动是 mv、复制是 cp、删除是 rm,没有回收站。

文件/目录基本功

# 看:-l 详细信息,-h 人类可读大小,-a 含隐藏文件 ls -lh ls -la # 进目录 / 我在哪 / 建目录(-p 连父目录一起建) cd /var/log pwd mkdir -p project/src/utils # 建空文件 / 删空目录 / 复制 / 移动改名 touch note.txt rmdir emptydir cp note.txt note_backup.txt # 复制文件 cp -r src/ src_backup/ # 复制目录必须加 -r mv note.txt todo.txt # 移动 = 改名 mv todo.txt ~/Documents/ # 挪到别的目录 # 删:-r 递归删目录,-f 不问直接删(核武器,想清楚再按回车) rm note_backup.txt rm -r old_project/ # 看真身 / 看详细信息 file mystery.bin stat report.txt
$ ls -lh total 12K -rw-r--r-- 1 jianma jianma 2.0K Sep 16 10:00 note.txt drwxr-xr-x 2 jianma jianma 4.0K Sep 16 10:01 project $ file mystery.bin mystery.bin: PNG image data, 800 x 600 $ stat note.txt File: note.txt Size: 2048 Access: (0644/-rw-r--r--)

链ln:软链接 vs 硬链接,一句话分清

软链接(ln -s)= Windows 的快捷方式:一个小文件指向原文件路径。原文件删了,链接就断。可以跨磁盘、可以链目录。ln -s /opt/app/bin/app /usr/local/bin/app 把软件挂进 PATH。

硬链接(ln,不加 -s)= 文件的第二个名字:两个文件名指向同一个 inode,删了任何一个,数据还在另一个名下。不能跨分区、不能链目录,日常用得少,了解即可。

链接实战

ln -s /opt/nginx/conf/nginx.conf ~/nginx.conf.link # 软链 ln report.txt report_hard.txt # 硬链 ls -li report.txt report_hard.txt
$ ls -li report.txt report_hard.txt 132187 -rw-r--r-- 2 jianma jianma ... report.txt 132187 -rw-r--r-- 2 jianma jianma ... report_hard.txt # inode 号一模一样 = 同一个文件的两个名字

二、查看文件:别再用 cat 读大文件了

日志动辄几十万行,cat 一把全刷出来只会让你眼瞎。学会按"看多少"选工具:

命令一句话用途
cat小文件一把梭打印出来。文件大了别用。
more / less分页看长文件。less 比 more 强(能上下翻、能搜、按 q 退出),是终端里的"阅读器"。
head看头几行。head -n 20 file。
tail看尾几行。tail -f /var/log/nginx/access.log 实时跟踪日志新增,排障神器。
wc数行数/词数/字节数。wc -l file 数行数最常用。
sort / uniq排序 / 去重。uniq 只去相邻重复,所以经典组合是 sort | uniq -c 统计次数。

查看与统计实战

tail -n 50 /var/log/syslog # 看最后 50 行 tail -f /var/log/nginx/access.log # 实时跟踪,Ctrl+C 退出 wc -l access.log # 这个日志多少行? sort access.log | uniq -c | sort -rn | head # 最常出现的 10 条记录
$ wc -l access.log 18423 access.log $ tail -n 2 /var/log/syslog Sep 16 10:01:01 ubuntu CRON[881]: (root) CMD (run-parts) Sep 16 10:05:01 ubuntu systemd[1]: Started Session 12 of user jianma.

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

这是 Linux 最精华的一套功夫,合称"三剑客"。配合管道 |(把前一个命令的输出,塞给后一个命令当输入),能把任何文本"过滤、修改、抽字段"。

grep 文件里的搜索引擎

grep = Global Regular Expression Print,"在一堆文本里找符合条件的行"。常用选项:-i 忽略大小写、-v 反选(找不包含的)、-n 显示行号、-r 递归搜目录、-c 数匹配行数、-E 开启扩展正则。

grep 五个实用例子

grep "error" /var/log/syslog # 找含 error 的行 grep -rn "password" /etc/ssh/ # 递归找,显示文件名和行号 grep -i "failed" /var/log/auth.log # 忽略大小写 grep -v "^#" /etc/ssh/sshd_config # 去掉所有注释行 ps aux | grep "nginx" # 配合管道:找 nginx 进程
$ grep -n "PermitRootLogin" /etc/ssh/sshd_config 48:PermitRootLogin prohibit-password

sed 流编辑器,像流水线工人

sed 不打开编辑器,而是把文本一行行"流过"流水线,你告诉它怎么改,它改完吐出结果。最常用的是替换:sed 's/旧/新/g',g 表示一行里替换所有(不加只换第一个)。加 -i 直接改原文件(危险,先别加 -i 试运行)。

sed 五个实用例子

echo "2026-09-16" | sed 's/-/\//g' # 把横杠换成斜杠 sed 's/root/admin/' /etc/passwd # 每一行第一个 root 换成 admin sed -n '10,20p' file.txt # 只打印第 10 到 20 行 sed '/^$/d' file.txt # 删除所有空行 sed '3i\新插进来的一行' file.txt # 在第 3 行前插入一行
$ echo "2026-09-16" | sed 's/-/\//g' 2026/09/16
sed -i 是个狠角色

sed -i 's/old/new/g' file 会原地直接改文件,没有撤销。新手正确姿势:先不加 -i,看屏幕输出对不对,确认无误再补 -i。或者 sed -i.bak '...' file 让它顺手备份一个 file.bak。

awk 文本处理的瑞士军刀

awk 把每一行按"列"切开处理,天生擅长做表格数据。几个内置变量:$0 整行、$1 $2... 第 1、2 列、NF 这行有几列、NR 现在是第几行、FS 分隔符(默认是空格/Tab)。

awk 五个实用例子

awk '{print $1}' access.log # 只取每行第一列(访问者 IP) awk 'NR>1 {print $1, $4}' data.csv # 跳过表头行,打印第1、4列 awk -F: '{print $1}' /etc/passwd # 按冒号分隔,列出所有用户名 awk '$3 > 100 {print $0}' scores.txt # 条件:第三列大于100的行才打印 awk '{sum+=$1} END {print sum}' nums.txt # 把第一列全部加起来
$ awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -3 5210 203.0.113.5 1873 198.51.100.22 904 192.0.2.87 # 访问最多的 IP 排行

四、权限:rwx 这套数字游戏

Linux 每个文件都有三组权限:属主(u)、属组(g)、其他人(o)。每组三个位:r 读=4、w 写=2、x 执行=1。755、644 这两个数字要刻进脑子。

数字权限典型用途
755rwxr-xr-x可执行脚本/目录:自己能改能跑,别人只能进来看。
644rw-r--r--普通文件:自己能改,别人只能读。配置文件、网页文件标准。
600rw-------私密文件:只有自己能读能改。SSH 私钥、密码文件必须是这个。
777rwxrwxrwx所有人全开,新手图省事最爱用,也是安全大忌,除了临时调试别用。

改权限 / 改属主

chmod 755 deploy.sh # 数字法:给脚本可执行权限 chmod 644 index.html # 网页文件标准权限 chmod u+x deploy.sh # 符号法:给属主加执行权限 chmod g-w,o-r secret.txt # 组去掉写权限,其他人去掉读权限 chown jianma:jianma report.txt # 改属主和属组(属主:属组) chown -R jianma:www-data /var/www # -R 递归改整个目录树 chgrp www-data /var/www/html # 只改组 umask # 看新建文件默认权限掩码
$ ls -l deploy.sh -rwxr-xr-x 1 jianma jianma 1024 Sep 16 deploy.sh $ umask 0022 # 022 意味着:新建文件默认 644,目录默认 755

位SUID / SGID / Sticky Bit:三个特殊位

SUID(chmod u+s,数字 4xxx):谁运行它,就临时拥有文件属主的权限。经典例子 passwd 命令——你改密码时临时获得 root 权限去写 /etc/shadow。滥用极危险,别随便给脚本加 SUID。

SGID(g+s,2xxx):在目录里新建的文件,自动继承目录的组。团队协作目录常用。

Sticky Bit(o+t,1xxx):目录里的文件只有属主和 root 能删。/tmp 就是它——所有人能写,但不能删别人的文件。

五、进程:谁在占我机器

进程就是"正在跑的程序"。系统出问题、卡、慢,第一步就是看进程:谁在占 CPU、谁在吃内存、怎么杀掉它。

看进程 / 杀进程

ps aux # 看所有进程快照(BSD 风格) ps -ef # 另一种等价写法(System V 风格) ps aux | grep nginx # 找某个程序的进程 top # 实时监控面板(按 q 退出) htop # top 的彩色加强版,更好看(要先装) pstree # 树状看进程父子关系 kill 12345 # 温和地请 PID=12345 退出 kill -9 12345 # 强行杀掉(核武器,先试普通 kill) killall nginx # 按名字杀所有 nginx pkill -f "python app.py" # 按命令行内容杀
$ ps aux | grep nginx root 881 0.0 0.1 51200 1200 ? Ss Sep15 0:00 nginx: master process www-data 882 0.0 0.3 52300 3400 ? S Sep15 0:03 nginx: worker process $ kill 882 # 完事后 ps 一下确认没了

活前台、后台与 nohup

命令 &:命令末尾加 & 扔到后台跑,终端立刻还给你。但一关终端它可能跟着死。

nohup 命令 &:nohup = no hang up(不被挂断),关掉终端程序照样活,输出自动写到 nohup.out。临时跑个长跑脚本时用它。

jobs / bg / fg:Ctrl+Z 把当前程序挂起,bg 扔后台、fg 拉回前台。

nice / renice:调整进程优先级(-20 最高到 19 最低)。nice -n 19 ./大计算 把不重要的任务降权,别让它抢关键业务的 CPU。

六、网络:你的机器怎么上网

后端和服务器的日常一大半是网络:查 IP、测连通、传文件、抓包。记住,ip 命令家族是新时代,ifconfig/netstat 是老古董(还能用,但新文档都在推前者)。

命令干什么
ip addr看所有网卡和 IP 地址(老命令 ifconfig)。
ip route看路由表,找默认网关(老命令 route)。
ping 域名测通不通、延迟多少。Ctrl+C 停。
traceroute / tracepath看数据包一路上经过了哪些路由器。
ss -tulpn看本机开了哪些端口、谁在监听(老命令 netstat -tulpn),排障高频。
curl / wgetcurl 发 HTTP 请求测试接口;wget 直接下载文件。
ssh / scp远程登录 / 跨机复制文件(第 8 章细讲)。
nslookup / dig查域名解析到哪个 IP。

网络排障三连

ip addr show # 我的 IP 是多少 ping -c 4 baidu.com # 发 4 个包测连通 ss -tulpn | grep ":80" # 80 端口谁在监听 curl -I https://example.com # 只看响应头 curl -O https://example.com/file.tar.gz # 下载文件 dig example.com # 域名解析详情 scp file.txt jianma@1.2.3.4:/tmp/ # 把本地文件传到远程
$ ss -tulpn | grep :80 LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:("nginx",pid=881,fd=6) $ ping -c 4 baidu.com 4 packets transmitted, 4 received, 0% packet loss, time 3003ms rtt min/avg/max = 12.1/13.4/15.0 ms

tcpdump 入门:把来往的网络包抓下来看

前面的工具都是"看结果",tcpdump 是"看现场"——数据包一来一回它全录下来。接口/服务不通信时,抓包看"包到底发没发出去、对方回没回",是终极排障手段。

sudo tcpdump -i any # 抓所有网卡的包 sudo tcpdump -i eth0 port 80 # 只抓 80 端口的 HTTP 包 sudo tcpdump host 1.2.3.4 # 只看和某 IP 的通信 sudo tcpdump -nn port 22 -c 10 # 抓 10 个包就停,-nn 不做域名反解(更快) sudo tcpdump -w /tmp/cap.pcap # 存成文件,后面用 Wireshark 慢慢看
$ sudo tcpdump -nn -c 3 port 80 listening on eth0, link-type EN10MB 10:30:01.001 IP 192.168.1.5.51234 > 93.184.216.34.80: Flags [S], seq 100 10:30:01.012 IP 93.184.216.34.80 > 192.168.1.5.51234: Flags [S.], seq 200 10:30:01.013 IP 192.168.1.5.51234 > 93.184.216.34.80: Flags [.], ack 201 # S/S./. 就是三次握手:我连→对方应→我确认,连接建立

七、磁盘:空间都被谁吃了

"磁盘满了!"是运维第一名的事故。先用 df 看整体,再用 du 揪出最肥的目录。

查看空间 / 找大文件

df -h # 各分区使用情况,-h 人类可读 du -sh /var/log/* # /var/log 下每个子目录占多大 du -h --max-depth=1 /var # /var 下第一层各占多少 lsblk # 树状看磁盘和分区 blkid # 看分区的 UUID 和文件系统类型
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 40G 18G 20G 48% / tmpfs 393M 0 393M 0% /tmp $ du -sh /var/log/* | sort -rh | head -3 1.2G /var/log/journal 350M /var/log/nginx 88M /var/log/installer

分区与挂载(加新硬盘时用)

sudo fdisk /dev/sdb # 给新硬盘 /dev/sdb 分区(交互式) sudo mkfs.ext4 /dev/sdb1 # 把分好的区格式化成 ext4 sudo mkdir /mnt/data sudo mount /dev/sdb1 /mnt/data # 挂载到 /mnt/data sudo umount /mnt/data # 用完卸载

/etc/fstab 里长这样(用 UUID 更稳)

# blkid 查到的 UUID 挂载点 类型 选项 备份 检查顺序 UUID=12345678-aaaa-bbbb-cccc-1234567890ab /mnt/data ext4 defaults 0 2 # 写完 sudo mount -a 测试,不报错再重启
mount 重启就没,要写 fstab

mount 挂的盘重启后自动消失。想开机自动挂,得往 /etc/fstab 写一行配置。这文件写错一个字符,系统可能起不来——改完先 sudo mount -a 测试,成功再重启。

swap(交换分区)与磁盘概览

lsblk # 树状看磁盘/分区 free -h # 看 swap 用量 swapon --show # 当前 swap 设备 # 内存不够时,系统会把一部分数据挪到磁盘上的 swap;频繁用 swap 说明该加内存了

八、压缩打包:tar 是祖师爷

Linux 圈最常见的是 .tar.gz。记住四个字母组合:c 建包、x 解包、z 用 gzip、v 显示过程、f 指定文件名。背口诀:"压缩 czf,解包 xzf"。

tar 全家桶

tar -czvf backup.tar.gz project/ # 打包并用 gzip 压缩 tar -xzvf backup.tar.gz # 解出来 tar -tzvf backup.tar.gz # 只看里面有什么,不解压 tar -xzvf backup.tar.gz -C /tmp/ # 解到指定目录 gzip file.txt # 压缩成 file.txt.gz gunzip file.txt.gz # 解压 zip -r folder.zip folder/ # zip 格式(Windows 友好) unzip folder.zip
$ tar -czvf backup.tar.gz project/ project/ project/src/ project/src/main.py $ ls -lh backup.tar.gz -rw-r--r-- 1 jianma jianma 1.2M Sep 16 backup.tar.gz

九、查找:文件和命令都在哪

find → 实时扫磁盘,想怎么找就怎么找
find 路径 条件,按名字、类型、大小、时间找。
例子:find /var/log -name "*.log" 按名;find . -type f -size +100M 找大于 100M 的文件;find . -name "*.tmp" -mtime +7 -delete 找 7 天前的 tmp 直接删;find . -name "*.log" -exec wc -l {} \; 找到后对每个文件执行命令。
locate → 查数据库,秒出结果
它查的是系统预先建好的文件名索引库,比 find 快,但新文件要先 updatedb 才找得到。
例子:locate nginx.conf 一秒列出全盘所有 nginx.conf。
which / whereis → 找命令本身
which python3 告诉你这个命令的可执行文件在哪;whereis nginx 连二进制、配置、手册一起列。
典型用途:"我装了俩版本的 python,现在敲 python3 跑的是哪个?"——which 一下就清楚。

find 实战:找出 7 天前的日志并打包备份

find /var/log/nginx -name "*.log" -mtime +7 find /var/log/nginx -name "*.log" -mtime +7 -exec tar -czf old_logs.tar.gz {} + which python3 whereis nginx
$ which python3 /usr/bin/python3 $ whereis nginx nginx: /usr/sbin/nginx /etc/nginx /usr/share/nginx

十、其他高频杂项

命令用途
date / cal看/改时间,看日历。
echo / printf打印变量、写测试内容到文件。
history历史命令;!编号 重跑;Ctrl+R 搜索历史,神仙快捷键。
alias起别名:alias ll='ls -lh',永久生效写进 ~/.bashrc。
uname -a / hostname看内核信息 / 看主机名。
reboot / shutdown -r now重启;shutdown -h now 关机;shutdown +10 十分钟后关机。
man 命令 / 命令 --help忘记选项就问系统:man 是详细手册(q 退出),--help 是快速摘要。
clear清屏(Ctrl+L 也行)。
本章小练习 · details 点开做
练习 1:把 /etc 下所有.conf 文件复制到家目录的 conf_backup/ 里

mkdir -p ~/conf_backup && cp /etc/*.conf ~/conf_backup/(注意子目录里的 .conf 要 -r 和 find 配合:sudo find /etc -name "*.conf" -exec cp {} ~/conf_backup/ \;)。

练习 2:统计 access.log 里出现次数最多的 IP(第一列)前 5 名

awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -5。三剑客流水线:awk 抽列 → sort 排序 → uniq -c 计数 → 再排序取前 5。

练习 3:把 start.sh 的权限改成"自己可读写执行,组和别人只读和执行"

755。chmod 755 start.sh 或符号法 chmod u=rwx,go=rx start.sh。

练习 4:发现一个进程 PID=9999 占满 CPU,普通 kill 没用,怎么办

先 kill 9999 温和请求退出;没用再 kill -9 9999 强杀。kill -9 不给进程清理机会,可能留临时文件,放最后用。

练习 5:/var/log 快满了,怎么找出最大的 5 个文件

find /var/log -type f -exec du -h {} + | sort -rh | head -5,或者 du -ah /var/log | sort -rh | head -5。

记
本章小结

① 文件三板斧 cp/mv/rm 没有回收站;看文件 less 分页、tail -f 跟日志,别拿 cat 读大文件。

② 三剑客 grep 找、sed 改、awk 抽列,用管道 | 串起来是灵魂。

③ 权限记死 755 脚本 / 644 普通文件 / 600 密钥;进程 ps aux 看、kill 杀、nohup 后台跑;磁盘 df 看总量、du 找肥文件。