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。当你运行完成以后,再从头开始。TT显示了正在运行的tty终端,目前可以安全地被忽略。

STAT显示了程序的状态,也可以安全地被忽略。TIME是程序消耗的CPU时间——这是你执行程序以来不必要花费的时间,因为它们在CPU上花费一些时间之前,一些程序需要一些时间来等待将要发生的事情。最后,COMMAND是用来运行程序的命令行。

ps支持许多不同的选项来改变显示的信息。最有用的选项是auxwwa显示了一个所有运行的进程的信息,不仅仅是你自己的。u显示了进程主人的用户名,与内存的用法一样。x显示了后台运行的进程信息,ww用来显示完整的命令行,一旦它比较长而超出屏幕时,就会截取其中一段。

Top的输出也很相似。可以看看下面的例子;

    % top

    last pid: 72257;  load averages:  0.13,  0.09,  0.03    up 0+13:38:33  22:39:10

    47 processes:  1 running, 46 sleeping

    CPU states: 12.6% user,  0.0% nice,  7.8% system,  0.0% interrupt, 79.7% idle

    Mem: 36M Active, 5256K Inact, 13M Wired, 6312K Cache, 15M Buf, 408K Free

    Swap: 256M Total, 38M Used, 217M Free, 15% Inuse

    PID USERNAME PRI NICE SIZE  RES STATE  TIME  WCPU  CPU COMMAND

    72257 nik       28   0  1960K  1044K RUN  0:00   14.86%  1.42% top

     7078 nik        2   0 15280K 10960K select   2:54   0.88%  0.88% xemacs-21.1.14

      281 nik        2   0 18636K  7112K select   5:36   0.73%  0.73% XF86_SVGA

      296 nik        2   0  3240K  1644K select   0:12  0.05%  0.05% xterm

    48630 nik        2   0 29816K  9148K select   3:18   0.00%  0.00% navigator-linu

      175 root       2   0   924K   252K select   1:41   0.00%  0.00% syslogd

     7059 nik        2   0  7260K  4644K poll    1:38   0.00%  0.00% mutt

    ...

整个输出被分为两节。头上(最初5行)显示运行着的最后进程的PID,系统的平均负载(反映系统的繁忙程度),系统的正常运行时间(从上次重新启动以来的时间),和当前的时间。其他的图显示了当前运行了多少个进程,有多少内存和交换空间已经被占用,系统在不同CPU状态之间切换需要花费多长时间。

下面有一连串的纵向排列的ps命令的输出信息。你可以看到PID,用户名,CPU时钟的花费数量,正在运行的命令。Top也默认地显示了进程所花费掉的内存空间的数量。这可以被分成两列,一列针对所有的内存数量,一列针对常驻内存数量。整个内存数量就是应用程序需要多少内存,常驻内存是在此刻使用的内存数量。在这个例子中,你可以看到Netscape需要使用30M内存,当前只使用了9MBTop每隔两秒自动刷新一次,这可以通过加上s选项来修改。

3.6守护程序,信号和杀死进程

当你使用一个编辑器的时候,你可以让它调用一些文件。因为它们提供了这样的功能,而且它们是与一个终端连在一起的。但,有一些程序却不能让用户输入信息,它们是不与终端连在一起的。例如,一个web服务器花费所有的时间来回应用户的请求,它通常不需要你有任何的输入。从一个站点到另一个站点传送email是另外一个这种类型的应用例子。我们叫这些程序为守护程序(daemon)。Daemon具有希腊神话的特征,有鼓舞人们的精神的意思,这对人们是很有用的。今天很多web服务器和mail服务器都使用这些。这就是为什么很久以来人们看到穿着运动鞋,手持叉子的BSD精灵就会高兴的原因。

有一个命名守护程序的约定,就是在程序名后面加上一个“d”字母。BINDBerkeleyInternet命名守护程序(实际执行的程序叫做named),Apache web服务器程序叫做httpd,行式打印机的守护程序是lpd等等。这只是一个约定,不是强迫要遵守的规则;例如,sendmail的守护程序叫做sendmail,而不是你想象的maild

有时你可能需要与一个守护程序进行通信。这些通信就叫做信号(signal)。你可以通过给守护程序发送信号(或是运行进程)来与它通信。如果你发送的信号有很多(有一些有特殊的用处),其他的会被应用程序解释,应用程序的文档会告诉你如何解释信号。你可以发一个信号给你自己的一个进程。如果你想发送一个信号给其他人的进程,它就会被忽略。root用户除外,它可以发送信号给每个人的进程。

有些情况下,FreeBSD也会给应用程序发送信号。如果一个应用程序写入错误,就会设法访问内存,FreeBSD会给进程发送Segmentation Violation signal (SIGSEGV)。如果一个应用程序使用alarm系统来发出警告,那一段时间以后,它也会发送警告信号(SIGALRM)。

两个信号可以用来中断一个进程,SIGTERMSIGKILLSIGTERM是一个比较友好的杀死进程的方法;这个进程也会捕获信号,以便让你关机,关闭可能已经打开的日志文件。在关机之前,通常需要完成当前正在做的工作。有时,如果它是处在一个不能打断的任务中,一个进程可以忽略SIGTERM

SIGKILL无法被进程忽略。它会发出这样的信号“I do not care what you are doingstop right now”。如果你发送SIGKILL给一个进程,FreeBSD将会那儿停止那个进程。

你可能要用到的其他信号是SIGHUPSIGUSR1SIGUSR2。这些是普通用途的信号。当它们被发送时,不同的应用程序将做不同的事情。

建议你改变一下web服务器的配置文件——最好告诉web服务器重新读取它的配置文件。你需要停止然后重新启动httpd,但这会在你的web服务器上增加一些消耗,而这可能是你不太欢迎的。绝大多数守护程序通过重新读取它们的配置文件来对SIGHUP信号作出回应。不同的守护程序将有不同的行为。所以,要带着问题来阅读守护程序的联机手册。

可以使用kill命令来发送信号,例如:

发送一个signal给进程

这个例子显示了如何发送一个信号给inetdInetd的配置文件是/etc/inetd.conf。当它接收到SIGHUP时,inetd将重新读取这个配置文件。

1.    寻找你要发送信号的进程ID。可以使用psgrep命令。grep命令被用来搜索输出,寻找你要指定的字符。这个命令可以由一个普通用户来执行,而inetd必须是root用户才能运行,所以ps必须带上ax选项

           % ps -ax | grep inetd

          198  ??  IWs    0:00.00 inetd -wW

这儿,inetd PID198。有时,grep inetd命令也需要出现在这个输出中。这是因为ps必须要找到当前运行的进程的列表。

2.    使用kill来发送信号。因为inetd只有root用户才能运行,你必须使用su来变成一个root用户。

           % su

           Password:

           # /bin/kill -s HUP 198

与普通的UNIX命令一样,如果它成功执行,kill将不会输出任何信息。如果你想发送一个信号给一个进程,你会看到“kill: PID: Operation not permitted”。如果你打错了PID,你有可能把信号发错给了某个进程,这样会很糟糕,也有可能把信号发给一个当前不在使用的PID,你将可能看到“kill: PID: No such process”这样的信息。

为什么使用/bin/kill许多shell提供了内建命令killshell将直接发送信号,比运行/bin/kill要好。这点非常有用,但不同的shell需要用不同的语法来指定发送信号的名字。发送其他的信号也很相似,只要在命令行替换TERMKILL就行了。

重要点:在系统中随意地杀死进程是个坏主意。特别地,init进程ID1,非常特殊。运行/bin/kill -s KILL 1是一个快速关闭你系统的方法。在你键入Return键之前,请你仔细检查你执行的kill的选项。

3.7 Shell

FreeBSD中,许多工作是通过一个叫命令解释器(shell{俗称外壳}的命令行接口来完成的。shell的主要工作是接收输入的命令然后执行它们。许多shell的内建功能也能用来帮助完成每天的工作,如:文件管理,文件查找,命令行编辑,宏命令,以及其他环境设置。FreeBSD有许多种shell,如:shBourne ShellcshC-shell。许多其他的shell,如tcshbash拥有更强大的功能,你可以在FreeBSD的软件包中找到。

你使用哪个shell?那还真是个问题。如果你是一个C程序员,你可能觉得像tcsh这种C类型的shell,用起来比较舒服。如果你使用Linux或你是一个UNIX的新手,你可能会试一试bash。这里要指出的是每一种shell都有它自己的特点,你可以根据你的喜好自由地选择。Shell的一个基本特征是文件名的自动补充功能。通常在你输入一个命令或文件名时,你先输入几个字母,然后按TAB键,命令或文件名会自动补上剩下的字母。例如:我有两个文件:foobarfoo.bar。我要删除foo.bar。所以我就输入:rm fo[TAB].[TAB]Shell就会打出rm foo[BEEP].Bar[BEEP]是铃声。它能够告诉我,因为匹配的问题shell不能自动补充文件名。因为foobarfoo.bar同时以fo开始,但它无法完成foo。一旦我输入.,然后键入TABshell就能补充完文件名。

Shell的另外一个功能就是环境变量。环境变量是存储在shell环境空间中的可变关键字对。这个空间能够被shell调用的任何程序读取,而且包含了许多程序配置。这儿是一个普通环境变量的列表以及它们所代表的含义:

变量

详细说明

USER

现在登陆的用户名称。

PATH

以冒号分隔的目录列表以便寻找执行文件的路径。

DISPLAY

X11显示连接的网络名称,如果有的话。

SHELL

目前使用的shell

TERM

用户终端的名称。用来决定终端机的能力。

TERMCAP

完成几个终端功能的终端退出代码的数据库记录。

OSTYPE

操作系统的种类,如FreeBSD

MACHTYPE

现在系统所用的CPU

EDITOR

用户喜欢的编辑器。

PAGER

用户喜欢的文字呼叫器。

MANPATH

以冒号分隔的目录以便寻找联机手册。

 

在各shell之间,设置一个环境变量稍微有点不同。例如,像tcshcshC风格shell,你可以使用setenv来设置或查看环境变量。而在像shbashBourne shell下,你可以使用setexport来查看和设置环境变量。例如,在cshtcsh下,设置或修改环境编辑器,可以把编辑器设置成/usr/local/bin/emacs

%setenv EDITOR  /usr/local/bin/emacs

Bourne shell下:

%export  EDITOR=“/usr/local/bin/emacs”

你也可以在命令行用$放在变量的前面来取得环境变量。echo $TERM就会显示出$TERM的设置值,因为shell取得了$TERM并把它传给echo显示出来。

Shell里有很多特殊字符作为一些数据的特定表示,我们叫做元字符(meta-characters)。最常用的就是*这个字符,它代表文件名的任何字符。这些meta-characters会被用在文件名称的全域样式上。举例来说,键入echo *是和ls有同样的效果,因为shell将所有符合*的文件传到命令行给echo显示出来。

为了防止这些特殊的字符被shell解释执行,我们可以在前面放一个反斜线(\)让它们跳出来。echo $TERM会显示出你所设置的终端机,而echo \$TERM就会直接显示出 $TERM这几个字符。

3.7.1 改变你的shell

改变你的shell的最简单方法是用chsh命令。运行chsh就可以把你带入EDITOR环境变量的编辑器中。如果编辑器没有设置的话,你就可以用vi来代替。直接在此改变“shell。你也可以给chsh加上-s的选项。这样就可以直接设置你的shell,而不需要你键入一个编辑器来设置shell。例如,如果你想把你的shell改成bash,你只要这样做:

% chsh -s /usr/local/bin/bash

运行不带参数的chsh,编辑shell将同样能达到目的。

注意:你使用的shell必须在/etc/shell文件中列出来。如果你从ports collection安装一个shell(第4章),那这就已经为你做完了一切。如果你是手工安装shell,那你就必须这样做。例如,如果你手工安装bash,并且把它放在/usr/local/bin中,你只要这样做:

#echo “/usr/local/bin/bash”>>/etc/shells

然后再执行chsh

3.8文本编辑器

FreeBSD中,许多配置信息都是通过编辑一个文本文件来完成的。所以,熟悉一个文本编辑器是非常必要的。FreeBSD带有许多的编辑器,可以在ports collection中找到。最容易和最简单的编辑器就是ee了,它非常容易掌握。要启动ee,你只需要在命令行键入ee  filename,这儿的filename就是将要编辑的文件名。例如,要编辑文件/etc/rc.conf,只要键入ee /etc/rc.conf。一进入ee,许多编辑功能就都列在屏幕的顶部。^字符是指键盘的ctl键,所以^e就是ctl键加上e键。要离开ee,只要键入escape键,然后选择离开。编辑器会提示你保存刚才的修改。

FreeBSD也带有很多功能强大的编辑器,像viemacsvim等。这些编辑器都有很强大的功能,你需要认真地学习。如果计划编辑很多文本的话,学习一个功能强大的如vimemacs这样的编辑器将在长时间的工作中为你节约很多时间。

3.9设备和设备节点

一个设备大都是被系统中与硬件相关的活动所使用的,包括磁盘,打印机,图形卡和键盘。当FreeBSD启动时,显示的大都是检测到的设备。你可以查看/var/run/dmesg.boot文件来看看启动信息。

例如,acd0是第一个IDE CDROM驱动器,而kbd0则是键盘。在UNIX系统中的绝大多数设备必须通过一个叫做设备节点的特殊文件才能被访问,这些都放在/dev目录下。

3.9.1创建设备节点

当你在系统中添加了一个新的设备或编译支持额外的设备时,需要经常创建一个设备驱动。

MAKEDEV脚本

系统中如果没有DEVFS,设备节点可以使用MAKEDEV脚本来创建:

    # cd /dev

     # sh MAKEDEV ad1

这个例子中将创建第二个IDE驱动器的设备节点。

devfs (设备文件系统)

设备文件系统或devfs,在所有的文件系统命名空间中提供了访问内核设备的命名空间。不一定要创建和修改设备节点,Devfs也可以为你维护这个特殊的文件系统。devfs将在FreeBSD 5.0中作为默认使用项。

3.10更多信息

3.10.1 联机手册

绝大多数FreeBSD的参考文档是以手册的形式出现的。系统的每个程序都有一个简短的联机手册用以解释基本的操作和多种意见。这些手册能够用man命令来阅读。例如:

    % man command

command是你希望了解的命令的名字。例如,要知道ls的用法:

    % man ls

联机手册被分成好几节:

1.    用户命令。

2.    系统呼叫和错误编号。

3.    C库中的功能。

4.    设备驱动器。

5.    文件格式。

6.    游戏和其他娱乐方式。

7.    其他一些凌乱的信息。

8.    系统维护和操作命令。

9.    内核开发。

在一些示例中,同一个主题可能会出现在手册的很多地方。例如,chmod用户命令和chmod系统呼叫。在这个例子中,你可以告诉man命令,你要指定哪一节:

           % man 1 chmod

这将显示用户命令chmod的联机手册。参考一个联机手册的特殊的章节通常被附带在文章的后面,所以第一个chmod引用了chmod用户命令和第二个chmod引用了系统呼叫。  如果你知道命令的名字,就比较好,你只需要知道如何使用。但如果你无法想起命令的名字是什么?你可能要使用man加上-k选项在命令描述中搜索关键字:

           % man -k mail

这个命令将出现在一个带有关键字mail的命令行表中。这与使用apropos命令具有相同的功能。所以,你可以在/usr/bin中寻找所有的奇特的命令,但不要有其他不切实际的歪主意,只要这样做:

    % cd /usr/bin

    % man -f *

    % cd /usr/bin

    % whatis *

可以达到同样的目的。

 

3.10.2 GNU Info文件

FreeBSD包括许多自由软件基金会提供的应用程序和工具。除了联机手册之外,这些程序都提供叫做info的超文本文件,它可以用info命令来阅读,或者如果你有emacs,可以使用emacsinfo模式来阅读。

使用info命令:

     % info

要看看概要介绍,可以键入h。要看看快速命令参考,可以键入?