首页 > 代码库 > 7.3 文件查找
7.3 文件查找
7.3
测试:
整数测试
-le -lt
字符测试
== != > < -n -z(字符测试,开始说-s,错了)
文件测试
-e -f
if [ $# -gt 1 ];then
组合测试条件
-a 与关系
-o 或关系
! 非关系
if [ $# -gt 1 -a $# -le 3 ]
if [ $# -gt 1 ] && [ $# -le 3 ]
q,Q,quit,Quit
#!/bin/bash
#
if [ $1 == ‘q‘ -o $1 == ‘quit‘ -o $1 == ‘Q‘ -o $1 == ‘Quit‘ ];then
echo "Quiting..."
exit 0
else
echo "Unkown Argument"
exit 1
fi
写一个脚本:
计算100以内所有奇数和以及所有偶数的和:分别显示之:
#!/bin/bash
#
declare -i EVENSUM=0
declare -i ODDSUM=0
for I in (1..100);do
if [ $[$I%/2] -eq 0 ];then
let EVENSUM+=$I
else
let ODDSUM+=$I
fi
done
echo "Odd sum is:$ODDSUM,Even sum is:$EVENSUM."
let I=$[$I+1]
SUM=$[$SUM+$I]
let SUM+=$I
let I+=1 相当于I++
-=
let I-=1 相当于 let I--
++I --I
*=
/=
%=
grep egrep fgrep:文本查找
文件查找
locate:(用的不多)
非实时,模糊匹配,查找是根据全系统文件数据库进行的
# updatedb,手动生成文件数据库
速度快
find:
实时
精确
支持众多查找标准
遍历指定目录中的所有文件完成查找,速度慢
find 查找路径 查找标准 查找到以后的处理动作
查找路径,默认为当前目录
查找标准:默认为指定路径下的所有文件
处理动作:默认为显示
匹配标准:
-name ‘FILENAME‘,对文件名做精确匹配
文件名通配
*:任意长度的任意字符
?:
[] find /etc -name ‘passwd‘
-iname ‘FILENAME‘ :文件名匹配时不区分大小写
-regex PATTERN 基于正则表达式进行文件名匹配
-user USERNAME:根据属主查找
-group GROUPNAME:根据属组查找
-uid UID:根据UID查找
-gid GID:根据GID查找
若是用户被删除了,根据属主查找是找不到的,需要根据UID查找,
原来属于此用户的文件属主直接是ID号
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件
-type
f:普通文件
d:
c:
b:
l:
p:
s:
find /etc -type d
-size [+|-] +大于 -小于 不加[+|-]等于或小于
#k
#M
#G
find /etc -size 10k -ls(显示文件大小)
组合条件:(默认-a)
-a 与条件
-o 或条件
-not
时间戳:
-mtime
-ctime
-atime
[+|-]# 多少天
-mmin
-cmin
-amin
[+|-]# 多少分钟
根据权限查找
-perm
mode 精确匹配
-mode 每一位都必须匹配,文件权限能完全包含此mode时才能显示
+mode(废弃)
/mode 有一个匹配,任意一位匹配即满足条件
find ./ -perm 644
find ./ -perm -001 查找其他用户有执行权限的
动作:
-print:显示
-ls:类似ls -l的形式显示每一个文件的详细信息
-ok COMMAND {} \; {}文件名称占位符 每一次操作都需要用户确认
-exec COMMAND {} \; 不需要用户确认
find ./ -perm -006 -exec chmod 0-w {} \;
find ./ -type d -ok +x {} \;
find /tmp -nouser -a -type d ls
find /tmp -not -type -d
find ./ -perm -020 -exec mv {} {}.new \;
find ./ -name "*.sh" -a -perm -111 -exec chmod o-x {} \;
/tmp目录,不是目录,并且还不能是套接字类型的文件
find /tmp -not -type d -a -not -type s -a -type f
/tmp/test目录下,属主不是user1,也不是user2的文件
find ./ -not -user user2 -a -not -user user2
find ./ -not \( -user user1 -a -user user2 \)
find ./ -not \(-user user1 -a -type d\)
练习:
1 查找/var目录下属主为root并且属组为mail的所有文件
find /var -user root -group mail
2 查找/usr目录下不属于root,bin,或student的文件
find /usr -not -user \(root | bin | student\) 错误
find /usr -not -user root -a -not -user bin -a -not user studnet 对
find /usr -not \(-user root -o -user bin -o -user student\)对
3 查找/etc目录下最近一周内内容修改过且不属于root及student
用户的文件
find /etc -mtime 7 -a -not -user root -a -not -user student
find /etc -mtime -7 -a -not \( -user root -o -user student \)
4 查找当前系统上没有属主或属组且最近1天内曾被访问过的文件,
并且将其属主属组均修改为root
find / \( -nouser -o -nogroup \) -a -atime -1 -exec chpwn root:root {} \;
5 查找/etc目录下大于1M的文件,并将其文件名写入
/tmp/etc.largefiles文件中
find /etc -size +1M >> /tmp/etc.largefiles
6 查找/etc目录下所有用户都没有写权限的文件,显示出其详细信息
find /etc -not -perm /222 -ls
7.3 文件查找