Linux命令速查手册(第2版)[美]ScottGranneman著石磊译北京AuthorizedtranslationfromtheEnglishlanguageedition,entitledLinuxPhrasebook,SecondEdition,978-0-321-83388-4byScottGranneman,publishedbyPearsonEducation,Inc,publishingasAddisionWesley,Copyright©2016.Allrightsreserved.Nopartofthisbookmaybereproducedortransmittedinanyformorbyanymeans,electronicormechanical,includingphotocopying,recordingorbyanyinformationstorageretrievalsystem,withoutpermissionfromPearsonEducation,Inc.CHINESESIMPLIFIEDlanguageeditionpublishedbyPEARSONEDUCATIONASIALTD.,andTSINGHUAUNIVERSITYPRESSCopyright©2017.北京市版权局著作权合同登记号图字:01-2016-4527本书封面贴有PearsonEducation(培生教育出版集团)防伪标签,无标签者不得销售。版权所有,侵权必究。侵权举报电话:010-6278298913701121933图书在版编目(CIP)数据Linux命令速查手册(第2版)/(美)斯科特·格兰尼曼(ScottGranneman)著;石磊译.—北京:清华大学出版社,2017书名原文:LinuxPhrasebook,SecondEditionISBN978-7-302-45968-2.ⅠL①….Ⅱ①斯…②石….ⅢLinux①操作系统-技术手册.ⅣTP316.85①-62中国版本图书馆CIP数据核字(2016)第300522号责任编辑:王军韩宏志装帧设计:牛艳敏责任校对:曹阳责任印制:出版发行:清华大学出版社网址:,地址:北京清华大学学研大厦A座邮编:100084社总机:010-62770175邮购:010-62786544投稿与读者服务:010-62776969,c-service@tup.tsinghua.edu.cn质量反馈:010-62772015,zhiliang@tup.tsinghua.edu.cn印刷者:装订者:经销:全国新华书店开本:110mm×188mm印张:16.25字数:355千字版次:2017年1月第1版印次:2017年1月第1次印刷印数:1~3000定价:59.80元—————————————————————————产品编号:在实际地深入探究bashshell之前,首先需要理解一些概念,这些概念有助于你继续在本书中的知识海洋中遨游。你完全有必要理解这些概念,而其中一些概念并不容易解读。但在理解这些概念之后,你的shell行为就将更有针对性。1.1一切皆文件在Linux系统中,一切皆文件——这里的一切首先指代明显看起来是文件的对象。文本文档当然是文件,OpenOffice.org文档也是文件。我们还不第Ⅰ部分入门4能忘记图片、MP3和视频,它们也是文件。这一点确定无疑!但目录是什么?目录也是文件,不过是特殊类型的文件,包含有关其他文件的信息。磁盘驱动器则是真正庞大的文件。网络连接和硬盘设备都是文件,甚至运行中的进程也是文件,它们都以文件的形式表示出来。对于Linux来说,文件仅是位和字节流。Linux不关心这些位和字节构成了什么对象;只有在Linux上运行的程序才关注这一点。在Linux中,文本文档和网络连接都是文件;文本编辑器知道如何操作文本文档,而互联网应用程序可识别网络连接。本书通篇都会提到文件。你可在适当情况下将文件任意解读为“文件、目录、子目录和系统上的其他所有对象”。特别是,本书中介绍的许多命令都同等作用于文档和目录,因此可自由地在这些对象上测试命令。注意:严格来说,“一切皆文件”并不完全正确。LinuxTorvalds指出,更准确的表述应是“一切皆字节流”。关于此概念的更多信息,请参见维基文章Everythingisafile,网址为,以及How-ToGeek的“‘一切皆文件’在Linux中的含义(What‘EverythingIsaFile’MeansonLinux),网址为第1章需要了解的命令行相关事项5117939/htg-explains-what-everything-is-a-file-means-on-linux/。1.2文件名最大长度过去使用MS-DOS的人应记得,DOS系统中文件名的长度不能超过8个字符,外加3个字符的扩展名,这种限定使得文件名的描述性很差,如MSRSUME1.DOC。另一方面,OSX系统出现之前的Mac机器将这种限制扩展到31个字符,这样的文件名无疑更好,但仍可能会产生一些古怪的名称。Linux(和UNIX)文件名的长度昀多可以为255个字符。对于文件名来说,255个字符有点多,如果你确实使用了这么长的文件名,效果看起来就会像字典中一样复杂。给定255个字符的范围,你可以自由地给出具备描述性和准确性的文件名,但不要采用过多的字符。实际上,将文件名控制在少于80个字符是个不错的想法,因为显示终端的平均长度就是80个字符,文件名可在一行内完整显示,而不必换行。但这只是建议,而不是要求。你可以自由地采用200多个字符描述文件,但应明智地给出文件名。1.3文件名区分大小写与Windows和MacOSX计算机不同,Linux第Ⅰ部分入门6在处理文件名时是区分大小写的。在运行Linux的计算机上,你会发现同一目录中有如下三个文件:●bookstobuy.txt●BooksToBuy.txt●BoOkStObUy.txt对于Linux文件系统,这是三个完全不同的文件。然而,在Windows或MacOSX计算机中,如果尝试将BooksToBuy.txt添加到已包含bookstobuy.txt的目录,系统就会要求你重命名文件或取消此操作。区分大小写也意味着必须准确无误地输入命令和文件名。如果要删除文件,则不能输入RM、Rm或rM,而必须准确输入rm。如果要删除bookstobuy.txt,但是输入了rmBooksToBuy.txt,则只会删除错误的文件,或者完全不删除任何文件。这种教训有两面性:Linux强制要求精确性,而精确性确实有必要遵从。同时,你也有一定程度的灵活性,而这在其他操作系统中是没有的。强制要求的精确性与灵活性相结合,是使Linux的使用极具乐趣的原因之一,但也会给新用户带来一定的困惑。1.4名称中应避免使用的特殊字符在命名文件和目录时,每个操作系统都会有一些明确禁止使用的字符。如果使用的是MacOSX第1章需要了解的命令行相关事项7计算机,则不允许使用冒号(:);另一方面,Windows用户不能使用反斜杠(\)。Linux中也有一些禁止使用的字符。但在了解这些字符之前,我们先看一下始终可安全使用的字符:●数字●字母(大写或小写字母)●圆点(.)——但大多数命令行和GUI环境会隐藏作为文件或目录名第一个字符的圆点●下划线(_)键盘上的其他一些字符和标点符号或许可以正常使用,有些字符虽然可使用,但实际使用情况较复杂,因为shell会尝试以不同的方式解读它们,还有一些字符则完全不能使用。/字符绝不能使用,因为此特殊字符用于分隔目录和文件。假设你要保存一个列出所需购买书籍的文件,并且想设法将该文件命名为books/to_buy.txt(带有正斜杠),以与books/on_loan.txt和books/lost.txt区分开来。现在当你想试着引用位于/home/scott/documents/books/to_buy.txt的文件时,此命令将无法运行,因为shell会认为documents目录中有名为books的目录,但实际上该目录并不存在。可使用下划线来代替正斜杠(即改为books_to_buy),或者将所有单词都放在一起(如booksToBuy.txt或BooksToBuy.txt)。可使用连字符(“-”),写成books-to-buy.txt,但我发现下划线效果更好,因为在分隔单词方面,第Ⅰ部分入门8下划线没有连字符那么唐突。但如果使用连字符,则不要将其作为文件名的第一个字符,如-books_to_buy.txt,也不要将其放在空格的后面,如books-tobuy.txt。在本章后面会看到,如果使用命令并希望调用该命令的特殊选项,会在选项前加上连字符。第3章中会介绍使用rm命令删除文件,但如果试着输入rm-books_to_buy.txt,shell就会显示如下的错误消息:rm:invalidoption--b可以根据喜好使用空格,写成bookstobuy.txt,但必须让shell知道这些空格是文件名的一部分。shell通常会将空格视为参数之间的分隔符。尝试删除bookstobuy.txt会使shell产生误解,因为它会试着删除名为books的文件,然后删除名为to的文件,昀后删除名为buy.txt的文件。昀终的结果是不会删除bookstobuy.txt,而可能无意中删除了不想移除的文件。那么,如何在文件名中使用空格?如何使用*和?字符(这些字符将在下一节中介绍)?又如何使用'和字符(这些字符在shell中有其他特殊含义)呢?在此有多种选择。如果可能的话,应避免使用这些字符,但通常很难不使用空格。或者,可以在字符前面放一个反斜杠(\)进行转义,这会告诉shell应忽略字符的特殊用途,将其视为简单字符。然而,经常转义字符会使人厌倦,因为要始终确保将\放在正确的位置:第1章需要了解的命令行相关事项9$rmI\shouldn\'t\name\files\with\\*\?.txt确实不方便!减少麻烦的更简单方法是用引号将文件夹括起来,功能类似于\:$rmIshouldn'tnamefileswith*?.txt这是可行的方法,并且少量使用引号不会让用户觉得太痛苦。然而,更好的解决方案是完全不使用这些特别麻烦的字符。表1-1列出了一些特殊字符及它们的用法。表1-1如何在文件名字符中使用特殊字符字符建议/绝不使用。不能转义\必须转义。避免使用-绝不能用作文件或目录名的第一个字符[]必须转义。避免使用{}必须转义。避免使用*必须转义。避免使用?必须转义。避免使用'必须转义。避免使用必须转义。避免使用空格必须转义。通常无法避免,但尽量避免1.5通配符及其含义设想你计算机上的某个目录中有下面列出的12张图片和一个文本文件:第Ⅰ部分入门10libby1.jpglibby8.jpglibby2.jpglibby9.jpglibby3.jpglibby10.jpglibby4.jpglibby11.jpglibby5.jpglibby12.jpglibby6.jpglibby1.txtlibby7.jpg你要在命令行中使用rm命令(第3章将介绍)删除这些文件,一次删除一个文件不仅繁杂,而且笨拙。毕竟,我们使用计算机的原因之一就是自动处理和简化乏味的任务。这时就可使用通配符,从而通过字符匹配一次指定多个文件。有4种通配符:●*(星号)●?(问号)●[](方括号)●{}(波形括号,也称为大括号,因此得名“大括号扩展”)注意:波形括号与其他通配符不同。bash将前三个通配符进行的转换分类为文件名扩展,而波形括号提供的转换是大括号扩展。前三个通配符仅匹配现有的文件。波形括号不仅可用于匹配现有文件,还可用于新建文件,稍后将看到此用法