; 查找find及压缩与解压 | Linux运维部落

查找find及压缩与解压

find 

根据时间戳:
以“天”为单位;
              -atime [+|-]#, 
               #: [#,#+1)   2 那就是大于等于二天小于三天
              +#: [#+1,∞] +4 大于等于五天及五天以上
              -#: [0,#)    -3 0至三天以内的不包含3天  #find /etc/ -atime -1  (passwd magedu)

              -mtime 
              -ctime
       以“分钟”为单位: 
              -amin   #find /etc/ -amin -1
              -mmin 
              -cmin

     -perm
      mode:精确权限匹配  # find -perm 755
      +mode[/mode] 任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+ 从centos7开始淘汰
              # find -perm /444   # find -perm +111
        -mode   每一类对象都必须同时拥有指定权限,与关系0 表示不关注 # find -perm -777
              #find  -perm /444 任何一位有4 就可以筛选出 (还可以表示为+444)
              #fing  -perm /044 组和其他人4有就可以筛选出(还可以表示为+044)
              #find  -perm /400 只要user上有4就可以筛选出(还可以表示为+400)
              #find  -perm -200 user上必须有2
              #find  -perm -210 user上必须有2,组上必须有1
              #find  -perm -666 每位权限上必须有6,但是不包括766
              

    -print 默认的处理动作,显示至屏幕 # find -perm -777  -print只显示文件路径
    -delete 直接删除所查找到的文件,不询问。 # find -perm /111 -delete(删除满足条件的文件)
    -ls 长列出所查找到的文件 ,显示权限等 # find -perm /777 -ls
    -fls file 将查找到的文件长列出导入到指定文件。
    > file 
      #find /etc/ -regex “..conf$” -fls /app/find.txt不包含错误信息
      #less /app/find.txt
      也可以如下:
      #find /etc/ -regex “.
.conf$” >/app/find1.txt
      #vim /app/find1.txt
    #find /etc/ -regex “..conf$” >find1.txt 2>&1 可以导出错误结果
   
    -ok command {} \; 对查找到的文件当做下一命令的参数去执行(交互式)

        #find /etc/ -regex “..conf$” -ok cp -a {} /app/{}.bak \;
        cp一个文件 -a 表示文件复制过程权限,链接都不改变 {}代表原文件就是前面搜索到的文件 {}.bak代表目的文件
          #find /etc/ -regex “..conf$” -ok cp -a {} /app/{}.bak \;-maxdepth 1表示一级目录下的文件
          #find /etc/ -maxdepth 1 -regex “.
.conf$” -ok rm -rf {} \;  删除命令 

    -exec command \; 对查找到的文件当做下一命令的参数去执行(非交互式)
         #find /etc/ -maxdepth 1 -regex “..conf$” -exec cp -a {} /app/ \; -maxdepth 1表示一级目录下的文件 跟ok
         一样但是少了询问
         # find /etc -regex   “.
.conf$” -exec ls {} \;

find -name “.conf” -exec cp {} {}.orig \;
find /tmp -ctime +3 -user joe -ok rm {} \;
find ~ -perm -002 -exec chmod o-w {} \;
find /data –type f -perm 644 -name “
.sh” –exec chmod 755 {} \;
find /home –type d -ls

    {}:用于引用查找到的文件名称自身 

 xargs:

    touch a{1..1000000} 当创建很多文件是rm就会删除不了这时用 xargs来参数传递

    echo {1..30000000} | xargs touch

     find |xargs rm

    由于很多命令不支持管道|来传递参数,而日常工作中有这个必要,所以就有了xargs
 注意:文件名或者是其他意义的名词内含有空格符的情况,有些命令不能接受过多参数,
      命令执行可能会失败,xargs可以解决
       如:

          find /sbin -perm +700|xargs ls -l

     find 和 xargs 格式:find| xargs ccommand
   

练习:
1、查找/var目录下属主为root,且属组为mail的所有文件

find /var -user root -a -group mail -ls

2、查找/var目录下不属于root、lp、gdm的所有文件

find /var -not \( -user root -o -user lp -o -user gdm \) -ls

3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件

find /var/ -mtime -7 -not -user root -not -user postfix -ls

4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件

find / -nouser -o -nogroup -a -atime -7 -ls

5、查找/etc目录下大于1M且类型为普通文件的所有文件

find /etc/ -size +1M -a -type f -ls

6、查找/etc目录下所有用户都没有写权限的文件

find /etc ! -perm /222 -ls

7、查找/etc目录下至少有一类用户没有执行权限的文件

find /etc ! -perm -111  -ls

   gnome 搜索工具 图形化的搜索工具

压缩和解压:
compress
.Z  #compress abc(原有文件没有生产新文件 abc.z)

-d 解压缩   #compress -d abc.Z  

             uncompress  #uncompress  abc.Z

zcat X.Z > X 解压并导入新文件

-c 将结果打印到屏幕上,配合重定向,不会覆盖原文件,但权限会变。 #compress -c abc (看到的全是乱码其实是
          压缩文件,并将压缩文件的内容打印出来) 
         #compress -c abc > abc.Z 原本的文件还在并生产压缩文件   #compress -dc abc.Z > abc 
 s
-f 默认不对硬链接数为2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1.
-v 显示详细过程。 #compress -v abc
演示过程: #cp /var/log/messages . #ls #ls -lh查看详细信息 #cp messages messages1  #cat messages1 >> messages (尽量让文件大点多导入几次)
           # cp messages abc 拷贝  #compress abc压缩 (原有文件没有生产新文件 abc.z)
           #compress -dc abc.Z > abc 
           rm -rf abc
           ln messages abc (创建硬链接) 当两个文件是链接是 # compress  abc没用 但是 # compress  -f abc就可以压缩
           messages不变链接数减一

           > 压缩过程权限会改变因为相当于又重定向了 , 直接压缩文件不导入权限并不改变 
           原文件会丢失

gzip 
.gz  #gzip messages 生成messages.gz 原文件会丢失

-d 解压缩  # gzip -d messages.gz 
gunzip
zcat X.gz > X
-c 将结果打印到屏幕上,配合重定向,不会覆盖原文件,但权限会变。# gzip -c messages >messages.gz
              # gzip -c messages  #gzip -dc messages.gz> messages 

-f  如果文件是链接文件,默认不对硬链接数为2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1.
-v 显示详细过程。
-# 数字越大,压缩比越高,速度越慢,文件越小。
-1 等于 –fast
-2,3,4,5,6(default),7,8
-9 等于 –best
     可tab补齐

bzip2
.bz2
-d 解压缩
bunzip
bzcat X.bz2 > X
-k 保留原文件
-c 将结果打印到屏幕上,配合重定向,不会覆盖原文件,但权限会变。
-f 默认不对硬链接数为2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1.
-v 显示详细过程。
-# 数字越大,压缩比越高,速度越慢,文件越小。
-1 等于 –fast
-2,3,4,5,6,7,8
-9 等于 –best (default)

xz
.xz
-d 解压缩
xzcat 
-k 保留原文件
-f 默认不对硬链接数为2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1.
-v 显示详细过程。
-# 数字越大,压缩比越高,速度越慢,文件越小。
-0 等于 –fast
-1 -2,3,4,5,6(default),7,8
-9 等于 –best 

zip
.zip
unzip
|zip 将生成的文件名 –
可以将管道前的输出结果转为文件并压缩。通过此方式压缩的文件只能使用“unzip -p 压缩包 > 新文件 ”来解压缩
unzip -p 预览解压缩后的内容到屏幕,可以配置重定向将结果保存到指定文件,权限会发生变化。

        zip -r 新文件名.zip 被压缩打包的工具(可以多个文件)

tar
-cf 创建包名字  原文件(可以指定多个)
-tf 包名字   显示包中的文件名
-tvf 详细显示包中的文件名
-rf 包名字 新文件名(可以指定多个)
–delete -f 包名字 被删除的文件名(可以指定多个)
-xf 包名字 解出所有的文件到当前目录
-xf 包名字 文件名 解所指定的文件到当前目录
-C 解包到指定目录
-v 显示过程
-Jcf 创建包的名字(.tar.xz) 原文件(可以指定多个) 打包并用xz压缩
-jcf 创建包的名字(.tar.bz2) 原文件(可以指定多个) 打包并用bzip压缩
-zcf 创建包的名字(.tar.gz) 原文件(可以指定多个) 打包并用gzip压缩
-T 指定个列表,包含需要被打包的文件,以换行符为间隔
-X 指定个排除列表,以换行符为间隔
分割:
     分割大的tar文件为多份小文件:

split –b Size –d tar-file-name prefix-name 将tar包分隔为多个文件
splid  -b 1M -d messades.tgz messades-parts -b文件划分大小, -d 文件名
splid  -b 5k -d test.tar.gz newtest 分成五个小文件
cat 被分隔出的多个文件名 > 单个文件名
cat newtest.tar.gz0
> test.tar.gz2

cpio复制
ls * |cpio -o > 文件名.cpio  打包。 #ls |cpio -ov > new.cpio
         ls group gshadow passwd shadow |cpio -o >aaa
cpio -id < 文件名.cpio 解开被cpio打包的文件 #cpio -id <new.cpio 查看new.cpio的文件
gzip 文件名.cpio  生成文件名为文件名.cpio.gz 
       
/boot/initramfs-xxxx.img 
Centos6: cpio.gz文件:
                     #zcat initramfs-xxxx.img |cpio -id
                #zcat aaa.cpio.gz|cpio -id 解压被cpio打包的文件
Centos7: cpio文件 :
                    #cpio -id < initramfs-xxxx.img
-tv < 文件名.cpio 预览cpio打包的文件。
      将etc目录备份:
          #find ./etc -print | cpio -ov >etc.cpio
       内容预览:
          #cpio -tv < etc.cpio
       要解包文件:
          #cpio -idv < etc.cpio

xfs
ext4 
rescue

sda1   /boot /mnt/sysimage/boot
sda2   /        /mnt/sysimage 
sda3   swap
sda4     extend
sda5   /app     /mnt/sysimage/  
/mnt/sysimage/root  -> /mnt/sysimage/lib64

ldd +绝对路径 查看动态库
/lib64/libc.so.6
chroot /mnt/sysimage 
cd ../../../   

dns chroot > /var/name/chroot/var/named

A  (A)
  a.so  (A)
  b.so  (A)
  c.so  (B) 如果想要安装A 要检测B有没有,没有就不安装,A依赖于B B又依赖于C C又依赖于A 循环

A -> B  -> C -> A
debian deb dpkg 包管理器会检测当要安装包时会自动检测所需要的所有包,并一起安装
ubuntu deb  apt-get包的管理器

redhat   redhat package manager  = rpm 红帽子的包管理器
RPM package manager  RPM对应包的批量管理 YUM 
GNU  Gnu is not unix 

YUM DNF fedora

httpd-xxxx.tar.gz包含:   xxx.c源代码  …so  readme.txt =  >  httpd-xxxx.rpm 变成

httpd.deb 
ftp.deb
bind.deb

练习:统计光盘中Packages下,各种架构的rpm包的数量。
ls *.rpm |rev |cut -d. -f2|sort |rev |uniq -c  rev 对于筛选出的 反着输出
Packages]# ls | egrep -o “[^\.]+\.rpm$” |cut -d. -f1 |sort |uniq -c

A -> B -> C -> D -> A

testapp.rpm
testapp.so文件
/usr/lib/testapp/testapp.so
/usr/bin/testapp 执行文件存放地方
#cd /run/media/root/CentOS\ 7\ x86_64/ 包的存放路径
#cd Packages/

解决包的依赖管理工具:
             yum: rpm包管理器的前端工具
             apt-get:ded包管理器前端工具
             zypper: suse上的rpm 前端工具
             dnf:Fedora 18+rpm 包管理器前端管理工具
查看二进制程序所依赖的库文件:
            ldd /PATH/TO/BINARY_FILE  #ldd /sbin/ifconfig
管理及查看本机装载的库文件:
             ldconfig
             /sbin/ldconfig -p:显示本机已经缓存的所有可用库文件名及文件路径映射关系
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
缓存文件: /etc/ld.so.cache
           如:
              #cd /etc/ld.so.conf.d/
              #vim testapp.conf
                 /user/lib/testapp/
              #ldconfig
rpm  数据库var/lib/rpm #cd /var/lib/rpm 记录安装过的包数据和信息
   -i –instal 安装包
                 #rpm -i httpd-2.4.6-45.el7.centos.x86_64.rpm 
                 #rpm -i httpd-tools-2.4.6-45.el7.centos.x86_64.rpm  (httpd包的安装,还依赖于两个库文件)
                 #rpm -i screen-4.1.0-0.23.20120314git3c2946.el7_2.x86_64.rpm 
–test 检测
–nodeps 忽略依赖性关系直接安装
-v 显示详细信息
        -vi 显示包名
-vv 显示更详细信息
-h 显示进度
-ivh 显示包名进度条
    –test: 测试安装,但不真正执行安装,即dry run模式
             #rpm -ivh –test screen-4.1.0-0.23.20120314git3c2946.el7_2.x86_64.rpm 
             –nodeps:忽略依赖关系
             –replacepkgs 已安装过的包重装。
             –replacefiles 其他已安装的RPM包的文件,与即将装的RPM中的文件冲突时,则覆盖文件并安装。
             –nosignature: 不检查来源合法性
             –nodigest:不检查包完整性
             –noscripts:不执行程序包脚本:
      %pre: 安装前脚本; –nopre  #rpm -ivh –noscripts  –nopre screen-4.1.0-0.23.20120314git3c2946.el7_2.x86_64.rpm 
      %post: 安装后脚本; –nopost
      %preun: 卸载前脚本; –nopreun
      %postun: 卸载后脚本; –nopostun

   -Uvh 当有旧的版本的包时,则卸载旧包再装新包,如没有旧包,直接装新包。
   -Fvh 当有旧的包时,卸载旧包装新包,无旧包时,nothing
   –oldpackage 降级  已有新包,装旧包。
   –force 强制安装。–replacepkgs  –replacefiles  –oldpackage

查询安装包:

   -q 软件包名  查询已安装过的软件包名。#rpm -q tree
    -qa 列出所有的已安装过的rpm包
                #rpm -qa
    -qa “name*” #rpm -qa “tre*”
    -qa |grep name #rpm -qa |grep tree
    -qf 查询一个文件来自于哪一个rpm包 (已安装的rpm) #rpm -qf /bin/ls
    -q –changelog 版本更新日志 #rpm -q –changelog tree
    -qc 查询软件包的配置文件(不是所有包都有配置文件)#rpm -qc aide
    -qd 查询软件包的帮助文档  #rpm -qd aide
    -qi 查询软件包的详细信息  #rpm -qi tree #rpm -qi `rpm -qf /bin/ls`
    -ql 查询软件包所安装到系统当中的所有文件路径 #rpm -ql tree 
    -q –scripts 查询软件包自带的脚本  #rpm -q –scripts `rpm -qf /bin/ls`
         -q –provides 查询自身的功能  #rpm -q –provides `rpm -qf /bin/ls` #rpm -q –provides tree
    -qR 查询实现自身的功能需要什么能力
    -qp[licd] rpm包 查看未安装的rpm包的各项信息 #rpm -qp http
         -p 针对尚未安装的程序包文件做查询操作

   -e 软件名
    –nodeps 忽略依赖性。强制卸载

    –import GPG-KEY….  导入公钥 gpd生成公钥
    -qa “gpg-pubkey*”   显示所有已导入的公钥
    -e gpg-pubkey….
    -K rpm包 验证某rpm签名是否合法 #rpm -K tree-1.6.0-10.el7.x86_64.rpm (md5 not ok是应为没有公钥 )

    进入centos6.9光盘 # ls  #rpm –import RPM-CPG-KEY-Centos-6(导入公钥)
    #rpm -qa “gpg-pubkey*” 查看公钥信息

yum rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代工具
yum存储了很多rpm已及包的相关元数据(防置于特定目录repodata下)yum需要建立仓库仓库repository
     配置文件:/etc/yum.conf为仓库提供公共配置
               /etc/yum.repos.d/*.repo为仓库的指向提供配置
#vim /etc/yum.conf  yum有缓存
#cd  /etc/yum.repos.d 提供一些默认的地址
#vim /etc/yum.repos.d
编写仓库:
      #cd  /etc/yum.repos.d
      #vim magedu.repos.d 文件必须以repo 结尾
   格式:
        [base]名 仓库的id
        name=magedu 26 repo
        baseurl=http://172.16.0.1/centos/6/目录
                file:///media/dvd/centos6.9 本地地址
                file:///run/media/root/Centos\ 7\ x86_64
        gbgkey=file:///run/media/root/Centos\ 7\ x86_64/RPM-CPG-KEY-Centos-7公钥
        gpgcheck=1 不检查默认1 就不用公钥的设置了照样能安装 # yum install httpd
        #cd #yum repolist 
repolist 列出repo信息   #cd #yum repolist 列出仓库
install 包名 # yum install httpd安装
        enabled={1|0}代表仓库是否启动 1开启
:.!将内容显示出来

设置缓存:
#cd /var/cache/yum/
#ls
#cd x86_64/
#ls
#cd #
#ls
#cd base/
#yum clean all
# yum repolist

原创文章,作者:MOMO,如若转载,请注明出处:http://www.178linux.com/84550

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1660809109@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班