find命令的应用,你find到了吗?
2013-03-10 10:09
330 查看
1、了解find的含义
find: 实时查找 精确 支持众多查找标准 遍历指定目录中的所有文件查找,速度慢; find 查找路径 查找标准 查找到以后的处理动作 查找路径:默认为当前目录(查找路径可省略) 查找标准: 默认为指定路径下的所有文件 处理运作:默认为显示 2、find的匹配标准: -name'FILENAME':对文件名作精确匹配 eg:find /etc -name'passwd' 文件名通配: * :任意长度的任意字符 ?:匹配其前的字符可有可无 []:匹配指定范围内的任意单个字符 eg:find /etc -name'passwd*' 查找以passwd开头的文件 eg:find /etc -name'*passwd' 查找以passwd结尾的文件 eg:find /etc -name'*passwd*' 查找包含passwd字符串的文件 -iname 'FILENAME': 文件名匹配时不区分大小写 -regex PATTERN : 基于正则表达式进行文件匹配 -user USERNAME : 根据属主查找 eg:find /tmp -user student -group GROUPNAME: 根据属组查找 -uid UID:根据UID查找 eg:find /tmp -uid 2003 -gid GID:根据GID查找 -nouser : 查找没有属主的文件 -nogroup : 查找没有属组的文件 -type(根据文件类型查找) f: 普通文件 d: 目录 c:字符设备 b:块设备 l: 链接文件 p: 管道设备 s: 套接字设备 eg:find /tmp -type s -size[+|-](根据文件大小查找) #k: (默认单位是字节) eg:+10k 意思是大于10k -10k 意思是小于10k #M eg:find /etc -size 1M 找到etc下大小为1M的文件(所有小于1M的也会显示) eg:find /etc -size 10k -ls 可显示出文件的大小 #G 3、find的组合条件 -a:与逻辑,要求两个条件同时满足才显示 eg:find /tmp -nouser -a -type d 查找tmp文件下没有属主并且没有目录的文件 eg:find /tmp -nouser -a -type d -ls 查找tmp文件下没有属主并且没有目录的文件个数 -o:或逻辑,满足一个条件即可 eg:find /tmp -nouser -a -type d 查找tmp文件下没有属主或者没有目录的文件 -not:非目录类型的文件 eg:find /tmp -not -type d 查找tmp文件下非目录类型的文件 eg:find ./ -not -user user1 -o -not -type d 查找当前文件下属主不是user1或空目录的文件 eg:find ./ -not \(user user1 -o -not -type d \) 查找当前文件下属主不是user1或空目录的文件 /tmp目录,不是目录,并且还不能套接字类型的文件 /tmp/test目录下,属主不是user1,也不是user2的文件 find /test -not -user user1 -a -not -user user2 find /test -not \ ( -user user1 -o -user -user2 \) 4、根据文件的时间戳查找 -mtime [+|-]#:修改了的时间(单位为天) -ctime [+|-]#:改变的时间 -atime [+|-]#: 访问的时间 eg:-atime 5 ; 离现在刚好在5天访问 -atime +5; 至少5天没访问了 -atime -5; 最近5天内访问了 -mmin [+|-] #: 修改了的时间(单位为分钟) -cmin [+|-] #;改变的时间 -amin [+|-] #: 访问的时间 eg:find ./ -amin -5 最近5分钟之内访问过的文件 eg:find ./ -amin +5 离现在5分钟之前访问过的文件 eg:find ./ -amin 5 离现在刚好5分钟的那一刻访问过的文件 eg:find /tmp -atime +7 离现在至少7天未访问过的文件 eg:find /tmp -atime +30 离现在至少一个月未访问过的文件 -perm MODE:精确匹配(根据文件权限查找) /MODE:任意一位匹配即满足条件 eg:find ./ -perm 644 查找当前文件下为644的文件(直接跟权限作精确匹配) eg:find ./ -perm /644 只要有一位匹配即可(644意为属主是读写644:rw-r--r--) -MODE: 文件权限能完全包含此MODE时才符合条件 eg:find ./ -perm -001 查找其它用户有执行权限 eg:find ./ -perm -022 组有写权限,其他人也有写权限 eg:find ./ -perm /022 组有写权限,或其他人有写权限 eg: find ./ -perm -007 其他用户能读能写能执行 动作: -print:显示 -ls:类似ls-l的形式显示每一个文件的详细 -ok COMMAND {} \; :每一次操作都需要用户确认 eg:find ./ -type d -ok chmod +x {} \; 让他的属主属组都能够执行权限 -exec COMMAND {} \; : eg:find ./ -perm -006 -exec chmod o-w {} \; 把其他用户的写权限去掉 eg:find ./ -perm -020 -exec mv {} {}.new \; 查找到属组有写权限的文件,把他原来的文件名后面加上.new 只要引用文件的文件名就使用{} 找到目录下文件名是以.sh结尾的,所有用户都具有执行权限,把其他用户的权限去掉 find ./ -name"*.sh" -a -perm -111 -exec chmod o-x {} \; xargs 从标准输入接收进来命令并执行 eg:find /etc/ -size +1M | xargs echo {} >> /tmp/etc.largefiles 5、find命令的实例分析 1、查找/var目录下属主为root并且属组为mail的所有文件; find /var -user root -group mail 2、查找/usr目录下不属于root,bin,或student的文件; find /usr -not -user root -a -not -user bin -a -not -user student 或find /usr -not \( -user root -o -user bin -o -user student \) 3、查找/etc目录下最近一周内内容修改过且不属于root及student用户的文件; find /etc -mtime -7 -not \ ( -user root -o -user student \) 或find /etc -mtime -7 -not -user root -a -not -user student 4、查找当前系统上没有属主或属组且最近1天内曾被访问过的文件,并将其属主属组均修改为root; find / \( -nouser -o -nogroup \) -a -atime -1 -exec chown root:root {} \; 5、查找/etc目录下大于1M的文件,并将其文件名写入/tmp/etc.largefiles文件中; find /etc -size +1M >> /tmp/etc.largefiles 6、特殊权限 passwd:s SUID:运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者; chmod u+s FILE chmod u-s FILE 如果FILE本身原来就有执行权限,则SUID显示为s,否则显示为S SGID:运行某程序时,相应进程的属组是程序文件自身的属组,而不是启动者所属的基本组; chmod g+s FILE : 加上这个位 chmod g-s FILE : 减去这个位 develop team,hadoop,hbase,hive /tmp/project/ develop Sticky:在一个公共目录,每个都可以创建文件,删除自己的文件,但不能删除别人的文件; chmod o+t DIR chmod o-t DIR 000:表示没有SUID、SGID、Sticky 001:表示没有SUID、SGID 有Sticky ... 110:表示有SUID、SGID 没有Sticky 111:表示有SUID、SGID、Sticky chmod 1755 /backup/test 表示此文件是Sticky755的文件 chmod 3755 /backup/test 表示此文件是SGID、Sticky755的文件 7、find的高级实例 写一个脚本,显示当前系统上shell为-s指定类型的用户,并统计其用户总数。 -s选项后面跟的参数必须是/etc/shells文件中存在的shell类型,否则不执行 此脚本。另外,此脚本还可以接受--help选项,以显示帮助信息。脚本执行形 如:./showshells.sh -s bash 显示结果形如: BASH,3users,they are: root,redhat,gentoo 脚本内容: #!/bin/bash # if [ $1 == '-s' ]; then (如果参数1等于-s) ! grep "${2}$" /etc/shells &> /dev/null && echo "Invalid shell." && exit 7 ( 如果!grep "${2}$" /etc/shells 执行结果为真则继续执行 echo "Invalid shell.",否则停止执行结果把其内容追加到/dev/null中) elif [ $1 == '--help' ];then (如果参数1等于--help) echo "Usage: showshells.sh -s SHELL | --help"(显示参数1执行后的结果) exit 0 else echo "Unknown Options." (显示未知用户的项) exit 8 fi NUMOFUSER=`grep "${2}$" /etc/passwd | wc -l` (显示用户总数) SHELLUSERS=`grep "${2}$" /etc/passwd | cut -d: -f1` (显示符合条件的用户) SHELLUSERS=`echo $SHELLUSERS | sed 's@[[:space:]]@,@g'`( 显示shell用户并把各个用户数之间的空格换成",") echo -e "$2, $NUMOFUSER users, they are: \n$SHELLUSERS" (显示最终的格式 )
相关文章推荐
- find命令应用exec及xargs
- linux下find命令的应用
- Linux-find命令应用举例-按时间筛选和删除文件
- Find命令基础应用
- tree的使用,显示行号,find命令应用
- linux操作系统中find命令应用技巧
- Linux系统Find命令的三个高级应用
- find命令高级应用
- Linux命令之find命令中的mtime-ctime-atime应用总结
- find命令--Linux命令应用大词典729个命令解读
- 【学习点滴-linux】 find命令浅析及应用
- Linux 系统 Find命令的三个高级应用
- find命令--Linux命令应用大词典729个命令解读
- linux文件查找命令find的应用
- find命令应用详解
- find 命令应用
- ubuntu[linux]下find命令的具体应用
- 《tar命令打包格式及组合find应用原理及误区详解》
- Linux-find命令应用举例-按时间筛选和删除文件
- find命令实战