1. 文件查找 
  2. locate; 
  3.       1、非实时,模糊匹配,查找是根据全系统文件数据库进行的; 
  4.       2、# updatedb, 手动生成文件数据库 
  5.       3、优势:速度快 
  6.          
  7. find; 
  8.      1、实时查找 
  9.      2、精确 
  10.      3、支持众多查找标准 
  11.      4、遍历指定目录中的所有文件完全查找,速度慢; 
  12.       
  13. find 查找路径 、 查找标准 、查找以后的处理运作 
  14.     查找路径:默认为当前目录 
  15.     查找标准:默认为指定路径下的所有文件 
  16.     处理运作:默认为显示 
  17. 匹配标准; 
  18.      -name ‘FILENAME’:对文件名做精确查找 
  19.         文件名通配; 
  20.             ×:任意长度的任意字符。   
  21.                          例如;find /etc -name passwd*  
  22.                                  可以查找到/etc/passwd文件中的passwd开头后面跟着任意字符串的文件。 
  23.                                   结果出现的形式如:  /etc/passwd.OLD      /etc/pam.d/passwd       /etc/passwd-     /etc/passwd    
  24.                                  
  25.            ?:匹配任意单个字符    
  26.                            例如:1、find /etc -name ?passwd  
  27.                                    可以查找到/etc/passwd文件中的passwd开头为任意一个字符的文件。 
  28.                                    结果出现的形式如:/etc/security/opasswd 
  29.                                  2、find /etc -name passwd? 
  30.                                    可以查找到/etc/passwd文件中的passwd结尾为任意一个字符的文件。 
  31.                                    结果出现的形式如:/etc/passwd- 
  32.           []:匹配指定范围内的任意单个字符。 
  33.                            例如:find /etc -name [a-z]passwd 
  34.                                     可以查找/etc/passwd文件中的passwd开头为任意一个小写字母的文件 
  35.                                     结果出现的形式如:/etc/security/opasswd 
  36.     -iname 'FILENAME':文件名匹配时不区分大小写 
  37.            例如: 查找目录a下的文件是w ,W.(先在目录a下面创建一个文件w,W) 
  38.                    find /a -iname w  
  39.                    查找结果如:/a/W   /a/w 
  40.               
  41.     -user USERNAME:根据属主查找 
  42.            例如:查找tmp下的属主为student的文件 
  43.                    find /tmp -user student  
  44.                    查找结果如:/tmp/passwd       /tmp/root.inittab.2 
  45.                     
  46.     -group GROUPNAME:根据属组查找 
  47.            例如:查找tmp下的属组为student的文件  
  48.                    find /tmp -group student 
  49.                    查找结果如:/tmp/passwd      /tmp/root.inittab.2 
  50.                     
  51.     -uid UID :根据UID查找 
  52.            例如:find /tmp -uid  n(是UID) 
  53.             
  54.     -gid GID : 根据GID查找 
  55.            例如:find /tmp -gid  n(是GID) 
  56.             
  57.     -nouser:查找没有属主的文件 
  58.            例如:find /etc -nouser 
  59.             
  60.     -nogroup:查找没有属组的文件 
  61.            例如:find /etc -nogroup 
  62.             
  63.     -type 
  64.         f: 普通文件 
  65.             例如: find /tmp/ -type f 
  66.         d: 目录文件 
  67.             例如:find /etc/ -type d 
  68.         c:字符设备文件 
  69.         l:符号链接文件 
  70.         p:命令管道文件 
  71.         s:套接字文件 
  72.          
  73.     -regex PATTERN:基于正则表达式进行文件名匹配    
  74.          
  75.     -size 根据大小查找(默认单位为字节)      
  76.         [ +|-] #k  例如 +10k就是大于10k 
  77.                         -10k就是小于10k              
  78.                     例如 :find /etc  -size 10k     
  79.                          查找10k的认为小于1k以内的都为1k(如:9.1K、9.8K都算)  
  80.                #M(同#K) 
  81.                #G(同#G)_ 
  82.  
  83. 组合条件: 
  84.         -a:  与(其次)  
  85.           例如:查找一个不是目录文件但是是普通文件 
  86.                 find /tmp -not -type d -a -type f 
  87.         -o:  或        
  88.           例如:查找目录/tmp下目录文件或是普通文件 
  89.                find /tmp -type d -o -type f  
  90.       -not:  非(优先级最高)    
  91.           例如:查找非目录文件 
  92.                find /tmp -not -type d  
  93.       -mtime :被修改的时间(单位:天) 
  94.           例如:查找5天之内修改过的文件 
  95.                find /tmp -mtime -5 
  96.       -ctime :改变的时间   (单位:天) 
  97.           例如:查找5天前给变过的文件 
  98.                find /tmp -ctime +5 
  99.       -atime :访问的时间(单位:天)  
  100.           例如:查找30天之内访问过的文件 
  101.                find /tmp -atime -30   
  102.           [+|-]#  :+ 指至少5天没访问过 
  103.                    - 指5天之内曾经访问过 
  104.       -mmin:被修改时间  (单位是分钟) 
  105.       -cmin:改变时间 
  106.       -amin:访问时间       
  107.           例如: 查找5分钟之内访问过的文件 
  108.                find ./ -amin -5 
  109.       -perm MODE :根据文件权限来查找              
  110.            /MODE: 任意一位匹配既满足条件 
  111.           例如:查看当前目录下只要有一位权限匹配的就行 
  112.                find ./ -perm /644  
  113.            -MODE: 精确匹配 。文件权限能够完全包含此MODE才符合条件。例如查找其他用户有执行权限的 。 
  114.           例如:查找当前目录下权限为rw_r__r__(属主为读写不执行、属组为读不写不执行、其它为读不写不执行)的文件  
  115.               find ./ -perm  -644(644是指rw_r__r__ )  
  116.               【当你用此命令的时候发现有很多文件,但是当你用ls 查看时文件并不是你想想的那么多,这时候你就会怀疑此 
  117.                 命令是错误的,不要怀疑,因为有很多符合的隐藏文件也显示了出来。你可以用ls -l -a的命令查看就知道了。】 
  118.    
  119.   运动:        
  120.     -print:显示(默认) 
  121.     -ls;类似ls -l的形式显示每一个文件的详细     
  122.     -ok COMMAND {}(大括号文件名称占位符) \;(结尾必须是\;):每一次操作都需要确认 
  123.          例如:找到类型是目录的文件把它的属主属组都改为能执行的权限;  
  124.          find ./ -type d -ok chmod +x {} \; 
  125.          【每一个更改的权限的文件它都会提示一下是否要更改。回答y就会更改(如:< chmod ... ./ > ?)。】 
  126.     -exec COMMAND {} \;不需要确认                               
  127.          例如:找到当前目录下只要其它用户有读写权限,并且将其改为读权限 
  128.          find ./ -perm -006 -exec chmod o-w {} \;  
  129.          例如:把权限是020的文件名字改为原来名字.new   
  130.               find ./ -perm -020 -exec mv {} {}.new \;                                       
  131.     -xargs:从标准输入接受进来命令并执行                        
  132.             例如:在目录etc下的大于1M的文件追加到/tmp/etc.largefiles中去 
  133.                   1.用—exec写:find /etc -size +1M -exec echo {} >> /tmp/etc.largefiles \;  
  134.                   2.用-xargs写:find /etc -size +1M | xargs echo {} >> /tmp/etc.largefiles   
  135.             【然后用cat /tmp/etc.largefiles查看。记号:用-xargs显示的结果可不像用-exec显示的结果 
  136.                       -xargs显示的结果是不是一个一行,而是中间用空格隔开的一行文本。】 
  137. 特殊权限 
  138.  passwd : s【passwd有个特殊权限是s】 
  139.  
  140. SUID:运行某程序时,相应进程的属主程序文件自身的属主,而不是启动者 
  141.   chmod u+s FILE 
  142.   chmod u-s FILE 
  143.    如果FILE本身原来就有执行权限,则SUID显示为s,否则显示S 
  144.      例如:我们开始时用# ls -l /bin/cat时显示 
  145.            -rwxr-xr-x 1 root root 23260 May 11  2011 /bin/cat  
  146.            我们再用# ls -l /etc/shadow查看是显示 
  147.            -r-------- 1 root root 1154 Feb 27 17:48 /etc/shadow 
  148.            我们再用其它用户$ cat /etc/shadow切进去看看,发现无法查看,显示【没有权限】 
  149.            cat: /etc/shadow: Permission denied 
  150.     解决方案: 如果我们用chmod u+s /bin/cat时,我们再用ls -l /bin/cat查看, 
  151.              -rwsr-xr-x 1 root root 23260 May 11  2011 /bin/cat 
  152.             【我们发现第一次查看的跟这一次有不同地方,不同地方在属主的执行权限上,原来的x变成了s,让用户有了管理员的权限。有什么改变继续往下看】 
  153.              有很多人又用ls -l /etc/shadow查看显示的和第一次查看的权限一样,就认为失败了。不是这样的,我们可以在切换用户 
  154.              去看看,$ cat /etc/shadow 这时候,我们发现已经可以查看/etc/shadow文件了 
  155.               
  156. SGID:运行某程序时,相应进程的属组程序文件自身的属组,而不是启动者所属的基本组 
  157.      chmod g+s FILE 
  158.      chmod g-s FILE 
  159.       例如: 有一个开发小组 develop team中有三个用户分别是hadoop ,hbase,hive  
  160.               我们期望这三个用户在/etc/project/目录下都能创建文件创建,这三个用户创建的是一个项目,所以其中一个人写的文件其它两个人也可以看到 
  161.               也可以编辑,怎么实现? 
  162.         思考:这里我们可以让这三个用户属于同一个基本组,不能是附加组,为什么? 
  163.              因为每个用户创建的文件的属主是自己,属组就是基本组而不是附加组。所以我们让组有写权限,并不意味着别人都能写。 
  164.               我们可以这样说hadoop的基本组是hadoop,创建了一个附加组是develop,而hadoop用户在这里创建的任何一个文件其属主都是hadoop,属组是hadoop, 
  165.               而不是develop组。(更何况用户创建的文件属组也未必有写权限) 
  166.       解决方案:1、首先加一个组是developteam , groupadd developteam 
  167.                 2、然后把目录/etc/project的属组改为developteam,  chown -R :developteam /etc/project 
  168.                 3、让后把三个用户的附加组都改为developteam这个组  usermod -a -G developteam hadoop/hbase/hive  【不确定还可以验证一下 id hadoop/hbase/hive】 
  169.                 4、查看当前目录 ls -ld 显示 :drwxr-xr-x 2 root developteam 4096 Feb 27 21:03 .   【可以看出属组没有写权限,属主是root,hadoop是不能在这里创建文件】 
  170.                 5、让属组有写权限 chmod g+w /etc/project   
  171.                 6、切换到project里面,然后创建(touch a.A)一个文件a.A: -rw-rw-r-- 1 hadoop hadoop 0 Feb 27 21:22 a.A 从这里可以看出已经有了写权限 
  172.                 7、设置一个GID权限 chmod g+s /etc/project 然后在查看(ls -ld /etc/project)一下 
  173.                    drwxrwsr-x 2 root developteam 4096 Feb 27 21:22 /etc/project【可以看到属组上的执行权限已经变成s了】 
  174.                 8、然后用三个用户分别创建,而最后的的属组就是developteam 
  175.  Sticky:在一个公共目录,每个人都能创建文件,删除自己的文件,但不能删除别人的文件                                 
  176.          chmod o+t DIR  
  177.          chmod o-t  DIR 
  178.                可以这样设置chmod o+t /etc/project 
  179.                然后查看drwxrwsr-t 2 root developteam 4096 Feb 27 21:22 /etc/project 
  180.                这样每个人只能删除自己的目录,而不能删除别人的目录了。 
  181.  
  182. find练习题: 
  183.     
  184. 1、查找/var目录下属主为root并且属组为mail的所有文件; 
  185. find /var -user root -group mail 
  186.  
  187. 2、查找/usr目录下不属于root,bin,或student的文件; 
  188. find /usr -not -user root -a -not -user bin -a -not -user student 
  189. find /usr -not \( -user root -o -user bin -o -user student \) 
  190.  
  191. 3、查找/etc目录下最近一周内内容修改过且不属于root及student用户的文件; 
  192. find /etc -mtime -7 -not \ ( -user root -o -user student \) 
  193. find /etc -mtime -7 -not -user root -a -not -user student 
  194.  
  195. 4、查找当前系统上没有属主或属组且最近1天内曾被访问过的文件,并将其属主属组均修改为root; 
  196. find / \( -nouser -o -nogroup \) -a -atime -1 -exec chown root:root {} \;  
  197.  
  198. 5、查找/etc目录下大于1M的文件,并将其文件名写入/tmp/etc.largefiles文件中; 
  199. find /etc -size +1M >> /tmp/etc.largefiles 
  200.  
  201. 6、查找/etc目录下所有用户都没有写权限的文件,显示出其详细信息; 
  202. find /etc -not -perm /222 -ls