目录
[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:00date -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.txt
、test.txt
、TEST.TXT
等文件名的文件。-not -name
:查找文件名不匹配指定模式的文件。例如find /var -not -name "*.log"
,表示在/var
目录及其子目录下查找文件名不以.log
结尾的文件。
演示:

4.2 grep指令
【语法】:grep [选项] 搜查字符串 文件
【功能】:在文件中搜索字符串,将找到的行打印出来
【常用选项】:
- -i :忽略大小写的不同,所以大小写视为相同
- -n :顺便输出行号
- -v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行
演示:

五、打包和压缩指令
【打包和压缩是什么?】
比如你上学需要装东西,打包好比拿一个麻袋装起来,而压缩就是先把东西整理好再放进去。
【打包和压缩作用】
- 缩小体积,占据磁盘空间比较小,下载速度快
- 不会轻易的丢失文件
- 便于网络传输
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 包"); -
.gz
是gzip 压缩后缀; -
因此
.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 。
以上就是所有基础指令的讲解了,别的指令在后续的学习中会慢慢提及的,加油!