Linux下的find命令

find / -name tnsnames.ora

查到:

/opt/app/oracle/product/10.2/network/admin/tnsnames.ora
/opt/app/oracle/product/10.2/network/admin/samples/tnsnames.ora

还可以用locate 来查找

locate tnsnames.ora
结果是:

/opt/app/oracle/product/10.2/hs/admin/tnsnames.ora.sample
/opt/app/oracle/product/10.2/network/admin/tnsnames.ora
/opt/app/oracle/product/10.2/network/admin/samples/tnsnames.ora

一.通过文件名查找法:

举例说明,假设你忘记了httpd.conf这个文件在系统的哪个目录 下,甚至在系统的某个地方也不知道,则这是可以使用如下命令:
  find / -name httpd.conf
  这个命令语法看起来很容易就明白了,就是直接在find后面写上 -name,表明要求系统按照文件名查找,最后写上httpd.conf这个目标文件名即可。稍等一会系统会在计算机屏幕上显示出查找结果列表:
  etc/httpd/conf/httpd.conf
  这就是httpd.conf这个文件在Linux系统中的完整路径。查找成功。
  如果输入以上查找命令后系统并没有显示出结果,那么不要以为系统没有执行find / -name httpd.conf命令,而可能是你的系统中没有安装Apache服务器,这时只要你安装了ApacheWeb服务器,然后再使用find / -name httpd.conf就能找到这个配置文件了。

二.无错误查找技巧:

在Linux系统中“find”命令是大多数系统用户都可以使用的命令,并不是ROOT系统管理员的专利。但是普通用户使用“find”命令时也有可 能遇到这样的问题,那就是Linux系统中系统管理员ROOT可以把某些文件目录设置成禁止访问模式。这样普通用户就没有权限用“find”命令来查询这 些目录或者文件。当普通用户使用“find”命令来查询这些文件目录是,往往会出现"Permissiondenied."(禁止访问)字样。系统将无法 查询到你想要的文件。为了避免这样的错误,我们可是使用转移错误提示的方法尝试着查找文件,例如输入:
  find / -name access_log 2>/dev/null
  这个方法是把查找错误提示转移到特定的目录中去。系统执行这个命令后,遇到错误的信息就直接输送到stderrstream2 中,access_log2就是表明系统将把错误信息输送到stderrstream2中,/dev/null是一个特殊的文件,表明空的或者错误的信 息,这样查询到的错误信息将被转移了,不会再显示了。
  在Linux系统查找文件也会遇到这样一个实际问题。如果我们在整个硬盘,这个系统中查找某个文件就要花费相当长的一段时间,特别是大型Linux系 统和容量较大的硬盘,文件放在套嵌很深的目录中的时候。如果我们知道了这个文件存放在某个大的目录中,那么只要在这个目录中往下找就能节省很多时间了。使 用find /etc -name httpd.conf就可以解决这个问题。上面的命令就是表示在etc目录中查询httpd.conf这个文件。这里再说明一下“/”这个函数符号的含 义,如果输入“find /”就是表示要求Linux系统在整个ROOT目录下查找文件,也就是在整个硬盘上查找文件,而“find /etc”就是只在
etc目录下查找文件。因为“find /etc”表示只在etc目录下查找文件,所以查找的速度就相应要快很多了。

三.根据部分文件名查找方法:

例如我们知道某个文件包含有srm这3个字母,那么要找到系统中所有包含有这3个字母的文件是可以实现 的,输入:
  find /etc -name ‘srm
  这个命令表明了Linux系统将在/etc整个目录中查找所有的包含有srm这3个字母的文件,比如absrmyz,tibc.srm等等符合条件的文件都能显示出来。如果你还知道这个文件是由srm 这3个字母打头的,那么我们还可以省略最前面的星号,命令如下:
  find/etc -name ‘srm*’
  这是只有像srmyz这样的文件才被查找出来,像absrmyz或者absrm这样的文件都不符合要求,不被显示,这样查找文件的效率和可靠性就大大增强了。

四.根据文件的特征查询方法:

如果只知道某个文件的大小,修改日期等特征也可以使用“find”命令查找出来,这和WINDOWS系统中的“搜索”功能是基本相同的。在微软的“搜 索”中,“搜索助理”使得搜索文件和文件夹、打印机、用户以及网络中的其他计算机更加容易。它甚至使在Internet上搜索更加容易。“搜索助理”还包 括一个索引服务,该服务维护了计算机中所有文件的索引,使得搜索速度更快。使用“搜索助理”时,用户可以指定多个搜索标准。例如,用户可以按名称、类型及 大小搜索文件和文件夹。用户甚至可以搜索包含特定文本的文件。如果用户正使用Active Directory,这时还可以搜索带有特定名称或位置的打印机。
  例如我们知道一个Linux文件大小为1,500bytes,那么我们可是使用如下命令来查询find /-size
1500c,字符c表明这个要查找的文件的大小是以bytes为单位。如果我们连这个文件的具体大小都不知道,那么在Linux中还可以进行模糊查找方式 来解决。例如我们输入find /-size+10000000c这个命令,则标明我们指定系统在根目录中查找出大于10000000字节的文件并显示出来。命令中的“+”是表示要求系 统只列出大于指定大小的文件,而使用“-”则表示要求系统列出小于指定大小的文件。下面的列表就是在Linux使用不同“find"命令后系统所要作出的 查找动作,从中我们很容易看出在Linux中使用“find”命令的方式是很多的,“find”命令查找文件只要灵活应用,丝毫不比在WINDOWS中查 找能力差。

find / -amin -10 # 查找在系统中最后10分钟访问的文件
  find / -atime -2 # 查找在系统中最后48小时访问的文件
  find / -empty # 查找在系统中为空的文件或者文件夹
  find / -group cat # 查找在系统中属于groupcat的文件
  find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件
  find / -mtime -1 #查找在系统中最后24小时里修改过的文件
  find / -nouser #查找在系统中属于作废用户的文件
  find / -user fred #查找在系统中属于FRED这个用户的文件
  
  下面的列表就是对find命令所可以指定文件的特征进行查找的部分条件。在这里并没有列举所有的查找条件,参考有关Linux有关书籍可以知道所有find命令的查找函数。

-amin n
  查找系统中最后N分钟访问的文件
  -atime n
  查找系统中最后n24小时访问的文件
  -cmin n
  查找系统中最后N分钟被改变状态的文件
  -ctime n
  查找系统中最后n
24小时被改变状态的文件
  -empty
  查找系统中空白的文件,或空白的文件目录,或目录中没有子目录的文件夹
  -false
  查找系统中总是错误的文件
  -fstype type
  查找系统中存在于指定文件系统的文件,例如:ext2 .
  -gid n
  查找系统中文件数字组 ID 为 n的文件
  -group gname
  查找系统中文件属于gnam文件组,并且指定组和ID的文件。

find详解

find:
实时查找工具,通过遍历指定起始路径下文件系统层级结构完成文件查找;

	工作特性:
		查找速度略慢;
		精确查找;
		实时查找;
		
	用法:
		find [OPTIONS]  [查找起始路径]  [查找条件]  [处理动作]
		
			查找起始路径:指定具体搜索目标起始路径;默认为当前目录;
			查找条件:指定的查找标准,可以根据文件名、大小、类型、从属关系、权限等等标准进行;默认为找出指定路径下的所有文件;
			处理动作:对符合查找条件的文件做出的操作,例如删除等操作;默认为输出至标准输出;
			
		查找条件:
			表达式:选项和测试
			
			测试:结果通常为布尔型("true", "false")
				
				根据文件名查找:
					-name  "pattern"
					-iname "pattern"
						支持glob风格的通配符;
							*, ?, [], [^]
							
					-regex "pattern":基于正则表达式模式查找文件,匹配是整个路径,而非其名;
					
				根据文件从属关系查找:
					-user USERNAME:查找属主指定用户的所有文件;
					-group GRPNAME:查找属组指定组的所有文件;
					
					-uid UID:查找属主指定的UID的所有文件;
					-gid GID:查找属组指定的GID的所有文件;
					
					-nouser:查找没有属主的文件;
					-nogroup:查找没有属组的文件;
					
				根据文件的类型查找:
					-type TYPE:
						f: 普通文件
						d: 目录文件
						l:符号链接文件
						b:块设备 文件
						c:字符设备文件
						p:管道文件
						s:套接字文件
						
				组合测试:
					与:-a, 默认组合逻辑;
					或:-o
					非:-not, !
					
				练习:
					1、找出/tmp目录下属主为非root的所有文件;
						find /tmp -not -user root -ls
					2、找出/tmp目录下文件名中不包含fstab字符串的文件;
						find /tmp -not -iname "*fstab*" -ls
					3、找出/tmp目录下属主为非root,而且文件名不包含fstab字符串的文件;
						find /tmp -not -user root -a -not -iname "*fstab*" -ls
						!A -a !B = !(A -o B)
						!A -o !B = !(A -a B)
						
				根据文件的大小查找:
					-size [+|-]#UNIT
						常用单位:k, M, G
						
						#UNIT:(#-1, #]
						-#UNIT:[0,#-1]
						+#UNIT:(#, oo)
						
				根据时间戳查找:
					以“天”为单位:
						-atime  [+|-]#         #为负数   a access访问
							#:[#, #-1)
							-#:(#, 0]
							+#:(oo, #-1]
						-mtime			m modify
						-ctime			c  changed
						
					以“分钟”为单位:
						-amin
						-mmin
						-cmin
						
				根据权限查找:
					-perm  [/|-]mode
						mode:精确权限匹配;
						/mode:任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足;
							9位权限之间存在“或”关系;
							/222 只要用户在三个权限组里有一个有读权限就可以
							/002 其他用户只要有写权限就可以
						-mode:每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足;
							9位权限之间存在“与”关系;
							-222 用户在所有的权限组里都应该有读权限
		处理动作:
			-print:输出至标准输出;默认的动作;
			-ls:类似于对查找到的文件执行“ls -l”命令,输出文件的详细信息;
			-delete:删除查找到的文件;
			-fls /PATH/TO/SOMEFILE:把查找到的所有文件的长格式信息(ls -l)保存至指定文件中;
			-ok COMMAND {} \;   :对查找到的每个文件执行由COMMAND表示的命令;每次操作都由用户进行确认;
			-exec COMMAND {} \;  :对查找到的每个文件执行由COMMAND表示的命令;
				~]# find /usr/share/ -iname "*.jpg" -exec cp {} /data/www/html/ \;
				find ./ -perm /002 -exec mv {} {}.danger \;   给其他用户群组下有写权限的文件名后加.danger
			注意:find传递查找到的文件路径至后面的命令时,是先查找出所有符合条件的文件路径,并一次性传递给后面的命令;
				但是有些命令不能接受过长的参数,此时命令执行会失败;另一种方式可规避此问题:
					find | xargs COMMAND
					
			课外作业:学习xargs命令的用法;
			
		练习:
			1、查找/var目录下属主为root,且属组为mail的所有文件或目录;
				~]# find /var -user root -a -group mail -ls

			2、查找/usr目录下不属于root, bin或hadoop的所有文件或目录;用两种方法;
				~]# find /usr -not -user root -a -not -user bin -a -not -user hadoop
				~]# find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls
				
			3、查找/etc目录下最近一周内其内容修改过,且属主不是root用户也不是hadoop用户的文件或目录;
				~]# find /etc -mtime -7 -a -not \( -user root -o -user hadoop \) -ls
				~]# find /etc -mtime -7 -a -not -user root -a -not -user hadoop -ls
				
			4、查找当前系统上没有属主或属组,且最近一周内曾被访问过的文件或目录;
				~]# find  /  \( -nouser -o -nogroup \)  -atime  -7  -ls
				
			5、查找/etc目录下大于1M且类型为普通文件的所有文件;
				~]# find /etc -size +1M -type f -exec ls -lh {} \;
				
			6、查找/etc目录下所有用户都没有写权限的文件;
				~]# find /etc -not -perm /222 -type f -ls					
				
			7、查找/etc目录至少有一类用户没有执行权限的文件;
				~]# find /etc -not -perm -111 -type f -ls
				
			8、查找/etc/init.d/目录下,所有用户都有执行权限,且其它用户有写权限的所有文件;
				~]# find /etc -perm -113 -type f -ls
				find /etc -perm -111 -a -perm -002 -type f -ls
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值