linux基础操作之二

6、文件解压与打包
1、概念讲解

常见常用的压缩包文件格式。
1、在 Windows 上最常见的不外乎这两种 .zip,.7z 后缀的压缩文件。
2、而在 Linux 上面常见的格式除了以上两种外,还有 .rar,.gz,.xz,.bz2,.tar,.tar.gz,.tar.xz,*.tar.bz2,
简单介绍如下:
在这里插入图片描述

2、实战
1、zip 压缩打包程序
  • 1、使用 zip 打包文件夹:
cd /home/shiyanlou
zip -r -q -o shiyanlou.zip /home/shiyanlou/Desktop
du -h shiyanlou.zip
file shiyanlou.zip

上面命令将目录 /home/shiyanlou/Desktop 打包成一个文件,并查看了打包后文件的大小和类型。

第一行命令中,-r 参数表示递归打包包含子目录的全部内容,-q 参数表示为安静模式,即不向屏幕输出信息,-o表示输出文件,需在其后紧跟打包输出文件名。后面使用 du 命令查看打包后文件的大小。

  • 2、设置压缩级别为 9 和 1(9 最大,1 最小),重新打包:
zip -r -9 -q -o shiyanlou_9.zip /home/shiyanlou/Desktop -x ~/*.zip
zip -r -1 -q -o shiyanlou_1.zip /home/shiyanlou/Desktop -x ~/*.zip

这里添加了一个参数用于设置压缩级别 -[1-9]1 表示最快压缩但体积大,9 表示体积最小但耗时最久。最后那个 -x 是为了排除我们上一次创建的 zip 文件,否则又会被打包进这一次的压缩文件中,注意:这里只能使用绝对路径,否则不起作用。

  • 3、我们再用 du 命令分别查看默认压缩级别、最低、最高压缩级别及未压缩的文件的大小:

h, --human-readable(顾名思义,你可以试试不加的情况)
d, --max-depth(所查看文件的深度)

  • 4、创建加密 zip 包
#使用 -e 参数可以创建加密压缩包:
zip -r -e -o shiyanlou_encryption.zip /home/shiyanlou/Desktop
  • 5、注意: 关于 zip 命令,因为 Windows 系统与 Linux/Unix 在文本文件格式上的一些兼容问题,比如换行符(为不可见字符),在 Windows 为 CR+LF(Carriage-Return+Line-Feed:回车加换行),而在 Linux/Unix 上为 LF(换行),所以如果在不加处理的情况下,在 Linux 上编辑的文本,在 Windows 系统上打开可能看起来是没有换行的。如果你想让你在 Linux 创建的 zip 压缩文件在 Windows 上解压后没有任何问题,那么你还需要对命令做一些修改:
zip -r -l -o shiyanlou.zip /home/shiyanlou/Desktop
#需要加上 -l 参数将 LF 转换为 CR+LF 来达到以上目的。
2、使用 unzip 命令解压缩 zip 文件
  • 1、将 shiyanlou.zip 解压到当前目录:
unzip shiyanlou.zip
  • 2、使用安静模式,将文件解压到指定目录:
unzip -q shiyanlou.zip -d ziptest
#上述指定目录不存在,将会自动创建。
  • 3、如果你不想解压只想查看压缩包的内容你可以使用 -l 参数:
unzip -l shiyanlou.zip
  • 4、使用 -O(英文字母,大写 o)参数指定编码类型:
unzip -O GBK 中文压缩文件.zip

#UTF-8 为默认编码方式
unzip -O UTF-8 中文压缩文件.zip
3、tar 打包工具

在 Linux 上面更常用的是 tar 工具,tar 原本只是一个打包工具,只是同时还是实现了对 7z、gzip、xz、bzip2 等工具的支持,这些压缩工具本身只能实现对文件或目录(单独压缩目录中的文件)的压缩,没有实现对文件的打包压缩,所以我们也无需再单独去学习其他几个工具,tar 的解压和压缩都是同一个命令,只需参数不同,使用比较方便。

下面先掌握 tar 命令一些基本的使用方式,即不进行压缩只是进行打包(创建归档文件)和解包的操作。

  • 1、创建一个 tar 包:
cd /home/shiyanlou
tar -P -cf shiyanlou.tar /home/shiyanlou/Desktop

上面命令中,-P 保留绝对路径符,-c 表示创建一个 tar 包文件,-f 用于指定创建的文件名,注意文件名必须紧跟在 -f 参数之后,比如不能写成 tar -fc shiyanlou.tar,可以写成 tar -f shiyanlou.tar -c ~。你还可以加上 -v 参数以可视的的方式输出打包的文件。

  • 2、解包一个文件(-x 参数)到指定路径的已存在目录(-C 参数):
mkdir tardir
tar -xf shiyanlou.tar -C tardir
  • 3、只查看不解包文件 -t 参数:
tar -tf shiyanlou.tar
  • 4、保留文件属性和跟随链接(符号链接或软链接),有时候我们使用 tar 备份文件当你在其他主机还原时希望保留文件的属性(-p 参数)和备份链接指向的源文件而不是链接本身(-h 参数):
tar -cphf etc.tar /etc

对于创建不同的压缩格式的文件,对于 tar 来说是相当简单的,需要的只是换一个参数,这里我们就以使用 gzip 工具创建 *.tar.gz 文件为例来说明。

  • 1、我们只需要在创建 tar 文件的基础上添加 -z 参数,使用 gzip 来压缩文件:
tar -czf shiyanlou.tar.gz /home/shiyanlou/Desktop
  • 2、解压 *.tar.gz 文件:
tar -xzf shiyanlou.tar.gz

在这里插入图片描述

4、总结

在这里插入图片描述

$ sudo apt-get install libaa-bin
# 提示 command not found ,请自行解决
$ aafire
7、文件系统操作与磁盘管理
1、查看磁盘和目录的容量
  • 使用 df 命令查看磁盘的容量
df
df -h #以一种你应该看得懂的方式展示

物理主机上的 /dev/sda2 是对应着主机硬盘的分区,后面的数字表示分区号,数字前面的字母 a 表示第几块硬盘(也可能是可移动磁盘),你如果主机上有多块硬盘则可能还会出现 /dev/sdb,/dev/sdc 这些磁盘设备都会在 /dev 目录下以文件的存在形式。
接着你还会看到"1k-块"这个陌生的东西,它表示以磁盘块大小的方式显示容量,后面为相应的以块大小表示的已用和可用容量。

  • 使用 du 命令查看目录的容量
# 默认同样以 块 的大小展示
 du
# 加上`-h`参数,以更易读的方式展示
du -h

-d参数指定查看目录的深度

# 只查看1级目录的信息
du -h -d 0 ~
# 查看2级
du -h -d 1 ~

常用参数

du -h #同--human-readable 以K,M,G为单位,提高信息的可读性。
du -a #同--all 显示目录中所有文件的大小。
du -s #同--summarize 仅显示总计,只列出最后加总的值。

du(estimate file space usage)命令与df(report file system disk space usage)命令只有一字之差,希望大家注意不要弄混淆了,你可以像我这样从 man 手册中获取命令的完整描述,记全称就不会搞混了。

2、 dd 命令简介

dd命令用于转换和复制文件,不过它的复制不同于cp。之前提到过关于 Linux 的很重要的一点,一切即文件,在 Linux 上,硬件的设备驱动(如硬盘)和特殊设备文件(如/dev/zero和/dev/random)都像普通文件一样,只是在各自的驱动程序中实现了对应的功能,dd 也可以读取或写入这些文件。
这样,dd也可以用在备份硬件的引导扇区、获取一定数量的随机数据或者空数据等任务中。dd程序也可以在复制时处理数据,例如转换字节序、或在 ASCII 与 EBCDIC 编码间互换。

dd的命令行语句与其他的 Linux 程序不同,因为它的命令行选项格式为选项=值,而不是更标准的--选项 值-选项=值。dd默认从标准输入中读取,并写入到标准输出中,但可以用选项if(input file,输入文件)和of(output file,输出文件)改变。

  • 我们先来试试用dd命令从标准输入读入用户的输入到标准输出或者一个文件中:
# 输出到文件
dd of=test bs=10 count=1 # 或者 dd if=/dev/stdin of=test bs=10 count=1
# 输出到标准输出
dd if=/dev/stdin of=/dev/stdout bs=10 count=1
# 注
在打完了这个命令后,继续在终端打字,作为你的输入

上述命令从标准输入设备读入用户输入(缺省值,所以可省略)然后输出到 test 文件,bs(block size)用于指定块大小(缺省单位为 Byte,也可为其指定如’K’,‘M’,'G’等单位),count用于指定块数量。
如上图所示,我指定只读取总共 10 个字节的数据,当我输入了“hello shiyanlou”之后加上空格回车总共 16 个字节(一个英文字符占一个字节)内容,显然超过了设定大小。使用du和cat命令看到的写入完成文件实际内容确实只有 10 个字节(那个黑底百分号表示这里没有换行符),而其他的多余输入将被截取并保留在标准输入。

  • 前面说到dd在拷贝的同时还可以实现数据转换,那下面就举一个简单的例子:将输出的英文字符转换为大写再写入文件:
dd if=/dev/stdin of=test bs=10 count=1 conv=ucase
3、 使用 dd 命令创建虚拟镜像文件
  • 待办
8、 Linux下的帮助命令
1、 内建命令与外部命令
  • 有一些查看帮助的工具在内建命令与外建命令上是有区别对待的。

内建命令实际上是 shell 程序的一部分,其中包含的是一些比较简单的 Linux 系统命令,这些命令是写在 bash 源码的 builtins 里面的,由 shell 程序识别并在 shell 程序内部完成运行,通常在 Linux 系统加载运行时 shell 就被加载并驻留在系统内存中。而且解析内部命令 shell 不需要创建子进程,因此其执行速度比外部命令快。比如:history、cd、exit 等等。
外部命令是 Linux 系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调入内存。虽然其不包含在 shell 中,但是其命令执行过程是由 shell 程序控制的。外部命令是在 Bash 之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin 等等。比如:ls、vi 等。

  • 简单来说就是:一个是天生自带的天赋技能,一个是后天得来的附加技能。我们可以使用  type 命令来区分命令是内建的还是外部的。例如这两个得出的结果是不同的:
type exit

type vim

#得到这样的结果说明是内建命令,正如上文所说内建命令都是在 bash 源码中的 builtins 的.def中
xxx is a shell builtin
#得到这样的结果说明是外部命令,正如上文所说,外部命令在/usr/bin or /usr/sbin等等中
xxx is /usr/bin/xxx
#若是得到alias的结果,说明该指令为命令别名所设定的名称;
xxx is an alias for xx --xxx
2、help命令
  • 本实验环境是 zsh,而 zsh 中内置并没有 help 命令,我们可以进入 bash 中,在 bash 中内置有该命令
bash
help ls #帮助失败

因为 help 命令是用于显示 shell 内建命令的简要帮助信息。帮助信息中显示有该命令的简要说明以及一些参数的使用以及说明,一定记住 help 命令只能用于显示内建命令的帮助信息,不然就会得到你刚刚得到的结果。

  • 那如果是外部命令怎么办,不能就这么抛弃它呀。其实外部命令基本上都有一个参数–help,这样就可以得到相应的帮助,看到你想要的东西了。试试下面这个命令是不是能看到你想要的东西了。
ls --help
3、man命令
  • 你可以尝试下这个命令
man ls

得到的内容比用 help 更多更详细,而且  man  没有内建与外部命令的区分,因为 man 工具是显示系统手册页中的内容,也就是一本电子版的字典,这些内容大多数都是对命令的解释信息,还有一些相关的描述。通过查看系统文档中的 man 也可以得到程序的更多相关信息和 Linux 的更多特性。

是不是好用许多,当然也不代表 help 就没有存在的必要,当你非常紧急只是忘记该用哪个参数的时候,help 这种显示简单扼要的信息就特别实用,若是不太紧急的时候就可以用 man 这种详细描述的查询方式

在尝试上面这个命令时我们会发现最左上角显示“ LS (1)”,在这里,“ LS ”表示手册名称,而“(1)”表示该手册位于第一章节。这个章节又是什么?在 man 手册中一共有这么几个章节

打开手册之后我们可以通过 pgup 与 pgdn 或者上下键来上下翻看,可以按 q 退出当前页面

在这里插入图片描述

4、info命令
  • 要是你觉得 man 显示的信息都还不够,满足不了你的需求,那试试 info 命令,注意实验楼的环境中没有安装 info,可以手动安装,安装和操作步骤如下:
# 安装 info
sudo apt-get update
sudo apt-get install info
# 查看 ls 命令的 info
info ls

得到的信息是不是比 man 还要多了,info 来自自由软件基金会的 GNU 项目,是 GNU 的超文本帮助系统,能够更完整的显示出 GNU 信息。所以得到的信息当然更多

man 和 info 就像两个集合,它们有一个交集部分,但与 man 相比,info 工具可显示更完整的  GNU  工具信息。若 man 页包含的某个工具的概要信息在 info 中也有介绍,那么 man 页中会有“请参考 info 页更详细内容”的字样。

9、 Linux任务计划crontab
  • crontab 命令常见于 Unix 和类 Unix 的操作系统之中(Linux 就属于类 Unix 操作系统),用于设置周期性被执行的指令。
1、crontab 简介

crontab 命令从输入设备读取指令,并将其存放于 crontab 文件中,以供之后读取和执行。通常,crontab 储存的指令被守护进程激活,crond 为其守护进程,crond 常常在后台运行,每一分钟会检查一次是否有预定的作业需要执行。

通过 crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell   script 脚本。时间间隔的单位可以是分钟、小时、日、月、周的任意组合。

这里我们看一看 crontab 的格式

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
2、crontab 准备
  • crontab 在本实验环境中需要做一些特殊的准备,首先我们会启动 rsyslog,以便我们可以通过日志中的信息来了解我们的任务是否真正的被执行了(在本实验环境中需要手动启动,而在自己本地中 Ubuntu 会默认自行启动不需要手动启动)
sudo apt-get install -y rsyslog
sudo service rsyslog start
  • 在本实验环境中 crontab 也是不被默认启动的,同时不能在后台由 upstart 来管理,所以需要我们来启动它:
sudo cron -f &
2、crontab 使用
  • 下面将开始 crontab 的使用了,我们通过下面一个命令来添加一个计划任务
crontab -e
#第一次启动会出现这样一个画面,这是让我们选择编辑的工具,选择第二个基本的 vim 就可以了

而选择后我们会进入这样一个画面,这就是添加计划的地方了,与一般的配置文档相同,以#号开头的都是注释,通过文档的最后一排我们可以猜猜 crontab 的格式是什么样的呢?

详细的格式可以使用上一节中学习到的 man 命令查看:man crontab

  • 在了解命令格式之后,我们通过这样的一个例子来完成一个任务的添加,在文档的最后一排加上这样一排命令,该任务是每分钟我们会在/home/shiyanlou 目录下创建一个以当前的年月日时分秒为名字的空白文件
*/1 * * * * touch /home/shiyanlou/$(date +\%Y\%m\%d\%H\%M\%S)

注意
“ % ” 在 crontab 文件中,有结束命令行、换行、重定向的作用,前面加 ” \ ” 符号转义,否则,“ % ” 符号将执行其结束命令行或者换行的作用,并且其后的内容会被做为标准输入发送给前面的命令。

  • 当然我们也可以通过这样的一个指令来查看我们添加了哪些任务
crontab -l
  • 虽然我们添加了任务,但是如果 cron 的守护进程并没有启动,它根本都不会监测到有任务,当然也就不会帮我们执行,我们可以通过以下 2 种方式来确定我们的 cron 是否成功的在后台启动,默默的帮我们做事,若是没有就得执行上文准备中的第二步了
ps aux | grep cron

or

pgrep cron
  • 我们通过这样一个命令可以查看到执行任务命令之后在日志中的信息反馈
sudo tail -f /var/log/syslog
  • 当我们并不需要这个任务的时候我们可以使用这么一个命令去删除任务
crontab -r
3、crontab 的深入
  • 每个用户使用 crontab -e 添加计划任务,都会在 /var/spool/cron/crontabs 中添加一个该用户自己的任务文档,这样目的是为了隔离。
ll /var/spool/cron/crontabs
  • 如果是系统级别的定时任务,应该如何处理?只需要以 sudo 权限编辑 /etc/crontab 文件就可以。

cron 服务监测时间最小单位是分钟,所以 cron 会每分钟去读取一次 /etc/crontab 与 /var/spool/cron/crontabs 里面的內容。

在 /etc 目录下,cron 相关的目录有下面几个:
在这里插入图片描述

  • 每个目录的作用:

/etc/cron.daily,目录下的脚本会每天执行一次,在每天的 6 点 25 分时运行;
/etc/cron.hourly,目录下的脚本会每个小时执行一次,在每小时的 17 分钟时运行;
/etc/cron.monthly,目录下的脚本会每月执行一次,在每月 1 号的 6 点 52 分时运行;
/etc/cron.weekly,目录下的脚本会每周执行一次,在每周第七天的 6 点 47 分时运行;

挑战:备份日志
  • 小明是一个服务器管理员,他需要每天备份论坛数据(这里我们用 alternatives.log 日志替代),备份当天的日志并删除之前的日志。而且备份之后文件名是 年-月-日 的格式。alternatives.log/var/log/ 下面。

  • 目标

    • 1、为 shiyanlou 用户添加计划任务
    • 2、每天凌晨 3 点的时候定时备份 alternatives.log/home/shiyanlou/tmp/ 目录
    • 3、命名格式为 年-月-日,比如今天是 2017 年 4 月 1 日,那么文件名为 2017-04-01
  • 参考答案:

sudo cron -f &
crontab -e 添加
0 3 * * * sudo rm /home/shiyanlou/tmp/*
0 3 * * * sudo cp /var/log/alternatives.log /home/shiyanlou/tmp/$(date +\%Y-\%m-\%d)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值