zoukankan      html  css  js  c++  java
  • 11.查找,打包压缩,链接详解详解

    1 Linux查找相关命令

    1.文件内容过滤

    从/etc/passwd文件中过滤root字段
    [root@localhost ~]# grep 'root' /etc/passwd
    

    2.查寻命令路径及别名

    [root@localhost ~]# which ls
    alias ls='ls --color=auto'
            /usr/bin/ls
    

    3.查询命令和配置文件的位置

    [root@localhost ~]# whereis passwd
    passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz
    

    1.1 文件查找

    find文件查找相关命令详解

    语法:find 路径 条件 跟条件相关的操作符 [-exec 动作]

    路径:
    1.默认不写路径时查找的是当前路径。
    2.加路径。
    
    条件:
    1.指定的名称  -name
    2.文件类型 - type
    3.权限
    4.时间
    

    find 使用方法

    1.按文件名

    [root@localhost ~]# find / -name “file2” #从根开始找文件
    [root@localhost ~]# find /etc -iname "Ifcfg-ens33" #-i忽略大小写
    [root@localhost ~]# find /etc -iname "*.txt" 	   #查找所有以.txt结尾文件
    *:表示所有字符
    分别找出test5和除了test5的文件
    [root@localhost ~]# find /home/ -name *test5*
    [root@localhost ~]# find /home/ ! -name "test5*" # !--取反
    

    2.按文件大小

    [root@localhost ~]# find /etc -size +5M		#大于5M
    [root@localhost ~]# find /etc -size 5M		#等于5M
    [root@localhost ~]# find /etc -size -5M     #小于5M
    [root@localhost ~]# find / -size +3M -a -size -5M  #查找/下面大于3M而且小于5M的文件
    参数: -a:add
    [root@localhost ~]# find / -size -1M -o -size +80M  #查找/下面小于1M或者大于80M的文件
    参数: -o:or
    [root@localhost ~]# find / -size -3M -a -name "*.txt" #查找/ 下面小于3M而且名字是.txt的文件
    

    3.按时间查找

    按时间找(atime,mtime,ctime)
    -atime=  access访问时间
    -mtime = modify改变时间  内容修改时间会改变
    -ctime =change修改时间   属性修改时间会改变
    
    -amin  #分钟
    -mmin
    -cmin
    
    [root@localhost ~]# find /opt -mtime +5		#修改时间5天之前
    [root@localhost ~]# find /opt -atime +1     #访问时间1天之前
    [root@localhost ~]# find . -mtime -2		#修改时间2天之内
    
    [root@localhost ~]# find . -amin +1         #访问时间在1分钟之前
    [root@localhost ~]# find /opt -amin -4      #访问时间在4分钟之内
    [root@localhost ~]# find /opt -mmin -2      #修改时间在2分钟之内
    

    4.按文件类型

    [root@localhost ~]# find /dev -type f	#f普通文件
    [root@localhost ~]# find / -type f -size -1M -o -name "*.txt"
    
    [root@localhost ~]# find /dev -type d	#d目录
    [root@localhost ~]# find /etc/ -type d -name "*.conf.d"
    
    [root@localhost ~]# find /dev -type l	#l链接
    
    [root@localhost ~]# find /dev -type b	#b块设备
    [root@localhost ~]# find /dev/ -type b -name "sd*"
    
    [root@localhost ~]# find /dev -type c	#c字符设备
    [root@localhost ~]# find /dev -type s	#s套接字
    

    5.按文件权限

    [root@localhost ~]# find . -perm 644            #.是当前目录    精确查找644  
    [root@localhost ~]# find /usr/bin  -perm -4000  #包含set uid
    [root@localhost ~]# find /usr/bin  -perm -2000  #包含set gid
    [root@localhost ~]# find /usr/bin  -perm -1000  #包含sticky
    

    找到后处理的动作 ACTIONS

    -name "ifcfg*" | xargs
    -name "ifcfg*" -print   #打印
    

    find使用-exec

    [root@localhost ~]# find /etc -name "ifcfg*" -exec cp -rf {} /tmp \; #exec命令对之前查找出来的文件做进一步操作-----  查找带ifcfg开头的文件复制到tmp下
    [root@localhost ~]# touch /home/test{1..20}.txt
    [root@localhost ~]# find /home/ -name test* -exec rm -rf {} \; #{}为前面查找到的内容,\; 格式
    

    find使用xargs

    [root@localhost ~]# find . -name "yang*.txt" |xargs rm -rf #找到之后删除处理xargs 参数传递
    [root@localhost ~]# touch /home/test{1..20}.txt
    [root@localhost ~]# # find /home/ -name "test*" | xargs -i cp {} /tmp/
    
    -i 传递
    
    -exec和xargs的区别
    -exec:参数是一个一个传递的,传递一个参数执行一次命令。
    xargs:将前一个命令的标准输出传递给下一个命令,作为它的参数.它的任务就是将输入行转换成下一个命令的参数列表。
    
    1、exec 每处理一个文件或者目录,它都需要启动一次命令,效率不好; 
    2、exec 格式麻烦,必须用 {} 做文件的代位符,必须用 \来转义; 作为命令的结束符,书写不便。 
    3、xargs不能操作文件名有空格的文件;
    

    综上,如果要使用的命令支持一次处理多个文件,并且也知道这些文件里没有带空格的文件,那么使用 xargs比较方便, 否则,就要用 exec了。

    2 Linux文件打包压缩

    linux打包压缩工具

    三种打包压缩结尾格式:.tar.gz  .tar.bz2  .zip
    工具:gzip  bzip2(只压缩) tar(打包压缩)
    

    2.1 打包解包操作

    参数:
    c :create  创建
    v :verbose 详细信息
    f :file  文件
    x : extract  加压缩  解包
    -C: 指定解包路径
    
    #只打包
    [root@localhost ~]# tar cvf dir1.tar /home/dir10/ #将包命名为dir1.tar 打包的对象是/home/dir10/目录下的文件
    #解包
    [root@localhost ~]# tar xf dir1.tar -C /usr/local/ #将dir1包解压到指定目录
    

    2.2 压缩解压操作

    gzip bzip2
    压缩:
    	#gzip  源文件      #格式  file.gz结尾
    	#bzip2 源文件      #格式  file.bz2结尾
    	
    bzip2需要安装
    [root@localhost ~]# yum -y install bzip2  #打包bzip2需要安装
    
    解压缩
    #gunzip    压缩文件
    #bunzip2   压缩文件
    #gzip 	-d 压缩文件  
    #bzip2  -d 压缩文件
    -d:dicompress 解压缩
    
    [root@localhost ~]# gzip file1  #压缩
    [root@localhost ~]# gzip -d file1.gz #解压缩
    [root@localhost ~]# gunzip file1.gz  #也是解压缩包
    [root@localhost ~]# gzip -c file1 > /usr/local/file1.gz  #压缩到指定位置(注意以.gz结尾)
    [root@localhost ~]# gunzip -c /usr/local/file1.gz > /opt/file1 #解压到指定位置(解压出的名字可以自定义)
    -c, --stdout
    

    2.3 打包压缩与解压解包操作

    #打包并压缩
    #tar cvzf file.tar.gz  源文件 ...
    #tar cvjf file.tar.bz2 源文件 ...
    z:表示gz压缩
    j:表示bz2压缩
    
    #解压并解包
    #tar xvzf 压缩文件 [-C 解压路径]
    #tar xvjf 压缩文件 [-C 解压路径]
    
    #案例
    [root@localhost ~]# tar czf dir1.tar.gz dir1           #打包并压缩
    [root@localhost ~]# tar xzf dir1.tar.gz -C /usr/local/ #解压到指定位置
    打包到指定路径 #将打包的文件放到/tmp目录下,并以当前时间开头命名
    [root@localhost ~]# tar czf /tmp/`date +%F-%T`-etc.tar.gz /etc/
    按时间创建目录或者文件
    # mkdir `date +%F`-upload
    # touch file-`date +%F`.txt
    

    3 链接文件

    3.1 硬链接

    一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。但是,Unix/Linux系统允许,多个文件名指向同一个inode号码。

    这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"(hard link)。

    [root@localhost ~]# ll -i /file1  #-i:显示inode编号
    [root@localhost ~]# ln /file1 /mnt/aa #创建/mnt/aa 共享着file1的inode号 
    [root@localhost ~]# rm -rf /file1 #删除源文件,/mnt/aa 不受影响
    
    运行上面这条命令以后,源文件与目标文件的inode号码相同,都指向同一个inode。inode信息中有一项叫做"链接数",记录指向该inode的文件名总数,这时就会增加1。
    
    反过来,删除一个文件名,就会使得inode节点中的"链接数"减1。当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码。
    

    创建目录时,默认会生成两个目录项:"."和".."。前者的inode号码就是当前目录的inode号码,等同于当前目录的"硬链接";后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的"硬链接"。所以,任何一个目录的"硬链接"总数,总是等于2加上它的子目录总数(含隐藏目录)。

    3.2 软连接

    文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的"软链接"(soft link)或者"符号链接(symbolic link)。

    这意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:"No such file or directory"。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode"链接数"不会因此发生变化。

    [root@localhost ~]# ln -s /fileA /fileB	#将文件fileA软链接到fileB
    [root@localhost ~]# rm -rf /usr/bbb  #取消链接,注意:删除目录链接时目录后面加“/”是删除目录,不加是删除链接
    [root@localhost ~]# rm -rf /fileA  #删除源文件
    [root@localhost ~]# cat /fileB #失效
    报错:"No such file or directory"。
    

    3.3 实际用处

    注:硬链接 
    1. 不能跨文件系统(分区)
    2. 不支持目录做硬链接
    
    [root@localhost ~]# ln /root/aaa/ /mnt/bbb
    ln: "/root/aaa/": 不允许将硬链接指向目录
    

    3.4 软链接和硬链接的区别

    硬链接:链接的inode号,软链接:链接的是源文件绝对路径。
    软链接可以跨文件系统,硬链接不可以。
    软链接可以对目录进行连接,硬链接不可以。
    删除源文件后,软链接失效,硬链接无影响。
    两种链接都可以通过命令ln来创建。
    ln默认穿件的是硬链接,使用-s 参数可以创建软链接。
    
  • 相关阅读:
    PAT 甲级 1126 Eulerian Path (25 分)
    PAT 甲级 1126 Eulerian Path (25 分)
    PAT 甲级 1125 Chain the Ropes (25 分)
    PAT 甲级 1125 Chain the Ropes (25 分)
    PAT 甲级 1124 Raffle for Weibo Followers (20 分)
    PAT 甲级 1124 Raffle for Weibo Followers (20 分)
    PAT 甲级 1131 Subway Map (30 分)
    PAT 甲级 1131 Subway Map (30 分)
    AcWing 906. 区间分组 区间贪心
    AcWing 907. 区间覆盖 区间贪心
  • 原文地址:https://www.cnblogs.com/eba001/p/14287577.html
Copyright © 2011-2022 走看看