Linux常用命令速查手册:文件操作、文本处理与系统监控实战指南
2026/9/10 12:42:34 网站建设 项目流程

Linux 命令这东西,属于典型的“用时方恨少,查完就忘掉”。我日常跟服务器、跟嵌入式设备、跟一堆跑在虚拟环境里的实例打交道,很多命令说实话不是“记不住”,而是“没必要全记在脑子里”。真正高效的用法是脑子里建立一张索引图,知道什么场景该查什么命令、去哪里查、怎么组合着用,剩下的事交给手册和 man page 就行。但很多刚接触 Linux 的朋友,包括一些写了一两年脚本的同事,卡住的往往不是某个具体参数,而是“不知道有这个东西存在”,或者“知道命令但不知道它还有这种玩法”。这篇博文就按我自己的使用习惯,把 Linux 常用命令从文件操作、文本处理、系统监控、网络排查到权限与存储整理成一份能直接放进书签的速查手册,尽量覆盖运维、开发和日常折腾的高频场景。

这份手册解决什么问题?说直白点:帮你把 Linux 命令从零散的碎片拼成一张可复用的知识网。它适合刚上手 Linux 的新手快速建立全局认知,也适合有经验的人放在手边当工具书翻找,面试前拿来做一轮系统回顾同样很合适。我不打算罗列几百条命令把你劝退,而是只讲真正高频、真正能解决实际问题的那些,并说明每条命令背后的思路和常用组合玩法。

1. 整体思路与命令学习的三层逻辑

1.1 为什么很多命令你记不住

先纠正一个误区:记不住命令不是记忆力问题,是大脑对“没有逻辑关联的信息”天然排斥。你硬背tar -zxvfunzip的区别,当然容易混;但如果你意识到“压缩解压”这条线上,Linux 的工具设计逻辑是“压缩算法”和“归档格式”两件事分开处理,脑子里有了这个框架,遇到新格式也能猜个大概。

我用下来最顺手的组织方式,是把命令分成三个层次:

  • 第一层:文件与目录操作。这是地基,SSH 登上一台新服务器,80% 的操作都围绕文件在转。
  • 第二层:文本处理与内容分析。Linux 哲学是“一切皆文件,一切皆文本”,日志、配置、输出结果全是文本,会处理文本就等于会跟系统对话。
  • 第三层:系统状态与网络排查。前面两层让你能“干活”,这一层让你能“看病”,对整台机器当前的状态做到心里有数。

每次遇到新命令,你先往这三层框架里放一放,再补上它对“输入”“输出”的处理方式,记忆负担会小很多。下面每个章节我都按这个逻辑展开。

1.2 命令速查的三个核心技巧,学会少走半年弯路

第一个技巧:man不如先学“看什么”。很多人知道man ls可以看手册,但打开后被一堆英文说明淹没。我的习惯是先看man页里的EXAMPLES段落,大部分 GNU 工具在末尾都有示例,那是精炼过的用法。没有 EXAMPLES 的,直接搜关键词/加你要找的功能,比如想知道怎么按时间排序,就输入/sort by time

第二个技巧:善用--help快速试错。比起翻整篇 man,ls --help这种输出更紧凑,适合确认某个参数是否存在。实际操作中我经常是先--help快速确认,需要深挖再进 man。

第三个技巧:建立自己的速查笔记。这不是废话。遇到一条解决了实际问题的命令,花 10 秒把它连同场景一起记进自己的笔记里。我自己的笔记里就有很多这种条目,比如“用du -sh * | sort -rh找出目录里占空间最大的几个文件”,这类组合命令比单一命令价值高得多,也是本手册想给你的核心资产。

2. 文件与目录操作命令详解

2.1 高频命令速查表,覆盖日常工作 80% 场景

文件操作是 Linux 最基础的能力,先把最常用的列成一张表,每条后面附上我实际使用时的高频组合。

命令核心用途我常用的组合/参数实际场景
pwd显示当前路径刚登服务器先确认自己在哪
cd切换目录cd -返回上次目录在两个目录间反复横跳时极好用
ls列出文件ls -lh人性化大小;ls -lt按时间倒序看最新日志文件
cp复制文件/目录cp -r复制目录;cp -a保留权限属性备份配置目录
mv移动/重命名注意跨文件系统时会变成复制+删除
rm删除文件/目录rm -rf强制递归删除,慎用清理无用目录
mkdir创建目录mkdir -p a/b/c递归创建创建多层项目结构
touch创建空文件/更新时间戳快速生成占位文件
ln创建链接ln -s软链接;无参数为硬链接给可执行文件做软链到 PATH

这里我想特别强调一下rm -rf的威力。很多事故都是rm -rf /或者rm -rf /*这种手滑操作造成的。我自己的安全习惯是:在 root 用户下,rm一律先ls看一眼再删;删除变量拼接的路径,先用echo $VAR确认变量值是否符合预期。别嫌多此一举,这个习惯在线上环境救过我很多次。

2.2 文件权限、属主与特殊位,理解这套模型才算入门

ls -l输出的第一列像-rw-r--r--,这 10 个字符的含义很多新手背了又忘,因为没理解它的设计模型。本质上是三组权限(属主 u属组 g其他人 o),每组三位(读 r=4写 w=2执行 x=1),前一位是文件类型(-普通文件、d目录、l软链、c字符设备)。

数字法修改权限是最高频的操作:chmod 755 file表示属主可读写执行、属组和其他人只读执行。这个 755 是怎么来的?7=4+2+1,所以属主全权限;5=4+1,只读加执行。如果想让脚本只能被自己修改、其他人只能执行或读取,那chmod 755就是默认首选。

再往前一步是特殊权限位chmod 4755 file中的4setuid,表示执行该文件时进程获得文件属主的权限。典型例子是/usr/bin/passwd,普通用户能通过它修改自己的密码,因为 passwd 文件只有 root 能写,setuid 让 passwd 程序以 root 身份运行。排查服务器安全时,find / -perm -4000 2>/dev/null找出所有 setuid 程序是标准动作,这类程序是提权攻击的高发点。

目录权限的坑也要单独说一下:目录的r权限只决定能不能列出目录内容,能不能进入目录取决于x权限。所以有时候你会遇到ls`` 提示权限不足,但能cd进目录的情况,反过来也一样。想给用户一个只能进出、不能列内容的目录,就可以设置成chmod 711 dir`。

2.3 文件查找三件套:which、locate、find

which查的是 PATH 里的可执行文件位置,最常用于确认某个软件是否安装、安装在哪。typewhich更全,能区分出别名(alias)、内建命令和外部命令,比如type ls会告诉你它可能是ls --color=auto的别名。

locate基于预建索引,查询极快但索引可能过期。新装系统后第一件事就是更新索引。多数发行版没默认装locate,需要安装mlocateplocate包。它适合找“已知名字但不知道放哪”的文件。

find是真正的重度工具,精通它要花不少功夫,但掌握几个核心场景就够用:

# 按名字查 find /etc -name "*.conf" # 按大小查(大于 100MB 的文件) find / -size +100M # 按时间查(最近 7 天内修改过的文件) find . -mtime -7 # 按类型查目录 find /var -type d -name "log*" # 找到后直接执行操作(删除 30 天前的 .log 文件) find /opt/apps/logs -name "*.log" -mtime +30 -exec rm {} \;

这里重点说-exec-delete-delete简单直接但没法加条件外的操作;-exec rm {} \;{}是每一条搜索结果的占位符,\;表示命令结束。批量操作文件时,这个组合比写循环脚本更简洁。但要注意:-exec对每个文件都会启动一次新进程,文件很多时性能差,可以用-exec ... +优化成“尽量一次性传递多个文件给命令”。

3. 文本处理与内容分析命令,进阶必学

3.1 grep、sed、awk 三件套:自定义数据提取加工流水线

服务器上的日志、配置、命令输出全是文本,处理文本的能力直接决定工作效率。grep、sed、awk 这三件套我当作战术武器来用。

grep负责“按行筛选”,最简单的场景是找日志里的错误:

grep "ERROR" app.log grep -i "error" app.log # 忽略大小写 grep -E "ERROR|WARN" app.log # 扩展正则,多个关键词 grep -A 5 "Exception" app.log # 匹配行后 5 行 grep -B 2 "Exception" app.log # 匹配行前 2 行 grep -c "ERROR" app.log # 统计出现次数

grep -E支持扩展正则,我用到频率最高的是^行首匹配、$行尾匹配、[0-9]字符集、.*任意字符。排查日志时,我经常用grep "2026-01-15 10:" app.log | grep -v "heartbeat"这种管道串联,把时间范围锁死再去掉噪声关键词,很快能定位问题窗口。

sed是流编辑器,核心职能是“按规则增删改”。最常用的是替换:

sed -i 's/old/new/g' file.conf # 替换文件内所有 old 为 new sed -n '10,20p' app.log # 打印第 10 到 20 行 sed -i '/^#/d' file.conf # 删除所有注释行(以 # 开头)

-i直接修改原文件,在脚本里批量改配置很常用。但这里有个处理技巧,不要在没备份的情况下直接sed -i动生产配置。我一般先cp file.conf file.conf.bak再操作,或者用sed -i.bak 's/.../.../' file.conf,让 sed 自动生成.bak备份文件。这个后缀名可以自定义,sed -i.bak就会生成一个原名加.bak的备份。

awk是三者中最复杂的,但不需要学完全部才能用它解决实际问题。日常用得最多的是“取列”:

# 打印第一列和第三列 awk '{print $1, $3}' data.txt # 以冒号为分隔符(处理 /etc/passwd 文件) awk -F: '{print $1, $6}' /etc/passwd # 统计文件行数 awk '{count++} END {print count}' app.log

awk 的-F参数指定分隔符,不指定时默认是空格/制表符。有一个我经常用的例子:从df -h输出里提取根分区的使用率:

df -h / | awk 'NR==2 {print $5}'

NR==2表示只处理第二行,也就是df输出的数据行(第一行是表头),$5就是使用率百分比。这种“命令输出接 awk 提取字段”的模式,在监控脚本里出现频率非常高。

3.2 查看文件内容:cat、less、tail、head 的正确打开方式

查看文件内容谁都会,但不同场景有不同的正确姿势。

小文件预览用cat没问题,但cat一个几百 MB 的日志会把整个终端刷爆,这时候就该用less。我几乎不用cat看大文件,less支持上下翻页、/搜索、G跳到最后一行、g跳到第一行,阅读体验和对大文件的友好程度都是最优的。

tail是我在工作中最依赖的命令之一,因为绝大多数问题都发生在“最新产生的数据”里:

tail -n 50 app.log # 看最后 50 行 tail -f app.log # 实时跟踪文件新增内容 tail -f -n 100 app.log # 先显示最后 100 行,再持续跟踪

tail -f是排查实时日志的首选,启动服务、接收请求、观察报错,直接开着这个窗口等输出即可。跟它对应的是head -n,看文件开头部分,比如查看配置文件的头部注释和默认设置。

这里补一个真实场景:tail -f在文件被改名或清空时可能停止输出或显示奇怪内容,此时可以加-F(大写),它会检测文件被重建后自动重新打开。典型场景是 logrotate 日志轮转后,tail -f还在跟踪旧的已被改名文件,用tail -F就能避免这个坑。

3.3 文本统计、去重、排序:sort、uniq、wc、cut 的组合拳

处理日志和分析数据时,这几个命令经常串在一起用。我举一个实际例子:统计一份访问日志里出现次数最多的 10 个 IP 地址。

cat access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -n 10

这条命令链的每一步都值得拆开讲:awk '{print $1}'提取第一列的 IP;sort把相同 IP 排到一起(uniq -c只能统计相邻行,所以必须先排序);uniq -c给每个去重后的值加上出现次数;sort -rn按数字逆序排(-r倒序、-n按数字而非字典序);最后head -n 10取前十条。

wc最常用的是-l统计行数,比如确认日志文件有多少行、配置文件里有多少个非空行:

wc -l /var/log/syslog grep -v "^$" file.conf | wc -l # 过滤空行后统计行数

cut在字段提取上跟 awk 有重叠,但更轻量。cut -d: -f1 /etc/passwd可以取所有用户名;cut -c1-10 file取每行前 10 个字符。字段结构规整的纯文本用 cut 更直观,结构复杂或需要同时处理多分隔符时交给 awk。

4. 系统状态监控与性能排查命令

4.1 用 top、free、df、ps 快速判断服务器健康状况

新接手一台服务器,或者线上服务出问题时,我一般按这个顺序快速摸底:先看负载均衡是否健康,再登主机看topfreedf,确认 CPU、内存、磁盘三大核心资源。

top打开后是动态刷新的进程视图,我重点看两处:第一行 load average 的三个数字,分别代表 1 分钟、5 分钟、15 分钟的平均负载。虽然负载不完全等于 CPU 使用率,但三个数字同时偏高且呈上涨趋势,基本可以判断系统正在经历压力。按P键按 CPU 排序进程,按M键按内存排序,这两个快捷键是标配。现代系统我更多用htop,操作更直观,但很多精简服务器默认没装,所以top的基础一定不能丢。

free -h看内存,-h参数让输出变成人类可读的 MB/GB 单位。看内存有个常见的误区:只关注free列,把buff/cache当成“已用”。实际上 Linux 会把空闲内存拿来缓存磁盘数据,这部分在内存紧张时会被自动回收。更合理的判断方式是看available列,它才是估算“还可用多少”的可靠指标。

df -h看磁盘分区使用率,df -i看 inode 使用率。inode 是文件系统里记录文件元数据的结构,有时候磁盘明明还有空闲,但报“No space left on device”,原因就是 inode 被大量小文件占满了。清理那种由错误脚本产生的海量小文件,比清理大文件更紧急,df -i是排查这类问题的关键命令。

ps查进程细节,ps -efps aux是两个最常用的风格。两者内容基本一致,-ef是 Unix 风格,aux是 BSD 风格。我常用ps aux --sort=-%cpu | head按 CPU 使用率排序看最耗资源的进程。

4.2 网络排查黄金命令:ping、ss、netstat、traceroute

网络问题排查有一套标准路径,从“通不通”到“谁在监听”再到“数据走了哪条路”。首先是ping,确认目标主机是否可达、延迟大致多少。ping通说明三层连通性没问题,但不代表应用正常;ping不通也不一定是对端宕机,很可能只是禁了 ICMP。

端口监听状态用ss或老牌的netstat

ss -tlnp # 查看所有监听中的 TCP 端口及对应进程 netstat -tulnp # 老命令,参数含义:t=tcp, u=udp, l=listening, n=不解析域名, p=显示进程

排查“端口被占用”时,ss -tlnp | grep 8080能直接显示占用 8080 端口的 PID 和进程名。-p参数需要 root 权限才能显示自己之外的进程信息,非 root 用户看到的是users:(("java",pid=1234,fd=...))这样的部分信息,可能因权限不足隐藏进程名。

traceroute看数据包从本机到目标经过的路由节点,-n参数不解析主机名,输出更干净。如果你在国内网络环境,traceroute 时某些节点超时是常态,不一定是网络故障,需要结合整体链路判断。它主要解决的是“数据到底卡在哪一跳”的问题,跨机房运维定位问题边界很实用。

4.3 磁盘与 I/O 排查:du、iostat、lsof 的实战组合

磁盘空间排查是日常运维最高频的场景之一。定位大文件的链路一般是:

df -h # 先看哪个分区满了 du -sh /var/* 2>/dev/null | sort -rh | head # 查 /var 下哪个目录最大 du -sh /var/log/* 2>/dev/null | sort -rh | head # 继续往下钻

du -sh *中的s是 summary 汇总、h是人性化大小,管道接sort -rh按大小倒序,一下就能看到“罪魁祸首”。还有一条我从线上问题总结出来的命令:在某个目录里找出所有超过 1GB 的文件。

find /var -xdev -type f -size +1G -exec ls -lh {} \; 2>/dev/null

-xdev限制不跨越文件系统挂载点,避免去扫/proc/sys这类虚拟文件系统。注意虚拟文件系统里的文件显示大小是 0 或特殊值,查实际占用时一定要排除。

磁盘性能问题用iostat,它能看到每个磁盘的读写速率、IOPS 和等待队列长度。iostat -x 1每秒刷新一次,重点看%util列是否长期接近 100%,接近则说明磁盘基本在满负荷运转。如果应用本身忙但有卡顿感,而 CPU、内存都正常,那大概率是磁盘 I/O 在拖后腿。

lsof是个被低估的好工具。lsof | grep deleted可以找出“已被删除但还被进程占用”的文件。这类文件在df里看不到空间被释放,因为进程还持有句柄,常见于运行中的服务把日志文件删了但没重启。新版系统上用lsof +L1也有类似效果。线上磁盘满了却找不到大文件时,多半就是这个原因。处理办法是把对应进程重启,或者truncate -s 0 /proc/<pid>/fd/<n>清空句柄指向的文件。

5. 用户管理、权限配置与安全加固常用命令

5.1 用户和用户组操作:useradd、usermod、passwd 的完整用法

服务器安全管理的第一道关是账号管理。常规操作用useradd创建用户,-m自动创建家目录,-s指定登录 shell,-G指定附加组:

useradd -m -s /bin/bash -G docker zhangsan passwd zhangsan # 设置或修改密码 usermod -aG sudo zhangsan # 把用户加入 sudo 组(Debian/Ubuntu)

Debian/Ubuntu 与 RHEL/CentOS 在用户组上有差异:Ubuntu 的 sudo 用户加入的是sudo组,CentOS 上是wheel组。用错组名不会报错,但用户没法 sudo,查错会绕不少弯。

想让新建用户加入多个组,-G参数可以跟逗号分隔的多个组名。另外useradd只是创建账号,默认不带任何权限,至于创建后要不要设密码、要不要允许登录,就看实际需求了。批量创建用户时,可以用循环脚本处理。比如根据用户列表批量创建并统一初始化密码:

for u in zhangsan lisi wangwu; do useradd -m -s /bin/bash "$u" echo "$u:初始密码123" | chpasswd done

chpasswd从标准输入读取用户名:密码格式,批量设密码比逐个passwd高效得多。实际使用中,初始密码应该设为一次性密码并强制用户下次登录修改,这就是chage -d 0 username的用途。

5.2 用 sudo 和日志审计管好提权行为,避免 root 满天飞

很多新手习惯直接用 root 干活,权限是够了,但风险极大。误操作、被入侵后面临的权限扩散、多人共用 root 密码导致无法追溯,都是生产中真实踩过的坑。正确做法是给需要权限的人开普通账号,通过sudo按需提权。

visudo打开/etc/sudoers编辑界面,常见配置片段:

# 允许 wheel 组所有成员执行所有命令 %wheel ALL=(ALL) ALL # 允许用户 zhangsan 无需密码执行 systemctl 相关命令 zhangsan ALL=(ALL) NOPASSWD: /usr/bin/systemctl # 只允许执行特定命令 lisi ALL=(ALL) /usr/bin/systemctl restart nginx

sudo 日志默认记录在/var/log/auth.log(Debian/Ubuntu)或/var/log/secure(RHEL/CentOS),查看这些日志能审计谁在什么时候执行了什么提权操作。启用 sudo 日志审计的核心价值在于出了问题能回查,给团队立好“所有敏感操作通过 sudo 执行并在日志留痕”的规矩,比事后抓瞎强得多。

我自己有个习惯:尽量不给任何人开无密码的 NOPASSWD sudo 权限。这条规则看起来很省事,但失去的是一次二次确认的机会,对于危险性极高的rmdd这类命令尤其不该放开。

5.3 文件特殊权限与安全排查,常用审计命令速查

安全相关的排查命令我在这里一并整理成清单,面试或做安全巡检时可以直接对照使用:

  • whow:查当前登录用户及其操作。w能显示负载、登录时间、当前执行的命令,判断是否有人偷偷登进来。
  • last:查看登录历史记录,last -n 20看最近 20 条。
  • lastb:查看失败的登录尝试,爆破攻击后这里会有一大串记录。
  • find / -perm -4000 -type f 2>/dev/null:查找所有 setuid 文件,重点检查这些文件的属主是否正常。
  • find / -nouser -o -nogroup 2>/dev/null:查找属主或属组已不存在的文件,可能是残留账号或异常文件的线索。
  • cat /etc/passwdcat /etc/shadow:检查是否存在异常账号或空密码账号。/etc/shadow中密码字段为空表示未设置密码,这种账号极其危险。
  • ss -tlnp:确认对外监听的端口是否都在预期内,防止后门监听在奇怪端口上。

安全巡检的核心理念不是“装多贵的安全软件”,而是定期执行几条简单命令并理解输出。我见过不少服务器被入侵的案例,其实早期都有端倪,比如异常账号、异常监听端口、/tmp下的可疑文件,只是没人定期看。

6. 网络配置与传输操作:curl、scp、rsync 实战

6.1 接口测试与文件下载用 curl,一条命令解决跟 HTTP 有关的一切

curl是处理 HTTP 请求最强大的命令行工具,接口调试、模拟请求、下载文件全靠它。我最常用的是这些组合:

curl -I https://example.com # 只看响应头 curl -i https://example.com # 响应头+响应体 curl -X POST -H "Content-Type: application/json" \ -d '{"name":"test","age":18}' https://example.com/api curl -k https://example.com # 跳过证书验证,测试自签证书时用 curl -o file.zip https://example.com/file.zip # 下载到指定文件名

-X POST指定请求方法,-H添加请求头,-d传请求体。连 RESTful API 时,我经常直接拿它测接口连不连得通,返回的状态码和三方工具看到的基本一致。-k跳过证书验证这个参数,在测试环境里很有用,但生产环境别乱用,会掩盖证书问题。

curl 断点续传下载用-C -,大文件下载一半断网了,重新执行会在上次的位置继续。这个参数老版本和新版本行为略有差异,但常规使用都没问题。

6.2 用 scp 和 rsync 传文件,从简单复制到增量同步

服务器之间传文件,最简单的姿势是scp

scp file.txt user@remote:/tmp/ scp -r /data/app user@remote:/data/ scp -P 2222 file.txt user@remote:/tmp/ # 指定 SSH 端口

注意-P是大写,-p小写是保留文件时间戳,这个大小写问题坑过不少人。scp适合一次性、单文件、量不大的传输场景。

多人协作或目录经常变更时,rsync是更好的选择。它最核心的优势是增量传输,第一次全量以后,后续只传变化的部分,对大目录同步效率极高:

# 本地同步到远程,-a 归档模式保留权限,-v 显示过程,-P 显示进度并支持断点 rsync -avP /data/app user@remote:/data/ # 排除某些目录不传 rsync -avP --exclude 'logs/' --exclude '*.tmp' /data/app user@remote:/data/ # 从远程拉取 rsync -avP user@remote:/data/app /data/ # 删除源端已被删除的文件(保持两端完全一致),慎用 --delete rsync -avP --delete /data/app user@remote:/data/

--delete参数要特别谨慎。它的含义是让目标目录变得跟源目录完全一致,源端删掉的文件目标端也会删除。在自动化同步脚本里它很管用,但如果你只是想把文件拷过去备份,加了--delete反而可能把目标端本应该保留的文件删掉。我第一次用 rsync 时就在这里吃过亏,现在凡是带--delete的命令,我都会在测试环境先跑一遍--dry-run-n参数)看看到底会删什么,确认无误再加真参数执行。

6.3 系统更新与软件包管理:apt、yum 的对照速查

软件包管理命令不同发行版不一样,Debian/Ubuntu 用apt,RHEL/CentOS 用yumdnf,底层都是解决依赖关系的包管理器。核心操作对照如下:

操作Debian/UbuntuRHEL/CentOS
更新软件源列表apt updateyum makecache
升级所有包apt upgradeyum update
安装软件apt install 包名yum install 包名
卸载软件apt remove 包名yum remove 包名
搜索软件apt search 关键词yum search 关键词
查看已安装apt list --installedyum list installed

apt用熟后,处理依赖关系的工作量少了一大截。安装编译类软件之前,我习惯先搜一下有没有 dev 包可以直接装,apt search能省掉很多手动编译依赖的痛苦。

如果要从源码安装 Python,比如在服务器上编译安装新版本,流程通常是:先apt install build-essential libssl-dev zlib1g-dev装齐编译依赖,再去 Python 官网下载源码包解压,./configure --enable-optimizations配置,最后make && make install。这里有个易错点:源码安装的 Python 默认不在 PATH 里,经常需要手工做软链接或修改 PATH 变量。

7. 实用技巧与问题排查实录

7.1 管道、重定向与历史命令,大幅提升效率的小习惯

Linux 命令设计最精妙的地方就是管道|和重定向>>>。管道把前一个命令的输出作为后一个命令的输入,一层层传递下去。很多复杂的操作其实都是简单命令的组合。

重定向的三个方向必须分清:>覆盖写,>>追加写,2>把错误输出写入文件。我调试脚本时经常用到:

./deploy.sh > deploy.log 2>&1

2>&1表示把标准错误重定向到标准输出所在的文件,这样正常输出和错误输出都进了同一个日志。如果不加这个,错误信息会在终端里一闪而过,脚本挂了你都看不到报错在哪。老手写脚本都会用2>&1,新手经常漏掉,排查问题时就缺了最关键的线索。

历史命令的高效玩法:history列出之前的命令;!123重新执行编号为 123 的历史命令;Ctrl+R进入反向搜索,输入关键字模糊匹配历史命令。我每天在终端里输入Ctrl+R的次数比很多命令都多,尤其是那种“昨天明明跑过但没记住”的长命令,搜一下直接回车,效率翻倍。

还有一个细节是 Tab 键自动补全。不要只补命令名,路径、参数、变量名都能补。补全出多个选项时连按两次 Tab 会列出所有可能,这个习惯在文件操作时尤其有用。

7.2 常见问题排查实录,踩过的坑全记录

问题一:磁盘空间显示满了,但du找不到大文件。最开始我用du -sh /一层层往下钻,发现每层目录加起来跟总占用对不上。后来怀疑是有文件被删了但进程还持有句柄,执行lsof | grep deleted果然找到了一个被删除的几百 MB 日志文件,PID 属于正在运行的 Java 服务。解决办法是将服务重启,或者定位/proc/<pid>/fd下对应的文件句柄,用ls -l /proc/<pid>/fd | grep deleted找出来再清理空间。

问题二:文件权限明明给了777,程序还是报“Permission denied”。后来发现是挂载的分区用了noexec选项,文件根本不允许执行。用mount查看挂载参数,确认后调整/etc/fstab里对应分区的挂载选项。从这个案例我总结出两个排查顺序:先看文件属主和权限,再看父目录权限,最后检查挂载选项和 SELinux/AppArmor。

问题三:在 WSL 里删除了大文件,Windows 磁盘空间没有释放。WSL2 使用虚拟磁盘文件,删除文件后空间不会自动还给宿主机。常见思路是重启 WSL 让系统清理一遍,或者手动压缩 vhdx 文件:先wsl --shutdown,再以管理员身份运行diskpart,选择虚拟磁盘文件并执行 compact 操作。这类问题本质上是虚拟磁盘的“瘦身”机制,不是删除操作本身出错。

问题四:解压文件出现中文乱码。通常是压缩包的编码跟系统默认不一致。Linux 下许多 zip 包用 GBK 编码打的中文文件名,直接 unzip 会乱码。解决办法是用支持指定编码的工具:

unzip -O GBK file.zip

这个-O参数在部分 unzip 版本里可用,如果没有该参数,可以用 Python 脚本或安装unzip的补丁版本。还有一个方案是解压后用convmv批量转换文件名编码。总之,遇到乱码先判断是文件名乱码还是文件内容乱码,两者处理思路完全不同。

问题五:刚学 Linux 时在 /etc 下瞎改配置,导致系统起不来。那台机器最后只能用单用户模式进去修复。从那以后,我给自己立了一条死规矩:所有系统配置文件改动前先备份,能不动/etc就不动,即便要动,也是先cp一份.bak,然后修改、验证、确认没问题后再保留。

7.3 面试前如何系统复习 Linux 命令,高频考点清单

Linux 命令是面试必考项,这里把高频考点整理成方便自查的清单:

  • 文件操作:ls -l每个字段含义;ln -s与硬链接区别;find-name/-size/-mtime/-exec
  • 文本处理:grep常用参数;sed替换;awk取列与分隔符;sortuniq配合;wc -l
  • 权限管理:chmod 数字法原理;setuid/setgid/sticky bit;sudovisudo配置。
  • 系统监控:tophtop的区别;free中 available 的含义;dfdu的对比;ps -efps aux
  • 网络排查:pingsstelnet/nc的适用场景;curl 的-I/-X/-H/-d参数。
  • 软件与服务:systemctl 的 start/stop/restart/enable 操作;apt/yum 常见命令对照。
  • 性能分析:会看top里 load average;知道iostatsar能查什么;遇到 CPU 飙高能说出top按 CPU 排序的排查路径。

面试答题时,除了背命令,还要能说清“为什么”。比如除了写cat access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head,还要能解释uniq -c为什么必须先 sort、sort -rn为什么能按数字倒序,这样面试官才会觉得你是真用过而不是死记硬背。

8. 日常使用中的效率提升建议

8.1 配置个性化 shell 环境:alias 与 .bashrc

我每次拿到新服务器,第一件事就是整理~/.bashrc,把高频命令缩写成语义清晰的别名。以下是我个人最常用的几组:

alias ll='ls -alF' alias la='ls -A' alias l='ls -CF' alias grep='grep --color=auto' alias egrep='egrep --color=auto' alias du='du -h' alias df='df -h' alias ..='cd ..' alias ...='cd ../..' alias cls='clear'

grep --color=auto这个别名对排查日志的帮助很大,匹配内容会在终端里高亮,扫报错时肉眼能快速聚焦到关键字段。ll在大部分发行版默认已有,但有些精简系统里没有,手动设置能保证体验一致。

别名之外,~/.bashrc还可以追加自定义函数。比如我常用的“在指定目录下启动一个简易 HTTP 服务,方便局域网内传文件”:

alias serve='python3 -m http.server 8000'

一执行这台机器的 8000 端口就开了一个文件服务,同事直接在浏览器访问http://<ip>:8000就能下载当前目录的文件。团队协作时这个操作非常省事,但也提醒一句:用完后记得关掉,不然等于给局域网开了个匿名共享

8.2 用 systemd 管理服务,运维工作更省心

现代主流发行版的服务管理都交给了 systemd,核心命令是systemctl。至少要把这些掌握到手:

systemctl start nginx # 启动服务 systemctl stop nginx # 停止服务 systemctl restart nginx # 重启服务 systemctl enable nginx # 设置开机自启 systemctl disable nginx # 取消开机自启 systemctl status nginx # 查看服务状态 systemctl daemon-reload # 重载配置文件 journalctl -u nginx -f # 查看服务日志并实时跟踪

排查服务起不来时,systemctl status只给一部分信息,核心排查动作要看journalctl -u 服务名 -n 50,直接看最近 50 行日志。很多新手只盯着 systemctl status 的红字,忽略了真正记录报错的 journal 日志,绕了不少弯。如果服务配置被改动过,别忘了先daemon-reload再 restart,否则改动可能不会生效。

除了系统自带服务,自己写的小程序也可以用 systemd 守护。在/etc/systemd/system/myapp.service放一个 Unit 文件,定义启动命令、工作目录、日志输出路径,然后 enable + start 就能托管。它自动处理崩溃重启、开机自启、标准输出采集,比自己写 nohup 脚本优雅得多。

8.3 压箱底命令清单,这些命令关键时刻能救命

最后分享几条不那么常见、但每个都可能在极限时刻救你一把的命令:

# 找出当前目录占用空间最大的 20 个文件 find . -type f -printf '%s %p\n' | sort -rn | head -20 # 快速杀掉名为 chrome 的全部进程,注意精确匹配 pkill -f chrome # 查看系统开机时间与运行时长 uptime # 查看系统发行版信息 cat /etc/os-release # 实时查看系统整体 CPU/内存占用 vmstat 1 5 # 查看某个进程的线程数 ps -L -p <PID> | wc -l # 查看端口连接状态统计(有利于排查 TIME_WAIT 过多问题) ss -ant | awk '{print $1}' | sort | uniq -c # 从文本中提取所有 IP 地址 grep -oE "[0-9]{1,3}(\.[0-9]{1,3}){3}" access.log | sort | uniq # 定时任务编辑 crontab -e

ss -ant统计连接状态,是我排查高并发服务 TIME_WAIT 过多时的常用手段。TIME_WAIT 本身不是错误,但数量异常高时说明连接释放频率异常,可能需要调内核参数,这一条在性能排查里很有价值。

我自己还有一个强烈推荐的习惯:每条“救命命令”都配一条注释,记清楚是在什么场景下写的。几个月后翻笔记,看到注释才知道当初为什么要这么做,比光秃秃的命令有用得多。

9. 从记命令到用命令,最后分享一点个人体会

Linux 命令的学习曲线其实不陡,难的是从“看得懂”到“用得顺”的那道坎。我自己跨过这道坎的标志,不是背下来几百条命令,而是开始不自觉地用管道把简单命令组合成一条“小流水线”去解决一个实际问题,比如拿find定位文件、grep过滤内容、awk提取字段、sortuniq统计分析。这种组合能力靠看手册是学不来的,只有多上手、多踩坑、多把笔记本里的碎片拼起来。

如果你现在刚入门,我的建议是不要贪多,先把文件操作、文本处理、系统状态这三块吃透。你不需要一开始就会所有命令,但最好从第一天就养成两个习惯:一是所有重要文件操作前三思而后行;二是遇到不认识的输出,先试试--helpman。时间久了,很多命令自然就长在身上了。

这份速查手册只是起点,真正的速查表是你自己的笔记。碰到一条让你豁然开朗的命令,就记下来,配上当时的使用场景。半年后翻一翻,你会发现自己已经积累下一笔谁都没法拿走的财富。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询