find命令

基本格式

  1. find < path > < expression > < cmd >
  2. '''
  3. path: 所要搜索的目录及其所有子目录。默认为当前目录。
  4. expression: 所要搜索的文件的特征。
  5. cmd: 对搜索结果进行特定的处理。
  6. 如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。
  7. '''

find命令常用选项及实例

  • -name 按照文件名查找文件。

    1. find /dir -name filename # 在/dir目录及其子目录下面查找名字为filename的文件
    2. find . -name "*.c" # 在当前目录及其子目录(用“.”表示)中查找任何扩展名为“c”的文件
  • -perm 按照文件权限来查找文件。
    1. find . -perm 755 print # 在当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件
  • -prune 使用这一选项可以使 find 命令不在当前指定的目录中查找,如果同时使用 -depth 选项,那么 -prune 将被 find 命令忽略。
    1. find /apps -path "/apps/bin" -prune -o print # 在/apps目录下查找文件,但不希望在/apps/bin目录下查找
    2. find /usr/sam -path "/usr/sam/dir1" -prune -o print # 在/usr/sam目录下查找不在dir1子目录之内的所有文件
  • -depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
    1. find / -name "CON.FILE" -depth print # 它将首先匹配所有的文件然后再进入子目录中查找
  • -user 按照文件属主来查找文件。
    1. find ~ -user sam print # 在$HOME目录中查找文件属主为sam的文件
  • -group 按照文件所属的组来查找文件。
    1. find /apps -group gem print # 在/apps目录下查找属于gem用户组的文件
  • -mtime -n +n 按照文件的更改时间来查找文件, -n 表示文件更改时间距现在n天以内,+n 表示文件更改时间距现在 n 天以前。
    1. find / -mtime -5 print # 在系统根目录下查找更改时间在5日以内的文件
    2. find /var/adm -mtime +3 print # 在/var/adm目录下查找更改时间在3日以前的文件
  • -nogroup 查找无有效所属组的文件,即该文件所属的组在 /etc/groups 中不存在。
    1. find / nogroup -print
  • -nouser 查找无有效属主的文件,即该文件的属主在 /etc/passwd 中不存在。
    1. find /home -nouser print
  • -newer file1 ! file2 查找更改时间比文件 file1 新但比文件 file2 旧的文件。
  • -type 查找某一类型的文件,
    • 诸如:
    • b - 块设备文件。
    • d - 目录。
    • c - 字符设备文件。
    • p - 管道文件。
    • l - 符号链接文件。
    • f - 普通文件。
      1. find /etc -type d print # 在/etc目录下查找所有的目录
      2. find . ! -type d print # 在当前目录下查找除目录以外的所有类型的文件
      3. find /etc -type l print # 在/etc目录下查找所有的符号链接文件
  • -size n[c] 查找文件长度为 n 块的文件,带有 c 时表示文件长度以字节计。
    1. find . -size +1000000c print # 在当前目录下查找文件长度大于1 M字节的文件
    2. find /home/apache -size 100c print # 在/home/apache目录下查找文件长度恰好为100字节的文件
    3. find . -size +10 print # 在当前目录下查找长度超过10块的文件(一块等于512字节)
  • -mount:在查找文件时不跨越文件系统 mount 点。
    1. find . -name “*.XC -mount print # 从当前目录开始查找位于本文件系统中文件名以XC结尾的文件(不进入其他文件系统)
  • -follow:如果 find 命令遇到符号链接文件,就跟踪至链接所指向的文件
  • -exec,find 命令对匹配的文件执行该参数所给出的 shell 命令。相应命令的形式为 ’command’ {} \;,注意 {} 和 \; 之间的空格
    1. $ find ./ -size 0 -exec rm {} \; # 删除文件大小为零的文件
    2. $ rm -i `find ./ -size 0`
    3. $ find ./ -size 0 | xargs rm -f &
    4. # 为了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的-exec选项中:
    5. $ find . -type f -exec ls -l {} \;
    6. # 在/logs目录中查找更改时间在5日以前的文件并删除它们:
    7. find /logs -type f -mtime +5 -exec rm {} \;
  • -ok,和 -exec 的作用相同,只不过以一种更为安全的模式来执行该参数所给出的 shell 命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
    1. find . -name "*.conf" -mtime +5 -ok rm { } \; # 在当前目录中查找所有文件名以.LOG结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示
  1. # 查找当前路径下的所有普通文件,并把它们列出来。
  2. find . -type f -exec ls -l {} \;
  3.  
  4. # 删除logs目录下更新时间为5日以上的文件。
  5. find logs -type f -mtime +5 -exec rm {} \;
  6.  
  7. # 删除当前路径下以。log结尾的五日以上的文件,删除之前要确认。
  8. find . -name "*.log" -mtime +5 -ok rm {} \;
  9.  
  10. # 查找$HOME目录下suid位被设置,文件属性为755的文件打印出来。
  11. find ~ -type f -perm 4755 -print
  12.  
  13. #说明: find在有点系统中会一次性得到将匹配到的文件都传给exec,但是有的系统对exec的命令长度做限制,就会报:”参数列太长“,这就需要使用xargs。xargs是部分取传来的文件。
  14.  
  15. # xargs测试文件分类
  16. find / -type f -print |xargs file
  17.  
  18. # 将core文件信息查询结果报存到core。log日志
  19. find . -name "core*" -print|xargs echo " ">/tmp/core.log
  20.  
  21. 7. find / -type f -print | xargs chmod o -w
  22.  
  23. 8. find . -name * -print |xargs grep "DBO"

一些常用命令

grep命令

基本格式

  1. grep [选项] pattern [文件名]

命令中的选项为:

  1. '''
  2. -? 同时显示匹配行上下的?行,如:grep -2 pattern filename 同时显示匹配行的上下2行。
  3. -b,—byte-offset 打印匹配行前面打印该行所在的块号码。
  4. -c,—count 只打印匹配的行数,不显示匹配的内容。
  5. -f File,—file=File 从文件中提取模板。空文件中包含0个模板,所以什么都不匹配。
  6. -h,—no-filename 当搜索多个文件时,不显示匹配文件名前缀。
  7. -i,—ignore-case 忽略大小写差别。
  8. -q,—quiet 取消显示,只返回退出状态。0则表示找到了匹配的行。
  9. -l,—files-with-matches 打印匹配模板的文件清单。
  10. -L,—files-without-match 打印不匹配模板的文件清单。
  11. -n,—line-number 在匹配的行前面打印行号。
  12. -s,—silent 不显示关于不存在或者无法读取文件的错误信息。
  13. -v,—revert-match 反检索,只显示不匹配的行。
  14. -w,—word-regexp 如果被\<和>引用,就把表达式做为一个单词搜索。
  15. -V,—version 显示软件版本信息。
  16. '''
  1. ls -l | grep '^a' 通过管道过滤ls -l输出的内容,只显示以a开头的行。
  2. grep 'test' d* 显示所有以d开头的文件中包含test的行。
  3. grep 'test' aa bb cc 显示在aabbcc文件中匹配test的行。
  4. grep '[a-z]' aa 显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
  5. grep 'w(es)t.*' aa 如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(),找到就显示该行。如果用egrepgrep -E,就不用""号进行转义,直接写成'w(es)t.*'就可以了。
  6. grep -i pattern files :不区分大小写地搜索。默认情况区分大小写
  7. grep -l pattern files :只列出匹配的文件名,
  8. grep -L pattern files :列出不匹配的文件名,
  9. grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
  10. grep -C number pattern files :匹配的上下文分别显示[number]行,
  11. grep pattern1 | pattern2 files :显示匹配 pattern1 pattern2 的行,
  12. grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。

例子

pattern为所要匹配的字符串,可使用下列模式

  • . 匹配任意一个字符
  • * 匹配 0 个或多个 * 前的字符
  • ^ 匹配行开头
  • $ 匹配行结尾
  • [] 匹配 [ ] 中的任意一个字符,[] 中可用 - 表示范围,
  • 例如 [a-z] 表示字母 a 至z 中的任意一个
  • \ 转意字符

xargs命令

基本格式

  1. xargs定位参数位置 | xargs控制参数位置 | 如何定位控制xargs参数位置

背景:
  管道 + xargs 用于把上游输出转换为下游参数输入。
  例如 ls *.bak | xargs rm -f

问题:

  xargs默认把输入作为参数放到命令的最后,但是很多命令需要自己定位参数的位置,比如拷贝命令 cp {上游结果} destFolder

解决方法:

  xargs 使用大写字母i 定义参数指示符 -I <指示符>,然后用这个参数指示符定位参数插入的位置, 例如:

  1. ls *.bak | xargs -I % cp % /tmp/test
  2. # 这里使用%作为指示符,第一个%可以理解为声明,第二个%可以理解为调用。你也可以用其他字符,比如 ls *.bak | xargs -I {} cp {} /tmp/test

  之所以能用到 xargs 这个命令,关键是由于很多命令不支持 | 管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs 命令,例如:

  1. find /sbin -perm +700 | ls -l # 这个命令是错误的
  2. find /sbin -perm +700 | xargs ls -l # 这样才是正确的

  xargs 可以读入 stdin 的资料,并且以空白字元或断行字元作为分辨,将 stdin 的资料分隔成为 arguments 。 因为是以空白字元作为分隔,所以,如果有一些档名或者是其他意义的名词内含有空白字元的时候, xargs 可能就会误判了~

选项解释

  • -0 当sdtin含有特殊字元时候,将其当成一般字符,像/ ‘ 空格等

    1. echo "//"|xargs echo
    2. echo "//"|xargs -0 echo
    3. # /
  • -a file 从文件中读入作为 sdtin
    1. cat test#!/bin/shecho "hello world/n"
    2. xargs -a test echo#!/bin/sh echo hello world/n
  • -e flag ,注意有的时候可能会是 -E,flag 必须是一个以空格分隔的标志,当 xargs 分析到含有 flag 这个标志的时候就停止。
    1. cat txt # /bin tao shou kun
    2. cat txt|xargs -E 'shou' echo # /bin tao
  • -p 当每次执行一个 argument 的时候询问一次用户。
    1. root@localhost:~/test#cat txt|xargs -p echoecho /bin tao shou kun ff ?...y # /bin tao shou kun ff
  • -n num 后面加次数,表示命令在执行的时候一次用的 argument 的个数,默认是用所有的
    1. cat txt|xargs -n1 echo
    2. '''
    3. /bin
    4. tao
    5. shou
    6. kun
    7. '''
    8.  
    9. cat txt|xargs echo # /bin tao shou ku
  • -t 表示先打印命令,然后再执行。
    1. cat txt|xargs -t echoecho /bin tao shou kun #/bin tao shou kun
  • -i 或者是 -I,这得看 linux 支持了,将 xargs 的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。
    1. ls | xargs -t -i mv {} {}.bak
  • -r no-run-if-empty 当 xargs 的输入为空的时候则停止 xargs,不用再去执行了。
    1. echo ""|xargs -t -r mv
  • -s num 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数
    1. cat test |xargs -i -x -s 14 echo "{}"
    2. '''
    3. exp1
    4. exp5
    5. file
    6. xargs: argument line too long
    7. linux-2
    8. '''
  • -L num Use at most max-lines nonblank input lines per command line.-s是含有空格的。
  • -l 同-L
  • -d delim 分隔符,默认的 xargs 分隔符是回车,argument 的分隔符是空格,这里修改的是 xargs 的分隔符
    1. cat txt |xargs -i -p echo {}echo /bin tao shou kun ?...y
    2. cat txt |xargs -i -p -d " " echo {}echo /bin ?...y
    3. '''
    4. echo tao ?.../bin
    5. y
    6. echo shou ?...tao
    7. '''
    8.  
    9. # 再如:
    10. cat test |xargs -i -p -d " " echo {}echo exp1
    11. '''
    12. exp5
    13. file
    14. linux-2
    15. ngis_post
    16. tao
    17. test
    18. txt
    19. xen-3
    20. ?...y
    21. '''
    22. cat test |xargs -i -p echo {}echo exp1 ?...y
    23. '''
    24. echo exp5 ?...exp1
    25. y
    26. echo file ?...exp5
    27. '''
    28. y
  • -x exit 的意思,主要是配合 -s 使用。
  • -P 修改最大的进程数,默认是1,为0时候为 as many as it can

其他查找命令

1. locate命令
  locate 命令其实是 “find -name” 的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux 系统自动创建这个数据库,并且每天自动更新一次,所以使用 locate 命令查不到最新变动过的文件。为了避免这种情况,可以在使用 locate 之前,先使用 updatedb 命令,手动更新数据库。

locate命令的使用实例:

  1. # 搜索etc目录下所有以sh开头的文件。
  2. $ locate /etc/sh
  3.  
  4. # 搜索用户主目录下,所有以m开头的文件,并且忽略大小写。
  5. $ locate -i ~/m

2. whereis命令
  whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。

whereis 命令的使用实例:

  1. $ whereis grep
  2. # grep: /bin/grep /usr/share/man/man1p/grep.1p.gz /usr/share/man/man1/grep.1.gz

3. which命令
  which 命令的作用是,在 PATH 变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用 which 命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

which 命令的使用实例:

  1. $ which grep
  2. # /bin/grep

参考文章:https://blog.csdn.net/wzzfeitian/article/details/40985549

Linux下查找命令 —— find、grep、 which、 whereis、 locate的更多相关文章

  1. Linux文件查找命令具体解释-which whereis find locate

    原创BLog.转载请注明出处 http://blog.csdn.net/hello_hwc? viewmode=contents which命令 首先查看man which的说明 which - sh ...

  2. Linux下查找文件:which、whereis、locate、find 命令的区别

    我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索.which       查看可执行文件的位置,通过环境变量查whereis    查看文件的位置,通过数据库查,每 ...

  3. Linux下查找命令(收集整理)

    原文:http://blog.csdn.net/sunstars2009918/article/details/8510878 一.Linux查找文件的相关命令 常 用 命 令 简要中文说明 程序所在 ...

  4. linux下查找命令总结

    查找命令总结,which,whereis,find,locate,type http://blog.csdn.net/jessica1201/article/details/8139249   1.f ...

  5. linux下查找命令两则

    由于本人不会阅读man手册,因此需要几下两个常用的查找命令: (1)在某个目录及其子目录查找某个文件并打印完整路径: find ./ -name "assertions.h" -e ...

  6. Linux下查找命令

    在CentOs下查找某个目录下的某个文件,使用如下指令: find /目录 -name 文件名 eg:查找当前目录下关于hadoop的文件 find / -name hadoop

  7. Linux文件查找命令find用法整理(locate/find)

    Linux文件查找查找主要包括:locate和find 1.locate 用法简单,根据数据库查找,非实时,用法: locate FILENAME 手动更新数据库(时间可能较长) updatedb 2 ...

  8. [转帖]linux下的find文件查找命令与grep文件内容查找命令

    linux下的find文件查找命令与grep文件内容查找命令 https://www.cnblogs.com/shileima/p/8431393.html 在使用linux时,经常需要进行文件查找. ...

  9. linux中查找命令find、locate、whereis、which、type区别

    linux中查找命令find.locate.whereis.which.type区别 1. find Java代码 find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件.与查询数据库(/ ...

随机推荐

  1. linux查看磁盘分区

    df  查看磁盘分区使用状况 用法:df [选项]... [文件]... Show information about the file system on which each FILE resid ...

  2. MySQL安装-glibc方式安装

    MySQL安装-glibc方式安装 版本说明:这里安装版本为MySQL-5.7系列的 mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz 步骤 下载软件包 官网下载 ...

  3. xpath+多进程爬取全书网纯爱耽美类别的所有小说。

    # 需要的库 import requests from lxml import etree from multiprocessing import Pool import os # 请求头 heade ...

  4. Python通过xpath查找元素通过selenium读取元素信息

    #coding:utf-8 from selenium import webdriver import time url ='http://www.baidu.com' driver = webdri ...

  5. python通过LXML库读取xml命名空间

    xml实例版本: <a> <city:table xmlns:city="city"> <heilongjiang name="citys& ...

  6. Maven模块化搭建总结

    1.Maven插件在eclipse的安装 windows——>preferences——>Maven——>installations——>add——>installati ...

  7. Ranger安装部署 - solr安装

    1. 概述 Lucene是一个Java语言编写的利用倒排原理实现的文本检索类库: Solr是以Lucene为基础实现的文本检索应用服务.Solr部署方式有单机方式.多机Master-Slaver方法. ...

  8. Git学习笔记--配置(二)

    由之前文章,总结得出Git的特点: 最优的存储能力: 非凡性能: 开源的: 管理成本低: 很容易做备份: 支持离线操作: 很容易定制工作流程: Git is a free and open sourc ...

  9. Cocos2d-x学习小结 开始篇

    Cocos2d-x学习小结 开始篇 想要学习Cocos2d-x,是因为在高中物理课上找不到某些物理定律的证明,例如欧姆定律. 为此,我翻阅了稍高等级的物理教材,其中关于欧姆定律\(R=\frac{U} ...

  10. L1141(bfs思想)

    一,看 1,整个方格图其实可以看做是一些不连通的图. 当然图内部必然是联通的. 2,遍历的技巧没什么. 方格图入队的技巧..额,是这样的 int gtid(int x,int y) { return ...