菜鸟学Linux 第020篇笔记 find命令使用和命令组合条件
grep, egrep, fgrep:文本查找
文件查找命令
locate
find
locate
非实时、模糊匹配 查找是根据全系统文件数据库进行的;
updatedb 手动生成文件数据库(注意有可能需要执行很长时间)
优点速度快
find
通过遍历指定目录中的所有文件完成查找
支持众多查找标准
实时查找、精确、速度慢
命令格式
find 查找路径 查找标准 查找到以后的处理动作
查找路径:默认为当前目录
查找标准:默认为指定路径下的所有文件
处理动作:默认为显示
查找标准:
-name 'filename' 对文件做精确匹配
支持通配:
* 任意长度任意字符
? 匹配任意单个字符
[] 匹配括号内任意单个字符
-iname ‘Filename' 文件名匹配不区分大小写
-regex PATTERN 基于正则表达式进行文件名匹配
-user username 根据文件的属主来查找
-group groupname
-uid User ID
-gid Group ID
-nouser 没有属主的文件
-nogroup 查找没有属组的文件
-type 查找文件类型
f ordinary file
d direcotry
c 字符设备
b block device
l 符号连接
p 管道设备
s 套接字设备
-size #为数字
[+|-]#k 大于或小于#k
[+|-]#M
[+|-]#G
默认单位byte
-mtime 修改
-ctime 改变
-atime 访问
[+|-]#
-mmin 分钟
-cmin 分钟
-amin 分钟
[+|-]#
find /tmp -atime +30
-perm mode 以权限查找
find /tmp/ -perm 644 精确匹配
find /tmp/ -perm /644 只要有一位匹配就显示 或关系
find /tmp/ -perm -644 只要包含就显示 与关系
处理动作:默认为print
-print 显示
-ls 类似ls -l的形式显示每一个文件的详细
-ok command {} \; {}表示匹配到的 操作每次执行需要确认
-exec command {} \; 两个都是将找到文件执行其它动作,即命令(不需要确认)
find -name "*.sh" -a -perm -111 -exec chmod o-x {} \;
小练习:
1、查找/var目录下属主为root并且属组为mail的所有文件。
2、查找/usr目录下不属于root,bin,或student的文件;
3、查找/etc目录下最近一周内内容修改过且不属于root及student用户的文件;
4、查找当前系统上没有属主或属组且最近一天内曾被访问过的文件,
并将其属主属组改为root;
5、查找/etc目录下大于1M的文件,并将其文件名写入/tmp/etc.largefiles文件中
6、查找/etc目录下所有用户都没有写权限的文件,显示出其详细信息;
德·摩根定律
非(P 且 Q) = (非 P) 或 (非 Q)
非(P 或 Q) = (非 P) 且 (非 Q)
Key
1. find /var -user root -a -group mail -a可加可不加
2. find /var -not -user root -o -not -user bin -o -not -user student
find /var -not \( -user root -a -not -user bin -a -not -user student )两种解法
3. find /etc -mtime -7 -not -user root -a -not -user student
find /etc -mtime -7 -not \( -user root -o -user tom \)
4. find / \( -nouser -o -nogroup \) -a -atime -1 -exec chown root:root {} \;
5. find /etc -size +1 >> /tmp/etc.largefiles
6. find /etc -not -perm /222
写命令错误总结:
1、用括号括起来的内容要加转义字符\ 且括号后不可紧跟参数
2、参数前要记得加-
3、要牢记德摩根定律
组合条件查找
-a 与关系
-o 或关系
-not 非
e.g. find /tmp -nouser -a type d -ls
find /tmp/ -nouser -o -type d -ls
find /tmp -not -type d
find /tmp -not -type d -a -not -type s -ls
德·摩根定律
非(P 且 Q) = (非 P) 或 (非 Q)
非(P 或 Q) = (非 P) 且 (非 Q)
测试条件:
整数条件
-le
-lt
-ge
-gt
-eq
-ne
字符测试
==
!=
>
<
-n
-z
文件测试
-e
-f
-d
-r
-w
-x
组合测试条件
-a 与关系
-o 或关系
! 非关系
if [ $# -gt 1 -a $# -le 3]
[ $# -gt 8 -o $# -le 2]
[ $1 == 'Q' -o $1 == 'q' -o $1 == 'quit' -o $1 == 'Quit']
Script 1
求1-100所有偶数和奇数的和.
Key 1
#!/bin/bash
#
declare -i EVENSUM=0
declare -i ODDSUM=0
for I in {1..100}; do
if [ $[$I%2] -eq 0 ]; then
EVENSUM+=$I
else
ODDSUM+=$I
fi
done
echo "odd=$ODDSUM even=$EVENSUM"
本文转自Winthcloud博客51CTO博客 ,原文链接http://blog.51cto.com/winthcloud/1865713如需转载请自行联系原作者
Winthcloud