zoukankan      html  css  js  c++  java
  • 06grep与find命令详解

    1. grep 命令

    grep 命令用于在文本中执行关键词搜索,并显示匹配的结果,格式为“grep [选项][文件]”。
    grep 命令的参数及其作用如下:
    -b	将可执行文件(binary)当做文本文件(text)来搜索
    -c	仅显示找到的行数
    -i	忽略大小写
    -n	显示行号  ***常用***
    -v	反向选择——仅列出没有“关键字”的行   ***常用***
    

    这些参数中,-n 和 -v 这两个参数几乎能完成您日后 80% 的工作需要。

    //用grep命令来查找/etc/passwd 文件中包含“/sbin/nologin”的行
    [root@bogon test]# grep -n /sbin/nologin /etc/passwd
    2:bin:x:1:1:bin:/bin:/sbin/nologin
    3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
    4:adm:x:3:4:adm:/var/adm:/sbin/nologin
    5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10:operator:x:11:0:operator:/root:/sbin/nologin
    //省略部分输出信息
    

    grep与正则表达式的大批额使用,请参考“21grep与正则表达式

    2. find 命令

    find 命令用于按照指定条件查找文件,格式为 “find [查找路径] 寻找条件 操作”。
    Linux中,搜索工作都是通过 find 命令来完成的,它可以使用不同的文件特性作为寻找条件(如文件名、大小、修改时间、权限信息),一旦匹配成功则默认将信息显示到屏幕上。
    find 命令的参数及其作用如下:
    -name	匹配名称
    -perm	匹配权限
    -user	匹配所有者
    -group 	匹配所有组
    -mtime -n +n	匹配修改内容的时间(-n 指 n 天以内, +n 指 n 天之前)
    -atime -n +n	匹配访问文件的时间(-n 指 n 天以内, +n 指 n 天之前)
    -ctime -n +n	匹配修改文件权限的时间(-n 指 n 天以内, +n 指 n 天之前)
    -nouser			匹配无所有者的文件
    -nogroup		匹配无所有组的文件
    -newer f1 !f2	匹配比文件f1新但比f2旧的文件
    --type b/d/c/p/l/f	匹配文件类型(块设备、目录、字符设备、管道、链接文件、文本文件)
    -size			匹配文件的大小(+50KB查找超过50KB的文件,-50KB查找小于50KB的文件)
    -prune			忽略某个目录
    -exec ..... {}; 后面可跟进一步处理搜索结果的命令
    

    其中, -exec 参数用于把 find 命令搜索到的结果交由紧随其后的命令做进一步处理。

    在 /etc 目录中,如果想要获取到该目录中所有以 host 开头的文件列表,可以执行如下命令:

    #1.常规搜索
    [root@bogon test]# find /etc -name "host*" -print
    /etc/selinux/targeted/active/modules/100/hostname
    /etc/host.conf
    /etc/hosts
    /etc/hosts.allow
    /etc/hosts.deny
    /etc/hostname
    #2.1.在当前目录下,查找类型为文本文件,大小大于100M的文件
    [oracle@bat3963 ~]$ find . -type f -size +100M        
    ./product/11.2.0/dbhome_1/bin/oracle
    ./product/11.2.0/dbhome_1/javavm/admin/classes.bin
    ./product/11.2.0/dbhome_1/rdbms/log/upgrade_20190215144109_tmp.dmp
    ./product/11.2.0/dbhome_1/rdbms/log/upgrade_20190303092619_tmp.dmp
    ./product/11.2.0/dbhome_1/rdbms/log/upgrade_20190326162200_tmp.dmp
    ./product/11.2.0/dbhome_1/lib/libserver11.a
    #2.2.使用管道(|)无法传递 find 的输出
    [oracle@bat3963 ~]$ find . -type f -size +100M | ls -l
    total 88
    drwxr-xr-x.  2 oracle users 4096 Nov 25  2016 Desktop
    drwxr-xr-x.  2 oracle users 4096 Nov 25  2016 Documents
    drwxr-xr-x.  2 oracle users 4096 Nov 25  2016 Downloads
    drwxr-xr-x.  2 oracle users 4096 Nov 25  2016 Music
    drwxr-xr-x.  2 oracle users 4096 Nov 25  2016 Pictures
    #2.3.对于 find 的输出参数,可以使用 xargs 传递
    [oracle@bat3963 ~]$ find . -type f -size +100M |xargs  ls -l
    ./product/11.2.0/dbhome_1/javavm/admin/classes.bin
    -rwxrwxr-x. 1 oracle users   229064198 Nov 22  2016 ./product/11.2.0/dbhome_1/lib/libserver11.a
    -rw-r-----. 1 oracle users   280539136 Feb 15  2019 ./product/11.2.0/dbhome_1/rdbms/log/upgrade_20190215144109_tmp.dmp
    -rw-r-----. 1 oracle users   279851008 Mar  3  2019 ./product/11.2.0/dbhome_1/rdbms/log/upgrade_20190303092619_tmp.dmp
    -rw-r-----. 1 oracle users   281624576 Apr 30  2017 ./product/11.2.0/dbhome_1/rdbms/log/upgrade_20190326162200_tmp.dmp
    #3.find 配合 du 命令可以更方便的查看文件的大小
    [oracle@bat3963 ~]$ find . -type f -size +100M |xargs  du -h
    229M	./product/11.2.0/dbhome_1/bin/oracle
    105M	./product/11.2.0/dbhome_1/javavm/admin/classes.bin
    268M	./product/11.2.0/dbhome_1/rdbms/log/upgrade_20190215144109_tmp.dmp
    267M	./product/11.2.0/dbhome_1/rdbms/log/upgrade_20190303092619_tmp.dmp
    269M	./product/11.2.0/dbhome_1/rdbms/log/upgrade_20190326162200_tmp.dmp
    219M	./product/11.2.0/dbhome_1/lib/libserver11.a
    #4.du 和 df 的区别
    #du查看目录大小,df查看磁盘使用情况,-h用于指定以K,M,G为单位,提高信息的可读性
    [oracle@bat3963 ~]$ df -h
    Filesystem                      Size  Used Avail Use% Mounted on
    /dev/mapper/vg_bat3995-lv_root   60G   52G  5.4G  91% /
    tmpfs                           6.9G  133M  6.7G   2% /dev/shm
    /dev/sda1                       485M   39M  421M   9% /boot
     
    
    #find命令 -exec ..... {};参数使用
    #1.开始时,0611文件夹中只有test和findtest两个文件夹,并且test文件夹中有四个文件,findtest为空
    [root@bogon 0611]# ls -R
    .:
    findtest  test
    
    ./findtest:
    
    ./test:
    560_file  aaa.txt  aa.txt  a.txt
    #2.执行find命令,将在test文件夹中找的的文件名以“a”打头的文件全部复制到findtest文件夹中
    [root@bogon 0611]# find ./test -name "a*" -exec cp -a {} ./findtest/ ;
    #3.再次查看文件夹,发现已经将查找到的文件都保存到了findtest中
    [root@bogon 0611]# ls -R
    .:
    findtest  test
    
    ./findtest:
    aaa.txt  aa.txt  a.txt
    
    ./test:
    560_file  aaa.txt  aa.txt  a.txt
    
    道虽迩,不行不至;事虽小,不为不成。
  • 相关阅读:
    方法的封装与调用(十)
    适配器设计模式及GenericServlet(九)
    错误页设置,设置HTTP状态码404,500(八)
    设置默认首页(七)
    ServletContext接口(六)
    javax.servlet.ServletConfig接口(五)
    C语言第2天基本运算
    再议extern和include的作用
    C语言中的++和--
    C语言培训第一天
  • 原文地址:https://www.cnblogs.com/rock-cc/p/9165816.html
Copyright © 2011-2022 走看看