目录
全局性搜索文件 find
工作模式:沿着文件的参差结构一次向下搜索,找到符合条件的,打印或者是执行相应的操作
语法格式:find 要搜索路径 条件(选项) [动作]
1、基本例子
在/etc目录下,寻找名字为network的文件
[root@base ~]# find /etc/ -name network
/etc/rc.d/init.d/network
/etc/sysconfig/network
/etc/vmware-tools/scripts/vmware/network
一般情况下,查找范围越大,目录层级就越深,查找速度就越慢
[root@base tmp]# mkdir -p
/q/w/e/r/t/y/u/i/o/p/a/s/d/f/g/h/j/k/l/z/x/c/v/b/n/m
[root@base tmp]# touch
/q/w/e/r/t/y/u/i/o/p/a/s/d/f/g/h/j/k/l/z/x/c/v/b/n/m/test.txt
在/目录下,查找名字为test.txt的文件
[root@base tmp]# find / -name test.txt
/tmp/test.txt
/q/w/e/r/t/y/u/i/o/p/a/s/d/f/g/h/j/k/l/z/x/c/v/b/n/m/test.txt
2、按条件查找
1)按照文件名查找
-name 按名字查找 *
-iname 忽略大小写
(通配符:*代表任意字符 ?代表单个字符)
举例:
查找/etc目录下,所有以.conf结尾的文件
find /etc/ -name *.conf
查找/etc/目录下,以.conf结尾,名称是5个字符的
find /etc/ -name ?????.conf
2)按照文件类型查找 -type
举例:查找/var目录下类型为普通文件的文件
find /var -type f
查找系统中类型是套接字的文件
find / -type s
3)按照时间查找
-atime n 以天为单位
-ctime n
-mtime n
一个文件有三个时间:
atime:访问时间
mtime:文件的内容发生变化的时间
ctime:文件的属性发生变化的时间 例如:权限、大小、所有者、所属组等改变
-amin n 以分钟为单位
-cmin n
-mmin n
举例:假如n等于7
搜索最近七天被访问过的所有文件
find . -type f -atime -7
搜索恰好在七天前被访问过的所有文件
find . -type f -atime 7
搜索超过七天内被访问过的所有文件
find . -type f -atime +7
搜索访问时间超过10分钟的所有文件
find . -type f -atime +10
4)按照用户和组查找
-user 用户名
-group 组名
-uid uid
-gid gid
-nouser 孤儿文件 没有所有者的文件
-nogroup 没有所属组的文件
举例:
查找系统中所有者是quota2的文件
find / -user quota2 -type f
查找系统中的孤儿文件
find . -type f -nouser
取反
find / ! -user root -type f
查找系统中所有者不是root或者类型是套接字的文件
find / ! -user root -o -type s
5)按照权限查找 -perm
/222 或者 (用户可写or组可写or其他人可写)二进制中有1的位置,只要满足其中以一位就可
-222 并且 (用户可写and组可写and其他人可写)二进制中有1的位置必须要有1
举例:
前提:
我们先在/下创建一个find文件
[root@localhost ~]# mkdir /find
然后进入目录
[root@localhost ~]# cd /find
[root@localhost find]#
然后在find目录下创建一些文件
[root@localhost find]# touch p{r,w,x}_{1,2,3}
[root@localhost find]# ls
pr_1 pr_2 pr_3 pw_1 pw_2 pw_3 px_1 px_2 px_3
给每一个文件设置不同的权限
[root@localhost find]# chmod 400 pr_1
[root@localhost find]# chmod 440 pr_2
[root@localhost find]# chmod 444 pr_3
[root@localhost find]# chmod 200 pw_1
[root@localhost find]# chmod 220 pw_2
[root@localhost find]# chmod 222 pw_3
[root@localhost find]# chmod 100 px_1
[root@localhost find]# chmod 110 px_2
[root@localhost find]# chmod 111 px_3
查找find目录下,小组权限为可写的文件
[root@localhost find]# ll `find ./ -perm -g=w -type f`
--w--w----. 1 root root 0 4月 27 20:28 ./pw_2
--w--w--w-. 1 root root 0 4月 27 20:28 ./pw_3
查找find目录下,用户可写and组可写and其他人可写的文件
[root@localhost find]# ll `find ./ -perm -222 -type f`
--w--w--w-. 1 root root 0 4月 27 20:28 ./pw_3
查找find目录下,用户可写or组可写or其他人可写的文件
[root@localhost find]# ll `find ./ -perm /222 -type f`
--w-------. 1 root root 0 4月 27 20:28 ./pw_1
--w--w----. 1 root root 0 4月 27 20:28 ./pw_2
--w--w--w-. 1 root root 0 4月 27 20:28 ./pw_3
6)按照文件大小查找 -size
+ 大于
- 小于
直接数字 等于
举例:先清空一下find目录,然后用dd命令然后从、dev/zero目录下备份一些信息到指定文件
[root@localhost find]# rm -rf /find/*
[root@localhost find]# ls
[root@localhost find]# dd if=/dev/zero of=f1M bs=1M count=1
记录了1+0 的读入
记录了1+0 的写出
1048576字节(1.0 MB)已复制,0.00189239 秒,554 MB/秒
[root@localhost find]# dd if=/dev/zero of=f2M bs=1M count=2
记录了2+0 的读入
记录了2+0 的写出
2097152字节(2.1 MB)已复制,0.00268664 秒,781 MB/秒
[root@localhost find]# dd if=/dev/zero of=f3M bs=1M count=3
记录了3+0 的读入
记录了3+0 的写出
3145728字节(3.1 MB)已复制,0.00373378 秒,843 MB/秒
[root@localhost find]# dd if=/dev/zero of=f4M bs=1M count=4
记录了4+0 的读入
记录了4+0 的写出
4194304字节(4.2 MB)已复制,0.043618 秒,96.2 MB/秒
[root@localhost find]# ls
f1M f2M f3M f4M
查找/find目录下,文件大小小于3M的文件
[root@localhost find]# find . -type f -size -3M
./f1M
./f2M
查找/find目录下,文件大小等于3M的文件
[root@localhost find]# find . -type f -size 3M
./f3M
查找/find目录下,文件大小小于3M的文件
[root@localhost find]# find . -type f -size +3M
./f4M
3、动作
-exec 动作 --找到结果之后直接执行动作
-ok动作 --执行动作之前先提示,即需要交互
举例:
查找/find目录下,类型是普通文件的文件 将其移动到/test目录下
[root@localhost find]# find . -type f -exec mv {} /test \;
[root@localhost find]# ls /test/
f1M f2M f3M f4M
查找/test目录下类型为普通文件的文件,对其进行备份,备份文件的后缀名为.bak
[root@localhost find]# find /test/ -type f -exec cp {} {}.bak \;
[root@localhost find]# ls /test/
f1M f1M.bak f2M f2M.bak f3M f3M.bak f4M f4M.bak
删除/test目录下修改时间在一天以内的普通文件
[root@localhost find]# find /test -type f -mtime -1 -exec rm {} \;
[root@localhost find]# ls /test/
[root@localhost find]#
排序:sort
-t 指定字段分隔符
-k 指定第几个字段
-n 按照数字顺序排序
-r 反向排序 reverse
-u 排序后重复行只打印一次 unique
举例: 创建一个文件sort.txt并编辑
[root@localhost ~]# vim sort.txt
[root@localhost ~]# cat sort.txt
b:3
c:2
a:4
e:5
d:1
d:11
对输出内容直接排序,默认按照每行的第一个字符进行排序
[root@localhost ~]# cat sort.txt | sort
a:4
b:3
c:2
d:1
d:11
e:5
对输出内容进行反向排序
[root@localhost ~]# cat sort.txt | sort -r
e:5
d:11
d:1
c:2
b:3
a:4
使用“:”做分隔符,对第二个字段进行排序
[root@localhost ~]# cat sort.txt | sort -t ":" -k 2
d:1
d:11
c:2
b:3
a:4
e:5
使用“:”做分隔符,对第二个字段进行排序,按照数字大小排序
[root@localhost ~]# cat sort.txt | sort -t ":" -k 2 -n
d:1
c:2
b:3
a:4
e:5
d:11
uniq去重,唯一
去除相邻重复行
-c 显示重复的行数
-i 忽略大小写
举例: 创建一个文件num.txt并编辑
[root@localhost ~]# vim num.txt
[root@localhost ~]# cat num.txt
111
222
333
444
555
555
使用uniq时,一般先排序,再去重
[root@localhost ~]# sort num.txt | uniq
111
222
333
444
555
sort num.txt | uniq -c
[root@localhost ~]# sort num.txt | uniq -c
1 111
1 222
1 333
1 444
2 555
扩展小命令:which alias
which 用来查找命令的绝对路径
举例:查找dd命令的绝对路径
which dd
命令的别名:alias
1、查看当前系统中有那先别名(root用户和普通用户的别名可能不一样)
alias
2、设置命令的别名
1)临时
alias vi='vim'
vi /etc、passwd 执行vi的时候,实际上执行的是vim
2)永久,改文件
/root/.bashrc
3)取消别名
unalias vi
vi /etc/passwd 没颜色了