【Linux系统】基本指令(中) {输入输出,重定向,管道;显示时间和日期;打包和压缩,包和文件的区别}

【Linux系统】基本指令(上) {用户相关操作、查看和切换文件目录、创建删除文件或路径、构建Linux回收机制、查看文件}


2.6 输入输出

echo指令 && printf指令

echo指令——与C语言中的puts类似

  • 语法: echo [OPTION]… [STRING]…
  • 功能: 将一行文本输出到指定流(默认stdout),文本末尾自动换行。
  • 举例:
    在这里插入图片描述

printf指令——与C语言中的printf类似

  • 语法: printf FORMAT [ARGUMENT]
  • 功能: 格式化输出到指定流(默认stdout)
  • 用法: 与C语言中的printf类似,C语言中的格式控制符和转义字符在此命令中通用。
  • 举例:
    在这里插入图片描述

重定向——改变数据的流向

所谓重定向,就是改变数据的来源(输入)或流向(输出)。

  • 重定向符:

    • 输出重定向符:>
    • 追加重定向符:>>
    • 输入重定向符:<
  • 输出重定向: 本应输出到显示器的内容,重定向写入到目标文件中。若目标文件不存在,会自动创建。若存在会清空原始内容,重新写入。

    • 举例:echo -n hello > log.txt
  • 追加重定向: 本应输出到显示器的内容,重定向写入到目标文件中。若目标文件不存在,会自动创建。若存在会将内容追加到原始内容之后。

    • 举例:echo linux! >> log.txt
  • 输入重定向: 本应由键盘输入的内容,重定向到由指定文件输入。若指定文件不存在,则错误。

    • 举例:cat < log.txt (注意cat指令默认从stdin获取输入)

管道——进行流水线数据处理

  • 管道允许用户将经过处理的文件内容传给下一条指令继续处理。管道用于级联多个命令,由于每一条命令都会成为一个进程,所以管道的本质是用于级联多个进程的。
  • 管道符:|
  • 举例: 我们知道head用来输出文件的前N行而tail输出文件的后N行,那么中间的内容如何输出呢?
    在这里插入图片描述
    这里就用到了管道:
    在这里插入图片描述
    • head指令先将test1中的前15行截取出来
    • 再将处理过的内容交给tail,将前15行的后5行截取并输出到stdout
    • 这样我们就看到了最终结果
    • 由此我们可以看出使用管道的时候,隐式的发生了重定向。

2.7 时间相关的指令

date指令——显示日期

date 指定格式显示时间: date +%Y:%m:%d
date 用法: date [OPTION]… [+FORMAT]

1.在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中常用的标记列表如下

  • %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

2.在设定时间方面

  • 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″ //这样可以设置全部时间

3.时间戳

  • 时间->时间戳:date +%s
  • 时间戳->时间:date -d@1508749502
  • Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。

Cal指令——显示日历

cal命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,通称阳历。“阳历”又名“太阳历”,系以地球绕行太阳一周为一年,为西方各国所通用,故又名“西历”。

  • 命令格式: cal [参数][月份][年份]
  • 功能: 用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份
  • 常用选项:
  • -3 显示系统前一个月,当前月,下一个月的月历
  • -j 显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)
  • -y 显示当前年份的日历

举例: 显示2018年全年日历

Cal –y 2018

2.8 打包和压缩

zip/unzip指令——压缩/解压

zip

  • 语法: zip [-options] file[.zip] [dir/file]
  • 功能: 将目录或文件压缩成zip格式
  • 常用选项:
  • zip -r 递归处理,将指定目录下的所有文件和子目录一并处理
  • 举例:
    • 将test2目录压缩:
zip -r test2.zip test2

unzip

  • 语法: unzip file[.zip] [-d exdir]
  • 功能: 将.zip格式的压缩包解压
  • 常用选项:
  • [-d exdir] 指明解压路径,若不加选项指明,默认解压到当前路径。
  • 举例:
    • 将test2解压到tmp目录:
unzip test2.zip -d /tmp

tar指令——打包/解包

  • 语法: tar [option] [newfile] [target]
  • 常用选项:
  • -c :建立一个压缩文件的参数指令(打包选项);
  • -x :解开一个压缩文件的参数指令!
  • -t :查看 tarfile 里面的文件!
  • -z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
  • -j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
  • -v :压缩的过程中显示文件;常看文件时显示详细信息;
  • -f :使用档名(指定路径),请留意,在 f 之后要立即接档名喔!不要再加参数!
  • -C : 解压到指定目录
  • 举例:
  • 范例一: 将整个 /etc 目录下的文件全部打包成为 /tmp/etc.tar
[root@linux ~]# tar -cvf /tmp/etc.tar /etc<==仅打包,不压缩!
[root@linux ~]# tar -czvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩
[root@linux ~]# tar -cjvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 压缩
  1. 特别注意,在参数 f 之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。
  2. 如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar file ~
  3. 如果加 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 这个参数了!这很重要的!加上v选项可以显示包内文件的详细信息。


  • 范例三: 将 /tmp/etc.tar.gz 文件解压缩在 /usr/local/src 底下
//在当前目录下解压
[root@linux ~]# cd /usr/local/src
[root@linux src]# tar -xzvf /tmp/etc.tar.gz
//在指定目录下解压
[root@linux src]# tar -xzvf /tmp/etc.tar.gz -C /usr/local/src
  1. 在预设的情况下,我们可以将压缩档在任何地方解开的!以这个范例来说,
  2. 我先将工作目录变换到 /usr/local/src 底下,并且解开 /tmp/etc.tar.gz ,
  3. 则解开的目录会在 /usr/local/src/etc 呢!另外,如果您进入 /usr/local/src/etc则会发现,该目录下的文件属性与 /etc/(原文件)可能会有所不同喔!
  4. 如果要在指定目录下解压文件,则要在指定目录前带-C选项。

  • 范例四: 在 /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 与管线命令啦!


打包vs压缩

打包是指将一大堆文件或目录什么的变成一个总的文件,压缩则是将一个大的文件通过一些压缩算法变成一个小文件。为什么要区分这 两个概念呢?其实这源于Linux中的很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你就得先借助另外的工具将这一大堆文件先打 成一个包,然后再就原来的压缩程序进行压缩。

包和文件的区别

1、包是一种特殊的文件夹,不仅可以储存文件而且可以显示文件的状态。而文件夹仅仅能够储存文件。

2、功能不同:包的数据是可以实时更新及备份的而普通文件办不到

3、隶属关系不同:包中的文件来自于其它文件夹,而文件夹内的文件就是自身的

4、权限不同:包可以在不同的电脑或者硬盘与移动盘、U盘之间同步更新文件,而文件夹可以复制粘贴,但是不能方便更新

5、来源不同:文件夹无法追溯内部文件的来源,包可以显示内部文件是否可以链接到主计算机的原始文件,或者某个文件是否为“孤立文件|”

总的来说,包其实是文件的一种,但是文件夹下还可以填充很多层文件,而包只有一层。另外就是包可以在不同的电脑或移动盘中实时更新而文件不行。


【Linux系统】基本指令(下) {其他指令,扩展指令,热键}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芥末虾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值