Linux-查找-find-whereis-which
作者:互联网
3.文件管理
本章同步视频:https://edu.51cto.com/sd/e4874
3.4 文件查找
3.4.1 命令查找
1.which - shows the full path of (shell) commands
which 命令用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录, which 命令会在环境变量$PATH 设置的目录里查找符合条件的文件。也就是说,使用which命令就可以看到某个系统指令是否存在,以及执行的命令位置。
[root@localhost tmp]# which date #列出找到的第一个结果
[root@localhost tmp]# which -a date #列出全部结果
3.4.2 文档查找
1.whereis - locate the binary, source, and manual page files for
[root@localhost tmp]# whereis date
date: /usr/bin/date /usr/share/man/man1/date.1.gz /usr/share/man/man1p/date.1p.gz
[root@localhost tmp]# whereis -l #显示whereis查找的位置
[root@localhost tmp]# whereis -b date #只显示二进制文件
[root@localhost tmp]# whereis -m date #只显示帮助文档
date: /usr/share/man/man1/date.1.gz /usr/share/man/man1p/date.1p.gz
locate(locate) 命令用来查找文件或目录。 locate命令要比find快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/mlocate/mlocate.db 。这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。整个locate工作其实是由四部分组成的:
l /usr/bin/updatedb 主要用来更新数据库,通过crontab自动完成的
l /etc/updatedb.conf updatedb的配置文件
l /var/lib/mlocate/mlocate.db 存放文件信息的文件
[root@localhost tmp]# locate date
[root@localhost tmp]# locate -c date #只显示结果数量
[root@localhost tmp]# locate -S #显示locate数据库信息
Database /var/lib/mlocate/mlocate.db:
3,412,156 bytes used to store database
[root@localhost tmp]# locate -l 5 date #只显示前5条结果
/boot/grub2/i386-pc/datehook.mod
/boot/grub2/i386-pc/datetime.mod
/etc/dbus-1/system.d/org.freedesktop.timedate1.conf
[root@localhost tmp]# updatedb
[root@localhost ~]# touch aaaaaa #新建文件
[root@localhost ~]# locate aaaaaa #找不到
[root@localhost ~]# updatedb #更新数据库
[root@localhost ~]# locate aaaaaa #找到了
3.4.3 find - search for files in a directory hierarchy
(1)与时间有关的用法:共有 -atime, -ctime与 -mtime,以 -mtime说明
-mtime n :n 为数字,意义为在 n 天之前的『一天之内』被更动过内容的档案;
-mtime +n :列出在 n 天之前(不含 n 天本身)被更动过内容的档案档名;
-mtime -n :列出在 n 天之内(含 n 天本身)被更动过内容的档案档名。
-newer file :file 为一个存在的档案,列出比 file 还要新的档案档名
[root@localhost tmp]# touch xxxxx #新创建一个文件
[root@localhost tmp]# find /tmp/ -mtime -1
[root@localhost tmp]# find /tmp/ -mtime +1
[root@localhost tmp]# timedatectl set-time "2020-3-18 19:56:30"
#修改系统时间
[root@localhost tmp]# date #当前时间为“明天”
[root@localhost tmp]# find . -mtime 1
[root@localhost tmp]# touch xxx
[root@localhost tmp]# find . -newer xxxxx
l -uid n :n 为数字,这个数字是用户的账号 ID,亦即 UID ,这个 UID 是记录在 /etc/passwd 里面与账号名称对应的数字。
l -gid n :n 为数字,这个数字是组名的 ID,亦即 GID,这个 GID 记录在 /etc/group
l -user name :name 为使用者账号名称喔!例如dmtsai
l -group name:name 为组名喔,例如 users ;
l -nouser:寻找档案的拥有者不存在 /etc/passwd 的人!
l -nogroup:寻找档案的拥有群组不存在于 /etc/group 的档案!
-rw-rw-r--. 1 calf calf 0 Mar 18 20:06 calf
-rw-r--r--. 1 root root 2003 Mar 12 10:59 passwd
-rwxrw-r--. 1 root root 0 Mar 5 10:32 root
-rw-rw-r--. 1 stu stu 0 Mar 18 20:10 stu
-rw-r--r--. 1 root root 65 Mar 12 11:04 test
[root@localhost tmp]# find . -uid 1000
#在当前目录下查找uid为1000的文件
[root@localhost tmp]# find . -gid 1000
#在当前目录下查找gid为1000的文件
[root@localhost tmp]# find . -user calf
#在当前目录下查找用户名为calf的文件
[root@localhost tmp]# find . -group calf
#在当前目录下查找组名为calf的文件
[root@localhost tmp]# userdel stu
#删除用户和用户组stu
[root@localhost tmp]# find . -nouser
#在当前目录下查找无主文件
[root@localhost tmp]# find . -nogroup
#在当前目录下查找无组文件
-size [+-]SIZE:搜寻比 SIZE 还要大(+)或小(-)的档案。
`k' for Kilobytes (units of 1024 bytes)
-rw-rw-r--. 1 calf calf 0 Mar 18 20:06 calf
-rw-r--r--. 1 root root 2003 Mar 12 10:59 passwd
-rwxrw-r--. 1 root root 0 Mar 5 10:32 root
-rw-rw-r--. 1 1001 1001 0 Mar 18 20:10 stu
-rw-r--r--. 1 root root 65 Mar 12 11:04 test
[root@localhost tmp]# find . -size 2003c
#查找大小为2003bytes的文件
[root@localhost tmp]# find . -size -100c
#查找小于100bytes的文件
[root@localhost tmp]# find . -size +100c
#查找大于100bytes的文件
[root@localhost tmp]# find . -empty #查找空文件
-type TYPE:搜寻档案的类型为 TYPE 的,类型主要有:一般正规档案 (f), 装置档案 (b, c),目录 (d), 连结档 (l), socket (s), 及 FIFO (p) 等属性。
-rw-rw-r--. 1 calf calf 0 Mar 18 20:06 calf
drwxr-xr-x. 2 root root 6 Mar 18 20:27 dir
-rw-r--r--. 1 root root 2003 Mar 12 10:59 passwd
[root@localhost tmp]# find . -type f
[root@localhost tmp]# find . -type d
l -perm mode :搜寻档案权限『刚好等于』 mode 的档案!
l -perm -mode :搜寻档案权限『必须要全部囊括 mode 的权限』的档案,举例来说,我们要搜寻 -rwxr--r-- ,亦即 0744 的档案,使用 -perm -0744,当一个档案的权限为 -rwsr-xr-x ,亦即 4755 时,也会被列出来,因为 -rwsr-xr-x 的属性已经囊括了 -rwxr--r-- 的属性了。
l -perm /mode :搜寻档案权限『包含任一 mode 的权限』的档案,举例来说,我们搜寻-rwxr-xr-x ,亦即 -perm /755 时,但一个文件属性为 -rw-------也会被列出来,因为他有 -rw.... 的属性存在!
-rw-rw-r--. 1 calf calf 0 Mar 18 20:06 calf
-rw-r--r--. 1 root root 2003 Mar 12 10:59 passwd
-rwxrw-r--. 1 root root 0 Mar 5 10:32 root
-rw-rw----. 1 1001 1001 0 Mar 18 20:10 stu
-rw-r--r--. 1 root root 65 Mar 12 11:04 test
[root@localhost tmp]# find . -perm 664
#权限为664即可
[root@localhost tmp]# find . -perm -664
#权限大于664即可
[root@localhost tmp]# find . -perm -020
#同组用户可写即可
[root@localhost tmp]# find . -perm -030
#要求同组用户可写可执行
[root@localhost tmp]# find . -perm /040
#同组用户可读即可
[root@localhost tmp]# find . -perm /030
#同组用户可写或者可执行即可
[root@localhost tmp]# find . -perm /007
#其他用户可读或者可写或者可执行即可
-name filename:搜寻文件名为 filename 的档案;
[root@localhost tmp]# find . -name calf #查找名为calf的文件
[root@localhost tmp]# find . -name c* #查找以c开头的文件
[root@localhost tmp]# find . -name "????"
#查找名字为4个字符的文件
[root@localhost tmp]# find . -name "*" #查找所有文件
[root@localhost tmp]# find . -name "*oo*"
#查找名字中含有oo的文件
l -exec command :command 为其他指令,-exec 后面可再接额外的指令来处理搜寻到的结果。
l -print :将结果打印到屏幕上,这个动作是预设动作!
-rw-rw-r--. 1 calf calf 0 Mar 18 20:06 calf
-rw-r--r--. 1 root root 2003 Mar 12 10:59 passwd
-rwxrw-r--. 1 root root 0 Mar 5 10:32 root
-rw-rw----. 1 1001 1001 0 Mar 18 20:10 stu
-rw-r--r--. 1 root root 65 Mar 12 11:04 test
[root@localhost tmp]# find . -name calf -exec ls -l {} \;
-rw-rw-r--. 1 calf calf 0 Mar 18 20:06 ./calf
[root@localhost tmp]# find . -nouser -exec rm -f {} \;
3.5 权限与指令间的关系
n 额外需求:如果用户想要在这个目录内利用 ls 查阅文件名,则用户对此目录还需要 r 的权限。
n 可使用的指令:例如本章谈到的 cat, more, less等等
n 档案所需权限:使用者对档案至少需要具有 r 的权限才行!
n 可使用的指令:例如 nano 或未来要介绍的 vi 编辑器等;
n 目录所需权限:用户在该档案所在的目录至少要有 x 权限;
n 目录所需权限:用户在该目录要具有w,x的权限,重点在 w 啦!
5.让用户进入某目录并执行该目录下的某个指令之基本权限为何?
3.6 总结
l 绝对路径:『一定由根目录 / 写起』;相对路径:『不由 / 写起,而是由相对当前目录写起』
l 特殊目录有:., .., -, ~, ~account需要注意;
l 与目录相关的指令有:cd, mkdir, rmdir, pwd 等重要指令;
l 用户能使用的指令是依据 PATH 变量所规定的目录去搜寻的;
l ls 可以检视档案的属性,尤其 -d, -a, -l 等选项特别重要!
l 档案的复制、删除、移动可以分别使用:cp, rm , mv等指令来操作;
l 检查档案的内容(读文件)可使用的指令包括有:cat, tac, nl, more, less, head, tail, od 等
l touch 的目的在修改档案的时间参数,但亦可用来建立空档案;
l 一个档案记录的时间参数有三种,分别是 access time(atime), status time (ctime), modification time(mtime),ls 默认显示的是 mtime。
l 档案具有SUID的特殊权限时,代表当用户执行此一binary程序时,在执行过程中用户会暂时具有程序拥有者的权限。
l 目录具有SGID的特殊权限时,代表用户在这个目录底下新建的档案之群组都会与该目录的组名相同。
l 目录具有SBIT的特殊权限时,代表在该目录下用户建立的档案只有自己与root能够删除!
l 利用 find 可以加入许多选项来直接查询文件系统,以获得自己想要知道的文档。
标签:tmp,whereis,查找,calf,Linux,root,find,localhost 来源: https://blog.51cto.com/5482173/2490167