Linux学习命令汇总八——文件查找命令find选项及使用技巧
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习命令汇总八——文件查找命令find选项及使用技巧相关的知识,希望对你有一定的参考价值。
本章Blog相关Linux知识点
find与grep的不同点:
find为文件搜索命令——用来在指定目录下查找文件,而grep 为文本搜索命令——根据用户指定的文本模式对目标文件进行逐步搜索,显示能够被匹配的行 ;
find选项支持文件通配符,而grep选线支持正则表达式 ;
find查找为精确查找,精确匹配但搜索速度稍慢。
grep命令选项及正则表达式类型,详细请参考前文“Linux学习命令汇总三——Linux用户组管理,文件权限管理,文本搜索命令grep及正则表达式”
bash特性之文件通配符,详细请参考前文“Linux学习命令汇总四——Bash中变量.文件通配符.管道与重定向.算术运算及循环或判断语句”
find path -option [ -print ] [ -exec -ok command ] {} \;
path:查找路径,默认为当前目录
option:查找条件,默认为当前目录中的所有文件
[print] 或 [exec] :查找动作,默认为显示
find命令相关选项
find path -option [ -print ] [ -exec -ok command ] {} \;
[option]:
-name “文件名称”:支持文件通配符 例: # find / -name httpd.conf 查找/ 目录中名称为httpd.conf 的文件
-iname “文件名称”:查找时不区分文件名称大小写
-user UserName :根据属主查找 # find /ftp -user hadoop 查找/ftp目录中用户为hadoop的文件
-group GroupName :根据属组查找
-uid UID :根据属主id号查找
-gid GID :根据属组gid号查找
-nouser :查找无属主的文件 # find /ftp -nouser
-nogroup :查找无属组的文件
-type { f | d | l | p | s | b | c } :根据类型查找 例: # find /etc -type d 查找/etc/目录下类型为目录的文件并显示
-size [+|-] n[K|M|G] :根据文件大小查找 例:# find /var -size +2M
-atime [+|-] n:根据时间查找 [超过|少于] n天的被访问(access)的文件
-mtime [+|-] n:根据时间查找 [超过|少于] n天的被修改(modify)的文件
-ctime [+|-] n:根据时间查找 [超过|少于] n天的被改变(change)的文件
-amin -mmin -cmin : 使用方式与 -atime -mtime -ctime 相似
-perm [+|-] mode :
-perm 755 :表示严格匹配,也就是你的文件权限位转换成对应的十进制数字与mode一模一样,那么匹配成功 。
-perm - [mode] :表示mode中转换成二进制是1的二级制位在文件权限位里面必须匹配 。例: #find /var -perm -355 , 查找的权限355 转换成二进制位011 101 101 ,判断文件权限转换成二级制为1的二进制位是否与权限中为1的二进制位相同 ,是0的位不管,满足则匹配,不满足则不匹配;如文件权限为111 101 111 ,011 111 101 等文件均可被匹配 ,而001 101 101 则不会被匹配 ,因为文件权限中第二个二进制位与查找的mode 第二位二进制为1的位不同。
find -perm +mode : 与 -mode的区别是+mode只需其中的任意一个1的二进制位部分被匹配,+mode也不管0位。例: #find /var -perm +355 , 查找的权限355 转换成二进制位011 101 101 ,如文件权限001 001 001 的文件可被匹配 ,而100 010 010 不会被匹配 ,因为无任何一个二进制位被匹配
处理动作:
-print :打印在标准输出上
-exec COMMAND {} \; 对查找到的文件执行指定的命令
-ok COMMAND {} \; 交互式的-exec
例: #find /tmp -perm -003 -exec ls -ld {} \;
组合条件:
-a :与,代表条件需同时满足,可省略
-o :或,代表条件满足一个即可
-not 或 ! : 非,取反
例:# find /usr/ -not -user root -a -not -user bin -a -not -user hadoop 查找目录/usr/ 中属主不是root或bin或hadoop的文件
例:#
find /var/ -user root -group mail 查找/var目录中属主不是root且属组不是mail的文件
安全上下文
进程访问文件时的权限匹配机制:进程的属主,是否与文件的属主相同:如果相同,进程则以文件的属主属性运行;否则,进程的属主所属的组,是否其中之一与文件的属组相同;如果相同,进程则以文件的属组的权限运行;否则,进程则以文件的其他用户的权限来访问文件。
进程属主——进程的发起者
进程的属组——通常为进程的属主的基本组
文件权限:-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd
suid——可执行文件,任何用户执行此可执行程序时,不在以用户自己的身份当作进程的属主,而是以文件的属主当作进程的属主
sgid——具有sgid的目录,用户在此目录下创建文件时,新建文件的属组不在是用户的所属的基本组,而是目录的属组
sticky——粘滞位,对于公共可写的目录,用户可创建文件,可以删除自己的文件,但无法删除其他用户的文件
修改权限:
# chmod u+s file 设置文件suid权限
# chmod u-s file 取消文件suid权限
# chmod g+s directory 设置目录sgid权限
# chmod g-s directory 取消目录sgid权限
# chmod o+t directory 设置粘滞位权限
# chmod o-t directory 取消粘滞位权限
练习1:复制cat 命令至/tmp 目录,普通用户使用/tmp/cat命令能查看root用户有权限查看的所有文件
[[email protected] ~]# cp /bin/cat /tmp/ [[email protected] ~]# chmod u+s /tmp/cat [[email protected] ~]# /tmp/cat /etc/issue CentOS release 6.6 (Final) Kernel \r on an \m [[email protected] ~]# /tmp/cat /etc/redhat-release CentOS release 6.6 (Final)
练习2、新建/tmp/test目录,要求 openstack 和docker 用户对其有写权限,且在目录创建的文件的属组都为cloud组;要求每一个用户不能删除别人的文件,但可以编辑
[[email protected] ~]# mkdir /tmp/test [[email protected] ~]# groupadd cloud [[email protected] ~]# useradd openstack -g cloud [[email protected] ~]# useradd docker -g cloud [[email protected] ~]# chown :cloud /tmp/test [[email protected] ~]# chmod o+t /tmp/test [[email protected] ~]# chmod g+s /tmp/test/ [[email protected] ~]# ls -ld /tmp/test drwxr-sr-t. 2 root cloud 4096 Mar 14 10:22 /tmp/test
本章知识点汇总
#find path -option [ -print ] [ -exec -ok command ] {} \;
[option]:
-name “文件名称”:支持文件通配符,查找匹配文件名的文件
-iname “文件名称”:查找时不区分文件名称大小写
-user UserName :根据属主查找
-group GroupName :根据属组查找
-uid UID :根据属主id号查找
-gid GID :根据属组gid号查找
-nouser :查找无属主的文件 # find /ftp -nouser
-nogroup :查找无属组的文件
-type { f | d | l | p | s | b | c } :根据类型查找 例: # find /etc -type d 查找/etc/目录下类型为目录的文件并显示
-size [+|-] n[K|M|G] :根据文件大小查找 例:# find /var -size +2M
-atime [+|-] n:根据时间查找 [超过|少于] n天的被访问(access)的文件
-mtime [+|-] n:根据时间查找 [超过|少于] n天的被修改(modify)的文件
-ctime [+|-] n:根据时间查找 [超过|少于] n天的被改变(change)的文件
-amin -mmin -cmin : 使用方式与 -atime -mtime -ctime 相似
-perm [+|-] mode :
# chmod u+s file 设置文件suid权限
# chmod u-s file 取消文件suid权限
# chmod g+s directory 设置目录sgid权限
# chmod g-s directory 取消目录sgid权限
# chmod o+t directory 设置粘滞位权限
# chmod o-t directory 取消粘滞位权限
以上是关于Linux学习命令汇总八——文件查找命令find选项及使用技巧的主要内容,如果未能解决你的问题,请参考以下文章