代码改变世界

学习Linux(二)

2013-01-03 17:29  lefan  阅读(297)  评论(0编辑  收藏  举报

上节留下了六个问题,通过安装和简单使用Ubuntu,再对照问题,大概的回答了其中的五个问题。

问题1: Winows有注册表,为什Linux没有注册表
    关于分散的文本文件和集中的注册表两种软件配置方式的优劣,目前仍有争论。主流操作系统中,Linux操作系统一直使用单独的文本文件来存放配置信息。而Windows平台下基于.NET框架的软件对注册表的依赖性也大大减弱。事实上,.NET软件通常使用纯文本的XML(称为app.config)文档而不是注册表进行配置,这在某种意义上是向当初的ini文本配置方式的一种回归。部分绿色软件支持者认为,集中式的注册表要求软件需要进行专门的安装步骤才可以正常运行,而单独的文本配置文档则可以不需要安装,只要将软件的文档目录拷贝过来就可以使用;当不再需要软件的时候,除删除相关文档外对于注册表也需要进行卸载步骤,才有可能不在系统中留下痕迹(很多软件即使提供了卸载步骤,仍然会留下痕迹),如果使用文本配置文档,则能做得更干净。但是,文本配置方式导致某些系统软件的配置较为困难且缺乏统一的界面(如Linux中的情况),也是不争的事实,尽管现在已经有很多软件可以方便进行系统配置,但仍存在标准不够统一的问题。
    Eric S. Raymond在《UNIX编程艺术》一书中有如下叙述:

   对比terminfo数据库和Windows注册表,我们发现注册表出名地容易受到错误代码的破坏。这可能会使整个系统都无法使用。即使系统没有瘫痪,但如果破坏本身干扰了专用的注册表编辑工具,恢复工作就会很困难。

    对比terminfo数据库和Windows注册表,我们发现注册表出名地容易受到错误代码的破坏。这可能会使整个系统都无法使用。即使系统没有瘫痪,但如果破坏本身干扰了专用的注册表编辑工具,恢复工作就会很困难。从2000年以来部分恶性病毒如熊猫烧香等的破坏情形看,的确存在“破坏本身干扰注册表编辑器”的问题。在某些情况下,病毒程序会监视系统进程列表,并强行关闭名为regedit的任何程序。这使得受损用户难以直接通过编辑注册表进行恢复。

     ---维基百科

注册表是Windows核心组件,对整个系统进行配置。Linux是以整个文件系统作为"注册表“,Windows注册表的树形结构,可以粗略的对应Linux文件系统的树形结构。
   那么Linux为什么要这样设计呢?因为Linux是所谓的网络操作系统,所以单台电脑不是Linux的界限,如果是多台电脑组成的系统,那么分布式的管理就有着巨大的优势。 例如:一个包含配置文件的磁盘的损害不会让整个系统瘫痪,而可能只是让部分功能失效。

  问题3:Linux有那么多目录,那么多命令,怎么记得住呢?
  首先,Linux目录是Linux系统最灵魂的东西,所有的硬件都可以被抽象为文件,从而实现网络化。(Internet只不过是Unix/Linux的进一步的演化而已)
  所以只要掌握了Linux目录的规律,在理解的基础上记忆就可以容易的多。另外Linux的命令行有智能化功能,可以让你少打95%以上的字符来完成命令。
  绝非你所想象的傻乎乎的敲一大堆命令,那些用Linux大牛都是绝顶聪明的人,怎么可能让自己辛苦呢?

  问题4:Linux的文件夹结构看上去很复杂,怎么理解呢?

Linux目录的规律

系统引导启动后首先就得挂载/分区,然后才挂载其它分区。所以/分区很重要,要是有问题,就会造成无法启动。所以尽量将根分区独立出来。而且小一点比较好。

 /bin 存放最基本的可执行文件。这里主要存放的一些所有用户都可以用的一些最基本的命令执行文件。如ls,cd之类的。这里面的命令可以在单用户下执行。且为系统启动必需加载的命令

/boot存放系统启动文件,核心文件vmlinuz就在这里面。还有grub引导程序也在这个目录下。

/dev存放各种设备文件,如硬盘,鼠标,键盘之类的。/dev/sda /dev/null 等

/etc主要存放各种配置文件。一些开机启动进程的配置文件就在这里面。如vsftpd。用户账号密码也保存在这里。/etc/init.d存放开机启动脚本文件。

/lib 存放一些开机时用到的系统链接库文件。/lib/modules放置了核心驱动模块。

/media存放挂载点的目录。如果光盘可以挂载在这里。以前版本中是挂载到/mnt目录下的。

/opt安装其它软件的目录。比如我们自己下载的一些软件。只不过有的是安装在/usr/local 、/usr/share下面的。

/root 在进入单用户模式时,挂载的家目录就是root目录,root目录一般与/目录在同一分区中。

/sbin放置了很多系统启动及单用户需要的命令。这里面很多命令只能root用户才有权限来执行。如fsck,mkfs等。这里面的命令一般是系统自带的基本命令。如果是一些服务器安装的程序,如vsftpd。则进程安装在/usr/sbin中。

/tmp这个目录是暂存目录,任何人都有权限。

/lost+found在系统出错时,将一些零时的碎片文件放在这里面以供恢复。一般会在挂载点的最顶层出现。如/home作为一个单独的分区而存在时,就会在/home下面有一个Lost+found。

/proc存放内存中的一些缓存文件,都存放在内存中,并不占用硬盘空间。常用的/proc/cpuinfo查看cpu信息。可以用du 来查看其占用量,发现其大小均为0!

 

/sys存放与核心相关的一些信息,也是存放于内存中,不占用硬盘空间。

有几个文件夹是必需位于/分区下且开机必需的:/dev挂载设备  /etc各种启动配置文件 /bin最基本的命令等 /sbin其它的命令进程 /lib核心模块驱动等。

/usr目录 usr是unix software resource的缩写,并不是user的缩写!/usr下存放各种软件资源的目录。根据FHS的定义,我们安装的软件一般都在这个目录下面。但这个目录下的软件并不是开机所必需的。如在/usr/bin下面我们可以找到gzip,yum等一些系统基本维护的命令。而在/usr/sbin下面我们能找到sshd等一些非系统必要的服务命令。/usr/local目录则用于存放自己安装的程序。里面也有bin,sbin等目录。/usr/share里面存放的一般是一些帮助文档。/usr/src放置原代码的目录。

/var存放动态文档。如/var/cache存放程序运行时暂存文件。/var/lib存放程序运行时需要的数据文件。/var/lock防止一个程序被多个人同时使用。/var/log存放各种日志文件,这个目录我们进得多。/var/mail用户邮件目录。/var/run存放程序执行pid的目录。比如我们可以cat sshd.pid查看现在sshd进程的pid。可以看到和我们用ps aux |grep sshd来查看的pid是一样的。/var/spool存放队列文档,在队列中的任务一旦完成便会被删除。如at计划,mail缓存。由于/var目录动态性这么强,出错机率就比较高,所以建议从/分区中独立出来。可作为单独分区挂载。

 

我们在执行文件时,位于/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin 目录下的可执行文件能直接输入命令执行。但是如果可执行文件不在这些默认执行目录下,就必需指定文件路径。这就是为什么要用./command来执行命令了。

/bin,/sbin为系统启动需要加载的一些基本进程,且在单用户下也得加载。而/bin和/sbin的主要区别在于/bin下面是一些最基本的命令,且所有用户均可使用。/sbin下面的是root用户使用的命令。它们与/usr/bin,/usr/sbin的区别在于,/usr下面的程序不为系统启动必需进程,

可以用uname -a 来查看系统内核版本号。可以用lsb_release -a 来查看系统版本。

  问题5: 什么是"/usr" ,"/etc"和“/var“

  当用户启动系统以后,要做一些更加复杂的工作,这时候就会涉及到一个叫“/usr",这个情况稍微有些复杂,是一个难点。不过也很容易解释清楚。
  早期的unix系统都有很多块硬盘,当时硬盘的容量都很小,所以往往一个硬盘只放一个目录,比如“/boot"可以放在一个单独的"boot"盘上,上面提到的5个目录,是系统运行必不可少的。
  而当系统启动以后,我们需要其他一些用于具体工作的程序时,我们就会加载一个“/usr"目录,上面放重要的运行程序。
  容易引起疑惑的是"usr"这个名字, 在历史上,原来这个确实是user的缩写,不过现在和user没有任何关系了, 你可以把它看成是"universal software resource"的缩写。
  这个“/usr"有点类似Windows里面的Program Files。
  因此 /bin 和 /usr/bin的区别,就是 /bin里面的程序更加核心  
  这时候,很多人会有疑问, 我们记住哪些命令在/bin 还是在/usr/bin呢?
  放心,由于所有的bin目录都会登记到系统变量PATH里面, 因此无论你在任何当前目录中,只要输入命令文件的名称,系统都会帮你找到这个命令并运行。
  要点:
  1,/usr上面一般都是只读文件,数据文件和配置文件不放在上面(放到哪里,后面会讲)
  2,没有“/usr",linux系统也能正常运行
  2,/usr可以被多台电脑共享(这里体现Linux系统的网络性)
  
  由于/usr只放只读文件,那么配置文件和数据文件放哪里呢?这里就出现了2个新的目录“/etc"和“/var"
  这里容易初学者迷惑的就是这个2个目录的名字。
  在历史上 "etc“是 “etcetera”,中文意为“其他”, 现在这个和“其他”没有任何关系, 就是专门存放配置文件的地方,可以理解为“editable text configuration"的缩写
  比如 /etc/mysql就是放mysql的配置文件 /ect/apache2/就是apache2的配置文件
  在历史上“var" 是 “variable",中文意为“变动”,现在主要用来存放log,lock等文件。
  例如 /var/mysql就是用来存放mysql的log
 

问题6:用户自己产生的数据放到哪里?


  当我们运行程序后,会产生很多自己的成果,这些成果放哪里呢?这里就出现了一个“/home"目录,不过你不能直接放到“/home"目录下,因为Linux是个多用户操作系统, 所以系统会有一个以用户的名字命名的目录。
  例如:用户是lefan ,那么目录就是/home/lefan ,这个目录也可以用“~“来表示。