60条Linux常用命令实战清单:从文件操作到日志排查一次讲透
发布时间:2026/10/17 3:12:45 锦皓数字建站

随便翻开任何一本Linux入门书初学者第一个想背的东西就是命令清单。但真正干过几年运维、做过服务器部署、被生产环境教训过的人都会告诉你同一句话命令不在多在于你能不能用得准、用得稳。这篇我整理了平时使用频率最高的60条Linux常用命令每条都给了完整的命令语句和适用场景说明不搞冷门炫技全部是实际工作里反复用到的硬货。不管你是刚接触服务器的前端同学、准备入行的运维新手还是偶尔要登服务器查问 题的后端开发这份清单都能直接照着敲。我尽量按使用场景把命令分成了五个部分文件与目录、文本处理、权限与进程、网络与系统、压缩与效率。每个部分末尾我会补充一些真实踩坑经验这些细节一般命令速查表上不会写但往往决定了你能否在关键时刻快速救场。1. 文件与目录操作最基础也最容易翻车的一组命令1.1 日常查看与创建ls、cd、pwd、mkdir、touch文件操作是Linux一切工作的起点。先说查看目录内容ls -l是对应ll会列出文件权限、属主、大小和修改时间ls -la还会显示以点开头的隐藏文件。我见过很多人在服务器上看不到某个配置文件第一反应是文件丢了实际上就是没加-a参数。pwd # 显示当前绝对路径刚登服务器搞不清自己在哪里时先敲这个 ls -lh # 人类可读方式显示大小比如 4.0K、12M排查磁盘占用时必用 cd /etc/nginx/ # 切换目录 cd ~ # 回到当前用户家目录 cd - # 回到上一个访问的目录日志文件两边来回看时效率极高 mkdir -p /data/logs/app # 一次性创建多层目录没有-p会直接报错 touch index.html # 创建空文件也能用来快速生成一个待写入的日志占位文件这里有个新手高频错误mkdir不加-p中间层级目录不存在时命令直接失败。比如你要创建/data/logs/app如果/data和/data/logs都不存在朴素写法会报没有那个文件或目录。加上-p的意思是自动创建所有缺失的父目录这个参数在写部署脚本时会反复用到。1.2 复制、移动与删除cp、mv、rm复制和移动的用法看着简单真正的坑在参数上。cp -r递归复制整个目录不加-r只能复制单个文件。mv既能移动也能重命名同一个命令干两件事理解这一点后你就不会困惑为什么我的命令没有报错但文件不在原位置。cp -r /app/old /app/new # 递归复制目录保留原目录内容 cp -a /data/logs/ /backup/ # -a 档案模式复制保留权限和时间戳做备份时比-r更稳 mv app.conf app.conf.bak # 改文件名本质就是同一目录下的移动 mv /tmp/test.txt /data/ # 移动文件到新位置 rm -rf /tmp/cache/ # 删除目录及内容。-rf 连起来用要极度慎重没有后悔药 rm -i *.log # 删除前逐条确认批量处理时降低误删风险rm -rf是重灾区命令。凡是涉及删除的操作我个人的习惯是先ls确认路径再执行删除或者先mv到一个临时目录观察几天再决定要不要删。尤其是rm -rf /xxx/*这种带通配符的如果路径拼错后果能让你从中午折腾到凌晨。生产环境我甚至建议用trash-put之类的回收站工具代替不过大多数服务器上没装那就强行给自己立规矩删除之前多看一眼路径。1.3 查找与链接find、locate、ln、stat查文件最强大的是find它能按名字、时间、大小、类型组合筛选。locate走的是数据库索引查起来飞快但新创建的文件可能查不到需要先更新索引数据库。find /var/log -name *.log -mtime 7 # 找出7天前的所有日志文件 find / -type f -size 500M # 全盘扫描超过500M的大文件排查磁盘满时先跑这条 find . -name *.conf -exec sed -i s/old/new/g {} \; # 批量替换手头所有.conf文件内容 ln -s /data/app.jar /app/latest.jar # 符号链接类似Windows快捷方式 stat nginx.conf # 查看文件更详细的时间戳、inode信息 du -sh /var/lib/mysql # 看单个目录占用空间总量排查磁盘占用第一步find配合-exec是批量操作的利器但注意格式很严格{}代表查到的每个文件末尾必须有\;。很多人第一次抄这条命令会漏掉反斜杠和分号结果报错或语法异常。如果你怕写错可以先用find . -name *.conf单独跑一遍确认范围对了再补上-exec部分。2. 文本查看与内容处理日志排查全靠这一组2.1 简单查看cat、head、tail、less服务器上排查问题百分之六七十的时间都在跟文本打交道。cat适合看小文件head和tail分别看头部和尾部less适合翻页阅读大文件。我强烈建议你把大文件查阅习惯从cat改成less因为cat会把整个文件一次性输出几十万行的日志直接刷屏还会卡住终端。cat nginx.conf # 查看小文件全部内容 head -50 access.log # 只看前50行 tail -20 error.log # 看最后20行 tail -f app.log # 实时跟踪日志输出调试接口、观察启动流程时必备 less -N app.log # 带行号翻页浏览按/搜索关键字按q退出tail -f是观察日志增长的神器。比如你在重启某个服务想看它是否正常起来开一个终端执行tail -f /var/log/app.log然后另一个终端执行启动命令直接能看到启动过程里的每一行输出。按CtrlC退出跟踪文件本身不受任何影响。2.2 内容检索grep的实战用法grep是日志排查里出场率最高的命令没有之一。它不是在文件里找单词而是按正则表达式匹配每一行。常见的组合场景是先tail定位最新日志再grep按关键字过滤最后grep -v排除干扰项。grep ERROR app.log # 找出所有包含ERROR的行 grep -r timeout /etc/nginx/ # 递归搜索目录下所有文件 grep -i error app.log # 忽略大小写匹配 grep -n exception app.log # 显示匹配行所在的行号 grep -E ERROR|WARN app.log # 用扩展正则在多个关键字中选择 grep -v ^# nginx.conf # 反选排除注释行最后一个grep -v很实用。排查配置问题时注释行会干扰你的阅读反向过滤后剩下的就是实际生效的配置项。多个关键字组合时可以先grep 2025-06-01限定日期再grep ERROR限定日志级别用管道串起来思路比写一条复杂正则清晰得多。2.3 文本处理三剑客sed、awk、sort、uniqsed和awk是文本处理的进阶工具。sed擅长按行替换、删除、插入awk擅长按列或按特定分隔符拆分数据。日常用得最多的场景一个是大批量替换配置文件里的旧内容一个是从日志里提取某几列数据做统计。sed -i s/8080/9090/g app.conf # 把文件里所有8080端口替换成9090 sed -n 20,50p test.txt # 只打印第20到50行 awk {print $1, $4} access.log # 取每行的第1列和第4列 awk -F: {print $1} /etc/passwd # 按冒号拆分提取用户名列表 sort access.log | uniq -c | sort -rn # 统计每行出现次数并倒序排列 wc -l app.log # 统计文件行数 cut -d -f1 access.log | sort | uniq -c | sort -rn # 统计访问来源IP排名这条组合命令值得单独解释一下cut -d -f1按空格取第一列sort排序uniq -c统计重复次数最后的sort -rn按数字倒序。它的经典应用场景是分析nginx access日志中哪个IP访问次数最多流量异常时第一时间就能定位到嫌疑对象。-rn的意思是r反向、n按数字如果不加n排序会按字典序10会排在2前面结果看着就很难受。3. 权限、用户与进程管理服务器安全的命脉3.1 权限与属主chmod、chownLinux文件权限是经典的三元组读、写、执行对应数字分别是4、2、1。常见的755表示属主有全部权限、属组和其他人只有读和执行。chown修改属主属组chmod修改权限位。上传部署文件后最常遇到的问题是文件权限不对导致web服务读不了或者脚本没有执行权限直接Permission denied。chmod 755 deploy.sh # 设置脚本可执行权限 chmod x run.sh # 简化写法给当前用户增加执行权限 chown -R nginx:nginx /data/www/ # 递归修改目录属主和属组为nginx chmod -R gw /data/shared/ # 给属组增加写权限多用户协作时常用有一点要提醒不要为了省事把所有文件都chmod 777。生产环境上我见过太多因为777权限导致的安全事故比如日志被删除、网页被篡改。原则是脚本需要执行就给执行权限目录需要写入就给属组写权限能不给others任何权限就不给。chown -R和chmod -R的-R是递归一旦目录层级多、文件数量大执行后会直接覆盖整个目录树的权限结构。如果你只想改当前目录下的权限千万别加-R这个参数误用和rm -rf误删一样让人头疼。3.2 用户管理与身份切换useradd、passwd、su、sudo需要为某位同事开一个服务器账号或是在你手上管理多台机器时用户管理命令就是刚需。useradd创建用户passwd设置密码sudo临时用管理员身份执行命令。useradd -m deployer # 创建用户并自动创建家目录 passwd deployer # 设置或修改密码 su - root # 切换成 root 用户注意带-会加载新用户的环境变量 sudo -i # 直接进入root交互shell需输入当前用户密码 sudo systemctl restart nginx # 以管理员权限执行特权命令 whoami # 查看当前身份 id # 查看当前用户ID和所属组su -和su的区别在于是否加载目标用户的环境变量。如果你切换用户后执行命令发现找不到某个命令多半是因为用了不带-的su。切换时尽量写su - 用户名这样新环境才完整加载。另外sudo不是所有用户都能用需要在/etc/sudoers里配置平时大家聊的给某某开sudo权限指的就是这一步。3.3 进程查看与终止ps、top、kill、pkill进程排查的本质问题只有三个什么进程在跑、占用多少资源、要不要处理。ps是静态快照top是动态监控kill按进程ID杀进程pkill按名字杀。定位线上问题的标准流程一般是top看整体资源占用再用ps锁定具体进程确认后kill或重启服务。ps -ef | grep java # 查看所有Java相关进程 ps -aux --sort-%mem | head -10 # 按内存占用排序取前10条 top -b -n 1 # 批处理模式输出一次top结果适合脚本采集 kill -15 12345 # 优雅终止进程让进程自行清理资源 kill -9 12345 # 强制杀死进程慎用数据可能没来得及落盘 pkill -f app.jar # 按完整命令行匹配杀死进程kill -9能解决绝大多数杀不掉的进程但它不是第一选择。kill -15先发送终止信号进程会执行清理逻辑-9是操作系统直接强制回收和拔电源类似。如果你在杀某个服务先试-15过几秒看进程是否退出实在不行再上-9。另外ps -ef | grep里grep本身也会匹配到自己所以你会看到多出一个grep app的进程这是正常现象不用惊讶。进程优先级调整用nice和renice日常用到的机会不算多但备份任务压缩大文件时很值得用。给任务设置一个较低的优先级避免CPU被备份脚本抢光nice -n 10 tar -czf backup.tar.gz /data/ echo 0 3 * * * /opt/backup.sh | crontab # 设置每天凌晨3点执行备份脚本 crontab -l # 查看当前用户的定时任务列表 crontab -e # 编辑定时任务crontab -e是让我又爱又恨的命令。编辑时语法错了会在执行时报错排查起来很费劲。写定时任务时建议先手动执行一遍脚本确认没问题再加到crontab里。配合crontab -l可以快速查看已有哪些任务避免重复添加。4. 网络与系统信息排查没有这些命令寸步难行4.1 网络配置与连通性ip、ping、ss、netstat排查网络问题的顺序一般是从近到远先看本机地址再看端口监听最后测外部连通性。ip addr查看本机IPping测试主机是否可达ss和netstat查端口监听情况。现在新系统更推荐用ss它的输出更简洁在大量连接下性能也更好。ip addr # 查看所有网卡IP地址 ping -c 4 baidu.com # 发4个包测试连通性不加-c会一直ping下去 ss -tlnp # 列出所有TCP监听端口及对应进程 netstat -ant | grep 8080 # 查看8080端口是否被占用 curl -I http://127.0.0.1:8080/ # 只查看HTTP响应头判断服务是否正常响应ss -tlnp中的-t指TCP、-l指监听状态、-n不解析域名、-p显示进程信息。这个组合几乎是端口排查的标配。如果某服务明明启动了但访问不了先执行这条看看端口监听有没有起来大概率能定位一半问题要么服务没绑定成功要么绑定到了其他IP。4.2 下载与请求curl、wgetcurl和wget都支持下载区别在于curl更擅长做接口调试能看请求头和响应头wget更侧重文件下载支持断点续传和递归下载。curl -X POST http://localhost:8080/api/login -H Content-Type: application/json -d {user:admin} curl -s -o /dev/null -w %{http_code} http://127.0.0.1/ # 只看状态码 wget -c https://example.com/file.tar.gz # 断点续传下载大文件 wget -r -np -nH --cut-dirs1 http://example.com/files/ # 镜像某个目录调试接口时curl -s限制只有错误才输出配合-o /dev/null -w %{http_code}只返回HTTP状态码。这个组合在快速确认某个接口健康状态时非常好用写监控脚本的时候基本都会用到。-w后面的格式串还有不少变量比如%{time_total}可以显示总耗时做接口压测前的粗检测很方便。4.3 系统状态与资源free、df、uname、dmesg系统资源排查和进程排查经常一起出现。内存问题看free磁盘问题看df内核和硬件问题看dmesg。出现服务器卡死内存泄漏磁盘满等感觉统称时先用这几个命令做一轮体检。free -h # 人类可读格式显示内存使用 df -h # 显示磁盘分区占用情况 uname -a # 查看内核版本和系统架构 dmesg | tail -50 # 查看最近内核日志排查硬件或驱动异常 uptime # 查看系统运行时间、负载情况free -h里的-h是human readable会自动把数值换算成G或M。实际查看时要重点关注available这一列它才是真正可分配给新进程的内存量。df -h看到某个分区使用率超过90%时结合du -sh /目录路径一级一级往下找用不了几分钟就能定位是哪个目录占满了磁盘。4.4 服务管理与日志systemctl、journalctl现代Linux发行版基本都基于systemd管理服务。systemctl就是日常开关服务、设置开机自启、查看服务状态的核心工具。配合journalctl查服务日志排错链路才算完整。systemctl start nginx # 启动服务 systemctl stop nginx # 停止服务 systemctl restart nginx # 重启服务 systemctl enable nginx # 设置开机自启 systemctl status nginx # 查看服务运行状态 journalctl -u nginx -f # 实时查看nginx服务的日志 journalctl -u nginx --since 10 minutes ago # 查看最近10分钟的服务日志systemctl status输出的信息量很大包括主进程PID、内存占用、最近日志排查服务异常时建议第一眼就看它。journalctl -u指定服务名查看日志--since限定时间范围比打开整个大日志文件再grep高效得多。注意systemctl在旧版本系统或容器环境里不一定可用那时候就要退回去看service命令和传统日志文件。5. 压缩、软件包与远程传输效率工具5.1 压缩打包tar、gzip、zip压缩命令我日常用到最多的其实是tar因为它不只是打包还能顺便调用gzip或bzip2完成压缩。熟练使用这几个参数备份和传输文件能节省不少时间。tar -czf app-backup.tar.gz /data/app/ # 打包并压缩目录-z调用gzip tar -xzf app-backup.tar.gz -C /restore/ # 解压到指定目录-C指定路径 tar -tf app-backup.tar.gz # 只查看压缩包里的文件列表不解压 gzip -r /data/logs/ # 递归压缩目录下所有文件 unzip -q deploy.zip -d /data/app/ # 解压zip包到指定目录有个常见的坑tar解压时如果不加-C会直接解压到当前目录如果压缩包内部没有顶层目录就会把一堆文件散到当前目录和现有文件混在一起。稳妥的做法是先tar -tf看一眼包内结构确认有顶层目录再解压。5.2 软件包管理apt、yum、dnf、rpm软件包管理的核心思路是一致的更新索引、安装、卸载、查已装。不同发行版命令不同Debian系用aptRHEL系用yum或dnf低层一点还有rpm。apt update # Debian系更新软件包索引 apt install -y nginx # 安装软件包 apt remove nginx # 卸载软件包 yum install -y vim # RHEL系安装 yum list installed | grep nginx # 查看已安装软件 rpm -qa | grep jdk # 用rpm查询某个软件是否安装安装软件前更新索引是个好习惯否则可能提示包找不到或版本太旧。apt update和apt upgrade的区别要搞清楚前者只更新索引列表后者会把所有已安装软件升级到新版本。生产环境升级前一定要评估影响我见过有人顺手敲了yum update结果一批核心组件版本变动服务起不来了。5.3 远程传输ssh、scp、rsync远程登录用ssh传文件用scp大批量同步用rsync。这三样是运维和开发上服务器干活的基本功。rsync的增量同步能力是scp不具备的首次全量、后续只传变更部分做发布和备份非常方便。ssh user192.168.1.10 # 远程登录 ssh -p 2222 user192.168.1.10 # 指定端口登录 scp local.txt user192.168.1.10:/data/ # 本机推文件到远程 scp user192.168.1.10:/data/remote.txt ./ # 远程文件拉取到本机 rsync -avz --delete /data/app/ backup192.168.1.20:/backup/app/ # 增量同步并删除远端多余文件rsync有一个参数组合我特别提醒--delete意味着以源目录为准目标目录里多出来的文件全部删除。第一次使用或者不确定目标目录内容时先不加--delete跑一遍再用--dry-run模拟确认输出无误后再真执行。线上误删有过太多先例谨慎一点不丢人。另外ssh密钥登录是比密码登录更安全也更方便的选择。配置核心是生成密钥对ssh-keygen -t ed25519 -C deploy-key # 生成ed25519密钥对 ssh-copy-id user192.168.1.10 # 把公钥安装到远程服务器5.4 Shell效率提升alias、history、jobs这里讲的不是某一条单独的命令而是几个能改变你日常操作习惯的小工具。alias给长命令起短名字history查看历史命令并按编号回放jobs管理后台任务。alias llls -alF alias clsclear history | grep nginx # 翻翻之前敲过的nginx相关命令 fc -l -50 # 列出最近50条历史命令 command # 把任务丢到后台执行 jobs -l # 查看后台任务列表 fg %1 # 将后台任务切回前台alias适合把你自己高频使用的固定参数固化下来。比如你总用grep -rn递归搜索那就alias grgrep -rn以后输入gr就等效于整条命令。但要注意在脚本文件里定义的alias不会自动生效你得把它写进~/.bashrc再source ~/.bashrc。历史命令的妙用也说一句在终端里直接输入!加历史编号即可快速回放某条命令。比如history显示第102条是ssh user202.106.88.88那你输入!102就直接执行它省得再敲一遍长命令。6. 60条命令之外的选型逻辑与避坑经验6.1 什么时候用管道、什么时候用参数把多个命令串起来的核心符号是管道|。它的意思是前一个命令的输出作为后一个命令的输入。很多新手写命令很容易陷入两种情况一是把能通过参数解决的事硬拆成好几条管道效率低还不好维护二是该用管道过滤的场景非要把所有输出打印出来人工找。我的判断标准是如果这个操作只是要从大量输出里挑数据用管道加grep或awk如果是在处理文件本身优先用sed -i直接改文件。比如查日志里ERROR出现的次数用grep -c ERROR app.log一条搞定比grep ERROR app.log | wc -l更清晰。而把配置里所有8888端口改成9999就该用sed -i不需要先读再写那么繁琐。6.2 命令不生效时的排查顺序命令敲下去没反应或者报错很多人第一反应是怀疑命令不对。实际上先要排查的应该是是不是当前用户权限不够是不是路径不在PATH环境变量里是不是文件本身没有执行权限。我常用的排查顺序是id看身份which看命令是否存在ls -l看文件权限。举例来说执行./deploy.sh提示Permission denied要先ls -l deploy.sh看有没有x权限执行nginx提示command not found要which nginx确认是否在PATH里或者手动指全路径/usr/sbin/nginx。这个思路适用于绝大多数命令不灵的问题。6.3 组合案例从日志定位到清理一气呵成最后给一个复合场景把前面这些命令串起来。假设线上某服务异常你的排查路径可以参考下面这套top -b -n 1 | head -15 # 1. 看整体负载确认是不是CPU或内存异常 ps -ef | grep app.jar # 2. 定位到具体服务进程 df -h # 3. 顺便看磁盘是否已满 tail -200 /data/logs/app/error.log | grep OutOfMemory # 4. 日志里找异常关键字 find /data/logs -name *.log -mtime 7 -delete # 5. 清理过期日志这条顺序模拟的是一个标准故障排查流程先确认资源层面的异常再定位到进程然后从日志里找根因最后做临时性清理。每一层都用最简单的命令完成不需要任何花哨技巧但能让一个新手在混乱中保持条理。我自己在服务器上敲了这么多年的命令最大的体会是Linux命令不是背出来的是用出来的。你把这份清单拷贝到本地或者在命令行里照着敲一遍遇到报错不要慌逐行理解参数含义很快就会形成自己的肌肉记忆。真正重要的是命令组合的思路和排查问题的逻辑这远远比记住每一条语法更重要。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。