第3章UNIX基础知识
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/ |
进程文件系统;看看procfs,mount 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
不要在文件系统上解释setuid或setgid标记。这也是有用的安全选项。
3.4.3 umount命令
umount命令后面加上的选项可能是一个加载点,一个设备名,或是-a,-A选项。所有加-f选项的形式将会被强迫卸载,-v选项就会太冗长。-a,-A选项用来卸载所有已挂上的文件系统,但不建议卸载root文件系统。
3.5进程
FreeBSD是一个多任务的操作系统。这意味着可以同时有多个程序一起运行。系统运行的每个程序叫做一个进程(process)。每个程序都至少要启动一个进程,系统中时刻都有很多进程在运行,以维持系统的功能。
每一个进程都有一个叫做进程ID或PID的号码来指定,每个进程也会有一个主人(或叫属主)和它所在的组。主人和组的信息用来决定进程能够打开什么文件和设备,使用文件的权限。绝大多数进程都有一个父进程。父进程是启动其他进程的进程,你运行的任何命令也是进程。用这种方式运行的每个进程将使用你的shell作为它的父进程。除这个进程以外有一个特殊的叫做init的进程。Init总是第一个进程,所以它的PID总是1。当FreeBSD启动时,init会被内核自动启动。
有两个命令可以用来查看系统的进程,ps和top。ps命令用来显示当前运行的进程的列表,还可以显示它的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是先前讨论的进程ID。PID从1开始,最高到65536。当你运行完成以后,再从头开始。TT显示了正在运行的tty终端,目前可以安全地被忽略。
STAT显示了程序的状态,也可以安全地被忽略。TIME是程序消耗的CPU时间——这是你执行程序以来不必要花费的时间,因为它们在CPU上花费一些时间之前,一些程序需要一些时间来等待将要发生的事情。最后,COMMAND是用来运行程序的命令行。
ps支持许多不同的选项来改变显示的信息。最有用的选项是auxww。a显示了一个所有运行的进程的信息,不仅仅是你自己的。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内存,当前只使用了9MB。Top每隔两秒自动刷新一次,这可以通过加上s选项来修改。
3.6守护程序,信号和杀死进程
当你使用一个编辑器的时候,你可以让它调用一些文件。因为它们提供了这样的功能,而且它们是与一个终端连在一起的。但,有一些程序却不能让用户输入信息,它们是不与终端连在一起的。例如,一个web服务器花费所有的时间来回应用户的请求,它通常不需要你有任何的输入。从一个站点到另一个站点传送email是另外一个这种类型的应用例子。我们叫这些程序为守护程序(daemon)。Daemon具有希腊神话的特征,有鼓舞人们的精神的意思,这对人们是很有用的。今天很多web服务器和mail服务器都使用这些。这就是为什么很久以来人们看到穿着运动鞋,手持叉子的BSD精灵就会高兴的原因。
有一个命名守护程序的约定,就是在程序名后面加上一个“d”字母。BIND是Berkeley的Internet命名守护程序(实际执行的程序叫做named),Apache web服务器程序叫做httpd,行式打印机的守护程序是lpd等等。这只是一个约定,不是强迫要遵守的规则;例如,sendmail的守护程序叫做sendmail,而不是你想象的maild,
有时你可能需要与一个守护程序进行通信。这些通信就叫做信号(signal)。你可以通过给守护程序发送信号(或是运行进程)来与它通信。如果你发送的信号有很多(有一些有特殊的用处),其他的会被应用程序解释,应用程序的文档会告诉你如何解释信号。你可以发一个信号给你自己的一个进程。如果你想发送一个信号给其他人的进程,它就会被忽略。root用户除外,它可以发送信号给每个人的进程。
有些情况下,FreeBSD也会给应用程序发送信号。如果一个应用程序写入错误,就会设法访问内存,FreeBSD会给进程发送Segmentation Violation signal (SIGSEGV)。如果一个应用程序使用alarm系统来发出警告,那一段时间以后,它也会发送警告信号(SIGALRM)。
两个信号可以用来中断一个进程,SIGTERM和SIGKILL。SIGTERM是一个比较友好的杀死进程的方法;这个进程也会捕获信号,以便让你关机,关闭可能已经打开的日志文件。在关机之前,通常需要完成当前正在做的工作。有时,如果它是处在一个不能打断的任务中,一个进程可以忽略SIGTERM。
SIGKILL无法被进程忽略。它会发出这样的信号“I do not care what you are doing,stop right now”。如果你发送SIGKILL给一个进程,FreeBSD将会那儿停止那个进程。
你可能要用到的其他信号是SIGHUP,SIGUSR1和SIGUSR2。这些是普通用途的信号。当它们被发送时,不同的应用程序将做不同的事情。
建议你改变一下web服务器的配置文件——最好告诉web服务器重新读取它的配置文件。你需要停止然后重新启动httpd,但这会在你的web服务器上增加一些消耗,而这可能是你不太欢迎的。绝大多数守护程序通过重新读取它们的配置文件来对SIGHUP信号作出回应。不同的守护程序将有不同的行为。所以,要带着问题来阅读守护程序的联机手册。
可以使用kill命令来发送信号,例如:
发送一个signal给进程
这个例子显示了如何发送一个信号给inetd。Inetd的配置文件是/etc/inetd.conf。当它接收到SIGHUP时,inetd将重新读取这个配置文件。
1. 寻找你要发送信号的进程ID。可以使用ps和grep命令。grep命令被用来搜索输出,寻找你要指定的字符。这个命令可以由一个普通用户来执行,而inetd必须是root用户才能运行,所以ps必须带上ax选项
% ps -ax | grep inetd
198 ?? IWs 0:00.00 inetd -wW
这儿,inetd 的PID是198。有时,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提供了内建命令kill;shell将直接发送信号,比运行/bin/kill要好。这点非常有用,但不同的shell需要用不同的语法来指定发送信号的名字。发送其他的信号也很相似,只要在命令行替换TERM或KILL就行了。
重要点:在系统中随意地杀死进程是个坏主意。特别地,init进程ID是1,非常特殊。运行/bin/kill -s KILL 1是一个快速关闭你系统的方法。在你键入Return键之前,请你仔细检查你执行的kill的选项。
3.7 Shell
在FreeBSD中,许多工作是通过一个叫命令解释器(shell){俗称外壳}的命令行接口来完成的。shell的主要工作是接收输入的命令然后执行它们。许多shell的内建功能也能用来帮助完成每天的工作,如:文件管理,文件查找,命令行编辑,宏命令,以及其他环境设置。FreeBSD有许多种shell,如:sh,Bourne Shell和csh,C-shell。许多其他的shell,如tcsh,bash拥有更强大的功能,你可以在FreeBSD的软件包中找到。
你使用哪个shell?那还真是个问题。如果你是一个C程序员,你可能觉得像tcsh这种C类型的shell,用起来比较舒服。如果你使用Linux或你是一个UNIX的新手,你可能会试一试bash。这里要指出的是每一种shell都有它自己的特点,你可以根据你的喜好自由地选择。Shell的一个基本特征是文件名的自动补充功能。通常在你输入一个命令或文件名时,你先输入几个字母,然后按TAB键,命令或文件名会自动补上剩下的字母。例如:我有两个文件:foobar和foo.bar。我要删除foo.bar。所以我就输入:rm fo[TAB].[TAB]。Shell就会打出rm foo[BEEP].Bar,[BEEP]是铃声。它能够告诉我,因为匹配的问题shell不能自动补充文件名。因为foobar和foo.bar同时以fo开始,但它无法完成foo。一旦我输入.,然后键入TAB,shell就能补充完文件名。
Shell的另外一个功能就是环境变量。环境变量是存储在shell环境空间中的可变关键字对。这个空间能够被shell调用的任何程序读取,而且包含了许多程序配置。这儿是一个普通环境变量的列表以及它们所代表的含义:
变量 |
详细说明 |
USER |
现在登陆的用户名称。 |
PATH |
以冒号分隔的目录列表以便寻找执行文件的路径。 |
DISPLAY |
X11显示连接的网络名称,如果有的话。 |
SHELL |
目前使用的shell。 |
TERM |
用户终端的名称。用来决定终端机的能力。 |
TERMCAP |
完成几个终端功能的终端退出代码的数据库记录。 |
OSTYPE |
操作系统的种类,如FreeBSD。 |
MACHTYPE |
现在系统所用的CPU。 |
EDITOR |
用户喜欢的编辑器。 |
PAGER |
用户喜欢的文字呼叫器。 |
MANPATH |
以冒号分隔的目录以便寻找联机手册。 |
在各shell之间,设置一个环境变量稍微有点不同。例如,像tcsh和csh的C风格shell,你可以使用setenv来设置或查看环境变量。而在像sh和bash的Bourne
shell下,你可以使用set和export来查看和设置环境变量。例如,在csh或tcsh下,设置或修改环境编辑器,可以把编辑器设置成/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也带有很多功能强大的编辑器,像vi,emacs和vim等。这些编辑器都有很强大的功能,你需要认真地学习。如果计划编辑很多文本的话,学习一个功能强大的如vim或emacs这样的编辑器将在长时间的工作中为你节约很多时间。
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,可以使用emacs的info模式来阅读。
使用info命令:
%
info
要看看概要介绍,可以键入h。要看看快速命令参考,可以键入?。