第10章 查找压缩

一、文件查找

1.简介

(1)grep:对文件内容进行过滤

(2)find:文件查找,针对文件名

(3)locate:文件查找,依赖数据库

(4)which:针对命令查找

2.对于命令文件查找

(1)例题:查找ls或vim命令的位置

方法一:#which  ls     从PATH环境变量

(PATH就是一个字符串变量,当输入命令的时候LINUX会去查找PATH里面记录的路径。)

方法二:#whereis  vim

3.对任意文件的查找

A.  locate    

(查询的数据库: /var/lib/mlocate/mlocate.db)

计划任务:每天自动更新数据库 /etc/cron.daily/mlocate.cron
手动更新数据库:updatedb

#touch abc.txt

#locate abc.txt

无,为什么----因为没有更新数据库(默认一 天一 更新)

#updatedb

#locate abc.txt

有,新建的文件已经在数据库中得到信息更新


扩展:

1.如果你的机器没有locate命令,你该怎么办呢?

yum provides  locate

yum install -y mlocate

2.在mnt目录中的文件无法用locate搜索。

在/tmp目录中的文件也无法用locate搜索


B. find

(1)按文件名

[root@bjz ~] # find     /etc      -name     "ifcfg-ens32"
[root@bjz ~] # find    /etc      -iname     "ifcfg-ens32"       //-i忽略大小写
[root@bjz ~ ]# find    /etc      -iname      "ifcfg-ens*"


(2)按文件大小

[root@bjz ~]#find   /etc  -size  +5M   //大于5M

[root@bjz ~]#find   /etc  -size   -5M    //小于5M

[root@bjz ~]#find   /etc  -size   5M    //等于5M

[root@bjz ~]#find   /etc  -size   5M    -ls      //-ls找到后的处理动作(ls长格式显示)

(3)按查找的目录的深度

[root@bjz ~] # find  /  -maxdepth 3  -a  -name  "ifcfg-en*"      -------(-a  是 and 的意思)

[root@bjz ~]# find  /  -maxdepth 4  -a  -name  "ifcfg-en*"

(4)按时间查找(atime,mtime,ctime):

 

时间的概念

 atime:(access time)显示的是文件中的数据最后被访问的时间,比如系统的进程直接使用或通过一些命令和脚本间接使用。(执行一些可执行文件或脚本)
 mtime: (modify time)显示的是文件内容被修改的最后时间,比如用vi编辑时就会被改变。(也就是Block的内容)
 ctime: (change time)显示的是文件的权限、拥有者、所属的组、链接数发生改变时的时间。当然当内容改变时也会随之改变(即inode内容发生改变和Block内容发生改变时)

       

按时间找(atime,mtime,ctime):

[root@bjz ~]# find   /etc    -mtime  +5           //修改时间超过5天
[root@bjz ~]# find   /etc    -mtime  5            //修改时间等于5天
[root@bjz ~]# find   /etc    -mtime  -5          //修改时间5天以内


(5)按文件属主、属组查找

[root@bjz ~]# find   /home   -user  jack  -a  -group  hr     //-a和
[root@bjz ~]# find   /home   -user  jack  -o  -group  hr    //-o或


(6)按文件类型查找

[root@bjz ~]#find   /dev  -type  f    //f普通文件

d---目录    l---链接文件   b--块文件   c---字符文件    s---套接字文件   p---管道文件

(7)按文件权限查找

普通权限----        [root@bjz ~]#find   .  -perm  644   -ls     (寻找  .  <点> 当前目录下权限为644的文件  -ls长格式显示)

高级权限----        [root@bjz ~]#find   /usr/bin  /usr/sbin  -perm  -4000  -ls   //包含set uid

                            [root@bjz ~]#find   /usr/bin  /usr/sbin  -perm  -2000  -ls   //包含set gid

                            [root@bjz ~]#find   /usr/bin  /usr/sbin  -perm  -1000  -ls   //包含sticky

(8)按正则表达式

[root@bjz ~]#find  /etc/  -regex   '*ifcfg-ens3[0-9]'    (-regex 正则表达式   [0-9]任意一个数字)

(9)找到后处理的动作 ACTIONS

# find /etc -name "ifcfg*"
# find   /etc   -name   "ifcfg*"   -print                                    //打印,默认选项
# find   /etc   -name   "ifcfg*"   -ls                                       //长格式输出
# find   /etc   -name   "775*"   -delete                                //775.txt是自定义文件
# find   /etc   -name   "ifcfg*"   -exec cp -rvf {} /tmp \;        //不提示,不询问
# find   /etc   -name   "ifcfg*"   -ok cp -rvf {} /tmp \;           //提示,询问
# find   /etc   -name   "775*"   -exec rm -rf {} \;

(10)find 结合xargs

扩展知识:find结合xargs
[root@bjz ~]# find  .  -name  "123*.txt"  |xargs  rm -rf

[root@bjz ~]# find  /etc  -name  "ifcfg-eth0"  |xargs  -I {} cp -rf {}   /var/tmp    

因为cp  -rf   命令后面需要跟多个参数,所以用   -I   来标记一个参数,用{}来标记cat  file.txt输出的内容作为源文件


二、文件的打包、压缩及解压

1.对于较小的文件,直接进行互联网上用户之间的传输的命令

#du  -sh   /etc/test     ----查看文件夹的大小(-s或--summarize仅显示统计,h人性化显示)

#time  scp -r  /etc/test  [email protected]:/tmp   (time 是对后面命令的操作时间进行统计)

2.对于较大的文件,要先进行打包压缩再进行传输

(1)打包、压缩

语法:tar  选项  压缩包名称  源文件

#tar  -czf  etc-gizp.tar.gz  /etc/      -----c创建,z是gzip,f是文件。etc-gizp.tar.gz自定义的压缩包名称

===打包,压缩===

# tar -czf   etc-gzip.tar.gz /etc/        //z是gzip
# tar -cjf    etc-bzip.tar.bz /etc/        //j是bzip
# tar -cJf    etc-xzip.tar.xz /etc/        //J是xzip
观察三个包的体积。
# ll -h etc*
-rw-r--r--. 1 root root  11M 10月 14 10:07 etc-gzip.tar.gz
-rw-r--r--. 1 root root 8.9M 10月 14 10:08 etc-bzip.tar.bz
-rw-r--r--. 1 root root 7.6M 10月 14 10:08 etc-xzip.tar.xz

压缩速度和压缩体积成反比。

(2)解压、解包

#tar -tf  sys.tar.xz     ----t查看f文件名,是不解压查看压缩文件中的内容

#tar  -xzf  etc1.tar.gz   ----x解压z调用gzip

#tar  -xvf  etc1.tar.gz   ----v显示执行过程,直接写xf,系统会自动判断

#tar   -xvf  etc1.tar.gz  -C  /tmp   -----(-C重定向到/tmp目录)

终极大法:

# tar  xf  etc3.tar.xz     //简单粗暴


扩展:解压zip-----#unzip   xxx.zip


案例1:MySQL数据库备份

案例1:mysql物理备份及恢复

yum -y install mariadb-server
systemctl start mariadb
mkdir /backup
tar -cJf /backup/mysql.tar.xz /var/lib/mysql

rm -rf /var/lib/mysql
tar -xf /backup/mysql.tar.xz  -C  /

案例2:mysql物理备份及恢复(无路径)

[root@localhost ~]# cd /var/lib/mysql
[root@localhost mysql]# tar -cJf /backup/mysql.tar.xz *
[root@localhost mysql]# tar -xf /backup/mysql.tar.xz -C /var/lib/mysql

进入工作目录,备份就不会包含绝对路径。案例1和2注意路径问题。

案例3(压缩至内存)(了解)

    案例3:host A /etc (海量小文件) --------> host A /tmp

[root@localhost ~]# tar  -czf  -  /etc  |tar  -xzf  -   -C /tmp

czf 后的“-”代表先保存到内存中。

xzf后的"-"指的是前面的内存数据

案例4(海量小文件)(了解)

    案例4:host A的 /etc (海量小文件) --------> host B的 /tmp
常规方法:

[root@localhost ~]# scp  -r  /etc  172.16.20.21:/tmp


扩展方法nc方法:
==host B 监听端口(192.168.100.20:8888)==
[root@hostB ~]# systemctl stop firewalld.service    //关闭防火墙
[root@hostB ~]# nc -l   8888 |tar -xzf -  -C /tmp     //启动监听程序8888,解压到内存,然后-C重定向到/tmp

==host A 连接B 的端口==
[root@hostA ~]# tar  -czf  -  /etc | nc 192.168.100.20  8888
tar: Removing leading `/' from member names

猜你喜欢

转载自blog.csdn.net/bijingzhao123/article/details/79923221
今日推荐