在上一节课中,我们介绍了Linux系统常用的文件处理命令和权限管理命令。今天我们继续学习Linux操作系统的其他处理命令。1、文件搜索命令which命令说明命令名称:which命令所在路径:/usr/bin/which执行权限:所有用户命令功能:显示系统命令所在目录语法:which[命令名称]使用示例比如我们要查找ls命令所在目录:$whichls注意:which命令只能用来查找命令所在路径,不能查找普通文件。比如你要用这个命令查找一个名为ffile1的文件,执行whichfile1后会提示nofile:相关命令和which命令和whereis命令功能类似,使用方法相同作为哪个。例如查找chmod命令的位置:$whereischmod2,文件搜索命令find命令解释命令名:find命令所在路径:/usr/bin/find执行权限:所有用户命令功能:查找指定目录下的任意文件或目录语法:find[搜索路径][参数][搜索关键字]这个命令其实有点类似于我们windows系统中的查找文件,但是在linux中是使用命令行来查找的.在find命令中,有几十个参数,我们介绍一些常用的。例1.按文件名搜索:比如我想在/etc目录下搜索一个名为dnf的文件。$find/etc-namednf如你所见,我为我找到了2个名为dnf的文件。这里要提醒大家的是,这里的搜索是全匹配搜索,不是模糊搜索,也就是说只会给我找全名为dnf的文件,不会找名字中包含dnf的文件。但是在某些情况下,我们确实需要进行模糊搜索,比如我们忘记了文件的全名,可能只记得文件名以dnf开头,那么我们可以使用通配符*来搜索:$find/etc-namednf*everyone可以看到为我找到了5个dnf开头的文件,包括全名为dnf的文件,所以我们可以清楚的看到*符号匹配任意字符。还有一种情况,比如我清楚的记得文件以dnf开头,文件全名有8个字符,最后5个字符我不记得了。在这种情况下,我们可以使用?对于辅助搜索,一个?匹配一个字符:$find/etc-namednf?????可以看到我找到了2个文件名以dnf开头的文件,全名是一个8个字符的文件。注意:使用find查找文件时,系统占用的资源越少越好。所以我们在搜索的时候,定位路径越准确越好,搜索的关键词越多越好。而且最好不要在系统根目录下搜索,这样会扫描整个系统,消耗大量的系统资源。2、根据文件大小查找:-size这里的文件大小一般是按照block数据库块来计算的,一个数据块=512字节,所以1KB=2个数据块。比如我们要查找文件大小为1M的文件:$find/etc-size+2048注意,我在数字2048前加了一个+号,表示文件大于1M。如果小于1M,我们可以使用-number:$find/etc-size-2048根据文件的属主查找:-user比如我要查找属主为系统用户的用户的文件chuan:$find/etc-userchuan3.根据时间查找这个属性有点复杂。可以按天或分支搜索:day:ctime,atime,mtimeminute:cmin,amin,mminc-change:表示修改了文件的属性,包括所有的Owner,group,permissiona-access:表示修改了hasbeenaccessedandbrowseedm-modify:表示文件内容被修改这里还有一点要注意,就像我们在使用-size属性一样,在-+的辅助下,-表示within,+表示over.比如我们搜索2分钟内修改过的文件:$find/etc-mmin-24、按文件类型搜索:-type常用的类型有二进制文件f、软链接文件l、目录d。比如我们要查找一个f类型的文件:$find/etc-typef如果我们要在/home路径下查找以up开头的目录,如何查找呢?这里我们将使用Linux寻找的链接器:-aandlogicandconnection-oorlogicorlink那么我们的命令可以写成:$find/home-nameup*-a-typed五、连接执行符号:-exec上一篇讲到根据文件类型查找的时候,我们用的是查找连接符-a和-o。这里是一个比较复杂的连接器-exec。意思是:执行搜索命令后,再对执行结果进行操作。例如,我们在/var/log目录下搜索文件名以dnf开头的文件,列出这些文件的属性:$find/var/log-namednf*-execls-l{}\;大家一定很疑惑这个{}\;是什么意思?在命令中是什么意思?其实这是一个固定的格式,你只要记住就行了。{}表示find查询的结果3、locate命令使用详解命令名称:locate命令英文含义:列出数据库中的文件命令所在路径:/usr/bin/find执行权限:所有用户命令功能:查找文件或目录语法:locate[searchkeyword]Unix系统没有提供该命令,只有Linux系统可以使用。例如查找服务的文件:$locateservice执行这条命令,你会发现查找速度非常快,比查找文件的find命令要快得多。那么有的同学会说,我就是用locate命令找文件,为什么还要find命令呢?为了回答这个问题,我们首先创建一个新文件。比如我在test目录下新建一个file3,然后执行命令$locatefile3,发现没有搜索结果,但是文件不见了。为什么是这样?因为执行locate命令是在Linux文件数据库中搜索而不是扫描磁盘,所以搜索速度会比find搜索快很多。而我刚刚创建的文件还没有同步到linux文件数据库中,所以通过locate是找不到的。那么我们如何将新建的文件同步到Linux文件数据库中呢?有两种方式:等待Linux系统自动执行任务和手动执行同步命令。那么接下来,我们来解释一下Linux的另一个命令:updatedb4,updatedb命令。/usr/bin/updatedb执行权限:所有用户命令功能:建立系统目录文件的数据库语法:updatedb$updatedb5,grep命令详解命令名称:grep命令所在路径:/bin/grep执行权限:所有用户命令功能:在文件中搜索匹配字符串的行并输出语法:grep[指定字符][源文件]注意:该命令不搜索文件,而是在文件中搜索匹配字符串并输出该行。但是grep的作用不仅如此,我们会在后面的教程中继续介绍这个命令的使用。比如我想在/etc/services文件中查找tftp相关的信息。如果我们直接使用以前学过的cat、vim等命令,会发现文件内容太长,不好找。在本例中,我们执行:$greptftpservice以上四个命令就是我们日常生活中使用最多的文件搜索相关的命令以及使用方法。
