zoukankan      html  css  js  c++  java
  • find、xargs、grep、压缩

    find

    是linux里面的一个实时查找工具,通过制定路径完成文件查找

    find [options] ….. [查找路径] [查找条件] [处理动作]

    • 查找路径:查找的位置,默认是当前文件夹

    • 查找条件:制定查找的标准,文件名、大小、类型、日期等等

    • 处理动作:对符合条件的文件做什么操作,默认是输出到屏幕上

    查找条件

    [root@localhost test]# mkdir -p a/{b,a}/{b,a}/{b,a}

    根据文件名查找

    • -name file_name 指定名称,可以使用正则,找到所有名为file_name的文件。
    find -name a
    ./a
    ./a/b/b/a
    ./a/b/a
    ./a/b/a/a
    ./a/a
    ./a/a/b/a
    ./a/a/a
    ./a/a/a/a
    • -iname 忽略大小写
    • -links n 引用次数为n的文件
    • -regex 后面跟完整路径,而不是文件名, 必须整个路径完全匹配,可以判断文件是否存在
    find -regex "./a"

    制定搜索的层级

    • -maxdepth level 最大的搜索深度,指定的目录为第1层
    • -mindepth level 最小的搜索深度,包括level层
    find -maxdepth 3 -name a
    ./a
    ./a/b/a
    ./a/a
    ./a/a/a

    find /etc -name *.conf -maxdepth 2
         目录       目录统配符

    根据属主、属组来查找

    • -user username 查找属主为username的文件
    • -group groupname 查找属组为groupname的文件

    获取用户的id: id 用户名

    • -uid id 查找属主为id的文件
    • -gid id 查找属组为id的文件
    • -nouser 查找没有属主的文件
    • -nogroup 查找没有属组的文件

    删除用户后,文件的属主与属组会变为被删除用户的id,再次创建用户,新建的用户的id会和删除用户的id相同,会造成文件的属主与属组变成新建用户的名称。Linux中以用户id区分用户而不是用户名。

    根据文件类型 -type

    • d 目录
    • f 文件
    • l 符号链接
    • s 套接字
    • b 块设备
    • c 字符设备
    • p 管道文件

    空文件或者空目录

    • -empty
    find -empty -type d   # 只查当前目录下为空的目录

    组合条件,默认为and

    • 与 -a
    • 或 -o
    • 非 -not
    find -empty -not -type d #当前目录下为空但不是目录的
    • 摩根定律

      • 非(A或B) ——> 非A且非B
      • 非(A且B) ——> 非A或非B
      • !表示非
    find !(-empty -a -type d)   
    # 不为空或部位目录

    指定目录

    • -path
    find /etc -name *_config
    /etc/ssh/ssh_config
    /etc/ssh/sshd_config

    path必须和prune结合使用,表是排除目录,prune:不打印
    find /etc -path '/etc/ssh' -prune -name *_config

    排除多个目录
    find /etc (-path '/etc/sane.d' -o -path '/etc/cups' ) -prune -name *_config      

    按照大小来查找

    • -size # (#-1,#] 不包括#-1,包括#
    • -size -# [0,#-1] 包括#-1
    • -size +# (#,……)

    按照时间来查找

    • -atime # [#,#+1) #天
    • -atime -# (0,#) #天以内的
    • -atime +# [#+1,….] #天以后的
    删除7天之前的日志,找查:
    find -atime +7
    • -mtime
    • -ctime
    • 以分钟为单位
      • -amin
      • -mmin
      • -cmin

    处理动作

    • -print 默认的处理动作,显示在屏幕上
    • -ls 类似于ls -l 显示长格式
    • -delete 删除查找到的文件
    • -fls file_name 将查找的结果以长格式保存到file_name文件中
    • -ok command {} ; 对每一个查找到的文件执行command命令,在执行命令之前要先提示用户是否要执行
    find -size 2M -ok rm -rf {} ;
    # {}代表找查出的文件,;是结束符
    • -exec command {} ; 对查到的每一个文件执行command命令,不需要确认,一次性交给后面命令处理

    xargs

    有的命令不支持管道echo file | touch,有的命令参数过长touch file{1,5000000},可用xargs解决。

    • xargs 将管道前面的内容一条一条的交给后面命令处理
    echo file{1,100000} | xargs touch
    • 一般会跟find使用
    echo file{1,100000} | xargs rm -rf

    linux三剑客

    grep、awk、sed

    grep

    Global search REgular expression and Print out the line

    作用:文本搜索工具,根据用户指定的”模式“对目标文件逐行进行匹配检查并打印出匹配的行。

    模式:由正则表达式及文本字符所编写的过滤条件

    格式:grep[options]pattern[file…]

    其中pattern如果需要对模式进行转换,需要使用"",如果不需要进行转换,则使用‘’或者“”都可以。

    option

    --color=auto 对匹配到的行添加颜色,默认添加grep是别名
    -v 取反
    -i 不区分大小写
    -n 查找的内容增加行号
    -c 打印匹配到的行数
    -o 只显示匹配到的文字

    -q 静默模式,什么都不输出,可通过此命令判断是否查到关键字
    常与echo $? 结合(echo $?:打印上一命令执行结果,有结果为0,无结果为非0。
    grep -q 'user' passwd
    echo $?
    0

    -A # after 向下显示#行
    -B # before 向上显示#行
    —C # context 上下分别显示#行

    -e 或者
    grep -e 'user' -e 'root' passwd

    -E 扩展正则表达式
    -F 不使用正则表达式
    -r 递归
    -w 匹配整个单词

    正则表达式元字符

    字符匹配

    • . 任意单个字符
    • [] 匹配指定范围内的任意单个字符 [0-9] [a-z] [A-Z]
    • [^] 取反
    • [:upper:] 大写字母
    • [:lower:] 小写字母
    • [:alnum:] 字母和数字
    • [:alpha:] 大小写字母
    • [:digit:] 数字
    • [:black:] 空白
    • [:punct:] 标点符号

    匹配次数

    • * 表示任意次数
    • .* 任意字符任意次数
    • ? 表示0或者1次
    • + 至少一次
    • {n} 表示n次
    • {m,n} 最少m次,最多n次
    • {n,} 至少n次
    • {,n} 至多n次

    位置锚定

    • ^ 开头
    • $ 结尾
    • ^$ 空行
    grep -v "^#" /etc/ssh/sshd_config |grep -v "^$" 
    显示不以#开头并且不是空行

    分组

    grep "(c|C)at" a     其中的全是转义字符

    向后引用

    grep "(c|C)at.*1" a 
    • 1 前面第一组(括号)出现的内容匹配完成之后再后面在出现一次
    • 2 第二组

    扩展则表达式

    grep -E "(c|C)at" a   
    • 与正则表达式的区别是不需要转义

    压缩

    gzip

    gzip [option]… file 压缩文件

    • 默认将源文件删除,不指定压缩比参数压缩文件后缀名为.gz

    • -c 将压缩结果输出到屏幕,保留原来的文件

    gzip -c passwd > passwd.gz
    将压缩文件保留至文件中
    • -1-9 指定压缩比,默认-9
    • -d 解压
    • gunzip file_name 解压
    • zcat 不解压的情况下查看压缩比内的内容
    zcat passwd > passwd.gz
    bzip2

    bzip2 [option] file_name 压缩

    • 默认将源文件删除,不指定压缩比参数压缩文件后缀名为.bz
    • -k 保留原来的文件
    • -d 解压
    • bunzip2 解压
    • -1-9 指定压缩比
    • bzcat 不解压的情况下查看压缩包的内容
    xz

    xz [option] file 压缩率最高

    • 默认将源文件删除,不指定压缩比参数压缩文件后缀名为.xz
    • -k 保留原来的文件
    • -d 解压
    • unxz 解压
    • -1-9 指定压缩比
    • xzcat 不解压直接查看
    zip

    zip [option] zipfile 要压缩的文件

    • zip -r network.zip /etc/sysconfig/network-scripts
    • unzip network.zip 解压至当前文件夹
    tar

    tar [OPTION...] [FILE]... 归档工具,默认不压缩

    • c 创建
    • p 把原来的属性也带过来
    • v 显示过程
    • f 指定归档文件,多个文件以空格分隔
    tar cpvf etc.tar /etc 
    • tar -rf etc.tar /etc 追加
    • tar -t -f etc.tar 查看归档文件内的内容
    • tar xf etc.tar 解压文件
    • tar xf etc.tar -C 指定解压路径
    tar xf etc.tar -C /test
    • z 使用gzip压缩
    • j 使用bzip2压缩
    • J 使用xz压缩
    tar zcpvf etc.tar.gz /etc 
    tar zcpvf etc.tar.gz2 /etc   # 压缩比为2

    #
     解压文件
    tar xf etc.tar -C /test
    • --exclude 排除文件
    tar zcpvf etc.tar.gz --exclude /etc/sysconfig /etc 
    split

    分卷压缩,可以指定一个压缩文件有多大

    • split -b 指定大小 文件(只能为文件) 切割以后的名字
    split -b 2M /etc/passwd passwd.tar.gz

    #
     切割压缩的文件
    split -b 2M etc.tar.gz etc.tar.gz
    • -d 指定后缀为数字

    • -a 指定后缀几位

    split -b 2M etc.tar.gz -d -a 3 etc.tar.gz
    • cat 合并切割后的文件 > 新文件
    cat etc.tar.gz00[0-9] > etc.tar.gz

  • 相关阅读:
    c# 类型转换符的重载
    C# 串口读写
    STM32 Keil C++编写单片机程序
    C# 静态构造函数的使用
    MvvMlight 学习之 SimpleIoc
    STM32 之 DMA
    STM32 之 SysTick
    突然发现用PHP做多条件模糊查询很简单
    discuz代码转为html代码
    Discuz!开发之HTML转Discuz代码(bbcode)函数html2bbcode()
  • 原文地址:https://www.cnblogs.com/wby-110/p/13457702.html
Copyright © 2011-2022 走看看