简介:面向Linux初学者与服务器运维人员,这份命令速查文档系统梳理了日常高频使用的Shell命令与实用技巧。内容按文件与目录管理、系统管理、网络管理、软件包管理四大模块组织,覆盖ls、cp、rm、tar、ps、kill、chmod、crontab、ssh、scp、curl、iptables、apt、yum、dnf、pacman等高频工具;每个命令均配有简短示例和格式说明,例如tar打包与解压、scp远程复制、防火墙规则查看等,便于理解语法和上手实操。文档同时点明不同Linux发行版在包管理工具上的差异,例如Debian/Ubuntu系列使用apt、红帽系使用yum或dnf、Arch系使用pacman,可帮助习惯不同环境的用户快速适应。包体为单个docx文档,大小15KB,既是可直接阅读的电子文档,也可打印成桌面速查手册,方便随手翻阅。目前已有129人浏览学习,适合新手系统入门、老手查漏补缺,也适合运维人员在服务器维护工作中随时翻阅。
1. 先别急着背命令:Linux 系统常用命令的打开方式
很多人以为 Linux 系统常用命令就是一本命令字典,遇到问题翻一翻,背完就忘。我拆完这份命令汇总才发现,真正值钱的是命令背后的选择逻辑:什么时候用 tar 而不是 zip,什么时候用 ss 而不是 netstat,什么时候 kill -9 会帮倒忙。这份资源把文件目录、系统管理、网络管理、软件包管理四条操作链路串在了一起,适合刚接触命令行的初学者,也适合每天在服务器上排查问题的运维人员。先弄懂为什么选这条命令,再照着下面的步骤敲,比对着手册硬背高效得多。
2. 文件与目录操作:从 ls 到 tar 的高频组合
2.1 列目录:ls 的输出会告诉你更多信息
进入服务器第一件事,通常就是看当前目录里有什么。ls最简单的用法是直接列目录,但生产环境里我一般直接上ls -la:
ls -la /home # -l 显示权限、属主、大小、修改时间 # -a 显示以 . 开头的隐藏文件第一列drwxr-xr-x这类字符串不是装饰:第 1 位表示类型,d是目录,-是普通文件,l是软链接;后面 9 位分成三组,分别对应当前用户、用户组、其他人的读(r)、写(w)、执行(x)权限。这一列和后面要讲的chmod是直接对应的。如果你需要随时快速确认权限位,ls -l比ll别名更通用,因为不是所有发行版都默认配置了ll。
不带参数直接敲ls,只显示非隐藏文件名;带上-a才能看到.bashrc、.ssh这类配置文件。对运维来说,排查登录异常时隐藏文件往往才是关键现场。
2.2 切换目录:cd 的快捷键值得形成肌肉记忆
cd、pwd是最基础的路径操作,但很多人只在绝对路径和相对路径之间来回切,忽略了几个能减少误操作的习惯:
pwd cd /var/log cd .. # 回上一级 cd ~ # 回当前用户家目录 cd - # 回上一次所在目录cd ..只能向上一级走,想一次上两级要用cd ../..。cd ~不依赖你当前在哪个路径,适合写脚本时指定家目录。cd -是容易被低估的命令:你从 A 目录切到 B 目录处理问题,想回到 A,不用重新输入长路径,直接cd -就行,终端也会打印出切换后的实际路径。
pwd有一层容易忽略的用途:在脚本里确认当前路径,避免后续相对路径全部失效。我见过有人写部署脚本时不打pwd,结果在错误的目录下执行了rm -rf,那种翻车现场通常没法用后悔药补救。
2.3 创建、删除与复制:目录操作中的三个边界
mkdir、rmdir、rm、cp这四个命令,正确用法和危险边界同样重要:
mkdir -p parent/child # -p 递归创建多级目录 rmdir empty_dir # 只能删空目录 cp -r source_dir dest # -r 递归复制目录 rm -rf target_dir # 强制递归删除,慎用mkdir -p的常见场景是一次性搭出项目骨架,比如mkdir -p src/components/pages,中途任何一级不存在都会自动创建。rmdir只能删空目录,目录里有文件会直接报错,所以实际使用频率很低。删除目录主流方案仍是rm -r dirname,加-f后不会逐一询问,我每次执行rm -rf前会先用ls -la确认路径没有拼错。
cp复制目录必须带-r,否则报错省略目录内的内容;不带任何参数复制文件是最基础的用法。复制后如果想保留原有权限和时间戳,可以加-p,做备份时很实用,不过这份资源里没有展开,建议你把它补进自己的速查表。
2.4 查看文件内容:cat、less、head、tail 怎么选
查看文件内容,最容易选错工具的是在超大日志文件上直接cat。正确选择逻辑如下:
cat /etc/hostname # 小文件快速查看 less /var/log/syslog # 大文件分页滚动查看 head -20 /var/log/syslog # 只看开头 20 行 tail -f /var/log/syslog # 实时跟踪日志输出cat适合读配置文件这种几十行的内容。文件一长,输出会直接刷屏,所以大文件用less:支持上下翻页、/关键词搜索、按q退出,这些交互比more更接近阅读器体验。head和tail默认显示前 10 行和后 10 行,通过-n可以改行数。
tail -f是排查线上问题的神器。服务日志持续写入时,这个命令能在终端里实时滚动新内容,看到新的报错立刻就可以去处理。想退出实时跟踪,按Ctrl+C即可,不会影响原文件。
2.5 查找与过滤:find 和 grep 的高频搭配
find负责按文件名找位置,grep负责在内容里筛文本,两者组合起来能覆盖绝大多数查找需求:
find /var/log -name "*.log" -mtime -7 # -name 按文件名匹配 # -mtime -7 表示修改时间在 7 天内 grep -r "ERROR" /var/log/ | head -20 # -r 递归搜索目录下所有文件 # -i 忽略大小写,排查关键字时建议加上find的第一个参数是搜索起点,建议尽量限定具体目录,避免全盘扫描拖垮 IO。-name支持通配符,*.log会匹配所有以.log结尾的文件。-mtime -7是一个很有用的时间筛选条件,适合“找出最近一周被改过的配置文件”这类需求。
grep默认输出匹配行,不加参数时不会告诉你文件内嵌的文件名,多文件搜索建议加-H。grep -r递归搜索时,遇到二进制文件可能会打印奇怪输出,加-I可以跳过二进制文件。把grep和管道结合,比如ps aux | grep nginx,是进程排查里最常见的组合,后面第 3 章会实际用到。
2.6 打包压缩:tar 与 zip/unzip 的使用边界
打包压缩是文件操作里最容易混淆的一组,关键在于分清“打包”和“压缩”是两件事:
tar -cvf archive.tar file1 dir1 # 打包,不压缩 tar -czvf archive.tar.gz dir1 # 打包并 gzip 压缩 tar -xzvf archive.tar.gz -C /tmp/restore # 解压到指定目录 zip -r archive.zip data/ # zip 压缩 unzip archive.zip -d /tmp/extract # 解压到指定目录tar的参数从左到右看:c是创建归档,v显示过程,f指定文件名,z表示用 gzip 压缩。解压时把c换成x,z保留就是解压 gzip 压缩包。-C指定解压目录是最值得养成的习惯,避免压缩包内文件散落在当前目录。
zip在 Linux 和 Windows 之间传文件时更通用,但系统不一定预装,需要安装 zip 包。zip -r递归压缩目录,不加-r只会把空目录名打进去。unzip -d指定解压目录,比直接解压到当前路径安全。tar 和 zip 互相转换时要先解包再重新打包,不能直接改扩展名,这一点新手容易踩坑。
3. 系统管理关键命令:进程、用户、权限与定时任务
3.1 进程管理:ps 和 top 怎么看,kill 怎么选
进程排查最常用的起点是ps aux,全称意义不大,关键是能读懂每一列:
ps aux # USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDPID是进程编号,kill时要靠它;%CPU和%MEM是实时占用率;STAT表示进程状态,R是运行,S是睡眠,Z是僵尸进程。看到大量Z状态进程时,说明父进程没有正确回收子进程,这通常比 CPU 跑满更值得警惕。
top是动态版本的ps,会每隔几秒刷新一次系统负载和进程排序。按P按 CPU 排序,按M按内存排序,按q退出。定位到异常进程后,用kill PID正常结束;如果进程无响应,才考虑kill -9 PID。
kill 1234 kill -9 1234 # 强制终止,可能丢失数据和正在写入的文件我一般会先尝试不带参数的kill,等几秒再观察进程是否消失。kill -9是最后手段,它直接给内核发送强制终止信号,进程没有机会清理临时文件、释放锁,在高频读写的生产环境里容易留下脏数据。这是很多运维新人学到的第一课:能不用 -9 就不用 -9。
3.2 系统资源监控:df、du、free、uname、uptime 的配合
磁盘满、内存不足是服务器最常见的故障源。这组命令建议每次都组合使用:
df -h # 查看磁盘分区使用率,-h 以 GB/MB 显示 du -sh /home # 统计目录总大小,-s 汇总,-h 易读格式 free -h # 查看内存和 swap 使用情况 uptime # 查看系统负载和运行时长 uname -a # 查看内核与系统架构信息df -h输出里要重点看/根分区的 Use% 和 Mounted on。Use%超过 80% 就该排查哪些目录在增长,这时用du -sh /路径逐层定位大目录:先看du -sh /*,再进入占用高的目录继续执行du -sh *,一级一级找到具体文件。
free -h只看第一行 Mem 不够,还要看第二行 Swap。Swap 使用率逐渐上涨,说明物理内存压力已经持续一段时间。uptime输出中的 load average 三个数字,分别代表 1 分钟、5 分钟、15 分钟平均负载,如果 1 分钟值远高于 15 分钟值,说明系统刚经历过峰值,不一定是当前故障。uname -a在跨发行版排查时很有用,能快速确认内核版本和 CPU 架构,避免下载了不兼容的软件包。
3.3 用户与用户组管理:useradd 到 passwd 的最小流程
创建用户、设置密码、加入用户组,这三个动作在管理服务器账号时是连在一起的:
useradd -m -s /bin/bash newuser # -m 创建家目录 /home/newuser # -s 指定登录 shell passwd newuser groupadd devgroup usermod -aG devgroup newuseruseradd不加-m时不会自动创建家目录,用户登录后可能落到根目录或无法正常写文件。-s /bin/bash指定登录 shell,如果漏掉,某些系统会默认使用/bin/sh,交互体验和脚本兼容性都会受影响。
passwd需要交互输入两次密码,这个操作必须在终端里手动完成,脚本里要设置密码一般用chpasswd。groupadd创建用户组后,还要用usermod -aG把用户追加进组,-a表示 append,-G指定附加组。很多人在这一步直接写usermod -G devgroup newuser,会覆盖用户原来所属的组,可能把用户从 sudo 组里挤出去。
删除用户时,userdel username只删账号,家目录保留;加-r才会连同家目录和邮件池一起删除,生产环境务必确认后再执行。
3.4 权限修改:chmod 和 chown 的算术与陷阱
权限是 Linux 系统里最容易被“试出来”又最说不清的部分。chmod可以用数字表示权限:
chmod 755 script.sh # 7 = rwx,5 = r-x # 得到 rwxr-xr-x chmod +x script.sh # 给所有身份增加执行权限 chown user:group file.txt # 同时修改属主和属组数字权限的规则是:r=4,w=2,x=1,三者相加。755表示属主可读写执行、属组和其他人可读可执行,这是脚本和程序最常见的权限组合。chmod +x是符号模式的简洁写法,只加执行位,不动其他权限位。对目录执行chmod -R时要极为谨慎,递归修改很容易把不该开放的文件也放开。
chown user:group中间的分隔符是冒号,不是点。只改属主可以写chown user file.txt,只改属组写chown :group file.txt。如果把冒号写成点,命令会把“user:group”整个当成用户名,直接报错。这条命令在挂载数据盘、迁移目录后几乎是必经操作,搞错属主会导致服务无法写入数据。
3.5 定时任务与关机重启:crontab 的时间表达
定时任务是运维自动化的重要入口,crontab的基本用法很简单,但时间表达式需要单独记忆:
crontab -l # 列出当前用户的定时任务 crontab -e # 编辑定时任务在编辑器里添加一行:
0 3 * * * /usr/local/bin/backup.sh # 分 时 日 月 周 # 每天凌晨 3 点执行备份脚本五个字段依次是分、时、日、月、周。0 3 * * *表示每天 3 点整,*是通配所有值。常见的还有*/5 * * * *表示每 5 分钟执行一次。周字段的 0 和 7 都表示周日。定时任务里命令必须写绝对路径,因为 cron 执行环境不会自动加载你的PATH,常见坑就是脚本里用到python、rsync却找不到命令,最后日志里全是command not found。
shutdown now立即关机,shutdown -r now立即重启。生产服务器重启前最好先跑一遍df -h、crontab -l,确认没有正在跑的任务和低磁盘空间问题。reboot和shutdown -r作用类似,但shutdown可以加延迟时间,比如shutdown -r +5给其他用户留出保存时间。
4. 网络管理命令实战:连通性、远程操作与防火墙
4.1 网络接口查看:ifconfig 和 ip 命令的新旧选择
网络排查第一步永远是看当前机器有哪些网卡、各自 IP 是多少:
ifconfig ip addr showifconfig是经典的网络接口查看命令,但很多新发行版默认不再安装 net-tools 包,敲下去会提示command not found。ip addr show属于 iproute2 套件,现代系统基本都自带,输出里能直接看到每个接口的inetIP 地址、掩码、状态 UP 或 DOWN。
如果发现网卡没有 IP,先看接口名,再确认是否开启了 DHCP。临时配置 IP 用ip addr add,但重启后会丢失,需要写入网络配置文件。这个新旧选择,其实是 Linux 系统运维里典型的兼容性问题:老教程里的命令不一定在新系统上可用,优先用ip系命令更稳。
4.2 连通性检查:ping 和 traceroute 的结果怎么看
ping -c 4 example.com # -c 指定发包次数,避免无限 ping traceroute example.comping是连通性测试的起点。-c限定次数,否则会一直运行到手动中断。看到time=xx ms表示往返时延;出现Destination Host Unreachable表示本机路由不通,Request timeout则可能是目标防火墙禁 ping 或链路丢包。注意:对方禁 ping 不代表服务不可用,有些业务主机的 ICMP 是关闭的。
traceroute会逐跳打印数据包经过的网关节点,用来判断故障点在哪一跳。输出里出现连续* * *,通常是那一跳的节点不响应探测包,也可能是链路被防火墙丢弃。做链路质量判断时,不要只看单个节点,要综合整条路径的时延变化。
4.3 端口监听排查:netstat 换到 ss
服务器端口监听状态,是判断服务有没有起来的直接证据。老运维习惯用netstat,新系统更推荐ss:
netstat -tuln ss -tuln-t显示 TCP 端口,-u显示 UDP 端口,-l只显示监听中的端口,-n不反解域名直接显示 IP。两相对比,ss输出更快,不会因为域名反解卡住。看到0.0.0.0:22表示 sshd 正在监听所有网卡的 22 端口;看到127.0.0.1:3306表示数据库只允许本机访问,外部连不上是正常现象。
排查端口冲突时,比如启动服务报“端口被占用”,先用ss -tuln | grep 端口号找到占用端口的 PID,再用ps aux | grep PID看具体进程。这比盲目重启服务高效得多。
4.4 远程登录与文件传输:ssh、scp 的实际参数
远程管理绕不开ssh,文件拷贝则用scp:
ssh -p 2222 user@hostname # -p 指定端口,默认 22 scp file user@hostname:/remote/path # 本地上传到远程 scp user@hostname:/remote/file /local/path # 远程下载到本地 scp -r data_dir user@hostname:/remote/path # -r 递归复制目录ssh登录后如需在远程执行单条命令,可以写成ssh user@hostname "df -h",这样不需要进入交互式 shell 就能拿到远程状态,很适合写巡检脚本。scp基于 ssh 加密传输,第一次连接会提示确认主机指纹,检查指纹比对后再输入密码。
如果端口不是默认 22,scp要用大写-P而不是小写-p,这是和ssh参数最容易弄混的地方:ssh 的小写-p表示端口,scp 的小写-p却表示保留时间戳,大写-P才是指定端口。我见过不少人在 scp 命令里写-p 2222,得到的结果要么是密码提示错乱,要么是直接连接拒绝。
4.5 下载与 DNS 查询:wget、curl、nslookup、dig 的定位
wget和curl都能下载文件,但适用场景有差别:
wget http://example.com/file.tar.gz curl -O http://example.com/file.tar.gz # -O 按远程文件名保存 curl -I http://example.com # -I 只显示响应头,用来检查服务可用性wget适合命令行直接下载,支持断点续传和递归抓取;curl更偏组合工具,可以通过-X、-H、-d构造 HTTP 请求,调试 REST 接口时比 wget 灵活。curl -I可以快速判断网站是否响应,返回200 OK表示正常,403、502等状态码直接指向问题方向。
DNS 查询方面,nslookup适合快速查看解析结果,dig输出更详细,能看到查询耗时和 TTL:
nslookup example.com dig example.com # dig +short 只输出解析后的 IP排查“域名打不开但 IP 能通”的问题时,先用dig确认解析 IP,再用ping或curl --resolve验证。注意这里不要混淆:改本机 DNS 后要生效,缓存刷新不是立刻完成,所以查询结果可能短暂不一致。
4.6 防火墙配置:iptables 的查看与最小放行
网络层面的最后一道闸门是防火墙。iptables命令本身能完成查看和修改规则:
iptables -L -n -v # 列出所有规则,-n 显示 IP,-v 显示匹配计数 iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 放行 22 端口 iptables -A INPUT -p tcp --dport 80 -j DROP # 拒绝 80 端口-A INPUT追加规则到输入链,-p tcp指定协议,--dport指定目标端口,-j ACCEPT表示接受,-j DROP表示丢包。修改规则时要注意顺序:iptables按链内规则顺序匹配,前面的规则先生效。如果先写了 DROP 规则,后面的 ACCEPT 可能永远匹配不到。
最稳妥的习惯是在改防火墙前先备份当前规则,iptables-save > /tmp/iptables.rules,改出问题时用iptables-restore < /tmp/iptables.rules回滚。远程调试服务器时,尤其不要在未断开连接的 session 里直接禁止 ssh 端口,否则唯一的管理通道可能被自己堵死。
5. 软件包管理注意:apt、yum、dnf、pacman 的差异与排查
5.1 四大发行版包管理命令对照
不同 Linux 发行版使用不同包管理器,命令差异不小。最容易出错的是把一套发行版的命令套用到另一套上。先看对照表:
| 操作 | Debian/Ubuntu | CentOS/RHEL | Fedora | Arch Linux |
|---|---|---|---|---|
| 更新软件源 | apt update | yum update | dnf update | pacman -Sy |
| 升级所有包 | apt upgrade | yum update | dnf update | pacman -Syu |
| 安装包 | apt install | yum install | dnf install | pacman -S |
| 卸载包 | apt remove | yum remove | dnf remove | pacman -R |
| 搜索包 | apt search | yum search | dnf search | pacman -Ss |
CentOS 7 及之前用yum,CentOS 8 之后转向dnf,但很多习惯性输入yum的操作仍然兼容。Fedora 直接使用dnf。Arch 的pacman语法与 Debian 系差异最大,更新系统是pacman -Syu,卸载包是pacman -R,不要混用。
一个包管理器实例通常在同一时刻只允许一个进程运行,这也是后面排查锁文件问题的前提。先了解发行版用哪个管理器,再执行安装操作:
cat /etc/os-release # 查看发行版 ID 和版本号 command -v apt yum dnf pacman # 查看当前系统可用的包管理器5.2 常见问题排查:四条踩坑记录
下面四条是我实际维护服务器时反复遇到的问题,按“现象、原因、解决”逐个拆开讲。
现象一:执行apt install报错Could not get lock /var/lib/dpkg/lock,无法继续安装任何软件。原因是有另一个 apt 进程没有结束,或者上次安装被异常中断后锁文件残留。解决:先用ps aux | grep apt找到残留进程,确认不是系统正在自动更新后,再判断是否手动清理。等待进程结束后重新执行安装即可;只有当确认没有 apt 进程在运行、锁文件确实残留时,才考虑手动删除对应锁文件,操作前务必确认进程已退出。
现象二:yum install提示Another app is currently holding the yum lock。原因是后台的 PackageKit 或另一个 yum 进程占用了锁。解决:先等待一段时间重试,如果长时间不释放,可查看占用锁的进程 PID 并评估是否结束后重试。优先用官方推荐的 systemctl 停止 PackageKit 服务,而不是直接杀进程。
现象三:执行ifconfig提示command not found,但网络明明是通的。原因是最小化安装的发行版没有安装 net-tools 包。解决:改用ip addr show,或者用对应包管理器安装 net-tools;我一般建议直接用ip命令,因为 iproute2 已经是系统自带组件,不必额外安装。
现象四:添加软件源后apt update报 404 错误。原因是源地址里的发行版代号和当前系统版本不匹配,比如在 Debian 12 上用了 Debian 11 的源路径。解决:用cat /etc/os-release确认代号,修改源列表中的代号字段,再重新执行apt update。这条在跨发行版迁移、换软件源镜像时几乎都会遇到。
5.3 跨发行版迁移的三个注意点
迁移环境时,最容易忽略的是包管理器之间的工具链差异。第一,不能用 Debian 的apt去管理 CentOS 系统,也不要把yum install的习惯直接带到 Arch。第二,默认 shell 和工具链不同会导致脚本行为差异,比如 debian 系默认用 bash,而部分精简系统默认 dash,脚本里声明#!/bin/bash更稳妥。
第三,某些包名在各大发行版中完全不同,比如编译工具包在 Debian 系叫build-essential,在 Red Hat 系叫Development Tools组包,不能直接用同样的包名安装。遇到包找不到时,先去官方源搜索正确名称,不要硬装。迁移后先执行一遍uname -a、cat /etc/os-release、command -v三件套,能省下后面不少排查时间。
6. 进阶技巧:用 alias、history 和组合命令搭建自己的速查体系
6.1 用 alias 把高频命令变成快捷键
alias是这份资源里最实用的小技巧之一。把那些每次都要完整输入的固定组合压缩成短别名:
alias ll='ls -la' alias untar='tar -xzvf' alias ports='ss -tuln'临时生效可以直接敲在命令行;想永久生效,把 alias 写进~/.bashrc或~/.zshrc,然后执行source ~/.bashrc。注意别名不能覆盖管道逻辑,比如ps aux | grep nginx这种组合更适合做成函数,但别强求用 alias 完成所有事。
6.2 让 history 变成后悔药
命令行记不住长参数时,history是最直接的后盾:
history # 显示最近执行过的命令列表 !100 # 重新执行编号为 100 的历史命令history默认记录当前 shell 会话内的命令。想要找回上一输错的命令,可以用!!快速重复上一条命令。配合grep使用,比如history | grep ssh能筛出之前执行过的所有 ssh 相关命令。这个功能在排查问题时特别好用:想不起来当初用的什么参数,翻一下历史记录比翻文档快得多。
6.3 组合命令与重定向的落地用法
把多个命令串起来,效率会比逐条执行高很多。常见做法是用管道|把前一个命令的输出交给后一个命令,例如:
find . -name "*.tmp" -exec rm -i {} \; # 找到当前目录下所有 .tmp 文件并逐个确认删除-exec后面是要执行的命令,{}代表找到的每个文件,结尾的;表示命令结束,需要转义为\;。这里用rm -i是为了让每个文件删除前都询问确认,避免误删除。如果你信任搜索结果,可以去掉-i,但第一次操作时建议保留。
从那以后,我每次接手一台新服务器,都会强制先跑一遍cat /etc/os-release、ss -tuln、crontab -l,确认系统版本、端口状态和定时任务,再根据这份命令汇总按板块往下排查。这套流程不到五分钟,但能绕开很多后来才知道的返工。希望帮到你。
本文还有配套的精品资源,点击获取