简介这是一份 Linux 系统常用命令与实用技巧的汇总文档定位为命令行入门与运维速查手册面向刚接触 Linux 的初学者、希望系统梳理命令体系的开发/运维人员以及需要频繁维护服务器的技术人员。文档按文件与目录、系统管理、网络管理、软件包管理四大板块组织覆盖 ls/cp/rm/tar、ps/top/kill、用户与定时任务、ssh/scp/wget/curl/iptables、apt/yum/dnf/pacman 等主流包管理器并针对 Debian/Ubuntu 与 RedHat/Fedora/Arch 等发行版的命令差异给出提示每条命令都配有简明示例与常用参数便于边看边练也适合作为日常快速查询的手册。压缩包共 1 个 docx 文件大小 15KB内容以可编辑的文本命令清单为主轻量便携可存入个人知识库随时查阅。这类速查内容尤其适合在服务器环境、自动化脚本编写和安全运维场景下对照使用能显著缩短搜索命令的时间。目前已有 129 人学习下载对快速建立 Linux 操作框架、避免踩坑和查漏补缺具有实用参考价值。1. 为什么这份 Linux 系统常用命令汇总比命令手册更值得看这是一份以 Linux 系统常用命令汇总为核心的命令行速查资源。我在日常系统运维中反复用到这些命令也见过不少同事把 rm -rf 当普通删除用结果清掉了整个目录。这套汇总的价值不在命令数量而在每个命令的参数边界和适用场景。做系统运维时真正拉开效率差距的不是你会多少条 ls 变体而是你知不知道 rm -rf 没有后悔药、kill -9 要不要慎用、apt 和 yum 的源差异。适合刚接触 shell 的初学者也适合需要快速查参数的老手。接下来我按实际使用频率拆开讲每条都能直接复制到终端里试。2. 文件与目录操作从 ls 到 tar 的参数边界与高频场景文件与目录操作是每天敲得最多的命令。这一章把查看、创建、删除、查找、打包分成三个小节命令都按实际运维场景排好顺序。新手先跟着敲一遍熟手可以直接跳到 2.3 看查找和打包的组合用法。2.1 查看类命令ls/cd/pwd/cat/head/tail 的默认行为进入服务器第一件事就是看目录里有什么。ls 是最基础的命令但很多人只记住了 ls不知道 -l 和 -a 组合起来才是日常主力。下面这组是我每次登录新机器都会先试一遍的组合ls -l # 详细列表包含权限、属主、大小、修改时间 ls -a # 显示隐藏文件以 . 开头的文件也会列出来 ls -lh # 加上 -h 后大小会显示成 K/M/G 这种易读格式-l 输出的第一列是权限位例如 drwxr-xr-xd 表示目录后面三组 rwx 分别是所有者、所属组和其他人的读、写、执行权限。ls -a 会把 . 和 .. 也显示出来前者代表当前目录后者代表父目录。写脚本时 -lh 更适合给人类看但如果要程序解析建议不加 -h因为大小列多了字母会让解析逻辑变复杂。切换目录是 cd 和 pwd 的活。cd 不加参数直接回到当前用户的家目录这个行为很多人不知道以为是报错了。pwd 用来显示当前工作目录在深层次目录结构里尤其有用能避免脚本里相对路径写错位置。cd /path/to/directory # 绝对路径切换 cd .. # 返回上一级目录 cd ~ # 返回当前用户家目录 pwd # 打印当前工作目录这里容易踩的一个小坑是符号链接。如果当前目录是通过 ln -s 创建的软链接进入的pwd 默认显示的是逻辑路径也就是你输入的那个路径而不是实际物理路径。想看到真实路径需要加 -P写成 pwd -P。我在写部署脚本时经常因为忽略这一点导致备份目录找到了错误的位置。查看文件内容时cat 适合短文件less 适合长文件head 和 tail 适合只看开头和结尾。这条 tail -f 是系统运维里排障最常用的它会持续输出文件末尾新增的内容比如正在写入的日志。cat filename # 一次输出全部内容短文件用 less filename # 分页查看支持方向键翻页按 / 搜索 head -n 5 filename # 只看前5行 tail -n 20 filename # 只看最后20行 tail -f /var/log/syslog # 实时跟踪日志CtrlC 退出less 和 more 的区别是more 翻到文件底部会自动退出less 不会所以长日志排查我基本只用 less。head 和 tail 默认显示 10 行-n 可以指定行数。tail -f 在跟踪日志时不要开多个否则日志滚动快的时候终端会被刷得没法看。touch 命令虽然列在创建文件里头但更实际的作用是更新时间戳。对一个已存在的文件执行 touch文件内容不变只有 mtime 改变常用来做脚本触发标记。2.2 创建、复制、移动与删除rm -rf 的悔药与安全习惯mkdir、cp、mv、rm 这四个命令构成了日常文件操作的主干。mkdir -p 可以一次性创建多级目录很多新手只会 mkdir dirname遇到 parent 目录不存在时只能一层层建。cp 和 mv 都好理解真正需要敬畏的是 rm。mkdir -p parent/child # 一次性创建多级目录 cp source destination # 复制文件 cp -r sourcedir destdir # 递归复制目录 mv source destination # 移动文件目标存在会覆盖 mv oldname newname # 重命名 rm filename # 删除文件 rm -r dirname # 递归删除目录 rm -f filename # 强制删除不提示rm -f 加上 -r 之后就是大家常说的 rm -rf。这个组合在系统运维里非常危险因为 Linux 没有回收站一旦删了普通文件系统根本找不回来。我见过有人写脚本时把变量拼在路径后面变量为空时就成了 rm -rf /整个系统直接被清空。从那以后我给自己定了条铁律凡是删除操作先 ls 或者 find 确认目标对象再执行绝对不在脚本里对未经检查的变量直接 rm -rf。cp -r 递归复制目录时如果目标目录已存在源目录会被放到目标目录里面一层而不是覆盖。这个行为很容易让新手误以为复制失败。mv 在同文件系统内是纯改名跨文件系统时会先复制再删除所以移动大文件时明显感觉慢这是正常现象。为了让终端交互环境更安全我会在 ~/.bashrc 里给 rm、cp、mv 加上 -i 参数让它们每次执行都询问确认。但要注意这个别名只对交互式 shell 生效脚本和 cron 任务不会加载 .bashrc所以在脚本里该写判断还是得写。2.3 查找与打包find/grep/tar/zip 的组合用法查找文件用 find搜索文件内容用 grep。这两个命令单独用已经很强组合起来能解决大多数定位问题。find 的 -name 支持通配符注意要加引号防止 shell 展开。find /var/log -name *.log -type f # 在 /var/log 下找所有 .log 文件 find . -mtime -7 # 最近7天内修改过的文件 find . -size 100M # 大于100MB的文件-mtime -7 表示修改时间在7天以内7 表示7天以上没动过。清理过期备份时用 find /backup -name *.tar.gz -mtime 30 -delete 可以按时间批量删除但这个命令要格外小心建议先不带 -delete 跑一遍看输出确认无误再删。grep 的 -r 递归搜索目录-n 显示行号这两个参数在排错时最常用。我经常用它到应用配置目录里找某个关键项被改成了什么值。grep -rn Error /var/log/nginx/ # 递归搜索 Error 关键字 grep --color -n pattern file # 带颜色和行号输出 grep -v ^# /etc/nginx/nginx.conf # 过滤掉注释行grep -v 是反向匹配常用来过滤空行和注释让配置文件的可读内容直接显示出来。还有一种经典组合是 ps aux | grep nginx但这条命令会把 grep 自身也匹配出来所以后面经常要接 grep -v grep或者直接用 pgrep nginx 更干净。打包压缩用 tar 和 zip两者场景略有区别。tar 更适合 Linux 内部传文件和做备份zip 更适合和 Windows 交换文件。tar 的参数看起来很复杂其实记住三个组合就够用。tar -czvf archive.tar.gz files/ # 打包并用 gzip 压缩 tar -xzvf archive.tar.gz -C /tmp # 解压到 /tmp 目录 zip -r archive.zip folder/ # 递归压缩目录 unzip -l archive.zip # 列出 zip 内容但不解压tar 的参数里c 是创建归档x 是解压z 是经过 gzip 压缩v 是显示过程f 是指定归档文件名。解压时 -C 指定目标目录比先 cd 再解压更安全也少一步操作。zip 用 -r 递归压缩整个目录unzip -l 可以用来提前确认压缩包里有什么避免解压出一堆文件到当前目录污染环境。3. 系统管理进程、磁盘、用户与定时任务系统管理这一章解决的是「这台机器现在状态怎么样」的问题。我会先讲进程和负载再讲磁盘和权限最后讲用户和定时任务。这三块覆盖了系统运维里 80% 的日常检查工作。3.1 进程状态与系统负载ps/top/kill/free/uptimeps aux 是查看所有进程的标准写法。aux 里面的 a 是显示所有用户进程u 是显示用户和 CPU/内存占用x 是显示没有终端控制的进程。输出里 PID 是进程号后面 kill 就靠它。ps aux # 显示所有用户的所有进程 ps aux | grep nginx # 过滤出 nginx 相关进程 ps -ef # 另一种格式查看父子进程关系ps aux 输出里 STAT 列如果显示 Z代表僵尸进程。僵尸进程已经结束但没被父进程回收本身不占 CPU 和内存但积累多了会占满进程表。常见原因是父进程没有正确处理子进程退出定位时找到 PPID也就是父进程的 PID再看父进程是谁在运行。top 是动态版的 ps实时刷新 CPU 和内存占用。交互界面里按 P 按 CPU 排序按 M 按内存排序按 q 退出。top -b -n 1 # 批处理模式输出一次适合写脚本采集 top -u www-data # 只看指定用户的进程-b 是批量模式不会刷新界面-n 1 表示只输出一次。采集服务器负载时我经常用 top -bn1 重定向到文件再配合 grep 提取关键行。注意 top 的 CPU 使用率是相对单核的多核机器上进程 cpu 显示 200% 意味着占了两核这是正常的。kill 命令负责结束进程。默认不带信号编号时发送的是 SIGTERM也就是 15 号信号进程可以捕获并优雅退出。kill -9 发送 SIGKILL强制终止进程没有任何处理机会。kill 1234 # 默认发送 SIGTERM请求进程自己退出 kill -9 1234 # SIGKILL 强制终止无法被捕获我一般先 kill 不带 -9等几秒看进程是否还在如果还在再考虑 -9。数据库和文件服务这类有落盘操作的进程直接 -9 很容易留下脏数据。kill 之前先用 ps aux 确认 PID 对应的确实是你要杀的那个进程而不是同名其他进程。free 和 uptime 是看机器资源最快捷的两个命令。free -h 里的 available 列才是真正可用的内存因为 buff/cache 在内存压力大的时候是可以回收的只看 free 列会误判内存不足。free -h # 以人类可读格式显示内存 uptime # 显示运行时间和负载uptime 最后一行 load average 后面的三个数分别代表 1 分钟、5 分钟、15 分钟的平均负载。这个负载不是 CPU 使用率而是处于运行和等待状态的进程数。单核机器负载超过 1 说明有排队四核机器超过 4 才算有压力。光看 1 分钟值容易误判要结合三个数看趋势。3.2 磁盘占用与用户权限df/du/chmod/chown磁盘满了是运维最常见的故障之一。df 看文件系统整体使用率du 看具体目录占用大小。处理日志增长问题时这两个命令要配合使用。df -h # 易读格式显示每个挂载点 du -sh /var/log # 统计 /var/log 目录总大小 du -sh * | sort -h # 当前目录下各子目录大小排序df -h 的输出里重点关注 Mounted on 对应的 Use% 列超过 85% 就要开始找大文件了。du -sh 的 -s 是汇总整个目录-h 是易读格式。想快速找到哪个子目录最占空间用 du -sh * 把当前目录下每一项的大小列出来再用 sort -h 按人类可读的数字排序最大的就在最后一行。处理权限问题时chmod 和 chown 是主角。chmod 用数字表示法最直观r4w2x1三个数字分别代表所有者、组、其他人。755 的意思是所有者可读写执行组和其他人可读可执行。chmod 755 script.sh # 设置所有者 rwx组和他人 rx chmod x script.sh # 只添加执行权限 chown -R www-data:www-data /var/www # 递归改属主和属组chown 的 -R 参数是递归把目录下所有文件和子目录的所有者都改掉。注意不要对系统目录随意 chown比如 /usr 或 /etc改了之后很多服务会因为权限不对起不来。调整网站目录权限时我习惯先看现有属主再决定改成什么而不是直接套用网上搜到的 777。3.3 用户与定时任务useradd/passwd/crontab 的实操细节创建用户时最容易踩的坑是 useradd 不自动创建家目录。很多发行版为了让系统用户更干净默认不建家目录导致用户登录后直接落在根目录或报错。useradd -m -s /bin/bash devops # 创建用户带家目录和 bash shell passwd devops # 设置或修改密码 usermod -aG sudo devops # 将用户追加到 sudo 组 userdel -r devops # 删除用户并移除家目录-m 是创建家目录-s 指定登录 shell。usermod -aG 是追加到组-aG 里的 a 是 append不加 a 会把用户从其他组移除。删除用户时 -r 参数会一并删除家目录和邮件池如果不加会留下残留文件。passwd 之后需要交互输入密码脚本里自动化可以配合 chpasswd。定时任务是系统运维里非常实用的功能。crontab -e 编辑当前用户的定时任务-l 列出-r 删除全部。注意 -r 会无条件清空当前用户所有定时任务误操作没有确认提示。crontab -e # 编辑当前用户定时任务 crontab -l # 列出当前用户定时任务 crontab -r # 删除所有定时任务慎用cron 表达式格式是「分 时 日 月 周」加命令五个字段都是星号代表每分钟。写备份任务时我一般用0 2 * * * /usr/local/bin/backup.sh /var/log/backup.log 21这表示每天凌晨 2 点执行 backup.sh标准输出和错误都追加到 backup.log。cron 环境变量非常少脚本里的命令最好写绝对路径脚本本身要带 #!/bin/bash 并且有执行权限。定时任务不执行时先看 /var/log/syslog 或 /var/log/cron用 tail -f 实时观察有没有触发记录。4. 网络管理连通性测试、远程操作与端口排查网络问题的排查思路通常是从连通性开始逐层往下到端口、防火墙。服务器上常用的命令不算多但每个命令都要知道它能解决哪一层的问题。4.1 网络接口与连通性测试ip/ping/traceroute/dig老系统里 ifconfig 很常见但新发行版已经默认不带这个命令了。更通用的是 ip 命令系列ip addr show 查看接口和 IPip link set 控制接口启停。ip addr show # 查看所有接口 IP 信息 ip link set eth0 up # 启用 eth0 接口 ping -c 4 example.com # 发送4个 ICMP 包后停止ping 用 -c 限制包数量否则会一直发下去直到你按 CtrlC。ping 不通时不要急着说网断了先 ping 127.0.0.1 验证本机协议栈再 ping 网关地址判断是跨网段问题还是出口问题。DNS 解析用 nslookup 和 dig。dig 输出的信息更完整排查 DNS 延迟时能看到具体耗时。nslookup example.com dig example.com shortdig 的 short 参数只输出解析结果比如 IP 地址适合在脚本里拿返回值。traceroute 显示数据包到目标主机的每一跳路径-n 参数不解析主机名速度更快。ping 通但 ssh 慢的时候怀疑是路由路径中某一段延迟高就用 traceroute -n 看每一跳的延迟。4.2 远程登录与文件传输ssh/scp/wget/curlssh 是远程运维的入口。默认端口 22可以用 -p 指定其他端口。生产环境建议用密钥登录把密码登录关掉。ssh user192.168.1.10 # 默认22端口登录 ssh -p 2222 userhostname # 指定端口登录 ssh-keygen -t ed25519 # 生成密钥对 ssh-copy-id userhostname # 把公钥安装到目标服务器ssh-keygen -t ed25519 生成的是当前比较推荐的密钥类型比传统的 rsa 更短也更快。生成后私钥留在本地公钥通过 ssh-copy-id 放到远端 ~/.ssh/authorized_keys 里。之后登录就不需要输密码了也方便 scp 做自动化传输。scp 基于 ssh本地和远端之间有四种常见姿势scp file userhostname:/tmp/ # 本地上传到远端 scp userhostname:/tmp/file ./ # 远端下载到本地 scp -r dir userhostname:/tmp/ # 递归上传目录 scp -P 2222 file userhostname:/tmp/ # 指定端口注意大写 Pscp 的端口参数是 -P 大写而 ssh 是小写 -p这个大小写差异非常容易翻车。scp 不支持断点续传大文件传输中断了只能重来所以超大文件我一般用 rsync。下载外部资源常用 wget 和 curl。两者都能下载但 curl 更适合接口调试wget 更适合简单抓取。wget http://example.com/file.tar.gz # 下载文件 curl -O http://example.com/file.tar.gz # -O 保存为远端文件名 curl -I http://example.com # 只查看响应头curl -I 发送 HEAD 请求返回状态码和响应头但不下载正文用来探测一个 URL 是否可访问很高效。curl 模拟 POST 接口测试用 -X POST -d 传数据调试 webhook 时我经常用它验证回调。4.3 端口、连接与防火墙netstat/ss/iptables端口监听状态是排障的重点。netstat 是老一辈工具ss 是它的现代化替代执行速度更快语法基本兼容。我优先用 ss。netstat -tuln # 显示监听端口ttcp uudp l监听 n数字端口 ss -tuln # 同样的作用速度更快 ss -s # 显示连接统计服务起不来时常见原因是端口被占用。ss -tuln | grep 端口号如果看到 LISTEN 行说明有其他进程占了这个端口。然后配合 ps aux 找到 PID再确认是什么程序。从网络安全角度看定期检查 ss -tuln 确认没有意外暴露的端口特别重要比如数据库端口绑在 0.0.0.0 上等于把数据库暴露给了整个网段。iptables 控制防火墙规则。查看规则用 iptables -L -n -v-n 不解析主机名-v 显示包计数。追加规则用 -A。iptables -L -n -v # 列出规则带流量计数 iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 放行22端口 iptables -A INPUT -p tcp --dport 23 -j DROP # 丢弃23端口iptables 规则即时生效但重启后丢失。要把规则持久化需要执行 iptables-save 保存到文件并在开机时自动加载具体方式因发行版而异。配置防火墙时注意规则顺序iptables 按从上到下匹配第一条命中就不再看后续规则所以放行规则要放在拒绝规则之前。5. 软件包管理四大管理器对照与常见问题排查软件包管理器是发行版差异最大的地方。命令记错不是最大的问题真正的坑在于源和依赖。这一章先给对照表再写三条我实际踩过的排查记录。5.1 四大包管理器对照与换源原则不同发行版用不同包管理器底层格式不同不能混用。Debian/Ubuntu 系列用 aptCentOS/RHEL 用 yumFedora 用 dnfArch 用 pacman。发行版管理器刷新索引安装卸载Debian/Ubuntuaptapt updateapt install 包名apt remove 包名CentOS/RHELyumyum updateyum install 包名yum remove 包名Fedoradnfdnf updatednf install 包名dnf remove 包名Archpacmanpacman -Syupacman -S 包名pacman -R 包名apt 的 update 只是刷新软件列表upgrade 才是真正升级。很多人执行 apt update 后以为升级完成了然后发现软件版本没变。yum 和 dnf 的 update 行为稍有不同但总体思路都是先更新索引再安装。pacman 的 -Syu 是同步数据库、刷新和升级系统一次完成。换源是安装包时最容易出问题的操作。各发行版源配置路径不同Debian 系是 /etc/apt/sources.listCentOS 是 /etc/yum.repos.d/ 下的 .repo 文件。换源之后必须执行对应的刷新命令否则还是会命中旧缓存。尽量只用发行版官方源或可信镜像源不要为了装一个包把第三方源整个引入依赖冲突和安全风险都很大。5.2 常见问题排查三条血泪记录现象1apt install 报错 Could not get lock /var/lib/dpkg/lock原因另一个 apt 进程还在运行或者上次 apt 操作被中断留下锁文件。这种情况常见于用终端跑 apt install 时又开了第二个终端执行同样命令。解决先 ps aux | grep apt 看有没有 apt 进程在跑有的话等它结束。确认没有进程后把 /var/lib/dpkg/lock 和 /var/lib/apt/lists/lock 删掉再执行 dpkg --configure -a 修复可能中断的安装状态。不要一看到锁就删先确认没有进程在运行否则会破坏正在进行的安装。现象2CentOS 上 yum install 报 No package XXX available原因包名写错了或者默认仓库里没有这个包。很多第三方软件只放在 epel 源里CentOS 默认没启用。解决先用 yum search 包名 搜索确认准确包名再用 yum repolist 查看已启用的仓库。如果确实需要 epel先安装 epel-release 再安装目标包。注意不要直接从互联网下载 rpm 文件强装碰到依赖缺的时候会非常难受。现象3pacman -Syu 之后某个服务起不来原因滚动更新的激进特性导致依赖被升级到不兼容版本常见于依赖 lib 库更新的场景。解决更新前先看官网公告和用户论坛确认没有已知问题再执行更新。已经发生的情况下用 pacman -U 本地回退到旧版本包或者直接恢复虚拟机快照。我在用这类发行版跑实验环境时会提前做快照更新完先验证关键服务再切回生产。5.3 其他高频命令history/alias/ln/which 的组合用法echo、date、history 这几个命令单独看很简单但组合起来能提高不少效率。echo 不只是打印文本在脚本里用来输出状态标记。date 配合格式化字符可以生成日志文件名。echo Hello, World! # 输出文本 date %Y-%m-%d_%H-%M-%S # 输出 2024-05-20_14-30-00 格式时间 history 20 # 显示最近20条命令 history | grep tar # 从历史里找回 tar 相关命令date %Y-%m-%d 里的 %Y 代表四位年份%m 是月%d 是日%H 是小时%M 是分钟%S 是秒。这些格式化字符写日志脚本时特别有用比如备份文件名带日期。alias 定义别名只对当前 shell 会话生效。想让每个新终端都有效必须写入 shell 的 rc 文件。我用得最多的是把 ll 等价于 ls -la把 rm 设为 rm -i。alias llls -la # 当前会话生效 echo alias llls -la ~/.bashrc # 追加到 bash 配置 source ~/.bashrc # 重新加载配置即时生效history 默认只保存当前会话的命令记录新开终端后看不到上次的。想同步保存可以执行 history -a但更好的习惯是定期把 history 输出重定向到自己的笔记文件里方便复盘。which 用来查找命令的绝对路径比如 which nginx 返回 /usr/sbin/nginx。man 查看手册q 退出。which nginx # 找到命令路径 man tar # 查看 tar 完整手册which 只查 PATH 里第一个匹配项。如果系统装了多个版本比如 /usr/bin/python 和 /usr/local/bin/pythonwhich python 只显示先命中的那个。用 type -a python 可以看到所有路径。ln 创建软链接在运维里很常用特别是部署版本切换。ln -s /data/app-v2.3 /data/app # 软链接切换版本时只需改指向软链接类似于快捷方式源目录移动后软链接就会失效。我在部署新版本时会把当前版本目录放到固定路径用 ln -s 指向 new 版本目录回滚时只需要删掉链接重新指一下比复制文件快得多。6. 把命令变成习惯先验证再执行6.1 用 history 和 alias 搭一个命令安全护栏我在自己的终端环境里做了两件事一是给危险命令加交互确认二是把常用命令缩写固定下来。这样下次执行 rm 删除时会多一道确认避免手指比脑子快。alias rmrm -i alias cpcp -i alias mvmv -i那之后我再也没有因为手误删掉过重要目录。但要注意alias 对脚本和 cron 不生效脚本里依然要用完整命令并做好路径检查。6.2 在虚拟机里做一次破坏性实验建议新手用虚拟机做一次刻意破坏先打个快照然后故意执行 rm -rf 某个测试目录观察文件消失后的现象再试 chmod 000 一个文件看看程序报什么错最后用快照恢复感受后悔药的存在。这个练习比背十遍命令更有效。验证自己有没有真正掌握时可以给自己出几道题找出当前目录下超过 200M 的日志、统计服务器上有多少条 ESTABLISHED 连接、写一条每天凌晨两点压缩备份的 cron。每道题都强制走一遍「先看再动」的流程。从那以后我每次执行删除或覆盖操作前都会先 ls 或者 find 确认目标再确认命令没有拼接错误最后才按回车。这个习惯救了我好多次。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?