本章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 命令格式及选项:

# 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用户有权限查看的所有文件

[root@study ~]# cp /bin/cat /tmp/
[root@study ~]# chmod u+s /tmp/cat 
[root@study ~]# /tmp/cat /etc/issue
CentOS release 6.6 (Final)
Kernel \r on an \m
[root@study ~]# /tmp/cat /etc/redhat-release 
CentOS release 6.6 (Final)


练习2、新建/tmp/test目录,要求 openstack 和docker 用户对其有写权限,且在目录创建的文件的属组都为cloud组;要求每一个用户不能删除别人的文件,但可以编辑

[root@study ~]# mkdir /tmp/test
[root@study ~]# groupadd cloud
[root@study ~]# useradd openstack -g cloud
[root@study ~]# useradd docker -g cloud
[root@study ~]# chown :cloud /tmp/test
[root@study ~]# chmod o+t /tmp/test
[root@study ~]# chmod g+s /tmp/test/
[root@study ~]# 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  取消粘滞位权限