扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
在Unix上查找某个文件确实是一件比较麻烦的事情。毕竟在Unix中需要我们使用专用的“查找”命令来寻找在硬盘上的文件。Unix下的文件表达格式非常复杂,不象WINDOWS下都是统一的AAAAAAA.BBB格式那么方便查找,在WINDOWS中,只要知道要查找的文件的文件名或者后缀就非常容易查找到。
Unix中查找文件的命令通常为“find”命令,“find”命令能帮助我们在使用,管理Solaris的日常事务中方便的查找出我们需要的文件。对于Unix新手来说,“find”命令也是了解和学习Unix文件特点的方法。因为Unix发行版本繁多,版本升级很快,在Unix书籍上往往写明某个配置文件的所在位置,往往Unix新手按图索骥还是不能找到。比如说Solaris和Linux 中有些重要的配置文件所在的硬盘位置和文件目录就有了很大的改变,如果不学会使用“find”命令,那么在成千上万的Unix文件中要找到其中的一个配置文件是相当困难的,笔者在没有精通“find”命令之前就吃过这样的苦头。下面就详细为大家介绍强大的“find”命令的全部使用方法和用途。
1. find命令格式
find: [-H | -L] 路径列表 谓词列表
可以使用:man find 查看命令选项。
2. 通过文件名查找法:
如果你把这个文件放在单个的文件夹里面,只要使用常见的“ls"命令就能方便的查找出来,如果知道了某个文件的文件名,而不知道这个文件放到哪个文件夹,甚至是层层套嵌的文件夹里。举例说明,假设你忘记了sshd_config(ssh服务器的配置文件)这个文件在系统的哪个目录下,甚至在系统的某个地方也不知道,则这是可以使用如下命令:
find / -name sshd_config
这个命令语法看起来很容易就明白了,就是直接在find后面写上 -name,表明要求系统按照文件名查找,最后写上httpd.conf这个目标文件名即可。稍等一会系统会在计算机屏幕上显示出查找结果列表:
#find / -name sshd_config
/var/sadm/pkg/SUNWsshdr/save/pspool/SUNWsshdr/reloc/etc/ssh/sshd_config
/etc/ssh/sshd_config
图1 是find操作的截图
图1 find操作的截图
这就是sshd_config 这个文件在Solaris系统中的完整路径。查找成功。
如果输入以上查找命令后系统并没有显示出结果,那么不要以为系统没有执行find/ -name sshd_config 命令,而可能是你的系统中没有安装ssh服务器,这时只要你安装了ssh服务器,然后再使用find / -name sshd_config 就能找到这个配置文件了。
应用技巧:
在Solaris系统中“find”命令是大多数系统用户都可以使用的命令,并不是ROOT系统管理员的专利。但是普通用户使用“find”命令时也有可能遇到这样的问题,那就是Solaris系统中系统管理员ROOT可以把某些文件目录设置成禁止访问模式。这样普通用户就没有权限用“find”命令来查询这些目录或者文件。当普通用户使用“find”命令来查询这些文件目录是,往往会出现"Permissiondenied."(禁止访问)字样。系统将无法查询到你想要的文件。为了避免这样的错误,我们可是使用转移错误提示的方法尝试着查找文件,输入命令:“find / -name access_log 2>/dev/null ”操作界面如图2 。
图 2 转移错误提示的方法
这个方法是把查找错误提示转移到特定的目录中去。系统执行这个命令后,遇到错误的信息就直接输送到stderrstream 2 中,access_log 2就是表明系统将把错误信息输送到stderrstream 2中,/dev/null是一个特殊的文件,表明空的或者错误的信息,这样查询到的错误信息将被转移了,不会再显示了。
3. 快速查找方法在Solaris系统查找文件也会遇到这样一个实际问题。如果我们在整个硬盘,这个系统中查找某个文件就要花费相当长的一段时间,特别是大型Solaris系统和容量较大的硬盘,文件放在套嵌很深的目录中的时候。如果我们知道了这个文件存放在某个大的目录中,那么只要在这个目录中往下找就能节省很多时间了。使用find /etc -name sshd_config就可以解决这个问题。上面的命令就是表示在etc目录中查询httpd.conf这个文件。这里再说明一下“/ ”这个函数符号的含义,如果输入 “find/ ”就是表示要求Solaris系统在整个ROOT目录下查找文件,也就是在整个硬盘上查找文件,而“find/etc”就是只在 etc目录下查找文件。因为“find/etc”表示只在etc目录下查找文件,所以查找的速度就相应要快很多了。
4. 根据部分文件名查找方法:
这个方法和在WINDOWS中查找已知的文件名方法是一样的。不过在Solaris中根据部分文件名查找文件的方法要比在WINDOWS中的同类查找方法要强大得多。例如我们知道某个文件名称含有ssh这两个字母,那么要找到系统中所有包含有这几个字母的文件是可以实现的,输入:
# find /etc -name '*ssh*'
/etc/svc/volatile/network-ssh:default.log
/etc/ssh
/etc/ssh/sshd_config
/etc/ssh/ssh_config
/etc/ssh/ssh_host_rsa_key
/etc/ssh/ssh_host_rsa_key.pub
/etc/ssh/ssh_host_dsa_key
/etc/ssh/ssh_host_dsa_key.pub
/etc/ssh/sshd_config~
/etc/webmin/sshd
以上命令表明了Solaris系统将在/etc整个目录中查找所有的包含有ssh 这3个字母的文件,比如 ssh myz等等符合条件的文件都能显示出来。如果你还知道这个文件是由ssh 这3个字母打头的,那么我们还可以省略最前面的星号,命令如下:
# find /etc -name 'ssh*'
这是只有像sshd 这样的文件才被查找出来,象asshmyz这样的文件都不符合要求,不被显示,这样查找文件的效率和可靠性就大大增强了。
5. 根据文件的特征查询方法:
如果只知道某个文件的大小,修改日期等特征也可以使用“find”命令查找出来,这和WINDOWS系统中的"搜索"功能是基本相同的。例如我们知道一个Solaris文件大小为5202 bytes,那么我们可是使用如下命令来查询find / -size 5202c,字符 c 表明这个要查找的文件的大小是以bytes为单位。如果我们连这个文件的具体大小都不知道,那么在Solaris中还可以进行模糊查找方式来解决。例如我们输入find/ -size + 2000000c 这个命令,则标明我们指定系统在根目录中查找出大于2000000字节的文件并显示出来。命令中的“+”是表示要求系统只列出大于指定大小的文件,而使用“-”则表示要求系统列出小于指定大小的文件。下面的列表就是在Solaris使用不同“ find"命令后系统所要作出的查找动作,从中我们很容易看出在Solaris中使用“find"命令的方式是很多的,“ find"命令查找文件只要灵活应用,丝毫不必在WINDOWS中查找能力差。
图3根据文件的特征查询方法
6. 使用混合查找方式查找文件
find命令可以使用混合查找的方法,例如我们想在/tmp目录中查找大于200字节并且在24小时内修改的某个文件,我们可以使用两个查找选项链接起来组合成一个混合的查找方式。
find /tmp -size +200c -atime 1
在计算机语言里,使,or 分别表示“或”的关系。在Solaris系统的查找命令中一样通用。
还有这样的例子:
find / -user fre -or -user geoge
我们可以解释为在/tmp目录中查找属于fre或者geoge这两个用户的文件。
在find命令中还可以使用“非”的关系来查找文件,如果我们要在/tmp目录中查找所有不属于pand的文件,使用一个简单的命令
find /tmp ! -user pand
7. 查找并显示文件的方法
查找到某个文件是我们的目的,我们更想知道查找到的文件的详细信息和属性,如果我们采取现查找文件,在使用LS命令来查看文件信息是相当繁琐的,现在我们也可以把这两个命令结合起来使用。
find / -name " ssh_config " -ls
系统查找到ssh_config文件后立即在屏幕上显示ssh_config文件信息。如图4 。
图4查找并显示文件的方法
8 find命令其他应用假设您想要删除 home 目录中的大部分 .txt 文件,但希望能够逐个文件地执行该操作。像 UNIX 中的 rm 命令那样的删除操作是很危险的,因为当使用像 find 这样的自动化处理方式来查找文件时,它可能一不小心会删除重要的文件,您也许希望在删除这些系统查找到的文件之前对其进行仔细检查。下面的命令列出了您的 home 目录中所有的 .txt 文件。要删除这些文件,必须在 find 命令通过列出文件名提示您确认操作时输入 Y 或者 y: $ find $HOME/. -name *.txt -ok rm {} \; 它列出了查找到的每个文件,并且系统将暂停以等待您输入 Y 或者 y。如果您按下 Enter 键,系统将不会删除该文件。
您可以使用 find 命令来清除目录或子目录中在正常使用过程中生成的临时文件,这样可以节省磁盘空间。要实现该操作,请使用下面的命令: $ find . \( -name a.out -o -name '*.o' -o -name 'core' \) -exec rm {} \; 括号中的文件掩码 标识出了需要删除的文件类型,每个文件掩码的前面都有 -name。该列表可以扩展为包括您需要清除的系统中的任何临时文件类型。在代码的编译和连接过程中,程序员及其工具会生成示例中的那些文件类型:a.out、*.o 和 core。其他的用户通常也会生成类似的临时文件,可以使用如 *.tmp、*.junk 等文件掩码来对命令进行相应的编辑。find 命令允许您复制目录中的全部内容,同时保持每个文件和子目录的权限、时间和所有权。要完成该操作,需要组合使用 find 和 cpio命令。
9在文件中查找正文
grep 命令用来在文本文件中查找指定模式的词或短语,并在标准输出上显示包括给定字符串的所 有行。grep 命令语法为:
grep [选项] 查找模式 文件名 [文件名…]
默认情况下,grep 在查找模式时区分大、小写;如果不想加以区别,用选项 -i。 例如,以下命令将在 /etc/ssh/ 目录及其子目录下的所有文件中查找字符串“ForwardAgent”出现的次数,结果如图5 。
# grep ‘ForwardAgent’ /etc/ssh/*
图5在文件中查找正文
查找模式可能是唯一的参数,如果在模式中使用了 shell 元字符,通常要使用单引号(’)将其括起来。
10 使用GUI方法
Solaris 10的桌面JDS和CDE也包含GUI图像界面的查找文件的方法,使用方法非常简单,这里笔者就不赘述了。图7 和图6是查找的界面。
图6 在JDS中查找文件
图7 在CDE中查找文件
总结:到这里为止我们已经学习了这名多关于find和grep命令的使用方法,如果我们能熟练掌握在Solaris中find命令的使用方法,那么在Solaris中查找文件也不是一件困难的事情。 另外本文的思路也可以在Linux和其他版本的unix中使用。