☰
Linux基础命令学习指南:从常用指令到实战排障的20条核心命令
2026/9/29 1:30:35 网站建设 项目流程

写这篇东西的起因挺简单:后台和评论区隔三差五就有人问“Linux 到底先学什么”“有没有一份能直接抄的常用指令清单”“面试被问 Linux 基础命令怎么办”。我干这行这么多年,带过不少新人,也面试过不少人,一个很深的感触是——Linux 入门不靠啃文档,靠的是在终端里把命令一条一条敲出来。

这篇就把我日常用得最多的 20 个 Linux 基本指令整理出来。不是什么命令大全,也不打算堆砌冷门参数,我把每个命令放在真实场景里讲:什么时候用、核心参数是什么、容易踩什么坑。不管是刚开始接触服务器的新手,还是准备面试的初级运维、后端开发,这 20 条命令都能帮你快速上手,至少不会在终端里手足无措。

1. 先弄清楚:为什么是这 20 个指令

1.1 20 个指令全景清单

先放一张总表,把全文涉及的指令列清楚。这个表格不是给你背的,是让你有个全局观——原来 Linux 基础命令就这几类,每类抓住一两个核心命令就够了。

指令作用使用频率一句话点评
pwd显示当前目录路径极高迷路时的指南针
ls列出目录内容极高最常用的命令,没有之一
cd切换工作目录极高配合 Tab 键效果翻倍
mkdir创建目录高加 -p 可递归创建
touch创建空文件高也能用来更新时间戳
rm删除文件或目录高最危险的命令,慎用 -rf
cp复制文件或目录高复制目录必须加 -r
mv移动或重命名高同分区移动瞬间完成
cat查看文件全部内容高适合小文件
less分页浏览文件高大文件神器
head查看文件开头高看日志头部很方便
tail查看文件结尾极高tail -f 是日志排查神器
grep文本搜索过滤极高管道组合威力无穷
whoami显示当前用户名高时刻记住自己是谁
id查看用户身份和组信息中比 whoami 更详细
sudo以管理员权限执行极高权限不够时的钥匙
chmod修改文件权限高数字权限法一定要理解
ps查看进程状态极高排查进程问题首选
df查看磁盘空间高磁盘满的第一诊断命令
du查看目录占用空间高找大文件的利器
ping测试网络连通性高排查网络问题第一步
curl发送 HTTP 请求高接口调试下载两不误
man查看命令帮助中最好的内置“说明书”

这里我算了一下,清单里实际列了 23 个命令,但这不矛盾。核心的 20 个指令之外,head、id、df、du 等都是同一主题下的强关联命令,放在一起学效率才高。后面正文会按主题分组讲解,不会让你东一榔头西一棒子。

1.2 分组背后的逻辑

网上搜“Linux 常用命令大全”能搜出一长串几百条命令的清单,但说实话,那种列表对新手没什么用——你记不住,也用不上。我整理这 20 多个指令的时候,遵循一个原则:只看使用频率和排障价值。

整个命令集被我分成四块:

  • 文件与目录操作:pwd、ls、cd、mkdir、touch、rm、cp、mv。这是你上服务器之后 60% 时间在做的事。
  • 文件内容查看:cat、less、head、tail、grep。服务器出问题,第一件事就是看日志,这组命令就是干这个的。
  • 用户权限与系统状态:whoami、id、sudo、chmod、ps、df、du。涉及“我是谁”“我能干什么”“系统现在什么情况”。
  • 网络排查与帮助:ping、curl、man。网络不通、不知道怎么用某个命令时,就靠它们。

为什么这样分组?因为 Linux 命令不是孤立的。实际工作中你不可能只说“我用一下 grep”,而是“先 cd 到日志目录,再 tail -f 看最新日志,再用 grep 过滤关键字”。命令组合起来用才是真实场景。我把它们拆成主题,就是想让读者从“背命令”变成“按场景查命令”。

2. 文件与目录操作:每天都在用的几条

2.1 pwd / ls / cd:先搞清楚“你在哪、有什么、要去哪”

pwd 是 print working directory 的缩写,作用就是告诉你当前在哪个目录。为什么它这么重要?因为 Linux 的命令行没有地址栏,你敲的所有相对路径、所有文件操作,都是基于当前目录的。特别是当你通过 SSH 登录到一台服务器,或者写脚本操作文件时,一旦搞不清自己在哪,后面所有操作都是盲人摸象。

[root@localhost ~]# pwd /root

看到输出是 /root,就知道当前在家目录。新手最容易犯的错就是不看路径,稀里糊涂敲了一堆命令,回头发现文件创建在了一个自己都找不到的地方。我的习惯是:切换服务器之后第一件事永远先敲一下 pwd。

ls 是 list 的缩写,列出当前目录下的文件和文件夹。光敲 ls 只能看到文件名,信息太少,我日常几乎都是用组合参数:

ls -l # 详细列表,显示权限、属主、大小、修改时间 ls -a # 显示所有文件,包括以点开头的隐藏文件 ls -lh # 人类可读的大小显示,文件大的时候是 K、M、G 而不是字节数 ls -lt # 按修改时间排序,新的在前

这里有个小坑:Linux 下以点开头的文件默认是隐藏的,普通 ls 看不到。很多配置文件都是隐藏的,比如 .bashrc、.gitconfig。你不加 -a 就找不到它们。第一次发现“明明文件在,ls 却看不到”的人不在少数。

cd 是 change directory,切换目录。这个命令本身很简单,但有几个容易被忽略的用法:

cd # 不带参数,回到当前用户的家目录 cd ~ # 同样回到家目录 cd .. # 回到上一级目录 cd - # 回到上一次所在的目录 cd /etc # 绝对路径切换

cd - 这个用法很实用,我经常在两个目录之间来回切,比如一个目录放代码、一个目录放日志,一条 cd - 就跳回去了,不用重新敲路径。另外一个忠告:一定要养成按 Tab 键补全的习惯。输入 cd /etc/ngi 然后按 Tab,系统会自动补全成 /etc/nginx/,不用你一个字母一个字母敲。碰到不会拼的目录名,Tab 是最靠谱的老师。

2.2 mkdir / touch / rm:新建和删除的基本功

mkdir 是 make directory,创建目录。最常用的参数是 -p,可以递归创建多级目录:

mkdir myproject mkdir -p /data/logs/2025/06

不加 -p 的时候,如果父目录不存在,命令会报错“No such file or directory”。加上 -p 之后,系统会一次性把 /data、/data/logs、/data/logs/2025、/data/logs/2025/06 全部创建出来。这种设计很符合直觉:我就是要这个目录结构,缺哪层补哪层。

touch 有两个作用。第一是创建空文件:

touch server.conf

第二是更新时间戳。如果文件已经存在,touch 会把它的最后修改时间改成当前时间。这个用途在编译、备份场景里很实用,比如你想强制某些工具认为文件“刚刚被改过”,touch 一下就行。

rm 是 remove,删除文件或目录。这是 Linux 世界里最需要敬畏的命令。删除单个文件很简单:

rm old.log

但真正危险的是这句:

rm -rf /some/directory

-r 表示递归删除目录下的所有内容,-f 表示 force,不询问直接删。这个组合一旦用错,后果是灾难性的。我见过不止一个同事,本来想删某个临时目录,结果多敲了一个空格或者路径写错,把重要的项目文件删了个精光。如果你用的是云服务器且没做快照,那基本等于数据彻底没了。

我的建议是:新手在熟练之前,先在 .bashrc 里加一行alias rm='rm -i',让每次删除都询问确认。等你真正清楚自己在干嘛,再考虑去掉这个保护。另外记住一个原则——rm -rf 后面的路径,永远要先用 pwd 看一眼,确认你不在根目录。

2.3 cp / mv:复制与移动的细节

cp 是 copy,复制文件或目录。最核心的参数是 -r,复制目录时必须加:

cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak # 备份配置文件 cp -r /data/project /data/project_backup # 整个目录复制

cp 命令有个容易忽略的细节:复制的时候会保留源文件的权限属性吗?默认情况下,普通用户用 cp 复制出来的文件,属主是当前用户,权限是由当前 umask 决定的,不一定和源文件一致。如果你要完整保留属主、时间戳和权限,得加 -p 参数:

cp -rp /data/project /data/project_backup

mv 是 move,移动文件。它和 cp 最大的区别是:同分区内的 mv 是瞬间完成的,因为它只是改了文件名指针,并没有把数据真的搬来搬去。只有跨文件系统移动时,mv 才会退化成为“复制 + 删除”。这也是为什么大文件迁移时,同分区 mv 比 cp 快得多的原因。

mv /tmp/install.log /var/log/install.log # 跨目录移动 mv oldname.txt newname.txt # 重命名

很多新手不知道 mv 可以用来重命名,其实文件重命名就是“把文件移动到另一个名字的位置”。这里有个坑:如果目标文件已经存在,mv 默认会直接覆盖,不打招呼。所以重要文件移动前,最好确认目标位置有没有同名文件。我常用的方法是先 ls 看一眼目标目录,或者给目标文件名加个日期后缀。

3. 查看文件内容:服务器排障的第一课

3.1 cat / less:小文件直接看,大文件分页看

cat 是 concatenate 的缩写,最原始的作用是“连接文件”,但现在大家基本上拿它当“快速查看文件内容”用。它适合查看很小的文件,比如几行配置:

cat /etc/hostname cat /etc/os-release

但 cat 有个明显的缺点:它会把整个文件内容一次性全部输出到屏幕。如果文件有几千行,你的终端会瞬间被刷屏,而且想看前面的内容早就滚出屏幕外了。所以大文件千万别用 cat。

这时候就该用 less。less 的设计理念就是“分页查看”,文件不管多大,它不会一次性全部加载到内存,而是按需要读取,所以打开几百 MB 的日志也不会卡死。

less /var/log/nginx/error.log

进入 less 的界面后,最基本的三件事:空格键往下翻页、b 键往上翻页、输入 /keywords 然后回车搜索关键字、按 q 退出。很多人第一次进 less 之后不知道怎么退出,急得直接关终端——记住,按 q 就对了。

我特别推荐新人养成“看文件优先用 less”的习惯。虽然 cat 更简单,但一旦你以后面对的是生产环境里动辄几个 GB 的日志,cat 根本扛不住。提前形成肌肉记忆,遇到大文件不慌。

3.2 head / tail:日志场景里的“黄金组合”

head 和 tail 一个看文件头、一个看文件尾,参数也基本一致,-n 指定行数:

head -n 20 /etc/passwd # 查看系统用户表中前 20 行 tail -n 50 /var/log/messages # 查看最近 50 条系统日志

但 tail 才是真正的“明星命令”,因为它有一个生产环境里几乎天天用到的参数:

tail -f /var/log/nginx/access.log

-f 是 follow,意思是“跟随”。命令执行后,它会持续打印日志文件新增的内容,不会退出。你一边刷新网页,一边能看到访问日志实时滚动出来。排查线上问题时,这个命令配合 grep 使用简直是神器:

tail -f /var/log/nginx/error.log | grep 500

这行命令的意思是把实时日志输出通过管道交给 grep,只显示出现“500”的行。这样就算日志刷得再快,你也能第一时间看到 HTTP 500 错误的身影。实际工作中排查接口报错、服务崩溃,基本都是这个套路。

注意一点:tail -f 命令会一直挂在那里,想退出就按 Ctrl + C。如果是在生产环境排查完问题,千万别忘了退出,否则你的 SSH 会话会被这个前台进程一直占着。

3.3 grep:从海量文件里捞信息

grep 是一个文本搜索工具,可以理解为“在一堆文字里找我要的内容”。它是整个 Linux 命令里最值得花时间学习的几个命令之一,因为所有排查类的活都离不开它。

最基本的用法是在单个文件里搜索关键字:

grep "error" /var/log/app.log

实际工作中更多是用管道组合。管道符 | 的作用是把前一个命令的输出作为后一个命令的输入,这就是 Linux 哲学的经典体现——每个命令做好一件事,然后用管道串起来完成复杂任务:

ps aux | grep nginx # 查看和 nginx 相关的进程 history | grep docker # 在历史命令里搜 docker 相关操作 cat /etc/passwd | grep "/bin/bash" # 找出所有能登录的普通用户

grep 的常用参数也值得记一下:

grep -i "error" log.txt # 忽略大小写 grep -n "error" log.txt # 显示行号,方便定位 grep -r "root" /etc/nginx/ # 递归搜索目录下所有文件 grep -v "debug" log.txt # 反向匹配,显示不包含 debug 的行 grep -E "error|warning" log.txt # 扩展正则,匹配多个关键字

这里给个实用场景:你怀疑某个服务的配置有问题,但不知道配置写在哪个文件里。一条grep -r "timeout" /etc/就能把 /etc 目录下所有包含 timeout 的行全找出来,再逐个确认。这种方式比自己盲猜路径高效太多。

4. 用户、权限与系统状态:别等出了事再学

4.1 whoami / id / sudo:搞清你现在的身份

Linux 是一个多用户系统,同一台服务器上可能有 root、普通用户、服务账号同时在跑。很多时候排查问题,第一步不是看配置,而是搞清楚“当前我是谁、我有什么权限”。

whoami 这个命令直译就是“我是谁”,输出当前用户名:

[root@localhost ~]# whoami root

id 命令提供的信息更全面:

[root@localhost ~]# id uid=0(root) gid=0(root) groups=0(root)

uid 为 0 表示这是超级管理员。普通用户的 uid 一般从 1000 开始,系统服务用户则在 1-999 之间。看到 uid=0 意味着你当前拥有全部权限,做任何操作都要格外小心。

sudo 是“用别人的身份执行命令”,默认是以 root 身份执行:

sudo systemctl restart nginx # 以管理员权限重启 nginx sudo -i # 切换成 root 的登录环境 sudo !! # 用 sudo 权限重新执行上一条命令

sudo !! 是个很多人不知道的黑科技。当你敲了一条命令发现权限不够,报错 Permission denied,这时候不需要重新敲整条命令,直接sudo !!,Shell 会自动把上一条命令用 sudo 再执行一遍,非常省事。

很多人还会问“怎么新建 Linux 用户”,这里顺带提一下:

sudo useradd -m -s /bin/bash zhangsan # 创建用户并创建家目录 sudo passwd zhangsan # 设置密码 sudo usermod -aG sudo zhangsan # 把用户加入 sudo 组

-m 表示创建家目录,-s 指定登录 Shell。创建完用户一定要记得设置密码,否则用户无法登录。这也是运维和开发岗位面试时经常被问到的基础操作,属于“看着简单,但真有人答不全”的知识点。

4.2 chmod:权限位的“三段式”拆解

chmod 是 change mode,修改文件权限。理解它是理解 Linux 安全模型的一把钥匙。用 ls -l 查看文件时,第一栏长这样:

-rw-r--r-- 1 root root 1024 Jun 6 10:00 nginx.conf

除去第一个字符(表示文件类型,- 是普通文件,d 是目录),后面有 9 个字符,分成三组:前三个是文件属主(owner)的权限、中间三个是属组(group)的权限、后三个是其他用户(others)的权限。每组里 r 表示读、w 表示写、x 表示执行,- 表示没有对应权限。

为什么chmod 644是 Linux 系统里最常见的文件权限?因为 6、4、4 是数字表示法:r=4、w=2、x=1,一组权限的数字就是这三个值之和。644 的意思是属主有读+写权限(4+2=6),属组和其他人只有读权限(4)。配置文件基本都该是这个权限——所有人都能读,但只有属主能修改。

我自己常用的组合:

chmod 644 file.txt # 普通文件,默认推荐 chmod 755 script.sh # 可执行脚本/目录,属主可写,其他人可读可执行 chmod 600 id_rsa # 私钥文件,只有属主可读写 chmod +x script.sh # 只加执行权限,不关心其他位 chmod -R 755 /www/html/ # 递归修改目录下所有文件

这里有几个容易踩的坑。第一个:不要随便对配置文件执行chmod 777,这等于把文件完全开放给所有人,是安全大忌。第二个:递归修改目录权限时要格外小心,我见过有人在网站根目录执行chmod -R 777 /,直接把整个系统的权限都改乱了,服务器基本报废。第三个:SSH 私钥文件如果权限“太开放”,SSH 客户端会直接拒绝使用,报 Permissions too open 的错误,必须改成 600 才能正常工作。

4.3 ps / df / du:看一眼系统的“体检报告”

服务器出了问题,不能光靠猜,得靠数据。ps、df、du 这三个命令就是从进程、磁盘两个维度给系统做体检。

ps 是 process status,查看进程状态。最常用的组合是 aux:

ps aux

这个命令输出的列里,USER 是进程所属用户、PID 是进程号、CPU 和 MEM 是资源占用、COMMAND 是启动命令。排查问题时最常见的操作是先定位进程,再决定是观察还是终止。配合 grep 使用效果最佳:

ps aux | grep java

这样能快速找出所有 Java 进程,看看它们是不是吃光了内存。

df 是 disk free,查看磁盘空间使用情况。生产环境里“磁盘满了”是最高频的故障之一,一条命令就能确诊:

df -h

-h 参数表示 human-readable,用 G、M 这样的单位而不是字节。看到 Use% 那栏是 100%,基本就实锤了。磁盘满会导致很多“莫名其妙”的问题,比如服务写不了日志、文件创建失败、数据库卡死。所以我每次上服务器,习惯性先敲一下 df -h。

du 是 disk usage,查看目录占用的空间。它和 df 的区别是:df 看的是整个分区的使用情况,du 看的是具体某个目录或文件占了多少:

du -sh /var/log # 查看 /var/log 目录总大小 du -sh * | sort -hr # 当前目录下所有子目录按大小排序

第二条命令特别实用,尤其是排查“服务器磁盘为什么满了”的时候,一条命令就能找出最大的目录,然后再一层层 du 下去,直到定位到“罪魁祸首”。经验告诉我,生产环境磁盘空间被日志文件占满的比例相当高,nginx 访问日志、Java 应用日志,几个月不清理就能吃掉几十个 G。

5. 网络排查与“万能说明书”

5.1 ping / curl:先确认通不通

遇到“服务访问不了”的问题,第一步永远是检查网络通不通。ping 就是干这个的:

ping 8.8.8.8

这个命令会持续发 ICMP 数据包直到你按 Ctrl + C 终止。如果想限制次数,可以加 -c 参数:

ping -c 4 baidu.com

发送 4 个数据包后自动退出。这个用法更适合写脚本或者在 CI 环境里做健康检查。看到 reply from 就说明目标可达,看到 Request timeout 或者 Destination Host Unreachable,要么是网络不通,要么是防火墙挡了 ICMP 协议。注意,有些服务器出于安全考虑禁了 ICMP 协议,这种情况下 ping 不通不代表服务一定挂了,需要进一步验证。

curl 是 network 排查的另一个利器,它能模拟 HTTP 请求,测试具体服务的可用性:

curl http://localhost:8080/health # 测试本机服务接口 curl -I http://example.com # 只查看响应头 curl -v https://api.example.com # 显示详细交互过程,包括 TLS 握手 curl -X POST -d "name=test" http://localhost:3000/api/user # 发送 POST 请求

curl 在排查问题时的好处是,它能完整展示服务端返回的响应码、响应头和响应体。比如你在浏览器里访问某个网站报 502,浏览器能展示的信息有限,但用 curl 就能看到 Nginx 网关返回的具体错误信息。我调试接口、检查 HTTPS 证书是否到期,基本都是 curl 一把梭。

5.2 man:最该早掌握的“说明书”

man 是 manual 的缩写,查看任何命令的完整手册。它可能是这份清单里最不“炫酷”的命令,但绝对是最值得早学会的。因为 Linux 命令的参数太多了,没有任何人能全记住,真正的技巧不是记忆,而是“会查”。

man ls # 查看 ls 的完整手册 man -k "copy" # 搜索和 copy 相关的命令

在 man 的界面里操作和 less 一样:空格翻页、/ 搜索、q 退出。命令名后面还能带章节号,比如man 5 passwd查看的是 passwd 文件的格式说明,man 8 ifconfig查看的是系统管理类命令。大多数情况下,直接man 命令名就够了。

很多新人有一个误区,觉得“老手都是把所有命令背得滚瓜烂熟”。实际上,老手也只是记住了高频命令的核心用法,碰到生僻参数照样查 man。区别在于,老手知道去哪里查、能看懂手册里写的是什么。所以我的建议是:遇到不认识的命令,先 man 一下;遇到想不起来的参数,先 man 一下;不确定某个行为的后果,也先 man 一下。磨刀不误砍柴工。

6. 踩坑复盘与终端好习惯

6.1 小白最容易翻车的几个场景

这些年看新人踩坑,有些错误几乎每周都能见到一次。

第一个花式操作是“删了不该删的文件,然后试图恢复”。Linux 没有回收站,rm 删除的文件不会进垃圾桶,而是直接释放磁盘空间。等你想起来这个文件很重要,恢复的成本极高,云服务器若是没开快照甚至完全无法恢复。我的原则是:删除之前先确认三遍。能用 mv 移到 /tmp 下的,绝不急着 rm。

第二个经典场景是“解压好的压缩包中文乱码”。如果你拿到的 zip 文件是在 Windows 上压缩的,文件名的编码是 GBK,Linux 默认按 UTF-8 解码就会显示乱码。解决办法是用unzip -O GBK 文件名.zip来指定编码。这个参数很好记,O 就是 encoding。如果你遇到的是 tar.gz 包乱码,那基本是打包时就这么命名的,只能手动改文件名了。

第三个高发问题是“在错误的目录下执行了清空操作”。我亲眼见过有人在项目根目录执行rm -rf *,手一抖把整个项目源码清空了。如果你真的需要在目录里做批量删除,先 cd 进去,pwd 确认路径,再 ls 看一眼目录内容,确认无误后再操作。多花十秒钟,能省下重新写代码的十天。

第四个问题容易被忽略,就是“复制的命令不代表安全”。网上很多教程让我们复制粘贴命令到终端,但有些命令可能来自不明渠道,甚至被篡改过。特别是用 root 身份执行之前,先把命令里的路径、文件名看清楚,想明白每段是干什么的。不认识的操作不要盲目执行,这是对自己服务器的负责。

6.2 几个值得养成的终端习惯

工具是练出来的,不是看出来的。最后分享几个我一直坚持的终端使用习惯,都是“看着不起眼,但长期受益”的小事。

第一,学会用 Tab 补全和方向键。Tab 补全文件路径和命令名,能帮你少打很多字,还能避免拼写错误。方向键上下翻历史命令,能帮你快速重新执行之前敲过的命令。按 Ctrl + R 可以反向搜索历史命令,输入关键字就能翻出很久以前的命令。这组合拳,一下子把终端效率提了一个档次。

第二,给高频命令设置别名。习惯这个命令后,可以在 .bashrc 里加别名,比如:

alias ll='ls -lh' alias la='ls -a' alias q='exit' alias rm='rm -i'

保存之后执行source ~/.bashrc生效。注意别名不要设置得太花哨,不然换个服务器就没法用了,反而容易出错。我通常会设置一个rm='rm -i'的安全保护,这是性价比最高的一行配置。

第三,不确定命令效果时,先在测试环境验证再上生产。这句话听起来像正确的废话,但真的能救命。哪怕只是执行一条 cp,在生产服务器上也值得先确认参数含义。尤其是在批量操作、递归操作、带通配符的操作上,多一份谨慎,少一场事故。

我个人在实际操作中的体会是:Linux 命令的学习曲线其实没那么陡峭,核心命令翻来覆去就是文件、权限、进程、网络这几类。你不需要背完几百条命令才敢说自己会 Linux,真正要紧的是把高频的那二三十条用熟练,再掌握查文档的方法,剩下的遇到问题现查现用。最后送大家一个小技巧:打开终端之后,先敲一个 history,看看你最近这几天都在用什么命令。你会发现,来来回回也就那么十几条。把这十几条练到肌肉记忆,你就已经能解决日常 80% 的问题了。

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

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

立即咨询