Day10-Linux系统打包和时间命令及案例精讲
- 1. tar 打包压缩
- 1.1 【打包】 为什么要打包,压缩?
- 1.2 【查看包里内容】
- 1.3 【解包】
- 1.4 排除打包 --exclude=
- 2. date 时间命令
1. tar 打包压缩
1.1 【打包】 为什么要打包,压缩?
-zcvf 打包组合 zcf
z 压缩(gzip压缩)
c 创建
v 显示过程
f 针对文件
语法:
命令 选项
tar zcf 【压缩包的名字.tar.gz】 【要打包的东西】
装东西的筐 苹果
练习1:把/etc/目录打包到/opt下面。
ls -d /etc #检查有没有要打包的目录
cd / #切换到打包目录的上一级
tar zcf /opt/etc.tar.gz ./etc
执行过程:
[root@oldboy ~]# cd /
[root@oldboy /]# tar zcvf /opt/etc.tar.gz ./etc/
[root@oldboy /]# ls /opt/
etc etc.tar.gz services
练习2:把/usr/local目录打包到/tmp下面。
[root@oldboy /]# ls -ld /usr/local/
drwxr-xr-x. 12 root root 131 Dec 1 2023 /usr/local/
[root@oldboy /]# cd /usr/
[root@oldboy usr]# tar zcf /tmp/local.tar.gz ./local/
[root@oldboy usr]# ls /tmp/
local.tar.gz services
v 显示过程 工作中和领导汇报工作。
关键:
-
结果:赚100万。
-
过程:怎么赚的100万?
1.2 【查看包里内容】
t 查看包里内容
tar tf 包名
[root@oldboy usr]# tar tf /tmp/local.tar.gz
./local/
./local/bin/
./local/etc/
./local/games/
./local/include/
./local/lib/
./local/lib64/
./local/libexec/
./local/sbin/
./local/share/
./local/share/applications/
./local/share/info/
./local/share/man/
./local/share/man/man1/
......
1.3 【解包】
组合zxvf,缩写xf
x 解压
[root@oldboy opt]# cd /opt
[root@oldboy opt]# tar zxvf etc.tar.gz #解压到了当前目录
[root@oldboy opt]# tar zxf etc.tar.gz
[root@oldboy opt]# tar xf etc.tar.gz
-C 指定路径解压
[root@oldboy opt]# tar xf etc.tar.gz -C /home/oldboy/
[root@oldboy opt]# ls /home/oldboy/
-p 保持属性(zcfp)
-j 通过bzip2命令压缩或解压(非常少了)
tar jcvf 包名.tar.bz2 包名
[root@oldboy opt]# tar jcvf /tmp/a.tar.bz2 /etc/hosts #打包实践
tar: 从成员名中删除开头的“/”
/etc/hosts
[root@oldboy opt]# ls /tmp/
a.hosts a.tar.bz2 etc local.tar.gz services
[root@oldboy opt]# cd /tmp/
[root@oldboy tmp]# tar zxvf a.tar.bz2 gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now两种解压方法:
[root@oldboy tmp]# tar jxvf a.tar.bz2
etc/hosts
[root@oldboy tmp]# tar xf a.tar.bz2 #gzip,bzip统一解压方法。
1.4 排除打包 --exclude=
tar zcvf /tmp/pai.tar.gz ./oldboy/ --exclude=file1
命令 参数 包名 目录 排除的文件
环境准备
[root@oldboy tmp]# mkdir /oldboy -p
[root@oldboy tmp]# cd /oldboy/
[root@oldboy oldboy]# ls
[root@oldboy tmp]# mkdir /oldboy -p
[root@oldboy tmp]# cd /oldboy/
[root@oldboy oldboy]# ls
[root@oldboy oldboy]# touch file{1..5}
[root@oldboy oldboy]# ls
file1 file2 file3 file4 file5
[root@oldboy oldboy]# cd ../
练习排除打包
排除file1
[root@oldboy /]# tar zcvf /tmp/pai.tar.gz ./oldboy/ --exclude=file1
./oldboy/
./oldboy/file2
./oldboy/file3
./oldboy/file4
./oldboy/file5
排除file1到file3 ###–exclude=file{1…3}
[root@oldboy /]# tar zcvf /tmp/pai.tar.gz ./oldboy/ --exclude=file{1..3}
./oldboy/
./oldboy/file4
./oldboy/file5
指定要排除的文件 ### --exclude=file{1,3,5}
[root@oldboy /]# tar zcvf /tmp/pai.tar.gz ./oldboy/ --exclude=file{1,3,5}
./oldboy/
./oldboy/file2
./oldboy/file4###--exclude=file1 --exclude=file2
[root@oldboy /]# tar zcvf /tmp/pai.tar.gz ./oldboy/ --exclude=file1 --exclude=file2
./oldboy/
./oldboy/file3
./oldboy/file4
./oldboy/file5
从文件中排除打包 --exclude-from(-X)
建立排除的文件paichu.log,内容就是排除的文件名
cat >paichu.log<<EOF
file1
file5
EOF[root@oldboy /]# cat paichu.log
file1
file5
[root@oldboy /]# tar zcvfX /tmp/pai.tar.gz paichu.log ./oldboy/
./oldboy/
./oldboy/file2
./oldboy/file3
./oldboy/file4
tar zcvfX /tmp/pai.tar.gz paichu.log ./oldboy/
存储排除文件名的文件
-h 打包软链接
/etc/rc.local是软链接文件,指向真实路径/etc/rc.d/rc.local
默认打包的时候,只打包了软链接文件。
tar zcvf /backup/rc.local_1.tar.gz /etc/rc.local
【而加上-h打包,可以打包软链接对应的真实文件】
[root@oldboy etc]# tar zcvfh /backup/rc.local_1.tar.gz /etc/rc.local
tar: 从成员名中删除开头的“/”
/etc/rc.local
[root@oldboy etc]# cd /backup/
[root@oldboy backup]# tar xf rc.local_1.tar.gz
[root@oldboy backup]# cat etc/rc.local
#!/bin/bash
touch /var/lock/subsys/local
2. date 时间命令
日期 时间命令 date,别和data搞混这是数据。
date -s "2030/5/14" #修改日期
date -s "2030/5/14 23:45:12" #修改时间
clock -w #写到bios永久生效。
学习一下。。。
工作中服务器的时间是定时和互联网时间同步的。
自己配置定时同步(设置搭建时间服务器) NTPD服务和chronyd
CentOS6中,默认使用ntpd时间服务
CentOS7中,默认使用chrony时间服务
练习:
[root@oldboy backup]# date -s "2030/5/14"
2030年 05月 14日 星期二 00:00:00 CST
[root@oldboy backup]# date
2030年 05月 14日 星期二 00:00:07 CST
[root@oldboy backup]# date -s "2030/5/14 23:45:12"
2030年 05月 14日 星期二 23:45:12 CST
[root@oldboy backup]# clock -w
当下时间,特定格式时间显示
[root@oldboy ~]# date +%F
2030-05-15
[root@oldboy ~]# date +%Y
2030
[root@oldboy ~]# date +%m
05
[root@oldboy ~]# date +%d
15
[root@oldboy ~]# date +%Y-%m-%d
2030-05-15
[root@oldboy ~]# date +%H
00
[root@oldboy ~]# date +%M
07
[root@oldboy ~]# date +%S
31
[root@oldboy ~]# date +%H:%M:%S
00:07:51
[root@oldboy ~]# date +%Y-%m-%d\ %H:%M:%S
2030-05-15 00:08:16
[root@oldboy ~]# date +%Y-%m-%d %H:%M:%S #空格要转义,否则报错。
date: 额外的操作数 "%H:%M:%S"
Try 'date --help' for more information.
[root@oldboy ~]# date +%F\ %T
2030-05-15 00:09:08
[root@oldboy opt]# date +%w
3
-d 显示时间
过去的时间(- 表示过去)
[root@oldboy opt]# date +%F -d "-3day"
2030-05-12
[root@oldboy opt]# date +%F -d "-3month"
2030-02-15
[root@oldboy opt]# date +%F -d "-3year"
2027-05-15
[root@oldboy opt]# date +%F -d "-24hour"
2030-05-14
[root@oldboy opt]# date +%F -d "-1440min"
2030-05-14
[root@oldboy opt]# date +%F -d "-86400sec"
2030-05-14
未来的时间(+ 表示未来)
[root@oldboy opt]# date +%F -d "+3day"
2030-05-18
企业级打包案例
案例1:每天打包/etc/目录,到/backup目录,要求压缩包的名字按照每天的日期命名。
1)知识点:
$( )和` `反引号,里面都是放命令,可以作为路径,文件名的一部分
2)测试
[root@oldboy ~]# echo $(date +%F)
2030-05-15
[root@oldboy ~]# echo `date +%F`
2030-05-15
3)练习
[root@oldboy ~]# tar zcf /tmp/etc_$(date +%F).tar.gz /etc/
tar: Removing leading `/' from member names
[root@oldboy ~]# ls /tmp/
etc_2030-05-15.tar.gz local.tar.gz services #压缩包的名字还有当天的日期
4)解答·
[root@oldboy ~]# mkdir /backup -p #创建存储备份数据的目录
[root@oldboy ~]# ls -ld /backup/ #检查待备份的目录/etc
drwxr-xr-x. 2 root root 6 May 15 00:40 /backup/
[root@oldboy ~]# tar zcf /backup/bak_etc_$(date +%F).tar.gz /etc/ #打包备份
tar: Removing leading `/' from member names
[root@oldboy ~]# ls /backup/
bak_etc_2030-05-15.tar.gz
案例2:查找/etc下,扩展名是.conf的所有文件,打包备份到/backup,文件名含有日期
find+tar组合
1)查找/etc下扩展名是.conf的所有文件
[root@oldboy ~]# find /etc/ -name "*.conf"
2)解答:
方法一:
[root@oldboy ~]# tar zcf /backup/conf_bak_$(date +%F) $(find /etc/ -name "*.conf")
tar: Removing leading `/' from member names
[root@oldboy ~]# ls /backup/
bak_etc_2030-05-15.tar.gz conf_bak_2030-05-15
[root@oldboy ~]# tar zcf /backup/conf_bak_$(date +%F).tar.gz $(find /etc/ -name "*.conf")
tar: Removing leading `/' from member names
[root@oldboy ~]# ls /backup/
bak_etc_2030-05-15.tar.gz conf_bak_2030-05-15 conf_bak_2030-05-15.tar.gz
[root@oldboy ~]#
方法二:
[root@oldboy ~]# find /etc/ -name "*.conf"|xargs tar zcf /backup/conf_bak_$(date +%F)
tar: Removing leading `/' from member names
[root@oldboy ~]# ls /backup/
bak_etc_2030-05-15.tar.gz conf_bak_2030-05-15 conf_bak_2030-05-15.tar.gz