3UNIX基础知识

3.1概要

这章将介绍FreeBSD操作系统的基本命令和功能。这章的许多地方是与UNIX类操作系统相关的。如果你熟悉这些知识的话,可以跳过这一章。如果你还是个FreeBSD的新手,应当首先阅读这一章。

读完这章,你会了解到:

             UNIX的文件访问权限是如何工作的。

             进程,后台,和信号是什么。

             什么是shell,如何改变你的默认登陆环境。

             如何使用基本的文本编辑器。

             如何阅读联机手册(manual page)了解更多信息。

3.2权限

FreeBSD,仍然保持着BSD UNIX的传统,它的基本原理仍然是以几个关键的UNIX概念为基础的。首先,最显著的就是:FreeBSD是一个多用户的操作系统。这个系统能够允许许多毫不相关的任务同时工作。对于每一个用户来讲,系统都能非常可靠地分享和管理着来自不同硬件设备、内存、CPU时钟的处理请求。

因为系统支持多用户,所以系统管理的每一件事情都必须要设置谁有读,写和执行的权限。这个权限用八进制的形式来表示,把它分成三部分:文件拥有者,文件拥有者所在组和其他成员。这种表示方法如下所示:

权限

目录列表

0

No read no write no execute

---

1

No read no write execute

--x

2

No read write no execute

-w-

3

No read write execute

-wx

4

Read no write no execute

r—

5

Read no write execute

r-x

6

Read write no execute

rw-

7

Read write execute

rwx

 

你可以使用ls -l命令看一下一个长目录列表,它会显示每个文件的文件所有者、文件所有者所在组和其他成员的权限信息。这里就是列表的第一行:

从左到右,第一个字符是一个特殊的字符,它告诉你这是一个规则文件,一个目录,一个特殊字符,一个块设备,一个套接字,或是其他的伪设备文件。下面的三个字符“rw-”指明了文件所有者的权限。再下面的三个字符“r--”指明了文件所有者所在组的权限。最后面的三个字符“r--”,给出了其他用户的权限。一个破折号表示这个权限被关闭了。在这样一个设置下,意味着只有文件所有者才能读、写文件,组能够读文件,其他用户只能读文件。按照上表的指示,这个文件的权限应该是644,每个数字都代表着这个文件权限的三个部分。FreeBSD是如何来控制设备的权限的呢?事实上,FreeBSD把绝大多数的硬件设备看作是一个文件,就像其他文件能够被打开,阅读,写数据一样。这些特殊的设备文件保存在/dev目录下。

目录也可以当作文件来看待。它们有读、写和执行的权限。这里的可执行跟其他文件的可执行有一些差别。例如,当一个目录被标记为可执行时,意味着这个目录可以被查找到,并且可以在这个目录下列目录。如果你想了解如何设置权限的话,你可以参考chmod命令的联机手册。

3.3目录结构

FreeBSD的层次式目录结构是建立在对系统的完全了解的基础上的。需要掌握的最重要的概念是root目录“/”。这个目录是系统启动时最先被挂上的,而且它包含了为多用户操作准备操作系统时必要的基本系统。root目录也包含了你想要挂上的其他文件系统的加载点(mount point)。

加载点是其他文件系统能够被连接到root文件系统的目录。标准的加载点包括/usr/var/mnt/cdrom。这些目录通常会引用/etc/fstab文件中的记录。/etc/fstab是一个几种文件系统的表,加载点通过系统来作参考。在/etc/fstab中指出的绝大多数文件系统,能够在启动时根据rc脚本自动被挂上,除非它们包含noauto选项。你可以参考fstab的联机手册,了解更多有关/etc/fstab文件格式和它所包含选项的信息。

一个完整的对层次式文件系统的描述可以用hier命令来完成。现在,主要的目录结构就是这些:

目录

描述

/

文件系统的根目录。

/bin/

单用户和多用户环境下,用户使用的基本工具。

/boot/

操作系统启动过程中使用的程序和配置文件。

/boot/defaults/

默认的启动配置文件;看看loader.conf的联机手册。

/dev/

设备节点;看看intro的联机手册。

/etc/

系统配置文件和脚本。

/etc/defaults/

默认的系统配置文件;看看rc的联机手册。

/etc/mail/

sendmail这样的用于邮件传输代理的配置文件。

/etc/namedb/

named配置文件;看看named的联机手册。

/etc/periodic/

每天,每周,每月运行的脚本;看看periodic的联机手册。

/etc/ppp/

ppp配置文件;看看ppp联机手册。

/mnt/

系统管理员使用的用作一个临时加载点的空目录。

/proc/

进程文件系统;看看procfsmount procfs联机手册。

/root/

root帐户的主目录。

/sbin/

单用户和多用户使用的系统程序和管理工具。

/stand/

在独立环境下使用的程序。

/tmp/

临时文件。

/usr/

主要是用户的工具和应用程序。

/usr/bin/

通常是工具,程序工具和应用程序。

/usr/include/

标准C include文件。

/usr/lib/

文档库。

/usr/libdata/

各种工具的数据文件。

/usr/libexec/

系统守护程序和系统工具(被其他程序执行的)。

/usr/local/

本地执行的,库等。也是默认的放置port框架的地方。port的文档放在/usr/local/share/doc/port中。

/usr/obj/

通过建立/usr/src目录树产生的特定结构的目标树。

/usr/ports

FreeBSD ports collection

/usr/sbin/

系统守护程序和系统工具(由用户执行的)。

/usr/share/

独立结构的文件。

/usr/src/

本地源代码文件。

/usr/X11R6/

X11R6发行的可执行程序,库等。

/var/

多种日志,临时文件和spool文件。

/var/log/

多种系统日志文件。

/var/mail/

用户邮箱文件。

/var/spool/

多种打印机和邮件系统spooling 目录。

/var/tmp/

系统重新启动之间保存的临时文件。

/var/yp

NIS 地图。

 

3.4挂上和卸载文件系统

文件系统可以形象化为一棵树,root就是根:像这样//dev/usr等。根目录下的其他目录也可能有分支,这些分支也会有它们自己的分支,像这样/usr/local等等。之所以要采用这种分离的文件系统有很多原因。/var包含log/spool/和多种临时文件,所以这个目录可能会被塞满。塞满根文件系统不是一个好主意,所以从/分离出一个/var比较好。

在其他的文件系统上,采用这种目录树结构的另一个原因是它们可能会在另外一个物理磁盘上,或在另外一个虚拟磁盘上,例如加载NFS文件系统或CDROM驱动器。

3.4.1 fstab文件

在系统启动的过程中(在第7章有详细描述),在/etc/fstab中列出的文件系统会被自动地挂上。/etc/fstab文件包含了一个以下面的格式排列的列表:

device   /mount-point   fstype   options   dumpfreq   passno

 

Device

一个设备的名称,就像上一章磁盘命名规则所提到的(第12.2节)。

mount-point

一个目录,在它上面挂上文件系统。

Fstype

要挂上的文件系统类型。FreeBSD的默认文件系统是ufs

Options

这个选项既可以是rw可读写文件系统,也可以是ro只读文件系统,可根据其他选项的要求来定义。在系统按顺序启动过程中,一个普通的选项是noauto,它通常不会被挂上。其他的选项可参看mount的联机手册。

3.4.2 mount命令

mount命令通常是用来挂上文件系统的。它的最基本的操作格式:

# mount device mountpoint

它有很多的选择选项,但主要是下面这些:

mount 选项

-a

挂上/etc/fstab中列出的所有文件系统。除了那些被标记为“noauto”或已经被挂上的文件系统,可以加上-t选项来把它们排除在外。

-d

除了实际的系统呼叫以外,可以做任何事情。这个选项是与-v选项连在一起使用的,可以决定mount实际在做什么事情。

-f

强迫挂上一个有问题的文件系统(这是很危险的),或者,当把一个文件系统的加载状态从读写降为只读时,可以强迫撤回写入的操作。

-r

挂上只读文件系统。这与使用rdonly命令加上-o选项完成的功能是一样的。

-t fstype

挂上给定的文件系统作为给定文件系统类型,或者,如果加上-a选项,就只能挂上给定类型的文件系统。“ufs”是默认的文件类型。

-u

在文件系统上升级加载选项。

-v

更加详细。

-w

挂上可以读写的文件系统。

-o选项提供了一个用逗号分割的选项列表,包括下面这些:

nodev

不要解释文件系统上的特殊设备。有用的安全选项。

noexec

不允许在这个文件系统上执行二进制程序。有用的安全选项。

nosuid

不要在文件系统上解释setuidsetgid标记。这也是有用的安全选项。

3.4.3 umount命令

umount命令后面加上的选项可能是一个加载点,一个设备名,或是-a-A选项。所有加-f选项的形式将会被强迫卸载,-v选项就会太冗长。-a-A选项用来卸载所有已挂上的文件系统,但不建议卸载root文件系统。

3.5进程

FreeBSD是一个多任务的操作系统。这意味着可以同时有多个程序一起运行。系统运行的每个程序叫做一个进程(process)。每个程序都至少要启动一个进程,系统中时刻都有很多进程在运行,以维持系统的功能。

每一个进程都有一个叫做进程IDPID的号码来指定,每个进程也会有一个主人(或叫属主)和它所在的组。主人和组的信息用来决定进程能够打开什么文件和设备,使用文件的权限。绝大多数进程都有一个父进程。父进程是启动其他进程的进程,你运行的任何命令也是进程。用这种方式运行的每个进程将使用你的shell作为它的父进程。除这个进程以外有一个特殊的叫做init的进程。Init总是第一个进程,所以它的PID总是1。当FreeBSD启动时,init会被内核自动启动。

有两个命令可以用来查看系统的进程,pstopps命令用来显示当前运行的进程的列表,还可以显示它的PID,它们使用多少内存,它们启动的命令行等等。Top命令显示了所有运行的进程,每隔几秒就刷新一次,以至你可以动态地观察你计算机的工作状况。默认情况下,ps只显示你自己的正在运行的命令。例如:

    % ps

      PID  TT  STAT      TIME COMMAND

      298  p0  Ss     0:01.10 tcsh

     7078  p0  S      2:40.88 xemacs mdoc.xsl (xemacs-21.1.14)

    37393  p0  I      0:03.11 xemacs freebsd.dsl (xemacs-21.1.14)

    48630  p0  S      2:50.89 /usr/local/lib/netscape-linux/navigator-linux-4.77.bi

    48730  p0  IW     0:00.00 (dns helper) (navigator-linux-)

    72210  p0  R+     0:00.00 ps

      390  p1  Is     0:01.14 tcsh

     7059  p2  Is+    1:36.18 /usr/local/bin/mutt -y

     6688  p3  IWs    0:00.00 tcsh

    10735  p4  IWs    0:00.00 tcsh

    20256  p5  IWs    0:00.00 tcsh

      262  v0  IWs    0:00.00 -tcsh (tcsh)

      270  v0  IW+    0:00.00 /bin/sh /usr/X11R6/bin/startx -- -bpp 16

      280  v0  IW+    0:00.00 xinit /home/nik/.xinitrc -- -bpp 16

      284  v0  IW     0:00.00 /bin/sh /home/nik/.xinitrc

      285  v0  S      0:38.45 /usr/X11R6/bin/sawfish

正如你在这个例子中看到的,ps的输出形式是根据数字的纵向排列来组织的。PID是先前讨论的进程IDPID1开始,最高到65536