LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3048|回复: 1

我翻译的linux system administrator guide前三章,是面向初学者的一本书,:-)第一次作

[复制链接]
发表于 2009-10-8 21:27:23 | 显示全部楼层 |阅读模式
Linux系统管理指南
Version 0.9
Lars Wirzenius
<Email address removed by request>

Joanna Oja
<Current email address unknown>

Stephen Stafford
<stephen@clothcat.demon.co.uk.NOSPAM>

Alex Weeks
<draxeman@gmail.com.NOSPAM>


面向新手的一份有关linux系统管理的指南

Copyright 1993−−1998 Lars Wirzenius.
Copyright 1998−−2001 Joanna Oja.
Copyright 2001−−2003 Stephen Stafford.
Copyright 2003−−2004 Stephen Stafford & Alex Weeks.
Copyright 2004−−Present Alex Weeks.

商标被这些拥有者所拥有。

许可证允许你来复制、分发、并且在“GNU自由文档的许可证”下修改这些文档,许可证的版本为1.2版本或者以后的任何由自由软件组织颁发的;没有固定的章节,没有封面,也没有封底。在文中的许可证的复件为“GNU自由文档许可证”


内容目录



关于这本书
“只有两样东西是无限的,一样是宇宙,另一样是人的愚昧,我仅对前者不能肯定。” Albert Einstein

1、致谢
1、1 Joanna的致谢
        在做书的过程中,有许多人,间接地或直接的给了我很多的帮助。尤其是Matt Welsh,他给我灵感并且在LDP管理方面给我很大的帮助,Andy Oram 给我提出了很有价值的修改意见, Olaf Kirch给我信心,让我相信,我能把书完成, Adam Richte和其他的许多人向我证明,读者会很喜欢这本书。
Stephen Tweedie, H. Peter Anvin, Remy Card, Theodore Ts'o, 和Stephen Tweedie,让我借鉴他们的劳动成果(所以让这本书的内容更丰富,更能给让人留下深刻的印象):在xia和ext2文件系统之间做了比较,用图表、文字描述了ext2文件系统。其实,书中的这些内容不是我写的。我非常高兴能用到上面各位的作品,并且对我早期版本中不适当的总结表示道歉。

另外,我要感谢 Mark Komarinski,他在1993给我送来了他的许多资料,发表在linux杂志上的有关系统管理的文章。这些资料是如此的丰富、深入。

许多有用的内容,是由非常多的人志愿的,我的小小的,黑色文档柜不能帮我找出他们全部的名字,他们中的一部分是,排名按字母的顺序:Paul Caprioli, Ales Cepek,
Marie−France Declerfayt, Dave Dobson, Olaf Flebbe, Helmut Geyer, Larry Greenfield and his father, StephenHarris, Jyrki Havia, Jim Haynes, York Lam, Timothy Andrew Lister, Jim Lynch, Michael J. Micek, JacobNavia, Dan Poirier, Daniel Quinlan, Jouni K Seppänen, Philippe Steindl, G.B. Stotte.。我对我没能记下来的每一个朋友,表示歉意!

1.2Stephen的致谢
我要感谢Lars,Joanna ,t他们给了我辛勤的指导!
在这样的一本书中,不可避免的,有一些小错误,并且,随着技术的发展,也有一些内容会过时。如果,你发现任何问题,请写信给我: <bagpuss@debian.org.NOSPAM>.我将采取有效的方式来修改(diffs工具,文本格式,html,任意一种),我不得不依靠大家来帮我维护这样大的一个文档:)。

非常感谢Helen Topping Shaw,他给了很大的支持,使这份文档远远好过当初的设想。这份感激是应当的。

1.3 Alex的致谢
非常感谢Lars,Joanna,和Stephen,他们在过去的几年中,对这份文档付出了很多的汗水,我仅仅希望我的工作是他们成果的有价值的延伸。

就像先前的维护者们,我欢迎所有的观点、建议、评判、或者其他任何形式的反馈,只有文档使用者的建议才能让这份文档变的更好!
当我致力于“自由之窗”活动时,有很多人给予了我帮助,我最要感谢就是我的第一个UNIX导师,Mike Velasco.没有你,就没有这些优美的表述,Mike在tar,cpio,还有很多很多的说明文档中给了我很多的帮助。谢谢你!Mike!你就是一个“高高在坐的皇帝”。
2.版本历史
Revision History
Revision 0.7
2001−12−03
Revised by: SS
Revision 0.8
2003−11−18
Revised by: AW
Added a section on NTP
1.
Cleaned some SGML
2.
Added ext3 to the filesystem section
3.
Revision 0.9
Revised by: AW
Cleaned some SGML code, changed doctype to lds.dsl, and added id tags
1.
Updated section on filesystem types, and Filesystem comparison
2.
Updated partition type section
3.
Updated section on creating partitions
4.
Wrote section on Logical Volume Manager (LVM)
5.
Updated section on space allocation
6.
Added chapter on System Monitoring
7.
Added more command line utilities
8.
Verified Device list
9.
Modified email address for Authors
10.
Added references to more in−depth documents where applicable
11.
Added notes on upcoming sections
12.
Indexed chapters 1 − 4, & part of 5
13.
Updated Misc Information throughout the book
14
3.源码和文档的获取途径
相关的源码和其他一些格式的文本,你可以以匿名ftp的方式在站点 http://www.tldp.org/,上获得 ... 主页上获得, http://www.draxeman/sag.html。 ... 式也许会有!

4.版面样式
  这本书,采用了统一的板式,希望他们更容易理解,如果你有更好的方法,请联系我!
文件名称像这样来表达:/usr/share/doc/foo.
命令这样表达:fsck
邮件地址这样表达:,<user@domain.com>
网址:http://ww.tldp.org
这部分的内容,将随着文档的编辑而添加,如果,你注意到一些应该添加的而我没有添加,请让我知道!

第一章。说明
“刚开始是混乱的,很少的内容,但是,作者的手指去坚持在键盘上飞舞,并且作者不停的说,就让这些变得有意义些吧”


这本linux系统管理指南,描述了在使用linux时所涉及到的一些内容。在这本书中,我们假定书的读者是刚刚入门的新手(他总是问:“这是什么?”),你应该有最基本的使用linux 的技能。这份文档不会告诉你,怎么去安装linux,这些内容在“安装和起步”文档中。

系统管理包含了所有你,你为了系统的可用性而不得不去做的所有事情。例如备份文件,并且在需要的时候要恢复他们,安装新的程序,为用户创建账号,在员工离职的时候要删去账号,保证文件系统是正常的,还有很多很多,如果说,电脑系统是一个房子,那么系统管理员就叫做保洁员,他包括清洁房屋,修理损害的窗户,和其他一些类似的事情。

这份指南中,大部分的章节是彼此独立的,所以如果你仅仅想知道有关文件备份的信息,那么你就可以仅仅挑选这一章来读。然而,这部书跟重要的是一个辅导,你可以按照顺序来完整的读它。

这份文档不赞成你完全孤立的来读。其它的大量的有关linux 的文档对系统管理来说,也是很重要的。总之,一个系统管理员是一个有特权和职责的一个用户。Linux上的man手册是很重要的资源,当你对某个命令不是很明白是,它总是最后的导师。如果你不知道,该用哪一个命令更合适,请查看man手册来获取更多的细节!

虽然这份手册的目标读者是linux管理员,但是,一个通用的规则是对其他的Unix系统也是耶帮助的。不幸的是,有如此多的差异在不同的Unix系统中间,并且在系统管理方面的差异更多,所以去包含所有的东西是不可能的。就是去包含linux方方面面的东西也是不可能的,因为linux的发展是飞快的。

没有官方的linux发行版本,不同的人有不同的构建的版本,也有许多人,他们搭建自己喜欢的系统。这本书不去介绍每一个不同的版本。当可能的话,版本的不同和选择会涉及到。各种不同版本的不同点可以在这个站点中看到:
http://en.wikipedia.org/wiki/Comparison_of_Linux_distributions

对一项任务,与其列出其步骤,不如试着去描述它为什么要这么做,对每一个读者来说,都有一些你不必要知道的信息,但是如果你用了一个已经配置好的系统,这些章节你是可以跳过的。如果你读了每一章的内容,自然地,你增加了你对系统的理解,并且你在使用和管理系统时将会更有效。

理解是学好linux的关键,如果这本书仅仅写的是对某些具体问题的解决方法,那么如果你遇到了没有在这本中描述的问题,那该怎么办?再想想,如果一本书帮助你理解linux系统,那么,遇到问题的时候,你就会自己解决它。

就像绝大多数linux的方式,这份指南也是以志愿为基础而写成的。我这样做,是因为我认为这是一件有趣的事情,并且我觉得我就应该这么做。然而,每一个志愿者的工作都一样,时间、知识、精力都是有限的。这意味着这本书并不是那么完美,就像有偿的有能力的人去写的并且花费一千年来修正它那样的完美。你应该知道这一点!

有一些内容,在本书中只是简单的介绍,是因为,这部分内容已经在其它的自由文档中被很好的说明了。这些更多是涉及到程序的说明文档,例如,mksf这个命令的详细用法,在本书中,只说明了这个命令的作业和应用语法,更多的细节,请参考man手册,通常,所有的这些参考文档都是linux文档的集的组成部分。

1.1linux还是GNU/linux,?
有许多人认为linux更应该称为GNU/Linux,因为,linux只是一个内核,而不是在内核基础上运行的各种应用程序。大多数的命令行工具都是自由软件基金会在开发GNU操作系统中被提供的。例如cp,mv,lsof,dd。

在实际上,在linux内核出现之前,FSF(free software foudation)通过编写编译器,c程序库,和一些基本的常用命令行工具来推动GNU的发展。Linus Torvalds,写了一个linux内核从而开启了linux,他用这种方式来推动GNU的发展。

我觉得辩论linux还是GNU/Linux,是不合适的。在这里,我提到这个问题是因为我认为,理解linux和GNU之间的关系是重要的,并且想向读者解释一下,为什么linux会被称为GNU/Linux.在本文档中,我们采用linux这个称呼。

关于这个问题,你在下面的站点中会找到更多的答案:
The relationship −  http://www.gnu.org/gnu/linux−and−gnu.html
Why Linux should be GNU/Linux −  http://www.gnu.org/gnu/why−gnu−linux.html
GNU/Linux FAQ's −  http://www.gnu.org/gnu/gnu−linux−faq.html
下面是一些可供选择的观点::
http://librenix.com/?inode=2312
http://www.topology.org/linux/lingl.html
http://atulchitnis.net/writings/gnulinux.php

1.2商标
Microsoft, Windows, Windows NT, Windows 2000, 和Windows XP这些都是微软公司注册的商标,
Red Hat is a trademark of Red Hat, Inc., in the United States and other countries.
SuSE is a trademark of Novell.
Linux is a registered trademark of Linus Torvalds.
UNIX is a registered trademark in the United States and other countries, licensed exclusively through X/Open
Company Ltd.
GNU is a registered trademark of the Free Software Foundation.
其它的一些产品名称也许是他的授权公司的商标。

第二章linux系统概述

“上帝看着他创造的每一件东西,每一件事物看起来都是这么的美好”——Bible King James Version.Genesis 1:31

这一章讲的是linux系统概述。首先描述的是操作系统提供的几项重要的服务,接着会粗略的描述一下这些服务所需要的具体程序的使用。这一章的目的是给读者一个系统的完整概念,在其它章节中,会讲到一些细节问题。

2.1. 一个操作系统的组成部分

UNIX和“类UNIX系统”(就像linux),包含一个内核和一些系统程序,再加上一些完成各种工作的应用程序。内核是一个操作系统的核心。事实上,内核常常被错误的认为是操作系统本身,但是,很可惜,这是错误的。一个操作系统要比一个单纯的内核提供更多的服务。

内核提供文件系统管理,程序调度,内存管理,和网络数据包的收发,等等!内核自身做能提供很少的工作,但是他提供所有这些服务所需求的工具。也提供访问硬件的方法,并且强制每一个用户使用这些工具。采用这种方式,内核可以给每一个用户都提供保护的功能。这些工具是通过系统调用的方式来使用的,你可以查看这份手册的第二部分来获取更多的细节。

系统程序通过调用内核提供的工具来实现一个操作系统所要实现的功能。系统程序,和其他的一些运行在内核之上的程序,被称为用户模型。系统程序和应用程序的一个不同点就是:应用程序提供一些有用的功能(例如玩游戏等),而系统程序的目的是为了让系统正常的工作。一个进程是一个应用实例。Mount是一个系统程序。二者的不同的常常是很模糊的,仅仅在要强制分类时,才用的着。

尽管不是所有的程序语言都要成为一个操作系统的一部分,但一个操作系统也常常包含一些编译程序,和这些编译程序所对应的库函数(尤其是linux下的GCC和C 程序库)。文档,有些时候甚至游戏也会成为操作系统的一部分。通常情况下,一个操作系统已经被它的安装介质所决定,但是对linux来说,操作系统的包含成分是不清晰的,因为,linux已经遍布了全球的ftp站点。


2.2内核的重要组成部分
Linux的内核有下面几个主要组成部分。进程调度、内存管理,设备驱动,文件系统驱动,网络管理和其他一些小块的内容,在Figure2-1,你可以找到!

或许在内核中,最重要的部分是内存管理和进程调度。内存管理管理可用的内存和交换空间,和缓冲区,进程调度可以创建进程,并且通过对活动进程的调度,实现多进程。

在操作系统的底层,所以内核包含了一些硬件的驱动。因为世界上有非常多的不同的硬件,硬件驱动的数量也是非常的大。经常 有一些相似的硬件,但是去被不同的软件控制。他们的相似点,是他们可以有一类相似的驱动,并且提供一些相似的操作,在这一类硬件中,每一个个体硬件都对外提供相同的接口,但是在相同接口的背后,不同的硬件可以有自己的不同的实现方式。例如,对linux内核来说,所有的磁盘驱动都有这样的操作:''`initialize the
drive', `read sector N', and `write sector N'.

一些内核提供给应用程序的服务,大多数也是相近的,所以这样的服务就可以被抽象为一类。例如,不同的网络协议已经被抽象为一个程序的接口,例如BSD套接字包,另外一个例子是“虚拟文件系统层”,他从各种不同的文件系统中抽象出来。不同的文件系统对同一个操作可以采用不同的技术来实现。当一个指令要用到文件系统,这个请求通过VFS,VFS就会把这个请求发给合适的文件系统的驱动来执行。

更深入的有关内核内部的讨论可以在这个站点中找到 http://www.tldp.org/LDP/lki/index.html.
不过,这个文档是围绕2.4版本的内核写的,当我找到有关2.6的内核文档时,我会在这里列出来。


2.3 UNIX系统的主要服务
在这里讲了一些很重要的Unix的服务,但是,只是简单的提一下,在后面的章节中会有相对详细的讲解。

2.3.1 init
Init是Unix服务程序中最重要的一个,它是Unix启动的第一个程序,它启动起来接替内核来工作,来继续引导程序,来完成各种各样的琐碎的工作(例如检查和挂载文件系统,开启系统服务程序等)。

Init要做的其他的额外的事情,常常依赖于init的运行环境,有几种不同的环境。在单用户模式下,没有用户可以登入,root用户运行一个shell在控制台。一般情况下,系统的运行模式被称为多用户模式,一般可以通过运行级别来判断运行模式,单用户和多用户运行在两个不同的运行级别上,并其运行的级别可以在不停机的状态下改变,例如你可以在控制台里运行X。

Linux提供了0——9十个运行级别,其中的一些运行级别已经被定义好了。0级别被定义为“系统停止”,级别1被定义为“单用户模式”。级别3被定义为“多用户模式”,这个运行级别是在长期的实践中形成的。级别5基本上和级别3是相同的,不同点只是比级别3在启动时多了GUI程序。级别6被定义为“系统重启”。另外的一些运行级别取决你所选用的发行版本的具体设置。在不同的版本中,往往是不同的。你可以查看“/etc/inittab”,这个文件可以告诉你这些不同的运行级别是怎么定义的。

在一般的情况下,init确保getty程序是正常工作的(getty程序是一个让用户登录的程序)和收养孤儿进程(孤儿进程,就是其父进程已经死掉了,在Unix中,所有的进程要确保都在一棵树上,所以孤儿进程要被收养)。

当系统停止时 ,init来杀死所有其它的程序,卸载文件系统和停止芯片,和其他的一些你指定的要它去完成的事情。

2.3.2从终端登入

Getty程序提供从终端登入和控制系统的功能(在没有启动x的桌面系统时)。Getty程序为每一个终端都生成一个进程实例,这样可以保证每一个终端的连接都是被允许的。Getty程序读取用户名,然后运行“login”程序,这个程序读取对应的密码。如果用户名和密码是正确的,login启动shell。当不正确时,shell会结束,用户退出,login程序也退出,init程序也会生成一个新的“getty”进程。在这个过程中,和内核没有关系,所有的处理过程都是系统程序所提供的。

2.3.3系统日志

内核和许多的系统程序会产生一些错误,警告,和一些其它的一些信息。把这些内容保存下来,然后日后能去分析师很重要的,所以它们应该被写到文件里面。Syslog,就是来做这个工作的程序。你可以配置它,把不同级别的信息放到不同点文件中,例如,内核信息常常放在一个单独的文件中,因为内核信息常常更重要一点,并且要定期来分析,查找问题。

2.3.4

定期支持命令的程序:cron和at
不管是一般的用户,还是系统管理员常常要周期性的运行一些命令。例如,系统管理员会想周期性的用一个命令去清除文件系统中的临时文件,来保持磁盘的剩余空间,因为并不是每一个程序都能正确的清除自己的临时文件。

Cron服务程序就是为了这个目的而被创建的。每一个用户都有一个crontab文件,这个文件里面有你指定让他在什么时间,运行什么命令的内容。当你在这个文件中指明命令之后,cron程序就会来看管他们。

At这个服务程序和cron程序相似,当时在at中,给定的命令只会被执行一次,不会被反复执行。

我们将在后面讨论更多这方面的问题。你也可以查看man手册cron(1),crontab(1),crontab(5),atd(8)来获取更多的信息。

2.3.5图形用户界面

Unix和linux没有把图形用户界面包含在内核中,而是,把图形用户界面放在用户的应用程序这一位置上。这一思想也对文本模式和图形模式都是一样的。

这样的方案,让系统具有更多的灵活性。但是却导致了对一个程序来说有不同的用户界面,增加了学习使用的难度。

在linux世界里用最要的图形环境是“x窗口系统”(简称为x)。X也不提供用户的界面,它只是提供了一个桌面系统,提供了让一个图形用户界面可以实现的一些工具。一些很流行的窗口管理器有fvwm,icewm,blackbox。有两个非常流行的桌面管理器,KDE,和Gnome。

2.3.6网络
网络就是两台或更多的计算机连接在一起,以至于他们可以相互通信。连接和通信的方法有一点复杂,不过,网络是非常有用的。

Unix操作系统有很多网络的特性。大多数的基础服务程序都可以通过网络完成。例如,文件系统,打印,备份,等,这样的特性是系统管理员的工作更方便,因为它能方便管理员通过一个小型,廉价的,容错性高的的电脑终端来集中管理许多的系统。

但是,在本书中,仅仅是稍微涉及到一点网络方面的知识,你可以翻阅“linux网络管理指南”这本书http://www.tldp.org/LDP/nag2/ind ... 的网络操作。

2.3.7联机登录

网络联机登录和本地登录有一点点的不同。对每一个联机登录来说,就是一个虚拟的网络连接,虚拟连接的数量局限于是网络速率可以承受的数量。所以不能为每一个虚拟的连接都开启一个getty程序。有多种不同的网络联机方法,telnet和ssh在tcp/ip网络中用的较多。

最近,有很多的linux系统管理员认为telnet和rlogin是不安全的,更倾向于使用ssh,(安全shell)。Ssh在网络上传输时是加密的,这样可以防止恶意的监听抓包,防止敏感数据如用户名和密码等的泄露。非常推荐你使用ssh来代替telnet和rlogin。

一个登陆的监听服务程序已经代替了大量集中的getty程序,这个登录监听程序监听所有的登录请求,当他收到一个请求,就生成一个新的它自身的实例去处理这个请求,而这个原始的实例程序则在后面继续监听是否有请求。这个新生成的实例和getty程序很类似。

2.3.8网络文件系统

利用网络来完成的一项有用的工作就是通过网络文件系统共享文件。根据你所依赖的网络的不同,你可以用NFS,也可以用CIFS。NFS是unix典型的基础服务,在linux中,NFS是被内核支持的,但是cifs不是在内核级别,cifs是用samba这个软件来实现的。http://www.samba.org。

利用网络文件系统,程序在一台机器上对一个文件的任何操作都可以通过网络传送到另一台机器上。网络文件系统让应用程序认为他所操作的另一台机器上的所有的文件就好像是在自己的机器上。利用这种方法,信息的共享是非常的简单,因为这种方式不需要修改应用程序。

在5.4章节中会有更多的描述。

2.3.9邮件服务
在利用电脑交流中,邮件是最流行的交流的方式。一封电子邮件是用特殊的格式保存的文件,利用特定的邮件服务程序来发送和接受信件。

每一个用户都拥有一个电子信箱,新的邮件就存储在这里。当你发送邮件的时候,邮件程序就会找到收信人的信箱,把信件放在这个信箱里。如果收信人的信箱在另外的一台机器上,发送程序就会把信件发送给它认为合适的机器。

邮件服务系统保护了很多的程序。传送邮件在本地或到远程机器上的程序有sendmail,Postfix等,客户端**程序有pine,evolutioon等。信箱往往处于/var/spool/mail文件下面。

要了解更多的关于搭建和运行邮件服务器的信息,你可以参阅“怎么来管理邮件服务器”: http://www.tldp.org/HOWTO/Mail ... Postfix的站点:. http://www.sendmail.org/, 和 http://www.postfix.org/ .

2.3.10打印

一次只能有一个用户来使用打印机,如果不让多用户共享一台打印机是不划算的。为了实现共享,我们可以用软件来管理打印机实现一个“打印序列”,从而来实现打印机在多用户之间的共享。所有的打印任务都放到这个序列中,打印机完成一项工作后,就按照这个序列,自动的继续去打印下一项目标。这种方式也让用户不去考虑打印的顺序和争夺对打印机的控制,因为没有人确切知道,应用程序会怎么排列他们的请求。他们要做的只是排队等候他们自己的打印结果。这是一个好方法来改善办公室的工作关系。
打印的排队序列程序,把要打印的内容缓存在磁盘上,就是说,当这个作业在队列中时,要打印的内容存放在一个文件中。这种方式可以运行应用程序和打印作业相分离。应用程序不需要非要等着打印机来执行打印作业。这是很方便的,因为它可以让你在打印一分作业的时候,不用等着它被打出来,你就可以修改,从而创作出新的版本。

你可以参考“怎么打印”来获取更多的有关打印服务的帮助:

http://www.tldp.org/HOWTO/Printing−HOWTO/index.html
2.3.11文件系统的结构
文件系统可以分为不同的部分,一般来说和/root一起的有/bin,/lib,/ete,/dev和一些其它的。/usr里面放的是程序和不变的数据。/var里面放的是总是发生变化的数据,/home里面是每个用户的个人数据。依靠硬件的配置和系统管理员的选择不同,也会有不同的文件系统。上面所提到的各个文件系统可以再一个文件系统中都出现。

第三章更详细的描述了文件系统的结构,文件系统的层次标准,你可在下面站点获得更多的细节:http://www.pathname.com/fbs


第三章  文件目录树概述

“过了两天,Pooh坐在树枝上,一边悠闲的晃着腿,一边吃着密~”(这句可能和原文有很的出入,请参考原文)

本章节以文件系统层次标准为基础,讲述了标准文件树中的几个主要部分。在这里讲述将文件系统分为几个部分的一般方法和这样做的目的,并不是所有的linux版本都严格遵循这个标准,但是基本上有很多的共同点。

3.1背景
本章没有严格的基于文件层次标准,2.1版本,这个标准尝试为linux中怎么设置文件结构确定一个标准,这个标准利用linux文件的读写和软件扩展,也利于管理linux的机器,因为遵循这个标准可以让机器上的每个文件都在可以被指定的地方,方便操作。没有什么人来强制每一个版本的linux来遵循这样的标准,但是,目前大多数的linux发行版本都支持这个标准。没有不得不的理由的话,请不要违背FHF。FHF继承了Unix的传统,也带有当前的趋势,致力于让有Unix经验的人和怪异的高手能很快熟悉linux系统。

本章没有像FHS那样详细,作为系统管理员,你有必要阅读完整的FHS来全面的理解它。

在这一章中,也没有详细的讲解每一个文件的内容。我们的意图是从系统的角度给出一个概述,而不是来描述每一个文件。对每一个文件更多的描述在这本手册的其它地方有所提及,你也可以查阅linux的man手册。

完整的文件树,尽可能的细分,把每一个功能块都分在一个磁盘或一个分区内,这样有利于磁盘配额的限制,方便备份,也有利于实现其它的系统管理目标。最主要的目录是根目录“/”,/usr,/var,和/home。每个目录都有它独有的功能。整个文件树不得不这样设计,因为这样子才能够让linux机器基于只读设备或者是通过NFS网络来提供更好的文件共享服务。



1,/root文件系统对每一个机器来说都有其自身特有的/root(一般来说,这个文件系统存储在本地的磁盘上,尽管它可以放在ramdisk上,或是网络上)。这/root里面,包含了系统启动时所必须的文件。它也建立了一个可以挂载其它文件系统的状态。因此,/root里面的内容足够在单用户模式下使用。它包含了修复文件系统的工具和从备份文件恢复文件的工具。
2,/usr包含了一般情况下所需要的所有命令,库,参考手册,等内容。在/usr中的文件不是特定于某个给定的机器的,在一般的使用中,都是不需要修改的。这样就可以保证在网络**享这些文件。这种方式可以节约磁盘空间,也可以方便系统管理员通过网络来挂载/usr。即使这个文件系统放在本地,也最好是以只读的方式来挂载,这些可以再运行的时候减少对/usr的修改。
3,/var里面存放的是易变数据,例如邮件,新闻,打印作业等。有日志文件,各种格式的帮助手册,和一些临时的文件。在以往,/var下面的东西放在/usr下,如果这样的话,就不能用只读的方式来挂载/usr了。
4./home里面放的是用户自己的文件,例如用户在系统上的当前环境配置等信息。把/home和其他的文件目录分开,这样很容易来备份信息。其它的部分一般来说不需要备份,或者是不像/home这样要经常的变动。一个大的/home文件系统往往要拆分为几个不同的部分,例如/home可以拆分为/home/students和/home/staff。

尽管上面的各个部分,我们称之为文件系统,但是,没有必要一定要把它们分开。如果系统比较小,是一个单用户的系统,并且你想让事情变得简单一点,那么它们可以简单的放在一起。文件树也常常因为磁盘的可利用大小而被分成不同的部分。不管怎么说,有一点很重要,就是所有的文件名都要能正常的工作。即使/var和/usr划分在同一个区域,/usr/lib/libc.a和/var/log/messages一定要能正常工作。例如,你把/var移动到/usr/var里面,或者是你做了一个链接/var->/usr/var。

在Unix文件系统中,文件的存放位置往往取决于这些文件的用途。例如,所有的命令都存放在一个地方,所有的数据在另一个地方,文档也放在一个单独的位置,等。另一个可选择的方案是根据文件拥有者的不同,而放在不同的地方。例如,所有的Emacs文件放在一个文件夹里。所有的TeX文件在另一个文件夹里。这种处理方案导致的问题就是要想共享文件时困难的。(存放程序的目录往往把静态的文件,动态的文件,可共享的文件,可变的文件,和不可共享的文件都放在一起),并且也对查找某个文件也是困难的。(例如,把大量的man手册放在不同的地方,造成了查找整理他们就像做恶梦一样。)
3.2 /root
/root一般来说应该是小的,因为它包含的是应急文件(必须文件),和一些小的,和一些不会被频繁修改的文件。这样的话,对保持/boot的可用性是有帮助的。/root遭到破坏的话,你就只有采取特殊的措施,例如从软盘启动,所以我想,你应该不会要冒这个险吧。

/root文件系统通常不包含文件,不过在一些老系统上会存放有系统的启动镜像/vmlinuz。(现在大多数的版本都把这个文件移出了/root。)包含的子目录可能有

/bin
里面存放的是在系统引导过程中,或许是引导成功后被普通用户可以使用的命令。
/sbin
像/bin一样存放的是命令,不过这里的命令是让超级用户使用的,一般用户只有在允许时才能使用。/sbin不存在一个用户的PATH中,不过去是root的默认PATH。
/etc
     和特定机器相关的配置内容
/root
   超级用户的个人文件夹,在系统中,一般来说,其它的用户是不能随便访问的。
/lib/modules
   里面是内核可装载的模块,尤其是一些引导系统从灾难中恢复中所需的一些驱动,例如有网络驱动,和文件系统驱动。
/dev
  存放的是设备文件,有一些特定的文件来帮助用户给系统添加各种设备。
/tmp
  临时文件,就像名字那样,这里面存放的是应用程序在运行时产生的临时文件。
/boot
  里面放的是供引导系统的加载程序用到的文件。例如LILO,GRUB等程序。内核镜像文件常常放在这里而不是直接放在/root下,如果有多个内核文件,最好的选择是分开来放。你要确保内核文件放在磁盘的前1024个柱面内。但是现在这个限制已经可以不用考虑了,因为目前的BOISes和LILO程序可以从逻辑块地址来引导系统。你可以参照LILO的帮助页面来获取更多的信息。
/mnt
   里面存放的是系统管理员临时挂载点,不推荐把挂载点设置为/mnt,最好事在下面建立子目录来挂载。
/proc,/usr,/var,/home
   这些是一些其它文件系统的挂载点,/proc是一个虚拟的文件系统,在后面/proc章节中有更多的相关信息。

3.3 /etc目录

在/etc里面存放了大量的文件,其中的一些在下面会被涉及到,其它的,你需要确定他是属于哪个程序的,然后阅读相应man手册来了解更多。许多的网络配置文件也放在这里。在“网络管理指南”这本书里有更多的描述。

/etc/rc 或者 /etc/rc.d 或/etc/rc?.d
  在系统启动或改变运行级别时运行的一些脚本或脚本目录
/etc/passwd
这是一个数据库文件,里面存放的是用户的用户名,实名,主目录,和一些其它的信息。可以从man手册中看到更多的有关这个文件格式的细节。
/etc/shadow
  这个文件通过加密的方式来保存用户的密码。
/etc/fdprm
   这是一个软盘参数表,里面描述了不同软盘的特点,你可以使用setfdprm这个命令。看相关的man手册获得更多信息。
/etc/fstab
   这个文件里列出了所有的在系统启动时自动挂载的文件系统的信息,使用的是mount -啊命令。在linux下,也包含了一些关于swapon -a的信息。参考5.10.7章节和mount的man手册获得更多的信息。也可以参照fstab的man手册。
/etc/group
  类似于/etc/passwd,但是记录的是组信息,而不是用户信息。参考man group获得更多信息。
/etc/inittab
Init程序的配置文件。
/etc/issue
里面保存的是在用户登录之前,由getty程序打印出来的提示信息。往往是一些简短的描述和欢迎信息。这些内容有系统管理员来设定。
/etc/magic
  有关文件类型方面的配置信息。保存了可以区别不同文件格式的信息。可以从magic和file的man手册中获得更多信息。
/etc/motd
里面的信息室有关成功登陆的时间和自动的提示信息。提示信息可以由系统管理员设定,往往是为了通知每一个用户的信息,例如计划的关机时间等。
/etc/mtab
里面是当前挂载的所有的文件系统的信息。被系统的启动脚本创建,也被mount命令自动更新。当你使用df时,里面的信息就会被打印出来。
/etc/login.defs
有关login命令的配置信息。
/etc/printcap
就像/etc/termcap /etc/printcap,但是这个命令是为了让打印者使用。并且,这个命令有不同的格式。
/etc/profile,/etc/bash.rc,/etc/csh.cshrc
当bash,csh启动时,就会去读取这些文件。这样做可以让系统管理员来为所有的用户设置全局的属性值。一般用户也可以复制这些文件到自己主目录下,然后再设定自己喜欢的环境属性。
/etc/securetty
  用来判定一个安全的连接终端。例如,判定这个连接终端从哪个目录登录是被允许的。但是,一般的,通过网络的连接,系统只获取虚拟控制台列表,所以这个时候的连接不能被授予超级用户的权限,推荐你用一般用户登录,然后用su和sudo来获取root权限。
/etc/shell
是可信shell程序列表。Chsh命令可以让用户改变他们的登录shell,所选择的shell只能是在shell可信列表里面的shell。Ftpd是一个用来提供ftp服务的程序。他将检查用户的shell是否属于shell可信列表。如果没有,将阻止用户的登录。
/etc/termcap
是有关终端功能的数据库文件。里面是多种终端所支持的“转义序列”。应用程序往往在/etc/termcap里面找出正确的转义序列来进行输出,而不是之前被编写成为只能在某个特定的终端上显示输出。这样让大多数的程序可以和大多数的终端互相兼容。
3.4 /dev
这个目录下面放的是所有设备所对应的设备文件。这些设备文件在系统安装时或是在脚本/dev/MAKEDEV的作用下创建。/dev/MAKEDEV.local是一个让系统管理员创建本地设备文件或链接的一个脚本(这不是标准MAKEDEV的一部分,就像有些非标准设备的设备文件)。

下面要说到的这些文件,虽然很重要,但在这里只是简单的涉及到,其中的许多文件需要内核的支持。请阅读内核文档来找到某个特定硬件的详细信息。

如果你发现有些设备应该在这里讨论,而这里却没有,请联系我,我将在下个版本中加上它。

/dev/dsp
数字信号处理设备,是发声程序和你的声卡之间的最基本的接口。这是一个字符设备,主设备号为14,副设备号为3.
/dev/fd0
指的是一个软盘驱动器。如果你有多个这样的设备,那么这些设备就会被按照顺序被进行编号。这是一个主设备号为2,此设备号为0 的字符设备。
/dev/fb0
第一个硬件缓冲设备(framebuffer)。Framebuffer是应用程序和具体的硬件之间的一个抽象的层。这意味着应用程序不需要知道它所使用的是哪一种硬件,它仅仅知道怎么和这个缓冲设备的应用程序接口怎么通信就行了。应用程序接口是事前就定义好的,被作为一个标准了的。这是一个主设备号为29,副设备号为0的字符设备。

/dev/hda
/dev/hda是主控制器下的第一个IDE设备。/dev/hdb是主控制器下的从IDE设备。/dev/hdc,/dev/hdd分别是从控制器下的主设备和从设备。每一个磁盘都会被分割为不同的分区。1到4的分区时主分区。5或5以上的分区是扩展分区。所有和某个分区所对应的设备文件会有若干组成部分。例如,/etc/hdc9就是在从控制器下的主设备的第九个逻辑分区。主设备号和从设备号有点复杂。在第一个IDE控制器下的所有的块设备的主节点为3,hda的副设备号为0,hdb从设备的设备号为64.。磁盘上的每一个分区来说,要把其分区号和副设备号相加。例如/dev/hdb5,的主设备号是3,副设备号就是69(64+5)。在第二个接口上,处理的方法是一样的,不过主节点号为22.

/dev/ht0
是第一个IDE磁带设备。接下来的设备会被命名为ht1等。是字符设备。主设备号为37,并且副设备号从0开始往后编,0是ht0,1是ht1。等。

/dev/js0
第一个“模拟器”(analogue joystick),往后依次编号为js1,js2,等。数字模拟器称为djs0,djs1等。他们是字符设备,主节点为15,从节点号从0到127.数字模拟器的从节点号是从128开始的。
/dev/lp0
第一个并行打印设备。接下来的设备标号为lp1,lp2,lp3,等。是字符设备。主设备号为6,从设备号从0开始,然后递增。
/dev/loop0
第一个回环设备。回环设备用来挂载没有存放在磁盘上的文件系统,例如,你想挂载一个ISO9660的cd镜像文件,还没有烧制到光盘上,那么你就可以把他挂载到这个回环设备上。这是非常简单的,并且他是依靠mount程序完成的,你可以参考man手册。回环设备的主设备号是7,从设备号从0开始依次递增。
/dev/md0
第一个磁盘组设备,差不多也就是RAID,请参考“RAID HOWTO”获得更多信息。t  http://www.tldp.org/HOWTO/Softwa ... 始依次增加。
/de/mixer
这是OSS设备的一部分。(开放声卡系统)。请参考OSS文档:t
http://www.opensound.com

/dev/null
这是一个无底洞,你把任何数据放进去,就再也看不到了,放入/dev/null的任何东西都会消失。这个设备是非常有用的,当你运行一个命令但是你不想让任何输出在终端上,你可以把输出重定向到这个设备。他是字符设备,主设备号是1,从设备号是3。

/dev/psaux
这是PS/2鼠标的借口,这是一个字符设备,主节点为10,副节点为1.
/dev/pda
并行的IDE磁盘工具,有很多相似和串行接口控制器(/dev/hd*).这是块设备,主设备号为45,从设备号有点复杂。第一个设备室/dev/pda,它的副节点号为0,再加上它的分区编号,那么就能确定一个分区。每一个设备限制在15个分区内。/dev/pdb的副节点号从16开始,/dev/pdc从32开始,/dev/pdd从48开始。所以对/dev/pdc6的副节点号为38(32+6),这样的规则限定了你不能超过4个并口磁盘和15个分区。
/dev/pcd0
并行的磁带设备接口。因为磁带只能是串行的,所以在这里仅仅是数字编号而已。这是字符设备,主节点为96.cong节点从0开始依次增加。
/dev/parport0
是未被设置的并行端口。有许多尝试利用并口的设备都有自己的驱动程序。它可以直接利用这些端口。这是字符设备,主节点号为99,从节点为0,从节点号随着设备的增加会依次增加。
/dev/random or /dev/urandom
这是一些核心的随机数字发生器。/dev/random是随机的。它利用硬件的“entropy”来产生数字,当没有足够的“entropy”可供使用时,它会等待,直到收集到可以使用的为止。
/dev/urandom 是和上面所说的相似的。开始他也是利用“entropy”来产生数据,如果没有“entropy”来供使用,他将使用一个伪随机数来继续产生随机 数。这种方案被认为是对密码的产生是不安全的。如果你的目标是安全,请选用/dev/random,如果速度对你来说更重要,你可以选择/dev/urandom。他们是字符设备,主节点为1,random的从节点为8,urandom的从节点为9.

/dev/sda
Scsi总线上的第一个SCSI设备。紧接其后的设备和IDE设备的命名是一样的,/dev/sdb是第二个SCSI设备,/dev/sdc是第三个SCSI设备。依次往后。

/dev/ttys0
第一个连接口,很多时候用户把modem(调制协调器)连接到系统上。
/dev/zero
这是一个简单的方式来获取许多的0大小的文件。每一次读取这个设备,这个设备都会返回0,例如,如果你想要得到一个固定长度的文件,而不关心里面的内容的话,这个设备就会很有帮助。这是一个字符设备,主节点号为1,从节点为5.

3.5/usr
/usr通常情况是比较大的,因为所有的程序都安装在这里。在/usr下的文件往往来自linux的发行版本。本地安装的程序或一些其它的工具往往放在/usr/local下面。这样可以让你更新你的系统而不用重新安装所有的软件。下面将要说的是/usr下的一些子目录。

/usr/X11R6
里面存放的是和X 系统相关的文件。这样可以是开发和安装X更简单。X系统不是系统必须的组件。在/usr/X11R6下的子目录结果和/usr下的子目录相似。

/usr/bin
   几乎涵盖了所有的用户命令,有一些命令是/bin或/usr/local/bin下的。
/usr/sbin
   一些不需要超级用户权限就可以运行的系统管理命令,例如许多的系统服务程序。
/usr/share/man,/usr/share/info,/usr/sshar/doc
帮助手册,GNU文档,和其他的一些各种各样的文档。
/usr/include
一些c程序的头文件。这些文件应该放在/usr/lib下,不过有一些传统的软件会需要这个路径。
/usr/lib
一些对程序或是子系统来说不变的数据,也包含一些可扩展(site-wide)的配置文件。命名为lib的文件来自于库,一些程序的单独的库函数会被放在/usr/lib下。
/usr/local
   这里是用来安装本地软件,和一些其它的文件。Linux系统不会在这里安装任何东西,这个文件夹被完全保留下来用于本地的管理。在你更新或升级系统时,这里面的软件都不会受到干扰。

3.6/var
/var里面放的是系统正常运行时会不段变化的数据。对每个特定的系统都有自己的特点,不能在网络上和别的系统共享一个/var目录。

/var/cache/man
这是一个man命令形成的一个文件。一般参考手册存放在/usr/share/man/man?里面(?的意思是不同的类型的信息,)。一个帮助手册会预先格式化,这些文件将被存放在/usr/share/man/cat*。还有一些帮助手册在首次使用时,需要被格式化。如果这些已经格式化的文档被存放在/var/cache/man里面的话,在下一次使用时,就不用再次格式化了。

/var/games
   如果,/usr目录以只读的方式挂载到系统上,那么安装在/usr目录下的游戏软件产生的数据就会存放在这里。

/var/lib
   在系统通常运行时产生的系统信息。
/var/local
   这里面是安装在/usr/local下的程序的变量值。(例如,例如一些需要有管理员权限才能安装的程序),要注意一点的是,在/usr/local下安装软件时也会用到其它的/var下的文件,例如/var/lock。
/var/log
   这里存放的是来自于各种程序产生的日志信息。尤其是下面的程序,login/var/log/wtmp,这个文件里面放的是所有的登入、登出系统的信息。Syslog,/var/log/messages,这里面放的是所有的系统程序和内核产生的日志。/var/log下的文件往往增长的出乎人的意料。所以需要你坐定期的清理工作。
  
/var/mail
这个位置是FHS,(文件层次标准)所推荐的存放用户邮件的位置。用户的邮箱位置依赖于你所使用的版本和FHS的差别,你的邮箱可能位于/var/spool/mail。

/var/lock
存放的是锁文件,许多的程序会依照协议在/var/lock下创建一个锁文件来声明使用自己正在使用一个特殊的设备或文件。别的程序会察觉到这个锁文件,就不会再去申请某个设备或文件。

/var/run
这里面存放的是在系统重启前的系统信息。例如/var/run/utmp里面包含的是当前用户的登入情况。
/var/spool
这里面存放的是新闻,打印作业序列,和一些其它的排队要完成的作业。在/var/spool下的不同的spool目录有不同的子目录。例如,新闻池子是/var/spool/news。要注意一点,一些发行版本如果严格遵照FHS的话,用户的邮件会存放在/var/spool/mail下面。
/var/tmp
这里面存放的是一些比较大的,或者是需要较长时间存储的一些临时文件。(尽管,系统管理员往往不允许许多很老的文件存放在这里)

3.7 /pool
   这是一个虚拟的文件系统。它不存放在磁盘上,取而代之的是它有内核创建在内存中。它用来提供一些系统信息(有关程序的基本信息,hence the name).一些重要的文件和目录会在下面讲到。在proc的帮助手册中会有更细节的描述。
/proc/1
  有关程序号为1 的程序的信息目录。每一个程序都会在/proc下依据自己的进程号创建一个自己的目录,
/proc/cpuinfo
  有关cpu的信息,比如它的型号,制造商,处理字长,等
/proc/devices
  列出了当前在运行的内核中挂载的设备驱动的信息,
/proc/dma
  显示,在此刻哪一个DMA通道被选择。
/proc/filesystems
  在内核里面注册的有关文件系统的信息。
/proc/interrupts
  显示正在使用的中断,并且每个中断的次数。
/proc/ioports
   在当前哪一个I/0端口在使用。
/proc/kcore
   是系统物理内存的镜像,和你的物理内存大小相同,但是并没有占用这么多,它是虚拟的,(记住一点,除非你把这里的文件复制到别的地方,在/proc里面一点也不占用磁盘空间。)

/proc/kmsg
放的是内核产生的信息,这些信息和syslog这个程序有关。

/proc/ksyms
这是内核的一个符号表(大概是提供有关内核函数的调用接口,这是我自己添加的,原文中没有)。

/proc/loadavy
是系统的负载平均值,是三个系统当前不得不做的任务的指示值。
/proc/meminfo
内存的使用情况,包括物理内存和交换分区。
/proc/modules
   显示当前内核都加载了那些模块
/proc/net
   网络协议的状态信息。
/proc/self
   如果这个一个程序正在访问/proc文件目录,那么这个程序自身的一个软连接就会放在这里。不同的程序会有不同的软连接。这样的方式可以方便的让程序访问它自身的在/proc下的目录(我不是很理解)
/proc/stat
放的是有关系统的不同的状态值,例如从系统启动到现在,出现了多少的错误。
/proc/uptime
  系统已经连续运行的时间。
/proc/version
内核的版本

注意的一点是,上面所提到的这些文件,往往是一些可以很容易读取的文本文件,但是,有时候,他们也会是格式化成不方便读取的格式。有许多的命令就仅仅是读取相关的文件,命令本身在稍微添加一点点东西,并且让这些内容更容易理解一点。例如free这个命令,它就是读取/proc/meminfo里面的内容。
发表于 2009-12-25 02:29:32 | 显示全部楼层
支持,多翻译一些好书出来
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表