bash 如何展开命令行
把命令行分成单个命令词
展开别名
展开大括号的声明({})
展开波浪符声明(~)
命令替换$()和 ``
再次把命令行分成命令词
展开文件通配(*、?、[abc]等等)
准备I/0重导向(<、>)
运行命令
文件查找
在文件系统上查找符合条件的文件
文件查找:locate,find
非实时查找(数据库查找):locate
实时查找:find
locate命令
查询系统上预建的文件索引数据库
/var/lib/mlocate/mlocate.db
依赖于事先构建的索引
索引的构建是在系统较为仝闲时自动进行(周期性任务),管理员手动更新数据库(updatedb)
索引构建过程需要遍历整个根文件系统,极消耗资源
工作特点:
·查找速度快
·模糊查找
·非实时查找
·搜索的是文件的全路径,不仅仅是文件名
·可能只搜索用户具备读取和执行权限的目录
locate KEYWORD
有用的选项
-i不区分大小写的搜索
-n N只列举前N个匹配项目
-r使用正则表达式
示例
搜索名称或路径中带有”conf”的文件
locate conf
使用Regex来搜索以”.conf”结尾的文件
locate '\.conf$’
find命令
实时查找工具,通过遍历指定路径完成文件查找
工作特点:
查找速度略慢
精确查找
实时查找
可能只搜索用户具备读取和执行权限的目录
语法:
find[OPTION]...[查找路径][查找条件][处理动作]
查找路径:指定具体目标路径;默认为当前目录
查找条件:指定的查找标准,可以文件各、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件
处理动作:对符合条件的文件做操作,默认输出至屏幕
查找条件
指搜索层级
-maxdepth level最大搜索目录深度,指定目录为第1级
-mindepth level最小搜索目录深度
根据文件名和inode查找:
-name”文件名称”:支持使用glob
-iname”文件名称”:不区分字母大小写
-inum n按inode号查找
-samefile name相同inode号的文件
-links n链接数为n的文件
-regex”PATTERN”:以PATTERN匹配整个文件路径字符串, 而不仅仅是文件名称
根据属主、属组查找:
-user USERNAME:查找属主为指定用户(UID)的文件
-group GRPNAME:查找属组为指定组(GID)的文件
-uid UserID:查找属主为指定的UID号的文件
-gid GroupID:查找属组为指定的GID号的文件
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件
根据文件类型查找:
-type TYPE.
·f:普通文件
·d:目录文件
·l:符号链接文件
·s:套接字文件
·b:块设备文件
·c:字符设备文件
·p:管道文件
空文件或目录
-empty
find/app-type d -empty
组合条件:
与:-a
或:-o
非:-not,!
德.摩根定律
(非A)或(非B)= 非(A且B)
(非A)且(非B)= 非(A或B)
示例:
!A –a !B = !(A –o B)
!A -o !B = !(A –a B)
find示例
find –name snow.png
find –iname snow.png
find / name “*.txt”
find /var –name “*log*”
find –user joe –not –group joe
find –user joe –not group joe
find –user joe –o –user jane
find –not \(-user joe –o –user jane \)
find / -user joe –o –uid 500
找出/tmp目录下,属主不是root,且文件名不以f开头的文件
find/tmp\(-not –user root -a- not –name 'f*'\)-ls
find/tmp -not\(-user root –o -name0 ‘f’\)—ls
排除目录
示例:
查找/etc下,除/etc/sane.d目录的其它所有conf后缀的文件
find/etc –path '/etc/sane.d' –a –prune –o –name ‘*.conf'
查找/etc下,除/etc/sane.d和/etc/fonts两个目录的所有conf后缀的文件
find/etc\ (-path ‘/etc/sane.d’ –o —path ‘/etc/fonts’)-a –prune –o –name “.conf”
根据文件大小来查找:
-size[+|-]#UNIT
常用单位:k,M,G,c(byte)
#UNIT: (#-1,#)
如:6k表示(5k,6k)
-#UNIT: [0,#-1]
如:-6k表示[0,5k]
+#UNIT: (#,∞)
如:+6k表示(6k,∞)