【看表情包学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

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


相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
9月前
|
监控 Linux
Linux命令大全:echo与tail实现输出重定向。
这样,我们实现了使用echo和tail命令进行输出重定向的目的。在实际应用中,输出重定向技巧可节省时间,提高工作效率。希望本文内容对您了解和掌握Linux系统中echo与tail命令以及输出重定向的操作有所帮助。
291 27
|
9月前
|
Ubuntu Linux
"unzip"命令解析:Linux下如何处理压缩文件。
总的来说,`unzip`命令是Linux系统下一款实用而方便的ZIP格式文件处理工具。本文通过简明扼要的方式,详细介绍了在各类Linux发行版上安装 `unzip`的方法,以及如何使用 `unzip`命令进行解压、查看和测试ZIP文件。希望本文章能为用户带来实际帮助,提高日常操作的效率。
1936 12
|
10月前
|
Ubuntu Linux PHP
利用PHP压缩音频:Linux环境下的ffmpeg简易安装指南
希望这个指南能为你的编程之旅提供帮助。只需记住,每一行代码都像音乐的音符,组合在一起,创造出美妙的旋律。祝你编程愉快!
346 6
在Linux中,列出几种常见打包工具并写相应解压缩参数。
在Linux中,列出几种常见打包工具并写相应解压缩参数。
|
Linux
Linux压缩与解压“助手”
gzip压缩解压 因为都是系统自带的我们不需要安装; ls 看一下目录当前的文件,创建一个 touch 123.txt 文件; 原文件消失,压缩解压 gzip 进行压缩,(“ gzip 123.txt ”),这样就压缩完毕了; gzip 进行解压,(“ gzip -d 123.txt.gz”),这样就解压完毕了; 原文件保留,gzip -k 123.txt、gzip -dk 123.txt.gz ;
258 9
|
安全 关系型数据库 MySQL
Linux下安装mysql8.0(以tar.xz包安装--编译安装)
通过上述步骤,您完成了从下载、编译、安装到配置MySQL 8.0的全过程。此过程虽然较为复杂,但提供了对MySQL安装环境的完全控制,有助于满足特定的部署需求。在实际操作中,根据具体的系统环境,可能还需调整部分步骤或解决未预见的依赖问题。始终参考官方文档和社区资源,保持安装过程与最新版本的兼容性。
5530 68
|
前端开发 Unix Linux
揭秘 Electron 的 Linux 打包过程:你知道背后发生了什么吗?
本文详细介绍了 `electron-builder` 在 Linux 平台上如何打包 Electron 应用程序,涵盖了 AppImage、Flatpak、Snap 等多种格式的打包原理和具体实现。文章从初始化 `LinuxPackager` 到创建各种目标格式的包,详细解析了每个步骤的代码逻辑和关键方法,帮助开发者更好地理解和使用 `electron-builder` 进行 Linux 应用的打包。
904 2
揭秘 Electron 的 Linux 打包过程:你知道背后发生了什么吗?
|
Linux Docker 容器
Centos安装docker(linux安装docker)——超详细小白可操作手把手教程,包好用!!!
本篇博客重在讲解Centos安装docker,经博主多次在不同服务器上测试,极其的稳定,尤其是阿里的服务器,一路复制命令畅通无阻。
22088 5
Centos安装docker(linux安装docker)——超详细小白可操作手把手教程,包好用!!!
|
机器学习/深度学习 Ubuntu Linux
在Linux中,如何按照该要求抓包:只过滤出访问http服务的,目标ip为192.168.0.111,一共抓1000个包,并且保存到1.cap文件中?
在Linux中,如何按照该要求抓包:只过滤出访问http服务的,目标ip为192.168.0.111,一共抓1000个包,并且保存到1.cap文件中?
|
算法 Linux 数据安全/隐私保护
“Linux压缩大师”:gzip、bzip2、tar与zip
在Linux系统管理中,文件压缩与解压至关重要,能有效减少存储空间占用并加快文件传输。常用工具包括gzip、bzip2、tar和zip。gzip采用Lempel-Ziv算法,压缩率高且速度快,适用于单个文件压缩,扩展名为.gz。bzip2压缩率更高但速度稍慢,同样用于单个文件,扩展名为.bz2。tar主要用于打包文件而不直接压缩,常与gzip或bzip2结合使用实现压缩打包。zip则是一种通用压缩工具,支持多文件压缩及密码保护,兼容性好。这些工具让Linux环境下的文件管理更加高效便捷。
647 1