聊到 Linux我身边不少朋友第一反应是“黑乎乎的窗口怎么用”。其实这个系统能流行这么多年靠的就是一套设计得非常精巧的基本指令。这篇文章直接把我平时用得最勤的 Linux 基本指令拿出来不是为了让你背清单而是带着实际场景讲明白每个指令在什么时候用、为什么这么用。标题写了 20 个但实际讲的时候会顺手带出几个关联命令因为真实使用里它们经常一起出现拆开反而奇怪。适合刚接触 Linux 的新手也适合想把这些指令从“会敲”变成“用得顺手”的人。这篇内容我尽量按“遇到问题 → 用什么指令 → 为什么有效”的思路来讲而不是简单罗列命令加参数。你跟着过一遍会发现 Linux 的操作逻辑其实很统一理解了这套逻辑之后遇到没见过的命令也能猜个七八分。1. 内容整体设计与思路拆解1.1 为什么这 20 个基本指令够用很多人一看到网上的“Linux 命令大全”就头大几百上千条命令光参数就能写一本书。但冷静想一下日常工作和学习中真正高频用到的指令两只手基本数得过来。Linux 的使用场景大致就这几类找文件、看内容、挪位置、改权限、管用户、查进程、看资源、网络排查、打包解压。每一类里挑出最常用的两三个就是一套完全能撑起日常操作的指令集。我这篇选指令的标准有三个。第一是高频像ls、cd、grep这种每天要敲几十次的必须覆盖。第二是不可替代性比如kill虽然简单但没有它你就没办法处理失控进程。第三是组合价值grep单独用很强和管道符|一组合更是质的飞跃这类指令值得花时间吃透。至于像vim、systemctl这类功能更复杂的工具虽然有学习价值但不算“基本指令”放到后续内容单独展开更合适。1.2 按场景分类比按字母死记更高效网上很多命令清单是按字母表排列的从alias到zip依次排下来看着整齐但对学习者和使用者都不友好。因为命令不是孤立存在的它们是解决实际问题的工具。真正高效的记忆方式是场景驱动你在“看日志”这个场景里需要tail、grep、less配合使用在“排查端口被占”的场景里需要ss、ps、kill联动。把命令挂到场景下以后遇到类似问题脑子会自动把这些工具串起来而不是一个参数一个参数地去搜。这也是我把文章分成“目录文件、权限用户、进程系统、网络压缩”四大块的原因。Linux 的哲学是“一切皆文件”所以文件和目录操作是地基权限和安全是所有多用户系统的核心进程管理是你和系统内正在运行的任务打交道的手段网络和压缩则是服务器运维中绕不开的高频场景。四大块覆盖了一个人在一台 Linux 机器上从登录到干活的完整路径。1.3 理解了命令的语法共性再也不用死记选项Linux 基本指令的语法结构极其统一几乎所有命令都是这个格式command [选项] [参数]。command是你要执行的命令本身选项是控制命令行为的开关参数是命令操作的对象。比如ls -l /homels是命令-l是选项表示以详细列表形式展示/home是参数表示要查看哪个目录。大多数命令都支持短选项一个短横线加一个字母如-l和长选项两个短横线加单词如--help。这个共性带来的好处是你学新命令时只需要记三件事——这个命令干什么用、它有哪些常用的选项开关、它操作的对象是什么。参数和选项的排列灵活度很高有时候先写参数后写选项也能跑通但建议养成“命令 选项 参数”的稳定习惯脚本里尤其要规范。理解了这套规则即使遇到完全陌生的命令先跑一遍command --help或者man command就能自己摸索出用法不需要死记硬背。我见过不少人学 Linux 喜欢盯着一个命令从头到尾背参数其实效率很低。正确姿势是先用起来遇到具体需求再去查选项用着用着就熟了。2. 目录与文件操作覆盖日常一半操作的指令2.1 定位与浏览pwd、ls、cd这三个命令是所有操作的起点。你登录进系统第一件事就是搞清楚“我在哪”“我旁边有什么”“我想去哪”对应就是pwd、ls、cd。pwdprint working directory用来显示当前所在的绝对路径。听起来简单但当你一层层进入嵌套目录后真的会忘记自己在哪。尤其是排查别人配置的服务器时先pwd确认位置再动手操作这是非常稳妥的习惯。lslist是最常用的列表指令。最基础的是直接ls看当前目录下有什么但实际我更推荐这几个组合ls -l # 以详细列表显示包含权限、属主、大小、修改时间 ls -a # 显示隐藏文件以.开头的文件 ls -lh # 以人类易读的方式显示文件大小K、M、Gls -l的输出里第一列那串字符比如drwxr-xr-x是权限信息第一个字符表示类型d代表目录-代表普通文件后面每三个字符一组表示所属用户、所属组、其他人的权限。这点在第三章讲权限时还会详细展开。cdchange directory用于切换目录常用的几种写法建议记牢cd /etc # 使用绝对路径切换 cd .. # 回到上一级目录 cd ../.. # 回到上两级目录 cd ~ # 回到当前用户的家目录 cd - # 回到上一次所在的目录cd -这个小技巧特别实用你从/var/log跳到/etc处理完事情一条cd -直接回到刚才的日志目录省得打一长串路径。2.2 增删改移mkdir、cp、mv、rm这四条命令负责文件系统里的“增删改移”也是新手最容易误操作的几个。mkdirmake directory创建目录。最常用的是-p参数可以一次性创建多级目录mkdir -p /data/logs/app1如果直接mkdir /data/logs/app1而/data/logs不存在系统会报错。加上-p后缺失的父目录会被一并创建。这个参数在写部署脚本时几乎必用。cpcopy复制文件或目录。复制文件很直观cp /etc/hosts /tmp/hosts.bak复制目录时必须加-rrecursive递归否则会报错。另外-a是归档模式比-r更全面能保留文件的权限、时间戳等属性备份配置时我习惯用cp -a。mvmove主要做两件事移动文件、重命名。mv old.txt new.txt是重命名mv /tmp/test.txt /data/是移动。有个底层细节值得知道在同一文件系统内mv只是修改文件名指向速度极快跨文件系统移动时系统会先复制再删除原文件。理解了这一点你就知道为什么大文件跨分区移动会那么慢了。rmremove删除文件或目录。日常用没问题但经典的rm -rf是高风险操作rm -rf /data/app/cache-r表示递归删除目录及其内容-f表示强制删除且不询问。这个组合威力巨大特别提醒路径一定要确认清楚再敲回车尤其是根目录下的操作。我见过有人脚本里写错变量导致删错目录那感觉真的很酸爽。建议平时没事别轻易用-f让系统多问你一句反而是保护。2.3 文本查看与搜索cat、head、tail、grep、findLinux 下大量信息以文本形式存在怎么快速看文本、查内容是日常效率的关键。cat是直接输出文件全部内容适合查看小文件。常用cat -n带行号输出。但大文件千万别用cat直接看几十万行日志会把屏幕刷爆这时候要交给head、tail或者less。head查看文件开头部分tail查看文件结尾部分。前者默认前十行后者默认后十行都可以用-n指定行数head -20 /etc/passwd tail -50 /etc/passwdtail还有一个版本无法替代的参数-ffollow会持续跟踪文件新增内容并实时输出。排日志、看服务运行状态时tail -f app.log往终端一挂新日志不断滚出来信息一目了然。这是运维领域使用频率最高的指令之一几乎每个老手都离不开它。grep是内容过滤神器作用是按文本内容搜索文件里的匹配行。几个高频参数grep -r ERROR /var/log/ # 在目录下递归搜索找出所有包含ERROR的文件 grep -i error app.log # 忽略大小写搜索 grep -n error app.log # 显示匹配行所在行号 grep -v ^# /etc/ssh/sshd_config # 反向匹配过滤掉注释行grep最好的搭档是管道符|把前面命令的输出结果交给后面命令处理。比如我想日志里找最后一百行里的错误信息tail -n 100 app.log | grep ERROR这条命令由两部分组成tail -n 100取出最后一百行交给grep过滤出含ERROR的行。两个简单命令组合在一起解决了很实际的问题。这就是为什么我强调组合能力——单个命令再强也有限连起来才是真正的战斗力。find是按属性找文件跟grep正好互补。find按文件名、大小、时间等条件找grep按文件内容搜。最常见的用法find /etc -name *.conf # 在/etc下找所有.conf后缀的文件 find /data -type f -size 100M # 找/data下大于100M的普通文件 find . -name *.log -mtime -1 # 找当前目录下最近一天内修改的日志文件用find全盘搜索时注意范围控制比如find /会扫整个文件系统很慢也没必要。一般先缩小到可能存在的目录效率会高很多。3. 权限、用户与进程三个绕不开的管理主题3.1 文件权限的数字密码chmod与chownLinux 是多用户系统权限机制是它的核心设计之一。每个文件和目录都有读r、写w、执行x三种权限分别针对三类人属主u、属组g、其他人o。权限用数字表示时r 等于 4w 等于 2x 等于 1。三组权限各自相加拼在一起就是三位数字。比如755属主有 rwx4217属组有 r-x415其他人有 r-x5。这是目录最常见的权限组合属主可读写执行其他人只能读和执行不能改动内容。644属主有 rw-6属组和其他人有 r--4。普通文件常用这个属主可以编辑其他人只读。600属主有 rw-其他人什么权限都没有。敏感文件如 SSH 私钥推荐这个权限。修改权限用chmod命令chmod 755 /data/app/run.sh # 直接指定数字权限 chmod x /data/app/run.sh # 给所有角色加上执行权限临时执行脚本很常用 chmod -R 755 /data/app/ # -R 递归修改目录下所有文件和子目录修改属主和属组用chownchange ownerchown root:root /etc/nginx/nginx.conf # 同时修改属主和属组 chown -R app:app /data/app/ # 递归修改整个目录的归属很多新手一执行脚本就报“Permission denied”八成是没加执行权限。但反过来权限不是越松越好。我有一个实操建议目录给 755、普通文件给 644、配置文件按需收紧这是比较稳妥的起点原则。上来就chmod 777确实能解决一切权限问题但也会让访问控制形同虚设。3.2 用户管理useradd、passwd、su与sudo的取舍服务器的账号管理是系统管理员的必修课。useradd用于新建用户常用的完整写法是useradd -m -s /bin/bash testuser-m表示同时创建用户的家目录/home/testuser-s指定默认 shell 为 bash。如果不加-m可能连/home/testuser目录都不生成用户登录后没地方去后续会麻烦。passwd用来设置或修改密码。普通用户直接执行passwd修改自己的密码root 用户可以指定用户名强制修改其他人的密码passwd testuser有一个新手容易踩的坑刚用useradd创建的用户实际上无法登录因为密码还没有设置。系统会处于“用户存在但密码为空”的状态这个情况下要先passwd 用户名设置密码用户才能真正使用。账号切换和提权的四个命令是su、sudo、sudo -i它们之间有些微妙的区别su - root # 切换到 root 用户- 表示同时加载 root 的环境变量 sudo command # 以 root 权限执行单条命令不会切换用户 sudo -i # 使用 sudo 方式进入 root 环境拿修文件举例你要改/etc/hosts如果只是改这一下sudo vim /etc/hosts就够了但如果接下来要连续执行一系列管理操作sudo -i切到 root 环境效率更高。日常使用推荐优先sudo而不是su切到 root因为sudo能记录操作日志、只授予当前命令的提权风险更可控。3.3 进程查看与干预ps、top、kill进程是正在运行的任务。排查“系统为什么卡了”“某个服务是不是挂了”都离不开进程相关指令。psprocess status是查看当前进程快照的命令。两个经典用法ps -ef ps aux两者显示的信息类似都包含进程的所有者USER、PID进程号、父进程 PPID、CPU 和内存占用、启动时间、执行命令等。实际使用中ps -ef | grep java是查看某个特定服务进程的标准姿势。grep过滤出包含 java 的行另外再配合grep -v grep可以过滤掉 grep 自身的进程。top是实时刷新版的进程查看器能看到系统整体的 CPU、内存使用情况以及按资源占用排序的进程列表top进入top交互界面后按P按 CPU 占用排序按M按内存占用排序按q退出。还有一个很有用的指标是load average后面三个数字分别代表最近 1 分钟、5 分钟、15 分钟的系统负载。如果你这台机器只有 2 个 CPU 核而负载长期超过 2说明系统一直在排队等资源这就是明显的性能信号。kill用来向进程发送信号最常用的是终止进程kill 1234 # 用PID终止进程默认发送TERM信号让进程自行退出 kill -9 1234 # 强制终止发送KILL信号内核直接杀掉进程优先使用不带-9的kill给进程一个处理收尾工作和释放资源的机会。如果等了几秒进程还在再用kill -9强杀。一上来就-9虽然简单粗暴但可能导致数据损坏或状态不一致不适合处理数据库这类有状态的服务。按名字批量杀进程可以用pkill -f 关键词不过要确认关键词足够精确避免误杀别的进程。4. 系统资源与网络排查我每天都会用到的场景4.1 df与free磁盘和内存一眼看穿有没有遇到过这种情况服务突然写不进日志数据库莫名报错结果一看磁盘满了。所以查看磁盘空间应该成为一种条件反射式的习惯。df是查看文件系统磁盘占用情况的命令基本用法df -h-hhuman-readable会自动把数字换算成 K、M、G不用自己心算。输出里看Mount那一列根分区/的使用率是最常关注的一般超过 85% 我就会开始清理超过 90% 基本就是近在眼前的故障了。磁盘满了以后不光服务写文件失败系统自身的一些临时文件机制也可能受影响表现出来的现象可能很奇怪。free查看内存使用情况free -h输出里有total、used、free、buff/cache几列。很多新手看到free很小就慌了其实 Linux 的内存管理策略是“内存闲着也是闲着”会尽量用空闲内存做文件缓存所以buff/cache那一列数值大很常见。真正要警惕的是swap交换分区的使用率如果 swap 长期大量占用说明物理内存已经不够用了系统在被迫把内存里的数据往磁盘上搬性能会明显下降。4.2 ping、ip、ss网络排查的标准流程网络问题排查有一个基本流程先确认网络通不通再确认端口通不通最后确认进程是否在监听。刚好对应三个指令。ping用来测试与目标主机的网络连通性ping -c 4 baidu.com-c 4表示发送 4 个包就停止不然会一直 ping 下去。如果ping能通说明从这台机器到目标主机网络层是通的。但这里有个容易忽略的细节ping通只代表网络层通不代表服务端端口开放。想确认端口状态要用ss或telnet。查看本机 IP 地址老的指令是ifconfig现在更推荐ipip addrip是新一代网络配置命令输出逻辑更清晰而且所有新发行版基本都预装了。有些机器没装ifconfig工具但ip一般是可用的。ip addr里的inet后面跟的就是这台机器的 IP 地址。ss用来查看本机的网络连接和监听端口状态排查“端口被占用”是第一神器ss -tlnp这四个参数的意义-t只看 TCP-l只看监听中的端口-n用数字显示端口号不解析服务名-p显示对应的进程。输出里如果有LISTEN 0 128 0.0.0.0:8080这样的行说明 8080 端口正在被某个进程监听最后一列 Process 会直接告诉你进程 PID 和名字。一个典型场景服务启动时报“端口已被占用”排查流程就是ss -tlnp | grep 8080找到占用的 PID然后用ps -ef | grep PID看清是什么进程最后决定是保留还是kill。到这一步一个完整排查链路就通了。4.3 tar、unzip压缩解压的高频操练服务器之间传文件、备份目录、发布代码每天都在跟压缩包打交道。Linux 里最常用的是tar和unzip。tar本身是打包工具配合压缩算法可以生成.tar.gz这样的文件。常用的有两组打包压缩tar -czvf name.tar.gz /data/app/解压tar -xzvf name.tar.gz参数记忆有口诀-c是创建create-x是解压extract-z表示用 gzip 压缩格式-v显示过程verbose-f指定文件名。如果要解压到指定目录加-Ctar -xzvf name.tar.gz -C /tmpunzip解压.zip文件unzip package.zip unzip package.zip -d /data/www # 解压到指定目录日常工作中文件打包解压最常遇到一个麻烦从 Windows 传到 Linux 的中文名 zip 压缩包解压出来文件名全是乱码。原因是 Windows 下 zip 默认用 GBK 编码记录文件名而 Linux 默认是 UTF-8。解决办法是unzip时指定编码unzip -O GBK package.zip如果系统里的unzip不支持-O参数可以换用python的 zipfile 处理或者用图形界面工具。这个坑不算难解但第一次遇到真会愣住提前知道能省不少时间。生产环境我还有一个习惯解压前先了解压缩包内容而不是直接解压。可以用tar -tzf name.tar.gz或unzip -l package.zip查看压缩包内的文件列表确认没有异常路径后再解压。收到不明来源的压缩包尤其要养成这个习惯避免被解压出的奇怪文件覆盖系统关键目录。5. 常见问题与排查技巧实录5.1 七种高频报错的定位与处理我把日常使用中最常遇到的报错整理成一张速查表这些基本都是新手期的“老朋友”。报错信息原因分析常用处理command not found命令没安装或不在 PATH 环境变量里确认是否装了对应软件包或用绝对路径执行Permission denied没有执行权限或当前用户无权访问chmod x加执行权限或用sudo提升权限No such file or directory路径写错或文件不存在检查路径拼写用ls确认Directory not empty删除或移动目录时目录非空确认是否需要递归删除或移动再加对应参数Address already in use端口被其他进程占用ss -tlnp查占用进程处理后再启动Disk quota exceeded或No space left on device磁盘满df -h确认分区使用率du -sh *找大文件清理tar: Error opening archive压缩包已损坏或参数不对用file查看文件类型确认用对了解压工具zip 解压文件名乱码编码不匹配GBK 与 UTF-8unzip -O GBK指定编码解压这里再补充一个细节报错说command not found不一定代表系统里没有这个工具。有时候是当前用户的 PATH 环境变量里没有包含可执行文件所在目录比如某些软件默认安装在/usr/local/bin而你的 PATH 没带上。这时候可以用which 命令名或者直接ls /usr/local/bin检查。5.2 终端里的效率小技巧掌握几个高频快捷键和技巧效率能提升一大截Tab 补全输入路径或命令开头几个字母按 Tab 自动补全按两次 Tab 会列出所有可能匹配项。省时省力还能减少拼写错误。Ctrl C中断当前正在运行的前台命令。比如tail -f挂着看日志看够了按 Ctrl C 退出。Ctrl D发送 EOF文件结束符在终端里相当于退出当前 shell按多了就会退出登录。上方向键查看历史命令找到之前敲过的命令直接回车复用。Ctrl R反向搜索历史命令。输入关键词自动匹配历史记录里最接近的那条命令。clear快捷键Ctrl L快速清屏比敲clear快一步。history查看完整的历史命令列表。想看第 N 条命令输入!N可以直接重跑该命令。还有一个习惯值得分享用alias给高频命令起短名。比如alias llls -l alias grepgrep --colorauto不过alias在终端里设置只对当前会话有效想永久生效需要写到~/.bashrc文件里写完后执行source ~/.bashrc让配置立即生效。我一般会配几个固定别名比如ll、la、grep加颜色长期下来节省不少时间。5.3 一个“命令笔记”的整理思路很多初学者学完一个命令就丢过两天又忘反复查询挫败感很强。我的经验是不动笔墨不读书但不是抄写参数表而是建一个“场景笔记”。具体做法是在本地建一个 Markdown 文件按场景记录自己实际跑过的命令和解决的问题。格式可以很随意比如## 场景启动一个 Python 服务并后台运行 nohup python app.py app.log 21 ## 场景解决磁盘满问题 df -h # 看哪个分区满 du -sh /var/log/* # 找大文件这个笔记有一个很大的作用它不是命令大全的搬运而是你自己经历过的解决路径。记录时自然会把“为什么用这个命令”“前面遇到了什么坑”写进去这些上下文信息才是你能长期记住命令的核心资本。等积累了两三百条之后你会发现很多命令是循环重复的真正用到的就那么几十个而那些高频命令就是你的熟练区已经不需要翻笔记了。另外我还有个习惯遇到不确定的命令先man 命令查手册而不是急着上网搜。man输出确实比较枯燥但它是第一手权威资料参数解释准确看多了还能逐渐习惯英文技术文档的阅读方式。不想看全文直接/关键字可以在手册里搜内容按n跳到下一个匹配项按q退出这套操作就是在终端里翻阅长文档的标准方式。最后再分享一个小技巧。我刚接触 Linux 那阵子总想着多背几个冷门命令后来发现自己实际用的始终是那二三十个。真正让效率提升的不是多背命令而是把常用命令和它的场景绑在一起形成条件反射。比如看到磁盘满了脑子里自动浮现 df -h、du -sh 这个组合服务起不来第一反应就是 tail -f 日志配 grep 过滤端口冲突条件反射就是 ss -tlnp。你把这些基本指令用成肌肉记忆之后会发现处理问题的心态完全不一样那些看起来花哨的黑窗口操作其实也就是一层窗户纸的事。