目录
3 Unix 基础
3.1 概要
3.2 权限
3.3 目录结构
3.4 挂上和卸载文件系统
3.5 进程
3.6 后台,信号和杀死进程
3.7 shell
3.8 文本编辑器
3.9 设备和设备节点
3.10 更多信息
=============================================================
第3 章,UNIX 基础知识
=============================================================
(翻译中出现的任何问题或错误,请广大读者及时反馈给我:freebsdhandbook@163.com)
3.1 概要
这一章将介绍UNIX 的基础知识和FreeBSD 的功能。如果你还是个FreeBSD 的新手,你
在寻求帮助之前,应当先阅读这一章。
读完这章,你会了解到:
1. UNIX 的文件访问权限是如何工作的。
2. 进程,后台,和信号是什么。
3. 什么是shell,如何改变你的默认登陆环境。
4. 如何使用基本的文本编辑器。
5. 如何阅读联机手册了解更多信息。
3.2 权限
FreeBSD,仍然保持着BSD UNIX 的传统,它的基本原理仍然是以几个关键的UNIX 概念
为基础的。首先,最显著的就是:FreeBSD 是一个多用户的操作系统。这个系统能够允许许
多毫不相关的任务同时工作。对于每一个用户来讲,系统都能非常可靠地分享和管理着来自
不同硬件设备、内存、CPU 时钟的处理请求。
因为系统支持多用户,所以系统管理的每一件事情都必须要设置谁有读,写,和执行的
权限。这个权限用八进制的形式来表示,把它分成三部分:文件拥有者,文件拥有者所在组
和其他成员。这种表示方法如下所示:
权限值
No read, no write, no execute 0
No read, no write, execute 1
No read, write, no execute 2
第1 页
目录列表
---
--x
-w- FreeBSD 使用手册
No read, write, execute 3
Read, no write, no execute 4
Read, no write, execute 5
Read, write, no execute 6
Read, write, execute 7
在一个长目录中,用ls –l 命令列一个清单,就显示了文件所有者、文件所有者所在
组和其它成员的权限信息。这里就是它的表示方法:
-rw- r- - r- -
从左到右,第一个字符是一个特殊的字符,它告诉你这是一个规则文件,一个目录,一
个特殊字符,一个块设备,一个套接字,还是其它的伪设备文件。下面的三个字符“rw-”
指明了文件所有者的权限。下面的三个字符“r--”指明了文件所有者所在组的权限。最后
面的三个字符“r--”,给出了其他用户的权限。一个破折号表示这个权限被关闭了。在这
样一个设置下,意味着只有文件所有者才能读、写文件,组能够读文件,其它用户只能读文
件。按照上表的指示,这个文件的权限应该是644,每个数字都代表着这个文件权限的三个
部分。FreeBSD 是如何来控制设备的权限的呢?事实上,FreeBSD 把绝大多数的硬件设备看
作是一个文件,就象其它文件能够被打开,阅读,写数据一样。这些特殊的设备文件保存在
/dev目录下。
目录也可以当作文件来看待。它们有读、写和执行的权限。这里的可执行跟其它文件的
可执行有一些差别。例如,当一个目录被标记为可执行时,意味着这个目录可以被查找到,
并且可以在这个目录下列目录。如果你想了解如何设置权限的话,你可以参考chmod 命令的
有关说明。
3.3 目录结构
FreeBSD 使用的文件系统决定了许多基础的系统操作,文件系统的层次结构是非常重要
的。在所有的目录中,root(/)是最重要的。系统启动时,这个目录是最先被挂上的,而
且它嘶镜南低承畔ⅰoot 目录也包含了你能够挂上的其它文件系统的装载点。装
载点是其它文件系统能够被连接到root 文件系统的目录。这些目录通常被指定在
第2 页
-wx
r—
r-x
rw-
rwx FreeBSD 使用手册
/etc/fstab下。/etc/fstab是一个几种文件的表,装载点能够被系统参考。在/etc/fstab
中的绝大多数文件系统,能够在启动时被自动挂上,除非它们包含noauto 选项。你可以参
考fstab 的指南,了解更多有关/etc/fstab文件格式和它所包含选项的信息。
现在,主要的目录结构就是这些:
描述目录
文件系统的根目录/
单用户和多用户环境下,用户使用的工具。/bin/
操作系统启动过程中使用的程序和配置文件。/boot/
/boot/defaults/ 默认的启动配置文件;看看loader.conf。
设备节点;看看intro。/dev/
系统配置文件和脚本。/etc/
默认的系统配置文件;看看rc. /etc/defaults/
象sendmail 这样的用于邮件传输代理的配置文件。/etc/mail/
/etc/namedb/ Named 配置文件;看看named。
通过via 每天,每周,每月运行的脚本;看看periodic 的联机手册。/etc/periodic/
/etc/ppp/ Ppp 配置文件;看看ppp 联机手册。
系统管理员使用的用作一个临时加载点的空目录。/mnt/
处理文件系统;看看procfs,mount procfs 联机手册。/proc/
/root/ Root 帐户的主目录。
单用户和多用户使用的系统程序和管理工具。/sbin/
在独立环境下使用的程序。/stand/
临时文件。/tmp/
主要是用户的工具和应用程序。/usr/
通常是工具,程序工具和应用程序。/usr/bin/
标准C include 文件。/usr/include/
文档库/usr/lib/
各种工具的数据文件。/usr/libdata/
系统守护程序和系统工具(被其他程序执行的)。/usr/libexec/
第3 页/usr/local/
/usr/obj/
/usr/ports FreeBSD ports collection 。
/usr/sbin/
/usr/share/
/usr/src/
/usr/X11R6/ X11R6 发行的可执行程序,库等。
/var/
/var/log/
/var/mail/
/var/spool/
/var/tmp/
/var/yp NIS 地图。
3.4 挂上和卸载文件系统
文件系统可以形象化为一棵树,root 就是根:象这样/,/dev,/usr 等。根目录下的其
他目录也可能有分支,这些分支也会有它们自己的分支,象这样/usr/local 等等。之所以
要采用这种分离的文件系统有很多原因。/var 包含log,spool 和不同的临时文件。当然,
这个目录也可能会被塞满。塞满根文件系统不是一个好主意,所以从/分离出一个/var 比较
好。
在其他的文件系统上,采用这种目录树结构的另一个原因是他们可能会在另外一个物理
磁盘上,或在另外一个虚拟磁盘上,象NFS 文件系统或CDROM 驱动器。
3.4.1 fstab 文件
在系统启动的过程中,在/etc/fstab 中列出的文件系统会被自动地挂上。/etc/fstab
文件包含了一个以下面的格式排列的列表:
device /mount-point fstype options dumpfreq passno
FreeBSD 使用手册
本地执行的,库等。也是默认的放置ports 框架的地方。Ports 的文档
放在/usr/local/share/doc/ port中。
通过建构/usr/src 目录树产生的特定结构的目标树。
系统守护程序和系统工具(由用户执行的)。
独立结构的文件。
本地源代码文件。
多种日志,临时文件,和spool 文件。
多种系统日志文件。
用户邮箱文件。
多种打印机和邮件系统spooling 目录。
系统重新启动之间保存的临时文件。
第4 页FreeBSD 使用手册
Device 是一个设备名,就象上一章磁盘命名规则所提到的。
mount-point 是一个目录,在它上面挂上文件系统。
Fstype 是要挂上的文件系统类型。FreeBSD 的默认文件系统是ufs。
Options 选项既可以是rw 可读写文件系统,也可以是ro 只读文件系统,可根据其它选项的
要求来定义。在系统按顺序启动过程中,一个普通的选项是noauto,它通常不会被挂上。
其他的选项可参看mount 的联机手册。
3.4.2 mount 命令
mount 命令通常是用来挂上文件系统的。它的最基本的操作格式:
# mount device mountpoint
它有很多的选择参数,但绝大多数是这样的:
mount options
-a
挂上/etc/fstab 中的所有文件系统,也可以用-t 来修改。
-d
除了挂文件系统外,可以做所有事情。
-f
强迫挂上文件系统。
-r
挂上只读文件系统。
-t fstype
以给定的文件格式挂上给定的文件系统。如果加上-a 参数,就只能挂上给定类型的文
件系统。“ufs”是默认的文件类型。
-u
在文件系统上升级mount 选项。
-v
更加详细。
-w
修改文件系统为读,写。
第5 页FreeBSD 使用手册
-O 选项提供了一个用逗号分割的选项列表,包括下面这些:
nodev
不要解释文件系统上的特殊设备。有用的安全选项。
noexec
不允许在这个文件系统上执行程序。有用的安全选项
nosuid
不要在文件系统上解释setuid 或setgid 标记。有用的安全选项。
3.4.3 umount 命令
在umount 命令后可能会加载的参数可能是一个挂载点,一个设备名,或是-a,-A 选项。
所有加-f 参数的形式将会被强迫卸载,-v 参数就会太冗长。-a,-A 选项用来卸载所有挂上
的文件系统。
3.5 进程
FreeBSD 是一个多任务的操作系统。这意味着可以同时有多个程序一起运行。你运行的
每个程序叫做一个进程。你运行的每个程序都至少要启动一个进程,系统中时刻都有很多
进程在运行,以维持系统的功能。
每一个进程都有一个叫做进程ID 或PID 的号码,每个进程也会有一个主人(或叫属主)
和它所在的组。主人和组的信息用来决定进程能够打开什么文件和设备,使用文件的权限。
绝大多数进程都有一个父进程。父进程是启动其他进程的进程,你运行的任何命令也是进
程。每个进程将使用你的shell 作为它的父进程。除这个进程之外的一个特殊的进程叫做
init。Init 总是第一个进程,所以它的PID 总是1。当FreeBSD 启动时,init 会被内核自
动启动。
有两个命令可以用来查看系统的进程,ps 和top。ps 命令用来显示当前运行的进程的
列表,还可以显示它的PID,它们使用多少内存,它们启动的命令行等等。Top 命令显示了
所有运行的进程,每隔几秒就刷新一次,以至你可以动态地观察你电脑的工作状况。默认
情况下,ps 只显示正在运行的你自己的命令。例如:
% ps
第6 页FreeBSD 使用手册
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,也可以安全地略过。
Ps 支持许多不同的选项来改变显示的信息。最有用的设置是auxww。一个有关所有运
行的进程的显示信息,不仅仅是你自己的。U 用来显示进程的使用者和内存的使用者。X 用
第7 页FreeBSD 使用手册
来显示后台运行的进程信息,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
...
第8 页FreeBSD 使用手册
整个输出被分为两节。头上(最初5 行)显示运行着的进程的PID,系统的平均负载(反
映系统的繁忙程度),系统的正常运行时间(从上次重起以来的时间),和当前时间。其
它的图显示了当前运行了多少个进程,有多少内存和交换空间已经被占用,系统在不同CPU
状态之间切换需要花费多长时间。
下面有一连串的竖直排列的ps 命令的输出信息。你可以看到PID,用户名,CPU 时钟
的花费数量,正在运行的命令。Top 也默认地显示了进程所花费掉的内存空间的数量。这可
以被分成两列,一列针对所有的内存数量,一列针对常驻内存数量。整个内存数量就是应
用程序需要多少内存,常驻内存是在此刻使用的内存数量。在这个例子中,你可以看到
Netscape 使用了30M 内存,当前只使用了9MB。Top 每隔两秒自动刷新一次;这可以通过加
上s 选项来修改。
3.6 守护程序,信号和杀死进程
当你使用一个编辑器的时候,你可以要求它加载一些文件。因为它们提供了这样的功
能,而且它们是与一个终端连在一起的。但,有一些程序却不能让用户输入信息,它们是
不与终端连在一起的。例如,一个web 服务器花费所有的时间来回应用户的请求,它通常
不需要你有任何的输入。从一个站点到另一个站点传送email 是另外一个这种类型的应用
例子。我们叫这些程序为daemons(守护程序)。Daemon 具有希腊神话的特征;今天的许
多web 服务器和mail 服务器都使用这些。有时你可能需要与一个守护程序进行通讯。这些
通讯就叫做signal。你可以通过给它发送signal(或是运行进程)来与守护程序通讯。如
果你发送的signal 有很多(有一些有特殊的用处),其它的与应用程序集成在一起,应用
程序的文档会告诉你如何解释signal。你可以发一个signal 给你的一个进程。如果你设法
发送一个signal 给其他人的进程,它就会被忽略。Root 用户除外,它可以发送signal 给
每一个进程。
如果一个应用程序写入错误,就会设法访问内存,FreeBSD 会给进程发送Segmentation
Violation signal (SIGSEGV)。如果一个应用程序使用alarm 系统来发出警告,那一段时
间以后,它也会发送警告信号。
两个信号可能会中断一个进程,SIGTERM 和SIGKILL。SIGTERM 是一个比较友好的杀死
进程的方法;这个进程也会捕获信号,以便让你关机,关闭可能打开的一些日志文件。在
第9 页FreeBSD 使用手册
关机之前,通常需要完成当前正在做的工作。有时,如果它是处在一个不能打断的任务中,
一个进程可以忽略SIGTERM。
SIGKILL 无法被进程忽略。它会发出这样的信号“I do not care what you are doing,
stop right now”。如果你发送SIGKILL 给一个进程,FreeBSD 将会停止那个进程。
你可能要用到的其他signal 是SIGHUP, SIGUSR1 和SIGUSR2。这些是普通用途的
signal。当他们被发送时,不同的应用程序将做不同的事情。
建议你改变一下你的web 服务器的配置文件----你最好告诉web 服务器重新读一下它
的配置文件。你需要重起httpd,但这将会在你的web 服务器上增加一些消耗,而这可能是
你不太欢迎的。绝大多数守护程序通过重新读取它们的配置文件来对SIGHUP 信号作出回应。
不同的后台程序将有不同的行为。所以,要带着问题来阅读守护程序的联机手册。
可以使用kill 命令来发送signal,例如:
发送一个signal 给处理器
这个例子显示了如何发送一个信号给inetd。Inetd 的配置文件是/etc/inetd.conf。当它
接收到SIGHUP 时,inetd 将重新读取这个配置文件。
寻找你要发送信号的进程ID。可以使用ps,grep 命令。Grep 命令被用来搜索输出, 1.
寻找你要指定的字符。这个可以有一个普通用户来执行,而inetd 需要是root 用户,所以
ps 必须带上ax 选项
% ps -ax | grep [1] [url=http://www.chinamx.com.cn/Article/os/FreeBSD/200605/20060530181856_31911_2.html][2] 下一页