🤣 爆笑教程 👉 《看表情包学Linux》👈 猛戳订阅 🔥
💭 写在前面
本章仍然是继续对Linux 常用指令进行介绍,将讲解重定向、时间相关的指令、文件查找和打包压缩等指令。我们将初次理解 "Linux下一切皆文件"这一概念,我将通过一个有趣的故事去讲解它。
未上榜
Ⅰ . 初识重定向(Redirect)
0x00 输出重定向 >
在上一节中我们为了方便讲解 head 和 tail 指令,我们用到了 > 去生成了十万行文本。
通过 > 将生成的十万行文本写入到了 large.txt
我们现在来正式介绍一下:
$ echo "内容" > [目标]
本来应该写入到显示器的内容,把他写入到文件中,我们称之为 输出重定向 。
📌 注意事项: >
0x01 追加重定向 >>
❓ 输出重定向 >>
💡 我们可以使用 " 追加重定向 >>
📃 说明:追加重定向不会清空原始内容,而是在原始文件的结尾进行新增式的写入。
$ echo "内容" >> [目标]
0x02 输入重定向 <
在这之前我们先来补充一下 cat
$ cat
💭 cat 后面什么都不加,cat 就会默认从键盘(标准输入):
❓ 它一直复读我说的话我按什么都不出去,q 也给我反个 q,怎么退出呢?
💡 所有的阻碍你命令行操作,先无脑 ctrl + c (暂停)就完事了,这些热键我们下面会细说。
输入重定向:将本来应该从键盘中读取的方式,改成从指定的文件中读取。
(不过我们用的最多的还是输出重定向和追加重定向)
0x03 初次理解 "Linux 下一切皆文件"
Linux 操作系统有自己的设计哲学,它认为所有的东西都可以当作文件,
甚至你所看到的键盘、显示器、显卡等外设,都可以当作文件。
现阶段还没有去讲解系统方面的知识,至于底层是如何做到的我们暂时不深入讲解。
当前学习阶段我们可以感性理解 "Linux 下一期皆文件" 这句话。
讲一个小故事帮助大家去理解:
想当年,零几年的时候,哥在网络上冲浪的时候(bushi),就流行一句话 ——
神马都是浮云!!!
当我认为我是一个乐天派时,社会上有很多不公,不爽的东西,世界观就可以是一切都是浮云,在生活中给我们带来的直接好处是,我们处理看待事物的方式变得非常简单!
比如有人跑过来告诉你,啊!💰 你中了五百万~ 你说:哦哦,神马都是浮云。
喂喂喂,💩粪车爆炸了! 你说:哦哦,神马都是浮云。
卧槽!👽 外星人要入侵地球了! 你还是说:哦哦,神马都是浮云。
🐓 蔡徐坤要出新歌了! 你仍然说:哦哦,神马都是浮云……
发现没有?当我以浮云的心态去看待事情的时候,我们处理各种事情就变得简单了。
相当于我们可以使用同一套处理事情的方式去解决所有问题。
这就叫做 —— 神马都是浮云。对我来说什么事都不是事!
而 Linux 就是以一切皆浮云的态度去看待文件的,基于这样的设计哲学,
让我们看待很多事物也变得非常简单了!
我们把磁盘、显示器、网卡、显卡、键盘、鼠标等设备(我们统称之为外设),
都看作文件,以同样的方式看待这些设备。
(打住,点到为止。我们仅仅做一个感性理解,暂时不做更多的深入)
📌 注意事项:
Linux 是不把 CPU 看成文件的,因为 CPU 是要帮你完成 "一切皆文件" 的设计理念的,
而你要把 CPU 也当作文件,这显然是不合理的!
Ⅱ. 时间相关的指令
0x00 data 指令
在 Linux 中我们可以直接输入 date
date # 显示时间
🔨 指令功能 : 显示时间
默认输出的格式好像不符合我们日常生活的使用习惯啊,我们习惯的是 年月日 + 时间。
因为各个国家个地区,对于时间的表示都是有各自的习惯的:
在显示方面,Linux 也是可以设定格式去显示时间的。
date +%Y:%m:%d # date 指定格式显示时间
📜 date 标记列表:格式设定为一个加号后接数个标记,其中常用的标记列表如下:
- %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
💭 我们就可以通过这种方式去控制格式,显示我们想要显示的:
📜 Linux 也同样支持修改时间:
- date -s // 设置当前时间,只有root权限才能设置,其他只能查看。
- date -s 20080523 // 设置成20080523,这样会把具体时间设置成空00:00:00
- date -s 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" // 这样可以设置全部时间
0x01 Time stamp 时间戳
📚 概念:自
年
月
日午夜开始,到现在为止所累计的秒数,即为时间戳。
计算机插电之后就会一直有一个递增的数据,这个不断线性递增的数据就是时间戳。
date +%s # 查看当前时间戳
那么问题来了,时间戳有什么用途呢?
它可以作为日志的一部分,如果一个项目比较大,必须得有日志的能力。
因为时间戳是不断递增的,递增值有很强的惟一性,所以在做日志信息归档的时候很方便。
日志我们一般从尾部看,时间 + 错误信息。日志,具有排查错误的能力!
在 Linux 中,时间是很重要的。
如果我想自己获取一下时间戳,系统中可以用 date +%s ,如果我们想自己写程序,也是可以的。
💬 代码:获取时间戳
众所周知,我们的时间戳和时间的信息是可以互相转化的:
🔗 链接: 在线时间戳转换工具
💭 当然,我们也可以在 Linux 中转换:
0x02 cal 指令
在 Linux 中输入 cal
cal
🔨 指令功能 :用于查看日历等时间信息。
如果只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份。
cal [参数][月份][年份]
📜 常用选项:
- -3
- -j
- -y 显示当前年份的日历
❓ 思考:Linux 命令的时间和日历存在的意义是什么?
有些语言是基于 Linux 命令组成起来的语言,比如 shell 。
因为脚本也是要打日志的,所以脚本也是需要有时间的。
现在用命令行看时间的人很少,但是如果把时间倒退到40年前,就会有人去拿命令行去查看时间。
Ⅲ. 文件查找
0x00 find 指令(查找)
find 路径 -[选项]
🔨 指令功能 :用于在文件树种查找文件,并作出相应的处理(可能访问磁盘)。
📃 指令介绍:
- Linux 下 find
- Linux 下 find 命令提供了相当多的查找条件,功能很强大。由于 find
- 即使系统中含有网络文件系统(NFS),find 命令在该文件系统中同样有效,只你具有相应的权限。
- 在运行一个非常消耗资源的 find 命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系 统可能会花费很长的时间 (这里是指30G字节以上的文件系统)
📜 常用选项:
- name
💭 用法演示:查找C语言的 stdio.h | 在家目录下查找所有 test.c 文件
0x01 grep 命令(行文本过滤工具)
在我们之前形成的有十万行的大文本 large.txt 中,
如果我想把其中的 1234 关键字的行拎出来,我们就可以使用 grep
$ grep '1234' large.txt # 显示large.txt中带有1234的行
grep [选项] 搜寻字符串 文件
🔨 指令功能 :在文件中搜索字符串,将找到的行打印出来。
📜 常用选项:
- -i
- -n
- -v 反向选择(反选),凡是具有关键字的文本行,去掉并保留没有匹配关键字的行。
📌 注意事项:
① 只要某行存在你要找的关键字,整行都会被保留显示出来,所以称 grep 为行文本过滤工具。
② grep 匹配时是明确大小写的 ,如果想忽略大小写,须加 -i 选项。
💭 操作演示:
① -v 反向选择 | -iv
② -n 选项,将查找的结果带上匹配行所在行号
③ 一些指令间的 "联动"
这是我们上一篇讲的重定向和管道,由此可见指令是非常灵活的。
Ⅳ. 打包与压缩
0x00 zip 指令
为了方便讲解,我们先准备如下操作:
zip [压缩文件.zip] [目录或文件]
🔨 指令功能 :将目录或文件压缩成 zip 格式
📜 常用选项:
- -r 递归处理,将指定目录下的所有文件和子目录一并处理。
💭 操作演示:
0x01 unzip 指令
❓ 那么如何解压呢?
unzip [目标] # 解压目标文件
💭 操作演示:我们可以使用 zip 指令对应的 unzip
此时我们 cd 到 tar_package 文件中,却发现什么都没有……
啊这,原来我们一开始就压了个寂寞,
只是把目录打包了,里面的 file 文件都没打包进去,相当于你只打包了个文件夹!
没错,我是故意这么做的。
这么做只是为了让大家有一个深刻的印象,什么呢?
📌 注意事项:直接 zip 目录,是打包不了目录里面的东西的!
正确做法是 —— 对于目录的打包,如果你想打包目录里的东西:
$ zip -r [压缩包名称] [压缩对象] # 递归压缩
💭 操作演示:使用 zip -r 去打包目录
搞定,现在 new_test.zip 没问题了,我们用 unzip
📌 注意事项:unzip 解压出来的原始数据,都会被放在当前路径下。
(默认情况下,几乎所有的解压工具都是这样,Windows 上常见的压缩软件好像都是这么做的)
而且也是可以选择解压路径的。
Linux 也可以,如果你想指定解压到指定目录下,可以在 unzip -d 后加上路径。
💭 操作演示:使用 unzip -d 指定解压到指定目录下
❓ 思考:我为什么要打包压缩?
① 节约空间,压缩一下可以节约空间。
② 我们下下来的软件是压缩包,曾经提供软件的人,上传的是压缩包。
所有的软件写好之后,不是只有一个文件的!所有的互联网公司后台都是 Linux 系统,开发人员开发的软件,将来都是要部署在 Linux 系统上的,所以所有的软件开发好之后都要打包压缩上载到 Linux 上,进行安装部署。所以 Linux 必须支持解包解压。
0x02 tar 指令
一般一个压缩包是需要有两个步骤的:① 打包 ② 压缩。
我们还要讲一种压缩方式,这种压缩方式也是 Linux 中最常见的一种 —— tar 指令。
tar [-cxtzjvf] 文件与目录 .... 参数
🔨 指令功能 :打包 / 解包(不打开它,直接看内容)
📜 常用选项:
- -c
- -x
- -t
- -z
- -j
- -v
- -f 使用档名,请留意,在 f 之后要立即接档名!不要再加参数!
- -C 解压到指定目录。
💭 操作演示:打包 tar czf 和压缩 tar xzf 都可以用 tar
💭 操作演示:tar zcvf 、tar xzvf 在压缩过程中显示文件
💭 操作演示:-C
❓ 思考:
① 我们讲完了所有的压缩包了吗?没有!
② Linux 下是否几乎支持所有种类的压缩包?是的!
③ 为什么 Linux 下会支持?因为Linux 面对的平台非常多!
④ 遇到不懂的压缩包种类,该怎么办?test.XXX 网上搜索:centos .XXX 后缀如何解压!
【补充范例】
- 范例一:将整个 /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 与管线命令啦!
Ⅴ. 其他常见指令
0x00 bc 命令
(Windows XP 自带的计算器)
Linux 下,我们可以用 bc
echo " [计算内容] " | bc
0x01 uname -r 指令
不同的平台下对应的指针大小是不一样的,在 VS32 位下指针对应的大小是 4 个字节,
在64位下系统,我们的指针大小就是 8 字节。我们该怎么知道当前系统的体系结构信息呢?
我们可以用 uname -a 查看系统中的很多信息,如果只想看内核版本,可以输 uname -r:
uname [选项]
🔨 指令功能 :获取电脑和操作系统的相关信息
📃 指令介绍: uname 可显示 Liunx 主机所用的操作系统的版本、硬件的名称等基本信息。
📜 常用选项:-a 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类 型,硬件平台类型,操作系统名称。
0x02 常用热键
什么是热键?热键即组合键,可以理解为经常使用的按键。
热键有什么用呢?比如下面这些情况。
💭 ctrl + C - 令当前程序暂停(可终止失控程序)
💭 tab - 命令的自动补齐
💭 Ctrl + r - 搜索历史命令
💭 Ctrl + d
0x03 关机
📌 注意事项:如果使用的是云服务器,云服务器是不需要关机的,永远不关机。
shutdown [选项] ** 常见选项: **
🔨 指令功能 :关机
📜 常用选项:
- -h
- -r 在将系统的服务停掉之后就重新启动 -t sec :
- -t
📌 [ 笔者 ] 王亦优
📃 [ 更新 ] 2022.7.9
❌ [ 勘误 ] /* 暂无 */
📜 [ 声明 ] 由于作者水平有限,本文有错误和不准确之处在所难免,
本人也很想知道这些错误,恳望读者批评指正!
📜 参考资料 C++reference[EB/OL]. []. http://www.cplusplus.com/reference/. Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. . 百度百科[EB/OL]. []. https://baike.baidu.com/. 比特科技. Linux[EB/OL]. 2021[2021.8.31 xi |