禅道博客

分享专业技术知识,文章内容干货满满

读书笔记《Linux命令行与shell脚本编程大全》第二十四章

2023-12-21 15:08:24
胡爱荣
原创 738
摘要:本文是《Linux命令行与shell脚本编程大全》第24章的读书笔记。

1. 归档

1.1归档数据文件

需要的功能

Linux中归档数据的主要工具是tar命令,tar命令可以将整个目录归档到单个文件中。

tar创建工作目录归档文件:

Tar命令会显示一条警告消息,表明它删除了路径名开头的斜线,将路径从绝对路径变为相对路径,就可以解压到文件系统中的任何地方了。可以通过将STDERR重定向到/dev/null文件,不显示该条警告信息。

-z:会将tar归档文件压缩成gzip格式的tar文件,也叫作tarball,可以使用扩展名.tar.gz或.tgz来表示tarball。

我们不需要为待备份的新目录或文件修改或编写新的归档脚本,而是可以借助于配置文件。配置文件包含了希望进行归档的每个目录或文件。如下所示:

1.2 创建逐日归档文件的存放位置

创建集中归档仓库目录

创建好集中归档目录后,需要授予某些用户访问权限,否则,在该目录下创建文件时会提示无权限。

创建一个特殊的用户组Archivers

将用户添加到Archivers组后,用户必须先登出后再登入,才可以使得组成员关系生效。

注:Archivers组的所有用户都可以在归档目录中添加和删除文件。

1.3 创建按日期归档的脚本

下面的代码中使用当前日期来唯一标识该文件。DESTINATION变量会将归档文件的全路径名加上去。CONFIG_FILE变量指向含有待归档目录信息的归档配置文件。

下面的代码中使用当前日期来唯一标识该文件。DESTINATION变量会将归档文件的全路径名加上去。CONFIG_FILE变量指向含有待归档目录信息的归档配置文件。

DATE=$(date +%y%m%d) 

#

# Set Archive File Name 

#

FILE=archive$DATE.tar.gz

# Set Configuration and Destination File 

CONFIG_FILE=/archive/Files_To_Backup 

DESTINATION=/archive/$FILE 

#

1.4 运行按日归档的脚本

1.5 创建按小时归档的脚本

归档目录中要包含与一年中各个月份对应的目录,将月的序号作为目录名,每月的目录中又包含与当月各天对应的目录(用天的序号作为目录名)。我们只需给每个归档文件加上时间戳,然后将他们放到与月日对应的目录中就可以了。

脚本Hourly_Archive.sh到了Main Script部分,就和Daily_Archive.sh脚本完全一样了。Hourly_Archive.sh会从date命令提取天和月,以及用来唯一标识归档文件的时间戳。然后它用这个信息创建与当天对应的目录(如果已经存在的话,就会退出)。最后,这个脚本用tar命令创建归档文件并将它压缩成一个tarball。

1.6 运行按小时归档的脚本

归档文件名archive1717.tar.gz中包含了对应的小时17和分钟17。

如果希望文件名中总是保留4位数字,可以将脚本行TIME=$(date +%k%M)修改成 TIME=$(date +%k0%M),在%k后加入数字0后,所有的单数字小时数都会被加入一个前导数字0,填充成两位数字。如:archive0115.tar.gz。

2. 管理用户账户

删除账户在管理账户工作中比较复杂,在删除账户时,至少需要4个步骤:

(1) 获得正确的待删除用户账户名;

(2) 杀死正在系统上运行的属于该账户的进程;

(3) 确认系统中属于该账户的所有文件;

(4) 删除该用户账户。

3. 监测磁盘空间

如果已经安装了quota软件包,可以在shell提示符下输入man –k quota获得有关磁盘限额管理的更多信息。

3.1 需要的功能

du命令:显示单个文件和目录的磁盘使用情况。

-s:用来总结目录一级的整体使用情况。

使用du命令总结/home目录下每个用户的$HOME目录的磁盘占用情况:

使用sed的等号命令(=)来加入行号:

sed '{11,$D; =}' |

sed 'N; s/\n/ /' |

sed编辑器的输出会通过管道输出到gawk命令,然后用printf函数打印出来。

gawk '{printf $1 ":" "\t" $2 "\t" $3 "\n"}'

3.2 创建并运行脚本

下面的脚本为多个指定目录创建报告,使用了CHECK_DIRECTORIES变量,该变量只设置为包含两个目录。

CHECK_DIRECTORIES=" /var/log /home",每次for循环都会遍历变量

脚本使用for循环来对变量中列出的每个目录执行du命令CHECK_DIRECTORIES中的值列表,会将列表中的下一个值赋给DIR_CHECK变量。

使用date命令给报告的文件名加个日期戳,用exec命令将它的输出重定向到加带日期戳的报告文件中:

DATE=$(date '+%m%d%y')

exec > disk_space_$DATE.rpt

使用echo命令输出一些报告标题:

echo "Top Ten Disk Space Usage"

echo "for $CHECK_DIRECTORIES Directories"

暂时没有记录
评论通过审核后显示。