find linux 目录深度_浪里淘沙,详解Linux系统中Find命令的实用技巧

知了小巷:浪里淘沙,详解Linux系统中Find命令的实用技巧。

5ba31cfbca01e982e5ee792802f08667.png

啊哈,找到了!

当我们需要在Linux系统上定位某个文件或目录时,find命令通常是必备之选。

它使用起来非常简单,但有许多不同的可选项,允许我们对要搜索的文件进行条件过滤。 下面的实例,将会展示如何使用find命令查找系统上的任何我们想要查找的内容。一旦我们知道如何在Linux中使用find命令,每个文件都只需要敲几下键盘就搞定了。

753a84e00dfa71edb8ed33525b281e08.png

finding...

Linux 系统实验版本:

$ cat /proc/version

Linux version 3.10.0-957.1.3.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Thu Nov 29 14:49:43 UTC 2018

1. 查找目录

find命令后跟-type d选项,这将会使find只搜索目录而忽略文件。

$ find /path/to/search -type d -name "name-of-dir"

$ find / -type d -name 'home'

/home/admin/escheduler-ui/dist.old/css/home

/home/admin/escheduler-ui/dist.old/js/home

/home/admin/escheduler-ui/dist.20191112/css/home

/home/admin/escheduler-ui/dist.20191112/js/home

/home/admin/escheduler-ui/dist/css/home

/home/admin/escheduler-ui/dist/js/home

2. 查找隐藏文件

$ find /path/to/search -name ".*"

$ find ~/ -name ".*"

/home/admin/.trash/.py3_monitor_yarn_flinkjobs.py

/home/admin/.sqlline

/home/admin/.bash_profile

/home/admin/.ansible

3. 查找超过指定大小的文件

需要用到-size选项

查找超过10MB大小的文件:

$ find /path/to/search -size +10M

$ find ~/ -size +10M

/home/admin/hive.zip

/home/admin/flink-1.7.2.zip

查找小于10MB大小的文件:

$ find /path/to/search -size -10M

$ find ~/ -size -10M

/home/admin/tt.sh

/home/admin/ss.sh

/home/admin/send_email.py

查找刚刚好10MB大小的文件:

$ find /path/to/search -size 10M

$ find ~/ -size 10M

/home/admin/elk/elasticsearch-6.2.3/lib/elasticsearch-6.2.3.jar

查找介于100MB到2GB大小之间的文件:

$ find /path/to/search -size +100M -size -2G

$ find ~/ -size +100M -size -2G

/home/admin/streamsets-datacollector-3.11.0/libexec/bootstrap-libs/cluster/streamsets-datacollector-mesos-bootstrap-3.11.0.jar

4. 查找指定文件中文件名列表的一个或多个文件

需要用到管道符grep;查找结果是非精确文件名。

$ find /path/to/search | grep -f filelist.txt

$ echo tt.sh > shlist.txt

$ echo ss.sh >> shlist.txt

$ find ~/ | grep -f shlist.txt

/home/admin/elk/kibana-7.3.0-linux-x86_64/data/headless_shell-linux

/home/admin/elk/kibana-7.3.0-linux-x86_64/data/headless_shell-linux/headless_shell

/home/admin/tt.sh

/home/admin/ss.sh

需要注意的是文件名称中的“点”-. 会被忽略,下同:

$ echo 'tt.sh' > shlist2.txt

$ echo 'ss.sh' >> shlist2.txt

$ find ~/ | grep -f shlist2.txt

/home/admin/elk/kibana-7.3.0-linux-x86_64/data/headless_shell-linux

/home/admin/elk/kibana-7.3.0-linux-x86_64/data/headless_shell-linux/headless_shell

/home/admin/tt.sh

/home/admin/ss.sh

如果文件名称由单引号,会什么都找不到,单引号也是文件名称的一部分了:

$ echo "'tt.sh'" > shlist3.txt

$ echo "'ss.sh'" >> shlist3.txt

$ find ~/ | grep -f shlist3.txt

那怎样做才能精确找到与shlist.txt所列出的文件名称一模一样的文件呢???

答案是在文件名中的“点”前面加上转义字符"":

$ echo 'tt.sh' > shlist4.txt

$ echo 'ss.sh' >> shlist4.txt

$ find ~/ | grep -f shlist4.txt

/home/admin/tt.sh

/home/admin/ss.sh

5. 查找不在指定文件名列表范围内的文件

-v的意思是“inverse match“即反向匹配。

$ find /path/to/search | grep -vf filelist.txt

$ find ~/ | grep -vf shlist4.txt

/home/admin/shlist.txt

/home/admin/shlist3.txt

/home/admin/shlist2.txt

/home/admin/shlist4.txt

6. 设置查找的深度-maxdepth

find命令默认情况下会递归查找文件夹和子文件夹,所有子文件夹都会查找一遍。

我们可以使用-maxdepth选项来指定递归查找的文件夹层次数。

如果是当前文件夹下面,参数设置为0,如果是当前文件夹+子文件夹+子子文件夹,参数设置为2,以此类推。

$ find . -maxdepth 0 -name "myfile.txt"

$ find ~/ -maxdepth 2 -name "shlist.txt"

/home/admin/shlist.txt

7. 查找空文件

使用empty选项。

$ find /path/to/search -type f -empty

$ find ~/ -type f -empty

/home/admin/hive-2.3.5/examples/files/empty1.txt

/home/admin/hive-2.3.5/examples/files/empty2.txt

/home/admin/hive-2.3.5/examples/files/nullfile.txt

查找空文件夹:

$ find /path/to/search -type d -empty

$ find ~/ -type d -empty

/home/admin/nginx/srcnginx

/home/admin/.npm/_cacache/tmp

/home/admin/.npm/_locks

如果想要一次性删除空文件,可以使用-delete选项:

$ find /path/to/search -type f -empty -delete

8. 查找最大或比较大的文件夹或文件

$ find /path/to/search -type f -printf "%s%p" | sort -n | tail -1

$ find ~/ -type f -printf "%s%p" | sort -n | tail -1

1077105823 /home/admin/flink-1.7.2.zip

使用sort对文件的size进行排序,使用tail输出排在前面的n个文件。

文件输出的顺序,是从小到大。

如果要查找最小或topN小的文件,使用head就可以了:

$ find ~/ -type f -printf "%s%p" | sort -n | tail -5

268435627 /home/admin/hadoop-2.8.5/logs/hadoop-admin-namenode-testbi-flink-72.zlxx.local.log.6

268435631 /home/admin/hadoop-2.8.5/logs/hadoop-admin-namenode-testbi-flink-72.zlxx.local.log.3

284513057 /home/admin/elk/elasticsearch-7.3.0-linux-x86_64.tar.gz

301452104 /home/admin/test/flink-1.7.2-bin-hadoop28-scala_2.11.tgz

1077105823 /home/admin/flink-1.7.2.zip

查找最大的文件夹,未递归包括子文件夹下文件的大小:

$ find /path/to/search -type d -printf "%s%p" | sort -n | tail -1

$ find ~/ -type d -printf "%s%p" | sort -n | tail -1

344064 /home/admin/elk/kibana-7.3.0-linux-x86_64/built_assets/.cache/ui_bundles/babel

9. 查找普通用户能够使用root权限执行的文件

setuid:"set user ID on execution" ,普通用户能够使用root权限执行的文件。

SUID:SUID权限仅对二进制程序(binary program)有效;执行者对于该程序需要具有x的可执行权限;本权限仅在执行该程序的过程中有效(run-time);执行者将具有该程序拥有者(owner)的权限。

SUID的目的是:让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源。

有两个选项:-user和-perm;-exec ls -l {} ;会输出更多信息。

# find /path/to/search -user root -perm /4000

# find / -user root -perm /4000

/usr/bin/mount

/usr/bin/su

/usr/bin/passwd

...

# find /path/to/search -user root -perm /4000 -exec ls -l {} ;

# find / -user root -perm /4000 -exec ls -l {} ;

-rwsr-xr-x 1 root root 44320 Oct 31 2018 /usr/bin/mount

-rwsr-xr-x 1 root root 32208 Oct 31 2018 /usr/bin/su

-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd

...

不指定用户:

$ find /path/to/search -perm /4000

10. 查找设置了SGID的文件

SGID:SGID对二进制程序有用;程序执行者对于该程序来说,需具备x的权限;SGID主要用在目录上。

和SUID一样,只是SGID是获得该程序所属用户组的权限。

例如:如果用户在此目录下具有w权限的话,若使用者在此目录下建立新文件,则新文件的群组与此目录的群组相同。

# find /path/to/search -perm /2000

# find / -perm /2000 -exec ls -l {} ;

-r-xr-sr-x. 1 root tty 15344 Jun 10 2014 /usr/bin/wall

-rwxr-sr-x 1 root tty 19624 Oct 31 2018 /usr/bin/write

---x--s--x 1 root nobody 382240 Apr 11 2018 /usr/bin/ssh-agent

...

设置了SUID或SGID的文件,结果看并不一定是同时满足:

# find /path/to/search -perm /6000

# find / -perm /6000 -exec ls -l {} ;

---s--x--x 1 root root 147392 Oct 31 2018 /usr/bin/sudo

-rwsr-xr-x 1 root root 44320 Oct 31 2018 /usr/bin/mount

-rwsr-xr-x 1 root root 32208 Oct 31 2018 /usr/bin/su

-rwsr-xr-x 1 root root 32048 Oct 31 2018 /usr/bin/umount

-rwxr-sr-x 1 root tty 19624 Oct 31 2018 /usr/bin/write

11. 查找文件输出的时候过滤掉"Permission denied"的文件

$ find / -name "myfile.txt" 2>%1 | grep -v "Permission denied"

# find / -name "ss.sh" 2>%1 | grep -v "Permission denied"

/home/admin/ss.sh

12. 查找最近一段时间内发生过变更的文件

-mtime选项指定一定天数。

最近30天:

$ find /path/to/search -type f -mtime -30

$ find ~/ -type f -mtime -30

/home/admin/.bash_history

/home/admin/flink-1.7.2/log/flink-admin-client-testbi-flink-72.zlxx.local.log

超过30天,就多啦:

$ find /path/to/search -type f -mtime +30

$ find ~/ -type f -mtime +30

/home/admin/.bash_profile

/home/admin/hive.zip

刚刚好30天,且输出更多文件信息:

$ find /path/to/search -type f -mtime 30

$ find ~/ -type f -mtime 30 -exec ls -l {} ;

-rw-rw-r-- 1 admin admin 2864754 Dec 9 16:51 /home/admin/apache-cassandra-3.0.18/logs/system.log

-rw-rw-r-- 1 admin admin 1841736 Dec 9 16:51 /home/admin/apache-cassandra-3.0.18/logs/gc.log.0.current

-rw-rw-r-- 1 admin admin 7550190 Dec 9 16:51 /home/admin/apache-cassandra-3.0.18/logs/debug.log

13. 根据文件变更时间进行排序

$ find /path/to/search -printf "%T+%p" | sort

$ find ~/ -type f -mtime 30 -printf "%T+%p" | sort

2019-12-09+16:51:04.9282457790 /home/admin/apache-cassandra-3.0.18/logs/system.log

2019-12-09+16:51:04.9392455540 /home/admin/apache-cassandra-3.0.18/logs/debug.log

2019-12-09+16:51:05.2652388850 /home/admin/apache-cassandra-3.0.18/logs/gc.log.0.current

默认是从小到达,也就是业界标准ASC,如果想要DESC:

$ find ~/ -type f -mtime 30 -printf "%T+%p" | sort -r

2019-12-09+16:51:05.2652388850 /home/admin/apache-cassandra-3.0.18/logs/gc.log.0.current

2019-12-09+16:51:04.9392455540 /home/admin/apache-cassandra-3.0.18/logs/debug.log

2019-12-09+16:51:04.9282457790 /home/admin/apache-cassandra-3.0.18/logs/system.log

14. find命令与locate命令的区别

默认情况下,Linux系统并没有locate命令:

$ locate ss.sh

-bash: locate: command not found

Linux locate命令用于查找符合条件的文档,他会去保存文档和目录名称的数据库内,查找合乎范本样式条件的文档或目录。

一般情况我们只需要输入 locate your_file_name 即可查找指定文件。

locate与find 不同: find 是去硬盘找,locate 只在/var/lib/slocate资料库中找。

locate的速度比find快,它并不是真的查找,而是查数据库,一般文件数据库在/var/lib/slocate/slocate.db中,所以locate的查找并不是实时的,而是以数据库的更新为准,一般是系统自己维护,也可以手工升级数据库 。

如果需要使用locate,可以进行以下操作:

# yum install mlocate -y

...

Installed:

mlocate.x86_64 0:0.26-8.el7

Complete!

# updatedb

$ locate ss.sh

/etc/profile.d/less.sh

/home/admin/ss.sh

类似like '%ss.sh'。

15. find命令执行时的CPU负载如何呢?

可以通过top命令监控find占用的资源情况,如果find的目录比较多比较深的时候。

使用ionice命令可以优化减少IO资源的使用:

$ ionice -c3 -n7 find /path/to/search -name "myfile.txt"

$ ionice -c3 -n7 find ~/ -type f -mtime 30 -printf "%T+%p" | sort -r

ionice: ignoring given class data for idle class

2019-12-09+16:51:05.2652388850 /home/admin/apache-cassandra-3.0.18/logs/gc.log.0.current

2019-12-09+16:51:04.9392455540 /home/admin/apache-cassandra-3.0.18/logs/debug.log

2019-12-09+16:51:04.9282457790 /home/admin/apache-cassandra-3.0.18/logs/system.log

使用nice命令可以优化减少CPU资源的使用:

$ nice -n 19 find /path/to/search -name "myfile.txt"

$ nice -n19 find ~/ -type f -mtime 30 -printf "%T+%p" | sort -r

2019-12-09+16:51:05.2652388850 /home/admin/apache-cassandra-3.0.18/logs/gc.log.0.current

2019-12-09+16:51:04.9392455540 /home/admin/apache-cassandra-3.0.18/logs/debug.log

2019-12-09+16:51:04.9282457790 /home/admin/apache-cassandra-3.0.18/logs/system.log

IO和CPU同时优化:

$ nice -n ionice -c2 -n7 find /path/to/search -name "myfile.txt"

【202001】

80331d34d348a6d0f61f6f89d51da2ef.png

end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443646.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

剑指offer之从上到下打印二叉树

从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。 例如: 给定二叉树: [3,9,20,null,null,15,7], 返回: [3,9,20,15,7] 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problem…

小米真蓝牙耳机说明书_小米真无线蓝牙耳机Air2 SE评测:仅需169元,享受随心畅听体验...

继小米真无线蓝牙耳机Air 2、小米真无线蓝牙耳机Air 2S之后,小米公司又于2020年5月19日再次推出了一款售价更为亲民的真无线蓝牙耳机新品——小米真无线蓝牙耳机Air2 SE,该机不仅延续了小米真无线蓝牙耳机Air 2系列的外观设计,支持开盒弹窗、…

三点外接圆_故地重游伪切圆——伪外接圆的基本性质

在思考一个有关于伪外接圆的等角线问题时,我回想起伪外接圆的一道小题目,这是2012年罗马尼亚大师杯的第六题,这道题目直接以结论的形式呈现出了伪外接圆的基本性质,是一道入门伪外接圆必做的精巧小题。当然有些读者可能从未见过&q…

一点等于多少厘米_马桶知识介绍,你了解马桶多少

我们可能并不了解我们经常运用的马桶,认为马桶便是简简单单的规划,没什么技术含量。其实不然,马桶的规划也包含了不少物理学原理。假如你家里的马桶出现毛病,首先要排查毛病的原因,但是假如不了解马桶结构图那就很难把…

1151压力变送器型号_日本进口横河EJA530E压力变送器型号解读!

横河EJA变送器对大家来说也许不陌生,但是对于EJA变送器的型号很多人还不是很懂,因为一个全型号代表这很多参数,每一个字母和每一个数字背后都是一个准确的参数,我们在选型的时候要提供必要的参数,更具参数选出合适的型…

怎样在数组末尾添加数据_如何利用C++实现可变长的数组?

应该执行什么功能?假设我们要实现一个将自动扩展的数组类,是否需要实现函数?让我们从下面主要功能使用的功能开始,看看我们需要实现哪些功能。输出结果:0 1 2 3 40 1 2 100 4您需要做什么才能实现上述功能?…

覆盖索引与联合索引_浅析MySQL的索引覆盖和索引下推

写在前面在MySQL数据库中,索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点,索引就是为了提高数据查询的效率。今天我们来聊聊在MySQL索引优化中两种常见的方式,索引覆盖和索引下推索引覆盖要了解索引覆…

循环斐波那契数列_第五课:斐波那契数列(第一课时)

简介:又称黄金分割数列、因数学家列昂纳多斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34……在数学上,斐波那契数列以如下被以递推的方法定义:F(…

命令行 蓝牙_Ubuntu使用BlueZ驱动蓝牙dongle

蓝牙dongle即蓝牙适配器,一般为USB接口,通过USB连接到PC等设备。连接dongle后,PC即可使用驱动程序控制dongle连接其它蓝牙设备。本文主要介绍在Ubuntu系统中安装BlueZ的方法及蓝牙的使用。01获取BlueZBlueZ是Linux系统的官方蓝牙协议栈&#…

Java在Windows下导出xml文件到Linux服务器上

最近由于公司项目需要,学习了在Windows平台导出xml文件到Linux服务器上的指定目录下的方法,(注:这里的我的Linux是在本机上装的虚拟机)现在写下来记录一下! 1.首先是项目截图: 2.主要是类&…

java peek函数_Java 8 Stream Api 中的 peek 操作

1. 前言我在 Java 8 Stream API中的 map 和flatMap 中讲述了Java8 Stream API中 map 操作和 flatMap 操作的区别。然后有小伙伴告诉我 peek 操作 也能实现元素的处理。但是你知道 map 和 peek 的区别吗? map 我们在开头文章已经讲过了,你可以去详细了解一…

iphone如何查看dns延迟_iPhone手机网速慢?1分钟教你设置DNS,网速立马翻一番

很多小伙伴在购机时选择苹果手机都是因为iOS系统的流畅度和精简性,但iPhone在可玩性和信号方面是不如安卓手机的。大家在使用过程中一定遇到过这样的情况,连接同一个无线网,但是苹果的网速总是要比安卓慢,这该怎么办呢&#xff1f…

copying mysql status_mysql慢查询copying to tmp table

windows server,无论修改my.ini的tmp_table_size,max_heap_table_size到多少,情况都一样。同样的表和查询语句,在本地运行,没出现慢查询。SELECTg.goods_id,g.goods_name,g.shop_price,g.goods_thumb,SUM(og.goods_num…

JDK 7,jdk1.7 安装及配置

1.打开网页:http://www.oracle.com 下载对应平台的合适JDK。 2. 双击下载的exe,如jdk-7u7-windows-i586.exe。 3.进入安装向导: 4.下一步,更改安装路径,选择安装所有组件。 更改为D:\jdk1.7.0_07\ 点击确定 5.下一步,…

c mysql 编译_MySQL编译安装之cmake

mysql版本5.5以上编译安装时需要用到软件cmake,cmake特性是独立于源码编译,编译工作可以在另外一个目录中而非源码目录中进行,mysql版本5.5以上编译安装时需要用到软件cmake,cmake特性是独立于源码编译,编译工作可以在…

vb连接mysql未发现_vb连接MySQL遇到的问题解决方法

1.安装mysql,2.安装MyODBC-standard-3.51.07-win.msi3:vb连接语句是:Public strcnn As StringPublic sql As StringPublic conn A1.安装mysql,2.安装MyODBC-standard-3.51.07-win.msi3:vb连接语句是:Public strcnn As StringPublic sql As StringPublic conn As New ADODB.Conn…

mysql里面有没有map类型_MySQL学习(二) 数据类型

MySQL支持多种列类型:数值类型、日期/时间类型和字符串(字符)类型。数值类型数值类型又分为整数型与小数型整数型下面的表显示了需要的每个整数类型的存储和范围创建一张表mysql> CREATE TABLE t_int (int_1 TINYINT,int_2 SMALLINT,int_3 MEDIUMINT,int_4 INT,i…

shell执行perl_【编程技巧(一)】在Perl、Shell和Python中传参与输出帮助文档

社会你明哥,人狠话又多!【小明的碎碎念】与你不见不散!作为一名搞数据的生物狗,咱们是生物狗中代码写得最六的,程序员中生物学得最好的——大家没意见吧,有意见请憋着跟随小明的步伐,让我们开开…

python之路2.0_Python之路【第二十一篇】:JS基础

1.2 ECMAScript尽管 ECMAScript 是一个重要的标准,但它并不是 JavaScript 唯一的部分,当然,也不是唯一被标准化的部分。实际上,一个完整的 JavaScript 实现是由以下 3 个不同部分组成的:● 核心(ECMAScript)● 文档对象…

solr4 mysql自动更新_(solr系列:五) solr定时实时重建索引和增量更新

将mysql中的数据导入到了solr中之后,如果数据库中的数据有变动,solr中还是第一次导入的旧的数据,那该如何是好呢?该如何实现mysql数据库中的数据定时同步到solr中呢?下面将做详细的介绍。准备工作要做好:1、…