【看表情包学Linux】Redirect 重定向 | 时间相关指令 | 文件查找 | 打包与压缩(一)

简介: 本章仍然是继续对Linux 常用指令进行介绍,将讲解重定向、时间相关的指令、文件查找和打包压缩等指令。我们将初次理解 "Linux下一切皆文件"这一概念,我将通过一个有趣的故事去讲解它。

本章仍然是继续对Linux 常用指令进行介绍,将讲解重定向、时间相关的指令、文件查找和打包压缩等指令。我们将初次理解 "Linux下一切皆文件"这一概念,我将通过一个有趣的故事去讲解它。

Ⅰ . 初识重定向(Redirect)


0x00 输出重定向 >

35459437c464ccc0a48cadf302daa86c_460cbdee7ea84e9b819e74fecdfd7610.png


在上一节中我们为了方便讲解 head 和 tail 指令,我们用到了 > 去生成了十万行文本。


通过 > 将生成的十万行文本写入到了 large.txt 中……


我们现在来正式介绍一下:


$ echo "内容" > [目标]

51a8419157807571d7546509ad8fd9d5_e4c402c9356c4931b77ccff4b02b1701.png

本来应该写入到显示器的内容,把他写入到文件中,我们称之为 输出重定向 。


📌 注意事项: > 会清空原始的文件内容,进行重新写入。

fc53fcd111ecc46414eedfb0b5fb0ad9_555c1ba8b0fa40a3b769a4a38d07c121.png


0x01 追加重定向 >>

❓ 输出重定向 >> 会清空原始内容,如果你不想清空原始内容呢?


💡 我们可以使用 " 追加重定向 >> " ,可以做到在原有内容后 "追加" :

dfe30ceb4b35c4bbc39698c692322b1f_1766eba559e74b869d689191beb32035.png

📃  说明:追加重定向不会清空原始内容,而是在原始文件的结尾进行新增式的写入。


$ echo "内容" >> [目标]


0x02 输入重定向 <

在这之前我们先来补充一下 cat 后面什么都不加:

$ cat

3dc47ecbd8154e2194864bed947b04f9_15ee239c6ad644de8ed7b91bc54762e1.png

💭 cat 后面什么都不加,cat 就会默认从键盘(标准输入):

❓ 它一直复读我说的话我按什么都不出去,q 也给我反个 q,怎么退出呢?


💡 所有的阻碍你命令行操作,先无脑 ctrl + c (暂停)就完事了,这些热键我们下面会细说。


输入重定向:将本来应该从键盘中读取的方式,改成从指定的文件中读取。


(不过我们用的最多的还是输出重定向和追加重定向)


0x03 初次理解 "Linux 下一切皆文件"

Linux 操作系统有自己的设计哲学,它认为所有的东西都可以当作文件,


甚至你所看到的键盘、显示器、显卡等外设,都可以当作文件。


现阶段还没有去讲解系统方面的知识,至于底层是如何做到的我们暂时不深入讲解。


当前学习阶段我们可以感性理解 "Linux 下一期皆文件" 这句话。


讲一个小故事帮助大家去理解:


想当年,零几年的时候,哥在网络上冲浪的时候(bushi),就流行一句话 ——


神马都是浮云!!!


当我认为我是一个乐天派时,社会上有很多不公,不爽的东西,世界观就可以是一切都是浮云,在生活中给我们带来的直接好处是,我们处理看待事物的方式变得非常简单!


比如有人跑过来告诉你,啊!💰 你中了五百万~   你说:哦哦,神马都是浮云。


喂喂喂,💩粪车爆炸了!  你说:哦哦,神马都是浮云。


卧槽!👽 外星人要入侵地球了!  你还是说:哦哦,神马都是浮云。


🐓 蔡徐坤要出新歌了!  你仍然说:哦哦,神马都是浮云……


发现没有?当我以浮云的心态去看待事情的时候,我们处理各种事情就变得简单了。


相当于我们可以使用同一套处理事情的方式去解决所有问题。


这就叫做 —— 神马都是浮云。对我来说什么事都不是事!


而 Linux 就是以一切皆浮云的态度去看待文件的,基于这样的设计哲学,


让我们看待很多事物也变得非常简单了!


我们把磁盘、显示器、网卡、显卡、键盘、鼠标等设备(我们统称之为外设),


都看作文件,以同样的方式看待这些设备。


(打住,点到为止。我们仅仅做一个感性理解,暂时不做更多的深入)


📌 注意事项:


Linux 是不把 CPU 看成文件的,因为 CPU 是要帮你完成 "一切皆文件" 的设计理念的,


而你要把 CPU 也当作文件,这显然是不合理的!


Ⅱ. 时间相关的指令


0x00 data 指令

在 Linux 中我们可以直接输入 date 去查看当前的时间:


date      # 显示时间

🔨 指令功能 : 显示时间

bf8cccd9d67de00956ef0e25a53cb0f5_4efaf50a23cd4a06b1e6060f88e478d5.png


默认输出的格式好像不符合我们日常生活的使用习惯啊,我们习惯的是 年月日 + 时间。


因为各个国家个地区,对于时间的表示都是有各自的习惯的:

b351a65cf0614db2fd1974b7e1054bde_70fd9a7ab6f442309372fdff1ee02615.png


在显示方面,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

💭 我们就可以通过这种方式去控制格式,显示我们想要显示的:


8bba532c43d079736d621fce3b1e844e_2787700d8d9c445c8e4dece655a6998c.png


📜 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 ,如果我们想自己写程序,也是可以的。


💬 代码:获取时间戳

287a4e5060fe9d2dc26e7355d8263e15_77e753523c3344059acf027464ee8e9c.png

众所周知,我们的时间戳和时间的信息是可以互相转化的:


🔗 链接: 在线时间戳转换工具


20915cc6568f2e25736cebf3ca4c40d3_0ae22ed984e14a6186689c2b502c4652.png

💭 当然,我们也可以在 Linux 中转换:

8f0d5586c38b0b5f13df1c940bb58372_ccdd17c6efef41fb943ee30030085461.png


0x02 cal 指令

 在 Linux 中输入 cal 就显示出一个日历:

cal

3b70b9a2737f90805446cd13edaf2ea8_665025c1ede04bfea2f64422db251454.png  


🔨 指令功能 :用于查看日历等时间信息。


如果只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份。


cal [参数][月份][年份]

📜 常用选项:


-3  显示系统前一个月,当前月,下一个月的月历

f036c41084eba5188ddc8b9496fc5f45_edde878209ca491fa9bf3dd0938724c1.png

-j   显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)

-y  显示当前年份的日历

f6e0e7e989e8f3be09821c96a179dc4e_68711c8692fa4e31b6a95cd952df8b14.png

❓ 思考:Linux 命令的时间和日历存在的意义是什么?


有些语言是基于 Linux 命令组成起来的语言,比如 shell 。


因为脚本也是要打日志的,所以脚本也是需要有时间的。


现在用命令行看时间的人很少,但是如果把时间倒退到40年前,就会有人去拿命令行去查看时间。


Ⅲ. 文件查找


0x00 find 指令(查找)

find 路径 -[选项]

🔨 指令功能 :用于在文件树种查找文件,并作出相应的处理(可能访问磁盘)。


📃 指令介绍:


Linux 下 find 命令在目录结构中搜索文件,并执行指定的操作。

Linux 下 find 命令提供了相当多的查找条件,功能很强大。由于 find 具有强大的功能,所以它的选项也很 多,其中大部分选项都值得我们花时间来了解一下。

即使系统中含有网络文件系统(NFS),find 命令在该文件系统中同样有效,只你具有相应的权限。

在运行一个非常消耗资源的 find 命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系 统可能会花费很长的时间 (这里是指30G字节以上的文件系统)

📜 常用选项:


name 按照文件名查找文件

💭 用法演示:查找C语言的 stdio.h | 在家目录下查找所有 test.c 文件

f233700b165ac317515e94672d54873f_7ee44dd6c2d243b8b55c86a42f235764.png



0x01 grep 命令(行文本过滤工具)

在我们之前形成的有十万行的大文本 large.txt 中,


如果我想把其中的 1234 关键字的行拎出来,我们就可以使用 grep 命令:


$ grep '1234' large.txt    # 显示large.txt中带有1234的行

cedb9ab1ce361cbf53aae2d36eb53a7e_4d16cb127579404d8e1686e107161581.png

grep [选项] 搜寻字符串 文件

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


📜 常用选项:


-i   忽略大小写的不同,所以大小写视为相同。

-n  顺便输出行号。

-v  反向选择(反选),凡是具有关键字的文本行,去掉并保留没有匹配关键字的行。

📌 注意事项:


① 只要某行存在你要找的关键字,整行都会被保留显示出来,所以称 grep 为行文本过滤工具。


② grep 匹配时是明确大小写的 ,如果想忽略大小写,须加 -i 选项。

d9c8b3feb6a7f13faeb0b8267b9e5f91_6b4a7e6590014cf3a890be8cb69d275b.png


💭 操作演示:


①  -v 反向选择  |  -iv 忽略大小写并反向选择

b9e3cd5871abf547b9457769bca465de_92703adb1a7a4d93ae165e4c3026e1eb.png



②  -n 选项,将查找的结果带上匹配行所在行号


1153c7a3bee7393933681f055247e495_09c4e8cbbb734055a8efe693718a0a64.png


③  一些指令间的 "联动"

6f2a9e52a1ecb1729f3a7f913f3b6074_b228f56ba1fd4c01995112fdb21cde86.png

这是我们上一篇讲的重定向和管道,由此可见指令是非常灵活的。


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1天前
|
安全 Linux 开发工具
Linux中可引起文件时间戳改变的相关命令
【4月更文挑战第12天】Linux中可引起文件时间戳改变的相关命令
9 0
|
2天前
|
安全 Linux
Linux基本指令(下)——“Linux”
Linux基本指令(下)——“Linux”
|
3天前
|
Linux Shell 开发工具
Linux文件常用操作
Linux文件常用操作(几乎覆盖所有日常使用)
58 0
|
3天前
|
人工智能 Unix Linux
Linux基本指令
Linux基本指令
|
4天前
|
Linux 内存技术 Perl
【ZYNQ】制作从 QSPI Flash 启动 Linux 的启动文件
【ZYNQ】制作从 QSPI Flash 启动 Linux 的启动文件
|
7天前
|
Linux Windows
|
7天前
|
Linux
Linux 指令|date|cal|find|grep|热键
Linux 指令|date|cal|find|grep|热键
|
7天前
|
Linux
Linux简单指令|cd|touch|mkdir|rmdir|rm
Linux简单指令|cd|touch|mkdir|rmdir|rm
|
7天前
|
存储 安全 Unix
Linux基本指令汇总
Linux基本指令汇总
39 2
|
10天前
|
Linux
linux 超过4个G的文件传不上去的解决办法
linux 超过4个G的文件传不上去的解决办法
9 0