前言
前几篇博客算是初步总结完成了Linux中文件权限的学习,这篇开始学习一下Linux中偏数据处理的一些命令,文件查找开始。依旧参考《鸟哥的Linux私房菜》
关于指令与文件的搜寻,指的是如何在Linux中查找文件,这个对应于《鸟哥的Linux私房菜》第六章第5节的相关内容,这里做一些总结和梳理。
which命令
which命令可以查找指定的指令在哪儿。
[root@localhost ~]
/usr/sbin/ip
[root@localhost ~]
/usr/sbin/ifconfig
[root@localhost ~]
/usr/local/bin/redis-cli
但是,which命令,是根据系统变量PATH指定的路径进行文件查找。也就是说which命令只能查找PATH指定的路径,其他文件夹下的文件,which无法查找,同时which还无法查找bash的内部指令。比如history命令,这个which命令就无法查找
[root@localhost ~]
/usr/bin/which: no history in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
总的来说which的查找范围有限
whereis命令
whereis命令用于查找某些特定目录(这些特定目录通过命令选项进行指定)下的文件。 这个命令也没有全系统去搜寻文件,主要是针对/bin/sbin目录下的文件和/usr/share/man下的man page文件,以及其他几个特定的目录进行查询,其查询速度还是比较快的。
locate和updatedb命令
locate命令查找文件是通过系统中自己构建的数据库来进行搜寻。也不是直接去硬盘上搜索文件。
相关实例
[root@localhost ~]
/usr/local/redis/redis.conf
/usr/local/software/redis-7.0.0/redis.conf
[root@localhost ~]
2
[root@localhost ~]
/usr/local/redis/redis.conf
[root@localhost ~]
Database /var/lib/mlocate/mlocate.db:
14,753 directories
167,493 files
8,504,861 bytes in file names
3,835,429 bytes used to store database
locate对应的数据库,位于/var/lib/mlocate,主要是从里面的数据进行搜寻。所以locate也不是直接从硬盘中去搜寻文件,因此对当前用户新建的文件,无法通过locate进行查找。如果想要当前用户的文件及时被系统搜寻到,可以通过updatedb去更新/var/lib/mlocate内的数据库文件。
find命令
find命令是很强大的,但时间花费很大,因为它是直接搜寻硬盘,如果硬盘接口速率较慢,则很影响效率。
find命令的基本格式如下,但是关于find命令的选项有点多,这里先从时间相关的选项来进行梳理。
与时间有关的参数
与时间有关的命令选项,在linux的命令中是一个比较常见的内容,这里做一个总结
时间命令中的正负数表示相关的时间范围,一张图可以较好的表示时间参数中正负数的含义
-atime指的是访问时间(access time)指的是文件最后被读取的时间
-atime<24小时数> 查找在指定时间曾被存取过的文件或目录,单位以24小时计算。
find . -atime 0
find . -atime -1
find . -atime 1
ctime:变更时间(change time),指的是**文件本身(权限、所属组、位置…)**最后被变更的时间,变更动作可以使chmod、chgrp、mv等等;
-ctime<24小时数> 查找在指定时间之时被更改的文件或目录,单位以24小时计算。
find . -ctime 0
mtime:修改时间(modify time),指的是文件****内容最后被修改的时间,修改动作可以使echo重定向、vi等等;
-mtime<24小时数> 查找在指定时间曾被更改过的文件或目录,单位以24小时计算。
find . -mtime 0
与使用者或组名有关的参数
相关实例
[root@localhost etc]
/home/coderman/coderman.txt
/home/thomas
/home/thomas/.mozilla
/home/thomas/.mozilla/extensions
/home/thomas/.mozilla/plugins
/home/thomas/.bash_logout
/home/thomas/.bash_profile
/home/thomas/.bashrc
/home/thomas/.cache
/home/thomas/.cache/abrt
/home/thomas/.cache/abrt/lastnotification
/home/thomas/.config
/home/thomas/.config/abrt
/home/thomas/.bash_history
/home/thomas/.viminfo
[root@localhost etc]
/var/spool/mail/jack
/var/spool/mail/temp
/home/jack
/home/jack/.mozilla
/home/jack/.mozilla/extensions
/home/jack/.mozilla/plugins
/home/jack/.bash_logout
/home/jack/.bash_profile
/home/jack/.bashrc
/home/temp/.mozilla
/home/temp/.mozilla/extensions
与文件权限及名称有关的参数
-name是比较常用的一个选项,find命令根据文件名来搜寻文件,支持正则表达式的匹配。
相关实例:
[root@localhost etc]
/sys/fs/selinux/class/passwd
/sys/fs/selinux/class/passwd/perms/passwd
/etc/pam.d/passwd
/etc/passwd
/usr/bin/passwd
/usr/share/bash-completion/completions/passwd
[root@localhost etc]
/boot/initramfs-0-rescue-f0971428ddf7ca46a03278eaed9903e0.img
/proc/kcore
/var/lib/rpm/Packages
/var/cache/yum/x86_64/7/updates/gen/primary_db.sqlite
/var/cache/yum/x86_64/7/updates/gen/filelists_db.sqlite
/var/cache/yum/x86_64/7/updates/packages/kernel-3.10.0-1160.62.1.el7.x86_64.rpm
/var/cache/yum/x86_64/7/updates/packages/firefox-91.8.0-1.el7.centos.x86_64.rpm
/var/cache/yum/x86_64/7/updates/packages/firefox-91.9.0-1.el7.centos.x86_64.rpm
/var/cache/yum/x86_64/7/updates/packages/linux-firmware-20200421-80.git78c0348.el7_9.noarch.rpm
/var/cache/yum/x86_64/7/updates/packages/kernel-3.10.0-1160.66.1.el7.x86_64.rpm
/var/cache/yum/x86_64/7/updates/packages/firefox-91.9.1-1.el7.centos.x86_64.rpm
/usr/lib/locale/locale-archive
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64/jre/lib/rt.jar
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64/jre/lib/rt.jar
/usr/lib64/firefox/libxul.so
/home/coderman/share/sogoupinyin-3.4.0.9700-2.x86_64.rpm
/home/coderman/share/sogoupinyin_3.4.0.9700_amd64.deb
[root@localhost etc]
/run/abrt/abrt.socket
/run/gssproxy.sock
/run/avahi-daemon/socket
/run/rpcbind.sock
/run/libvirt/libvirt-admin-sock
/run/libvirt/libvirt-sock-ro
/run/libvirt/libvirt-sock
/run/libvirt/virtlockd-sock
/run/libvirt/virtlogd-sock
/run/dbus/system_bus_socket
/run/lsm/ipc/simc
/run/lsm/ipc/sim
/run/user/1000/pulse/native
find: ‘/run/user/1000/gvfs’: Permission denied
/run/user/1000/keyring/ssh
/run/user/1000/keyring/pkcs11
/run/user/1000/keyring/control
/run/cups/cups.sock
/run/lvm/lvmetad.socket
/run/lvm/lvmpolld.socket
/run/udev/control
/run/systemd/shutdownd
/run/systemd/private
/run/systemd/journal/socket
/run/systemd/journal/stdout
/run/systemd/cgroups-agent
/run/systemd/notify
[root@localhost etc]
[root@localhost etc]
/usr/bin/fusermount
/usr/bin/wall
/usr/bin/ksu
/usr/bin/chfn
/usr/bin/passwd
/usr/bin/chsh
/usr/bin/staprun
/usr/bin/chage
/usr/bin/gpasswd
/usr/bin/su
/usr/bin/newgrp
/usr/bin/umount
/usr/bin/mount
/usr/bin/write
/usr/bin/pkexec
/usr/bin/crontab
/usr/bin/Xorg
/usr/bin/ssh-agent
/usr/bin/cgexec
/usr/bin/at
/usr/bin/cgclassify
/usr/bin/sudo
/usr/bin/locate
/usr/sbin/unix_chkpwd
/usr/sbin/pam_timestamp_check
/usr/sbin/netreport
/usr/sbin/usernetctl
/usr/sbin/lockdev
/usr/sbin/userhelper
/usr/sbin/mount.nfs
/usr/sbin/postdrop
/usr/sbin/postqueue
额外的动作选项
针对find查找的结果,通过上述参数,我们可以做一些自定义的处理,比如上面的实例,我们通过find命令查找出来,只显示了文件名,如果想要通过ll命令详细列出来,可以用到find的-exec选项
实例
[root@localhost etc]
-rwsr-xr-x. 1 root root 32096 Oct 31 2018 /usr/bin/fusermount
-r-xr-sr-x. 1 root tty 15344 Jun 10 2014 /usr/bin/wall
-rwsr-xr-x. 1 root root 61320 Dec 2 2021 /usr/bin/ksu
-rws--x--x. 1 root root 23968 Oct 1 2020 /usr/bin/chfn
-rwsr-xr-x. 1 root root 27856 Apr 1 2020 /usr/bin/passwd
-rws--x--x. 1 root root 23880 Oct 1 2020 /usr/bin/chsh
---s--x---. 1 root stapusr 212080 Oct 14 2020 /usr/bin/staprun
-rwsr-xr-x. 1 root root 73888 Aug 9 2019 /usr/bin/chage
-rwsr-xr-x. 1 root root 78408 Aug 9 2019 /usr/bin/gpasswd
-rwsr-xr-x. 1 root root 32128 Oct 1 2020 /usr/bin/su
-rwsr-xr-x. 1 root root 41936 Aug 9 2019 /usr/bin/newgrp
-rwsr-xr-x. 1 root root 31984 Oct 1 2020 /usr/bin/umount
-rwsr-xr-x. 1 root root 44264 Oct 1 2020 /usr/bin/mount
-rwxr-sr-x. 1 root tty 19544 Oct 1 2020 /usr/bin/write
-rwsr-xr-x. 1 root root 23576 Apr 1 2020 /usr/bin/pkexec
-rwsr-xr-x. 1 root root 57656 Aug 9 2019 /usr/bin/crontab
-rwsr-xr-x. 1 root root 2447304 Apr 1 2020 /usr/bin/Xorg
---x--s--x. 1 root nobody 382216 Aug 9 2019 /usr/bin/ssh-agent
-rwxr-sr-x. 1 root cgred 15608 Aug 9 2019 /usr/bin/cgexec
-rwsr-xr-x. 1 root root 53048 Oct 31 2018 /usr/bin/at
-rwxr-sr-x. 1 root cgred 15632 Aug 9 2019 /usr/bin/cgclassify
---s--x--x. 1 root root 147336 Oct 1 2020 /usr/bin/sudo
-rwx--s--x. 1 root slocate 40520 Apr 11 2018 /usr/bin/locate
-rwsr-xr-x. 1 root root 36272 Apr 1 2020 /usr/sbin/unix_chkpwd
-rwsr-xr-x. 1 root root 11232 Apr 1 2020 /usr/sbin/pam_timestamp_check
-rwxr-sr-x. 1 root root 11224 Oct 13 2020 /usr/sbin/netreport
-rwsr-xr-x. 1 root root 11296 Oct 13 2020 /usr/sbin/usernetctl
-rwx--s--x. 1 root lock 11208 Jun 10 2014 /usr/sbin/lockdev
-rws--x--x. 1 root root 40328 Aug 9 2019 /usr/sbin/userhelper
-rwsr-xr-x. 1 root root 117432 Oct 1 2020 /usr/sbin/mount.nfs
-rwxr-sr-x. 1 root postdrop 218560 Apr 1 2020 /usr/sbin/postdrop
-rwxr-sr-x. 1 root postdrop 264128 Apr 1 2020 /usr/sbin/postqueue
这里用到的exec的相关解释如下 其中的{} 表示的是find找到的内容,find的结果会放到{} 位置中。 -exec 一直到 \; 是关键词,代表find额外动作的开始(-exec)到结束(;),这中间的就是find命令内的额外动作,这里是ls -l {} 最后的; 在bash环境下是有特殊意义的,因此需要通过反斜杠进行转义
总结
简单总结了Linux中文件查找的几个命令。
|