Linux 中的find 命令

1、find 命令是Linux平台上一个强大的查找命令。它可以实时查找文件,你可以指定一些匹配条件,如按文件名、文件类型、文件大小、用户、或者按时间戳查找文件。

2、find命令的一般用法:

  • Find命令的基本语法:

    • find [选项] [查找起始路径] [查找条件] [处理动作]
  • find的选项:
  • 按照文件名查找文件

    • find /dir -name filename  在/dir目录及其子目录下面查找名字为filename的文件
    • find . -name "*.c" 在当前目录及其子目录(用“.”表示)中查找任何扩展名为“c”的文件
  • 根据文件的类型查找
  • -type TYPE:
    • f: 普通文件
    • d: 目录文件
    • l:符号链接文件
    • b:块设备文件
    • c:字符设备文件
    • p:管道文件
    • s:套接字文件
    • 例 : Find /dev –type f  : 查找/dev下的类型为普通文件的文件
  • 根据文件的大小查找:

    • -size[+|-]#UNIT(单位) :+表示精确查找
    • 常用单位:k,M,G
    • #UNIT:(#-1,#]
    • -#UNIT:[0,#-1]
    • +#UNIT:(#,∞)
    • 例 : Find /dev –size +1M  :查找/dev 下大小为1M的文件
  • 根据文件从属关系查找:

    • -user USERNAME:查找属主指定用户的所有文件;
    • -group GRPNAME:查找属组指定组的所有文件;
    • -uid UID:查找属主指定的UID的所有文件;包含目录;
    • -gid GID:查找属组指定的GID的所有文件;包含目录;
    • -nouser:查找没有属主的文件;
    • -nogroup:查找没有属组的文件;
    • 例 : Find /dev –user gentoo  : 查找/dev下属主为 gentoo的文件
  • 按时间戳查找

    • 以 天 为单位

      • -atime( 最近一次访问时间)[+|-]#
      • #:[#,#-1]大于等于#,小于等于#-1
      • -#:(#,0]
      • +#:(∞,#-1]
    • 例 : find /etc -atime +7  :查找/etc 下至少7天没被访问的文件
    • -mtime(更改时间,数据改动)
    • -ctime(改动时间,元数据改动)
    • 以 分钟 为单位(以小时为单位时把分钟换算成小时即可)
    • -amin
    • -mmin
    • -cmin

根据权限查找

  • -perm [/|-]mode

  • mode:精确权限匹配;
  • /mode:任何一类用户(u,g,o)的权限的任何一位(r,w,x)符合条件即满足;
  • 9位权限之间存在"或"关系;
  • -mode:每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足
  • 9位权限之间存在“与”关系;
  • find的一些处理动作:

    • -print:输出至标准输出;默认的动作;
    • -ls:类似于对查找到的文件执行 "ls -l"命令,输出文件的详细信息;
    • -delete:删除查找到的文件;
    • -fls /PATH/TO/SOEMEFILE:把查找到的所有文件的长格式信息保存至指定文件中;
    • -ok COMMAND{}\; :对查找到的每个文件执行由COMMAND表示的命令;每次操作都由用户进行确认;
    • -exec COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令;{}和\之间有空格;
    • 例 :find /etc -type f -exec ls -l {} \;  :查找/etc下的普通文件然后列出其详细信息;

3、练习实例:

查找/var目录下属主为root,且属组为mail的所有文件或目录;

  • ~]# find /var -user root -a -group mail -ls

查找/usr目录下不属于root,bin或hadoop的所有文件或目录;用两种方法;

  • ~]# find /usr -not -user root -a -not -user bin -a -not -user
    hadoop
  • ~]# find /usr -not \( -user root -o -user bin -o -user hadoop \)
    -ls

查找/etc目录下最近一周内其内容修改过,且属主不是root用户也不是hadoop用户的文件或目录;

  • ~]# find /etc -mtime -7 -a -not \( -user root -o -user hadoop \)
    -ls
  • ~]# find /etc -mtime -7 -a -not -user root -a -not -user hadoop
    -ls

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

  • ~]# find  /  \( -nouser -o -nogroup \)  -atime 
    -7  -ls
  • [[email protected] ~]# find / -nouser -o -nogroup -atime -7 -ls

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

  • ~]# find /etc -size +1M -type f -exec ls -lh {} \;

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

  • [[email protected] ~]# find /etc/ -not -perm /222 -type f -ls

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

  • ~]# find /etc -not -perm -111 -type f -ls

查找/etc/init.d/目录下,所有用户都有执行权限,且其他用户有写权限的所有文件;

  • ~]# find /etc -perm -113 -type f -ls

4、find与xargs

  • 在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,此时find命令就会出错。使用xargs命令可以解决,特别是与find命令一起使用。
  • find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。
  • 例子:
  • find . -type f -print | xargs file 查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件
  • find / -name "core" -print | xargs echo "" >/tmp/core.log 在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中:
  • find . -type f -print | xargs grep "hostname" 用grep命令在所有的普通文件中搜索hostname这个词
  • find ./ -mtime +3 -print|xargs rm -f –r 删除3天以前的所有东西 (find . -ctime +3 -exec rm -rf {} \;)
  • find ./ -size 0 | xargs rm -f & 删除文件大小为零的文件
  • find命令配合使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令。
时间: 2024-10-05 05:15:52

Linux 中的find 命令的相关文章

linux中的压缩命令详细解析(二)

我们在<Linux中的压缩命令详细解析(一)>中已经讲解了常见的三种压缩命令,下面我们开始讲解工作中最常用到的tar命令. 为了使压缩和解压缩变得简单,tar命令就应运而生了.那么究竟该如何使用呢? tar.gz格式: 压缩命令: tar -zcvf 压缩文件名 源文件名 举例: 把abc文件压缩成后缀为tar.gz格式的文件 tar -zcvf abc.tar.gz abc 解压缩命令: 举例:解压缩abc.tar.gz文件 tar -zxvf abc.tar.gz tar.bz2格式: 压

教你在Linux中如何用命令或手动修改文件来添加一个用户

教你在Linux中如何使用命令或手动修改文件添加一个用户 首先我们从一个例子进行引入:添加一个happy用户,基本组为happy(5200),附加组为luzhi. 一.用命令的方法实现: groupadd -g 5200 happy useradd -u 5200 -g happy -G luzhi  happy passwd happy su - happy 这样就这个用户就创建成功了. 下面来演示一下: 验证系统中是否存在happy用户,从输出看是没有存在happy用户的. 2.我们先建一个

Linux中的In命令

ln是linux中一个非常重要命令.它的功能是为某一个文件在另外一个位置建立一个同步的链接,这个命令最常用的参数是-s,具体用法是: ln -s  源文件 目标文件    -s 是 symbolic的意思. 例:ln  -s  /lib/lsb   /usr/lj即:在usr目录下建立指向/lib/lsb目录的lj文件. 当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(link

linux中的strings命令简介

摘自:http://blog.csdn.net/stpeace/article/details/46641069 linux中的strings命令简介 在linux下搞软件开发的朋友, 几乎没有不知道strings命令的.我们先用man strings来看看: strings - print the strings of printable characters in files. 意思是, 打印文件中可打印的字符.  我来补充一下吧, 这个文件可以是文本文件(test.c), 可执行文件(te

linux中的strings命令简介2

摘自:http://blog.csdn.net/stpeace/article/details/46641069 linux中的strings命令简介 之前我们聊过linux strings的用法和用途, 但据我了解, 还有部分朋友并不常用strings, 这是个不好的习惯. 所以, 本文继续啰嗦一下strings命令. 在软件开发中, 我们经常需要修改代码, 并生成静态库.动态库或者可执行文件, 有时候, 工程太大, 那怎样确定自己改动的代码正确编译到库中去了呢? 用strings命令吧!  

辛星浅析linux中的ac命令

linux中的ac命令根据当前/var/log/wtmp文件中的登录的进入和退出来报告用户连接的时间,默认是以小时为单位,如果不使用标识,则报告的是总时间. 它的主要参数有两个: (1)-d将显示每天的连接时间. (2)-p将显示每个用户的连接时间.

Linux中history历史命令使用方法详解

在/etc/profile里添加如下: #History export HISTTIMEFORMAT="[%F %T]" HISTDIR=/home/common/.hist if [ ! -d $HISTDIR ]; then         mkdir -p $HISTDIR         chmod 777 $HISTDIR fi export HISTSIZE=100000 export HISTFILE="$HISTDIR/${LOGNAME}.hist"

一张图详解Linux中的top命令

一张图详解Linux中的top命令及每个参数的含义:

linux中的ps命令用法。

在linux中使用ps命令可以查看有哪些进程在运行和运行的状态.进程是否结束.进程有没有僵尸.哪些进程占用了过多的资源等等. ps命令最常用的是用于监控后台进程的工作情况. 名称:ps 使用权限:所有使用者 使用方式:ps [options] [--help] 说明:显示瞬间行程 (process) 的动态 参数: ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义 -A 列出所有的行程 -w 显示加宽可以显示较多的资讯 -au 显示较详细的资讯 -aux 显示所有包含其他使用者的行程

linux中的压缩命令详细解析(一)

我们在Linux中最常用到的有关压缩的命令,我们知道下面介绍的5种就完全足够了. 它们的格式分别是:*.zip  *.gz  *.bz2  *.tar.gz  *.tar.bz2 OK,言归正传,我们一个一个来介绍: (1)*.zip格式 这里强调一点:*.zip格式可以与Windows上的该格式文件通用,换句话说就是Windows上的zip格式压缩文件可以在Linux上解压. 压缩文件命令:zip 压缩文件名 源文件名 举例:我的/root目录下有一个abc文件,下面把abc文件压缩成一个压缩