Linux下的常用命令(3.find)

          find命令是一个很功能很强大的命令,它在目录结构中搜索文件,并执行指定的操作。

          一般来说,find是在本地文件系统中进行查询。但是假如给它权限,也可以查询系统中的网络文件系统(NFS,NFS是基于UDP/IP协议的应用,其实现主要是采用远程过程调用RPC机制)它提供了很多查询条件,满足我们不同条件的查询功能。所以,它有许多选项需要我们去了解。我们来了解一些常用的。


      

1.命令格式:

find pathname -options [-print -exec -ok  -xargs...]     (+shell命令)

说明:可以增加shell对查找出来的文件进行操作,这样一来,命令就会复杂很多,等到自己熟练之后可以自己组合起来使用

2.命令功能:

用于在文件树种查找文件,并作出相应的处理 

3.命令参数:

pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。 

-print: find命令将匹配的文件输出到标准输出。 

-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {  } \;,注意{   }和\;之间的空格。 

-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

exec,ok,xargs后面执行的都是shell命令   如 :chmod,echo ,file,grep,mv,cp,rm……
其中xargs是非安全模式分批处理命令  
ok是安全模式一次性处理
exec是非安全模式一次性处理


4.命令选项:

-name   按照文件名查找文件。                     eg:find  .  -name  filename,其中filename可以由通配符来进行模糊查询:find  .  -name  "ca*"   可以查询开头为ca的文件


-perm   按照文件权限来查找文件。              eg:find . -perm 600(600代表文件权限,这个单讲)  


-prune  使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。

             find   QT -path "QT/2013" -prune -o -print     其中,ls -罗列出来了QT/2013文件夹下的文件,忽略查找这个文件夹,当我们确定文件不在该文件夹的时候可以使用这个


-user   按照文件属主来查找文件。       find  QT  -user  属主名    查询QT文件下该属主的文件


-group  按照文件所属的组来查找文件。     find  build-QtChat-Desktop-Debug/client  -group 所属的组      查询所属组为某某下的文件


-mtime -n +n  按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。find命令还有-atime和-ctime 选项,但它们都和-m time选项。    

               find  .  -mtime -1  和find  .  mtime  +125    由于后一条命令产生文件比较多,所以数值设置的比较大。


-nogroup  查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。这个可以参考-group,只是一个所属的组文件。一个是文件所属的组不存在这个文件夹

-nouser   查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。这个可以参考-user,只是一个属主文件。一个是文件属主不存在这个文件夹中

-newer file1 ! file2  查找更改时间比文件file1新但比文件file2旧的文件。

       这个需要我们对文件的创建时间比较敏感,才能更好的使用这种来查询到目标文件

       find  .  -newer  cat !  -newer cat6

   比较常用的是:查询某一个文件之前或者之后的文件  find  . -newer  cat1或者  find  .  !  -newer cat1


-type  查找某一类型的文件,诸如:

b - 块设备文件。

d - 目录。

c - 字符设备文件。

p - 管道文件。

l - 符号链接文件。

f - 普通文件。


由于我没有准备块设备文件,字符设备文件等。所有没有显示出来。


-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。


            查找文件为5670字节的文件,在这里我们需要注意的是:默认长度以块(block)计量,字节长度:N c。N为数字(1block=512字节)
             说明:查找文件使用字节表示文件长度,在查看系统文件的时候用块来计量,更容易转换

-fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。

-mount:在查找文件时不跨越文件系统mount点。

             由于我没有其他文件系统,故查询出来的是当前目下的所有文件

-follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。

-cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。

另外,下面三个的区别:(这就不一一试了)

-amin n   查找系统中最后N分钟访问的文件

-atime n  查找系统中最后n*24小时访问的文件

-cmin n   查找系统中最后N分钟被改变文件状态的文件

-ctime n  查找系统中最后n*24小时被改变文件状态的文件

-mmin n   查找系统中最后N分钟被改变文件数据的文件

-mtime n  查找系统中最后n*24小时被改变文件数据的文件


这是我看到比较好的解释,很详细说明了perm的使用形式

find -perm,根据文件的权限来查找文件,有三种形式:
find -perm mode
find -perm -mode
find -perm +mode
那么这三者之间有什么区别呢?解释之前首先得简单说一下linux中文件权限位的概念。在linux中文件或目录有三者权限r,w,x,代表的含义分别是读、写、可执行。而一个文件或目录的属性中又包括所属用户u、所属组g、其他o三个部分的属性,分别表示所属用户、所属组、其他用户对这个文件所拥有的权限。看起来大概是这个样子:  www.2cto.com  
 所属用户   所属组    其他
   rwx       rwx      rwx
用户在其拥有权限的位上设置1,没有权限的位设置0。如果将每个部分的这些权限位看成二进制数,每个部分可以用3位二进制数表示,最大值为7(2^3-1),表示可读、可写、可执行。严格的来说,文件权限除了r、w、x以外还有setuid,setgid权限,等下再解释。
 
好了,有了权限位的基础,那么再来看find -perm mode。mode是三个数字表示的,每个数字最大值是7(原因前面解释过了)。
find -perm mode , 表示严格匹配,也就是你的文件权限位转换成对应的十进制数字与mode一模一样,那么匹配成功,需要注意的是如果mode给的数字不足3位,那么前面自动添0(严格的说是不足4位,原因就是前面所说的setuid,setgid,稍后解释)
 
find -perm -mode , 表示mode中转换成二进制的1在文件权限位里面必须匹配,比如mode=644那么转换成二进制为110 100 100,而被查找的文件的权限位也可以被转换成一个二进制数,两者在位上为1的部分必须完全匹配,而0则不管。例如被查找的文件的权限为转换成二进制数是111 111 111那么这个比如被匹配,而假如是100 100 100那么则不会匹配。所以这个'-'的作用归结起来就是匹配比mode权限更充足的文件(找不到什么词语来形容了)
 
find -perm +mode , 与 -mode的区别是+mode只需其中的任意一个1的部分被匹配,-mode是所有1的部分都必须被匹配,同样+mode也不管0位。  www.2cto.com  
 
现在来解释setuid,setgid,setuid权限是用来使其他用户可以“越权”执行你的命令,而本质上的实现就是在权限检查的时候,在进程的的有效UID里面保存了这个其他用户的UID,所以权限得意验证通过(在这里的 /os/201205/130111.html 注释1里面很简单的介绍了一下),这些权限用一个新的3位二进制数表示,有4,2,1三种值,4表示有setuid权限,2表示有setgid权限,1表示有粘着位(t)权限(粘着位权限最典型的例子是/tmp,每个用户可以在里面创建、更新、删除自己创建(文件所属用户是自己)的文件,而不能更改别人的文件)。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值