FreeBSD 5.X、6.X 常見問答集
Prev |  | Next

# Chapter 10 系統管理

Wei-Hon Chen

10.1. 系統起始設定檔在哪？
10.2. 該如何簡單地新增帳號？
10.3. 在改完 crontab 檔案後，為什麼老是收到這樣的訊息： “`root: not found`”？
10.4. 為什麼我想要用 su 成為 `root` 時，會得到 “`you are not in the correct group to su root`” 的錯誤訊息？
10.5. 我在 `rc.conf` 還是某個起動檔案裡犯了錯誤， 因為檔案系統變成唯讀的，我無法去編輯它。我該怎麼辦？
10.6. 為什麼我沒辦法設定我的印表機？
10.7. 我要怎麼樣修正我的系統所使用的鍵盤對映 (keyboard mapping)？
10.8. 為什麼我在系統啟動時，得到 “`unknown: <PNP0303> can't assign resources`” 的訊息？
10.9. 為什麼 user quotas 無法正常運作？
10.10. FreeBSD 支援 System V IPC 格式指令集？
10.11. 我該如何讓 sendmail 透過 UUCP 來遞送郵件？
10.12. 當我用撥接連上網路時該怎麼設定信件遞送？
10.13. 除了 Sendmail 外，還有哪些郵件伺服器可以使用呢？
10.14. 我忘了 `root` 密碼了！怎麼辦？
10.15. 我該怎麼讓 Control-Alt-Delete 不會重新啟動系統？
10.16. 我該怎麼把 DOS 文字檔案重新格式化成 UNIX 的？
10.17. 我該怎麼用名稱砍掉 process？
10.18. 為何在 su 一直說我不在 `root` 的 ACL 裡？
10.19. 我該怎麼移除 Kerberos？
10.20. 我該怎麼增加系統的虛擬終端機？
10.21. /dev/snd0 這個裝置做不出來！
10.22. 可以不用開機，重新讀取 `/etc/rc.conf`、 再次啟動 `/etc/rc` 嗎?
10.23. 我想要把我的系統昇級到最新的 -STABLE，但是得到的是 -RC 或 -PRERELEASE！怎麼了？
10.24. 我試著要安裝一個新的核心，但是無法 chflags。我該怎麼解決？
10.25. 在我的系統上，我無法變更時間超過一秒以上的範圍！ 我該怎麼辦？
10.26. 為什麼 `rpc.statd` 用了 256 megabytes 的記憶體？
10.27. 為什麼我沒辦法取消 `schg` 檔案旗標？
10.28. 為什麼近來的新版 FreeBSD 預設無法利用 `.shosts` 完成 SSH 認證？
10.29. 什麼是 `vnlru`?

10.1. 系統起始設定檔在哪？

從 2.0.5R 到 2.2.1R，主要的設定檔是 `/etc/sysconfig`。所有的選項都被指定在這個檔， 而其他像 `/etc/rc` (參見 rc(8)) 和 `/etc/netstart` 只是引用它。

觀察 `/etc/sysconfig` 這個檔並修正其值以 適合你的系統。這個檔用註解填滿以表示何處該放置什麼設定。

在 post-2.2.1 以後及 3.0，`/etc/sysconfig` 亦更名為一個更容易描述的檔名叫 rc.conf(5) ，並且語法簡化了些。 `/etc/netstart` 亦更名為 `/etc/rc.network` 因此所有的檔案都可以用 `cp /usr/src/etc/rc* /etc` 來拷貝。

在 3.1 以及，`/etc/rc.conf` 被移到 `/etc/defaults/rc.conf`。 千萬不要編輯這個檔！ 如果 `/etc/defaults/rc.conf` 內有想要更動的項目， 你應該將那一行的內容拷貝到 `/etc/rc.conf`， 然後再修改它。

例如 FreeBSD 3.1 及以後的版本內，有一個 DNS 伺服器 named， 而你想要啟動它。你所需要作的事就是：

    # echo named_enable="YES" >> /etc/rc.conf

想要在 FreeBSD 3.1 及以後的版本中，啟動本地端服務的話，將 shell script 置於 `/usr/local/etc/rc.d` 目錄 下。這些 shell script 應該設定成可執行，並且檔名以 .sh 結束。 在 FreeBSD 3.0 及更早的版本中，你應該直接編輯 `/etc/rc.local` 檔。

`/etc/rc.serial`用來初始化序列埠 （像是鎖定埠的特性等）。

`/etc/rc.i386` 是 Intel 專用設定， 像是 iBCS2 模擬或是 PC 系統主控台設定。

10.2. 該如何簡單地新增帳號？

使用 adduser(8) 指令。如果需要更複雜的使用方式， 請用 pw(8) 這個指令。

要再次移除使用者，使用 rmuser(8) 指令。還有， pw(8) 也可以使用。

10.3. 在改完 crontab 檔案後，為什麼老是收到這樣的訊息： “`root: not found`”？

通常都是因為編輯了系統的 crontab (`/etc/crontab`) 然後就用 crontab(1) 去安裝它：

    # crontab /etc/crontab

這樣作是不對的。系統的 crontab 和 crontab(1) 所更新的使用者的 crontab 格式並不一樣 (crontab(5) 說明文件針對差異處有詳細的說明)。

如果你已經用這種方法，額外多出的 crontab 只就是 `/etc/crontab` 的拷貝，只是格式是錯誤的。 可用以下的命令刪除：

    # crontab -r

下次你編輯 `/etc/crontab` 檔案的時候， 你不用作任何動作去通知 cron(8) ，它自動會去偵測是否有更動。

如果你想要每天、每週、或是每月固定執行某些動作一次，也許加個 shell script 在 `/usr/local/etc/periodic` 目錄下會更好，系統的 cron 會固定執行 periodic(8) 命令， 它可將你的程式和其它的系統週期性工作一起執行。

這個錯誤的真正原因，是因為系統的 crontab 有一個額外的欄位， 說明該命令要以什麼使用者身份執行。在 FreeBSD 的預設系統 crontab 中，所有的項目都是 `root`。 當這個 crontab 被當作是 `root` 的使用者 crontab (它和系統的 crontab 是 不 一樣的)，cron(8) 會以為 `root` 字串是欲執行的命令的第一個字，但是實際上 並沒有這樣的命令存在。

10.4. 為什麼我想要用 su 成為 `root` 時，會得到 “`you are not in the correct group to su root`” 的錯誤訊息？

這是一個安全特性。想要利用 su 成為 `root` (或其它有 superuser 權限的帳號)，你一定要在 `wheel` 群組內。如果沒有這個特性的話， 任何人只要在系統裡有帳號，並且恰巧知道 `root` 的密碼，就可以取得 superuser 等級的權限以存取系統。有了這個特性， 這樣的情況就不會發生；如果使用者不在 `wheel` 群組內的話，su(1) 會讓他們連試著鍵入密碼的機會都沒有。

要讓某人可以利用 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` 檔案。在核心 (kernel) 啟動時所顯示的錯誤訊息，能夠告訴你檔案中哪一行有錯誤。

10.6. 為什麼我沒辦法設定我的印表機？

請參考一下 Handbook 中，有關列印的部份。它應該能夠解決 你大部份的問題。請參考 Handbook 中的列印部份。

有些印表機需要主機支援的驅動程式 (host-based driver) 才能 執行任何列印功能。FreeBSD 本身並不支援這些所謂的 “WinPrinters”。 如果你的印表機無法在 DOS 或 Windows NT 4.0 下執行，那它大概就是一台 WinPrinter。你唯一能使用 這樣的印表機的希望，就是試試 `print/pnm2ppa` 支不支援它了。

10.7. 我要怎麼樣修正我的系統所使用的鍵盤對映 (keyboard mapping)？

請參考 Handbook 中的 using localization 章節，尤其是 console setup 章節。

10.8. 為什麼我在系統啟動時，得到 “`unknown: <PNP0303> can't assign resources`” 的訊息？

以下是從 FreeBSD-CURRENT 通信論壇的一篇文章中節錄出來的。

| “無法指派資源 (can't assign resources)” 訊息表示 那些裝置是傳統的 ISA 裝置，而核心中已經編入不認得 PNP 的驅動程 式。這些裝置包括鍵盤控制器，可程式化岔斷控制晶片，還有幾個標準 設備。資源無法指派給這些裝置，是因為早已有驅動程式使用那些位址 了。 |
--Garrett Wollman `<wollman@FreeBSD.org>`, 2001 年四月 24 日 |

10.9. 為什麼 user quotas 無法正常運作？

- 可能你 kernel 設定未加入 quotas 支援(預設是無)。如果是這樣子的話， 那麼請把下面這行加到 kernel 設定檔內並重新編譯、安裝：

      options QUOTA

  細節部分，請參閱 Handbook 內的 quotas 章節。

- 請不要直接在 `/` 打開 quotas

- 把 quotas 檔放在它必須強迫置入的檔案系統內，舉例：

  檔案系統 | Quota 檔
  --- | ---
  `/usr` | `/usr/admin/quotas`
  `/home` | `/home/admin/quotas`
  ... | ...

10.10. FreeBSD 支援 System V IPC 格式指令集？

是的，FreeBSD 支援 System V-style IPC。這包括共享記憶體， 訊息跟信號。你需要在你的 kernel 設定檔內加入下列幾行以啟動它們。

    options    SYSVSHM          # enable shared memory
    options    SYSVSEM          # enable for semaphores
    options    SYSVMSG          # enable for messaging

> Note: 在 FreeBSD 3.2 以及之後的版本，這些選項已經是 GENERIC 核心的一部份，也就是說它們已 經編進了你的系統中。

重新編譯並安裝。

10.11. 我該如何讓 sendmail 透過 UUCP 來遞送郵件？

跟隨 FreeBSD 套裝而來的 sendmail 設定是適合那些直接連上網際網路 的站台。想透過 UUCP 交換郵件的站台必須另外安裝 sendmail 的設定檔案。

手動修改 `/etc/sendmail.cf` 是絕對必要的。 第 8 版的 sendmail 提供一個全新的入口以透過一些像 m4(1) 的處理就能產生設定檔，這事實上是一個高層概念等級的技巧性設定。 你應該可以在 `/usr/src/usr.sbin/sendmail/cf` 以下裡使用它：

假如你不是用 full sources 方式安裝系統，那麼 sendmail 設定項目可能已經分散成好幾個來源分布檔在等著你，假設你已經 mount 光碟機，做以下動作：

    # cd /cdrom/src
    # cat scontrib.?? | tar xzf - -C /usr/src contrib/sendmail

別驚慌，這只有數十萬個位元組的大小。在 `cf` 目錄裡的 `README` 可以提供一個 m4 設定法的基 本介紹。

以 UUCP 遞送來說，建議你最好使用 `mailertable` 特點。建構一個資料庫讓 sendmail 可以使用它自己的路徑決策。

首先，你必須建立自己的 `.mc` 檔。 `/usr/src/usr.sbin/sendmail/cf/cf` 目錄是這些 檔案的家。查看一下，已經有好幾個範例檔，假設你已經命名自己的檔叫 `foo.mc`，你要做的只是把它轉換成一個有效的 `sendmail.cf`：

    # cd /usr/src/usr.sbin/sendmail/cf/cf
    # make foo.cf
    # cp foo.cf /etc/mail/sendmail.cf

一個典型的 `.mc` 檔看起來可能像這樣：

    VERSIONID(`Your version number')
    OSTYPE(bsd4.4)

    FEATURE(accept_unresolvable_domains)
    FEATURE(nocanonify)
    FEATURE(mailertable, `hash -o /etc/mail/mailertable')

    define(`UUCP_RELAY', your.uucp.relay)
    define(`UUCP_MAX_SIZE', 200000)
    define(`confDONT_PROBE_INTERFACES')

    MAILER(local)
    MAILER(smtp)
    MAILER(uucp)

    Cw    your.alias.host.name
    Cw    youruucpnodename.UUCP

`accept_unresolvable_domains`， `nocanonify`， 和 `confDONT_PROBE_INTERFACES` 特性將避免任何在 遞送郵件時會用到 DNS 的機會。`UUCP_RELAY` 項目的出現理由很奇怪，就不要問為何了。簡單的放入一個網際網路 上可以處理 .UUCP 虛擬網域位址的主機名稱；通常，你只需要在這 裡填入你 ISP 的信件回覆處 (mail replay)。

你已經做到這裡了，你還需要這個叫 `/etc/mail/mailertable`。如果你只有一個用 來傳遞所有郵件的對外通道的話，以下的檔案就足夠了：

    #
    # makemap hash /etc/mail/mailertable.db < /etc/mail/mailertable
                                  uucp-dom:your.uucp.relay

另一個更複雜的例子看起來像這樣：

    #
    # makemap hash /etc/mail/mailertable.db < /etc/mail/mailertable
    #
    horus.interface-business.de   uucp-dom:horus
    interface-business.de        uucp-dom:if-bus
    interface-business.de         uucp-dom:if-bus
    heep.sax.de                  smtp8:%1
    horus.UUCP                    uucp-dom:horus
    if-bus.UUCP                   uucp-dom:if-bus
                                 uucp-dom:

如你所見，這是某個真實檔案裡的一部份。首三行處理網域定址信件 不應該被送出到內定路徑，而由某些 UUCP 鄰居(UUCP neighbor)取代 的特殊情形，這是為了 “縮短”遞送的路徑。下一行處理到 本地乙太網路網域的信件讓它可以使用 SMTP 來遞送。最後，UUCP 鄰居提到 .UUCP 虛擬網域的記載，允許一個 ``uucp-neighbor` !`recipient`` 推翻 內定規則。最後一行則以一個單獨的句點做結束，以 UUCP 遞送到提供當 你全世界性郵件閘門的UUCP 鄰居。所有在 `uucp-dom:` 關鍵字裡的節點名稱必須都是有效的 UUCP 鄰居，你可以用 `uuname` 命令去確認。

提醒你這個檔案在使用前必須被轉換成 DBM 資料庫檔案，最好在 mailertable 最上面用註解寫出命令列來完成這個工作。當你每次更換你 的 mailertable 後你總是需要執行這個命令。

最後提示：如果你不確定某些特定的信件路徑可用，記得把 `-bt` 選項加到 sendmail。這會將 sendmail 啟動在 address test mode；只要按下 `0`，接著輸入你希望測試的信件路徑位址。 最後一行告訴你使用內部的信件代理程式，代理程式的會通知目的主機， 以及(可能轉換的)位址。要離開此模式請按 Control-D。

    % sendmail -bt
    ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
    Enter <ruleset> <address>
    > 3,0 foo@example.com
    canonify           input: foo @ example . com
    ..
    parse            returns: $# uucp-dom $@ your.uucp.relay $: foo < @ example . com . >
    > ^D

10.12. 當我用撥接連上網路時該怎麼設定信件遞送？

如果你已經有一個固定的 IP 數字，你不需要調整任何內定值。設好 你要指定的網路名稱，其他的 sendmail 都會幫你做完。

如果你拿到的是動態配置的 IP 數字而使用撥接 ppp 連接到網際網 路，你可能已經在你的 ISP 信件主機上有一個信箱。假設你的 ISP 網域 是 `example.net`，你的使用者名 稱是 `user`。亦假設你稱自己的主機名稱是 `bsd.home` 而你的 ISP 告訴你可以使用 `relay.example.net` 當作信件回覆處。

為了從你的信箱接收信件，你將需要安裝取信程式以便從信箱取回信件。 Fetchmail 是一個不錯的選擇，因為它支 援許多不同的通訊協定，通常你的 ISP 會提供 POP3。如果你選擇使用 user-ppp，你可以在連線到網路成功後自動抓取你的信件，只要在 `/etc/ppp/ppp.linkup`裡面設定以下這項：

    MYADDR:
      !bg su user -c fetchmail

假使你正使用 sendmail (如下所示) 傳送信件到非本地帳號，置入以下命令：

      !bg su user -c "sendmail -q"

在上面那項命令之後。這會強迫 sendmail 在連接上網路後馬上開始處理 mailqueue。

我假設你在 `bsd.home` 機器上有一個 `user` 的帳號。在 `bsd.home` 機器上 `user` 的家目錄裡建立一個 `.fetchmailrc` 的檔案：

    poll example.net protocol pop3 fetchall pass MySecret

無須贅言，這個檔除了 `user` 外不應該被任 何人讀取，因為它包含 `MySecret` 這個密碼。

為了在寄信時有正確的抬頭 `from:`，你必須告訴 sendmail 使用 `user@example.net` 而非 `user@bsd.home`。你可能會希望告訴 sendmail 從 `relay.example.net` 送出所有信件， 加快信件傳送。

以下的 `.mc` 檔應能滿足你的要求：

    VERSIONID(`bsd.home.mc version 1.0')
    OSTYPE(bsd4.4)dnl
    FEATURE(nouucp)dnl
    MAILER(local)dnl
    MAILER(smtp)dnl
    Cwlocalhost
    Cwbsd.home
    MASQUERADE_AS(`example.net')dnl
    FEATURE(allmasquerade)dnl
    FEATURE(masquerade_envelope)dnl
    FEATURE(nocanonify)dnl
    FEATURE(nodns)dnl
    define(`SMART_HOST', `relay.example.net')
    Dmbsd.home
    define(`confDOMAIN_NAME',`bsd.home')dnl
    define(`confDELIVERY_MODE',`deferred')dnl

如何轉換這個 `.mc` 檔案到 `sendmail.cf` 檔的詳細細節，請參考上一節。 另外，在更新 `sendmail.cf` 以後不要忘記重新啟動 sendmail。

10.13. 除了 Sendmail 外，還有哪些郵件伺服器可以使用呢？

Sendmail 是 FreeBSD 預設使用的郵件伺服器，但是你還是可以很容易地以其它 郵件伺服器 (例如，從 port 安裝的郵件伺服器) 取代之。

port 裡有很多可供選擇的郵件伺服器，像 `mail/exim`、 `mail/postfix`、 `mail/qmail`、 `mail/zmailer` 等， 就是幾個很受歡迎的選擇。

多樣選擇是好事，而且大家有許多郵件伺服器可以使用也被認為是 好事；所以請避免在通信論壇裡問像 “Sendmail 有比 Qmail 好嗎？” 這樣的問題。如果你真的很想問的話，請先到通信論壇 archive 裡找一下。每一個郵件伺服器的優點與缺點，以前大概就已經 討論好幾次了。

10.14. 我忘了 `root` 密碼了！怎麼辦？

不要驚慌！只要重新啟動系統，在看到 Boot: 時輸入 `boot -s` 即可進入單使用者模式 (在 3.2-RELEASE 之前的版本請改用 `-s`)。 在問要使用哪個 shell 時，按下 ENTER。你會看到一個 `#` 的提示號，輸入 `mount -u /` 以重新掛上(mount) 你的根檔案系統可供讀/寫。執行 `passwd root` 以更換 `root` 密碼，然後執行 exit(1) 繼續啟動程序。

10.15. 我該怎麼讓 Control-Alt-Delete 不會重新啟動系統？

如果你是使用 FreeBSD 2.2.7-RELEASE 或之後版本的 syscons(系統內定的主控台驅動程式)，把下列這行放到 kernel 設定檔內， 然後重做一個新的核心：

    options SC_DISABLE_REBOOT

若是使用 FreeBSD 2.2.5-RELEASE 或之後版本的 PCVT 主控台驅動 程式，則以下列選項代替：

    options PCVT_CTRL_ALT_DEL

其他更早期的 FreeBSD 版本，請修改你正在使用的主控台鍵盤對應， 並將所有 `boot` 關鍵字以 `nop` 取代。內定的鍵盤對應是在 `/usr/share/syscons/keymaps/us.iso.kbd`。 你可能需要明白的吩咐 `/etc/rc.conf` 去讀取 這個鍵盤對應以確保更動生效。當然如果你正在用適合你國籍的鍵盤對應， 你應該編輯那一個。

10.16. 我該怎麼把 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-text-file` 則是包含轉換 的輸出結果。這比使用 perl 還要快上一點點。

10.17. 我該怎麼用名稱砍掉 process？

使用 killall(1) 。

10.18. 為何在 su 一直說我不在 `root` 的 ACL 裡？

這個錯誤是因為 Kerberos 分散認證系統。這個問題並不是很嚴重 但是令人厭煩。你可以用 -K 選項去執行 su，或是像下個問題所描述的 移除 Kerberos。

10.19. 我該怎麼移除 Kerberos？

要從系統裡移除 Kerberos，重裝你正在執行的 release 版本的 bin distribution。如果你有 CDROM，你可以 mount cd(假設在 /cdrom) 並執行：

    # cd /cdrom/bin
    # ./install.sh

或者你也可以將 `/etc/make.conf` 裡的 "MAKE_KERBEROS" 選項全都拿掉，然後再 build world.

10.20. 我該怎麼增加系統的虛擬終端機？

如果你有許多 telnet，ssh，X 或是 screen 使用者，你或許會用完 虛擬終端機，這能教你怎麼加更多：

1. 建立並安裝一個新的 kernel 並且把這一行

       pseudo-device pty 256

   加入到設定檔裡。

2. 執行這個命令：

       # cd /dev
       # sh MAKEDEV pty{1,2,3,4,5,6,7}

   會造出 256 個虛擬終端機的裝置節點。

3. 編輯 `/etc/ttys` 並加入符合 256 個終端機的行數。它們應該符合已經存在單項的格式，舉例來說， 它們看起來像：

       ttyqc none network

   字母設計的順序是 `tty[pqrsPQRS][0-9a-v]`，使用正規表示式。

4. 用新的 kernel 重新啟動電腦就可以了。

10.21. /dev/snd0 這個裝置做不出來！

並沒 `snd` 這個裝置的存在。這個名字 是用來當作各個組成 FreeBSD 聲音驅動程式組，諸如 `mixer`， `sequencer`，以及 `dsp` 的簡稱。

可以用以下的命令作出這些裝置：

    # cd /dev
    # sh MAKEDEV snd0

10.22. 可以不用開機，重新讀取 `/etc/rc.conf`、 再次啟動 `/etc/rc` 嗎?

先進入單人使用者模式，然後再回到多使用者模式。

在主控台執行：

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

    # return
    # exit

10.23. 我想要把我的系統昇級到最新的 -STABLE，但是得到的是 -RC 或 -PRERELEASE！怎麼了？

簡單地說：那只是名字而已。RC 的意思是 “Release Candiate， 發行候選版本”，它表示新版本快要發行了。在 FreeBSD 中， -PRERELEASE 通常是發行前的程式碼凍結的代名詞。(有些發行版本中， -BETA 標籤跟 -PRERELEASE 是相同意思的。)

詳細地說：FreeBSD 從兩個地方分支出它的發行版本。主版號、 點零、release (例如 3.0-RELEASE 及 4.0-RELEASE) 的，是從發展過程 開始時分支出來的，通常稱為 -CURRENT 。有副版號的版本 (例如 3.1-RELEASE 或 4.2-RELEASE)，是 活躍的 -STABLE 分支中的發行版本 快照。從 4.3-RELEASE 開始，每一個發行版本有它自己的分支，可為 偏好極度保守的發展速度 (通常只會作安全方面的更新) 的人所用。

準備要製作發行版本時，其所在的分支會經過一定的程序。有一個是 程式碼凍結。當程式碼凍結開始時，分支名稱會更名，以反映它快要成為 一個發行版本了。舉個例子，如果原來的分支叫 4.5-STABLE，它的名字 會變成 4.6-PRERELEASE 以表示程式碼已凍結，並且額外的發行前測試 將要開始了。臭蟲更正仍可回報，以成為發行版本的一部份。當程式碼 有了可成為發行版本的雛形時，它的名字就會變成 4.6-RC，以表示發行 版本快好了。進入 RC 階段後，只有找到的最有影響的臭蟲才會被修正。 當發行版本 (本例中為 4.6-RELEASE) 產生後，發行版本會有自己的分支， 原分支會被更名為 4.6-STABLE。

想要得知更多有關版本號碼與各 CVS 分支的資訊，請參考 Release Engineering 一文。

10.24. 我試著要安裝一個新的核心，但是無法 chflags。我該怎麼解決？

簡單地說：你的 securelevel 可能大於零。直接重新開機到 單人模式，再安裝核心。

詳細地說：FreeBSD 在 securelevel 大於零情況下，不允許 變更系統旗標 (system flags)。你可以用這個指令檢查你的 securelevel：

    # sysctl kern.securelevel

你沒有辦法降低 securelevel；你必須啟動系統到單人模式以 安裝核心，或是修改 `/etc/rc.conf` 內的 securelevel 再重新開機。請參考 init(8) 說明文件，以取得 更多有關 securelevel 的資訊，還有 `/etc/defaults/rc.conf` 和 rc.conf(5) 說明文件，以取得更多有關 rc.conf 的資訊。

10.25. 在我的系統上，我無法變更時間超過一秒以上的範圍！ 我該怎麼辦？

簡單地講：你系統的 securelevel 也許大於 1。直接重新開機至 單人模式，然後再修改時間。

詳細地說：在 securelevel 大於 1 的情況下，FreeBSD 不允許時間 變動大於一秒。你可以用以下的命令來檢查目前的 securelevel：

    # sysctl kern.securelevel

你無法降低 securelevel；你必須啟動電腦至單人模式下以修改時間， 或是修改 `/etc/rc.conf` 再重新開機。請參考 init(8) 說明文件，以取得更多有關 securelevel 的資訊，還有 `/etc/defaults/rc.conf` 和 rc.conf(5) 說明文件，以取得更多有關 rc.conf 的資訊。

10.26. 為什麼 `rpc.statd` 用了 256 megabytes 的記憶體？

不，那不是 memory leak，而且它也不是真的用了 256 Mbyte 的記憶體。它只是喜歡 (意思就是總會這樣作) 將一狗票的記憶體 映謝到它自己的位址空間，以方便作事。就技術而言，這樣並沒有 什麼不對；這樣只是會讓 top(1) 和 ps(1) 嚇一大跳而已。

rpc.statd(8) 會將它的狀態檔案 (位於 `/var` ) 映射至它的位址空間裡；為了防止需要的時候再增大所 導致的重新映射，它一次會使用相當大的大小。從程式碼來看的話就 更明顯了，可以看到 mmap(2) 的長度參數為 `0x10000000` ，它是 IA32 架構上的十六分之一的定址空間，也就是 256MB。

10.27. 為什麼我沒辦法取消 `schg` 檔案旗標？

你正在一個提高了 securelevel (也就是大於 0) 的系統運作。 降低 securelevel 再試試看。請參考 FAQ 中對 securelevel 的說明 和 init(8) 說明文件。

10.28. 為什麼近來的新版 FreeBSD 預設無法利用 `.shosts` 完成 SSH 認證？

為什麼近來新版 FreeBSD `.shosts` 認證預設 為取消的原因，是因為 ssh(1) 預設不安裝為 suid 成 `root`。要 “修正” 這點，你可以作下列的 任何一件事：

- 要一勞永逸解決，請將 `/etc/make.conf` 裡的 `ENABLE_SUID_SSH` 設成 `true` ，然後再重新 build ssh (或是執行 `make world`)。

- 只作一時的修正的話，可以 `root` 身份 執行 `chmod 4755 /usr/bin/ssh` 將 `/usr/bin/ssh` 設成 `4555` 。然後將 `ENABLE_SUID_SSH= true` 加入 `/etc/make.conf` 裡，這樣下次 `make world` 執行就會生效了。

10.29. 什麼是 `vnlru`?

當系統達到上限 `kern.maxvnodes` 時， `vnlru` 會清除並釋放 vnode。這個核心 執行緒大部份的時間都沒事作，只有當你有很大的記憶體，而且 正在存取上萬個小檔案時，才會被啟動。

Prev | Home | Next
硬碟、檔案系統、Boot Loader |  | X Window System 及 Virtual Consoles

本文及其他文件，可由此下載：ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/。

若有 FreeBSD 方面疑問，請先閱讀 FreeBSD 相關文件，如不能解決的話，再洽詢 <questions@FreeBSD.org>。
關於本文件的問題，請洽詢 <doc@FreeBSD.org>。