FREEBSD系统管理
一、怎样有效的利用文件系统和交换分区。
1.当使用 disklabel(8) 或者 sysinstall(8) 来分割您的文件系统的时候,要记住硬盘驱动器外磁道传输数据要比从内磁道传输数据快。
因此应该将小的和经常访问的文件系统放在驱动器靠外的位置, 一些大的分区比如 /usr 应该放在比较靠里的位置。以类似这样的顺
序建立分区是一个不错的主意:root,swap, /var,/usr
2.一般来讲,交换分区应该大约是系统内存 (RAM) 的两倍。 例如,如果机器有 128M 内存,交换文件应该是 256M。在使用多块SCSI磁
盘(或者不同控制器上的IDE磁盘)的大系统上,建议在每个驱动器上建立交换分区(直到四个驱动器)。交换分区应该大约一样大小。内核
可以使用任意大小, 但内部数据结构则是最大交换分区的 4 倍。保持交换分区同样的大小, 可以允许内核最佳地调度交换空间来访问
磁盘。即使不太使用,分配大的交换分区也是好的,在被迫重启之前它可以让您更容易的从一个失败的程序中恢复过来。
二、rc.conf 的基本设置和 /usr/local/etc/rc.d 启动体系。
1.cron服务:
cron服务是FreeBSD 最有用的软件包(utilities)中的一个是 cron(8)。 cron 软件在后台运行并且经常检查 /etc/crontab 文件。
cron 软件也检查 /var/cron/tabs 目录,搜索新的 crontab 文件。这些 crontab 文件存储一些 cron 在特定时间执行任务的信息。
cron 程序使用两种不同类型的配置文件, 即系统 crontab 和用户 crontabs。 两种格式的唯一区别是第六个字段。 在系统 crontab
中,第六个字段是用于执行命令的用户名。 这给予了系统 crontab 以任意用户身份执行命令的能力。 在用户 crontab 中, 第六个
字段是要执行的命令,所有的命令都会以这个用户自己的身份执行; 这是一项重要的安全功能。
注意: 同其他用户一样, root 用户也可以有自己的 crontab。 它不同于 /etc/crontab (也就是系统 crontab)。由于有系统 crontab
的存在, 通常并不需要给 root 建立单独的用户 crontab。
例:首先用man crontab查看crontab手册,了解crontab命令
#crontab -e 创建一个新的cron,进入编辑状态。
*/5 * * * * sh /home/wanwan/beifen_050705.sh 保存后退出
#vi /home/wanwan/beifen_050705.sh 对脚本进行编辑;
#!/bin/sh
if ls -a /home/wanwan/beifen2005/ | grep iptables-1.2.11.tar.gz;then
` rm -Rf /home/wanwan/beifen2005/iptables-1.2.11.tar.gz `
fi
`tar cf /home/wanwan/beifen2005/iptables-1.2.11.tar /home/wanwan/iptables-1.2.11`
`gzip /home/wanwan/beifen2005/iptables-1.2.11.tar`
保存退出。用命令查看
#crontab -l
*/25 * * * * sh /home/wanwan/beifen_050222.sh
如果需要修改定时器,可以执行#crontab -e 重新加载,
如果不再需要已过时的定时器可以执行#crontab -r 删除已创建的cron。
2.在 FreeBSD 5.X 下使用 rc
FreeBSD最近整合了NetBSD的rc.d系统以完成系统初始化,用户要注意 /etc/rc.d目录下的文件。这些文件中的很多都是可以接受 start、
stop 和 restart 选项的基本服务。例如,sshd(8) 可以用下面的命令重启:
# /etc/rc.d/sshd restart 其它的服务跟这个过程相似。当然,在 rc.conf(5) 指定的服务通常可以自动启动。例如,让网络地址转换
(NAT) 守护进程在系统启动的时候启动可以简单的在 /etc/rc.conf 中添加下面一行:natd_enable="YES",如果 natd_enable="NO" 行已
经存在, 只要简单的把 NO 改成 YES 即可。rc脚本在下次重新启动的时候会自动的装载所需要的服务, 像下面所描述的那样。由于
rc.d 系统在系统启动/关闭时首先启动/停止服务,如果设置了适当的 /etc/rc.conf 变量,标准的 start、stop 和 restart 选项将会执
行他们的动作。例如 sshd restart 命令只在 /etc/rc.conf 中的 sshd_enable 设置成 YES 的时候工作。不管是否在 /etc/rc.conf 中
设置了,要 start、stop 或者 restart 一个服务,命令前可以加上一个“force”前缀。例如要不顾当前 /etc/rc.conf 的设置重新启动
sshd,执行下面的命令:
# /etc/rc.d/sshd forcerestart
用选项 rcvar 可以简单来的检查 /etc/rc.conf 中用适当的 rc.d 脚本启动的服务是否被启用。从而管理员可以运行这样的程序来检查
sshd 是否真的在 /etc/rc.conf 中被启动了:
# /etc/rc.d/sshd rcvar
# sshd
$sshd_enable=YES
注意: 第二行 (# sshd) 是从 sshd 命令中输出的,而不是 root 控制台。
为了确定一个服务是否真的在运行,可以用 status 选项。例如验证 sshd 是否真的启动了:
# /etc/rc.d/sshd status
sshd is running as pid 317.
三、怎样设置和测试一块网卡。
1.一般系统都会自动加载网卡驱动程序,如果系统不支持您的网卡,则必须手动添加网卡驱动模块。
如果您的网卡没有出现在 GENERIC 中,则需要手工加载合适的驱动程序。 要完成这项工作可以使用下面两种方法之一:
最简单的办法是用 kldload(8) 加载网卡对应的内核模块。并不是所有的网卡都能够通过这种方法提供支持; 比较明显的例子是 ISA 网
卡。另外, 您也可以将网卡的支持静态联编进内核。 察看 /usr/src/sys/conf/NOTES, /usr/src/sys/arch/conf/NOTES 以及驱动程序
的联机手册以了解需要在您的内核配置文件中加一些什么。
网卡的配置文件是#/etc/rc.conf
查看命令用#ifconfig 执行结果如下:
lnc0: flags=108843
inet 192.168.3.195 netmask 0xffffff00 broadcast 192.168.3.255
inet6 fe80::20c:29ff:fe42:6a02%lnc0 prefixlen 64 scopeid 0x1
ether 00:0c:29:42:6a:02
plip0: flags=108810
lo0: flags=8049
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
2.ifconfig完全可以配置一块网卡,但每次重启后都需要重新配置,所以我们可以考虑修改网卡配置文件/etc/rc.conf来实现网卡的配置
情况。用您自己喜欢的编辑器打开 /etc/rc.conf。并且您需要为每一块系统中存在的网卡添加一行, 在我们的例子中,添加如下几行:
ifconfig_lnc0="inet 192.168.1.3 netmask 255.255.255.0"
ifconfig_lnc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP"
把你的设备名和IP地址改为自己的设备名和IP地址就OK了。
media 10baseT/UTP 是设置网卡在什么模式下工作的,如10M和100M的全双工与半双工等。
3.虚拟一块网卡设置:
一个特定的网络接口有一个“真实”的地址, 也可能有一些“别名”地址。这些别名通常用 /etc/rc.conf 中的记录来添加。
一个 fxp0 的别名记录类似于:ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx"
记住别名记录必须从 alias0 开始并且按顺序递增(例如 _alias1、 _alias2)。配置程序将会停止在第一个缺少的数字的地方。
四、怎样使用 /etc 下的各配置文件。
在配置信息中有很多的目录,这些包括:
/etc 一般的系统配置信息。这儿的数据是与特定系统相关的。
/etc/defaults 系统配置文件的默认版本。
/etc/mail 额外的 sendmail(8) 配置信息,其他 MTA 配置文件。
/etc/ppp 用于用户级和内核级 ppp 程序的配置。
/etc/namedb named(8) 数据的默认位置。通常 named.conf 和区域文件存放在这里。
/usr/local/etc 被安装的应用程序配置文件。可以参考每个应用程序的子目录。
/usr/local/etc/rc.d 被安装程序的 启动/停止 脚本。
/var/db 特定系统自动产生的数据库文件,像 package 数据库,位置数据库等等。
1.主机名
/etc/resolv.conf 指示了 FreeBSD 如何访问域名系统(DNS)。
resolv.conf 中最常见的记录是:
nameserver 按顺序要查询的名字服务器的 IP 地址,最多三个。
search 搜索机器名的列表。这通常由本地机器名的域决定。
domain 本地域名。
一个典型的 resolv.conf 文件:
search wanwan.com
nameserver 211.136.192.6
nameserver 61.129.44.199
注意: 只能使用一个 search 和 domain 选项。
如果您在使用 DHCP,dhclient(8) 经常使用从 DHCP 服务器接受来的信息重写 resolv.conf。
2./etc/hosts
/etc/hosts 是 Internet 早期使用的一个简单文本数据库。 它结合 DNS 和 NIS 提供名字到 IP 地址的映射。通过局域网连接的机器可以
用这个简单的命名方案来替代设置一个 named(8) 服务器。另外,/etc/hosts 也可以提供一个 Internet 名称的本地纪录以减轻需要从外
部查询带来的负担。
如我的机器上默认后的hosts文件内容是:
::1 localhost.wanwan localhost
127.0.0.1 localhost.wanwan localhost
192.168.4.195 FreeBSD.wanwan FreeBSD
192.168.4.195 FreeBSD.wanwan.
/etc/hosts 用简单的格式:
[Internet address] [official hostname] [alias1] [alias2] ...
例如:
10.0.0.1 myRealHostname.example.com myRealHostname foobar1 foobar2
还有一个/etc/host.conf 这个文件下在的肉容是一个优先级别的问题,他会告诉系统首先通过什么方式来查询提交的域名请求,一种是通过
hosts就是本地为先,还有一个是通过外部的DNS查询行到的如bind
一般情况都是先本地查询后外部DNS查询如host.conf文件
# Auto-generated from nsswitch.conf, do not edit
hosts
bind
如果调换成 bind/hosts那么就转为先外部DNS查询再本机查询,当然一般很少人会这样做的。
3.日志文件配置
syslog.conf 是 syslogd(8) 程序的配置文件。 它指出了的 syslog 哪种信息类型被存储在特定的日志文件中
#vi /etc/syslog.conf 查看并修改你自需要的配置情况,更多的内容请参看
4.newsyslog.conf
newsyslog.conf 是一个通常用 cron(8) 计划运行的 newsyslog(8) 程序的配置文件。 newsyslog(8) 指出了什么时候日志文件需要打包或
者重新整理。 比如 logfile 被移动到 logfile.0,logfile.0 被移动到 logfile.1 等等。另外,日志文件可以用 gzip(1) 来压缩,它们
是这样的命名格式: logfile.0.gz,logfile.1.gz 等等。newsyslog.conf 指出了哪个日志文件要被管理,要保留多少和它们什么时候被创
建。日志文件可以在它们达到一定大小或者在特定的日期被重新整理。
/var/log/all.log 600 7 * @T00 J
/var/log/amd.log 644 7 100 * J
/var/log/auth.log 600 7 100 * J
/var/log/console.log 600 5 100 * J
/var/log/maillog 640 7 * @T00 J
/var/log/messages 644 5 100 * J
/var/log/monthly.log 640 12 * $M1D0 JN
/var/log/pflog 600 3 100 * JB /var/run/pflogd.pid
/var/log/ppp.log root:network 640 3 100 * J
/var/log/security 600 10 100 * J
/var/log/sendmail.st 640 10 * 168 B
/var/log/slip.log root:network 640 3 100 * J
/var/log/weekly.log 640 5 1 $W6D0 JN
/var/log/wtmp 644 3 * @01T05 B
/var/log/xferlog 600 7 100 * J
参考 newsyslog(8) 手册页以获得更多信息。
五、怎样使用 sysctl 来调整 FreeBSD 系统变量。
1.sysctl.conf
sysctl.conf 看起来很像 rc.conf。它用 variable=value 的形式来设定值。指定的值在系统进入多用户模式之后被设定。并不是所有的
变量都可以在这个模式下设定。一个简单的例子举明了在 sysctl.conf 中关闭了重要的退出信号的日志并且让 Linux 程序知道他们其实
运行在 FreeBSD 下面:
kern.logsigexit=0 # Do not log fatal signal exits (e.g. sig 11)
2.用 sysctl 进行调整
sysctl(8) 是一个允许您改变正在运行中的 FreeBSD 系统的接口。它包含一些 TCP/IP 堆栈和虚拟内存系统的高级选项, 这可以让有经
验的管理员提高引人注目的系统性能。用 sysctl(8) 可以读取设置超过五百个系统变量。
基于这点,sysctl(8) 提供两个功能:读取和修改系统设置。
查看所有可读变量:
% sysctl -a
读一个指定的变量,例如 kern.maxproc:
% sysctl kern.maxproc
kern.maxproc: 1044
要设置一个指定的变量,直接用 variable=value 这样的语法:
# sysctl kern.maxfiles=5000
kern.maxfiles: 2088 -> 5000
sysctl 变量的设置通常是字符串、数字或者布尔型。 (布尔型用 1 来表示'yes',用 0 来表示'no')。