【Linux篇】Linux指令进阶:从入门到熟练的实操指南

目录

一、输入输出指令

[1.1 cat指令](#1.1 cat指令)

[1.2 echo指令](#1.2 echo指令)

[1.3 输出重定向](#1.3 输出重定向)

[1.4 追加重定向](#1.4 追加重定向)

[1.5 输入重定向](#1.5 输入重定向)

二、查看大文件的指令

[2.1 more指令](#2.1 more指令)

[2.2 less指令](#2.2 less指令)

[2.3 head指令](#2.3 head指令)

[2,4 tail指令](#2,4 tail指令)

三、时间相关的指令

[3.1 Date指令](#3.1 Date指令)

[3.2 Cal指令](#3.2 Cal指令)

四、查找文件指令

[4.1 find指令](#4.1 find指令)

[4.2 grep指令](#4.2 grep指令)

五、打包和压缩指令

[5.1 zip和unzip指令](#5.1 zip和unzip指令)

[5.2 tap指令:打包/解包/不打开它,直接看内容](#5.2 tap指令:打包/解包/不打开它,直接看内容)

六、其他指令

[6.1 指令](#6.1 指令)

[6.2 uname -r指令](#6.2 uname -r指令)

七、热键

八、关机指令

九、拓展指令


本章节将延续上一篇的基础指令操作,对更多基础指令进行详解

一、输入输出指令

1.1 cat指令

语法cat [选项][文件]

功能:查看目标文件的内容

常用选项

-b:对非空输出行编号

-n:对输出的所有行编号

-s:不输出多行空行

演示:

cat 的核心设计是将文件内容一次性全部输出到终端,如果文件内容过多(超过一屏),内容会快速滚动,前面的内容会被覆盖,所以cat只能查看小型文件

1.2 echo指令

是用于**在终端输出指定内容(文本、变量值等)**的命令,也可以配合输出重定向用来创建文件向文件中写入内容

演示:

1.3 输出重定向

输出重定向是**将命令的输出内容写入文件(而非显示在终端)**的操作

向目标文件进行写入时会进行两步操作:

1、清空文件

2、写入新内容

演示:

> test.c有清空文件的作用,因为并没有写入新的内容,那么就只会清空文件

由于目标文件并不存在所以会创建个文件去写入

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

Linux理念

Linux中一切即文件,意味着Linux可以统一的方式进行文件/设备访问。好处就是可以让操作系统以统一的一套方案来管理所有软件。

在 Linux 遵循"一切皆文件"的理念下,向显示器打印内容,本质就是向代表显示器的文件进行写入操作;从键盘读取输入,也相当于从代表键盘的文件中读取内容,各类硬件设备与普通文件一样,都能通过诸如 `fwrite`(写入)、`fread`(读取)这类文件操作方法来进行交互。

1.4 追加重定向

追加重定向是将命令输出内容追加到文件末尾,不覆盖原有内容的操作

演示:

如果文件不存在,它也会创建一个新文件并将内容追加到新文件中

对一个已存在的文件进行追加,会默认先换行在追加

1.5 输入重定向

输入重定向是将文件中的内容作为命令的输入,替代原本从键盘等标准输入设备获取数据的操作

演示:

cat指令不跟文件的话默认从键盘进行读取:

我输入啥他就把啥输出到键盘上

虽然下面指令的输出结果一样,但是实际上第一个是把文件的内容重定向到 cat 命令的输入,让 cat 读取该文件内容并输出;第二个则是 cat 命令直接读取指定文件 test.c 的内容并输出。二者最终呈现的结果相同,但操作的逻辑和底层的输入源指定方式有细微差别,不过在实际使用中,这两种方式都能达到查看 test.c 文件内容的目的。

二、查看大文件的指令

2.1 more指令

语法 : more [ 选项 ][ 文件 ]
功能 : more 命令,功能类似 cat
常用选项
-n 对输出的所有行编号
q 退出more

more可以打满一屏输出就停下来,让用户下翻逐行进行阅读,但是不适合使用大文本,比如查看日志,逐行查看会很废时间。

对于↑↓健一般没啥用,只能通过回车执行下翻,其实我们并不怎么推荐这个指令,更加推荐下一个指令

2.2 less指令

  • less 工具是对文件或其他输出进行分页显示的工具,可称为 Linux 正统查看文件内容的工具,功能十分强大。
  • less 的用法比 more 更具弹性。使用 more 时,无法向前翻页,只能往后查看;而使用 less 时,可利用↑↓等按键前后翻看文件,更便于查看文件内容。
  • 此外,less 具备更多搜索功能,不仅能向下搜索,也能向上搜索。

语法:less [参数] 文件

功能:less 与 more 类似,但使用 less 可随意浏览文件,more 仅能向前移动,不能向后移动,且 less 在查看前不会加载整个文件。

选项

  • -i:忽略搜索时的大小写
  • -N:显示每行的行号
  • / 字符串:向下搜索 "字符串"-? 字符串:向上搜索 "字符串"
  • n:重复前一个搜索(与 / 或?有关)
  • N:反向重复前一个搜索(与 / 或?有关)
  • q:quit

这些选项使用起来很简单,你们下去自己试试就明白了

2.3 head指令

语法】:head [参数]... [文件]...

功能】:head用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行

选项】:

  • 如果想显示不同数量的行数,可以使用 -n <行数> 选项,例如 head -n 20 file.txt 表示显示 file.txt 文件的前 20 行;也可使用 head -<行数> 这种简化写法,如 head -20 file.txt,效果与 head -n 20 file.txt 一致。
  • -c <字节数>:按字节数显示文件开头的内容,比如 head -c 100 data.bin 表示显示 data.bin 文件开头的 100 个字节内容。
  • -q--quiet--silent:静默模式,当同时处理多个文件时,不显示文件名,例如 head -q file1.txt file2.txt 只会输出文件内容,不会在输出前加上文件名标识。
  • -v--verbose:详细模式,在输出每个文件内容之前,先输出文件名,若同时处理多个文件,能清楚知道当前输出内容来自哪个文件,如 head -v file1.txt file2.txt

演示:

2,4 tail指令

语法】:tall [必要参数] [选择参数] [文件]

功能】:用于显示指定文件的末尾内容;若不指定文件,会将输入信息作为处理对象。常被用于查看日志文件。

选项】 :

  • -f :循环读取。持续监测指定文件,当文件有新内容追加时,会实时将新内容显示出来。常用于实时查看日志文件,比如 tail -f access.log,能持续显示 access.log 日志文件新增的内容。
  • -n <行数> :指定要显示的文件末尾的行数。例如 tail -n 20 log.txt 表示显示 log.txt 文件最后 20 行的内容;若要显示从第 N 行开始到末尾的内容,可使用 tail -n +N,比如 tail -n +100 log.txt 表示显示 log.txt 第 100 行到末尾的内容。
  • -q:安静模式,不显示处理信息,只输出文件内容。
  • -v:详细模式,显示处理的文件名称等详细信息。

**【问题:**如何得到一个文件5000-5010行的内容】

正常操作是创建一个新文件,将原文件前5010行内容输出重定向到新文件中,然后取新文件的后10行

这里存在一个致命的缺点:它需要创建临时文件进行中转。

这里还有一种解决方法:需要用到我们前面提到的管道(后面会详细讲解管道的原理)

先从 num.txt 中取出前 5010 行,再从这 5010 行里取出最后 10 行(也就是原文件中 "第 5001 行到第 5010 行" 的内容)

三、时间相关的指令

3.1 Date指令

date 命令用于显示或设置系统的日期和时间,在系统管理、脚本编写等场景中十分常用。

【语法】

date [选项]... [+格式]

【功能】

  • 显示当前系统的日期和时间,可通过指定格式来定制显示内容。
  • 具备设置系统日期和时间的功能(需 root 权限)。
  • 支持日期与时间戳之间的相互转换。

【显示方面】

使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,常用标记如下:

  • %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 // 设置当前时间
  • date -s 20080523 // 设置日期为 2008 年 5 月 23 日,具体时间会被设为 00:00:00
  • date -s 01:01:01 // 设置具体时间为 01 时 01 分 01 秒,日期不更改
  • date -s "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 的午夜)开始所经过的秒数,不考虑闰秒。

3.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)。

演示:

四、查找文件指令

4.1 find指令

find 命令在 Linux 系统的目录结构中搜索文件,并能对找到的文件执行指定操作,功能十分强大,支持多种查找条件。即便系统包含网络文件系统(NFS),只要具备相应权限,find 命令在该文件系统中也能正常工作。由于遍历大型文件系统(如 30G 字节以上的文件系统)可能耗时很久,所以运行非常耗资源的 find 命令时,常倾向于将其放在后台执行。

【语法】

find pathname -options

【功能】

用于在文件树中查找文件,并作出相应的处理(过程可能访问磁盘)。

【常用选项(-name 相关及扩展)】

  • -name :按照文件名查找文件,支持通配符(如 * 匹配任意字符,? 匹配单个字符)。例如 find /home -name "test.txt",表示在 /home 目录及其子目录下查找名为 test.txt 的文件;find /etc -name "*.conf",表示在 /etc 目录及其子目录下查找以 .conf 结尾的文件。
  • -iname :作用与 -name 类似,但忽略文件名的大小写。比如 find / -iname "Test.txt",会同时匹配 Test.txttest.txtTEST.TXT 等文件名的文件。
  • -not -name :查找文件名不匹配指定模式的文件。例如 find /var -not -name "*.log",表示在 /var 目录及其子目录下查找文件名不以 .log 结尾的文件。

演示:

4.2 grep指令

语法】:grep [选项] 搜查字符串 文件

功能】:在文件中搜索字符串,将找到的行打印出来

常用选项】:

  • -i :忽略大小写的不同,所以大小写视为相同
  • -n :顺便输出行号
  • -v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行

演示:

五、打包和压缩指令

打包和压缩是什么?

比如你上学需要装东西,打包好比拿一个麻袋装起来,而压缩就是先把东西整理好再放进去。

打包和压缩作用

  1. 缩小体积,占据磁盘空间比较小,下载速度快
  2. 不会轻易的丢失文件
  3. 便于网络传输

5.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完全一致

5.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)格式。

命令格式

bash 复制代码
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 包");

  • .gzgzip 压缩后缀

  • 因此 .tar.gz 可简写为 .tgz,两种后缀格式等价~

(下面的做个了解,有需要的看)

bash 复制代码
范例一:将整个 /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 与管线命令啦!

六、其他指令

6.1 指令

bc命令可以很方便的进行浮点运算(计算器)

6.2 uname -r指令

【语法】: uname [选项]

**【功能】:**uname用来获取电脑和操作系统的相关信息

**【补充说明】:**uname可显示Linux主机所用的操作系统版本,硬件的名称的基本信息

【常用选项】: -a或--all详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称 。(32位以下的软件可以兼容64位,但是64位上32位以下软件不能跑)

七、热键

[Tab]按键: 具有『命令补全』和『档案补齐』的功能
[Ctrl]+c按键: 让当前的程序『停掉』
**[Ctrl]+d按键:**通常代表着:『键盘输入结束(End Of File, EOF 戒 End OfInput)』的意思;另外,他也可以用来取代exit

**[ctrl]+r按键:**搜索历史命令,Linux会默认记录最新的1000条

八、关机指令

【语法】 : shutdown [ 选项 ]
【常见选项】:
-h : 将系统的服务停掉后,立即关机。
-r : 在将系统的服务停掉之后就重新启动
-t sec : -t 后面加秒数,亦即『过几秒后关机』的意思

九、拓展指令

◆ 安装和登录命令 : login 、 shutdown 、 halt 、 reboot 、 install 、 mount 、 umount 、 chsh 、 exit 、 last ;
◆ 文件处理命令: file 、 mkdir 、 grep 、 dd 、 find 、 mv 、 ls 、 diff 、 cat 、 ln ;
◆ 系统管理相关命令 : df 、 top 、 free 、 quota 、 at 、 lp 、 adduser 、 groupadd 、 kill 、 crontab ;
◆ 网络操作命令 : ifconfig 、 ip 、 ping 、 netstat 、 telnet 、 ftp 、 route 、 rlogin 、 rcp 、 finger 、 mail 、 nslookup ;
◆ 系统安全相关命令: passwd 、 su 、 umask 、 chgrp 、 chmod 、 chown 、 chattr 、 sudo ps 、 who ;
◆ 其它命令: tar 、 unzip 、 gunzip 、 unarj 、 mtools 、 man 、 unendcode 、 uudecode 。

以上就是所有基础指令的讲解了,别的指令在后续的学习中会慢慢提及的,加油!

相关推荐
東雪蓮☆3 小时前
MySQL 5.7 主主复制 + Keepalived 高可用配置实例
linux·运维·mysql
迎風吹頭髮3 小时前
UNIX下C语言编程与实践20-UNIX 文件类型判断:stat 结构 st_mode 与文件类型宏的使用实战
linux·c语言·unix
凤凰战士芭比Q4 小时前
部署Nginx(Kylinv10sp3、Ubuntu2204、Rocky9.3)
linux·运维·nginx
讓丄帝愛伱4 小时前
Vim核心操作
linux·编辑器·vim
天上飞的粉红小猪4 小时前
进程的概念(下)
linux
NiKo_W4 小时前
Linux 自定义shell命令解释器
linux·bash·shell
七七七七074 小时前
【Linux 系统】命令行参数和环境变量
linux
jz_ddk4 小时前
[嵌入式] U-Boot 环境变量深度解析:从 QSPI 到 eMMC 的 Linux 启动完整指南
linux·运维·服务器·嵌入式·环境变量·u-boot·内核加载
戴誉杰4 小时前
cloudfared 内网穿透通过docker方式遇到的问题
运维·docker·容器·cloudfared