Linux操作系统实训指导书(5)

2019-08-31 16:07

############################################################ # 查找特定的文件名 $ find -name myfile

$ find -maxdepth 2 -name symfony # 使用通配符查找特定的文件名 $ find -name 'd*' $ find -name '???' $ find -name '[afd]*' $ find -iname '[a-z]*'

$ find -name 'ch[0-2][0-9].txt*' # 匹配文件路径名 $ find -path '*server' ./vbird/server ./server

$ find -path '*server[12]' ./server1 ./server2

./server1/server2 ./server2/server2

# 以正则表达式匹配文件路径名 $ find -regex '.*'

$ find -regex '.*ch0.*' ./ch01 ./ch00

./vbird/server/1000results/ch09-01.jpg $ find -regex '.*ch[0-9]+' ./ch01 ./ch21 ./ch00 ./ch333 ./ch1 ./ch41

$ find -regex '.*ch[0-9]+\\.txt' ./ch1.txt ./ch24.txt

############################################################ ### 按文件属性查找

############################################################ # 只查找普通文件 $ find . -type f

# 只查找符号链接文件 $ find . -type l

# 查找硬连接数大于 1 的文件或目录 $ find /home -links +1

# 查找 /tmp 目录下小于 10M 的文件 $ find /tmp -size -10M

Linux操作系统实训指导书--何亚森

第 21 页 共 21 页

# 查找 /home 目录下大于 1G 的文件 $ find /home -size +1G

# 查找系统中为空的文件或者目录 $ find / -empty

# 查找在 /www 中最后10分钟访问过的文件 $ find /www -amin -10

# 查找在 /www 中最后2天访问过的文件 $ find /www -atime -2

# 查找在 /home 下最近2天内改动过的文件 $ find /home -mtime -2

# 列出被改动过后 2 日内被存取过的文件或目录 $ find /home -used -2

# 列出被改动过后 90 日前被存取过的文件或目录 $ find /home -used +90

# 列出 /home 目录中属于用户 osmond 的文件或目录 $ find /home -user osmond

# 列出 /home 目录中 UID 大于 501 的文件或目录 $ find /home -uid +501

# 列出 /home 目录中组为 osmond 的文件或目录 $ find /home -group osmond

# 列出 /home 目录中 GID 为 501 的文件或目录 $ find /home -gid 501

# 列出 /home 目录中不属于本地用户的文件或目录 $ find /home -nouser

# 列出 /home 目录中不属于本地组的文件或目录 $ find /home -nogroup

# 精确查找权限为 664 的文件或目录 $ find . -perm 664

# 查找权限至少为 664 的文件或目录 $ find . -perm -664

############################################################ ### 使用逻辑运算构造复杂表达式

############################################################ # 查找 /tmp 目录下21天之前访问过的大于 10G 的文件 $ find /tmp -size +10M -a -atime +21

# 查找 / 目录下属主为 jjheng 或 osmond 的文件 $ find / -user jjheng -o -user osmond

# 查找 /tmp 目录下的属主不是 osmond 的文件 $ find /tmp ! -user osmond

# 在 /mnt 下查找 *.txt 且文件系统类型不为 vfat 的文件 $ find /mnt -name '*.txt' ! -fstype vfat

# 在 /tmp 下查找名为 l 开头且类型为符号链接的文件 $ find /tmp -name 'l*' -type l

# 查找以 server 开头的目录名 $ find . -type d -name 'server*'

# 找出 /var/log 目录下所有的前5天修改过的.log 文件

Linux操作系统实训指导书--何亚森

第 22 页 共 22 页

$ find /var/log -name '*.log' -mtime +5

############################################################ ### 按文件样本查找

############################################################ # 查找所有比 FILE1 的访问时间新的文件 $ find -anewer FILE1

# 查找所有比 FILE2 的访问时间旧的文件 $ find ! -anewer FILE2

# 查找所有比 FILE1 的访问时间新的 # 且比 FILE2 的访问时间旧的文件 $ find -anewer FILE1 ! -anewer FILE2

# 查找所有比 FILE1 的内容修改时间新的文件 $ find -newer FILE1

# 查找所有比 FILE2 的内容修改时间旧的文件 $ find ! -newer FILE2

# 查找所有比 FILE1 的内容修改时间新的 # 且比 FILE2 的内容修改时间旧的文件 $ find -newer FILE1 ! -newer FILE2

# 查找与 FILE 具有相同 i-node 的文件(硬链接) $ find -samefile FILE -ls

############################################################ ### 对查找到的文件实施命令操作

############################################################ # 查找并列出当前目录下不安全的文件(世界可读写执行) $ find . -perm -007 -exec ls -l {} \\;

# 查找 logs 目录下的所有的 .log 文件并查看它的详细信息 $ find logs -name \# 查找当天修改过的普通文件

$ find . -type f -mtime -1 -exec ls -l {} \\;

# 查找当前目录下的.php文件并用grep过滤出包含include的行 $ find . -name \

# 查找并删除当前目录及其子目录下所有扩展名为 .tmp 的文件 $ find . -name '*.tmp' -exec rm {} \\;

# 在logs目录中查找7天之内未修改过的文件并在删除前询问 $ find logs -type f -mtime +7 -exec -ok rm {} \\;

# 查询并删除一周以来从未访问过的以 .o 结尾或名为 a.out # 且不存在于 nfs 文件系统中的所有文件 $ find / ( -name a.out -o -name '*.o' ) -atime +7 \\ ! -fstype nfs -exec rm {} \\;

# 查询并删除当前目录及其子目录下所有的空目录 $ find . -depth -type d -empty -exec rmdir {} \\;

# 将default目录下的文件由GBK编码转换为UTF-8编码 # 目录结构不变,转码后的文件保存在utf/default目录下

# From: http://www.xiaojb.com/archives/it/convert-gbk-utf-8.shtml $ find default -type d -exec mkdir -p utf/{} \\;

$ find default -type f -exec iconv -f GBK -t UTF-8 {} -o utf/{} \\;

Linux操作系统实训指导书--何亚森

第 23 页 共 23 页

############################################################ ### 在查找中排除指定的目录

############################################################ # 显示当前目录树 $ tree -F -L 2 .

|-- bin/

| |-- switch-lang.sh* | `-- sys2wiki.sh* |-- book/ | |-- basic/ | |-- basic-utf8/ | |-- basic.zip | |-- server/ | |-- server-utf8/ | |-- server.zip

| `-- to-zh-CN-utf8.sh* `-- bak.sh*

# 显示当前目录下除 book 目录的所有文件 $ find . -name book -prune -o -print

# 查找当前目录下(除了 book 目录)的所有 .sh 文件 $ find . -name book -prune -o -name '*.sh' -print

# 显示当前目录下除 book/server 目录的所有文件 $ find . -path ./book/server -prune -o -print # 使用绝对路径完成上述任务

$ find /home/osmond -path /home/osmond/book/server -prune -o -print # 查找当前目录下(除了 book/server 目录)的所有 .sh 文件 $ find . -path ./book/server -prune -o -name '*.sh' -print

# 显示当前目录下除 book/server 和 book/server-utf8 目录的所有文件 $ find . -path './book/server*' -prune -o -print

# 查找当前目录下(除了 book/server 和 book/server-utf8 目录)的所有 .sh 文件 $ find . -path './book/server*' -prune -o -name '*.sh' -print

# 显示当前目录下除 book/server 和 book/basic 目录的所有文件 $ find . \\( -path ./book/server -o -path ./book/basic \\) -prune -o -print

# 查找当前目录下(除了 book/server 和 book/basic 目录)的所有 .sh 文件 $ find . \\( -path ./book/server -o -path ./book/basic \\) -prune -o -name '*.sh' -print

学习locate和whereis

locate 命令

locate 是一个使用方便且查询速度极快的文件和目录查找命令。该命令的语法为: locate 文件名 [选项]

使用 locate 命令的前提是要先创建一个用于定位文件或目录位置的 slocate 数据库,而且该数据库应是时时更新的,这样才可以保证 locate 查找结果的准确性。 以下命令用于从 / 开始创建 slocate 数据库: # locate -u

Linux操作系统实训指导书--何亚森

第 24 页 共 24 页

更新 slocate 数据库的命令是 updatedb ,需要以 root 用户身份执行此命令。

数据库创建后就可以查找文件了。例如,要查找所有关于 telnet 命令的文件。可以使用: # locate telnet

locate 命令将在其数据库中检查所有匹配于 telnet 的文件和目录并在屏幕上显示结果。 whereis (寻找特定文件)

语法格式:whereis [-bmsu] 文件或目录名 参数∶

-b :只找 binary 的文件

-m :只找在说明档 manual 路径下的文件 -s :只找 source 来源文件 -u :没有说明档的文件! 范例∶

[root@linux ~]# whereis passwd

passwd: /usr/bin/passwd /etc/passwd /etc/passwd.OLD

/usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz # 任何与 passwd 有关的文件名都会被列出来~ [root@linux ~]# whereis -b passwd

passwd: /usr/bin/passwd /etc/passwd /etc/passwd.OLD [root@linux ~]# whereis -m passwd

passwd: /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz

whereis查找文件用的也是located创建的数据库,因此有的时侯你还会发现使用这两个命令会找到已经被删除掉的文件,而且也找不到最新的刚刚建立的文件! 这就是因为这两个指令是由数据库当中的结果去搜寻文件的所在,数据库的更新不及时就会查找出错。 which (寻找执行命令文件)

[root@linux ~]# which [-a] command 参数∶

-a ∶将所有可以找到的指令均列出,而不止第一个被找到的指令名称 范例∶

[root@linux ~]# which passwd /usr/bin/passwd

[root@linux ~]# which traceroute -a /usr/sbin/traceroute /bin/traceroute

这个指令是根据『PATH』这个环境变数所规范的路径,去搜寻『执行文件』的绝的路径 ,which 后面接的是『完整命令名』!若加上 -a 参数,则可以列出所有的可以找到的同名执行档,而非仅显示第一个。

文件的查找和定位总结

注意:通常 find 不很常用的!因为速度慢。通常我们都是先使用 whereis 或者是 locate 来检查,如果真的找不到了,才以 find 来搜寻!为什么呢?因为 whereis 与 locate 是利用数据库来查找,所以相当快速,而且并没有实际的搜寻硬盘,比较省时间。

Linux操作系统实训指导书--何亚森 第 25 页 共 25 页


Linux操作系统实训指导书(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:高中英语研究性学习课题开题报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: