感谢支持
我们一直在努力

Windows不能够完成的任务 Unix工具Find却可以

    Find无疑是Unix操作系统中功能最强大定位文件命令工具之一,其就好像是Windows操作系统中的文件搜索命令。如下图,是Windows操作系统中的文件搜索对话框。从图中可以看到,在Windows操作系统中,也可以通过各种选项来帮助系统工程师迅速定位文件。但是,在Unix操作系统中,Find命令不仅可以实现Window操作系统下所有的查找选项,还具有很多实用的参数。笔者今天就谈谈Unix操作系统下的Find命令可以采用哪些查询条件来完成Windows操作系统所不能够完成的查找任务。


  一、Find命令简介。


  Find命令是Unix操作系统中的一个文件定位命令。它主要是按照递归模式,搜索整棵目录树,并根据某个条件来查找相关的文件;并对找到的文件按一定的规则进行处理。从这个官方定义中,可以看到Find命令基本上包括三个部分的内容,分别为搜索的目录树(即目录,对应Window是操作系统中的从这里寻找)、查找条件、以及查到后所需要进行的操作。在Windows操作系统中,前面两部分内容也存在。但是在第三部分内容文件的处理上就相对来说薄弱一点。在Windows操作系统中对于找到的文件只是在终端中显示出来。但是在Unix操作系统中,不仅可以把找到的文件在终端中显示出来,而且还可以进行其它复杂的操作,如删除或者备份等等。


  另外,光从第二个部分即查找条件来讲,Find命令就比Windows操作系统下的查找命令参数要多的多。而且这些参数还很实用,可以帮助系统工程师迅速定位文件。这无论是在程序开发中又或者在系统维护中都有很大的价值。


  二、Find命令中Windows系统没有的实用查找条件。


  1、 按节点数来查找文件。


  在Unix操作系统中,有一种叫做硬连接的文件管理技术,其跟Windows操作系统中的快捷方式类似,但是本质上是不同的。如在硬盘中存储着一个文件,则在Unix操作系统中可以有多个指针指向这个文件,这个就是硬连接。这跟快捷方式是不同的。如现在有一个文件A,系统工程师在Windows操作系统下建立了一个快捷方式B。此时虽然也可以通过B打开文件A,但是B与A是两个不同的文件。在B中存储的是文件A的位置信息。但是如果在Unix操作系统中,如果文件A创建了一个硬连接B,则系统工程师也可以通过文件B来打开文件A。其实,此时这两个文件是同一个文件。在Unix操作系中,是通过节点数来管理文件的。一个文件具有一个节点数,不同的文件节点数则是不同的。为此文件A与文件B所对应的节点数是相同的。


    在Unix操作系统中规定,一个节点数如果有多个文件的话这个文件是不能够被删除的。故可以通过这个规则来防止重要文件被误删除。但是如果有时候系统工程师真的要删除这文件,但是又不知道这个文件到底保存在那些地方时,就需要用到这个Find命令。可以利用这个命令,根据文件的节点数来查找文件的位置。如利用命令find / -inum 12345 –print即可。其中参数-inum就表示以节点数来定位文件,后面的12345就是文件的实际节点数。在Windows操作系统中,则没有这个功能。

  2、 没有权限的目录会提示相关的错误信息。


  如在一个操作系统中有两个用户甲和乙,有一个文件夹“机密信息”,而在这个文件夹下有一个文件“员工工资”。在某个企业中,这个员工工资是保密的,其只有用户甲可以访问这个信息。在这种情况下,如果用户乙以“员工工资”为条件去查询这个文件时,Windows操作系统与Unix操作系统各有什么反应呢?通常情况下,Windows操作系统可能会有两种反应。一是会找到这个文件,但是打开的时候会提示错误信息。二是在终端上不会显示这个文件信息。这主要是根据文件系统中设置的安全措施有关。但是无论是哪一种处理方式,笔者认为不能够反应出实际的情况,即用户是否对这个文件夹具有权限。如系统找到了这个文件,但是用户乙还不知道自己是否对这文件或者目录具有阅读权限。而需要双击打开这个文件被拒绝时才会发现这个问题。举一个比较影像的例子,这就表示慢一拍了。即时找到了这个文件,用户乙也不能够对这个文件进行任何的操作,那么不是多此一举吗?而如果因为用户乙没有权限访问这个文件而在终端上不显示任何信息的话,那么也会对用户乙产生一个误解,以为没有这个文件。


  而在Unix操作系统中,则采用了不同的处理机制。当采用find命令发现当前用户对没某个目录没有权限的时候,系统就会停止查询,并返回错误信息。此时系统工程师一看到这个错误信息,就表示用户对这个目录权限不够。这看起来没有多大的差异,但是在编写脚本程序时却非常有用。如在找到文件的同时删除文件的一个脚本程序中,在Unix操作系统中执行效率会高的多。因为当系统发现这个目录用户权限不够时根本不会去多此一举的查询。故笔者认为Unix操作系统地这种处理机制会好一点。


  另外需要注意的是,有时候这类错误信息会很多,甚至影响到对查询结果的正常阅读。遇到这种情况的时候,系统工程师就需要通过重定向符号等命令把错误信息重定向到/dev/null文件中。这个文件的用途就是会被所有本来输出到屏幕上的错误信息重定向到这个文件。如此的话,错误信息就不会显示在屏幕上,以简化系统工程师的阅读。此时起到的效果就是跟Windows操作系统的效果类似。但是需要清楚,此时错误信息仍然存在,此时被过滤掉了。为此在编写应用程序的时候,仍然可以利用这些错误信息。从这一点来说,笔者就认为find要比Windows中的查找命令灵活的多。


  3、 根据文件的所有者来查找文件。


  如果企业现在电脑需要升级换代,要给所有的经理使用笔记本电脑。那么原来经理换下来的电脑可能会给下面的员工使用。或者说由于员工的离职或者调动,员工也需要更换电脑。此时就会引发一个需求,要根据文件的所有者或者文件的组所有者来查询文件。以方便把某个员工的文件或者目录全部删除或者剪贴到其他主机上。要实现这个需求的话,Windows操作系统可能会无能为力。因为在Window系统中,没有类似的管理机制,无法通过系统自带的搜索命令来查找文件或者目录的所有者。


  而在Unix操作系统中,每一个普通文件或者目录文件都具有对应的文件所有者与组所有者信息,这些内容都被保存在节点文件中。为此系统工程师就可以通过文件作有者或者组所有者信息来查找文件。如向上面的这个例子中,就可以输入查询条件“所有者”,并把文件类型制定为“目录文件”,即可以把这个属于这个用户的所有目录找到,然后进行相关的操作。显然这个功能对于系统工程师进行系统之间的移植有很大的帮助。


  4、 根据权限来定位文件。


  无论是Windwos操作系统还是Unix操作系统,都是多用户多任务的操作系统,允许在一个操作系统中建立多个用户,并从安全上考虑为不同的用户创建不同的权限。但是如果系统工程师出于安全的安全,对操作系统进行安全审核,需要找出所有用户都具有完全控制权限的文件,并加以整改。也就是说,需要利用操作系统的搜索功能,找出所有用户都有权删除、修改、执行的文件。在Windows操作系统下,是无法通过搜索工具找出这些文件的。


  但是在Unix操作系统中,则可以借助-perm可选项来匹配文件的权限。如-perm 666就表示文件的权限为所有的用户都可以读写。这些文件往往具有一定的安全隐患。为此系统工程师需要把这些文件一个不漏的找出来,并进行权限的调整,以提高这些文件的安全性。


  可见Find命令的功能很强大,但是通过各种参数来控制也显得这个命令很复杂。如有大量的查找条件可以匹配文件;而且还可以采用大量的动作来处理被找到的文件。不过系统工程师必须掌握这个命令,因为这是其维护系统、在Unix操作系统上进行编程的基础。所以说这个难关的话,系统工程师一定要攻克。由于系统工程师可能对Windows操作系统的图形化搜索界面比较熟悉,为此就可以通过两个操作系统对比的方式来学习,可能会达到事半功倍的效果。

赞(0) 打赏
转载请注明出处:服务器评测 » Windows不能够完成的任务 Unix工具Find却可以
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏