首页 02使用find和xargs

02使用find和xargs

举报
开通vip

02使用find和xargs 下载 第2章 使用find和xargs 有时可能需要在系统中查找具有某一特征的文件 (例如文件权限、文件属主、文件长度、 文件类型等等 )。这样做可能有很多原因。可能出于安全性的考虑,或是一般性的系统管理任 务,或许只是为了找出一个不知保存在什么地方的文件。 F i n d是一个非常有效的工具,它可 以遍历当前目录甚至于整个文件系统来查找某些文件或目录。 在本章中,我们介绍以下内容: • find命令选项。 • 使用f i n d命令不同选项的例子。 • 配合f i n d使用x a rg s命...

02使用find和xargs
下载 第2章 使用find和xargs 有时可能需要在系统中查找具有某一特征的文件 (例如文件权限、文件属主、文件长度、 文件类型等等 )。这样做可能有很多原因。可能出于安全性的考虑,或是一般性的系统管理任 务,或许只是为了找出一个不知保存在什么地方的文件。 F i n d是一个非常有效的工具,它可 以遍历当前目录甚至于整个文件系统来查找某些文件或目录。 在本章中,我们介绍以下内容: • find命令选项。 • 使用f i n d命令不同选项的例子。 • 配合f i n d使用x a rg s命令的例子。 由于f i n d具有如此强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间 来了解一下。即使系统中含有网络文件系统 ( N F S ),f i n d命令在该文件系统中同样有效,只要 你具有相应的权限。 在运行一个非常消耗资源的 f i n d命令时,很多人都倾向于把它放在后台执行,因为遍历一 个大的文件系统可能会花费很长的时间 (这里是指3 0 G字节以上的文件系统 )。 F i n d命令的一般形式为: f ind pathname -opt ions [ -pr int -exec -ok] 让我们来看看该命令的参数: pathname find命令所查找的目录路径。例如用 .来表示当前目录,用 /来表示系统根目录。 -print find命令将匹配的文件输出到 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 输出。 -exec find命令对匹配的文件执行该参数所给出的 s h e l l命令。相应命令的形式为 ' c o m m - and' {} \;,注意{ }和\;之间的空格。 -ok 和- e x e c的作用相同,只不过以一种更为安全的模式来执行该参数所给出的 s h e l l命令, 在执行每一个命令之前,都会给出提示,让用户来确定是否执行。 2.1 find命令选项 f i n d命令有很多选项或表达式,每一个选项前面跟随一个横杠 -。让我们先来看一下该命 令的主要选项,然后再给出一些例子。 -name 按照文件名查找文件。 -perm 按照文件权限来查找文件。 -prune 使用这一选项可以使 f i n d命令不在当前指定的目录中查找,如果同时使用了 - d e p t h 选项,那么 - p r u n e选项将被f i n d命令忽略。 -user 按照文件属主来查找文件。 -group 按照文件所属的组来查找文件。 -mtime -n +n 按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n 表示文件更改时间距现在n天以前。F i n d命令还有- a t i m e和- c t i m e选项,但它们都和 - m t i m e选项 相似,所以我们在这里只介绍 - m t i m e选项。 -nogroup 查找无有效所属组的文件,即该文件所属的组在 / e t c / g r o u p s中不存在。 -nouser 查找无有效属主的文件,即该文件的属主在 / e t c / p a s s w d中不存在。 -newer file1 ! file2 查找更改时间比文件 f i l e 1新但比文件 f i l e 2旧的文件。 -type 查找某一类型的文件,诸如: b - 块设备文件。 d - 目录。 c - 字符设备文件。 p - 管道文件。 l - 符号链接文件。 f - 普通文件。 -size n[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。 -depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。 -fstype 查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件 / e t c / f s t a b中找到,该配置文件中包含了本系统中有关文件系统的信息。 -mount 在查找文件时不跨越文件系统 m o u n t点。 -follow 如果f i n d命令遇到符号链接文件,就跟踪至链接所指向的文件。 -cpio 对匹配的文件使用c p i o命令,将这些文件备份到磁带设备中。 2.1.1 使用name选项 文件名选项是 f i n d命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用。 可以使用某种文件名模式来匹配文件,记住要用引号将文件名模式引起来。 不管当前路径是什么,如果想要在自己的根目录 $ H O M E中查找文件名符合 * . t x t的文件, 使用~作为' p a t h n a m e参数,波浪号~代表了你的$ H O M E目录。 $ f ind ~ -name "*. txt" -pr int 想要在当前目录及子目录中查找所有的‘ * . t x t’文件,可以用: $ f ind . -name "*.txt" -pr int 想要的当前目录及子目录中查找文件名以一个大写字母开头的文件,可以用: $ f ind . -name "[A-Z]*" -pr int 想要在/ e t c目录中查找文件名以h o s t开头的文件,可以用: $ f ind /etc -name "host*" -pr int 想要查找$ H O M E目录中的文件,可以用: $ f ind ~ -name "*" -pr int 或f ind . -pr int 要想让系统高负荷运行,就从根目录开始查找所有的文件。如果希望在系统管理员那里 保留一个好印象的话,最好在这么做之前考虑清楚! $ f ind / -name "*" -pr int 如果想在当前目录查找文件名以两个小写字母开头,跟着是两个数字,最后是 * . t x t的文 件,下面的命令就能够返回名为 a x 3 7 . t x t的文件: 第2章 使用f i n d和x a rg s 15 下载 $ f ind . -name "[a-z][a-z][0- -9][0- -9] . txt" -pr int 2.1.2 使用perm选项 如果希望按照文件权限模式来查找文件的话,可以采用 - p e r m选项。你可能需要找到所有 用户都具有执行权限的文件,或是希望查看某个用户目录下的文件权限类型。在使用这一选 项的时候,最好使用八进制的权限表示法。 为了在当前目录下查找文件权限位为 7 5 5的文件,即文件属主可以读、写、执行,其他用 户可以读、执行的文件,可以用: $ f ind . -perm 755 -pr int 如果希望在当前目录下查找所有用户都可读、写、执行的文件(要小心这种情况),我们 可以使用 f i n d命令的 - p e r m选项。在八进制数字前面要加一个横杠 -。在下面的命令中 - p e r m代 表按照文件权限查找,而‘0 0 7’和你在c h m o d命令的绝对模式中所采用的表示法完全相同。 $ f ind . -perm -007 -pr int 2.1.3 忽略某个目录 如果在查找文件时希望忽略某个目录,因为你知道那个目录中没有你所要查找的文件, 那么可以使用 - p r u n e选项来指出需要忽略的目录。在使用 - p r u n e选项时要当心,因为如果你同 时使用了- d e p t h选项,那么 - p r u n e选项就会被 f i n d命令忽略。 如果希望在 / a p p s目录下查找文件,但不希望在 / a p p s / b i n目录下查找,可以用: $ f ind /apps -name " /apps/bin" -prune -o -pr int 2.1.4 使用user和nouser选项 如果希望按照文件属主查找文件,可以给出相应的用户名。例如,在 $ H O M E目录中查找 文件属主为d a v e的文件,可以用: $ f ind ~ -user dave -pr int 在/ e t c目录下查找文件属主为u u c p的文件: $ f ind /etc -user uucp -pr int 为了查找属主帐户已经被删除的文件,可以使用 - n o u s e r选项。这样就能够找到那些属主 在/ e t c / p a s s w d文件中没有有效帐户的文件。在使用 - n o u s e r选项时,不必给出用户名; f i n d命令 能够为你完成相应的工作。例如,希望在 / h o m e目录下查找所有的这类文件,可以用: $ f ind /home -nouser -pr int 2.1.5 使用group和nogroup选项 就像u s e r和n o u s e r选项一样,针对文件所属于的用户组, f i n d命令也具有同样的选项,为 了在/ a p p s目录下查找属于a c c t s用户组的文件,可以用: $ f ind /apps -group accts -pr int 要查找没有有效所属用户组的所有文件,可以使用 n o g r o u p选项。下面的 f i n d命令从文件 系统的根目录处查找这样的文件 $ f ine/-nogroup-pr int 16 第一部分 shell 下载 2.1.6 按照更改时间查找文件 如果希望按照更改时间来查找文件,可以使用 m t i m e选项。如果系统突然没有可用空间了, 很有可能某一个文件的长度在此期间增长迅速,这时就可以用 m t i m e选项来查找这样的文件。 用减号-来限定更改时间在距今 n日以内的文件,而用加号 +来限定更改时间在距今 n日以前的 文件。 希望在系统根目录下查找更改时间在 5日以内的文件,可以用: $ f ind / -mt ime -5 -pr int 为了在/ v a r / a d m目录下查找更改时间在3日以前的文件,可以用: $ f ind /var/adm -mtime +3 -pr int 2.1.7 查找比某个文件新或旧的文件 如果希望查找更改时间比某个文件新但比另一个文件旧的所有文件,可以使用 - n e w e r选 项。它的一般形式为: newest_f i le_name ! o ldest_f i le_name 其中,!是逻辑非符号。 这里有两个文件,它们的更改时间大约相差两天。 下面给出的 f i n d命令能够查找更改时间比文件 a g e . a w k新但比文件b e l t s . a w k旧的文件: 如果想使用 f i n d命令的这一选项来查找更改时间在两个小时以内的文件,除非有一个现成 的文件其更改时间恰好在两个小时以前,否则就没有可用来比较更改时间的文件。为了解决 这一问题,可以首先创建一个文件并将其日期和时间戳设置为所需要的时间。这可以用 t o u c h 命令来实现。 假设现在的时间是 2 3 : 4 0,希望查找更改时间在两个小时以内的文件,可以首先创建这样 一个文件: 一个符合要求的文件已经被创建;这里我们假设今天是五月四日,而该文件的更改时间 是2 1 : 4 0,比现在刚好早两个小时。 现在我们就可以使用 f i n d命令的- n e w e r选项在当前目录下查找所有更改时间在两个小时以 内的文件: $ f ind . -newer dstamp -pr int 2.1.8 使用type选项 U N I X或L I N U X系统中有若干种不同的文件类型,这部分内容我们在前面的章节已经做了 第2章 使用f i n d和x a rg s 17 下载 介绍,这里就不再赘述。如果要在 / e t c目录下查找所有的目录,可以用: $ f ind /etc - type d -pr int 为了在当前目录下查找除目录以外的所有类型的文件,可以用: $ f ind . ! - type d -pr int 为了在/ e t c目录下查找所有的符号链接文件,可以用: $ f ind /etc - type l -pr int 2.1.9 使用size选项 可以按照文件长度来查找文件,这里所指的文件长度既可以用块( b l o c k)来计量,也可 以用字节来计量。以字节计量文件长度的表达形式为 N c;以块计量文件长度只用数字表示即 可。 就我个人而言,我总是使用以字节计的方式,在按照文件长度查找文件时,大多数人都 喜欢使用这种以字节表示的文件长度,而不用块的数目来表示,除非是在查看文件系统的大 小,因为这时使用块来计量更容易转换。 为了在当前目录下查找文件长度大于 1 M字节的文件,可以用: $ f ind . -s ize +1000000c -pr int 为了在/ h o m e / a p a c h e目录下查找文件长度恰好为1 0 0字 个人自传范文3000字为中华之崛起而读书的故事100字新时代好少年事迹1500字绑架的故事5000字个人自传范文2000字 节的文件,可以用: $ f ind /home/apache -s ize 100c -pr int 为了在当前目录下查找长度超过 1 0块的文件(一块等于5 1 2字节),可以用: $ f ind . -s ize +10 -pr int 2.1.10 使用depth选项 在使用 f i n d命令时,可能希望先匹配所有的文件,再在子目录中查找。使用 d e p t h选项就 可以使f i n d命令这样做。这样做的一个原因就是,当在使用 f i n d命令向磁带上备份文件系统时, 希望首先备份所有的文件,其次再备份子目录中的文件。 在下面的例子中, f i n d命令从文件系统的根目录开始,查找一个名为 C O N . F I L E的文件。 它将首先匹配所有的文件然后再进入子目录中查找。 $ f ind / -name "CON.FILE" -depth -pr int 2.1.11 使用mount选项 在当前的文件系统中查找文件(不进入其他文件系统),可以使用 f i n d命令的m o u n t选项。 在下面的例子中,我们从当前目录开始查找位于本文件系统中文件名以 X C结尾的文件: $ f ind . -name "* .XC" -mount -pr int 2.1.12 使用cpio选项 c p i o命令可以用来向磁带设备备份文件或从中恢复文件。可以使用 f i n d命令在整个文件系 统中(更多的情况下是在部分文件系统中)查找文件,然后用 c p i o命令将其备份到磁带上。 如果希望使用 c p i o命令备份 / e t c、/ h o m e和/ a p p s目录中的文件,可以使用下面所给出的命 令,不过要记住你是在文件系统的根目录下: 18 第一部分 shell 下载 (在上面的例子中,第一行末尾的 \告诉s h e l l命令还未结束,忽略 \后面的回车。) 在上面的例子中,应当注意到路径中缺少 /。这叫作相对路径。之所以使用相对路径,是 因为在从磁带中恢复这些文件的时候,可以选择恢复文件的路径。例如,可以将这些文件先 恢复到另外一个目录中,对它们进行某些操作后,再恢复到原始目录中。如果在备份时使用 了绝对路径,例如 / e t c,那么在恢复时,就只能恢复到 / e t c目录中去,别无其他选择。在上面 的例子中,我告诉 f i n d命令首先进入 / e t c目录,然后是 / h o m e和/ a p p s目录,先匹配这些目录下 的文件,然后再匹配其子目录中的文件,所有这些结果将通过管道传递给 c p i o命令进行备份。 顺便说一下,在上面的例子中 c p i o命令使用了C 6 5 5 3 6选项,我本可以使用B选项,不过这 样每块的大小只有 5 1 2字节,而使用了 C 6 5 5 3 6选项后,块的大小变成了 6 4 K字节 (6 5 5 3 6 / 1 0 2 4)。 2.1.13 使用exec或ok来执行shell命令 当匹配到一些文件以后,可能希望对其进行某些操作,这时就可以使用 - e x e c选项。一旦 f i n d命令匹配到了相应的文件,就可以用 - e x e c选项中的命令对其进行操作(在有些操作系统 中只允许- e x e c选项执行诸如 l s或ls -l这样的命令)。大多数用户使用这一选项是为了查找旧文 件并删除它们。这里我强烈地建议你在真正执行 r m命令删除文件之前,最好先用 l s命令看一 下,确认它们是所要删除的文件。 e x e c选项后面跟随着所要执行的命令,然后是一对儿 { },一个空格和一个 \,最后是一个 分号。 为了使用e x e c选项,必须要同时使用 p r i n t选项。如果验证一下 f i n d命令,会发现该命令只 输出从当前路径起的相对路径及文件名。 为了用ls -l命令列出所匹配到的文件,可以把 ls -l命令放在f i n d命令的- e x e c选项中,例如: 上面的例子中, f i n d命令匹配到了当前目录下的所有普通文件,并在 - e x e c选项中使用 ls -l 命令将它们列出。 为了在/ l o g s目录中查找更改时间在5日以前的文件并删除它们,可以用: $ f ind logs - type f -mt ime +5 -exec rm {} \ ; 记住,在s h e l l中用任何方式删除文件之前,应当先查看相应的文件,一定要小心! 当使用诸如m v或r m命令时,可以使用 - e x e c选项的安全模式。它将在对每个匹配到的文件 进行操作之前提示你。在下面的例子中, f i n d命令在当前目录中查找所有文件名以 . L O G结尾、 更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示。 按y键删除文件,按n键不删除。 任何形式的命令都可以在 - e x e c选项中使用。在下面的例子中我们使用 g r e p命令。f i n d命令 第2章 使用f i n d和x a rg s 19 下载 首先匹配所有文件名为“ p a s s w d *”的文件,例如p a s s w d、p a s s w d . o l d、p a s s w d . b a k,然后执 行g r e p命令看看在这些文件中是否存在一个 r o u n d e r用户。 2.1.14 find命令的例子 我们已经介绍了 f i n d命令的基本选项,下面给出 f i n d命令的一些其他的例子。 为了匹配$ H O M E目录下的所有文件,下面两种 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 都可以使用: $ f ind $HOME -pr int $ f ind ~ -pr int 为了在当前目录中查找 s u i d置位,文件属主具有读、写、执行权限,并且文件所属组的用 户和其他用户具有读和执行的权限的文件,可以用: $ f ind . - type f -perm 4755 -pr int 为了查找系统中所有文件长度为 0的普通文件,并列出它们的完整路径,可以用: $ f ind / - type f -s ize 0 -exec ls - l {} \ ; 为了查找/ v a r / l o g s目录中更改时间在7日以前的普通文件,并删除它们,可以用: $ f ind /var/ logs - type f -mt ime +7 -exec rm {} \ ; 为了查找系统中所有属于a u d i t组的文件,可以用: $f ind / -name -group audi t -pr int 我们的一个审计系统每天创建一个审计日志文件。日志文件名的最后含有数字,这样我 们一眼就可以看出哪个文件是最新的,哪个是最旧的。 A d m i n . l o g文件编上了序号: a d m i n . l o g . 0 0 1、a d m i n . l o g . 0 0 2等等。下面的 f i n d命令将删除 / l o g s目录中访问时间在 7日以前、 含有数字后缀的a d m i n . l o g文件。该命令只检查三位数字,所以相应日志文件的后缀不要超过 9 9 9。 $ f ind / logs -name 'admin. log[0-9][0-9][0-9] ' -at ime +7 -exec rm {} \ ; 为了查找当前文件系统中的所有目录并排序,可以用: $ f ind . - type d -pr int - loca l -mount |sort 为了查找系统中所有的 r m t磁带设备,可以用: $ f ind /dev/rmt -pr int 2.2 xargs 在使用f i n d命令的- e x e c选项处理匹配到的文件时, f i n d命令将所有匹配到的文件一起传递 给e x e c执行。不幸的是,有些系统对能够传递给 e x e c的命令长度有限制,这样在 f i n d命令运行 几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是 x a rg s命令的用处所在,特别是与 f i n d命令一起使用。 F i n d命令把匹配到的文件传递给 x a rg s命 令,而x a rg s命令每次只获取一部分文件而不是全部,不像 - e x e c选项那样。这样它可以先处理 最先获取的一部分文件,然后是下一批,并如此继续下去。在有些系统中,使用 - e x e c选项会 为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次 执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;而使用 20 第一部分 shell 下载 x a rg s命令则只有一个进程。另外,在使用 x a rg s命令时,究竟是一次获取所有的参数,还是分 批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参 数来确定。 让我们来看看x a rg s命令是如何同f i n d命令一起使用的,并给出一些例子。 下面的例子查找系统中的每一个普通文件,然后使用 x a rg s命令来测试它们分别属于哪类 文件: 下面的例子在整个系统中查找内存信息转储文件 (core dump),然后把结果保存到 /tmp/core.log 文件中: $ f ind . -name "core" -pr int | xargs echo "" >/tmp/core. log 下面的例子在 / a p p s / a u d i t目录下查找所有用户具有读、写和执行权限的文件,并收回相应 的写权限: $ f ind /apps/audit -perm -7 -pr int | xargs chmod o-w 在下面的例子中,我们用g r e p命令在所有的普通文件中搜索 d e v i c e这个词: $ f ind / - type f -pr int | xargs grep "device" 在下面的例子中,我们用g r e p命令在当前目录下的所有普通文件中搜索 D B O这个词: $ f ind . -name \ *- type f -pr int | xargs grep "DBO" 注意,在上面的例子中, \用来取消f i n d命令中的*在s h e l l中的特殊含义。 2.3 小结 f i n d命令是一个非常优秀的工具,它可以按照用户指定的准则来匹配文件。使用 e x e c和 x a rg s可以使用户对所匹配到的文件执行几乎所有的命令。 第2章 使用f i n d和x a rg s 21 下载 第2 章使用find 和xargs 2.1 find 命令选项 2.1.1 使用name 选项 2.1.2 使用perm 选项 2.1.3 忽略某个目录 2.1.4 使用user 和nouser 选项 2.1.5 使用group 和nogroup 选项 2.1.6 按照更改时间查找文件 2.1.7 查找比某个文件新或旧的文件 2.1.8 使用type 选项 2.1.9 使用size 选项 2.1.10 使用depth 选项 2.1.11 使用mount 选项 2.1.12 使用cpio 选项 2.1.13 使用exec 或ok 来执行shell 命令 2.1.14 find 命令的例子 2.2 xargs 2.3 小结
本文档为【02使用find和xargs】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_971233
暂无简介~
格式:pdf
大小:261KB
软件:PDF阅读器
页数:0
分类:互联网
上传时间:2012-03-21
浏览量:11