寻找文件与內容文件位置相关命令•find在文件系统中查找文件•locate通过已整理的数据库查找文件•whereis搜索指令名称的相关文件•which搜索指令名称所存在的位置(根据PATH,也就是可执行文件)「find」与「locate」区别•find的寻找方式,是直接从FileSystem来寻找,因此寻找的速度会比较慢,而且也比较耗费系统资源。•locate的寻找方式,是通过一个已经索引(index)完成的数据库来找出文件所在位置,所以locate寻找的速度比较快速,也不会耗费太多的系统资源,不过通常在使用locate之前,都要先使用「updatedb」指令,来创建文件索引数据库。find和locate原理图find格式:find[指定查找目录][查找规则][查找完后执行的action]findpath-option[-print][-exec-okcommand]{}\;#-print将查找到的文件输出到标准输出#-execcommand{}\;—–将查到的文件执行command操作,{}和\;之间有空格#-ok和-exec相同,只不过在操作前要询用户根据名字查找-name按文件名查找(精确查找)-iname按文件名查找,不区分大小写例子:find/etc/tmp/root-namepasswd说明:可以是多个路径,路径间用空格隔开。查找时,会递归到子目录。万用字符*0个或多个字符;?单个字符[]括号中的任意一个字符a??.*Find/-name“*.conf”?单个字符*零个或多个字符根据用户查找•-user//根据属主来查找文件•-group//根据属组来查找文件•#find/tmp-uid500//查找uid是500的文件•#find/tmp-gid1000//查找gid是1000的文件•#find/-nogroup–a–nouser//在整个系统中查找既没有属主又没有属组的文件(这样的文件通常是很危险的,作为系统工程师的我们应该及时清除掉)根据文件类型查找-typef//普通文件d//目录文件l//链接文件b//块设备文件c//字符设备文件p//管道文件s//socket文件多条件查找•find/tmp-name“*.sh”-a-userroot•find/tmp-not-userroot#-a连接两个不同的条件#-o连接两个不同的条件(两个条件满足其一即可)#-not对条件取反的根据大小来查找文件$find.-size1000000c-print#查长度大于1Mb的文件#find/tmp-size2M//查找在/tmp目录下等于2M的文件#find/tmp-size+2M//查找在/tmp目录下大于2M的文件#find/tmp-size-2M//查找在/tmp目录下小于2M的文件根据时间查找atime,最近一次访问时间,单位指的是“天”,amin的单位是分钟mtime最近一次内容修改时间ctime最近一次属性修改时间-atimen查找前n天访问过的文件(仅第n天这一天);文件最后一次被访问是在在n*24小时。-atime+n查找前n天之前访问过的文件;-atime–n查找前n天之后访问过的文件;#find/tmp–atime+5//表示查找在五天内没有访问过的文件#find/tmp-atime-5//表示查找在五天内访问过的文件•-newerfile:把比file还要新的文件列出来根据文件权限查找文件•#find/tmp-perm755//查找在/tmp目录下权限是755的文件•#find/tmp-perm+222//表示只要有一类用户(属主,属组,其他)的匹配写权限就行•#find/tmp-perm-222//表示必须所有类别用户都满足有写权限查找完的动作•#-print//默认情况下的动作•#-ls//查找到后用ls显示出来•#-ok[commend]//查找后执行命令的时候询问用户是否要执行•#-exec[commend]//查找后执行命令的时候不询问用户,直接执行•#find/tmp-atime+30–execrm–rf{}\;#删除查找到的超过30天没有访问过文件•find/tmp-nametmp.txt-okrm{}\;#查找临时文件,并删除locate•locate的使用方式要比find来得简单,而且在寻找文件的速度上,也较find要来得快速•缺点就是,各位的系统要「定期」的「updatedb」,这樣才能让文件索引的內容能一直保持在最新的状态,假使大家在updatedb之后,才创建新的文件,那麼这个新的文件有可能会寻找不到。这是因为updatedb数据库尚未更新的原因。whereis功能:查找一个命令的二进制文件、源代码、手册文件选项:-b只查找二进制-m只查找手册-s查找源代码whereis查找的速度非常快,这是因为linux系统会将系统内的所有文件都记录在一个数据库文件中。数据库文件并不是实时更新,默认情况下时一星期更新一次,因此,我们在用whereis和locate查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。whichwhich命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。相关命令echo$PATH查看当前path路径PATH=$PATH:/修改PATH路径其他命令•type•file•stattype•type命令用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。•如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,此时相当于which命令。•知道了是哪种类型,我们就可以针对性的获取帮助。比如:内建命令可以用help命令来获取帮助,外部命令用man或者info来获取帮助。type-t返回指定类型的信息。一个命令的类型可以是如下之一:alias命令别名keywordShell保留字functionShell函数builtinShell内建命令file外部命令unfound没有找到type-tlstype-tiftype-ttypetype-tgedittype-tfrydsh•type-a可以显示所有可能的类型,比如有些命令如pwd是shell内建命令,也可以是外部命令。•type-p只返回外部命令的信息,相当于which命令。•type-f只返回shell函数的信息。file•该命令用来识别文件类型,也可用来辨别一些文件的编码格式。它是通过查看文件的头部信息来获取文件类型,而不是像Windows通过扩展名来确定文件类型的。stat文件状态•可以显示文件大小(size)、数据块(Blocks)、访问时间(Access)、修改时间(Modify)、修改文件元数据时间(change)。•accesstime:表示我们最后一次访问(仅仅是访问,没有改动)文件的时间•modifytime:表示我们最后一次修改文件的时间•changetime:表示我们最后一次对文件属性改变的时间,包括权限,大小,属性等等。寻找文件的內容grepgrep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep家族包括grep、egrep和fgrep。egrep是grep的扩展,支持更多的re元字符。fgrep就是fixedgrep或fastgrep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。grep格式格式:grep[-acinv][--color=auto]patternfilenamepattern既可以是要搜索的字符串,也可以是一个正则表达式。注意:在输入要搜索的字符串时最好使用双引号,而在模式匹配使用正则表达式时,注意使用单引号。grep选项-c:计算找到'搜寻字符串'的次数。-I:不区分大小写(只适用于单字符)。-h:查询多文件时不显示文件名。-l:查询多文件时只输出包含匹配字符的文件名。-n:显示匹配行及行号。-s:不显示不存在或无匹配文本的错误信息。-v:显示不包含匹配文本的所有行。-a:将binary文件以text文件的方式搜寻数据-i:忽略大小写的不同,所以大小写视为相同--color=auto:可以将找到的关键词部分加上颜色的显示喔!(1)多个文件查询grepsort*.doc#见文件名的匹配(2)行匹配:输出匹配行的计数grep-c48data.doc#输出文档中含有48字符的行数(3)显示匹配行和行数grep-n48data.doc#显示所有匹配48的行和行号(4)显示非匹配的行grep-vn48data.doc#输出所有不包含48的行(4)显示非匹配的行grep-vn48data.doc#输出所有不包含48的行(5)大小写敏感•grep-iabdata.doc#输出所有含有ab或Ab的字符串的行•将/etc/passwd,有出现root的行取出来•#greproot/etc/passwd•#cat/etc/passwd|greproot•#grep-nroot/etc/passwd•grep-vroot/etc/passwd将/etc/passwd,将没有出现root的行取出来•将/etc/passwd,将没有出现root和nologin的行取出来•#grep-vroot/etc/passwd|grep-vnologin•#grep‘energywise’*#在当前目录搜索带'energywise'行的文件•#grep-r‘energywise’*#在当前目录及其子目录下搜索'energywise'行的文件•#grep-l-r‘energywise’*#在当前目录及其子目录下搜索'energywise'行的文件,但是不显示匹配的行,只显示匹配的文件RE(正则表达式)\忽略正则表达式中特殊字符的原有含义^匹配正则表达式的开始行$匹配正则表达式的结束行\从匹配正则表达式的行开始\到匹配正则表达式的行结束[]单个字符;如[A]即A符合要求[-]范围;如[A-Z]即A,B,C一直到Z都符合要求.所有的单个字符*所有字符,长度可以为0(1)正则表达式的应用(注意:最好把正则表达式用单引号括起来)grep'[239].'data.doc#输出所有含有以2,3或9开头的,并且是两个数字的行(2)不匹配测试grep'^[^48]'data.doc#不匹配行首是48的行(3)使用扩展模式匹配grep-E'219|216'data.doc•用dmesg列出核心信息,再以grep找出内含eth那行,在关键字所在行的前两行与后三行也一起捉出来显示•[root@~]#dmesg|grep-n-A3-B2--color=auto'eth'egrep•扩展grep(grep-E或者egrep):•使用扩展grep的主要好处是增加了额外的正则表达式元字符集。特殊符号+表示重复一个或一个以上的前一个字符?表示零个或零个以上的前一个字符|表示或者的意思。两者中只要有一个满足就表示符合条件。()表示住处群组,表示只要找出()中的群组即可,群组内的内容可以用或者(|)隔开。()+表示重复群组的判断。即只要符合一个或者以上群组内的内容即可。并且!在延伸正则表达式中并不是表达特殊字符,所以可以当成普通的字符来使用借口。.代表任意字符。•egrep'N(e|o)+'/etc/passwdà如果文旦管理有Ne,NO开头的都会被匹配出来。•egrep'^[^0-9]+$'1.txt搜索没有数字的行搜索所有包含一个或多个3的行•#egrep'3+'testfile•#grep-E'3+'testfile•#grep'3\+'testfile•sort据不同的数据类型进行排序•sed用