FreeBSD Tips and Tricks for 2005

原文出處:http://www.onlamp.com/pub/a/bsd/2005/02/17/FreeBSD_Basics.html
原文作者:Dru Lavigne
中文翻譯:kjhsieh [@] hotmail [dot] com

by Dru Lavigne 02/17/2005
當你在閱讀這篇文章的時,2004 年的快樂時光已消逝成回憶。在年尾的數天前,我調閱了一份名單,它是以往所記錄下來等到有空閒所要查看的東西。跟往常一樣,我找到了一些有趣的東東。

Beastie and Beerware

至少每年一次,我都會搜遍所有在 FreeBSD 系統裡的檔案,看看我是否有遺漏一些新文件、scripts、或 manpages(手冊)。我從 /usr/share/examples 開始搜起,第一個印入我眼簾的是一個叫 BSD_daemon 的子目錄:

# ls /usr/share/examples/BSD_daemon
FreeBSD.pfa	beastie.eps	eps.patch
README		beastie.fig	poster.sh

README 中,有說明這目錄中的每一個檔案的用途,README 檔是由 Poul-Henning Kamp 撰寫,且由 Beerware license 保護著(這在 README 中也有說明)

README 也有介紹使用 fig2dev 這工具來生成 GIF 和 PNG 的指令,這工具不在我的系統裡面,而經由 Google 搜尋的資料得知 fig2dev 是 transfig 這套件中的一部分。我馬上安裝了它,且執行那產生圖像的指令:

# pkg_add -r transfig

# fig2dev -L gif -g '#f0f0f0' -t '#f0f0f0' beastie.fig beastie.gif
# fig2dev -L png beastie.fig beastie.png

所產生的圖像是隻很棒的 Beastie (Beastie 是 BSD Daemon 的名字,俗稱小惡魔)。如果你也想要嘗試生成圖像,請 man fig2dev,推薦值得一讀。

Adding Interaction to Scripts (加入互動到 scripts 裡頭)

接著,我查看了 dialog 這子目錄:

# ls /usr/share/examples/dialog
README		infobox		msgbox		textbox
checklist	inputbox	prgbox		treebox
ftreebox	menubox		radiolist	yesno

在今年稍早前我曾嘗試過 dialog,它讓你可以增加一些互動的選單到你的 shell scripts 中。在那時,我在網路上搜查一些可作用的範例,但卻令我失望了。我只找到少數幾個建立 menubox 的示範,而這只是 dialog's box 選項的其中之一而已。在 man dialog 記載著每一個選項的完整說明,當我在學新東西的時候,我發覺得如果有個可以正常作用的範例那將可幫助我理解它。

為了讓你方便,底下是一些每一種型態的 dialog box 的實例。這是用 Bourne shell scripts 所寫的,所以你可以很容易的讀每一個 script,且用它當個樣板來建立你自己的 interactive scripts。要測試每一個 scripts 的話,首先要把它們設成可執行檔:

# chmod +x [a-z]*

在此注意一下,我在 chmod 指令中有用萬用字元來配合抓取指定的檔案,我不想要把 README 檔設定可執行(+x),而我想要把這目錄中除了 README 以外的檔案設成可執行的,而這些其餘的檔案的檔名都是英文小寫字母,所以 [a-z]* 表示檔名為英文小寫的檔案皆為符合的條件。

另外,因為這些 scripts 是在 /usr/share/examples ,而它不是預設的路徑,你必須使用完整的路徑來執行每一個 script,或者你可以直接 cd 切換到該目錄底下,然後在每個 script 的名字前面輸入 ./ ,像這樣:

# cd /usr/share/examples
# ./yesno

In Case of Emergency (萬一有突發狀況發生)

如果你已經越過初學的階段(指得是你不再像以前一樣,隔天就重灌電腦,從頭來過),那麼出錯的情形應該很常發少在你身上。然而,能熟悉各種緊急應便的措施總是好的,以免問題來的時候手忙腳亂的。

如果你正使用 FreeBSD 5.2 或更新的版本,先查看 man rescue,接著再下指令 ls /rescue 觀察一下,可喜的是裡面有許多安全急救工具,可在例如發生無法存取 /bin/sbin 此種少見情況時使用,在它的 manpage 裡有提供在這種急緊狀況時該如何進行下去的詳細步驟和指令,建議你把它列印下來並保存在你的離線瀏覽的文件中。

你是否曾搞砸了設定檔,或者更糟的不小心把設定檔從系統中刪除了?如果那檔案是在 /etc 的話,那還有救,你的系統中該還會有份原始檔案在 /usr/share/examples/etc/

最後,你絕不會想要在 /dev 路徑下用到 rm 指令。你曾經是否有注意到在 /dev 這目錄很長的列表中有兩個額外的欄位,且這欄位在系統中的其它地方是看不到的?例如,比較一下底下兩個列表:

% ls /etc/rc.conf
-rw-r--r--  1 root  wheel  763 Dec  6 13:59 /etc/rc.conf
                           ^^^
% ls /dev/fd0
crw-r-----  1 root  operator    4,  10 Dec 29 08:44 /dev/fd0
                                ^^^^^^
該欄位取代原先印出檔案的大小(in bytes),而在這很長的裝置(device) 列表中印出一個較小另個較大的數字,這兩個數字所代表的意思是裝置(device)的型態,以便讓 kernel 知道該如何和這裝置(device)溝通,表示說如果你不小心把 /dev/fd0 刪除的話,僅用 touch /dev/fd0 這指令是無法修復的,而是要用 mknod 指令,其語法為:

# mknod fd0 c 4 10

其中的 c 表示這是一個 character device,注意到 c 是在這很長的列表中的第一個字母,也就是在 permissions set 左邊的那個字母,說這的用意何在?如果你不小心刪除了某個裝置(device),你必須先知道三樣事情方能重新建造一個裝置(device):此裝置(device)一次處理 one character 或 one block,以及它的較小的和較大的數字為何。如果你有另一台 FreeBSD 系統,你可以從該台電腦中再次列出該裝置列表來找回失去的裝置(device)的資訊。如果你沒有別台 FreeBSD 系統的話,請考慮先備份 /dev 或把 ls -l /dev 列印到紙上。

Reading Material (閱讀文物)

在過去的一年中,在 FreeBSD articles 所增加的大量文章讓我感到驚喜,大部分的文章可以在 /usr/share/doc/en/articles 找到。

BSD Hacks 一書中的 Hack #89,有示範如何把新發佈的文章增添至你的離線文件中,其方法為確定這行有在你的 CVS supfile 檔中:

doc-all tag=.

因為這原始碼是 SGML,你需要安裝這個 port 來把它轉換成 HTML:

# pkg_add -r docproj-nojadetex

我寫了個 script 來簡化步驟。以下是轉化文件 script 中的一部分:

echo "Updating docs"
cd /usr/doc
cp Makefile.orig Makefile
make install > /dev/null

有一些文章挺適合剛接觸 FreeBSD 的新手,即使你不是新手,你也可以把這些文章推薦給那些剛接觸 FreeBSD 的朋友們,例如在 /usr/share/doc/en/articles 裡的 new-usersfreebsd-questions。那些感到困惑或想要了解什麼是 FreeBSD 的人,請查看 explaining-bsd。如果你實在很想為 FreeBSD project 付出點心力,但卻因為你無法寫程式碼而感到你不能貢獻的人,請查看 contributing

你是否曾想要了解 BSDs 如何併入至 Unix 家族之樹狀表呢?請查看 /usr/share/misc/bsd-family-tree。假如你想要創作 manpage 的話,你可以在 /usr/share/misc 找個叫 man.templatemdoc.template 的樣板,或者更好的方法 /usr/share/examples/mdoc 有包含三種 well-commented sample manpages 的格式。

A GUI rc.conf

每當我有空時,我喜歡趁著在嘗試安裝那有趣的 sounding ports 到我的測試系統的期間, 花點時間仔細研究 ports collection。我有嘗試 thefish 了一陣子,我由安裝此套件開始:

# pkg_add -r thefish

然後,當我執行 thefish 時,它卻執行 ncurses 的版本。你該有印象當你輸入 /stand/sysinstall 時的那個藍色畫面,就是在你的滑鼠無法作用時,你得用方向鍵和 tab 來操作的畫面?那種型態的畫面是用 ncurses library 在 console 下提供 guasi-GUI。這對沒有安裝 X 的系統而言是很棒的。然而,如果你正使用 GUI 且想要個更好看的選單,你可改用 widget set 來調整你的視窗環境。

我這麼說是什麼意思?一旦我移除 console-only binary of thefish,我用此來安裝該 port:

# cd /usr/ports/sysutils/thefish
# make install clean

它秀出這個選單:

[ ] CONSOLE	Disable X11 support
[x] GTK		Use GTK+ for the X11 interface
[ ] QT		Use Qt for the X11 interface

GTK+ 和 QT 兩者皆是可選的 widget sets,widget sets 是用來控制視窗的介面;例如,要把最小和最大化的控制鈕擺在哪以及它們外觀如何。如果你用 Gnome desktop,你正用的是 GTK+ widget set;如果你用 KDE,那麼你用的是 QT。我較喜歡 QT 視窗的介面,所以我選擇用 QT 來安裝 thefish。如果你仔細看 thefish 網站上的 screenshots,你會發現在 QT 選單上的按鈕和 GTK+ 版的按鈕是不一樣的。

一旦你裝好 thefish,你即擁有一個容易上手的介面,它可以用來改變 /etc/rc.conf 的參數並且每個參數都附有簡短描述,如果你還有另外安裝含有 rc.conf knobs 的程式,你也可以用 thefish 來增加它的參數。

Changing Your Mind (改變你的主意)

你是否曾在安裝 port 時看過它的選單選項而改變你的主意呢?例如,在安裝 QT 版的 thefish 以後,我有股強烈的慾望想要移除 QT 並安裝 GTK+ 版的 thefish。然後,當我下達 make 指令,它沒有秀出那有選項的選單,反而有行提示說我的設定檔已經儲存,而接著繼續安裝原先指定的 QT 版。

在我翻查了一下過後,我找到:

# more /var/db/ports/thefish/options

 This file generated by 'make config'.
# No user-servicable parts inside!
# Options for thefish-0.6.3
_OPTIONS_READ=thefish-0.6.3
WITHOUT_CONSOLE=true
WITHOUT_GTK=true
WITH_QT=true

我移除了那個檔案,且重新 make 一次,嘿嘿,就是它!我再次見到了那有選項的選單,我可以從那兒選擇安裝 GTK 版。在你自己的系統中下指令 ls /var/db/ports 即可看到哪個 ports 已儲存了些什麼選項。

RSS

我有一份我每天都會訪問的網站的名單像是 news, weather, articles, and blogs。我早已聽說過 RSS,但直到現在我才有空去嘗試各家的 RSS clients,我從 ports collection 搜到近一打左右的 RSS clients,每一個我試過的 client 我都會想要有吸引人且容易設定的 GUI 介面。從我的書中可明顯的知道我最後所選擇的是 /usr/ports/www/akregator

一些其它的 RSS clients 已附有一些內建的名單,儘管它很方面挑出一些常見的網站,例如 Slashdot 和 FreeBSDDiary,它這名單中的 URLs 有許多已過時了,所以我仍然需要到該網站找尋正確的 RSS URL。

在眾多的 clients 當中,akregator 是最容易操作且容易新增一個 feed,大部分的 clients 不會檢驗 URL 直到你嘗試下載一個 feed 的時候;如果輸入錯誤,或你沒有具體的指出完整的路徑給 RSS feed 的話,這個步驟即會失敗。

用 akregator 的話,我可以只輸入 slashdot.org 然後它會連接到 Slashdot 並找出其 feed,並儲存正確的 URL,就像 http://slashdot.org/index.rss,這個功能在我試過的所有網站中都適用,它實在極為簡單實用。

另外一點,我也有用 Firefox,它也支援 RSS feeds 如 live bookmarks,這連結有幾張 screenshots 且有解釋 RSS 的基本概念以及如何使用 live bookmarks,它也有連結到 del.icio.us 這網站你大概不會想逛,除非你真的閒到沒事可做。儘管 live bookmarks 整合至瀏覽器中是件很方便的事,但我還是較喜愛 akregator 的介面。

現在我成為 RSS 愛用者之一,如果生活中沒有了它,我不知道該如何活下去。只要有新的 日誌/文章 發佈、氣象改變(嘿,我並不時常往窗外看)亦或是 有新增或修改 port,我都可以隨時接到通知。

例如,我在 /usr/ports/sysutils/pkg_rmleaves 被核准的八分鐘後,我立即從 Freshports feed 得知這個消息,我曾使用過 /usr/ports/sysutils/pkg_cutleaves 來清除用不到的 ports,我被它的實用所迷住了,因為這個 port 才剛被核准,為了要安裝此 port,我即執行 cvsup 來抓取 sources。當我執行 pkg_rmleaves 時,它秀出一個核對清單的 dialog 選單,從這兒我可以很容易地挑選出哪些 ports 要移除的,這個 port 帶來了更方便的方法來管理那些不再使用的 ports。

Conclusion (結論)

我希望你也能有機會來玩弄並更了解你的 FreeBSD 系統。你是否曾經歷任何有趣的事,且它未曾被提出來討論過呢?如果有的話,請再此留下評論並述說你的心得,好讓其它人能從中受益。

Dru Lavigne 是在 Ottawa(渥太華,加拿大首都) 的 Marketbridge Technologies 裡擔任講師,另外也是 Open Protocol Resource 的維護者。


Read more FreeBSD Basics columns.

Return to the BSD DevCenter