查找双十一的历史日志记录
# / 指定从根目录搜索 -name "关键字"
find / -name "hardware-interface.log2019-11-11.log"
# 输出结果
# /home/admin/hardware-interface/logs/hardware-interface.log2019-11-11.log
# 搜索/home目录下,名称为"erp-api",类型为目录的路径
find /home -type d -name "erp-api"
# 输出结果,可能有多个哦
# /home/admin/erp-api
命令 | 参数解析及解释 |
---|---|
-name filename | 查找名为“filename”的文件 |
将查找到的文件输出到标准输出,默认包含 | |
-perm -755 | 按照权限信息查找,匹配值为755 |
-user gaox | 查找属于“gaox”的文件 |
-nouser | 查无有效属主的文件,即文件的属主在/etc/passwd中不存。(可能被删除) |
-group root | 查找属于root组的文件 |
-nogroup | 查无有效属组的文件,即文件的属组在/etc/groups中不存在 |
-newer file3.txt | 查找更改时间比file3.txt晚,可与! newer结合使用 |
! -newer file.h | 查找更改时间比file.h早。!是单独切隔离的 |
-type d | 查找类型为文件夹 b/d/c/p/l/f—>块设备、目录、字符设备、管道、符号链接、普通文件 |
-maxdepth 1 | 查找深度为1,只列举指定目录内,不再向下一深度搜索 |
-depth | 先查找完本目录在进入子目录查找 |
-path ./doc -prune -o -print | 忽略-path指定的目录下的所有内容,-o -print 把不匹配的输出 |
-size 60017759c | 查找大小为60017759bytes的文件。nx等于,+nx大于,-nx小于。 b(默认)/c/w/k/M/G |
-exec touch -d “00:36” {} \; | 执行指令touch -d “00:36”将文件的修改时间和访达时间改为指定时间;处理每一个匹配到的文件而发起一个相应的进程。与ok不同的是,exec不需要每次让用户确认。 |
-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n #按文件访问时间来查找文件,-n指n天以内,+n指n天以前
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-fstype #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-cpio #对匹配的文件使用cpio命令,将他们备份到磁带设备中
find -name april fprint file 在当前目录下查找以april开始的文件,并把结果输出到file中
find -name ap -o -name may 查找以ap或may开头的文件
find /mnt -name tom.txt -ftype vfat 在/mnt下查找名称为tom.txt且文件系统类型为vfat的文件
find /mnt -name t.txt ! -ftype vfat 在/mnt下查找名称为tom.txt且文件系统类型不为vfat的文件
find /tmp -name wa -type l 在/tmp下查找名为wa开头且类型为符号链接的文件
find /home -mtime -2 在/home下查最近两天内改动过的文件
find /home -atime -1 查1天之内被存取过的文件
find /home -mmin +60 在/home下查60分钟前改动过的文件
find /home -amin +30 查最近30分钟前被存取过的文件
find /home -newer tmp.txt 在/home下查更新时间比tmp.txt近的文件或目录
find /home -anewer tmp.txt 在/home下查存取时间比tmp.txt近的文件或目录
find /home -used -2 列出文件或目录被改动过之后,在2日内被存取过的文件或目录
find /home -user cnscn 列出/home目录内属于用户cnscn的文件或目录
find /home -uid +501 列出/home目录内用户的识别码大于501的文件或目录
find /home -group cnscn 列出/home内组为cnscn的文件或目录
find /home -gid 501 列出/home内组id为501的文件或目录
find /home -nouser 列出/home内不属于本地用户的文件或目录
find /home -nogroup 列出/home内不属于本地组的文件或目录
find /home -name tmp.txt -maxdepth 4 列出/home内的tmp.txt 查时深度最多为3层
find /home -name tmp.txt -mindepth 3 从第2层开始查
find /home -empty 查找大小为0的文件或空目录
find /home -size +512k 查大于512k的文件
find /home -size -512k 查小于512k的文件
find /home -links +2 查硬连接数大于2的文件或目录
find /home -perm 0700 查权限为700的文件或目录
find /tmp -name tmp.txt -exec cat {} /;
find /tmp -name tmp.txt -ok rm {} /;
find / -amin -10 # 查找在系统中最后10分钟访问的文件
find / -atime -2 # 查找在系统中最后48小时访问的文件
find / -empty # 查找在系统中为空的文件或者文件夹
find / -group cat # 查找在系统中属于 groupcat的文件
find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件
find / -mtime -1 #查找在系统中最后24小时里修改过的文件
find / -nouser #查找在系统中属于作废用户的文件
find / -user fred #查找在系统中属于FRED这个用户的文件
-perm
find ./ip/logs/ -perm o=6 | 按照权限信息查找,严格匹配o(其他用户)有读写权限 |
---|---|
find ./ip/logs/ -perm /u=w,g=rw | 查找 |
find ./ip/ -perm -755 | 按照执行权限查找 |
[root@gaox admin]# find -perm /g=r |wc -l
10606
[root@gaox admin]# find -perm -g=r |wc -l
10606
[root@gaox admin]# find -perm g=r |wc -l
0
由此得知/和-的用法貌似没有差异,但肯定是有差异的,详细差异请参考指令帮助:man find
。
-o 逻辑或OR
-a 逻辑与AND
-exec在执行大型任务时常与xargs结合使用,find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。
find -name "file\.*"|xargs -exec touch -d "00:36" {} \;
使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。
# 将系统中所有jpd文件压缩打包
$ find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz
# 查当前目录下的所有普通文件
find . -type f -exec ls -l {} /;
-rw-r—r— 1 root root 34928 2003-02-25 ./conf/httpd.conf
-rw-r—r— 1 root root 12959 2003-02-25 ./conf/magic
-rw-r—r— 1 root root 180 2003-02-25 ./conf.d/README
查当前目录下的所有普通文件,并在-exec选项中使用ls -l命令将它们列出
=================================================
在/ logs目录中查找更改时间在5日以前的文件并删除它们:
$ find logs -type f -mtime +5 -exec -ok rm {} /;
=================================================
查询当天修改过的文件
[root@book class]# find ./ -mtime -1 -type f -exec ls -l {} /;
=================================================
查询文件并询问是否要显示
[root@book class]# find ./ -mtime -1 -type f -ok ls -l {} /;
< ls … ./classDB.inc.php > ? y
-rw-r—r— 1 cnscn cnscn 13709 1月 12 12:22 ./classDB.inc.php
[root@book class]# find ./ -mtime -1 -type f -ok ls -l {} /;
< ls … ./classDB.inc.php > ? n
[root@book class]#
=================================================
查询并交给awk去处理
[root@book class]# who | awk ‘{print $1”/t”$2}’
cnscn pts/0
=================================================
awk—-grep—-sed
[root@book class]# df -k | awk ‘{print $1}’ | grep -v ‘none’ | sed s”///dev////g”
文件系统
sda2
sda1
[root@book class]# df -k | awk ‘{print $1}’ | grep -v ‘none’
文件系统
/dev/sda2
/dev/sda1
1)在/tmp中查找所有的*.h,并在这些文件中查找“SYSCALL_VECTOR”,最后打印出所有包含”SYSCALL_VECTOR”的文件名
A) find /tmp -name “.h” | xargs -n50 grep SYSCALL_VECTOR
B) grep SYSCALL_VECTOR /tmp/.h | cut -d’:’ -f1| uniq > filename
C) find /tmp -name “*.h” -exec grep “SYSCALL_VECTOR” {} /; -print
2)find / -name filename -exec rm -rf {} /;
find / -name filename -ok rm -rf {} /;
3)比如要查找磁盘中大于3M的文件:
find . -size +3000k -exec ls -ld {} ;
4)将find出来的东西拷到另一个地方
find *.c -exec cp ‘{}’ /tmp ‘;’
如果有特殊文件,可以用cpio,也可以用这样的语法:
find dir -name filename -print | cpio -pdv newdir
6)查找2004-11-30 16:36:37时更改过的文件
A=find ./ -name "*php" | ls -l --full-time $A 2>/dev/null | grep "2004-11-30 16:36:37"