【Linux篇】Linux指令进阶:从入门到熟练的实操指南
目录
一、输入输出指令
1.1 cat指令
1.2 echo指令
1.3 输出重定向
1.4 追加重定向
1.5 输入重定向
二、查看大文件的指令
2.1 more指令
2.2 less指令
2.3 head指令
2,4 tail指令
三、时间相关的指令
3.1 Date指令
3.2 Cal指令
四、查找文件指令
4.1 find指令
4.2 grep指令
五、打包和压缩指令
5.1 zip和unzip指令
5.2 tap指令:打包/解包/不打开它,直接看内容
六、其他指令
6.1 指令
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
)格式。
命令格式:
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 与管线命令啦!
六、其他指令
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。
以上就是所有基础指令的讲解了,别的指令在后续的学习中会慢慢提及的,加油!