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

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


相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
12月前
|
存储 数据管理 Linux
区分Linux中.tar文件与.tar.gz文件的不同。
总之,".tar"文件提供了一种方便的文件整理方式,其归档但不压缩的特点适用于快速打包和解压,而".tar.gz"文件通过额外的压缩步骤,尽管处理时间更长,但可以减小文件尺寸,更适合于需要节约存储空间或进行文件传输的场景。用户在选择时应根据具体需求,考虑两种格式各自的优劣。
1931 13
|
Linux 数据安全/隐私保护
Linux文件权限调整:chmod指令解析
在日常使用或系统管理中,对 `chmod`的熟练应用是提高工作效率和维持系统稳定性的关键。掌握如何给予或限制权限是每个Linux使用者都应该具备的技能。
744 17
|
12月前
|
移动开发 Linux Windows
Linux常用基本指令
对Linux中常用命令,包括文件创建与销毁,压缩与打包,查看搜索文件的方式等指令的介绍
347 1
|
安全 Linux
Linux赋予文件000权限的恢复技巧
以上这些步骤就像是打开一扇锁住的门,步骤看似简单,但是背后却有着严格的逻辑和规则。切记,在任何时候,变更文件权限都要考虑安全性,不要无谓地放宽权限,那样可能
450 16
|
存储 Linux 数据处理
深入剖析Linux中一切即文件的哲学和重定向的机制
在计算机的奇妙世界中,Linux的这套哲学和机制减少了不同类型资源的处理方式,简化了抽象的概念,并蕴藏着强大的灵活性。就像变戏法一样,轻轻松松地在文件、程序与设备之间转换数据流,标准输入、输出、错误流就在指尖舞动,程序的交互和数据处理因此变得既高效又富有乐趣。
226 4
linux文件重命名命令
本指南介绍Linux文件重命名方法,包括单文件操作的`mv`命令和批量处理的`rename`命令。`mv`可简单更改文件名并保留扩展名,如`mv old_file.txt new_name.txt`;`rename`支持正则表达式,适用于复杂批量操作,如`rename &#39;s/2023/2024/&#39; *.log`。提供实用技巧如大小写转换、数字序列处理等,并提醒覆盖风险与版本差异,建议使用`-n`参数预览效果。
|
Linux 安全
linux时间相关结构体和函数整理【转载】
转载LYJ:http://blog.chinaunix.net/space.php?uid=14617649&do=blog&id=3058661 一、时间类型。Linux下常用的时间类型有4个:time_t,struct timeb, struct timeval,struct timespec,clock_t, struct tm.
1113 0
|
10月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
1009 1
二、Linux文本处理与文件操作核心命令
|
10月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
618 137