linux从入门到精通,,入门经典,学习必备序当它正在系统内执行时,被称为进程(pe)止是你的shl进给你提供!命令行符。作为默认值,对非特权用户用美元符号$作提小符,对系统特权用户(mt)用祥号作提小符。 shell还承打从键盘接受输人射命令,并安排它们执行的任务由于历史原因,实际上有许多不同的业hel程序叮供使用。它们大致提供相同的功能:在本书屮将集屮使用自由轶基金会(GNU)提供的称为hs的shel序。它也是大多数Liuⅸ发布默认的she程序。H出了 shell提示符,就可以送入命令名称和命令所需要的任何参数:she将拽行ⅸ些命令。如果一条命令花费∫很长的时间来还行,或者在屏幕上产生了大量的输出,你可能希望中斷它。在它常结束之前,停止它的执行。对多数命令讲,你以从链盘按erl-e(即在按下地trl键后,同时按c键),用它来送出断信号。当你准备结束你的登录对话过程( resoT)时,叮以在提示符后画送入 logout命令,退出登录。还有其它退出登攻的方法,最常用的是在提示符后面送人文件结束符(EOF}。这可以在键盘上按ctdd来实现。这里的问題是:she可以被设置成忽略HF。些Iimx发布就是这样默认设定的。我们在后面讨论sre的细节时,你会知道奶何定制se响应方式1.2文件系统的层次结构当你完成登录后,下任务是熟悉基本文件系统的结构。In文件系统包含3类文件:普通文件:这些文件只是字节的集合。系统没有在文件中加人特定的结构。它们用作文本文件(包括源程序文件)程序使用的数据文件,以及程序4身的可执行二进制文件目录文件:H录是一种结构。它容许将一组文件放在一起。从慨念上讲,日录好比是-个容器,吓以用来存放其他文件和∏录。事实上,目录本身以包含其他文件的名称和一些类似如何从磁盘上找到这些文件的简单信息。由于一个录可以包含了目录名称,文件系统形成个层次结构特殊文件:许多不同文件类型属于这一范围。当你深人学习时将看到这一切。简单讲特殊文件与进程之间的通信以及进程和连接到机器的各种各样的外部设备之间的通信有关所有这些类型的文件均放在一个大的树形层次结构中(见图1.1)。树的顶部是一个单独的目录,称为根(m)目录(请勿与r登录名相混淆}。并∏用斜杠符号/表示报目录。在根目录下,有一些用]不同目的的标推子日录和文件。这些高层的日录和文件结构只是从传统的意义讲是标雅的,但并非-定要那样去做图1.1表示一个根目求()包含∫de,in和 home f目录。接下去hm目录又包含了ke和lyr目录等等。在目录的最底层包含普通文件和特殊文件(如a和b)乍了这些文件和目录之间的关系后,你可以说home是ike的双亲自录,而a是pm目录的个f文件两个或多个文件或录具有相同名称的情况常常会出现。只要它们包含在不同的双亲目录中,就不会发乐混淆。很明显,需要有无二义性地引用特定文件的办法。这可以用指定路径名的办法来实现。路径名是一串用斜杠字符/分隔的(目录或文件的}名称。如果这串字符用斜杠字符圻头,则称为绝对路径名。它表示从根日录开始。例如p1日录的绝对路径名是/home/1yrn4/proj1根目录lynne待殊文桦普通文件图1.1士要的什类型形成树形的层次出均而特殊文件b的绝对路径名则是/ev/b正像你看到的,绝对路径名从根冂录开始,并山此向下延伸。也可以用其他目录名作为开始来指定文件的路径名。用这种方法给出的路径名称为相对路径名。例如,从lyne目录(或严格地称为/hme/ lynne日录)到著通文件的相对路径名是:它表示在当前目录/hme/lmne下,通过包含a文件的po1目录取得a文件的路径。当你改变目录时,新目录成劝当前的工作目乘。当前L作目录的概念相当重要,每当在Linux系统上执行一个程序时,作为结果的进程将当前工作目录设为它的内部状态的一部分正是这个目录,进程将它用作访向任何文件的相对路径名的起点。除非进程为自己另设特殊的当前工作目录(多数倩况下不这么做)一般情况下取用户启动程序时所处的目录作为默认的当前工作目录何指定从/hmc/mike录到a文件的相对路径名?同题是/he/mike目录和文件a处在日录树的不同分支上。为解决这一问题,需要知道另外两个名称,这两个名称都自动地包含在每个 Linux fi录中。它们分别称为.(发音为dot)和.(发音为dat-d)是当前凵录的別名。而.则是当前月录的双亲H录的别名。在指定相对路径名时,.允许你回到目录树的上层。有了.的标记法,上面问题的答案就成为从/he/mike目桌回到上一层∏录/home,然后从有[的分支向下到达a文件得到的相对路径名如下:/lynne/proj1/4顺便说一下,虽然根目录没上层目录,但仍然保留名称..,它被用来指向根目录本身。根目录作特殊处理,它就是它自身的双亲录。这也表示在指定相对路径名时,使用太多的不会造成问题。1.3考察文件系统的层次结构在登录时,有…一个特殊的日录和你的登录名联系在一起。它被称为你的起始hme)目录。起始目录实际是最初的当前工作目录,这是属于你的整个目录树的起点。你在系统工作时所建立的所有文件和目录,一般都啟在你的起始目录下面。在整个系统的目录层次结构中,找出起始目录的实际位置的最简单办法是在登录后直接使用pwd命令。pwd命令告诉你:当前卫作目录,也就是现在所处的目录是什么。在刚刚登录时,它将是起始日录。在起始日录下使用pw命令将得到类似下面的输出:/home/you其中/home/you应该用你自己的起始目录的绝对路径名代替。为了将当前工作目录从起始目录转换到目录层次结构中的其他位置,可以用cd(改变目录)命令。所以,要将目录政到根目录就应该用下面的命令在d命令中用所要的目标目录的路径名作为参数。为了得到包含在当前目录下的文件和目录名称的清单,叮以使用l命令。对一个典型的Iux系统讲,在根目录下使用l筛令将得到下面的输出zS Isbindev十shirboot dosllbP二Ominuscdrom etcost fourie rooluSRLinx日录层次结构中最重要的分支表示在图12中。应该用pwd,cd和命令去考察你A已机「器上的目录层次结构。bin dev tlc line 11b sbin tmp usr var如果想从目录树中任何一点回到起始月录,可e以用d命令。并用相应的路径名作为参数。但是411 adrc. bin It loca1 man Sre也可以只送入ed命令邮个给参数。这是使直接回到起始目录的条捷径。在图1.2所小的fnu目录bin: 14l树中,各主要分支包含的文件的一般功能见表1图1.2主要的Iimu目录树结构11主要目录滑单Abin二进制可执行命令/dey设备特殊文件系统管理和配置文件/home用户起始目录的基点1ib标准程序设计库Ashin系统管理命令公用的临时文件存贮点/usr/111X-wlndows系统文件/usr/acm系统管理。数据文件/usr/bi n其他的可执行命令/usr/lib库和软件包的配置文件sI/local/biru本增加的命/usr/local/ib本地增加的库/usr/lacal/src本地命令的源文件/usr/mara系统联机手册页Jusrsrd/linuxLinux内核源程序文件Ga了某些大文件的溢出区1.4口令文件在Im系统中,日令(p6N)件是系统的主要文件之一。它将前面看到许多内容结合在起。口令文件的内容包含所有用户的登录名的清单;为所有用户指定的起婚目录的具体位置:在登录时使用的she序的名称。口令文件还用来保存用户口令;给每个用户提供系统识别号;当一组用户需要为联合项目协同王作时,将这些用户编成组。口令文件本身是-个允许何个用户阅读的普通文本文件。它保存在下列文件中letc/passw可以很简单地用下面的命令行将该文件的内容列出釆:s ca=/etc/pas swdca俞令在这里兵用来列出文件内容。它的全部用法将在下→章2.3节中说明。口令文件屮的每一行是一个用户登求名的所有有关信息的记录。每一条记录用冒号:分隔成7个字段〔ed,具体格式姐下:name: passwordguid; yi: 1 comment: home: shel自左至右、7个宇段的用途如下ame此字段包含用户登录名。这是用户登录时必须正确地敲入的名称。Word这是用户的冂令。如果不认识你的∏令,个必感到惊讶!这是正常的,因为口令加了密。当你在登录过程中敲人口令时,系统用同样的方式它加密。并与这一字段的内容进行比较以此来确定是否让你访问系统。如果这一字段是空的,表示对该用户无需令uid这是泵统用来分配用广识别号的字段。一国用户登录后系统将用uid而个是用登录名来查找用户。gid有时候,一批用户需要在一个组内共同完成同个项目。在这种情况下,允许他们共同访问一组特定的录和文件是很有用的。这可以在这个宇段内给小组的全体成员分配同个组识别号(sd)来实现。em ment这是注释字段。常用来保存用户的真实姓名和个人细节。home这一字段用保用户的起始目录的绝对路径名。当用户登录时,系统从这一字段取得用户起始目录路径名。she如果这一用户登录成功,要执行的命令的绝对路径名就放在这一字段。这可以是任何命令。但是对普通用户帐号讲,这将是sel的路径名。如果此字段没有给出路径名,它的獸认值是/liny如ho因为口令的加密算法分安全,口令文件(e/psw)是公开可读的。然而,如果选用个简单的字做臼令,酱如说,从词典中找一个字。那么,只要对词典中的字一一加密,并和口令字段比较是否匹配就是件简单的事。克服这一问题有两种办法,一种办法对加密口令加以隐藏。Iinx有一些软件包专门用来于这件事。这些软件包将加密的冂令隐藏在单独的文件中(常用/l/shd)。这一文件不允许公众进行访问。有了额外的文件就允许给用户记录增加覓多的字段,如用来确定隔多长时间用广就必须更换口令等。另种办法更筒单但也同样有效,这就是选择好的口令。一个好的口令至少有6个字符长,并包括大小写字母,数字和/或标点符号的混合使用。如果这样做难以记忆的话,就用个简单字,但将其中若T字符替换成看上去相似的其它字符。例如, shelter和5he!ER:这种技术能给出更安全的口令。但是高级的口令解密程序仍然能发现它。为了达到最人限度的安全,建议你经常改变∏令。在Iim系统中变换口令是方便的你只要送入下列命令就行了passwd如果帐号设置了冂令,系统就提示输人旧订令。然后两次提示输人新口令。由于系统不在屏幕上显示送入的口令,输人两次新口令是必要的。如果两次输入的内容不一致,系统将不改变你的囗令。这样做确保你正确地输入了新冂令。练习.如何我到起始目录的绝对路径名。在自己的茶统上,起始录的绝对路径名是骨么?2.在系统上如何发现赚些用户没有设置凵令?3.将当前:作日录从/usr/ir转到usr/1ocal/bin需要用什么命令?先用绝对路径名,再用相对路径名4.考察系统的目录层次结构,并找出1s和pwa命令的绝对路径名答案.这里有几种可能。首先,叮以用c命令在看口令文件的内容;9s cat /etc/passwd然后从口令行的第6个字段中提取起始目录的绝对路径名。另一科办法使用下面的命令序cd命今将使你从目录层次结构中的任意位置回到起始日录。然后,命令将显示当前的工作百录。在我的系统上这样做时,得到我的起始目录为ime/pc2.所有的口令都以烁密的方式存在!etc/ passwd攴件中。要拽出哪些用户没有设置囗令,只要逐行查第2字段。第2字段为空日表示这些用户没有设置口令。3.使用绝对路径名将当前工作目录从/8E/如n转到/usr/loca1^in可以用下面的命令;s cd/usr/localbin使用相对路径时,可用下列命令取得同样效果:s cd./local/bi4.根据表11,大多数可找行的用户命令存在/in和/usx/bin两个目录下。用1s命令搜索这两个目录就能得到这两个命令的路径名Abin/ls/bin/rwd在大多数系统中,实际还提供为一条命令。它使你能找出任何能执行的命令的绝对路径名它的名称是wnch。用这条命令可以取得同样的结果s which Is pradfirms/ binypwd第二章 Linux命令讨论了登录和文件系统结构以后,现在我们来讨论In命令的使用。Iimx有数以百计的命令,本书篇幅的限止不能→一加以详细讨论。这里只选择少量常用的命令进行重点讨论。然而,你将看到In拥看一套组织良好的联机文档,而且它的内容尚在不断扩充。正确掌握联机文档的使用,有助于全面掌据Iim命令的使用。一般说来,UNm(因而也包括Iiux}命令在执行时非常安静。这就是说,它们不产仟何不必要的输出。所以,命令成功地执行完毕的一般标志是得到送入下一条命令的提示符2.1目录的层次结构如果执行下面的命令:s cd/⊥就将当前工作目录改为根目录,然后从命令得到类似下面的输出结果:homent宫上rVEdprocymlinuz已七clost + found roomu忌上前一章中说过每个目录都包含.和.的名称,为什么它们不在ls命令输出的清单中出现?事实上,这两个名称始终在每个目录中。如果在清单中列出就得到一个或二个小点。为了保证一般情况下它们不在清单中出现,命令有一条默认的内部规娜:任何以句点开始的名称不在清单中列出。这条规则不仅适用于.和..,也适用于任何以句点开头的其他名称。这提供了一种方使的机制,使一些文件包含在目录中,但在查看月录内容时不列在清单中。但不要错误地认为这提供了建立秘密文件的机制。事实上,用k命令列出目录中包含的所有文件是很方便的,包括那些以句点开头的文件或目录各称。在许多场合下,使用条命令时,希望它完成默认功能以外操作,或者抑止它的某些常规功能。这时可以在命令中加入命令行开关 mand line switch)来打开或关闭需要的功能。为了致起见,开关值前面要加上连字符(-)。表示这是开关而不是普通的命令参数(如文件名等)对l命令讲,要它列出目录中所有文件时应该加-a开关,相应的结果如下:cdromtctmpehomeUScosi】b工●o七varO°七lost I foundvi』J2命令在任何命令行开关斤面还可以给出目录的名称。在这种情况下,列出的将是指定目录的内容而不是当前H录的内容:S Is-a/rmpx11-unix elmrC. OLDtagfileNEAT¢1v_61.1d eX0-lock clockshosts. OLhe汽DLD请注意:在机器上拽行这条命令时,会得到不同的结。因为/mp目录是供任何用户保存临时文件的公用日录。当开始在Iinwⅸ系统上工作时,譬如说编写程序或运行一些软件包。将开始建京你自己的文件。一般讲,应该将所有文件都放在起始日录下。但是,如果简单地将所有文件放在起始目录下,很快就会变得难以从中找出所要东西。只要看一下/usr/hin目录就知道这是怎么回事了。为了解决这一问题需要对文件空问进行一番设计。可以在起始目录下建立小型的国录层次结构,并运用一些倚单的自律规则保证在存储新文件时,将它们放在正确的位置为了建立新目录,可以用mkdi命令,并用新目录名称作为命令参数S mkdir bin Lext第一个cd命令不带参数,使你回到起始目录。而mkdr命令则在起始目录下建立两个新目录。分别称为n和 texl可以用单个mkd命建立任意数量的新目录。这表小mkr命令可以接受可变数目的参数值。作为一般规则许多命令都可接受可变数目的名称参数清单,并对整个清单进行正确的操作。建立日录后,下面的任务就要复制-些文件目录中来cIim复制文件的命令称为qp:s cp /etc/passwd text/ry pass假定送入这一命令时,仍在起始目录下。它将系统的口令文件(/e/pad)的副本用名称my存在et目录下。在这种形式下,qp命令取两个普通文件的路径名作为参数,并将前一个文件的内容复制到后个文件中,p命令还可以有另一形式,最后一个参数不是普通文件名而是一个目录名:这时,可以用可变数目的文件名清单米代替第一个参数,清单中所有文件都将复制到给定的目录中p/ passwd /etc motd tota bypass passwd10