一、文件查找
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