Linux 下 find 查找命令详解 && 黏滞位

来源:互联网 发布:swatch黑白时分淘宝 编辑:程序博客网 时间:2024/05/17 02:26

Linux---find

一、略讲解 find 指令(非常重要)
   Linux 下 find 命令在目录结构中搜索文件,并执行指定的操作。Linux 下 find 命令提供了很多的查找条件,功能很强大。由于 find 具有强大的功能,所以他的选项也很多,大部分选项都很重要。即使系统中含有网络文件系统(NFS),find 命令在该系统中同样有效,只要你具有相应的权限。在运行一个非常消耗资源的 find 命令时,很多人都倾向于把他放在后台执行,因为遍历一个的文件系统可能要花费很长时间(这里是指30G字节以上的文件系统)。
二、命令格式
find  pathname(路径名称)  -option[-print -exec -ok ...](各种选项)
三、命令功能
  用于在文件树中查找文件,并做出相应的处理(可能访问磁盘)
四、命令参数(重点之重)
  a. pathname:find 命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统更目录。
b.-print:find命令将匹配的文件输出到标准输出。
c.-exec:find命令对匹配的文件执行该参数所给出的shell 命令。相应命令形式为‘command’ {} \; 注意{}和\;之间的空格。
d.-ok:和-exec的作用相同,只不过以一种更安全的模式来执行改参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
五、命令选项(重中之重)
1.-name  按照文件名查找文件

2.-perm   按照文件权限来查找文件

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



4.-user按照文件所属主(user name)来查找文件。

5.-group按照文件的所属组来查找文件。


6.-mtime -n +n按照文件的更改时间来查找文件,-n表示文件更改时间据现在n天以内+n 表示文件更改时间距现在n天以前。find 命令还有 -atime 和 -ctime 选项,但他们都和-mtime 选项相同
注解:
 mtime(Modify time) :最后一次修改文件(内容) 或目录的时间
 atime(Access time):最后一次访问文件或目录的时间
 ctime(Change time):最后一次改变文件或目录(改变的是原数据即:属性)的时间;eg:记录该文件的inode 节点被修改的时间。touch命令除了-d和-t选项外都会改变该时间,而且chmod ,chown ,chgrp等命令也能改变该值
希望在系统根目录下查找更改时间在5日以内的文件,可以用:
find / -mtime -5 -print
为了在/var/adm目录下查找更改时间在3日以前的文件,可以用:
find /var/adm -mtime +3 -print





7.-nogroup查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nogroup

-group

8.-nouser查找无有效属主的文件,即该文件的属主在/ect/passwd 中不存在。
-nouser

-user

9.-newer test3-13.c ! -newer test3-24.c查找更改时间比文件test3-13.c新但是比文件test3-24.c旧的文件。

a、查找更新时间比文件 code新的文件
b、查找更新时间比文件 code新的文件

10.-type查找某一类型的文件,诸如:
a、b - 块设备文件
b、d - 目录
c、c - 字符设备文件
d、p - 管道文件
e、l - 符号链接文件
f、f - 普通文件
eg1:在当前目录下查找所有的非目录文件(!d) 
find ~/ ! -type d -exec ls -l {} \;



eg2:在当前目录下查找所有的目录文件(d) 
find ~/  -type d -exec ls -l {} \;


eg3:在当前目录下查找所有的普通文件(f)
find ~/  -type f -exec ls -l {} \;


11.-size n: [c]查找文件长度为n块的文件,带有c时表示文件长度以字节计。


12.-depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。

13.-fstype 查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
find /etc/fstab -fstype  -exec  ls -l {}  \;
14.-mount 在查找文件时不跨越文件系统mount点。

15.-follow 如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
16.-cpio 对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。


黏滞位
linux下每一个文件和目录都有自己的访问权限,访问权限确定了用户能否访问文件或者目录和怎样进行访问。最为我们熟知的一个文件或目录可能拥有三种权限,分别是读、写、和执行操作,在这里不做详细说明。我们创建一个文件后系统会默认地赋予所有者读和写权限。当然我们也可以自己修改它,添加自己需要的权限。特殊权限:但是这三种权限就足够了吗?我们现在来说说在linux下的另一个特殊权限。首先我们来看看在根目录下的一个目录tmp,可以看到tmp目录的other权限是'rwt',那么这里的t又是什么权限呢,有什么意义粘滞位(Sticky bit),或着位,是Unix文件系统权限的一个旗标。最常见的用法在目录上设置粘滞位,如此以来,只有目录内文件的所有者或者root才可以删除或移动该文件。如果不为目录设置粘滞位,任何具有该目录写和执行权限的用户都可以删除和移动其中的文件。实际应用中,粘滞位一般用于/tmp目录,以防止普通用户删除或移动其他用户的文件。
比如我们进行下面的操作:
首先我们需要(用su 命令并输入密码)切换到root用户底下,在里边创建一个tmp目录(mkdir命令)并赋予tmp 777权限。下来查看tmp的默认权限(ls/ll -dl tmp)


我们可以看到此时的权限为.x,设置完之后应为.t(也可以通过建文件看其在普通用户底下是否可以成功删除,若可以则没有粘滞位权限,若不可以则有)(#以root用户的身份在tmp目录中创建文件ab,并查看其默认权限。

[root@xxxx ~]# touch /tmp/ab.txt  

#以普通用户xxxx的身份登录系统,可以删除 /tmp/ab.txt

[xxxx@localhost ~]$ rm /tmp/ab

rm:是否删除有写保护的普通空文件 "/tmp/ab"?y

通过上面的操作可以发现,虽然普通用户对文件/tmp/ab.txt只具备“r--”权限,但因为从/tmp目录获得了“rwx”权限,因而仍然可以将/tmp/ab删除。)



在Linux系统中比较典型的例子就是“/tmp”、“/var/tmp”目录。这两个目录作为Linux系统的临时文件夹,权限为“rwxrwxrwx”,即允许任意用户、任意程序在该目录中进行创建、删除、移动文件或子目录等操作。然而试想一下,若任意一个普通用户都能够删除系统服务运行中使用的临时文件,将造成什么结果?

粘滞位权限便是针对此种情况设置,当目录被设置了粘滞位权限以后,即便用户对该目录有写入权限,也不能删除该目录中其他用户的文件数据,而是只有该文件的所有者和root用户才有权将其删除设置了粘滞位之后,正好可以保持一种动态的平衡:允许各用户在目录中任意写入、删除数据,但是禁止随意删除其他用户的数据

(需要注意的是,粘滞位权限只能针对目录设置,对于文件无效)

以下我们进行粘滞位的设置

粘滞位权限都是针对其他用户(other)设置,使用chmod命令设置目录权限时,“o+t”、“o-t”权限模式可分别用于添加、移除粘滞位权限。



我们可以看到此时的权限为已经由.x变为.t

此时如果你在tmp目录底下创建一个文件ab.txt,切换到普通用户环境底下,再一次

进行删除,我们发现此时已经无法删除该文件


说明我们已经设置成功了

关于粘滞位的取消命令(chmod o-t tmp),取消完成之后就和初始状态一样。

         











0 0
原创粉丝点击