linux⽂件查和打包压缩
⽬录
locate,⾮实时查(也叫数据库查)
locate会查询系统上的⽂件索引数据库/var/lib/mlocate/mlocate.db
⽂件索引数据库在系统空闲的时候⾃动创建更新,也可⼿动执⾏updatedb命令更新,centos7默认不带updatedb命令,需要安装(yum install -y mlocate)
索引构建的过程中很消耗系统资源,需要遍历整个⽂件系统。不建议在⽣产中使⽤,或者在服务器不忙的时候创建
locate⼯作特点
查速度快(基于⽂件索引数据库)
模糊查
⾮实时查
搜索的是⽂件的全路径,不仅仅是⽂件名
可能只能搜索到⽤户具读取或执⾏权限的⽬录
locate常⽤选项
-i  不区分⼤⼩写搜索
-n N 只列出前边N个搜索到的项⽬
-r  使⽤基本正则表达式
更新创建⽂件索引数据库
[root@Centos7 ~]# updatedb
查路径或⽂件名中包含lidawei的⽂件
[root@Centos7 ~]# locate -i lidawei
显⽰查结果的前三个
[root@Centos7 ~]# locate -n 3 -i lidawei
根据正则表达式查
[root@Centos7 /]# locate -r "\<nginx\.conf$"
find  实时查⼯具,通过遍历路径完成⽂件查
⼯作特点
相⽐于locate,查速度较慢
精确查
实时查
查条件丰富
可能只搜索出⽤户具有读取和执⾏权限的⽬录
格式
find [查路径] [查条件] [处理动作]
指定搜索⽬录层级
find /etc/ -maxdepth 2                # 搜索最⼤⽬录层级2
find /etc/ -mindepth 2                # 搜索最⼩⽬录层级2
find /etc/ -mindepth 2 -maxdepth 2    # ⽬录层级指定2
对搜索出来的结果,优先显⽰⽬录中的⽂件,其次是⽬录
find /data -depth
根据⽂件名和inode号查
find /etc/ -name "f"        # 查/etc下名字是f的⽂件
find /etc/ -iname "f"        # 跟据名字查,不区分⼤⼩写
find /etc/ -inum 723799              # 查inode号为723799的⽂件
find / -f          # 查和f相同inode号的⽂件
find /etc/ -links 5                  # 查链接数是5的⽂件
find /etc/ -regex ".*f$"    # 使⽤正则表达式匹配。只能匹配整个⽂件路径,不能单独匹配⽂件名
根据属主,属组查⽂件
-user USERNAME    # 查属主为指定⽤户(UID)的⽂件
-group GRPNAME    # 查属组为指定组(GID)的⽂件
-uid UserID        # 查属主为指定的UID号的⽂件
-gid GroupID      # 查属组为指定的GID号的⽂件
-nouser            # 查没有属主的⽂件
-nogroup          # 查没有属组的⽂件
根据⽂件类型查
-type TYPE
TYPE可以是以下形式:
f: 普通⽂件
d: ⽬录⽂件
l: 符号链接⽂件
s:套接字⽂件
b: 块设备⽂件
c: 字符设备⽂件
p: 管道⽂件
查空⽂件或⽬录
find /etc/ -empty    # 查看/etc下的空⽂件和空⽬录
组合条件查询
与:-a
或:-o
⾮:-not  !
find /etc -type d -a -empty              # 查看/etc/下的空⽬录
find /etc/ -type d -o -type l            # 查看/etc/下⽬录或链接⽂件
find /etc -not \( -type d -a -empty \)    # 查看/etc/下的⾮空⽬录
排除⽬录
find /etc/ -path "/etc/security" -a -prune -o -name "*.conf"  # 查/etc/下除了/etc/security⽬录外所有的.conf结尾的⽂件排除多个⽬录
find /etc/ \( -path "/etc/security" -o -path "/etc/systemd" \) -a -prune -o -name "*.conf"
根据⽂件⼤⼩查
-size [+|-]#UNIT #常⽤单位:k, M, G,c(byte),注意⼤⼩写敏感
#UNIT: #表⽰(#-1, #],如:6k 表⽰(5k,6k]
-#UNIT #表⽰[0,#-1],如:-6k 表⽰[0,5k]
+#UNIT #表⽰(#,∞),如:+6k 表⽰(6k,∞)
find -size 1000M  # 查当前⽬录下999M以上到1000M的⽂件
find -size -1000M  # 所有⼩于1000M的⽂件
find -size +1000M  # 所有⼤于1000M的⽂件
根据时间查,linux中的⽂件有三种时间
atime    访问时间,⽂件被访问的最后时间
mtime  修改时间,⽂件内容被修改的最后时间
ctime    变化时间,⽂件的元数据发⽣变化的时间,如权限,所属⽤户等
find /etc/ -atime 10    # 查看访问时间10-11天
find /etc/ -mtime +10  # 查看10天以外
find /etc/ -mtime -10  # 查看10天以内
-amin  # 访问时间,以分钟为单位
-mmin
-cmin
根据权限查
-perm [/|-MODE]
MODE # 精确权限匹配
/MODE # 任何⼀类对象的权限只要能和MODE匹配以为即可,或关系
-MODE # 每⼀类对象必须同事拥有指定权限,与关系
find /etc/ -perm 600 # 查看权限指定是600的⽂件
find /etc/ -perm /600  # 权限或,能匹配到400,600,222,666等等
find /etc/ -perm -600  # 权限与,能匹配到600,666,622,644等等
处理动作
-print:默认的处理动作,显⽰⾄屏幕
-ls:类似于对查到的⽂件执⾏"ls -dils"命令格式输出
find /etc/ -name "*.conf" -ls
-fls file:查到的所有⽂件的长格式信息保存⾄指定⽂件中
find /etc/ -name "*.conf" -
-delete:删除查到的⽂件,慎⽤!
-ok COMMAND {} \; 对查到的每个⽂件执⾏由COMMAND指定的命令,对于每个⽂件执⾏命令之前,都会
交互式要求⽤户确认
-exec COMMAND {} \; 对查到的每个⽂件执⾏由COMMAND指定的命令
{}: ⽤于引⽤查到的⽂件名称⾃⾝
find /etc/ -name "*.conf" -exec cp {} /home/jiji \;
参数替换xargs
很多命令不⽀持使⽤管道传递参数,xargs可以读取stdin的参数,并且以空格符或回车符将stdin的数据分割成参数seq 10 | xargs      # 显⽰10个数字
seq 10 | xargs -n1  # 将10个数字分隔为10个参数
ls | xargs rm        # 删除当前⽬录下的⼤量⽂件
echo user{1..10} | xargs -n1 useradd    # 批量创建⽤户
echo user{1..10} | xargs -n1 userdel -r  # 批量删除⽤户
find -type f -name "*.txt” -print0 | xargs -0 rm  # 如果⽂件名中带空格,以字符nul分隔
find练习
1、查/var⽬录下属主为root,且属组为mail的所有⽂件
2、查/var⽬录下不属于root、lp、gdm的所有⽂件
3、查/var⽬录下最近⼀周内其内容修改过,同时属主不为root,也不是postfix的⽂件
4、查当前系统上没有属主或属组,且最近⼀个周内曾被访问过的⽂件
5、查/etc⽬录下⼤于1M且类型为普通⽂件的所有⽂件
6、查/etc⽬录下所有⽤户都没有写权限的⽂件
7、查/etc⽬录下⾄少有⼀类⽤户没有执⾏权限的⽂件
8、查/etc/init.d⽬录下,所有⽤户都有执⾏权限,且其它⽤户有写权限的⽂件
打包压缩
压缩是对单个⽂件进⾏压缩,⽽⾮⽬录
linux查看当前文件夹内容
⼏种常⽤的压缩⼯具
gzip和unzip,来⾃gzip包,压缩后⽂件后缀.gz
-k keep, 保留原⽂件,CentOS 8新特性
-d 解压缩,相当于gunzip
-c 结果输出⾄标准输出,保留原⽂件不改变
-# 指定压缩⽐,#取值为1-9,值越⼤压缩⽐越⼤
#解压缩
#不显式解压缩的前提下查看⽂本⽂件内容
bzip2和bunzip2,来⾃bzip2包,压缩后⽂件后缀.bz2
-
k keep, 保留原⽂件
-d 解压缩
-c 结果输出⾄标准输出,保留原⽂件不改变
-# 1-9,压缩⽐,默认为9
bunzip2 file.bz2 解压缩
bzcat file.bz2 不显式解压缩的前提下查看⽂本⽂件内容
xz和unzx,来⾃xz包,压缩后⽂件后缀是.xz
-k keep, 保留原⽂件
-d 解压缩
-c 结果输出⾄标准输出,保留原⽂件不改变
-# 压缩⽐,取值1-9,默认为6
#解压缩
#不显式解压缩的前提下查看⽂本⽂件内容
zip和unzip
zip命令可以实现打包⽬录和多个⽂件成⼀个⽂件并压缩,但可能会丢失⽂件属性信息,所以⼀般⽤tar⼯具代替
#打包并压缩
zip -r /backup/sysconfig.zip /etc/sysconfig/
#不包括⽬录本⾝,只打包⽬录内的⽂件和⼦⽬录
cd /etc/sysconfig; zip -r /root/sysconfig.zip *
#默认解压缩⾄当前⽬录
unzip /backup/sysconfig.zip
#解压缩⾄指定⽬录,如果指定⽬录不存在,会在其⽗⽬录(必须事先存在)下⾃动⽣成
unzip /backup/sysconfig.zip -d /tmp/config
cat /var/log/messages | zip messages -
#-p 表⽰管道
unzip -p message.zip > message
tar
tar可以将⽬录和多个⽂件打包成⼀个⽂件,并且可以配合压缩⼯具压缩,保留⽂件属性不丢失。常⽤于备份,tar对应的⽂件是.tar后缀1 创建归档,保留权限
tar -cpvf etc.tar /etc/
2 追加⽂件⾄归档,但不⽀持对压缩⽂件的追加
tar -rf etc.tar test
3 查看归档⽂件中的⽂件列表
tar -t -f etc.tar
4 展开归档
tar xf etc.tar -C /home
5 结合压缩⼯具⼀起使⽤
tar zcvf /etc/
# 打包的时候排除某个⽬录
tar zcvf /home/ --exclude=/etc/default /etc
-z 相当于gzip压缩⼯具
-j 相当于bzip2压缩⼯具
-J 相当于xz压缩⼯具

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。