find命令详解

1.vim的工作特性可以自己制定:

注意:在末行模式下的设定,仅对当前vim进程有效;
永久有效:
全局:/etc/vimrc
用户个人:~/.vimrc  需要自己创建个新文件   
优先级排序:用户个人>全局
等同于:作用范围越小  优先级越高

2.定制的一些功能

1、行号
	显示:set number, 简写为set nu
	取消显示: set nonu
2、括号匹配高亮
	匹配:DoMatchParen
	取消:NoMatchParen
3、自动缩进
	启用:set ai
	禁用:set noai
4、高亮搜索
	启用:set  hlsearch
	禁用:set nohlsearch
5、语法高亮
	启用:syntax on
	禁用:syntax off 
6、忽略字符大小写
	启用:set ic
	禁用:set noic
7.设置tab键缩进4个字符
set tabstop=4 简写 ts=4
如果设置为空格需要添加一行
set expandtab
		
获取帮助:内置的帮助文档 用法就是在  末行模式下输入
:help
:help subject

3.bash脚本编程之算术运算

+,-,*,/, %

算术运算格式:
	(1) let  var=算术运算表达式 ;例如:let result=1+1
	(2) var=$[算术运算表达式] 例如:result=$[1+1]
	(3) var=$((算术运算表达式)) 例如:result=$((1+1)
	
	(4) var=$(expr $ARG1 $OP $ARG2)  
	**注意:彼此之间必须有空格** 
	例如  expr 1 + 1
	
	注意:乘法符号在有些场景中需要使用转义符;

4.文件查找

在文件系统上查找符合条件的文件;
	
实现工具:locate, find
需要安装:yum install mlocate <==locate的	

5.locate命令:

5.1作用:

依赖于事先构建好的索引库;
系统自动实现(周期性任务);
手动更新数据库(updatedb);

5.2工作特性:

查找速度快;
模糊查找;
非实时查找;

5.3语法

locate  [OPTION]...  PATTERN...

5.4参数

-b:只匹配路径中的基名;
-c:统计出共有多少个符合条件的文件;
-r:BRE 可以基于基本正则表达式来实现正则表达式

5.5例子:

#locate -c demo     89   \^ .* \$
		
**注意:索引构建过程需要遍历整个根文件系统,极消耗资源;**

find命令:

作用:

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

工作特性:

查找速度略慢;
精确查找;
实时查找;

语法:

find [OPTIONS]  [查找起始路径]  [查找条件]  [处理动作]
		
1.查找起始路径:指定具体搜索目标起始路径;默认为当前目录;

2.查找条件:指定的查找标准,可以根据文件名、大小、类型、从属关系、
	    权限等等标准进行;默认为找出指定路径下的所有文件;
	    
3.处理动作:对符合查找条件的文件做出的操作,例如删除等操作;默认为输出至标准输出;
			
4.查找条件:
	表达式:选项和测试
			
5.测试:结果通常为布尔型("true", "false")
				
6.根据文件名查找:
	-name name  文件符合name的文件
	-iname name 不区分文件名中的大小写   
	其中pattern 支持glob风格的通配符;不支持正则表达的写法
		*, ?, [], [^]   
	-regex pattern:基于正则表达式模式查找文件,匹配是整个路径,而非其名;

例子:

[root@localhost ~]# find /etc/ -name "pass*"
/etc/passwd
/etc/selinux/targeted/modules/active/modules/passenger.pp
/etc/pam.d/passwd
/etc/pam.d/password-auth-ac
/etc/pam.d/password-auth
/etc/openldap/certs/password
/etc/passwd-

7.根据文件从属关系查找:
(1)-user USERNAME:查找属主指定用户的所有文件;

例如:
	[root@localhost ~]# find -user lisi
	./txt.a

(2)-group GRPNAME:查找属组指定组的所有文件;

例如:
	[root@localhost ~]# find -group lisi
	./txt.a
				
(3)-uid UID:查找属主指定的UID的所有文件;

例如:
	[root@localhost ~]# id lisi
	uid=4007(lisi) gid=4007(lisi) 组=4007(lisi)
	[root@localhost ~]# find -uid 4007
	./txt.a

(4)-gid GID:查找属组指定的GID的所有文件;

例如:
	[root@localhost ~]# id lisi
	uid=4007(lisi) gid=4007(lisi) 组=4007(lisi)
	[root@localhost ~]# find -gid 4007
	./txt.a

注意:在整个系统中查找既没有属主又没有属组的文件
(这样的文件通常是很危险的,作为系统工程师的我们应该及时清除掉)

底下的-nouser和-nogroup       <====查找完执行的参数
     # -print                                 //默认情况下的动作
     # -ls                                     //查找到后用ls 显示出来
     # -ok  [commend]                //查找后执行命令的时候询问用户是否要执行
     # -exec [commend]              //查找后执行命令的时候不询问用户,直接执行
(5)-nouser:查找没有属主的文件;
(6)-nogroup:查找没有属组的文件;

8.根据文件的类型查找:
	例如:find /dev -type b -ls
		-type TYPE:
		f: 普通文件
		d: 目录文件
		l:符号链接文件
		b:块设备 文件
		c:字符设备文件
		p:管道文件
		s:套接字文件
						
9.组合测试:
	 与:-a: 默认组合逻辑;
	&与:-a:连接两个不同的条件(两个条件必须同时满足)
	|或:-o:连接两个不同的条件(两个条件满足其一即可)
	!非:-not:对条件取反
	
	!A -a !B = !(A -o B)  
	!A -o !B = !(A -a B)				
					
10.练习:
	1、找出/tmp目录下属主为非root的所有文件;
		find /tmp -not -user root -ls
	2、找出/tmp目录下文件名中不包含haha字符串的文件;
		dev]# find /tmp -not -iname "*haha*" -ls
	3、找出/tmp目录下属主为非root,而且文件名不包含haha字符串的文件;
		find /tmp -not -user root -a -not -iname "*haha*" -ls
											
11.根据文件的大小查找:
		-size [+|-]#UNIT
		常用单位:k, M, G
						
		#UNIT:(#-1, #)
		-#UNIT:[0,#-1]
		+#UNIT:(#, oo)  不包含#
						
12.根据时间戳查找:
	以“天”为单位:
		-atime  [+|-]#
			#:[#, #-1)
			-#:(#, 0]
			+#:(oo, #-1]
		-mtime
		-ctime
						
例如:我们可以使用stat命令来查看一个文件的时间信息 如下:			
[root@localhost ~]# stat /etc/passwd
 文件:"/etc/passwd"
 大小:1476      	块:8          IO 块:4096   普通文件
设备:fd00h/64768d	Inode:34596954    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:system_u:object_r:passwd_file_t:s0
最近访问:2019-07-22 17:00:28.626072153 +0800
最近更改:2019-07-22 16:59:56.787070446 +0800
最近改动:2019-07-22 16:59:56.788070446 +0800
创建时间:-		

#find  /tmp  –atime  +3           //表示查找在三天内没有访问过的文件
#find  /tmp  -atime  -3           //表示查找在三天内访问过的文件
所以这里atime,mtime,ctime就是分别对应的“最近一次访问时间”
“最近一次内容修改时间” “最近一次属性修改时间”,这里的atime的
单位指的是“天”,amin的单位是分钟 	
13.以“分钟”为单位:
	-amin  :n分钟内被访问
	-cmin  :n分钟内被修改
	-mmin:
查找文件更新日时在距现在时刻二分以内的文件
#find ./ -mmin -2

查找文件更新日时在距现在时刻二分以上的文件
#find ./ -mmin +2

查找文件更新日时在距现在时刻一分以上二分以内的文件
#find ./ -mmin 2
	
						
14.根据权限查找:
	-perm  [/|-]mode
	mode:精确权限匹配;
	/mode:任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足;
			   9位权限之间存在“或”关系;
	-mode:每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足;
			   9位权限之间存在“与”关系;
					
	例如:
		查找权限为644的文件或目录(需完全符合)
#find ./ -perm 664

查找用户/组权限为读写,其他用户权限为读(其他权限不限)的文件或目录
#find ./ -perm -664

查找用户有写权限或者组用户有写权限的文件或目录
#find ./ -perm /220
#find ./ -perm /u+w,g+w
#find ./ -perm /u=w,g=w

查找所有者权限有读权限的目录或文件
#find ./ -perm -u=r

查找用户组权限有读权限的目录或文件
#find ./ -perm -g=r

查找其它用户权限有读权限的目录或文件
#find ./ -perm -o=r				
		
15.处理动作:
	-print:输出至标准输出;默认的动作;
	-ls:类似于对查找到的文件执行“ls -l”命令,输出文件的详细信息;
	-delete:删除查找到的文件;
	-fls /PATH/TO/SOMEFILE:把查找到的所有文件的长格式信息保存至指定文件中;
	-ok COMMAND {} \;   :对查找到的每个文件执行由COMMAND表示的命令;每次操作都由用户进行确认;
	-exec COMMAND {} \;  :对查找到的每个文件执行由COMMAND表示的命令;每次操作不需要用户进行确认;
			
	例如:
		查当前目录下的所有普通文件
		#find . -type f -exec ls -l {} \; 
		-rw-r–r–    1 root      root         34928 2003-02-25   ./conf/httpd.conf 
		-rw-r–r–    1 root      root         12959 2003-02-25   ./conf/magic 
		-rw-r–r–    1 root      root          180 2003-02-25   ./conf.d/README 
		查当前目录下的所有普通文件,并在- e x e c选项中使用ls -l命令将它们列出		
		**注意:find传递查找到的文件路径至后面的命令时,是先查找出
		 所有符合条件的文件路径,并一次性传递给后面的命令;**
				
但是有些命令不能接受过长的参数,此时命令执行会失败;另一种方式可规避此问题:
	过滤: xargs 过滤器
	find | xargs COMMAND
	https://www.runoob.com/linux/linux-comm-xargs.html

练习:

1、查找/var目录下属主为root,且属组为lizi的所有文件或目录;
	~]# find /var -user root -a -group lizi -ls

2、查找/usr目录下不属于root, bin或usr的所有文件或目录;用两种方法;
	~]# find /usr -not -user root -a -not -user bin -a -not -user usr
	~]# find /usr -not \( -user root -o -user bin -o -user usr \) -ls
				
3、查找/etc目录下最近一周内其内容修改过,且属主不是root用户也不是usr用户的文件或目录;
	~]# find /etc -mtime -7 -a -not \( -user root -o -user usr \) -ls
	~]# find /etc -mtime -7 -a -not -user root -a -not -user usr -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 -a -not -type d$:
		
7、查找/etc目录至少有一类用户没有执行权限的文件;
	~]# find /etc -not -perm -111 -type f -ls
	
8、查找/etc/init.d/目录下,所有用户都有执行权限,且其它用户有写权限的所有文件;
	~]# find /etc -perm -113 -type f -ls
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值