前往顾页
以后地位: 主页 > 精通Office > Ubuntu教程 >

UNIX 妙手的 20 个习惯

时候:2011-11-03 21:04来源:知行网www.zhixing123.cn 编辑:麦田守望者

不良的利用形式会降落您的速率,并且凡是会导致不测错误。养成这些好习惯是加强您的 UNIX 号令行技术的主动步调。

Unix 下要采取的20个好习惯为:

1) 在单个号令中建立目次树。

2) 变动途径;不要挪动存档。

3) 将号令与节制操纵符组合利用。

4) 谨慎援引变量。

5) 利用转义序列来办理较长的输入。


6) 在列表中对号令分组。

7) 在 find 以外利用 xargs 。

8) 体味甚么时候 grep 应当履行计数——甚么时候应当绕过。

9) 婚配输入中的某些字段,而不但是对行进行婚配。

10) 停止对 cat 利用管道。

11) 利用文件名主动完成服从 (file name completion)。

12) 利用汗青扩展。

13) 重用之前的参数。

14) 利用 pushd 和 popd 办理目次导航。

15) 查找年夜型文件。

16) 不利用编辑器建立临时文件。

17) 利用 curl 号令行合用东西。

18) 最有效地操纵正则表达式。

19) 肯定以后用户。

20) 利用 awk 措置数据。

1. 在单个号令中建立目次树

清单 1 演示了最多见的 UNIX 坏习惯之一:一次定义一个目次树。

清单 1. 坏习惯 1 的示例:伶仃定义每个目次树

~ $ mkdir tmp

~ $ cd tmp

~/tmp $ mkdir a

~/tmp $ cd a

~/tmp/a $ mkdir b

~/tmp/a $ cd b

~/tmp/a/b/ $ mkdir c

~/tmp/a/b/ $ cd c

~/tmp/a/b/c $

利用 mkdir 的 -p 选项并在单个号令中建立所有父目次及其子目主要容易很多。但是即便对晓得此选项的办理员,他们在号令行上建立子目次时也仍然束厄局促于慢慢建立每级子目次。花时候成心识地养成这个好习惯是值得的.

清单 2. 好习惯 1 的示例:利用一个号令来定义目次树

~ $ mkdir -p tmp/a/b/c

您可利用此选项来建立全部复杂的目次树(在脚本中利用是非常抱负的),而不但是建立简朴的层次布局。

清单 3. 好习惯 1 的另外一个示例:利用一个号令来定义复杂的目次树

~ $ mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}

畴昔,伶仃定义目次的独一借口是您的 mkdir 实现不支撑此选项,但是在年夜多数体系上不再是如许了。IBM、AIX®、mkdir、GNU mkdir 和其他遵循单一 UNIX 标准 (Single UNIX Specification) 的体系现在都具有此选项。

对仍然贫乏该服从的多数体系,您可利用 mkdirhier 脚本(请拜见参考质料),此脚本是履行不异服从的 mkdir 的包装:

~ $ mkdirhier project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}

2. 变动途径;不要挪动存档

另外一个不良的利用形式是将 .tar 存档文件挪动到某个目次,因为该目次刚好是您希望在此中提取 .tar 文件的目次。其实您底子不需求如许做。您可以随心所欲地将任何 .tar 存档文件解紧缩就任何目次——这就是 -C 选项的用处。在解紧缩某个存档文件时,利用 -C 选项来指定要在此中解紧缩该文件的目次:

清单 4. 好习惯 2 的示例:利用选项 -C 来解紧缩 .tar 存档文件

~ $ tar xvf -C tmp/a/b/c newarc.tar.gz

相对将存档文件挪动到您希望在此中解紧缩它的地位,切换到该目次,然后才解紧缩它,养成利用 -C 的习惯则更加可取——当存档文件位于其他某个地位时特别如此。

3. 将号令与节制操纵符组合利用

您可能已晓得,在年夜多数 Shell 中,您可以在单个号令行上经由过程在号令之间安排一个分号 (;) 来组合号令。该分号是 Shell 节制操纵符,固然它对在单个号令行大将团圆的号令串连起来很有效,但它其实不合用于所有环境。比方,假定您利用分号来组合两个号令,此中第二个号令的精确履行完整依靠于第一个号令的成功完成。如果第一个号令未按您预期的那样加入,第二个号令仍然会运行——成果会导致失败。相反,应当利用更恰当的节制操纵符(本文将描述此中的部分操纵符)。只需您的 Shell 支撑它们,就值得养成利用它们的习惯。

3.1 仅当另外一个号令前往零加入状况时才运行某个号令

利用 && 节制操纵符来组合两个号令,以便仅当 第一个号令前往零加入状况时才运行第二个号令。换句话说,如果第一个号令运行成功,则第二个号令将运行。如果第一个号令失败,则第二个号令底子就不运行。比方:

清单 5. 好习惯 3 的示例:将号令与节制操纵符组合利用

~ $ cd tmp/a/b/c && tar xvf ~/archive.tar

在此例中,存档的内容将提取到 ~/tmp/a/b/c 目次中,除非该目次不存在。如果该目次不存在,则 tar 号令不会运行,是以不会提取任何内容。

3.2 仅当另外一个号令前往非零加入状况时才运行某个号令

近似地,|| 节制操纵符分开两个号令,并且仅当第一个号令前往非零加入状况时才运行第二个号令。换句话说,如果第一个号令成功,则第二个号令不会运行。如果第一个号令失败,则第二个号令才会 运行。在测试某个给定目次是不是存在时,凡是利用此操纵符,如果该目次不存在,则建立它:

清单 6. 好习惯 3 的另外一个示例:将号令与节制操纵符组合利用

~ $ cd tmp/a/b/c || mkdir -p tmp/a/b/c

您还可以组合利用本部分中描述的节制操纵符。每个操纵符都影响最后的号令运行:

清单 7. 好习惯 3 的组合示例:将号令与节制操纵符组合利用

~ $ cd tmp/a/b/c || mkdir -p tmp/a/b/c && tar xvf -C tmp/a/b/c ~/archive.tar

4. 谨慎援引变量

始终要谨慎利用 Shell 扩展和变量称呼。一般最好将变量调用包含在双引号中,除非您有不如许做的充足来由。近似地,如果您直接在字母数字文本前面利用变量称呼,则还要确保将该变量称呼包含在方括号 ([]) 中,以使其与四周的文本辨别隔来。不然,Shell 将把尾随文本解释为变量称呼的一部分——并且很可能前往一个空值。清单 8 供应了变量的各种援引和非援引及其影响的示例。

清单 8. 好习惯 4 的示例:援引(和非援引)变量

~ $ ls tmp/

a b

~ $ VAR=”tmp/*”

~ $ echo $VAR

tmp/a tmp/b

~ $ echo “$VAR”

tmp/*

~ $ echo $VARa

~ $ echo “$VARa”

~ $ echo “${VAR}a”

tmp/*a

~ $ echo ${VAR}a

tmp/a

~ $

5. 利用转义序列来办理较长的输入

您或许看到过利用反斜杠 (\) 来将较长的行持续到下一行的代码示例,并且您晓得年夜多数 Shell 都将您经由过程反斜杠连接的后续行上键入的内容视为单个长行。但是,您可能没有在号令行中像凡是那样操纵此服从。如果您的终端无法精确措置多行缭绕,或您的号令行比凡是小(比方在提示符下有长路经的时候),反斜杠就特别有效。反斜杠对体味键入的长输入行的含义也非常有效,如以下示例所示:
清单 9. 好习惯 5 的示例:将反斜杠用于长输入

~ $ cd tmp/a/b/c || \

> mkdir -p tmp/a/b/c && \

> tar xvf -C tmp/a/b/c ~/archive.tar

或,也可利用以下建设:
清单 10. 好习惯 5 的替代示例:将反斜杠用于长输入

~ $ cd tmp/a/b/c \

> || \

> mkdir -p tmp/a/b/c \

> && \

> tar xvf -C tmp/a/b/c ~/archive.tar

但是,当您将输入行分别到多行上时,Shell 始终将其视为单个持续的行,因为它老是删除所有反斜杠和分外的空格。

重视:在年夜多数 Shell 中,当您按向上箭头键时,全部多行输入将重绘到单个长输入行上。

6. 在列表中对号令分组

年夜多数 Shell 都具有在列表中对号令分组的体例,以便您能将它们的算计输入向下通报到某个管道,或将其任何部分或全数流重定向到不异的处所。您一般可以经由过程在某个 Subshell 中运行一个号令列表或经由过程在以后 Shell 中运行一个号令列表来实现此目标。

6.1 在 Subshell 中运行号令列表

利用括号将号令列表包含在单个组中。如许做将在一个新的 Subshell 中运行号令,并许可您重定向或汇集整组号令的输入,如以下示例所示:
清单 11. 好习惯 6 的示例:在 Subshell 中运行号令列表

~ $ ( cd tmp/a/b/c/ || mkdir -p tmp/a/b/c && \

> VAR=$PWD; cd ~; tar xvf -C $VAR archive.tar ) \

> | mailx admin -S “Archive contents”

在此示例中,该存档的内容将提取到 tmp/a/b/c/ 目次中,同时将分组号令的输入(包含所提取文件的列表)经由过程邮件发送到地点 admin。

当您在号令列表中从头定义环境变量,并且您不希望将那些定义利用于以后 Shell 时,利用 Subshell 更可取。

6.2 在以后 Shell 中运行号令列表

将号令列表用年夜括号 ({}) 括起来,以在以后 Shell 中运行。确保在括号与实际号令之间包含空格,不然 Shell 可能无法精确解释括号。别的,还要确保列表中的最后一个号令以分号末端,如以下示例所示:
清单 12. 好习惯 6 的另外一个示例:在以后 Shell 中运行号令列表

~ $ { cp ${VAR}a . && chown -R guest.guest a && \

> tar cvf newarchive.tar a; } | mailx admin -S “New archive”

7. 在 find 以外利用 xargs

利用 xargs 东西作为遴选器,以充分操纵从 find 号令遴选的输入。find 运行凡是供应与某些前提婚配的文件列表。此列表被通报到 xargs 上,后者然后利用该文件列表作为参数来运行其他某些有效的号令,如以下示例所示:
清单 13. xargs 东西的典范用法示例

~ $ find some-file-criteria some-file-path | \

> xargs some-great-command-that-needs-filename-arguments

------分开线----------------------------
标签(Tag):Linux 操纵体系
------分开线----------------------------
保举内容
猜你感兴趣