第一次学习FREEBSD,首先了解一下系统的目录结构
目录架构
目录层次是理解一个系统的重要基础, 最重要的莫过于它的根目录 “/”,这个目录在启动时就就挂上, 它包含了启动时
所需的基本系统。这个根目录同样包含了想要挂接的每一个文件系统。
挂接点 (mount point) 是新增的文件系统在接入现有系统时的起点位置。 标准的挂接点包括
/usr、 /var、 /tmp、 /mnt, 以及 /cdrom。 这些目录通常会在 /etc/fstab 文件中提及。 /etc/fstab 是一张包含系
统中各个文件系统及挂接点的表。 在 /etc/fstab 中的绝大多数文件系统都会在启动时由 rc(8) 脚本自动挂接, 除非特
别指定了 noauto 选项。
您可以通过 hier(7) 来了解完整的文件系统层次说明。 现在,让我们先来看一看绝大多数的常见的目录以供参考。
目录 介绍
/ 文件系统的根目录。
/bin/ 在单个用户和多用户环境下的基本工具目录。
/boot/ 在操作系统在启动加载期间所用的程序和配置。
/boot/defaults/ 默认每步引导启动的配置内容,请查阅loader.conf(5)。
/dev/ 设备接点,请查阅 intro(4)。
/etc/ 系统启动的配置和脚本。
/etc/defaults/ 系统默认的启动配置和脚本,请参考 rc(8) 。
/etc/mail/ 关系到邮件系统运作的配置, 请参考 sendmail(8)。
/etc/namedb/ named 配置文件,请参考 named(8)。
/etc/periodic/ 每天、每星期和每月周期性地运行的脚本, 请通过 cron(8)查阅 periodic(8)。
/etc/ppp/ ppp配置文件,请查阅ppp(8)。
/mnt/ 由管理员习惯使用挂接点的临时空目录。
/proc/ 运行中的文件系统,请参阅 procfs(5) 和 mount_procfs(8)。
/rescue/ 用于紧急恢复的一组静态联编的程序; 参见 rescue(8)。
/root/ root用户的Home(主)目录。
/sbin/ 在单个用户和多用户环境下的存放系统程序和管理所需的基本实用目录。
/stand/ 持久独一无二的程序环境。
/tmp/ 存放临时文件,通常存放一些系统重启后不需要保护的 mfs(8) 基于内存的文件系统。
/usr/ 存放大多数用户的应用软件。
/usr/bin/ 存放实用命令,程序设计工具,和应用软件。
/usr/include/ 存放标准 C include 文件.
/usr/lib/ 存放库文件。
/usr/libdata/ 存放各种实用工具的数据文件。
/usr/libexec/ 存放系统实用或后台程序 (从另外的程序启动执行)。
/usr/local/ 存放本地执行文件, 库文件等等, 同时也是 FreeBSD ports 安装的默认安装目录。 /usr/local 在
/usr 总体布置请查阅 man.hier.7;。 man 目录例外, 它们直接放在 /usr/local 而不是 /usr/local/share 下,
而 ports 说明文档在 share/doc/port。
/usr/obj/ 通过联编 /usr/src 得到的目标文件。
/usr/ports 存放 FreeBSD 的 Ports Collection (可选)。
/usr/sbin/ 存放系统后台程序 和 系统工具 (由用户执行)。
/usr/share/ 存放架构独立的文件。
/usr/src/ 存放 BSD 或者本地源码文件。
/usr/X11R6/ 存放 X11R6 可执行文件、 库文件、 配置文件等的目录(可选)。
/var/ 存放多用途记录、临时性、短期的和打印假脱机系统文件.
/var/log/ 存放各种的系统记录文件。
/var/mail/ 存放用户mailbox(一种邮件存放格式)文件。
/var/spool/ 各种打印机和邮件系统spooling(回环)的目录。
/var/tmp/ 存放系统重启前受控制的临时文件。
/var/yp NIS 映射。
命令:chflags
格式: chflags [-R [-H | -L | -P]] flags file ...
文件标志可以通过使用 chflags(1) 工具来修改, 其用户界面很简单。 例如,要在文件 file1 上应用系统禁删标志,应适用下述命令:
# chflags sunlink file1
要禁用系统禁删标志, 只需在前述命令中的 sunlink 标志前加 “no”。 例如:
# chflags nosunlink file1
要显示文件上的标志, 应使用 ls(1) 的 -lo 参数:
# ls -lo file1
删除应类似于:
-rw-r--r-- 1 trhodes trhodes sunlnk 0 Mar 1 05:54 file1
其他的功能请通过联机手册学习使用。
mount 命令
这个 mount(8) 命令是挂接文件系统的基本运用。
使用最多的基本格式:
# mount device mountpoint
它的选项非常多,而mount(8) 手册同样提及, 但常用的都在这里:
挂接的各种选项
-a
挂接/etc/fstab里所有列出的文件系统。 除非标记为 “noauto” 或作了排除在外的 -t 类型标记,或者在这之前已挂上。
-d
除了实际上系统调用以外,可以完成任何事情,这个选项是和 -v参数一起连在一块使用,可以决定mount(8)所做的事情。
-f
强制去挂接一个未知的文件系统(会有危险),或当把一个文件系统挂接状态由可读写降为只读时,强制撤消可写通道。
-r
以只读方式挂接文件系统。 这和在指定了 -o 选项配合 ro (对于 FreeBSD 5.2 之前的版本来说, 则是 rdonly) 参数的效果是一样的。
-t fstype
根据给出的文件系统类型挂接文件系统, 假如给于-a选项,仅挂接这个类型的文件系统。
“ufs” 是默认的文件系统类型。
-u
在文件系统上修改挂接选项。
-v
版本模式。
-w
以可读写方式挂接文件系统。
The -o 选项采用一个逗号分开以下多个选项:
nodev
拒绝把文件系统识别为特别的设备。这是一个有用的安全选项。
noexec
不允许文件系统上的二进制程序执行。这也是一个有用的安全选项。
nosuid
不允许文件系统上的 setuid 或 setgid 标记生效。这也是一个有用的安全选项。
umount 命令
umount(8) 命令同样采用一个参数、一个挂接点、一个设备名。 或采用-a选项,又或采用-A选项。
所有格式都可采用 -f 去强行卸下, 或采用-v 用那适当的版本。 但警告,采用 -f并不是一个好主意,强行卸下文件系
统可能损坏计算机或破坏文件系统上的数据。
-a 和 -A 会卸下所有已挂接的文件系, 可能通过-t后面列出的文件系统进行修改, 但无论如何,-A都不会尝试去卸
chsh命令:
chsh命令可以用来改变您用的Shell,执行 chsh 将根据您设定的EDITOR 环境变量进入到那个编辑器,
假如没有设定,就会进入vi编辑器。请改变“Shell:”这行对应值。您可使用chsh 的-s选项,这样就
能设置您的shell却又不用编辑器。假如您想把shell改为bash 可用下面的技巧。
% chsh -s /usr/local/bin/bash
运行chsh 不加参数只编辑shell也会达到相同的效果。
注意: 您使用的shells必须 在/etc/shells 文件里列出。 假如您从 ports里装一个shell, 那就不
用做这步了。假如您手工装一个shell,那就要手工添加进去。
举个例了子,假如您手工把 bash装到 /usr/local/bin里,您还要进行这一步:
# echo "/usr/local/bin/bash" >> /etc/shells
然后运行chsh。
man命令:
这个命令大家都熟悉,但是在这里还有几个特别的用处:
当您不知道命令的名字时可以采用 #man -k mail 关键字先查询相关的命令后再查命令手册。
有时您会看到/usr/bin 下有许多命令但不知他们的用途,您只需这样做
# cd /usr/bin
# man -f *
或者这样做
# cd /usr/bin
# whatis *
portaudit命令:
用来检测系统安装前首先检查是否存在已知的漏洞,并能够自动地检查已经安装的应用程序的漏洞
通过portaudit -F -a 这个命令在安装了某个软件包之后作出检查。
如何安装第三方的二进制软件包。
1.通过:应用程序包的安装(是一个可以下载的FreeBSD package文件)
pkg_add(1):安装软件命令
pkg_delete(1):删除软件命令
pkg_info(1):安装软件的信息
Packages 安装软件:
如安装上面的 portaudit软件:
先下载一个名为:portaudit-0.5.9.tbz到本地,执行pkg_add portaudit-0.5.9.tbz
系统将自动的安装好该软件并提示:
===> To check your installed ports for known vulnerabilities now, do:
/usr/local/sbin/portaudit -Fda
或者你没有软件的安装包,可以通过pkg_add -r portaudit
这将迫使程序自动决定目标文件的正确格式和版本,然后自动从一个 FTP 站点寻找和安装 package。
软件包的管理
#pkg_info 执行结果:
bitstream-vera-1.10 Bitstream Vera TrueType font collection
expat-1.95.8 XML 1.0 parser written in C
fontconfig-2.2.3,1 An XML-based font configuration API for X Windows
freetype2-2.1.7_3 A free and portable TrueType font rendering engine
imake-6.7.0_2 Imake and other utilities from X.Org
libXft-2.1.6 A client-sided font API for X applications
linux_base-7.1_7 The base set of packages needed in Linux mode
perl-5.8.5 Practical Extraction and Report Language
pkgconfig-0.15.0_1 A utility used to retrieve information about installed libr
png-1.2.6 Library for manipulating PNG images
portaudit-0.5.9 Checks installed ports against a list of security vulnerabi
xorg-clients-6.7.0_4 X client programs and related files from X.Org
xorg-documents-6.7.0 Documentation of X11 protocol and libraries from X.Org
xorg-fonts-100dpi-6.7.0 X.Org 100dpi bitmap fonts
xorg-fonts-75dpi-6.7.0 X.Org 75dpi bitmap fonts
xorg-fonts-cyrillic-6.7.0 X.Org Cyrillic bitmap fonts
xorg-fonts-encodings-6.7.0 X.Org font encoding files
xorg-fonts-miscbitmaps-6.7.0 X.Org miscellaneous bitmap fonts
xorg-fonts-truetype-6.7.0 X.Org TrueType fonts
xorg-fonts-type1-6.7.0 X.Org Type1 fonts
xorg-fontserver-6.7.0 X font server from X.Org
xorg-libraries-6.7.0_2 X11 libraries and headers from X.Org
xorg-manpages-6.7.0 X.Org library manual pages
xorg-nestserver-6.7.0 Nesting X server from X.Org
xorg-printserver-6.7.0 X Print server from X.Org
xorg-server-6.7.0_9 X.Org X server and related programs
xorg-vfbserver-6.7.0 X virtual framebuffer server from X.Org
xterm-196_3 Terminal emulator for the X Window System
pkg_version(1)是一个用来统计所有安装的软件包版本的工具。它可以用来比较本地
package 的版本与 ports 目录中的当前版本是否一致。
要删除先前安装的软件package,只要使用pkg_delete(1) 工具。
# pkg_delete xchat-1.7.1
所有已安装的 package 信息都保存在 /var/db/pkg 目录下。安装文件的列表和每个
package 的内容和描述都能在这个目录的相关文件中找到。
如何安装Ports编译软件
1.通过安装Ports collection来实现,通过Ports collection就必须安CVSup
安装CVSup:
在线下载二进制包:.net/cvsup-16.1h_2.tbz (net是CVSup软件包在FreeBSD软件包FTP服务器的目录)
如果没有GUI可以下载net/cvsup-without-gui
下载后安装:
#pkg_add cvsup-16.1h_2.tbz
(不知道为什么,安装完后不能执行命令:cvsup,重启后方可?)
那么如何创建一个临时的 ports-supfile呢?
具体参见FREEBSD手册
http://www.freebsd.org.cn/snap/doc/zh_CN.GB2312/books/handbook/cvsup.html#CVSUP-CONFIG-FILES
2.一个FreeBSD的port是一个可以自动从源代码编译成应用程序的文件集合。
安装与删除方法:
1.通过Port Collection 方法安装;(见FREEBSD用户手册)
2.通过光盘安装;
1.make
2.make install(可以通过make install代替make和make install两个过程)
注意:一些 shell 会缓存环境变量 PATH 中指定的目录里的可执行文件, 以加速查找它们的速度。 如果您使用的是这类 shell,
在安装 port 之后可能需要执行 rehash 命令,然后才能运行新安装的那些命令。 这个命令可以在类似 tcsh 的 shell 中使用。
对于类似 sh 或 shells/bash 的 shell, 对应的命令是 hash -r。 请参见您的 shell 的文档以了解进一步的情况。
如果你还没有安装你需要的软件包,先查看你的软件的位置:
#whereis lsof
lsof /usr/ports/sysutils/lsof
#cd /usr/ports/sysutils/lsof
#make
>> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
>> Attempting to fetch from file:/cdrom/ports/distfiles/.
===> Extracting for lsof-4.57
[extraction output snipped]
>> Checksum OK for lsof_4.57D.freebsd.tar.gz.
===> Patching for lsof-4.57
===> Applying FreeBSD patches for lsof-4.57
===> Configuring for lsof-4.57
[configure output snipped]
===> Building for lsof-4.57
[compilation output snipped]..
注意,一旦编译完成,您就会回到命令行。 下一步安装 port, 要安装它只需要在 make 命令后跟上一个单词 install 即可:
# make install
3.通过互联网下载安装
下载后解压缩后,通过编译、安装和清理的过程。
与光盘安装一样,只不过是软件从网上下载而来
#cd /usr/ports/sysutils/lsof
#make install
>> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
>> Attempting to fetch from ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/.
Receiving lsof_4.57D.freebsd.tar.gz (439860 bytes): 100%
439860 bytes transferred in 18.0 seconds (23.90 kBps)
===> Extracting for lsof-4.57
...
[extraction output snipped]
...
>> Checksum OK for lsof_4.57D.freebsd.tar.gz.
===> Patching for lsof-4.57
===> Applying FreeBSD patches for lsof-4.57
===> Configuring for lsof-4.57
...
[configure output snipped]
...
===> Building for lsof-4.57
...
[compilation output snipped]
...
===> Installing for lsof-4.57
...
[installation output snipped]
...
===> Generating temporary packing list
===> Compressing manual pages for lsof-4.57
===> Registering installation for lsof-4.57
===> SECURITY NOTE:
This port has installed the following binaries which execute with
increased privileges.
就像您看到的, 唯一区别是有一行告知您系统正在从哪里获得 port 的 distfile 的信息。
ports 系统使用 fetch(1) 去下载文件, 它有很多可以设置的环境变量,其中包括 FTP_PASSIVE_MODE、 FTP_PROXY,
和 FTP_PASSWORD。 如果您在防火墙之后,或使用 FTP/HTTP代理,您就可能需要设置它们。 完整的说明请看 fetch(3)。
当使用者不是所有时间都能连接上网络, 则可以利用 make fetch。 您只要在顶层目录 (/usr/ports) 下运行这个命令,
所有需要的文件都将被下载。这个命令也同样可以在下级类别目录中使用, 例如: /usr/ports/net。 注意, 如果一个
port有一些依赖的库或其他 port,它将 不 下载这些依赖的 port 的 distfile 文件, 如果您想获取所有依赖的 port 的所有
distfile, 请用 fetch-recursive 命令代替 fetch命令。注意: 您可以在一个类别或在顶级目录编译所有的 port, 或者使用
上述提到的 make fetch命令。 这样是非常危险的,因为有一些port不能并存。 或者有另一种可能, 一些port会安装两个不同的
文件,但是却是相同的文件名。在一些罕见的例子中, 用户可能需要在除了 MASTER_SITES 以外的一个站点(本地已经下载下来的
文件)去获得一个文件包。 您可以用以下命令不使用 MASTER_SITES:
# cd /usr/ports/directory
# make MASTER_SITE_OVERRIDE= \
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch
在这个例子中,我们把 MASTER_SITES这个选项改为了 ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/。
注意: 一些 port 允许 (或甚至要求) 您指定编译选项来 启用/禁用应用程序中非必需的功能, 一些安全选项, 以及
其他可以订制的内容。 具有代表性的包括 www/mozilla、 security/gpgme、 以及 mail/sylpheed-claws。 如果存在这样的选
项,通常会在编译时给出提示。
卸载已经安装的 Ports
现在您已经知道如何安装 port, 您可能很想知道如何卸载它们,例如您安装了一个之后才意识到装错了。 我们将卸载前面的例子
中安装的那个 (也就是 lsof, 如果您没有注意过的话)。 和安装 port 时类似, 第一件事是进入 port 的目录,
/usr/ports/sysutils/lsof。 之后您就可以卸载 lsof 了。 这可以通过命令 make deinstall 来完成:
# cd /usr/ports/sysutils/lsof
# make deinstall
===> Deinstalling for lsof-4.57
这个过程足够地简单。 现在已经从系统上卸载了 lsof。如果您想重新安装它, 可以在 /usr/ports/sysutils/lsof
目录中运行 make reinstall 来达到目的。
make deinstall 以及 make reinstall 在您执行过 make clean 之后就不能用了。如果您在清理目录之后还想删除 port,
可以用 使用手册中的 Package 相关章节 中介绍的 pkg_delete(1) 来完成。