【Linux】Linux指令进阶:从入门到熟练的实操指南
前言
Linux 指令是操作系统的 “万能工具集”—— 从文本读写、文件管理到系统控制,几乎所有运维与开发场景都离不开它。
本篇会围绕9 类高频指令展开:从基础的输入输出、大文件查看,到实用的文件查找、打包压缩,再到系统信息查询、关机控制,甚至包含提升效率的热键与拓展指令。每个模块都以 “指令格式 + 场景示例” 为核心,帮你快速掌握指令的实际用法,从 “会用” 到 “用对”。
目录
☊. 输入输出指令
1、cat指令
语法:cat [选项][文件]
功能:查看目标文件的内容
常用选项:
-b:对非空输出行编号-n:对输出的所有行编号-s:不输出多行空行

cat 的核心设计是将文件内容一次性全部输出到终端,如果文件内容过多(超过一屏),内容会快速滚动,前面的内容会被覆盖,所以cat只能查看小型文件
当 cat 指令后不跟具体文件时,它会默认从键盘读取输入内容:

此时,你在键盘上输入什么内容,cat 就会实时把内容输出到显示器上(按 Ctrl + D 可以退出这个输入模式)。
2、echo指令
是用于在终端输出指定内容(文本、变量值等)的命令,也可以配合输出重定向用来创建文件向文件中写入内容

3、输出重定向
输出重定向是将命令的输出内容写入文件(而非显示在终端)的操作
向目标文件进行写入时会进行两步操作:
1、清空文件
2、写入新内容
【常见场景演示】
> test.c 有清空文件的作用,因为并没有写入新的内容,那么就只会清空文件

因为目标文件原本不存在,所以系统会自动创建这个文件并写入内容。

echo > 文件名 相当于是把一个换行写入文件

【Linux理念】
Linux中一切即文件,意味着Linux可以统一的方式进行文件/设备访问。好处就是可以让操作系统以统一的一套方案来管理所有软件。
在 Linux 遵循“一切皆文件”的理念下,向显示器打印内容,本质就是向代表显示器的文件进行写入操作;从键盘读取输入,也相当于从代表键盘的文件中读取内容,各类硬件设备与普通文件一样,都能通过诸如 `fwrite`(写入)、`fread`(读取)这类文件操作方法来进行交互。
4、追加重定向
追加重定向是将命令输出内容追加到文件末尾,不覆盖原有内容的操作
【常见场景演示】
如果目标文件不存在,使用追加命令会自动创建一个新文件,并把内容写入这个新文件中

对已存在的文件执行追加操作时,内容会默认换行后再添加:

也可以单独追加一个换行到文件中:

5、输入重定向
输入重定向是将文件中的内容作为命令的输入,替代原本从键盘等标准输入设备获取数据的操作
【常见场景演示】
虽然下面指令的输出结果一样,但是实际上第一个是把文件的内容重定向到 cat 命令的输入,让 cat 读取该文件内容并输出;第二个则是 cat 命令直接读取指定文件 test.c 的内容并输出。二者最终呈现的结果相同,但操作的逻辑和底层的输入源指定方式有细微差别,不过在实际使用中,这两种方式都能达到查看 test.c 文件内容的目的。

℡. 查看大文件的指令
1、more指令
语法:more [选项][文件]功能:more命令,功能类似 cat常用选项: -n:对输出的所有行编号 q:退出more
more可以打满一屏输出就停下来,让用户下翻逐行进行阅读,但是不适合使用大文本,比如查看日志,逐行查看会很废时间。
对于↑↓健一般没啥用,只能通过回车执行下翻,其实我们并不怎么推荐这个指令,更加推荐下一个指令
2、less指令
less 工具是对文件或其他输出进行分页显示的工具,可称为 Linux 正统查看文件内容的工具,功能十分强大。
less 的用法比 more 更具弹性。使用 more 时,无法向前翻页,只能往后查看;而使用 less 时,可利用↑↓等按键前后翻看文件,更便于查看文件内容。
此外,less 具备更多搜索功能,不仅能向下搜索,也能向上搜索。
语法:less [参数] 文件
功能:less 与 more 类似,但使用 less 可随意浏览文件,more 仅能向前移动,不能向后移动,且 less 在查看前不会加载整个文件。
常用选项:
-i:忽略搜索时的大小写
-N:显示每行的行号
/ 字符串:向下搜索 “字符串”
? 字符串:向上搜索 “字符串”
n:重复前一个搜索(与 / 或?有关)
N:反向重复前一个搜索(与 / 或?有关)
q:quit
3、head指令
语法:head [参数] [文件]
功能:head用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行
常用选项:
-n <行数>:指定显示前 N 行(简化写:-<行数>)例:head -n 20 file.txt=head -20 file.txt(显示前 20 行)-c <字节数>:按字节显示开头内容例:head -c 100 data.bin(显示前 100 字节)-q:多文件时不显示文件名-v:多文件时先显示文件名

4、tail指令
语法:tall [必要参数] [选择参数] [文件]
功能:用于显示指定文件的末尾内容;若不指定文件,会将输入信息作为处理对象。常被用于查看日志文件。
常用选项 :
-f:实时监测文件,新增内容会自动显示(常用于看日志)例:tail -f access.log指定显示末尾 N 行;
-n <行数>:-n +N表示从第 N 行显示到末尾例:tail -n 20 log.txt(末尾 20 行);tail -n +100 log.txt(第 100 行到末尾)-q:多文件时不显示文件名-v:多文件时先显示文件名
【问题:如何得到一个文件5000-5010行的内容】
正常操作是创建一个新文件,将原文件前5010行内容输出重定向到新文件中,然后取新文件的后10行

这里存在一个致命的缺点:它需要创建临时文件进行中转。
这里还有一种解决方法:需要用到我们前面提到的管道(后面会详细讲解管道的原理)

先从 num.txt 中取出前 5010 行,再从这 5010 行里取出最后 10 行(也就是原文件中 “第 5001 行到第 5010 行” 的内容)
☋. 时间相关的指令
1、Date指令
date 命令用于显示或设置系统的日期和时间,在系统管理、脚本编写等场景中十分常用。
语法:date [选项][+格式]
功能:
1、显示当前系统的日期和时间,可通过指定格式来定制显示内容。
2、具备设置系统日期和时间的功能(需 root 权限)。
3、支持日期与时间戳之间的相互转换。
【显示方面】
使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,常用标记如下:
%H:小时(00..23)%M:分钟(00..59)%S:秒(00..61)%X:相当于%H:%M:%S,显示时间部分%d:日(01..31)%m:月份(01..12)%Y:完整年份(0000..9999)%F:相当于%Y-%m-%d,显示日期部分
示例:date +%Y:%m:%d 可按 “年:月: 日” 的格式显示当前日期。

【设定时间方面】
只有 root 权限才能设置系统时间,普通用户仅能查看。常见设置方式:
| 用法示例 | 效果说明 |
|---|---|
date -s 20080523 | 设置日期为 2008-05-23,时间默认 00:00:00 |
date -s 01:01:01 | 仅设置时间为 01:01:01,日期不变 |
date -s "01:01:01 2008-05-23" | 同时设置时间(01:01:01)和日期(2008-05-23) |
date -s "01:01:01 20080523" | 同上,日期格式为无分隔符形式 |
date -s "2008-05-23 01:01:01" | 同上,日期在前、时间在后 |
date -s "20080523 01:01:01" | 同上,日期(无分隔符)在前、时间在后 |
【时间戳】
时间 -> 时间戳:date +%s,可将当前时间转换为从 1970 年 1 月 1 日(UTC/GMT 的午夜)开始所经过的秒数(Unix 时间戳)。
时间戳 -> 时间:date -d@<时间戳>,例如 date -d@1508749502,可将时间戳转换为对应的日期和时间。
Unix 时间戳(英文为 Unix epoch、Unix time、POSIX time 或 Unix timestamp)是从 1970 年 1 月 1 日(UTC/GMT 的午夜)开始所经过的秒数,不考虑闰秒。
2、Cal指令
cal 命令用于在终端显示公历(阳历)日历,方便查看日期相关信息。
语法:cal [参数] [月份] [年份]
功能:用于查看日历等时间信息。若只有一个参数,该参数表示年份(范围 1 - 9999);若有两个参数,依次表示月份和年份。
常用选项:
-3:显示系统前一个月、当前月、下一个月的月历,能直观查看连续三个月的日期情况。-j:显示日期在当年中的第几天(一年日期按天算,从 1 月 1 日起算),默认显示当前月各日期在当年的天数。-y:显示当前年份的完整日历,可查看一整年的日期分布。
举例:
cal -y 2018:显示 2018 年一整年的日历,能看到该年每个月的日期排布。
cal 12 2025:显示 2025 年 12 月的日历。
cal -3:显示系统当前月及前后各一个月的月历。
cal -j:显示当前月各日期在当年的天数(比如 1 月 5 日会显示为 5)。
演示:

☺. 查找文件指令
1、find指令
语法:find pathname -options
功能:用于在文件树中查找文件,并作出相应的处理(过程可能访问磁盘)。
常用选项:
| 选项 | 作用 | 示例 |
|---|---|---|
-name | 按文件名精确匹配(区分大小写),支持通配符(*任意字符、?单个字符) | find /home -name "test.txt"(找 test.txt);find /etc -name "*.conf"(找.conf 结尾文件) |
-iname | 同-name,但忽略大小写 | find / -iname "Test.txt"(匹配 Test.txt/test.txt 等) |
-not -name | 查找不匹配指定文件名的文件 | find /var -not -name "*.log"(找不以.log 结尾的文件) |

2、grep指令
语法:grep [选项] 搜查字符串 文件
功能:在文件中搜索字符串,将找到的行打印出来
常用选项:
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 ‘搜寻字符串’ 内容的那一行
-E:启用扩展正则表达式(等价于egrep),支持更复杂的匹配规则(如|“或”、()分组等),无需额外转义符号【常用正则符号(搭配-E更易用)】:^:行开头锚定符,匹配以指定字符 / 字符串开头的行(例如^a表示匹配以 “a” 开头的行)

☆. 打包和压缩指令
【打包和压缩是什么?】
比如你上学需要装东西,打包好比拿一个麻袋装起来,而压缩就是先把东西整理好再放进去。
【打包和压缩作用】
缩小体积,占据磁盘空间比较小,下载速度快
不会轻易的丢失文件
便于网络传输
1、zip和unzip指令
zip 用于将目录或文件压缩(压缩+打包)成 zip 格式,unzip 用于解压(解包+解压缩) zip 格式的压缩包,在文件归档、传输等场景中常用。
语法:
[zip] [压缩文件.zip] [目录或文件]
[unzip] [压缩文件.zip] [-d 目标目录]
功能:
zip:将指定的目录或文件压缩成 zip 格式的压缩包
unzip:对 zip 格式的压缩包进行解压操作
常用选项(zip)
-r:递归处理,将指定目录下的所有文件和子目录一并压缩,保证目录结构完整。
常用选项(unzip)
-d <目标目录>:指定解压后的文件存放目录,若不指定,默认解压到当前目录。-l:查看压缩包内的文件列表,不解压。-o:覆盖已存在的文件时不提示,直接覆盖。
【使用场景】:
下面是没有使用-r选项的场景:

先把lesson01压缩成了lesson01.zip,再解压lesson01.zip,发现解压后只有一个lesson01空目录,这是由于压缩dir目录时,没有使用-r递归处理,所以只有那个空目录被压缩。
下面是使用-r选项后的场景:

当前目录下只有一个lesson01,我把lesson01压缩到当前目录,删除了之前的lesson01,解压lesson01.zip,发现lesson01目录下的所有文件都在,这表明了,整个目录的文件都被压缩并且解压
还有一种方法:使用通配符*

我先把lesson01压缩到当前目录,最后再解压到当前目录的lesson02目录中,发现lesson01完全一致
2、tap指令:打包/解包/不打开它,直接看内容
tar 是 Linux 中打包、解包、压缩、解压的核心工具,可将多个文件 / 目录整合为一个 “tar 包”,还能结合 gzip/bzip2 压缩,常用于备份、传输。
核心参数
| 参数 | 含义 |
|---|---|
-c | 创建 tar 包(打包) |
-x | 解开 tar 包(解包) |
-t | 查看 tar 包内的文件列表 |
-z | 结合 gzip 压缩 / 解压(生成 .tar.gz/.tgz) |
-j | 结合 bzip2 压缩 / 解压(生成 .tar.bz2) |
-v | 显示压缩 / 解压过程(打印文件名,方便看进度) |
-f | 指定包文件名(必须紧跟 -f,是最核心的参数) |
-C | 解包时,指定解压到的目标目录 |
-p | 保留文件的权限、属性(备份时常用) |
1. 打包 + 压缩(tar -czf)
将文件 / 目录打包后用gzip压缩,生成.tar.gz(或简写为.tgz)格式。
命令格式:
tar -czf 压缩包名.tar.gz 要压缩的文件/目录 示例:把 lesson01 目录打包压缩成 lesson01.tar.gz

2. 预览压缩包内容(tar -tzf)
不解压,仅查看.tar.gz(或.tgz)压缩包内的文件列表。
命令格式:
tar -tzf 压缩包名.tar.gz 示例:查看 lesson01.tar.gz 里的文件

3. 解压 + 解包(tar -xzf)
将.tar.gz(或.tgz)格式的压缩包解压并还原文件 / 目录。
命令格式:
tar -xzf 压缩包名.tar.gz [-C 目标目录] # -C 可选,指定解压目录 示例 1:直接解压到当前目录

示例 2:解压到 /tmp 目录

格式小知识:
.tar是打包后缀(表示 “tar 包”);.gz是gzip 压缩后缀;
因此.tar.gz可简写为.tgz,两种后缀格式等价~
(下面的做个了解,有需要的看)
范例一:将整个 /etc 目录下的文件全部打包成为 `/tmp/etc.tar` [root@linux ~]# tar -cvf /tmp/etc.tar /etc<==仅打包,不压缩! [root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩 [root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 压缩 特别注意,在参数 f 之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。 如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar file ~ 如果加 j 参数,则以 .tar.bz2 来作为附档名啊~ 上述指令在执行的时候,会显示一个警告讯息: 『`tar: Removing leading `/" from member names`』那是关於绝对路径的特殊设定。 范例二:查阅上述 /tmp/etc.tar.gz 文件内有哪些文件? [root@linux ~]# tar -ztvf /tmp/etc.tar.gz 由於我们使用 gzip 压缩,所以要查阅该 tar file 内的文件时,就得要加上 z 这个参数了!这很重要的! 范例三:将 /tmp/etc.tar.gz 文件解压缩在 /usr/local/src 底下 [root@linux ~]# cd /usr/local/src [root@linux src]# tar -zxvf /tmp/etc.tar.gz 在预设的情况下,我们可以将压缩档在任何地方解开的!以这个范例来说, 我先将工作目录变换到 /usr/local/src 底下,并且解开 /tmp/etc.tar.gz , 则解开的目录会在 /usr/local/src/etc 呢!另外,如果您进入 /usr/local/src/etc 则会发现,该目录下的文件属性与 /etc/ 可能会有所不同喔! 范例四:在 /tmp 底下,我只想要将 /tmp/etc.tar.gz 内的 etc/passwd 解开而已[root@linux ~]# cd /tmp [root@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd 我可以透过 tar -ztvf 来查阅 tarfile 内的文件名称,如果单只要一个文件, 就可以透过这个方式来下达!注意到! etc.tar.gz 内的根目录 / 是被拿掉了! 范例五:将 /etc/ 内的所有文件备份下来,并且保存其权限! [root@linux ~]# tar -zxvpf /tmp/etc.tar.gz /etc 这个 -p 的属性是很重要的,尤其是当您要保留原本文件的属性时! 范例六:在 /home 当中,比 2005/06/01 新的文件才备份 [root@linux ~]# tar -N "2005/06/01" -zcvf home.tar.gz /home 范例七:我要备份 /home, /etc ,但不要 /home/dmtsai [root@linux ~]# tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc 范例八:将 /etc/ 打包后直接解开在 /tmp 底下,而不产生文件! [root@linux ~]# cd /tmp [root@linux tmp]# tar -cvf - /etc | tar -xvf - 这个动作有点像是 cp -r /etc /tmp 啦~依旧是有其有用途的! 要注意的地方在於输出档变成 - 而输入档也变成 - ,又有一个 | 存在~ 这分别代表 standard output, standard input 与管线命令啦! ▷. 其他指令
1、bc指令
bc是 Linux 系统中一款便捷的浮点运算计算器工具,可直接在终端中进行各类数学计算。

在交互界面输入quit并回车,即可退出计算器
2、uname指令
语法: uname [选项]
功能: uname 用来获取电脑和操作系统的相关信息
补充说明: uname 可显示 Linux 主机所用的操作系统版本、硬件名称等基本信息
常用选项:
-a 或 --all:详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称。
-r:仅显示内核版本号

℡. 热键
[Tab] 按键:具有「命令补全」和「档案补齐」的功能
[Ctrl]+c 按键:让当前的程序「停掉」
[Ctrl]+d 按键:通常代表「键盘输入结束(End Of File, EOF 或 End Of Input)」;另外,也可以用来取代 exit
[ctrl]+r 按键:搜索历史命令,Linux 会默认记录最新的 1000 条
©. 关机指令
语法:shutdown [选项]
常见选项:
-h:将系统服务停掉后,立即关机
-r:将系统服务停掉后,重新启动
-t sec:-t 后加秒数,即「过几秒后关机」的意思
☆. 拓展指令
1、安装和登录命令:login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last
2、文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln
3、系统管理相关命令:df、top、free、quota、at、lp、adduser、groupadd、kill、crontab
4、网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、nslookup
5、系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo、ps、who
6、其它命令:tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode
