发新话题
打印

【推荐】FreeBSD 4.X、5.X 和 6.X 常见问题

【推荐】FreeBSD 4.X、5.X 和 6.X 常见问题

FreeBSD 4.X、5.X 和 6.X 常见问题---系统管理
10.1. 系统启动的设置文件在哪里?
10.2. 怎样简单的增加一个用户?
10.3. 为什么我总是得到这样的信息 “root: not found”,在我编辑完我的 crontab 文件后?
10.4. 为什么我得到错误,“you are not in the correct group to su root” 当我试图 su 到 root 的时候?
10.5. 我在 rc.conf 文件内犯了个错误 , 或其他的系统启动文件,然后 我不能编辑这些文件因为文件系统是只读的 . 我该怎么办?
10.6. 为什么我在设置打印机时遇上了麻烦?
10.7. 我怎样才能更正我的系统的键盘映射?
10.8. 为什么我在启动时会得到这样的消息: “unknown: <NP0303> can't assign resources” ?
10.9. 为什么我不能让用户配额正确工作?
10.10. FreeBSD 是否支持 System V IPC?
10.11. 除了Sendmail,我还能使用什么其他的邮件服务器软件?
10.12. 我忘记了root 的密码! 我要怎么做?
10.13. 我怎样让 Control+Alt+Delete 组合键不重启系统?
10.14. 我怎样将DOS格式的文本文件格式化成 UNIX® 格式的?
10.15. 我怎样使用一个进程的名字来杀死它?
10.16. 为什么su 打扰我,提示不属于 root's ACL?
10.17. 怎样卸载 Kerberos?
10.18. /dev/MAKEDEV 作什么?
10.19. 我怎样在系统中增加伪中端?
10.20. 为什么我不能创建 snd0 设备?
10.21. 我怎样重读 /etc/rc.conf 并且 重启 /etc/rc 而不重启系统?
10.22. 我试着更新我的系统到最新的 -STABLE, 但是 得到 -BETAx, -RC or -PRERELEASE! 怎么回事?
10.23. 我试着安装一个新内核, chflags 失败了。 我应该怎么做?
10.24. 我不能更改我系统的时间. 我应该怎么做?
10.25. 为什么 rpc.statd 使用256M内存?
10.26. 为什么我不能取消文件的 schg 标志?
10.27. 为什么在最近的FreeBSD发行中默认 SSH 通过 .shosts 的认证方式不工作?
10.28. vnlru 是什么?
10.29. top 显示的内存类型都是什么意思?
10.30. 还有多少空闲的内存?
10.31. /var/empty 是什么?我不能删除他 !
10.1. 系统启动的设置文件在哪里?

最主要的设置文件是 /etc/defaults/rc.conf (见 rc.conf(5)) 系统启动的脚本文件 /etc/rc 和 /etc/rc.d (见 rc(8)) 只是包含这个文件。不要编辑 它! 然而, 如果在 /etc/defaults/rc.conf 里面有一个配制选项你要修改, 你应该把那一行复制到 /etc/rc.conf 里面,并且 在那里修改。

例如,如果你想开机启动内建的域名服务器 named, 你要做的就像下面那样:

# echo named_enable="YES" >> /etc/rc.conf
要启动一个本地服务,把 shell 脚本放在 /usr/local/etc/rc.d 目录里面。这些 shell 脚本应该被设置成可执行的,然后以 .sh 作为文件名的结尾。

10.2. 怎样简单的增加一个用户?

使用 adduser(8) 命令,或者 pw(8) 命令,如果你需要更复杂的解法 .

要删除一个用户,使用命令 rmuser(8) 或者, 如果必须, 使用命令 pw(8).

10.3. 为什么我总是得到这样的信息 “root: not found”,在我编辑完我的 crontab 文件后?

这通常是由于编辑系统 crontab 文件 (/etc/crontab) 然后使用 crontab(1) 安装它造成的:

# crontab /etc/crontab
这不是作这件事的正确方法。 系统 crontab 文件拥有与每用户 crontabs 不同的格式 而 crontab(1) 只更新每用户 crontabs ( crontab(5) 手册详细解释了二者的不同).

如果你这么作了,现在的 crontab 只是 /etc/crontab 的一个格式错误的拷贝 。 用下面的命令删除它:

# crontab -r
下次,当你编辑 /etc/crontab 时,你除了通知 cron(8) 这些改变外不用作其他事情,既然 它自己会自动的通知他们 .

如果你希望什么事每天每周或者 每月运行,可能更好的选择是增加脚本 /usr/local/etc/periodic, 然后让 periodic(8) 命令从系统 cron 调度器 那里象其他的系统任务 那样进行调度 .

这个错误的实际原因是系统 crontab 有一个附加域指定以选择的用户权限运行命令.在FreeBSD提供的默认系统crontab中, 所有的条目都指定了root 用户.当这个文件被用作 root 的个人 crontab (这个与系统 crontab 不一样 ), cron(8) 假定字串 root 是将被运行的命令 的前几个字符 ,但是这样的命令根本不存在 .

10.4. 为什么我得到错误,“you are not in the correct group to su root” 当我试图 su 到 root 的时候?

这是一个安全特性。 要想 su 到 root (或者任何其他具有超级用户权限的用户 ), 你必须在组 wheel 内 。如果没有这个特性, 那么任何在系统拥有账号并且 知道 root 密码的人都可以获得系统的超级用户权限 。 有这个特性,这就不一定是正确的 ; su(1) 会阻止那些即使知道密码但是不在 wheel内的用户.

要容许某个用户 su 到 root, 只要把他放到 wheel 组就可以 .

10.5. 我在 rc.conf 文件内犯了个错误 , 或其他的系统启动文件,然后我不能编辑这些文件因为文件系统是只读的 . 我该怎么办?

当你得到输入shell命令的提示时 ,简单的按一下 ENTER,然后运行 mount / 来重新以可读写方式装载根文件系统 。你也可能需要运行 mount -a -t ufs 来装载你喜欢的编辑器所在的文件系统 。如果你喜欢的编辑器在一个网络文件系统上,或者你要自己在装载网络文件系统前手动配置网络 ,或者 使用一个在本地文件系统中的编辑器, 就像 ed(1).

如果你更愿意使用一个全屏幕编辑器,象 vi(1) 或 emacs(1), 你可能需要运行 export TERM=cons25 ,这样这些编辑器 就能从 termcap(5) 正确的装载数据了 .

一旦你运行了这些步骤,你能象往常那样编辑 /etc/rc.conf 好改正那些语法错误。 在内核启动信息后立刻显示的错误消息应该告诉你那个文件发生了错误以及错误的行数.

10.6. 为什么我在设置打印机时遇上了麻烦?

请看一下手册中关于打印的章节. 那里应该包含了你问题的大部分解决方法。查看 FreeBSD手册-打印.

有一些打印机要求系统相关的驱动才能打印. 。这些打印机被叫做 “WinPrinters” 并不被 FreeBSD 本地支持 。如果你的打印机不能在 DOS 或 Windows NT® 4.0 下工作,他可能就是一个 WinPrinter. 你唯一能 让这些打印机工作的希望是检查一下 print/pnm2ppa 包是否支持它 .

10.7. 我怎样才能更正我的系统的键盘映射?

请看手册中关于 using localization 的章节,特别是关于 console setup 的章节 .

10.8. 为什么我在启动时会得到这样的消息: “unknown: <NP0303> can't assign resources” ?

下面是来自 freebsd-current 邮件列表的摘录 .

  那个 “can't assign resources” 消息 指出这个设备是一个 legacy ISA 设备,需要一个 non-PnP-aware 驱动被编译进内核。 这些设备包括键盘控制器,可编程中断控制器, 还有一些其他的标准下层构件。 资源不能被分配 是因为已经有其他的驱动使用了这些地址 .
   
--Garrett Wollman <wollman@FreeBSD.org>, 24 April 2001   

10.9. 为什么我不能让用户配额正确工作?


不要在/上面打开配额 .

把配额文件放到那些被强制实行配额的文件系统上 ,象:

Filesystem Quota file
/usr /usr/admin/quotas
/home /home/admin/quotas
... ...

10.10. FreeBSD 是否支持 System V IPC?

是的,在 GENERIC 内核中 FreeBSD 支持 System V-style IPC, 包括 shared memory (共享内存), messages (消息) and semaphores (信号). 在一个自定义内核中, 向内核配置文件中添加下面这些行来提供 相应的支持 .

options    SYSVSHM   # enable shared memory
options    SYSVSEM    # enable for semaphores
options    SYSVMSG    # enable for messaging
重新编译并安装你的内核 .

10.11. 除了Sendmail,我还能使用什么其他的邮件服务器软件?

Sendmail 是默认的邮件服务器软件,但是你能 简单的用其他的一个MTA来代替他(例如, 从Ports中安装一个MTA ).

在ports tree 中有多种不同的选择 ,包括 mail/exim, mail/postfix, mail/qmail, 和 mail/zmailer 都是最流行 的选择 .

多样性非常好,你有各种不同的邮件服务器可以选择是非常好的 一件事 ; 因此尽量避免在邮件列表中问 象 “Is Sendmail better than Qmail?” 这样的问题。 如果你想问,首先检查一下邮件列表的历史存档。 每一个MTA的优缺点都被讨论过几次了.

10.12. 我忘记了root 的密码! 我要怎么做?

别慌张 ! 重启系统,启动时在Boot:提示下打 boot -s 进入单用户模式。在被问道使用的shell时 ,按会车。你会有一个 # 提示. 运行 mount -u / 命令来以可读写方式装载你的根文件系统,然后运行命令 mount -a 重新装载所有的文件系统。运行 passwd root 来更改 root 密码,跟着 exit(1) 来继续启动过程.

10.13. 我怎样让 Control+Alt+Delete 组合键不重启系统?

如果你使用 syscons (默认的控制台驱动) 用包含下面这行的配置文件编译安装内核

options SC_DISABLE_REBOOT
如果你使用 PCVT 控制台驱动,用下面这行代替 .

options PCVT_CTRL_ALT_DEL
10.14. 我怎样将DOS格式的文本文件格式化成 UNIX® 格式的?

用这个 perl 命令:

% perl -i.bak -npe 's/\r\n/\n/g' file ...
file 是将被转换的文件. 修改在原文件上进行 原始文件将被增加一个.bak扩展名进行保存 .

可选择的,你可以使用命令 tr(1) :

% tr -d '\r' < dos-text-file > unix-file
dos-text-file 是包含DOS 文本的文件, unix-file 将包含转换后的输出。 这个将比使用perl命令快些 .

10.15. 我怎样使用一个进程的名字来杀死它?

使用 killall(1).

10.16. 为什么su 打扰我,提示不属于 root's ACL?

这个错误来自于Kerberos分布式认证系统。问题虽然不致命但是很烦人. 或者你可以使用su时用 -K 选项,或者卸载 Kerberos ,就像在下面问题中描述的那样 .

10.17. 怎样卸载 Kerberos?

从系统中删除 Kerberos,从你运行的发行版中重新安装 bin 。 如果你有 CDROM, 你能装载 cd (我们假定在 /cdrom) 然后运行

# cd /cdrom/bin
# ./install.sh
可选择的,你能除去所有的 MAKE_KERBEROS 选项在 /etc/make.conf 文件内, 然后重建系统.

10.18. /dev/MAKEDEV 作什么?

FreeBSD 5.X 和其上的系统使用 devfs(8) 系统。设备驱动在他们需要的时候自动创建设备结点 ,而不用 /dev/MAKEDEV.

如果你运行 FreeBSD 4.X 或者以前的版本,并且 /dev/MAKEDEV 丢失了,那么你 确实有个问题。 从系统源代码中获得一个拷贝 ,可能是 /usr/src/etc/MAKEDEV.

10.19. 我怎样在系统中增加伪中端?

如果你有很多的 telnet, ssh, X, 或 屏幕用户 , 你可能要运行大量的伪中端。这里告诉你怎么加的多些 :

用包含下面行的文件编译安装一个新内核

pseudo-device pty 256
运行命令

# cd /dev
# sh MAKEDEV pty{1,2,3,4,5,6,7}
建立256个新中端的设备结点 .

编辑 /etc/ttys 然后为 256 中端的每一个增加如下行. 行要匹配已有的条目 ,看起来象

ttyqc none network
字母名称的顺序使用正则表达式 tty[pqrsPQRS][0-9a-v]。

用新内核重启系统,然后一切都好.

10.20. 为什么我不能创建 snd0 设备?

没有 snd 设备。这个名字被用作FreeBSD各种声音驱动的简写 象 mixer, sequencer, 和 dsp.

要创建这些设备,你应该

# cd /dev
# sh MAKEDEV snd0
注意: 如果你运行FreeBSD 5.0 RELEASE 或包含 devfs(5) 的更新FreeBSD版本, 你可以忽略这些 .

10.21. 我怎样重读 /etc/rc.conf 并且 重启 /etc/rc 而不重启系统?

进入单用户系统,然后回到多用户模式.

在控制台下:

# shutdown now
(Note: without -r or -h)

# return
# exit
10.22. 我试着更新我的系统到最新的 -STABLE, 但是 得到 -BETAx, -RC or -PRERELEASE! 怎么回事?

简短的回答: 这只是个名字。 RC 表示 “Release Candidate ”. 它表示一个发行就要产生了 。 在 FreeBSD,-PRERELEASE 是与 synonymous 同义的,表示在一个发行版之前的代码的冻结. (有些版本, -BETA 标签 和 -RERELEASE 一样的使用 .)

长回答: FreeBSD 用两种方式控制他的发行. 主的,点零, releases, 就象 4.0-RELEASE 和 5.0-RELEASE, 从开发的头处的分支 ,通常是被连接到 -CURRENT. 小的发行版,象 4.1-RELEASE 或 5.2-RELEASE, 是当前活动 -STABLE 分支的快照 . 从 4.3-RELEASE 开始,每个发行版现在也有 他自己的分支,这样就可以被那些比较保守的人来跟踪他的开发进度 (特别的只有安全更新 .

当一个发行版要发行时,the branch from which it will be derived from has to undergo a certain process. Part of this process is a code freeze. When a code freeze is initiated, the name of the branch is changed to reflect that it is about to become a release. For example, if the branch used to be called 4.5-STABLE, its name will be changed to 4.6-PRERELEASE to signify the code freeze and signify that extra pre-release testing should be happening. Bug fixes can still be committed to be part of the release. When the source code is in shape for the release the name will be changed to 4.6-RC to signify that a release is about to be made from it. Once in the RC stage, only the most critical bugs found can be fixed. Once the release (4.6-RELEASE in this example) and release branch have been made, the branch will be renamed to 4.6-STABLE.

For more information on version numbers and the various CVS branches, refer to the Release Engineering article.

10.23. 我试着安装一个新内核, chflags 失败了。 我应该怎么做?

简短的回答: 可能你的安全级别高于0 。 重启到单用户模式来安装内核.

冗长的回答: FreeBSD 在安全级别高于0是不容许更改系统标志( system flags ) 。你可以使用用下面的命令检查你的安全级别:

# sysctl kern.securelevel
你不能降低你的安全级别 ; 你必须启动到 单用户模式以安装内核,或者在 /etc/rc.conf 内更改安全级别然后重启。 查看 init(8) 手册了解关于安全级别的详细信息,然后查看 /etc/defaults/rc.conf 和 rc.conf(5) 手册知道关于 rc.conf 的更多信息.

10.24. 我不能更改我系统的时间. 我应该怎么做?

简短的回答: 可能你的安全级别高于0 。 重启到单用户模式来更改时间 .

冗长的回答: FreeBSD 在安全级别高于0是不容许更改系统时间的 。你可以使用用下面的命令检查你的安全级别:

# sysctl kern.securelevel
你不能降低你的安全级别 ; 你必须启动到 单用户模式以安装内核,或者在 /etc/rc.conf 内更改安全级别然后重启。 查看 init(8) 手册了解关于安全级别的详细信息,然后查看 /etc/defaults/rc.conf 和 rc.conf(5) 手册知道关于 rc.conf 的更多信息.

10.25. 为什么 rpc.statd 使用256M内存?

不,没有内存泄漏,而且它没有使用256M内存. 为了方便,rpc.statd 把所有的 内存影射到他自己的地址空间 . 从技术角度讲这没有任何错误 ; 它只是影响了象 top(1) 和 ps(1) 这样的程序 .

rpc.statd(8) 映射他的状态文件 (在 /var内 ) 到他的地址空间 ; 当他需要增长的时候就不需要为此而担心,它把这个映射一个很大的大小. 从源代码看这个很明显,在那里可以看到 mmap(2) 的参数的长度是 0x10000000, 或者在IA32平台上是地址空间的1/16 , 恰恰是 256MB.

10.26. 为什么我不能取消文件的 schg 标志?

当你运行在较高的安全级别(也就是高于0) 。 降低安全级别试试。 要得到更多的信息,查看 the FAQ entry on securelevel 和 init(8) 手册 .

10.27. 为什么在最近的FreeBSD发行中默认 SSH 通过 .shosts 的认证方式不工作?

在最近的FreeBSD中基于.shosts 的认证方式默认不工作的原因是默认 ssh(1) 没有使用 suid root 方式安装。 “修正” 这个,你可以作下面之一

作为一个永久的修正, 设置 ENABLE_SUID_SSH 为 true 在 /etc/make.conf 内,然后重新建造 ssh (或者运行 make world).

作为一个临时的修正, 修改 /usr/bin/ssh 的模式为 4555 通过运行命令 chmod 4555 /usr/bin/ssh 使用账号 root. 然后增加 ENABLE_SUID_SSH= true 到 /etc/make.conf,因此当下次 make world 运行时这些就会有效.


10.28. vnlru 是什么?

vnlru 释放 vnodes 当 系统达到 kern.maxvnodes 限制的时候。 内核线程通常是空闲的,只有只有当你有很大的内存并且访问了数以万计的小文件时才被激活.

10.29. top 显示的内存类型都是什么意思?


Active: 最近使用的页面.

Inactive: 最近没有使用的页面.

Cache: (大部分通常) 从inactive 到自己要求更改他们自己的数据, 然而经常立刻 就被重用 (或者是他们的就的关联, 或者使用一个新的关联 .) 如果页面被清理(未更改), 可能立刻从 active 改变到 cache 状态 ,若非更改大概只是一种策略,依赖于VM系统维护人员的算法选择.

Free: 没有数据内容的页面 , 在cache页面不合格的情况下可以被立即使用. Free 页面在中断或进程状态下可以使用.

Wired: 内存中固定的页面 ,经常是为了内核的目的,偶尔在进程中为了特定的使用.

当页面处于 inactive 状态是, 经常被写入硬盘 (VM同步 的一种 ),但是 active 页面也被同步了 (然而需要 特定的CPU特性.) 这依赖于 CPU 跟踪修改位的能力可用, 并且在一定条件下, 同步VM页面的一个块还是很有优势的, 无论他们是 active 还是. 在更多的情况下, 最好想想 inactive 队列是最近未使用的页面的队列,他们可能会或不会被写入磁盘. 。 Cached 页面也被同步, 不是映射 ,但是可以被立即使用无论是新的还是旧的联合. Free 页面 在中断级可用, 但是 cached 或 free 页面 可在进程状态下被重用。 Cache 页面 不是充分锁定的 以使他们在中断层可用.

还有一下其他的标志( 忙标志或忙计数 ) 可能修改我所描述的一些规则.

10.30. 还有多少空闲的内存?

有几个种类的 “空闲 内存”. 一类是不需要换出任何页面的立即可用的内存总量. 这个大约是 cache 队列的大小 + free 队列的大小 (含有一个降阶因子,这依赖于系统调整 .) 另外一类 “空闲内存” 是 VM 空间的总量。 这个复杂些,但它依赖于交换空间的大小和内存 。 其他类型的 “ 空闲内存 ” 描述也是可能的, 但是定义这些基本没有用 ,除了对确定页面调度率保持很低和确保不用完交换分区很重要外.

10.31. /var/empty 是什么? 我不能删除他 !

/var/empty 是一个 sshd(8) 程序在进行特权分离时使用的目录. /var/empty 目录是空的,拥有者是 root ,还被设置了 schg 标志 .

虽然不建议删除这个目录 ,但如果需要,你要先除去 schg 标志。查看 chflags(1) 手册,关于它更多的信息 ( 并且记住答案 the question on unsetting the schg flag).

TOP

发新话题