━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一 頁 ] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Debian Reference (version 1) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 摘要 Debian Reference (version 1) 的目標在為 Debian 的使用者提供全面 性的指導,就如同一本安裝之後的使用手冊。本文中以大量的 shell 指 令範例來涵蓋系統管理的各個面向。包括的主題有: Debian 系統的基本 概念、系統安裝提示、 Debian 套件管理、 Debian 中的 Linux 核心、 系統微調、 gateway 建立、文字編輯器、 CVS 、程式設計、並為非開發 者說明 GnuPG 等,每個主題都包括基礎指南、實用技巧和其它相關的資 訊。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 版權聲明 Copyright (c) 2001–2008 by Osamu Aoki . Copyright (Chapter 2) (c) 1996–2001 by Software in the Public Interest. This document may be used under the terms of the GNU General Public License version 2 or higher. Permission is granted to make and distribute verbatim copies of this document provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this document under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this document into another language, under the above conditions for modified versions, except that this permission notice may be included in translations approved by the Free Software Foundation instead of in the original English. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 目錄 • 1 序言 □ 1.1 官方文件 □ 1.2 文件慣例 □ 1.3 scripts 範例 □ 1.4 基本設定 □ 1.5 Debian distributions 的基本概念 • 2 Debian 基礎 □ 2.1 Debian archives ☆ 2.1.1 目錄結構 ☆ 2.1.2 Debian distributions ☆ 2.1.3 stable 發行版本 ☆ 2.1.4 The testing distribution ☆ 2.1.5 The unstable distribution ☆ 2.1.6 The frozen distribution ☆ 2.1.7 Debian distribution 開發代號 (codenames) ☆ 2.1.8 已用過的開發代號 ☆ 2.1.9 開發代號的來源 ☆ 2.1.10 pool 目錄 ☆ 2.1.11 sid 的歷史記錄 ☆ 2.1.12 在 incoming 中的上傳套件 ☆ 2.1.13 找回舊套件 ☆ 2.1.14 Architecture sections ☆ 2.1.15 源碼 □ 2.2 Debian 套件管理系統 ☆ 2.2.1 Debian 套件概觀 ☆ 2.2.2 Debian 套件格式 ☆ 2.2.3 Debian 套件檔名的命名 ☆ 2.2.4 保留本機設定檔 ☆ 2.2.5 Debian maintenance scripts ☆ 2.2.6 套件的優先等級 ☆ 2.2.7 虛擬套件 ☆ 2.2.8 套件相依性 ☆ 2.2.9 何為“pre-depends” ☆ 2.2.10 套件狀態 ☆ 2.2.11 阻止套件升級 ☆ 2.2.12 原始碼套件 ☆ 2.2.13 編譯原始碼套件 ☆ 2.2.14 新建Debian套件 □ 2.3 Debian系統升級 ☆ 2.3.1 dpkg ☆ 2.3.2 APT ☆ 2.3.3 dselect ☆ 2.3.4 在運行中的系統升級 ☆ 2.3.5 下載和快取.deb檔案 ☆ 2.3.6 升級記錄 □ 2.4 Debian 開機程序 ☆ 2.4.1 init 程式 ☆ 2.4.2 Runlevels ☆ 2.4.3 自訂 RunLevel □ 2.5 多樣性支援 □ 2.6 國際化 □ 2.7 Debian和系統核心 ☆ 2.7.1 編譯非 Debian 核心的原碼 ☆ 2.7.2 自定核心建立工具 ☆ 2.7.3 模組處理措施 ☆ 2.7.4 移除舊版核心套件 • 3 Debian 系統安裝提示 □ 3.1 一般Linux安裝提示 ☆ 3.1.1 硬體相容性 ☆ 3.1.2 確定 PC 硬體和晶片組 ☆ 3.1.3 在 Debian 下確定 PC 硬體 ☆ 3.1.4 在其它 OS 下確定 PC 硬體 ☆ 3.1.5 Lilo 迷思 ☆ 3.1.6 GRUB ☆ 3.1.7 選擇開機軟碟 ☆ 3.1.8 安裝系統 ☆ 3.1.9 網路所需的主機名和IP地址 ☆ 3.1.10 使用者帳號 ☆ 3.1.11 建立檔案系統 ☆ 3.1.12 DRAM記憶體指導 ☆ 3.1.13 Swap空間 □ 3.2 Bash 設定 □ 3.3 滑鼠設定 ☆ 3.3.1 PS/2滑鼠 ☆ 3.3.2 USB 滑鼠 ☆ 3.3.3 觸控版(Touchpad) □ 3.4 NFS設定 □ 3.5 Samba設定 □ 3.6 印表機設定 ☆ 3.6.1 lpr/lpd ☆ 3.6.2 CUPS™ □ 3.7 桌上型電腦使用CRON □ 3.8 其它主機安裝提示 ☆ 3.8.1 初始化安裝完成後再裝些什麼 ☆ 3.8.2 模組 ☆ 3.8.3 CD-RW基本步驟 ☆ 3.8.4 大記憶體和關機自動斷電 ☆ 3.8.5 無法存取某此站台的怪問題 ☆ 3.8.6 PPP 撥號設定 ☆ 3.8.7 /etc/中的其它設定文件 • 4 Debian指南 □ 4.1 準備開始 ☆ 4.1.1 用 root 登入 shell 提示符號 ☆ 4.1.2 針對新手設定的最精簡環境 ☆ 4.1.3 增加帳號 ☆ 4.1.4 切換虛擬主控台 ☆ 4.1.5 如何關機 ☆ 4.1.6 把玩時間 □ 4.2 Midnight Commander (MC) ☆ 4.2.1 加強您的 MC ☆ 4.2.2 啟動 MC ☆ 4.2.3 MC 的檔案管理功能 ☆ 4.2.4 MC 的命令列技巧 ☆ 4.2.5 MC 的編輯器 ☆ 4.2.6 MC 的檢視器 ☆ 4.2.7 MC 自動啟動特性 ☆ 4.2.8 MC 的FTP虛擬檔案系統 □ 4.3 Unix-like 工作環境 ☆ 4.3.1 特殊的組合鍵 ☆ 4.3.2 基本的 Unix 指令 ☆ 4.3.3 The command execution ☆ 4.3.4 簡單的命令 ☆ 4.3.5 指令執行和環境變數 ☆ 4.3.6 指令收尋路徑 ☆ 4.3.7 命令列參數 ☆ 4.3.8 Shell wildcards ☆ 4.3.9 指令的傳回值 ☆ 4.3.10 標準的指令順序 ☆ 4.3.11 指令別名 □ 4.4 Unix-like 文字處理 ☆ 4.4.1 正規表示法 ☆ 4.4.2 置換表示法 □ 4.5 Unix-like 檔案系統 ☆ 4.5.1 Unix 檔案基礎 ☆ 4.5.2 Debian 的檔案系統 ☆ 4.5.3 檔案和目錄的存取權限 ☆ 4.5.4 時間戳記 ☆ 4.5.5 連結 ☆ 4.5.6 Named pipes (FIFOs) ☆ 4.5.7 Sockets ☆ 4.5.8 Device files ☆ 4.5.9 /proc 檔案系統 □ 4.6 X Window 系統 ☆ 4.6.1 啟動 X Window System ☆ 4.6.2 X Window 系統的選單功能 ☆ 4.6.3 X Window 系統的鍵盤順序 □ 4.7 後續的學習指南 • 5 將 distribution 升級至 stable, testing 或 unstable □ 5.1 從 Potato 到 Woody □ 5.2 升級前的準備 □ 5.3 升級 ☆ 5.3.1 使用 dselect ☆ 5.3.2 使用 apt-get • 6 Debian 套件管理系統 □ 6.1 介紹 ☆ 6.1.1 主要的套件管理工具 ☆ 6.1.2 方便的工具 □ 6.2 體驗 Debian 套件管理 ☆ 6.2.1 設定 APT ☆ 6.2.2 tasks 安裝 ☆ 6.2.3 aptitude ☆ 6.2.4 dselect ☆ 6.2.5 使用 APT 來維持 Debian 發行版本 ☆ 6.2.6 aptitude,apt-get和apt-cache 命令 □ 6.3 Debian 生存指令 ☆ 6.3.1 檢查 Debian 中的 bugs 並尋求幫助 ☆ 6.3.2 APT 升級的錯誤排除方法 ☆ 6.3.3 使用 dpkg 來救援 ☆ 6.3.4 回復套件的選取狀態的資料 ☆ 6.3.5 在 /var 崩潰後救援系統 ☆ 6.3.6 把套件安裝到一個無法開機的系統 ☆ 6.3.7 如果 dpkg 指令壞了怎麼辦 □ 6.4 Debian 神技之指令 ☆ 6.4.1 檔案中的資訊 ☆ 6.4.2 套件的資訊 ☆ 6.4.3 Unattended installation with APT ☆ 6.4.4 重新設定已安裝的套件 ☆ 6.4.5 移除和清除套件 ☆ 6.4.6 維持舊的套件 ☆ 6.4.7 stable/testing/unstable 混合系統 ☆ 6.4.8 刪除暫存的套件檔 ☆ 6.4.9 記錄/複製系統設定 ☆ 6.4.10 把套件引入 stable 系統 ☆ 6.4.11 本地端的套件 archive ☆ 6.4.12 轉換或安裝外來的二進位套件 ☆ 6.4.13 Automatically install command ☆ 6.4.14 驗證已安裝的套件檔 ☆ 6.4.15 sources.list 最佳化 □ 6.5 Debian 其它特別之處 ☆ 6.5.1 dpkg-divert 指令 ☆ 6.5.2 equivs 套件 ☆ 6.5.3 Alternative 指令 ☆ 6.5.4 Runlevel ☆ 6.5.5 停止 daemon 服務程式 • 7 Debian下的Linux核心 □ 7.1 核心(重新)編譯 ☆ 7.1.1 核心標頭檔 □ 7.2 透過 proc 檔案系統調整核心 ☆ 7.2.1 開啟太多檔案 ☆ 7.2.2 清除磁碟緩衝區時間 ☆ 7.2.3 慢速且記憶體小的機器 □ 7.3 核心 2.6 和 udev • 8 Debian技巧 □ 8.1 啟動系統 ☆ 8.1.1 「我忘了root密碼!」(1) ☆ 8.1.2 「我忘了root密碼!」(2) ☆ 8.1.3 無法啟動系統 ☆ 8.1.4 「我不想直接啟動到 X!」 ☆ 8.1.5 其它用於啟動提示的技巧 ☆ 8.1.6 設定 GRUB 啟動參數 □ 8.2 活動記錄 ☆ 8.2.1 記錄shell活動 ☆ 8.2.2 記錄 X 操作 □ 8.3 拷貝及建立子目錄 ☆ 8.3.1 拷貝整個子目錄的基本指令 ☆ 8.3.2 cp ☆ 8.3.3 tar ☆ 8.3.4 pax ☆ 8.3.5 cpio ☆ 8.3.6 afio □ 8.4 差異備份與資料同步 ☆ 8.4.1 使用rdiff進行差異備份 ☆ 8.4.2 使用pdumpfs進行每日備份 ☆ 8.4.3 使用 RCS 進行定期差異備份 □ 8.5 系統凍結恢復 ☆ 8.5.1 中止一個進程 ☆ 8.5.2 Alt-SysRq □ 8.6 記住這些可愛的小指令 ☆ 8.6.1 Pager ☆ 8.6.2 釋放記憶體 ☆ 8.6.3 設定時間(BIOS) ☆ 8.6.4 設定時間(NTP) ☆ 8.6.5 如何控制 console 的特色,例如螢幕保護程式 ☆ 8.6.6 查詢系統管理資料程式庫 ☆ 8.6.7 禁用聲音(響鈴) ☆ 8.6.8 控制台 (console) 上的錯誤訊息 ☆ 8.6.9 正確設定控制台 (console) 檔案類型 ☆ 8.6.10 恢復 console 到穩定狀態 ☆ 8.6.11 將 DOS 下的文字檔案轉換為Unix檔案類型 ☆ 8.6.12 利用 recode 來轉換文字檔 ☆ 8.6.13 Regular-expression substitution ☆ 8.6.14 使用 script 來編輯檔案 ☆ 8.6.15 提取來源檔案修改部分合併到更新包 ☆ 8.6.16 分割大檔案 ☆ 8.6.17 從文字檔格式的表格中抽取資料 ☆ 8.6.18 精巧的管道指令輔助script ☆ 8.6.19 查看每個檔案的輕巧 script ☆ 8.6.20 輕巧的 Perl Script ☆ 8.6.21 從網頁上取得文件或通信清單(mailing list) ☆ 8.6.22 列印網頁 ☆ 8.6.23 列印幫助頁面 ☆ 8.6.24 合併兩個Postscript或PDF檔案 ☆ 8.6.25 指令耗時 ☆ 8.6.26 nice指令 ☆ 8.6.27 日程安排(cron,at) ☆ 8.6.28 用screen來切換 console ☆ 8.6.29 網路測試基礎 ☆ 8.6.30 清理(flush)本地端的 Mail 佇列 ☆ 8.6.31 刪除已凍結的信件 ☆ 8.6.32 重新寄送mbox中的信件 ☆ 8.6.33 清理檔案內容 ☆ 8.6.34 空檔案 ☆ 8.6.35 chroot ☆ 8.6.36 怎樣檢查 hard links ☆ 8.6.37 mount硬碟上的映象檔案 ☆ 8.6.38 Samba ☆ 8.6.39 外來檔案系統的操作工具 □ 8.7 打錯字的情況 ☆ 8.7.1 rm -rf .* ☆ 8.7.2 rm /etc/passwd • 9 Debian 系統調整 □ 9.1 初始化系統的提示 ☆ 9.1.1 自定 init 命令稿 ☆ 9.1.2 設定系統登入日誌( system logging ) ☆ 9.1.3 硬體最佳化(Optimizing hardware) □ 9.2 存取限制 ( Restricting access ) ☆ 9.2.1 利用 PAM 來控制登入程序 ☆ 9.2.2 "為何 GNU su 不支援 wheel 群組" ☆ 9.2.3 Purposes of standard groups ☆ 9.2.4 更安全的工作環境 – sudo ☆ 9.2.5 服務的存取限制 ☆ 9.2.6 集中式的認證功能 – LDAP □ 9.3 燒錄器 ☆ 9.3.1 簡介 ☆ 9.3.2 方法一:modules + lilo ☆ 9.3.3 方法二:recompile the kernel ☆ 9.3.4 設定步驟 ☆ 9.3.5 光碟映像檔 (可開機) ☆ 9.3.6 寫錄到燒錄機上(R, RW): ☆ 9.3.7 產生一個光碟映像檔 ☆ 9.3.8 Debian 光碟映像檔 ☆ 9.3.9 備份您的資料到 CD-R ☆ 9.3.10 拷貝音樂光碟 ☆ 9.3.11 燒錄 DVD-R,DVD-RW 和 DVD+RW □ 9.4 X ☆ 9.4.1 X 套件 ☆ 9.4.2 X 的硬體偵測 ☆ 9.4.3 X 伺服器 ☆ 9.4.4 X clients ☆ 9.4.5 X sessions ☆ 9.4.6 在TCP/IP的環境中使用X Window ☆ 9.4.7 連接到遠端的X server – xhost ☆ 9.4.8 連線到遠端的 X server – ssh ☆ 9.4.9 X 終端機模擬器 – xterm ☆ 9.4.10 X 資源 ☆ 9.4.11 X 的按鍵和指標按鈕對應 ☆ 9.4.12 在 X 裡取得 root ☆ 9.4.13 在 X 的 TrueType 字型 ☆ 9.4.14 在 X 中的網頁瀏覽器 □ 9.5 SSH ☆ 9.5.1 SSH 的基礎 ☆ 9.5.2 Port forwarding for SMTP/POP3 tunneling ☆ 9.5.3 以少許密碼連線 – RSA ☆ 9.5.4 與不同的 SSH 用戶端程式溝通 ☆ 9.5.5 設定 ssh-agent ☆ 9.5.6 SSH 錯誤解決 □ 9.6 Mail ☆ 9.6.1 郵件傳送代理 (MTAs) ☆ 9.6.2 擷取信件l – Fetchmail ☆ 9.6.3 處理郵件 – Procmail ☆ 9.6.4 使用 crm114 來處理垃圾郵件 ☆ 9.6.5 閱讀郵件 – Mutt □ 9.7 Localization (l10n) ☆ 9.7.1 localization 的基礎 ☆ 9.7.2 Locales ☆ 9.7.3 locales 簡介 ☆ 9.7.4 啟動 locale 支援 ☆ 9.7.5 啟動特定的 locale ☆ 9.7.6 ISO 8601 日期格式 locale ☆ 9.7.7 US (ISO-8859-1) 的範例 ☆ 9.7.8 France with Euro sign (ISO-8859-15) ☆ 9.7.9 多語系的 X 視窗系統範例 ☆ 9.7.10 其他的 X 輸入法 ☆ 9.7.11 X 終端機 ☆ 9.7.12 支援 UTF-8 的 X 終端機 ☆ 9.7.13 支援 UTF-8 的 framebuffer 主控台 ☆ 9.7.14 locales 之外 □ 9.8 Multilingualization (m17n) • 10 網路設定 □ 10.1 IP 網路基礎 □ 10.2 低階網路設定 ☆ 10.2.1 低階網路設定 – 使用 ifconfig 和 route ☆ 10.2.2 低階網路設定 – ip ☆ 10.2.3 設定 Wi-Fi 裝置 ☆ 10.2.4 設定 PPP 裝置 □ 10.3 對主機命名 ☆ 10.3.1 主機名稱 ☆ 10.3.2 郵件名稱 □ 10.4 網域名稱服務 (DNS) ☆ 10.4.1 resolver ☆ 10.4.2 管理名稱伺服器的資訊 – resolvconf ☆ 10.4.3 快取已查閱的名稱 – nscd, dnsmasq, pdnsd, bind9 ☆ 10.4.4 提供網路名稱服務 – bind □ 10.5 安裝網路界面使用 DHCP □ 10.6 Debian 的高階網路設定 ☆ 10.6.1 高階網路設定--使用ifupdown ☆ 10.6.2 高階網路設定--ifupdow邏輯裝置定義 ☆ 10.6.3 神奇的網路設定方式 ☆ 10.6.4 利用 laptop-net 自動設定網路 ☆ 10.6.5 利用network-manager自動設定網路 □ 10.7 處理核心的非一致性裝置命名規則 □ 10.8 觸發(Triggering)網路設定 ☆ 10.8.1 在開機時觸發(trigging)網路設定 ☆ 10.8.2 觸發網路設定 – 使用hotplug ☆ 10.8.3 觸發網路設定 – 使用ifplugd ☆ 10.8.4 觸發網路設定 – 使用 waproamd ☆ 10.8.5 網路設定和 PCMCIA □ 10.9 多階段(Multi-stage)對應 □ 10.10 網路服務設定 □ 10.11 解決網路問題 □ 10.12 建立通訊閘路由器 ☆ 10.12.1 Netfilter 設定 ☆ 10.12.2 管理多重的網路連線 • 11 編輯器 □ 11.1 流行的編輯器 □ 11.2 應急的編輯器 □ 11.3 Emacs 和 Vim ☆ 11.3.1 Vim 指示 ☆ 11.3.2 Emacs 提示 ☆ 11.3.3 啟動編輯器 ☆ 11.3.4 Editor 指令摘要 (Emacs , Vim) ☆ 11.3.5 Vim 設定 ☆ 11.3.6 Ctags ☆ 11.3.7 將高亮度顯示的螢幕內容轉為 HTML 文件 ☆ 11.3.8 用 vim 分割螢幕 • 12 版本控制系統 □ 12.1 Concurrent Versions System (CVS) ☆ 12.1.1 安裝 CVS 伺服器 ☆ 12.1.2 CVS session 範例 ☆ 12.1.3 CVS 常見問題解決方法 ☆ 12.1.4 CVS 命令 □ 12.2 Subversion ☆ 12.2.1 安裝 Subversion 伺服器 ☆ 12.2.2 將 CVS 檔案庫轉移到 Subversion ☆ 12.2.3 Subversion 使用範例 • 13 程式設計 □ 13.1 從哪兒開始 □ 13.2 Shell ☆ 13.2.1 Bash – GNU 標準互動式 shell ☆ 13.2.2 POSIX shells ☆ 13.2.3 Shell 參數 ☆ 13.2.4 Shell 重導 (redirection) ☆ 13.2.5 Shell 條件式 ☆ 13.2.6 命令列操作 □ 13.3 Awk □ 13.4 Perl □ 13.5 Python □ 13.6 Make □ 13.7 C ☆ 13.7.1 簡單的 C 程式 (gcc) ☆ 13.7.2 除錯 ☆ 13.7.3 Flex – 更好的 Lex ☆ 13.7.4 Bison – 更好的 Yacc ☆ 13.7.5 Autoconf □ 13.8 Web □ 13.9 文件準備 ☆ 13.9.1 roff 排版 ☆ 13.9.2 SGML ☆ 13.9.3 TeX/LaTeX ☆ 13.9.4 文學編程 □ 13.10 包裝套件 ☆ 13.10.1 包裝一個單一二進位套件 ☆ 13.10.2 使用工具來進行包裝工作 • 14 GnuPG □ 14.1 安裝 GnuPG □ 14.2 使用 GnuPG □ 14.3 管理 GnuPG □ 14.4 在應用程式中使用 GnuPG ☆ 14.4.1 在 Mutt 中使用 GnuPG ☆ 14.4.2 在 Vim 中使用 GnuPG • 15 Debian 的技術支援 □ 15.1 參考資料 □ 15.2 查詞意 □ 15.3 查找流行的 Debian 套件 □ 15.4 Debian 錯誤追蹤系統 □ 15.5 郵件列表 □ 15.6 Internet Relay Chat (IRC) □ 15.7 搜尋引擎 □ 15.8 網站 • A 附錄 □ A.1 作者 □ A.2 保證 □ A.3 回饋 □ A.4 文件格式 □ A.5 Debian 迷宮 □ A.6 Debian 諺語 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一 頁 ] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Debian Reference (version 1) 第 1 章 - 序言 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Debian Reference (version 1) 的目標在為 Debian 的使用者提供全面 性的指導,就如同一本安裝之後的使用手冊。本文假設讀者願意閱讀 shell scripts ,並且在閱讀本文件前已具有 Unix-like 系統操作的基 礎技能。 我並不打算在文中解釋所有的細節,因為你可以在 manual 頁面、 info 頁面或 HOWTO 文件中獲得詳細的說明。我希望為讀者提供更直接實用的 資訊,但非全面性的說明。這些資訊包含了在文中列出實際的指令順序, 或是在 http://www.debian.org/doc/manuals/debian-reference/ examples/ 下的 script 範例。在執行命令之前必須先了解這些範例的內 容。這些指令的順序可能需要做些調整以符合你的系統。 文中大部分的技巧提示均引述自權威參考文獻,在參考資料, 第 15.1 節 中列出這些參考書目。 該文件的主旨為 "quick reference" 但內容已經擴充許多。儘管如此, Keep it short and simple (KISS) 是本文寫作的主導原則。 如果你在尋找系統緊急救援方面的幫助,請立刻閱讀 Debian 生存指令, 第 6.3 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1 官方文件 本文件最新官方文件是放在 Debian archives 中名為 debian-reference-en 的套件裡,你也可在 http://www.debian.org/doc /manuals/debian-reference/ 取得。 本文件最新開發版本位於 http://packages.qa.debian.org/d/ debian-reference.html 。該計畫是位於 http://www.debian.org/doc/ user-manuals#quick-reference ,在那兒可以下載本文件的純文字格式 , HTML 格式、 PDF 格式、 SGML 格式和 PostScript 格式。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2 文件慣例 "Debian Reference (version 1)" 透過簡短的 bash 命令提供許多資訊 。以下是其文件慣例: # root 身分所下的命令 $ 一般帳號身分所下命令 ... 命令動作描述 這些 shell 指令的範例使用 PS2=" "。和 bash 相關資訊請參閱 Bash – GNU 標準互動式 shell, 第 13.2.1 節。 參考: • bash(1) 表示 Unix manual 頁面資訊。 • info libc 表示 GNU TEXINFO 頁面資訊。 • The C Programming Language 表示書名。 • http://www.debian.org/doc/manuals/debian-reference/ 表示 URL 。 • file:///usr/share/doc/debian-reference-common/html/ 表示系統 中的檔案。 本文中使用下列的縮寫: • LDP: Linux Documentation Project (http://www.tldp.org/) • DDP: Debian Documentation Project (http://www.debian.org/doc /) 其他的縮寫在使用前就已經定義在文件內了。 本文中只提供了 LDP 文件的 URL。然而 Debian; 已經包裝了 LDP 的套 件,安裝好套件後,可以在 file:///usr/share/doc/HOWTO/ 取得這些檔 案。 參閱參考資料, 第 15.1 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3 scripts 範例 伴隨著本文(debian-reference-en)中的 Example scripts 的範例可以在 file:///usr/share/doc/debian-reference-common/html/套件中取得。 隱藏檔開頭的 "." 被轉換成底線 "_"。如果有幾個可選擇的範例的話, 會加上附加的延伸檔名 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.4 基本設定 如果你的系統是最小安裝且希望能善用本文的話,建議執行下面的命令以 安裝一些有幫助的文件。 # aptitude install mc less ssh vim kernel-package \ manpages-dev doc-debian doc-linux-text \ debian-policy developers-reference maint-guide \ apt-howto harden-doc debian-reference \ libpam-doc glibc-doc samba-doc exim4-doc-html ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5 Debian distributions 的基本概念 Debian 同時維護三個不同的發行版本:這些版本是: • stable:— 適用於架設產品化伺服器,該版本只會更新安全性修正的 套件。參閱 stable 發行版本, 第 2.1.3 節。 • testing:— 工作站的首選,該版本包含了較新版本的桌面軟體以及 測試。參閱 The testing distribution, 第 2.1.4 節。 • unstable: — Cutting edge。Debian 開發者的選擇。參閱 The unstable distribution, 第 2.1.5 節。 當unstable的軟體在第一個禮拜或更久沒有 release-critical(RC)的臭 蟲時,便會自動移動到testing。 請參閱 Debian distribution 開發代號 (codenames), 第 2.1.7 節來了 解 Debian 發行版本的代號。在Sarge發行(2005六月)之前,三個版本的 的代號為Woody(stable), Sarge(testing), Sid(unstable)。當 Sarge 發行後,三個版本代號為 Sarge, Etch 和 Sid。當 Etch 發行後, stable和unstable版本將變成Etch和Sid;一個新的testing版本(從stable 版本複製)將會產生並賦予一個新代號。 訂閱debian-devel-announce@lists.debian.org這個 mailing list 來取 得 Debian 的重大公告。請參閱 Debian archives, 第 2.1 節。 如果您想要使用的軟體版本比目前發行版本提供的還新,那麼您可以跟著 將 distribution 升級至 stable, testing 或 unstable, 第 5 章這一 節來升級系統的版本,或者您可只升級該軟體。如果升級該軟體不是那麼 方便或造成更多問題,您可以考慮把套件引入 stable 系統, 第 6.4.10 節這一節所提的 backport 套件。 testing版本會有延誤安裝安全性修正軟體的副作用。這樣的軟體是因為 上傳到unstable並移植到testing的這段期間所造成的延誤。 如果您混用不同的發行版本,例如 testing 和 stable 或 unstable 和 stable,您終究會安裝到testing或unstable版本的核心軟體,例如libc6 ,而這樣的行為無法保證系統無臭蟲存在。您必須特別小心。 使用testing 或 unstable的版本會提高遇到嚴重錯誤或臭蟲的機會。這 些危險可以利用配置雙系統(另一個系統為較穩定的 Debian)或者採用 chroot, 第 8.6.35 節這一節的chroot技巧來避免。接下來的章節會介紹 如何在不同的控制台同時執行不同的 Debian 版本。 在 Debian 基礎, 第 2 章中我們將講解有關 Debian distribution 的一 些基本概念之後,您會學到一些基礎知識來幫助您與最新的軟體快樂相處 ,並從 testing 和 unstable distributions 中獲益。心急的讀者可以 直接翻到 Debian 生存指令, 第 6.3 節。祝你升級愉快! ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一 頁 ] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Debian Reference (version 1) 第 2 章 - Debian 基礎 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 這一章節是針對非開發者說明 Debian 系統的原理。想要了解更細微詳盡 的訊息,請參閱: • Debian Policy Manual • Debian Developer's Reference • Debian New Maintainers' Guide 以上文件均列在參考資料, 第 15.1 節。 如果您在尋找比較淺顯易懂的 "how-to",請直接跳到 Debian 套件管理 系統, 第 6 章或其他相關的章節。 本節的寫作是基於 "Debian FAQ" 改寫,適合當作一般 Debian 系統管理 者的起步文件。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1 Debian archives ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1.1 目錄結構 每個被包裝好的 Debian 套件可以從其中一個 Debian mirror site 映射 站台透過 FTP 或 HTTP 取得。 以下的目錄皆可在 Debian 映射站台中的 debian 目錄找到: dists/: 該目錄存放 "distributions",主要是用來取得不同發行版本的套件 。有些舊套件和Contents-*.gz 和 Packages.gz 仍然存放在這裡。 pool/: 所有 Debian releases 及 pre-releases 的套件的新的實體位址。 tools/: 建立開機片,分割硬碟,解/壓縮檔案,啟動 Linux 的 DOS 工具程 式 doc/: 問與答,臭蟲回報等基本 Debian 文件。 indices/: Maintainers file 和 override 檔案。 project/: 大多為開發者的資源,例如: project/experimental/: 該目錄存放的套件都是開發中且為 alpha 測試階段。使用者不 應抓取這裡的套件,因為這些套件是危險且會對系統造成傷害。 project/orphaned/: 維護者不再維護且從發行版本移除的"孤兒"軟體放在該目錄。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1.2 Debian distributions stable distribution 套件的入口,Debian Lenny (5.0),被登記到 stable (符號鏈接指向 lenny/ 目錄): ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1.3 stable 發行版本 stable版本(Debian Lenny (5.0))的stable(連結到lenny/)目錄下紀錄了 不同的套件總件: • stable/main/:該目錄包含了最近發行的 Debian 系統的套件版本。 這些套件均遵循 Debian Free Software Guidelines (DFSG) (它位 於 file:///usr/share/doc/debian/social-contract.txt 需安裝 debian-doc),它們均可以自由使用和散布。 • stable/non-free/:經過 DFSG 的驗證而無法稱為 free 的套件皆放 在該目錄下。 例如,有些套件的許可證條款 (licenses) 禁止其用於商業的 distribution。有些雖可以再散布,但本身是共享套件而非自由套件 。 • stable/contrib/:這部份的軟體本身是 DFSG-free 但由於某些原因 使得必須依賴非 DFSG-free 的軟體才能安裝使用。 除了上述的目錄外,目前的實體套件存在的路徑為 pool 目錄(pool 目 錄, 第 2.1.10 節)。 現階段 stable 版本的臭蟲報告均列在 Stable Problems 網頁上。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1.4 The testing distribution testing distribution 的套件入口,Debian Squeeze,在 unstable 中 通過某種程度的測試後會登記到 testing (符號鏈接指向 squeeze/) 目 錄。目前的實體套件存在的路徑為 pool 目錄 (pool 目錄, 第 2.1.10 節)。在 testing/ 下同樣有 main , contrib ,和 non-free 子目錄, 它們的作用與 stable/ 中的一樣。 這些套件必須可以同時運行於所有架構並且能正常安裝。比起在 unstable 中的對應版本,它們必需有更少的 release-critical 錯誤。 這個種方式,我們將 testing 視為更接近發行的候選版本。有關 testing 機制的更多資訊請參閱 http://www.debian.org/devel/testing 。 testing distribution 的最新消息發佈在下列站台: • update excuses • testing problems • release-critical bugs • base system bugs • bugs in standard and task packages • other bugs and bug-squashing party notes ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1.5 The unstable distribution unstable distribution 的套件入口,總是被命名為 "Sid",被登記到 unstable (符號鏈接指向 sid/) 目錄,上傳至 Debian archive 的套件 在被移至 testing/ 前就一直放在這兒。目前的實體套件存在的路徑為 pool 目錄 (pool 目錄, 第 2.1.10 節)。在 unstable/ 下同樣有 main , contrib 和 non-free 子目錄,它們的作用與 stable/ 中相同。 unstable distribution 反映了系統最新的開發進展。歡迎廣大用戶使用 並測試這些套件,同時也提醒你們這些套件還不完善。使用 unstable distribution 的好處就是你可以獲得 Debian 軟體專案 — 的最新更新, 不過新東西也會出新問題,你得好壞兼收 :-) unstable distribution 的最新臭蟲報告見於 Unstable Problems 網頁 上。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1.6 The frozen distribution 當 testing distribution 足夠成熟了,它便成為 frozen,表示這個版 本不再加入新程式,只進行除錯工作。如果需要的話, dists 目錄中會 建立新的 testing 目錄樹,並給予新的開發代號。 frozen distribution 再經過幾個月的測試、更新、再凍結也稱之為“循環測試” 我們將 frozen distribution 中可能延遲套件或整個版本發佈的錯誤都 記錄在案,一但錯誤總數低於可接受的最大值,frozen distribution 就 晉升成 stable,而新版本發布了,前一個 stable distribution 成為過 期版 (obsolete) (並被移至相對應的目錄)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1.7 Debian distribution 開發代號 (codenames) 存在於 dists 目錄下的實體目錄名稱,例如 lenny/ 和 squeeze/ ,就 是 "開發代號 (codenames)"。當某個 Debian distribution 處於開發階 段,它並沒有版本號碼,取而代之的是開發代號。使用開發代號的目的在 於簡化建立 Debian distributions 映射站台的工作(例如 unstable的 實體目錄突然改名為 stable/ ,許多文件都沒必要再次下載)。 現在,stable 是一個指向 Lenny 的符號鏈接,testing 是指向 Squeeze 的符號鏈接。也就是說 Lenny 是當前的 stable distribution, Squeeze 是當前的 testing distribution。 unstable/ distribution 是指向 sid/ 的永久符號鏈接,即 unstable distribution 總是稱為 Sid 。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1.8 已用過的開發代號 已使用過的開發代號有: "Buzz" 用在 release 1.1 , "Rex" 用在 release 1.2 , "Bo" 用在releases 1.3.x , "Hamm" 用在 release 2.0 , "Slink" 用在 release 2.1 , "Potato" 用在 release 2.2 , "Woody" 用在 release 3.0 和 "Sarge" 用在 release 3.1 。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1.9 開發代號的來源 到目前為止它們均出自 Pixar 的電影玩具總動員 (Toy Story) 。 • Buzz (Buzz Lightyear) 是個太空人, • Rex 是隻暴龍, • Bo (Bo Peep) 是個放羊的女孩, • Hamm 是個小豬撲滿, • Slink (Slinky Dog) 是隻玩具狗, • Potato 當然就是 Potato Head 先生, • Woody 是個牛仔, • Sarge 是綠色塑膠玩具士兵的首領, • Etch (Etch-a-Sketch) 是玩具黑板, • Sid 是隔壁的男孩,那個玩具終結者。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1.10 pool 目錄 過去,套件均放在 dists 目錄下相應的 distribution 子目錄中。這種 做法產生了許多問題,例如映射站台進行新版本發佈時大量頻寬被消耗。 現在套件均依原本的套件名稱分類放進一個巨大的池子 "pool"。為了方 便管理, pool 目錄下按屬性再分類 (main , contrib ,和 non-free) ,分類下面再按原本的套件名稱的英文字首字母歸檔。這些目錄包含的文 件有:運行於各種系統架構的二進位套件,和生成這些二進制套件的源碼 套件。 你可以執行命令 apt-cache showsrc mypackagename ,查看 "Directory:" 行獲知每個套件的存放位置。例如:apache 套件存放在 pool/main/a/apache/ 。因為 lib* 的套件數量龐大,它們以特殊的方式 歸檔:例如,libpaper 套件存放在 pool/main/libp/libpaper/。 諸如 apt 等命令訪問的索引文件仍位於 dists 目錄中。 通常,你大可不必注意這些事情,新版的 apt 和舊版 dpkg-ftp 會自動 處理它們。想了解更多資訊,參閱 RFC: implementation of package pools。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1.11 sid 的歷史記錄 過去 Sid 並不存在, Debian archive 組織有一個主要的工作流程:它 假設當前 unstable 中建立了某個軟體開發項目,它會在整個 distribution 形成一個新的 stable/ 時發佈。但是因為很多軟體不是用 這個方式在開發,所以一但軟體要發佈時,就必需把整個目錄都搬移到 stable 下。因為在搬移目錄時會用掉大量的頻寬,所以這個流程就顯得 很不切實際。 經過幾年的研究摸索,archive 管理員提出一個方案,將未發佈的二進位 檔放在一個名為 sid 的特定目錄。當它們首次發布時,將會建立一個從 目前 stable 指向 sid 的鏈接,從現在起,他們會建立在unstable/的目 錄下。這個方案的確會使用者覺得困惑。 有了套件 pool 的幫助(參閱 pool 目錄, 第 2.1.10 節),在 woody distribution 開發過程中,二進位套件均按一定規範存放於 pool 目錄 ,而與 distribution 無關,當發佈新版本時,就不會再出現大量頻寬被 消耗的問題。(不過,開發過程還是會用掉大量頻寬)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1.12 在 incoming 中的上傳套件 上載的套件在經確認它們是由 Debian 開發者上載的後,會先存放於 http://incoming.debian.org/ (對於那些無維護者上載( Non-Maintainer Upload (NMU))的套件則放入 DELAYED 子目錄)。會有 一天,它們將從 incoming/ 移入 unstable/。 在緊急情況下,你可能會等不及它們移入 unstable/ 而直接從 incoming. 中下載安裝。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1.13 找回舊套件 最新的 Debian distribution 存放在任何一個 Debian mirror site 的 debian 目錄下。舊版本的 Debian 如 Slink 存放在 http:// archive.debian.org/ 或 Debian 映射站台的 debian-archive 目錄下。 舊的 testing 和 unstable 套件存放在 http://snapshot.debian.net/ 。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1.14 Architecture sections 在每個主要目錄樹下(dists/stable/main 、 dists/stable/contrib 、 dists/stable/non-free 、 dists/unstable/main 等)按晶片架構又分 了子目錄,每個子目錄中存放著在該晶片架構下編譯的二進位套件。 • binary-all/,存放與架構無關的套件,如 Perl script、純文件等 。 • binary-platform/,存放運行於該平台的二進制套件。 請注意,二進位套件不再存放在這些目錄中,而是放在最上層 pool 目錄 中。但為了向下相容,所以在目錄中仍保留有索引文件(Packages 和 Packages.gz)。 要獲得實際上的二進制架構技術支持,請參閱各發行版的發佈記錄( Release Notes)。它們放發佈記錄站台 stable 和 testing。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1.15 源碼 Debian 系統中包含了所有東西的源碼,不僅如此,許可證條款規定系統 中所有的程式必須和其源碼一起發行,或提供源碼。 通常源碼發佈在 source 目錄,該目錄同時處於所有特定平台的目錄中, 或是把更新的源碼放在 pool 目錄中(參閱 pool 目錄, 第 2.1.10 節) 。對於不太熟悉 Debian archive 目錄結構的用戶,想獲得源碼可以試試 apt-get source mypackagename 命令。 有些套件,如著名的 pine,由於許可證限制,只提供源碼套件。(最近 ,pine-tracker 套件提供了一個簡易的安裝方式。)參閱把套件引入 stable 系統, 第 6.4.10 節和包裝套件, 第 13.10 節教你如何手動編建 一個套件。 contrib 和 non-free 目錄中的套件可能不提供源碼,因為它們不算正式 Debian 系統的一部分。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2 Debian 套件管理系統 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2.1 Debian 套件概觀 套件通常包含了實現一系列相關命令或特性的所有必需的檔案。Debian 套件有兩種類型: • Binary packages(二進位套件),它包含可執行檔、設定檔、 man/ info 頁面、版權聲明和其它文件。這些套件以 Debian 特定的格式 散佈(參閱 Debian 套件格式, 第 2.2.2 節);它們通常使用 .deb 的延伸檔名來散佈。這種二進位套件可使用 Debian 工具 dpkg 解開 ,詳情見相關的 manual 頁面。 • Source packages(源碼套件),其中包含一個 .dsc 檔用於描述源 碼套件(包括下列檔案的名稱),一個 .orig.tar.gz 格式的檔案包 含了原本未經修改的源碼,以及一個 .diff.gz 文件包含了該套件為 了符合 Debian 格式對源碼所做的修改。dpkg-source 工具可用於包 裝和解開 Debian 源碼套件,詳情可參閱相關 manual 頁面。 使用套件管理系統來安裝套件時會用到由套件維護者建立的"相依資訊"。 這些相依資訊記錄在每個套件的 control 文件中。例如,包含 GNU C 編 譯器 (gcc) 的套件"相依"於包含連結器 (linker) 和組譯器 (assembler) 的 binutils套件。如果用戶試圖在沒有安裝 binutils 的 情況下安裝 gcc,套件管理系統(dpkg)就會顯示錯誤信息,告訴你需要 安裝 binutils,並停止安裝 gcc 。(不過,倔強的用戶可以對這個信息 視而不見,參閱 dpkg(8) )。)更多資訊請參閱下面的套件相依性, 第 2.2.8 節。 Debian 套件管理工具可用來: • 操作和管理套件或套件的局部內容, • 分割套件以助於那些使用有限容量的儲存工具如軟碟傳輸的用戶, • 幫助開發者打包套件, • 幫助用戶從遠端 Debian archive 站台安裝套件。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2.2 Debian 套件格式 Debian 的"套件",或是 Debian 保存壓縮檔 (archive) 包含了與特定程 式或一組相關的程式有關的可執行檔,函式庫,和文件。通常,Debian 保存壓縮檔是以 .deb 做為結尾。 [1] Debian 二進制套件的格式說明請參閱 deb(5) 的說明文件。由於 deb 的 內容是可變的(不同於各個主要 Debian 版本),所以請使用 dpkg-deb(1) 來控管 .deb 檔案。 至少從 Sarge 開始,所有的 Debian 套件檔皆可以透過傳統的 Unix 指 令 ar 和 tar 來控制,即使是 dpkg 不存在也沒關係。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2.3 Debian 套件檔名的命名 Debian 套件檔案名稱是採用以下的規則來命名的: foo_ver-rev_arch.deb 通常,foo 是套件名稱, ver 是原作釋出的版本 (the upstream version number), rev 是 Debian 釋出的版本,以及 arch 是目的硬體 架構。檔案是很容易更改,這是當然的喔。您可以執行以下指令來查詢該 套件檔案名稱的資訊: dpkg --info filename Debian 釋出版本是由 Debian 開發者決定或製作該套件的人。釋出版本 的改變就表示套件有些許的變化。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2.4 保留本機設定檔 能被系統管理者修改的檔案都放在 /etc/ 目錄下。再升級套件時, Debian 政策控制了所有的本機設定檔更新動作。 如果預設的設定檔是套件本身所有,則該檔案稱為 "conffile"。從套件 安裝後,如果 conffiles 曾被系統管理者修改過,則套件管理系統將不 會更新這些 conffiles,除非系統管理者願意。換句話說,如果 conffile 都未曾修改,則在升級套件的同時也會一併更新 conffile。對 大部份的情況來說,這是值得期許的,因為方便降低 conffiles 的變更 程度。 要列出套件的 conffiles,請執行下述的指令: dpkg --status package 檔案清單則列在 "Conffiles:" 這一行。 您可以閱讀 Debian Policy Manual 中的 "Configuration files" 部份 來取得更多資訊。(參閱參考資料, 第 15.1 節) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2.5 Debian maintenance scripts Debian maintenance scripts 是一些在安裝前後自動執行的 scripts。 連同 control 檔案,這些檔案是一個 Debian 檔案中的 "control" 段落 的部份之一。 各個檔案說明: preinst 該 script 在 Debian 壓縮檔 (.deb) 被解開前才被執行。許多的 "preinst" scripts 將會停止服務直到套件升級或安裝完成 (完成之 後,接下來就是 "postinst" script)。 postinst 該 script 用在 Debian 壓縮檔 (.deb) 被解開後完成設定套件的手 續。"postinst" 通常用來等待使用者輸入或提醒使用者,假如他接 受預設的設定值,記得重新設定套件。許多的 "postinst" scripts 負責在套件安裝或升級後重新啟動服務。 prerm 該 script 負責停止與套件關聯的daemon服務。它在刪除套件關聯的 文件之前執行。 postrm 該 script 負責修改套件連結或文件關聯或刪除由它建立的檔案。( 參閱虛擬套件, 第 2.2.7 節)。 目前所有的 control 檔案可以在 /var/lib/dpkg/info 目錄下找到。這 些檔案關聯於套件 foo 開頭名稱為 "foo" 以及擁有 "preinst", "postinst"...等延伸檔案。該目錄下的 foo.list 紀錄了套件 foo 安裝 到系統上的所有檔案。(要注意的是這些檔案的位置是 dpkg 內部運作之 一且易被改變的。) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2.6 套件的優先等級 每個Debian套件均被維護者指定了一個優先等級,作為套件管理系統的一 個輔助參數,優先等級有: • Required該級別套件是保証系統正常運作所必須的。 包含所有必要的系統修護工具。不要刪除這些套件,否則整個系統將 受到損壞,甚至無法使用dpkg恢復。只安裝 Required 級別套件的系 統不一定能滿足所有的用途,但它可以正常開機,讓系統管理者安裝 想要的軟體。 • Important 在任何 Unix-like 系統上均安裝有該級別套件。 系統若缺少這類套件,將會運行困難或不好操作。該級別套件並不包 括Emacs或X11或TeX或其它大型應用程式,它們只是一些實現系統底 層功能的程式。 • Standard 該級別套件是任何Linux系統的標準,它們組成一個小而精 的文字模式的系統。 系統預設安裝就包括了它們。"Standard" 級別套件不包括許多大型 應用程式,但它包括 Emacs(它比其它應用程式更低階)和Tex及 LaTeX的精巧版(不支援X)。 • Optional 該級別套件包括那些你可能想安裝的套件,即使對它們並 不熟悉或沒有特定的需求。 它們包括X11,TeX完整發布版和許多應用程式。 • Extra 該級別套件可能與其它較高級別套件衝突,僅當你知道其用途 時才會使用它們,或者它們有特定的需求,這些都使它們不適合定為 "Optional" 級別。 請注意套件描述中的 "Priority: required", "Section: base" and "Essential: yes" 這幾個的差異性。"Section: base" 是指該套件在建 立新系統時一定要安裝的。大部份這類型的套件皆有 "required" 級別 (Priority: required)或至少 "important" 級別(Priority: import)。 且多數被標示成 "Essential: yes"。"Essential: yes" 是指套件管理系 統在處理該套件時,必需加入額外的 "暴力" 參數,例如使用 dpkg 來移 除這類型的套件。舉個例子,libc6, mawk 和 makedev 皆為 "Priority: required" 和 "Section: base" 但並非 "Essential: yes"。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2.7 虛擬套件 虛擬套件是一個統稱,指的一組具有相近功能的套件。舉個例子,tin 和 trn 都是新聞閱讀軟體,當系統中某個程式需要使用新聞閱讀器工作時就 會產會一個關聯關係,它們必須滿足這個關聯,我們也稱之為它們提供了 一個叫做 news-reader 的 "虛擬套件"。 又像是,exim, sendmail 和 postfix都提供郵件傳輸代理的功能。也可 稱之為提供 mail-transport-agent 虛擬套件。如果安裝了其中之一,那 麼任何與 mail-transport-agent 有關聯的程式會因為這個虛擬套件的存 在而滿足相依性。 Debian 有個類似的機制,如果系統中提供相同的虛擬套件,系統管理員 可以指定一個為首選軟體。相關的指令是 update-alternatives,更詳細 的描述參閱 Alternative 指令, 第 6.5.3 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2.8 套件相依性 Debian套件管理系統有一套套件“依賴性”定義(用一個標誌)用來描述套 件需要安裝其他的軟體才能正常工作或作的更好。 • 套件 A依賴(depends)套件 B:要運行A必須安裝B。在有些情況下 ,A不僅依賴B,還要求B的特定版本。版本依賴通常有最低版限制,A 更依賴於B的最新版而非某個特定版本。 • 套件 A推薦(recommends)套件B:套件維護者認為所有用戶都不會 喜歡缺少某些功能的A,而這些功能需要B來提供。 • 套件 A建議(suggests)套件B:B中某些檔案與A的功能相關或加強A 的功能。 • 套件A與套件B衝突(conflicts):如果系統中安裝了B那麼A無法運 行。“Conflicts”常和“replaces”同時出現。 • 套件A替換(replaces)套件B:B安裝的文件被A中的文件移除和覆蓋 了。 • 套件A提供(provides)套件B:A中包含了B中的所有文件和功能。 各個保留字使用方法的更詳細的訊息請參閱Packaging Manual和the Policy Manual。 注意,aptitude和dselect可以對recommends和suggests類套件進行更細 部的控制,apt-get只會簡單的下載安裝depends類套件而不管recommends 和suggests>類套件。這兩個程式均正式使用APT作為後端程式。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2.9 何為“pre-depends” “pre-depends”是一種特殊關聯關系。對於一個普通套件,不管系統中是 否存在它的相依套件,dpkg都會將它解包。(解包主要指dpkg從套件中取 出安裝文件並放到正確的位置)。如果套件 Pre-Depends 到其他套件,則 這些被 Pre-Depends 的套件會要安裝比的套件先被解包和設定。 [2] 這 個相依性的用途是為了提供最小風險的升級。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2.10 套件狀態 套件有各種狀態:“unknown”,“install”,“remove”,“purge”和“hold” 。這些“希望” 標記描述了用戶打算如何操作這些套件(既可以使用 dselect的 "Select",也可以直接使用dpkg)。 它們的意思是: • unknown - 用戶並沒描述他想對套件進行什麼操作。 • install - 用戶希望對套件進行安裝或升級。 • remove - 用戶希望刪除套件,但不想刪除任何設定檔。 • purge - 用戶希望完全刪除套件,包括設定檔。 • hold - 用戶希望套件保持現狀,例如,用戶希望保持當前的版本, 當前的狀態,當前的一切。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2.11 阻止套件升級 有兩種方法阻止套件升級,使用dpkg,或者在Woody中使用APT。 使用dpkg,首先導出套件選擇列表: dpkg --get-selections \* > selections.txt 接著編輯文件selections.txt,修改想要保留的軟體所在的行,例如 libc6,則將: libc6 install 改成: libc6 hold 儲存設定,將它裝入dpkg資料庫: dpkg --set-selections < selections.txt 或者,如果你知道要保留的套件名稱,執行: echo libc6 hold | dpkg --set-selections 這個命令將在每個套件安裝過程中保持該套件不變。 使用dselect也可以達到同樣的效果。進入[S]elect畫面,找到想阻止其 升級的套件,按“=”鍵(或者“H”)。更改在你退出[S]elect畫面後立即生 效。 Woody中的APT系統有一個新機制來阻止套件升級,在下載升級檔進程中使 用Pin-Priority。參閱幫助頁面apt_preferences(5),或閱讀http:// www.debian.org/doc/manuals/apt-howto/或apt-howto套件。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2.12 原始碼套件 原始碼套件發布在source目錄中,既可以手動下載可以使用 apt-get source foo 來抓取它們(參閱apt-get(8)幫助頁面)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2.13 編譯原始碼套件 對於foo套件,從原始碼編譯需要foo_*.dsc、foo_*.tar.gz和 foo_*.diff.gz檔案(注意,對於由Debian開發的套件,沒有.diff.gz檔 案)。 當你得全了這些檔案,如果你這安裝了dpkg-dev套件,執行: $ dpkg-source -x foo_version-revision.dsc 它將套件解壓到一個名為foo-version的目錄。 使用下列命令建立二進制套件: $ cd foo-version $ su -c "apt-get update ; apt-get install fakeroot" $ dpkg-buildpackage -rfakeroot -us -uc 然後: # su -c "dpkg -i ../foo_version-revision_arch.deb" 安裝新編譯的套件。參閱把套件引入 stable 系統, 第 6.4.10 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2.14 新建Debian套件 建立新套件的詳細訊息,參閱New Maintainers' Guide,該文檔在 maint-guide套件中,或瀏覽http://www.debian.org/doc/manuals/ maint-guide/。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.3 Debian系統升級 Debian的設計目標之一就是提供一個一致的升級途徑和安全的升級過程, 我們致力於舊版本的平順升級,套件在升級過程中會將重要訊息提醒管理 者,並提供一個可能的解決方案。你也應該閱讀發布手記(Release Notes),該文檔描述了升級的詳細情況,它存在所有的Debian光碟中, 也可以通過網站訪問http://www.debian.org/releases/stable/ releasenotes或http://www.debian.org/releases/testing/ releasenotes。 Debian 套件管理系統, 第 6 章提供了升級的實用指南,本節只作基礎細 節的介紹。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.3.1 dpkg 它是操作套件檔案的主要工具;參閱dpkg(8)獲得完整訊息。 dpkg由幾個原始的輔助程式演化而來。 • dpkg-deb:控制.deb檔案。dpkg-deb(1) • dpkg-ftp:一個舊的套件取得命令。dpkg-ftp(1) • dpkg-mountable:一個舊的套件取得命令。dpkg-mountable(1) • dpkg-split:將大套件分割成小的檔案。dpkg-split(1) dpkg-ftp和dpkg-mountable已被新的APT系統取代。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.3.2 APT APT(the Advanced Packaging Tool)是Debian套件管理系統的進階介面 ,由幾個名字以 "apt-" 開頭的程式組成。apt-get、apt-cache和 apt-cdrom是處理套件的命令列工具,它們也是其它程式的後端程式,如 dselect和aptitude。現在,aptitude是目前首選的系統管理工具。 更多訊息,可安裝apt和aptitude套件後閱讀aptitude(8)、 apt-get(8) 、 apt-cache(8)、 apt-cdrom(8)、 apt.conf(5)、 sources.list(5)、 apt_preferences(5)。 另一個資源是APT HOWTO,如果安裝了apt-howto包,可在file:///usr/ share/doc/Debian/apt-howto/中找到它。 apt-get upgrade和apt-get dist-upgrade只抓取"Depends"類套件,它忽 略"Recommend"和"Suggests"類套件,不想這樣的話,可使用dselect。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.3.3 dselect 這個程式是Debian套件管理系統中以選單驅動的用戶介面。特別適用於首 次安裝和大幅度升級。參閱dselect, 第 6.2.4 節。 更多訊息,請參閱dselect Documentation for Beginners。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.3.4 在運行中的系統升級 Debian系統的核心(文件系統)支持替換使用中文件。當升級新套件時如 果該套件中包含daemon安裝,則會在該 RunLevel 設定好並重新啟動它們 。Debian系統不需要切換到 single-user 模式就能升級運行中的系統了 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.3.5 下載和快取.deb檔案 如果你手動下載套件到磁碟(這完全沒有必要,請閱讀上面有關dpkg-ftp 或APT的內容),當你完成套件安裝工作後,可以從系統中刪除.deb檔案 。 如果是使用APT,這些文件會快取在/var/cache/apt/archives/目錄中。 你可以在完成安裝後刪除它們(apt-get clean)或者將它們拷貝到另一 個機器的/var/cache/apt/archives/目錄中以備以後的安裝。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.3.6 升級記錄 dpkg會對套件的解開、配置、刪除、完全刪除進行記錄,但不能(目前是 這樣)記錄在套件操作的過程中終端機發生的事情。 最簡單的解決方法是在執行dpkg、dselect、apt-get等工具的對話中加入 script(1)程式。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4 Debian 開機程序 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4.1 init 程式 如同所有的Unix一樣,Debian啟動要執行init程式。init的設定檔(/etc /inittab)中指定的第一個執行 script 應該是/etc/init.d/rcS。 而接下來的程序就看 sysv-rc 或 file-rc 套件的安排。假設 sysv-rc 已安裝了(file-rc包含自己的 /etc/init.d/rcS script 並使用該檔案取 代 rc 目錄下的軟連結來控制那一個 RunLevel 該啟動那一個服務。) sysv-rc套件中的 /etc/init.d/rcS 會執行 /etc/rcS.d/ 所有的 script ,為了進行初使化的動作,例如檢查和掛載檔案系統,載入模組,啟動網 路服務,設定系統時間...等。然後,也會執行/etc/rc.boot/下的檔案 (除了以 '.' 開頭的檔案)也確保相容性。後者的目錄通常是留給系統管 理員使用的但並不是很贊成使用它。更多訊息參閱 Debian Policy 說明 文件中的初始化系統的提示, 第 9.1 節和System run levels and init.d scripts。 Debian 不使用 BSD 風格的 rc.local 目錄。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4.2 Runlevels 完成系統啟動進程後,init執行預設的 RunLevel。該 RunLevel 由/etc/ inittab中的id指定。Debian 使用 id=2。 Debian 使用以下的 RunLevel: • 1(單人模式 single-user mode), • 2(各種多人模式 multi-user modes), • 0(關閉系統), • 6(重啟系統)。 RunLevel 7, 8 和 9 也可以使用,但當套件安裝時,對應他們的 rc 目 錄並不會產生。 telinit可用來切換 RunLevel。 當切換 RunLevel 時,/etc/rcrunlevel.d/目錄下的 script 都會被執行 。這些 script 檔名的第一個字母決定該 script 執行的方式:script 以 K 開頭的會夾帶 stop 參數執行。script 以 S 開頭的會夾帶 start 參數執行;script 以字母順序來執行,所以 "stop" 會提早 "start" scripts 執行,而跟隨 K 或 S 後的兩個數字決定這些 script 執行順序 。 實際上,任意目錄/etc/rcrunlevel.d/中的script都是指向/etc/init.d/ 的軟連結。這些 scripts 都接受參數"restart" and "force-reload"; 後者是為了在系統開機後重新啟動服務或強迫他們重讀設定檔。 例如: # /etc/init.d/exim4 force-reload ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.4.3 自訂 RunLevel 自訂 RunLevel 是系統管理者工作。底下的建議適用大部份的服務。 Customizing runlevels is an advanced system administration task. The following advice holds for most services. 加入service到 RunLevel R中的方法是建立../init.d/service的軟連結 在/etc/rcR.d/Sxyservice。xy數字必須該套件安裝時被指定的數字。 更改這個軟連結從開頭是S成K就能取消這個服務,而所填的數字是 100 減去 xy。 改用 RunLevel 編輯器 sysv-rc-conf 或 ksysv會是比較方便的辦法。 移除特定 RunLevel 目錄下的服務的 S 軟連結也是可行的辦法。這樣作 並非取消該服務但卻變成一個"懸浮"狀態直到sysv-rcinit 系統有關連到 。更改 RunLevel 後,該服務並不會變成"啟動"或"關閉"的狀態,而是看 它先前的設定來決定,不論現在是運行中或不是。注意,雖然該服務現在 是 "懸浮" 狀態,但當它升級後就會啟動,不管在升級是否在運行或沒有 。這是眾所皆知的 Debian 系統的缺點。注意,您也需要保留該服務的 RunLevel 0和6 的 K軟連結。如果您刪除該服務所有的軟連結,再升級套 件後會回復所有的軟連結到預設的狀態。 強烈建議不要更動/etc/rcS.d/中的任何軟連結。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.5 多樣性支援 Debian提供幾種途徑,在不破壞系統的前提下滿足系統管理員各種要求。 • dpkg-divert,參閱dpkg-divert 指令, 第 6.5.1 節。 • equivs,參閱equivs 套件, 第 6.5.2 節。 • update-alternative,參閱Alternative 指令, 第 6.5.3 節。 • make-kpkg可以支援多種啟動載入器。參閱make-kpkg(1)和核心(重 新)編譯, 第 7.1 節。 /usr/local/目錄下的所有檔案均屬於系統管理者,Debian不會更動它們 。/etc下的大部分(或全部)檔案屬於conffiles, Debian不會在升級後 覆蓋它們,除非系統管理員明確要求覆蓋。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.6 國際化 Debian系統是國際化產品,不論是在主控台下還是在X下,它都提供多種 語言的字元顯示和輸入支援。許多檔案、說明文件以及系統訊息都被翻譯 成各種語言。在安裝過程中,Debian提示用戶選擇安裝語言(有時是當地 語言的變異)。 如果你安裝的系統提供的語言特性支援不能滿足你的需要,或者你要改變 當前語言或安裝別的鍵盤以適應你的語言,參閱Localization (l10n), 第 9.7 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7 Debian和系統核心 參閱 Debian下的Linux核心, 第 7 章。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7.1 編譯非 Debian 核心的原碼 首先你必須了解Debian policy並遵守標頭文件的規定。 Debian C libraries是依據核心標頭文件最新stable發布版建立的。 例如,Debian 1.2發布版使用版本號為5.4.13的頭文件。它基於所有 Linux FTP檔案站點發布的Linux核心源碼包,這些源碼包使用了最新的標 頭檔。跟隨核心源碼發布的核心標頭檔位於/usr/include/linux/include /。 如果你編譯某個程序所用的核心標頭檔案比libc6-dev提供的標頭檔案還 新,在編譯時你必須在命令行中加上-I/usr/src/linux/include/。這些 情況是存在的,例如,對於automounter daemon(amd)套件而言,當新 核心改變了對NFS的內部操作方式,amd需要知道這些改變。這時就需要引 用新的核心標頭檔案。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7.2 自定核心建立工具 對於希望(或必須)使用自定核心的用戶,推薦下載kernel-package套件 。該套件包含了建立核心套件的 script。有了它,新建Debian核心套件 只需在核心源碼的根目錄執行 # make-kpkg kernel_image 在核心源碼所在目錄的頂層,執行下述命令可獲得相關幫助 # make-kpkg --help 或閱讀make-kpkg(1)幫助手冊以及Debian下的Linux核心, 第 7 章。 如果所需的kernel-source-version(version代表核心版本號)套件不存 在,用戶就得從Linux檔案站點分別下載最新的(或需要的)核心源碼。 Debian的initrd啟動 script 需要一個專門的核心修正才能正確呼叫 initrd;參閱http://bugs.debian.org/149236。 有關kernel-package套件的用法詳述見於/usr/doc/kernel-package/ README.gz。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7.3 模組處理措施 Debian的modconf套件提供了一個shell script(/usr/sbin/modconf), 它可以用來自定核心模組設定。該 script 使用選單界面,用戶透過它給 出系統中可掛載設備驅動的有關細節,它再將這些細節訊息生成/etc/ modules.conf檔案(其中列出了別名aliases和其它參數,用於連接各種 模組),該設定檔案用來掛載/etc/modutils/目錄下和/etc/modules(其 中列出了需要在系統啟動時掛載的模組)目錄的相關模組。 新版的Configure.help提供建立自定核心的步驟和幫助,同樣,modconf 套件中也有一系列幫助檔案(位於/usr/share/modconf/目錄下),告訴 你如何對模組設定合適的參數。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7.4 移除舊版核心套件 kernel-image-NNN.prermscript 可用來檢查目前運行中的核心版本,以 確定是否與你要移除的核心版本相同。因此你可以使用如下命令刪除不想 要的核心套件: # dpkg --purge --force-remove-essential kernel-image-NNN (當然,要將NNN替換成你的核心版本和修訂版本。) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一 頁 ] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Debian Reference (version 1) 第 3 章 - Debian 系統安裝提示 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 安裝 Debian 的官方文件位於 http://www.debian.org/releases/stable / 和 http://www.debian.org/releases/stable/installmanual 。 文件的開發中版本位於 http://www.debian.org/releases/testing/ 和 http://www.debian.org/releases/testing/installmanual (處於寫作 中,有時可能無法存取)。 雖然此章節是以 Potato 安裝程式開始寫起,但大部分的內容皆已更新到 Woody 安裝程式且兩者是非常類似的。由於 Sarge 將會使用一套完全新 型的安裝程式,所以請將該文件當作 Sarge 安裝程式的另一個參考。也 請注意部份重要的套件已經更換檔名和安裝的優先等級。例如說,Sarge 已經將預設的 MTA exim 替換成 exim4以及 coreutils 也被其他軟體取 代。您需要做些安裝上調整。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1 一般Linux安裝提示 如果您在尋找精簡的 Debian 安裝光碟,請別忘記檢查 http:// www.debian.org/CD/netinst/。 使用 testing 或 unstable 版本會增加遇到嚴重軟體錯誤的風險。在機 器上安裝一個穩定版本的 Debian ,然後使用多重開機方案可有效控制風 險。或者使用更安全的 chroot 技巧,參閱 chroot, 第 8.6.35 節。後 者可實現同時在不同的主控台 (console) 執行多種版本的 Debian 。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1.1 硬體相容性 Linux 相容絕大多數 PC 硬體,而且幾乎可以安裝在任何系統架構上。對 我而言它的安裝過程和 Windwos 95/98/Me 一樣簡單。可相容的硬體清單 也在不斷增加。 如果你有一部筆記型電腦,可以去 Linux on Laptops 查找對應品牌和型 號的安裝指導。 我建議的桌上型硬體通常「比較保守」: • 用於工作目的時最好選 SCSI 而不選 IDE , IDE/ATAPI HD 適於個 人使用。 • IDE/ATAPI CD-ROM ( 或 CD-RW)。 • 最好選 PCI 而不選 ISA, 特別是網路卡 (NIC)。 • 選用便宜的 NIC 。 Tulip for PCI、NE2000 for ISA 都不錯。 • 初學 Linux 安裝時避免使用 PCMCIA (筆記型電腦)。 • 別使用 USB 鍵盤、滑鼠, ... 除非你想證明自己的實力。 如果你的機器特別慢,最好把硬碟插到另一個速度快些的機器上安裝。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1.2 確定 PC 硬體和晶片組 在安裝過程中,可能會要你確定電腦的硬體或晶片組等。有時了解這些資 訊並非易事,這裡有個方法: 打開機殼親自看看。 記下顯示卡晶片、網路卡晶片、串列介面和 IDE 埠週圍的晶片上印的數 字。 記下印在 PCI 和 ISA 插卡背面的名稱。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1.3 在 Debian 下確定 PC 硬體 在 Linux 系統中使用下列命令,可獲得機器當前使用的硬體及設定的相 關資訊。 $ pager /proc/pci $ pager /proc/interrupts $ pager /proc/ioports $ pager /proc/bus/usb/devices 在安裝過程中按 Alt-F2 進入控制台,可執行這些命令獲得幫助。 完成第一次安裝之後,接著安裝額外的套件,例如 pciutils,usbutils 和lshw,您就能取得更多系統的資訊。 $ lspci -v |pager $ lsusb -v |pager # lshw |pager 典型的中斷用途: • IRQ0: timer output (8254) • IRQ1: keyboard controller • IRQ2: cascade to IRQ8–IRQ15 on PC-AT • IRQ3: secondary serial port (io-port=0x2F8) (/dev/ttyS1) • IRQ4: primary serial port (io-port=0x3F8) (/dev/ttyS0) • IRQ5: free [sound card (SB16: io-port=0x220, DMA-low=1, DMA-high=5)] • IRQ6: floppy disk controller (io-port=0x3F0) (/dev/fd0, /dev /fd1) • IRQ7: parport (io-port=0x378) (/dev/lp0) • IRQ8: rtc • IRQ9: software interrupt (int 0x0A), redirect to IRQ2 • IRQ10: free [network interface card (NE2000: io-port=0x300)] • IRQ11: free [(SB16-SCSI: io-port=0x340, SB16-IDE: io-port= 0x1E8,0x3EE)] • IRQ12: PS/2 Mouse • IRQ13: free (was 80287 math coprocessor) • IRQ14: primary IDE controller (/dev/hda, /dev/hdb) • IRQ15: secondary IDE controller (/dev/hdc, /dev/hdd) 對於舊型的非 PnP ISA 介面卡可以從 BIOS 設定 IRQ5,IRQ10 和 IRQ11 為非 PnP 裝置。 對於 USB 設備,它們在 /proc/bus/usb/devices 中以 Cls=nn 的形式列 出: • Cls=00 : Unused • Cls=01 : Audio (speaker etc.) • Cls=02 : Communication (MODEM, NIC, ...) • Cls=03 : HID (Human Interface Device: KB, mouse, joystick) • Cls=07 : Printer • Cls=08 : Mass storage (FDD, CD/DVD drive, HDD, Flash, ...) • Cls=09 : Hub (USB hub) • Cls=255 : Vendor specific 如果設備類別 (device class) 不是 255 ,則 Linux 可支援該設備。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1.4 在其它 OS 下確定 PC 硬體 還可從其它作業系統中獲取硬體資訊: 安裝其它商業版 Linux。當前它們在硬體偵測方面做得比 Debian 好。 (不過一但 Sarge 中加入了 debian-installer ,情況就會改變。) 安裝 Windows 。用滑鼠右鍵點“我的電腦”在選單中選屬性/設備管理,可 獲得硬體設定資訊。記下所有的資源資訊如 IRQ 、 I/O 埠地址和 DMA 。有些舊的 ISA 卡可能要在 DOS 下設定。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1.5 Lilo 迷思 "安裝 Lilo 受限於 1024 磁柱(cylinders)。"大錯特錯! Debian Potato 之後使用的新版lilo支援lba32。只要主機板的BIOS版本 支援lba32,lilo就可以衝破 1024 磁柱的限制。 如果你使用的是舊版lilo.conf,請確定在你的lilo.conf檔案開頭的某處 加了一行命令指示系統讀取“lba32”。參閱file:///usr/share/doc/lilo/ Manual.txt.gz。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1.6 GRUB GNU HURD 計畫提供的新的系統開機工具 grub 可使用於Debian Woody系 統。 # apt-get update # apt-get install grub-doc # mc file:///usr/share/doc/grub-doc/html/ ... read contents # apt-get install grub # pager file:///usr/share/doc/grub/README.Debian.gz ... read it :) 要編輯 GRUB 選單,可編輯/boot/grub/menu.lst檔案。參閱設定 GRUB 啟動參數, 第 8.1.6 節獲取有關啟動參數設定資訊,它和lilo的設定方 法不太一樣。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1.7 選擇開機軟碟 Potato 時期,在進行普通桌上型電腦安裝時我喜歡用 IDEPCI 磁碟套件 。到了 Woody ,我愛用 bf2.4 啟動磁碟套件。兩者都使用同一版本的 boot-floppies 來建立開機軟碟。 如果你有一張 PCMCIA 網路卡,你就得使用標準啟動磁碟套件(使用的軟 碟數最多,但可用的驅動模組最全)並在PCMCIA設定中設定NIC;別在標 準網路設定對話框中設定網路卡。 對於特殊系統,需要建立一張自制救援磁碟,可以用別的機器上編譯好的 核心壓縮映射站台替換Debian救援磁碟中名為“linux”的核心映射站台。 詳情參閱救援磁碟中的readme.txt檔案。救援磁碟使用 MS-DOS 檔案系統 ,所以你可以在任何系統下編輯它。這將為那些使用特殊網路卡的人造福 。 到了 Sarge ,可用 debian-installer 或 pgi 來建立開機軟碟。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1.8 安裝系統 這方面的官方文件見於 http://www.debian.org/releases/stable/ installmanual 或 http://www.debian.org/releases/testing/ installmanual(處於寫作中,有時可能無法存取) 如果你是用boot-floppies安裝 testing 發行版本,你需要在安裝過程中 按 Alt-F2 打開一個控制台,編輯 /etc/apt/sources.list 檔案,將套 件下載入口從stable改為testing。 在安裝/dev/hda的mbr時,我喜歡將lilo裝在諸如/dev/hda3的位置,這樣 做可以減小開機資訊被覆蓋的風險。 下面是我在安裝過程中所做的選擇。 • MD5 passwords "yes" • shadow passwords "yes" • Install "advanced" (dselect **) and select □ 取消emacs (如果它被選中了)、nvi、tex、telnet、talk(d); □ 選上mc、vim、nano-tiny或elvis-tiny任選一個。 參閱 dselect, 第 6.2.4 節。即使你是個 Emacs 迷也不要在安 裝階段使用它, nano 可滿足你的需要。也不要安裝其它龐大的 套件如 TeX(Potato曾在此階段設定它為預設安裝)。參閱應急 的編輯器, 第 11.2 節了解此時安裝nano-tiny或elvis-tiny的 原因。 • 在每個套件安裝對話框中,回答所有的設定提問均=“y”(替換當前值 ) • exim:選第2項,因為我使用ISP的SMTP伺服器發送郵件。 有關dselect的更多資訊,參閱dselect, 第 6.2.4 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1.9 網路所需的主機名和IP地址 LAN設定的例子(C subnet: 192.168.1.0/24): Internet | +--- 外部ISP提供POP服務(使用fetchmail存取) | Access point ISP提供DHCP服務和SMTP中繼服務 | : Cable modem (Dialup) | : LAN網關外部埠: eth0 (IP由ISP的DHCP提供) 使用老式筆記型電腦(IBM Thinkpad, 486 DX2 50MHz, 20MB RAM) 執行Linux 2.4核心,提供ext3檔案系統支援 執行"ipmasq"套件(加入更好的修正,NAT 和 firewall ) 執行"dhcp-client"套件設定eth0 (覆蓋DNS的設定) 執行"dhcp"套件設定eth1 執行"exim"作為smarthost (mode 2) 執行"fetchmail"設一個較長的時間值(fallback) 執行"bind" 作為暫存名稱伺服(cache nameserver)器,在從LAN連入 Internet 時 作為認證網域名稱伺服器(authoritative nameserver),在從LAN中連入網中某個域時 執行 "ssh" 使用埠 22 和 8080 (從任何地點連接) 執行 "squid" 作為代理伺服器來快取 Debian 檔案庫(APT需要連接它) LAN通訊閘內部埠: eth1 (IP = 192.168.1.1, 固定) | +--- LAN Switch (100base T) ---+ | | LAN中一些固定IP客戶端 LAN中一些DHCP客戶端 (IP = 192.168.1.2-127, 固定) (IP = 192.168.1.128-200, 動態) 參閱網路設定, 第 10 章了解更多網路設定方面的資訊。參閱建立通訊閘 路由器, 第 10.12 節了解更多區域網路通訊閘設定方面的資訊。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1.10 使用者帳號 為了讓機器存取起來有一致的感覺,我的系統中開頭幾個帳號通常是不變 的。 我首先建立的使用者帳號名稱是“admin”(uid=100)。我透過該帳號轉發 所有的 root email。該帳號加入到adm使用者組(參閱"為何 GNU su 不 支援 wheel 群組", 第 9.2.2 節),這個使用者組為成員提供大量root 特權的命令,透過su或sudo命令就能使用PAM。詳情參閱增加帳號, 第 4.1.3 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1.11 建立檔案系統 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1.11.1 硬碟分區 我更喜歡將不同的目錄樹分別裝在不同的分區下,這樣可以將系統崩潰造 成的損失減到最小。例如: / == (/ + /boot + /bin + /sbin) == 50MB+ /tmp == 100MB+ /var == 100MB+ /home == 100MB+ /usr == 700MB+ with X /usr/local == 100MB /usr目錄的大小主要取決於 X Window 應用程式和文件的數目。如果只執 行控制台終端/usr/可以小到300MB,但如果你裝了大量Gnome應用程序 2GB-3GB也很正常。當/usr/增加得太大,將/usr/share/移到別的分區是 最有效的解救方法。對新的Linux2.4核心包,/目錄的大小可能要超過 200MB。 例如,當前我的 Internet 通訊閘(gateway)伺服器的硬碟使用情況如下 (由df -h命令輸出): Filesystem Size Used Avail Use% Mounted on /dev/hda3 300M 106M 179M 38% / /dev/hda7 100M 12M 82M 13% /home /dev/hda8 596M 53M 513M 10% /var /dev/hda6 100M 834k 94M 1% /var/lib/cvs /dev/hda9 596M 222M 343M 40% /usr /dev/hda10 596M 130M 436M 23% /var/cache/apt/archives /dev/hda11 1.5G 204M 1.2G 14% /var/spool/squid (有塊大空間留給/var/spool/squid作為下載套件時代理伺服器的緩衝區 ) 下面的fdisk -l輸出提供了一個分區分配方案: # fdisk -l /dev/hda # comment /dev/hda1 1 41 309928+ 6 FAT16 # DOS /dev/hda2 42 84 325080 83 Linux # (not used) /dev/hda3 * 85 126 317520 83 Linux # Main /dev/hda4 127 629 3802680 5 Extended /dev/hda5 127 143 128488+ 82 Linux swap /dev/hda6 144 157 105808+ 83 Linux /dev/hda7 158 171 105808+ 83 Linux /dev/hda8 172 253 619888+ 83 Linux /dev/hda9 254 335 619888+ 83 Linux /dev/hda10 336 417 619888+ 83 Linux /dev/hda11 418 629 1602688+ 83 Linux 裡面有一個未使用的分區。留作安裝第二個Linux或為增長的目錄樹提供 擴充餘地。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1.11.2 掛載檔案系統 下面的/etc/fstab文件可完成上述分區的掛載工作: # /etc/fstab: static filesystem information. # # filesystem mount point type options dump pass /dev/hda3 / ext2 defaults,errors=remount-ro 0 1 /dev/hda5 none swap sw 0 0 proc /proc proc defaults 0 0 /dev/fd0 /floppy auto defaults,user,noauto 0 0 /dev/cdrom /cdrom iso9660 defaults,ro,user,noauto 0 0 # # keep partitions separate /dev/hda7 /home ext2 defaults 0 2 /dev/hda8 /var ext2 defaults 0 2 /dev/hda6 /var/lib/cvs ext2 defaults 0 2 # noatime will speed up file access for read access /dev/hda9 /usr ext2 defaults,noatime 0 2 /dev/hda10 /var/cache/apt/archives ext2 defaults 0 2 # very big partition for proxy cache /dev/hda11 /var/spool/squid ext2 rw 0 2 # backup bootable DOS /dev/hda1 /mnt/dos vfat rw,noauto 0 0 # backup bootable Linux system (not done) /dev/hda2 /mnt/linux ext2 rw,noauto 0 0 # # nfs mounts mickey:/ /mnt/mickey nfs ro,noauto,intr 0 0 goofy:/ /mnt/goofy nfs ro,noauto,intr 0 0 # minnie:/ /mnt/minnie smbfs ro,soft,intr,credentials={filename} 0 2 對於NFS,我使用noauto、intr以及預設的hard項。如果有死連接,掛載 進程可能會死掉,可以使用 Ctrl-C 恢復。 對於使用Samba連接的Windows機器(smbfs),rw,auto,soft,intr是個好方 案,參閱Samba設定, 第 3.5 節。 對於軟驅,使用noauto,rw,sync,user,exec可以防止因退盤前未執行卸載 命令而造成文件損壞,但它會降低寫盤速度。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1.11.3 自動掛載 自動掛載的要點: • 加載vfat模組,從而/etc/auto.misc可使用-fstype=auto參數: # modprobe vfat # prior to the floppy access attempt ... or to automate this settings, # echo "vfat" >> /etc/modules ... 重啟系統。 • 設定/etc/auto.misc如下: floppy -fstype=auto,sync,nodev,nosuid,gid=100,umask=000 :/dev/fd0 ... 此處gid=100表示“users”。 • 在 /home/user中建立連結檔案cdrom和floppy,分別指向/var/ autofs/misc/cdrom和/var/autofs/misc/floppy。 • 將user加入“users”使用者組。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1.11.4 掛載NFS 外部Linux NFS伺服器(goofy)處於防火牆(gateway)之後。在我的LAN 內部,安全策略非常寬鬆,因為只有我自己一個使用者。為了存取NFS, NFS伺服器端要按如下方式加上/etc/exports: # /etc/exports: the access control list for filesystems which may be # exported to NFS clients. See exports(5). / (rw,no_root_squash) 除安裝和啟動NFS伺服器及客戶端的套件之外,這一步對啟動NFS伺服器也 是必要的。 我通常建立一個單獨的2GB分區,有時想玩玩別的Linux系統,就可以裝在 這兒。兩個系統可共享swap和/tmp分區。多分區方案很難滿足這種需求。 如果只想裝一個執行簡單控制台模式的系統,分區留500MB就綽綽有餘了 。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1.12 DRAM記憶體指導 下列是有關DRAM的簡單指導。 4MB: Linux核心執行的最低設定。 16MB: 控制台系統執行的最低設定。 32MB: 簡單X系統執行的最低設定。 64MB: GNOME/KDE系統執行最低設定。 128MB: 流暢執行GNOME/KDE。 256MB(或更多): 如果您預算充足,何不增加呢?DRAM 很便宜了。 使用啟動選項mem=4m(或lilo append="mem=4m")可以看看只用4MB記憶 體時系統如何執行。如果機器的BIOS比較舊且記憶體數大於64MB啟動時就 得加lilo啟動參數。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1.13 Swap空間 我按下面的指導原則來劃分 swap 空間: • 每個 swap 分割區均<128MB(使用舊版2.0核心),<2GB(使用最新 核心) • 總容量 =(機器記憶體大小的1到2倍)或(128MB到2GB之間) • 將它們分散於不同的硬碟,在/etc/fstab中可使用sw,pri=1選項掛載 它們。這樣可確保核心以RAID方式使用swap分區,最大限度地發揮 swap的性能。 • 如果可能,使用硬碟中間的磁區。 盡管你不一定真的需要,但為系統設定多一些 swap 空間(128MB)總要 好點,至少執行有記憶體漏洞的壞程序,系統會先慢下來而不是馬上死當 。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.2 Bash 設定 我按自己的喜好修改shell啟動 script: /etc/bash.bashrc 換成你的喜好 /etc/profile 保持發布版設定 ( \w -> \W) /etc/skel/.bashrc 換成你的喜好 /etc/skel/.profile 換成你的喜好 /etc/skel/.bash_profile 換成你的喜好 ~/.bashrc 換成你的喜好,會改變所有使用者的設定 ~/.profile 換成你的喜好,會改變所有使用者的設定 ~/.bash_profile 換成你的喜好,會改變所有使用者的設定 可以參考我提供的 script 範例。我喜歡系統看起來清清楚楚,所以將 umask設為002或022。 PATH依次由以下設定文件設定: /etc/login.defs - 在shell之前設定PATH /etc/profile (會呼叫/etc/bash.bashrc) ~/.bash_profile (會呼叫~/.bashrc) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3 滑鼠設定 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3.1 PS/2滑鼠 對於ATX主機板上使用PS/2介面的滑鼠,信號通路如下: mouse -> /dev/psaux -> gpm -> /dev/gpmdata = /dev/mouse -> X 這裡,建立指向/dev/gpmdata的符號鏈接(symlink)/dev/mouse,有助於 簡化設定操作。(例如,如果你決定不再使用 gpm服務,只需在移除gpm 服務,將符號鏈接/dev/mouse指向/dev/psaux。) 信號通路使得對鍵盤和滑鼠插拔操作,只要重啟gpm就可以生效,不必重 啟X! 處於gpm輸出與X輸入之間的信號通路協定有兩種執行方式,“ms3”(使用 Microsoft 3-button serial mouse協定)和“raw”(對於已連接的滑鼠使 用相同的協定),此處選擇的協定將決定X設定中使用的協定。 下面我將示範一下如何設定Logitech 3-button(傳統Unix風格的滑鼠) PS/2滑鼠: 如果新版X4不支援你的顯卡則需要使用舊版X3(如某些ATI 64位卡),請 設定/etc/X11/XF86Config而不是/etc/X11/XF86Config-4,下面的示例中 使用的是X4: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3.1.1 使用ms3協定方式 /etc/gpm.conf | /etc/X11/XF86Config-4 =========================+====================================== device=/dev/psaux | Section "InputDevice" responsiveness= | Identifier "Configured Mouse" repeat_type=ms3 | Driver "mouse" type=autops2 | Option "CorePointer" append="" | Option "Device" "/dev/mouse" sample_rate= | Option "Protocol" "IntelliMouse" | EndSection 如果使用這種方式,設定滑鼠類型只需編輯gpm.conf,X的設定將保持不 變。參閱我的 script 範例。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3.1.2 使用raw協定方式 /etc/gpm.conf | /etc/X11/XF86Config-4 =========================+====================================== device=/dev/psaux | Section "InputDevice" responsiveness= | Identifier "Configured Mouse" repeat_type=raw | Driver "mouse" type=autops2 | Option "CorePointer" append="" | Option "Device" "/dev/mouse" sample_rate= | Option "Protocol" "MouseManPlusPS/2" | EndSection 如果使用這種方式,設定滑鼠類型可編輯gpm.conf,同時也會改變X的設 定。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3.1.3 如何設定不同的滑鼠 gpm的設備類型autops2可以自動偵測出市面上大多數 PS/2 滑鼠。不幸的 是它也不是萬能的,而且Woody之前的發布版中並不包括它,這時可在 gpm.conf中試試ps2或者imps2。想看看gpm支援哪些類型的滑鼠可輸入: gpm -t help。參閱gpm(8)。 如果使用的是 2 鍵 PS/2 滑鼠,可選上 X 協定的Emulate3Buttons項。 協定中 2 鍵滑鼠和3鍵滑鼠的區別在於每次按下中間鍵時,是自動偵測還 是自動模擬信號傳給gpm。 對於在X協定使用raw協定方式, 第 3.3.1.2 節或不使用gpm,可使用下面 的設定: • IntelliMouse: 串列埠滑鼠(gpm轉換器使用"ms3") • PS/2: PS/2滑鼠(通常首先試試這項) • IMPS/2: 任何PS/2滑鼠(2鍵、3鍵或滾軸滑鼠) • MouseManPlusPS/2: Logitech PS/2滑鼠 • ... 更多資訊可瀏覽Mouse Support in XFree86。 典型的 Microsoft 滾軸滑鼠,有報導說這樣設定最好: /etc/gpm.conf | /etc/X11/XF86Config-4 =========================+====================================== device=/dev/psaux | Section "InputDevice" responsiveness= | Identifier "Configured Mouse" repeat_type=raw | Driver "mouse" type=autops2 | Option "CorePointer" append="" | Option "Device" "/dev/mouse" sample_rate= | Option "Protocol" "IMPS/2" | Option "Buttons" "5" | Option "ZAxisMapping" "4 5" | EndSection 對於某些最新的 Toshiba 超薄筆記型電腦,在 System-V init 腳本中設 定gpm先於PCMCIA啟動可防止系統鎖死。聽起來古怪不過是真的。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3.2 USB 滑鼠 請確定你設定了所有必需的 Kernel 選項,並在編譯核心時編入核心或模 組: • 在 "Input core support" 選單下: □ "Input core support" (CONFIG_INPUT, input.o), □ "Mouse support" (CONFIG_INPUT_MOUSEDEV, mousedev.o), • 在 "USB support" 選單下: □ "Support for USB" (CONFIG_USB, usbcore.o), □ "Preliminary USB device filesystem" (CONFIG_USB_DEVICEFS), □ "UHCI" or "OHCI" (CONFIG_USB_UHCI || CONFIG_USB_UHCI_ALT || CONFIG_USB_OHCI, usb-uhci.o || uhci.o || usb-ohci.o), □ "USB Human Interface Device (full HID) support" (CONFIG_USB_HID, hid.o), and □ "HID input layer support" (CONFIG_USB_HIDINPUT) 這邊的小寫字串為模組名稱。 如果你沒使用devfs,則需按下面的方法建立一個設備節點/dev/input/ mice: # cd /dev # mkdir input # mknod input/mice c 13 63 對於典型的滾軸USB滑鼠,設定如下: /etc/gpm.conf | /etc/X11/XF86Config-4 =========================+====================================== device=/dev/input/mice | Section "InputDevice" responsiveness= | Identifier "Generic Mouse" repeat_type=raw | Driver "mouse" type=autops2 | Option "SendCoreEvents" "true" append="" | Option "Device" "/dev/input/mice" sample_rate= | Option "Protocol" "IMPS/2" | Option "Buttons" "5" | Option "ZAxisMapping" "4 5" | EndSection 更多資訊可瀏覽the Linux USB Project。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3.3 觸控版(Touchpad) 盡管觸控版在筆記型電腦上預設是模擬 2 鍵 PS/2 滑鼠行為,仍可從 tpconfig套件獲得對這類設備的完全操控。例如在/etc/default/ tpconfig中設定OPTIONS="--tapmode=0"可取消討厭的“click by tap”行 為。按如下方法設定/etc/gpm.conf可以控制台下使用觸控版和 USB 外接 滑鼠。 device=/dev/psaux responsiveness= repeat_type=ms3 type=autops2 append="-M -m /dev/input/mice -t autops2" sample_rate= ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.4 NFS設定 安裝NFS要設定/etc/exports。 # apt-get install nfs-kernel-server # echo "/ *.domainname-for-lan-hosts(rw,no_root_squash,nohide)" \ >> /etc/exports 詳情見我的 script 範例. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.5 Samba設定 參考資料: • http://www.samba.org/ • samba-doc package 以“share”方式安裝 Samba 比較容易,因為安裝過程會建立WfW-type共享 驅動器。但最好使用“user”模式來設定它。 可以用debconf或vi來設定Samba: # dpkg-reconfigure --priority=low samba # in Woody # vi /etc/samba/smb.conf 詳情參閱我的 script 範例. 可透過smbpasswd向 smbpasswd 檔案新增一個新使用者: $ su -c "smbpasswd -a username" 確保使用的加密密碼有恰當的相容性。 按下表中相應的值設定os level(數字越大,伺服器的優先級越高): 0: Samba with a loose attitude (will never become a master browser) 1: WfW 3.1, Win95, Win98, Win/Me? 16: Win NT WS 3.51 17: Win NT WS 4.0 32: Win NT SVR 3.51 33: Win NT SVR 4.0 255: Samba with mighty power 確認使用者是目錄所屬組的成員,並且對目錄賦予了執行權限。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.6 印表機設定 傳統列印方法是lpr/lpd。新的 CUPS 系統(Common UNIX Pinting System)提供了另一方法PDQ,詳情參閱Linux Printing HOWTO。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.6.1 lpr/lpd For the lpr/lpd的列印緩衝池(type spoolers)(lpr、lprng和gnulpr ),如果它們連接的是PostScript或text-only印表機(最基本的印表機 )可按如下方式設定/etc/printcap: lp|alias:\ :sd=/var/spool/lpd/lp:\ :mx#0:\ :sh:\ :lp=/dev/lp0: 上述各行的意思是: • Head line: lp – spool名稱, alias = alias • mx#0 – 不限最大文件尺寸 • sh – 不列印頁眉 • lp=/dev/lp0 – 本地機印機,或port@host遠程印表機 如果連接的是台PostScript印表機,上述設定就夠用了。如果是Windows 機器透過Samba列印,上述設定也適用於任何Windows支援的印表機(不支 援雙向通信)。你必須在Windows環境中對印表機做相應的設定。 如果你沒有PostScript印表機,就得用gs安裝過濾系統。有很多自動設定 工具可用於設定/etc/printcap,可選擇下列任何一組: • gnulpr、(lpr-ppd)和printtool— 我就是用這種 • lpr和apsfilter • lpr和magicfilter • lprng和lprngtool • lprng和apsfilter • lprng和magicfilter 想執行GUI設定工具如printtool,需要 root 權限,參閱在 X 裡取得 root, 第 9.4.12 節。printtool可建立列印緩衝池,它使用gs模擬 PostScript印表機,所以要使用PostScript列印驅動來存取它們。在 Windows端,“Apple LaserWriter”是標準件。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.6.2 CUPS™ 安裝 Common UNIX Printing System (or CUPS™) 所有的套件,請開啟 aptitude 並選擇: "Tasks" -> "Servers" -> "Print Server". (Sarge) 為了最好的結果,您必須設定 aptitude 如下: "F10" -> "Options" -> "Dependency handling" -> "[X] Install Recommended packages automatically". KDE 和 Gnome 桌面系統提供了簡易的印表機設定。如果有安裝 swat,您 也能使用瀏覽器來設定: $ mybrowser http://localhost:631 舉個例子,將你的印表機連接到可存取印表機清單中: • 在主頁面上點擊“Printers”,然後點“Add Printer”, • 輸入使用者名和密碼,進入“root”, • 按提示新增印表機, • 返回“Printers”頁面,點選“Configure Printer”, • 設定列印紙尺寸、解析度和其它參數。 更多資訊可瀏覽http://localhost:631/documentation.html和http:// www.cups.org/cups-help.html。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.7 桌上型電腦使用CRON Vixiecron預設會自動安裝,它可用來排定工作。如果你的電腦不是24/7 開機的話,並無多大的用處。對桌上型來說,你或許會安裝anacron來取 代cron以解決這樣的問題。 fcron也是另一套值得推薦的軟體 參閱日程安排(cron,at), 第 8.6.27 節的說明來設定 CRON 工作。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.8 其它主機安裝提示 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.8.1 初始化安裝完成後再裝些什麼 到現在,你已經擁有一個小巧但功能頗強的Debian。接下來,可以安裝那 些較大的套件了。 在此,你最想做的事就是選擇鐘愛的編輯器和aptitude需要的程序。你可 以同時安裝Emacs的多個變種。參閱流行的編輯器, 第 11.1 節。 然後,再次執行aptitude,選擇(幾乎)所有在"Tasks" --> "End-user"下 的套件以取得完整的使用者導向的系統。我通常會編輯/etc/inittab簡化 關機步驟。 ... # What to do when CTRL-ALT-DEL is pressed. ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -h now ... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.8.2 模組 在初始安裝期間可進行設備驅動模組設定。以後還可使用modconf進行設 定,它是基於選單介面的工具,可用來設定那些在初始安裝時未曾設定的 模組或完成新核心安裝後的設定工作。 所有預加載(preloading)模組的名稱要加入到/etc/modules清單。也可 以使用lsmod和depmod進行手工操控。 如果你沒打開IP偽裝(FTP等),別忘了在/etc/modules中加上幾行。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.8.3 CD-RW基本步驟 使用 IDE CD-RW 和 kernel 2.4 的話,請編輯下列文件: /etc/lilo.conf (新增append="hdc=ide-scsi ignore=hdc", 執行 lilo 啟動) /dev/cdrom (建立鏈接 # cd /dev; ln -sf scd0 cdrom ) /etc/modules (add "ide-scsi"和"sg"。如果需要可再加上"sr"。) 詳情參閱燒錄器, 第 9.3 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.8.4 大記憶體和關機自動斷電 編輯/etc/lilo.conf,設定啟動提示參數如下,實現識別大記憶體(適用 於2.2版核心)和關機自動斷電(適用於APM): append="mem=128M apm=on apm=power-off noapic" 執行lilo完成上述設定。對稱多處理器核心(SMP-kernel)需要apm= power-off和noapic才能避免我那堆糟糕的 SMP 硬體出問題。系統啟動時 ,在啟動提示符後直接輸入這些參數效果也一樣。參閱其它用於啟動提示 的技巧, 第 8.1.5 節。 在 Debian 的2.4版核心中 APM 是作為模組編譯的,對於這種情況,可在 系統啟動後執行# insmod apm power_off=1或設定/etc/modules: # echo "apm power_off=1" >>/etc/modules 還可以這樣:編譯新版核心時加入 ACPI 支援可達到同樣的效果,而且這 種方式更適合SMP(只有較新的主機板才支援ACPI)。對於較新的主機板 2.4版核心可以直接檢測到大記憶體。 CONFIG_PM=y CONFIG_ACPI=y ... CONFIG_ACPI_BUSMGR=m CONFIG_ACPI_SYS=m 在/etc/modules中按如下順序新增參數: ospm_busmgr ospm_system 或者重新編譯核心,在設定時將上述核心選項均設為“y”。總之,有了 ACPI支援就不再需要任何啟動提示參數。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.8.5 無法存取某此站台的怪問題 新的Linux核心預設開啟ECN,對於某些使用劣質路由器的站台,會出現無 法存取的問題。檢查ECN狀態可使用: # cat /proc/sys/net/ipv4/tcp_ecn ... 或 # sysctl net.ipv4.tcp_ecn 將它關閉: # echo "0" > /proc/sys/net/ipv4/tcp_ecn ... 或 # sysctl -w net.ipv4.tcp_ecn=0 每次啟動時禁止TCP ECN,可編輯/etc/sysctl.conf,加上: net.ipv4.tcp_ecn = 0 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.8.6 PPP 撥號設定 安裝pppconfig套件,設定 PPP 撥號存取。 # apt-get install pppconfig # pppconfig ... 依照提示設定 PPP 撥號 # adduser user_name dip ... 允許user_name進行 PPP 撥號存取 使用者(user_name)進行 PPP 撥號存取: $ pon ISP_name # 開始 PPP 存取,接通你的ISP ... enjoy the Internet $ poff ISP_name # 停止 PPP 存取, ISP_name可選 詳情參閱設定 PPP 裝置, 第 10.2.4 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.8.7 /etc/中的其它設定文件 Debian 標準安裝不包含 /etc/cron.deny 文件,想新增可拷貝 /etc/ at.deny。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一 頁 ] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Debian Reference (version 1) 第 4 章 - Debian指南 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 本章為那些初涉 Debian 世界的新手指出了基本方向。如果你接觸 Unix-like 系統已有一段時間,就能了解我底下說明的部份。請將此文件 當成實戰測試吧。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.1 準備開始 從安裝 Debian 到電腦之後,您需要學會一些技巧才能活用它。讓我們給 您一些簡單的練習。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.1.1 用 root 登入 shell 提示符號 在開機的過程中,您會看到圖形或文字介面的登入畫面(基於安裝的套件) 。為了簡化說明,如果您看到的是圖形登入介面,請按下 Ctrl-Alt-F1 [ 3] 切換到文字介面的登入模式。 假設您的主機名稱為 foo,那麼登入提示符號則類似: foo login: 輸入 root,按下 Enter 後並輸入安裝過程設定的密碼。Debian 系統跟 Unix 一樣,密碼是分辨大小寫的。接下來系統會出現一個問候訊息並留 下 root 提示符號等您輸入指令。 [4] foo login: root Password: Last login: Sun Oct 26 19:04:09 2003 on tty3 Linux foo 2.4.22-1-686 #6 Sat Oct 4 14:09:08 EST 2003 i686 GNU/Linux Most of the programs included with the Debian GNU/Linux system are freely redistributable; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. root@foo:root# 透過 root 命令提示符號,您就準備進行系統管理了。root 帳號稱為超 級使用者(superuser)或特權使用者(privileged user)。使用 root 帳號 ,您可以達成: • 讀、寫和移除任何系統上的檔案而不需考慮權限 • 能夠設定系統上任何檔案的擁有者和權限 • 設定任何系統非特權使用者的密碼 • 登入到任何帳號而無需輸入密碼 分享 root 密碼來取得 root 帳號是非常不好的方法。請使用如 sudo(8) 的軟體就是一個較好的方式來分享管理者權限。 先登入非特權帳號再進行管理動作是值得學習的 Unix 習慣。等需要 root 權限時再使用 sudo,super或su -c來取得特定的功能。請參閱更安 全的工作環境 – sudo, 第 9.2.4 節。 [5] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.1.2 針對新手設定的最精簡環境 我認為學習電腦系統就像是學習一套外國語言。雖然學習指南很有幫助, 但您需要去練習並使用這些工具。這個情況下,我建議額外安裝一些套件 來輔助,例如 mc, vim, lynx, doc-linux-text 和 debian-policy。 [6 ] # apt-get update ... # apt-get install mc vim lynx doc-linux-text debian-policy ... 如果您已經安裝這些套件,則執行上述指令就不會重新安裝。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.1.3 增加帳號 系統安裝完畢,通常會添加一個普通用戶帳號,而該帳號會收到寄給 root 的信件。 [7] 如果您不想使用這個特殊帳號來練習以下的指令則必 須建立一個新的使用者帳號。 如果新的帳號為 penguin,請輸入: root@foo:root# adduser penguin ... 回答完所有的問題 就會建立該帳號了。 [8] 在進行下面的步驟前,我們先學習一些基礎。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.1.4 切換虛擬主控台 在未調整過的 Debian 系統中,總共有六個獨立的虛擬終端機。也就是說 您可以在文字介面的主控台中使用六個可切換的 VT-100 終端機。按下左 邊的 Alt 加上 F1–F6 可以切換到另外一個終端機。每一個虛擬終端機允 許不同的帳號登入且不受其他終端機影響。多人環境是 Unix 偉大的設計 且容易讓人上癮。 如果您不小心在執行 X 視窗系統的機器按下 Alt-F7,則主控台螢幕會切 換到視窗介面,按下 Ctrl-Alt-F1 就能回到文字主控台。試著練習切換 不同的主控台並跳回到原來這一個來習慣這些特性。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.1.5 如何關機 和其他現代的作業系統一樣,系統檔案會快取到記憶體中,在切斷電源之 前 Debian 系統需要完成特定的關機程序才能維持檔案的完整性。使用 root 提示命令列來執行以下的關機指令: # shutdown -h now 這是多用戶模式下的關機命令。如果是單一使用者模式,請執行以下的命 令: # poweroff -i -f 您也能按下 Ctrl-Alt-Delete 來關機。 [9] 等待螢幕上顯示 "System halted" 之後切斷電源。如果在BIOS和Linux中 開啟了 APM 或 ACPI ,系統會自動切斷電源。詳情參閱大記憶體和關機 自動斷電, 第 3.8.4 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.1.6 把玩時間 現在您可以大膽地使用 Debian 系統而不用擔心任何危險,因為您使用的 是非特權帳號:penguin。 [10] 我們來試著登入 penguin,如果您在 root 命令提示列,請按下 Ctrl-D [11] 結束 root 的動作回到登入提示符號。現在請輸入新建立的帳號 penguin 及密碼。 [12] 您就會顯示以下的提示命令列。 penguin@foo:penguin$ 從現在開始,底下的範皆使用簡化的命令提示列來說明。我將會使用 • # : root 命令提示列 • $ : 非特權帳號的命令提示列 我們將以最簡單的方式 Midnight Commander (MC), 第 4.2 節和適當的 方法 Unix-like 工作環境, 第 4.3 節來學習 Debian 系統。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.2 Midnight Commander (MC) Midnight Commander (MC)是 Linux 主控台和其它終端環境中的 GNU "瑞 士軍刀"。對於新手來說,選單式的控制會比傳統 Unix 指令好上手多了 。 使用這個指令來流覽 Debian 系統。這是最好的方式來學習。請使用方向 鍵和 Enter 鍵來流覽主要的檔案系統。 • /etc 以及子目錄。 • /var/log 以及子目錄。 • /usr/share/doc 以及子目錄。 • /sbin 和 /bin ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.2.1 加強您的 MC 為了使 MC 在離開時改變工作目錄,您需要修改 ~/.bashrc (或 /etc/ bash.bashrc, 由 .bashrc 呼叫),使用 -P 選項,就像在說明頁面 mc (1) 中的敘述。 [13] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.2.2 啟動 MC $ mc 在 MC 中可使用選單來完成所有的檔案操作,只需要使用者小小的嚐試一 下就行了。按下 F1 顯示說明視窗。您可以搭配方向鍵和功能鍵來使用 MC。 [14] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.2.3 MC 的檔案管理功能 預設狀態是兩個目錄面板列出檔案列表。另一種好用的模式是將右邊視窗 設定為 "information" ,以查看檔案存取權限等資訊。下面是一些基本 的按鍵。如果 gpm daemon 在運作的話,你還可以使用滑鼠。 (在 MC 中 進行剪下和貼上操作時別忘了按下 shift 鍵。) • F1: 說明選單 • F3: 內建的檔案檢視器 • F4: 內建的編輯器 • F9: 啟動下拉選單 • F10: 離開 Midnight Commander • Tab: 在兩個視窗間移動 • Insert: 標記檔案以方便多檔案的操作,如複製 • Del: 刪除檔案 (小心—以 MC 設定為安全刪除模式。) • 方向鍵:就是方向鍵 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.2.4 MC 的命令列技巧 • 任何 cd 命令會改變所選畫面的目錄。 • Ctrl-Enter 或 Alt-Enter 會將檔案名稱複製到命令列上。配合 cp 或 mv 命令使用來做命令列的編輯。 • Alt-Tab 會顯示出 shell 的檔名擴展以供選擇。 • 可指定 MC 兩個目錄視窗的起始目錄;例如 mc /etc /root 。 • Esc + 數字鍵 == Fn (也就是說, Esc + `1' = F1 等等。 Esc + `0' = F10) • Esc 鍵 == Alt 鍵 (= Meta , M-) ;也就是說,輸入 Esc + `c' 就等於 Alt-c ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.2.5 MC 的編輯器 內建編輯器的剪下-貼上方式很有意思。按 F3 標記起始點,再次按 F3 標記終止點,而中間的選取部分會高亮度顯示。然後你可以移動游標到某 處按下 F6 ,被選取部分就會移到該處。如果你按下的是 F5 ,選中部分 就會複製到該處。 F2 會儲存檔案, F10 是退出,所有方向鍵的作用則 和它們的名字一樣直觀。 可用編輯器直接打開某個檔案: $ mc -e filename_to_edit $ mcedit filename_to_edit 雖然它不是多視窗編輯器,但你可利用多個 Linux 主控台來達成相同的 效果。要在視窗間進行複製動作,可使用 Alt-Fn 來切換虛擬主控台,然 後使用 "File->Insert file" 或 "File->Copy to file" 將一個檔案中 的內容複製到另一個檔案。 可指定任何外部編輯器來取代內建的編輯器。 許多程式使用環境變數 EDITOR 或 VISUAL 來決定使用哪個編輯器。如果 你用不慣 vim,可在 ~/.bashrc 中加上幾行來指定使用 mcedit : ... export EDITOR=mcedit export VISUAL=mcedit ... 我推薦設定為 vim 。習慣 vi(m) 是件好事,因為在 Linux/Unix 世界裡 你總找得到它們。 [15] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.2.6 MC 的檢視器 非常聰明的檢視器。它是在文件中搜索詞句的利器。我總是用它在 /usr/ share/doc 目錄下找檔案,用它來瀏覽大量的 Linux 資料是最快的方法 。檢視器可以像這樣直接啟動: $ mc -v filename_to_view ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.2.7 MC 自動啟動特性 在檔案上按 Enter,會啟動相關的程式來處理該檔案。這是 MC 的一個極 方便的特性。 executable: 執行命令 man, html file: 將檔案內容導向 (Pipe) 至檢視軟體 tar, gz, rpm file: 像子目錄般的瀏覽其內容 為了使這些文件特性生效,不要將可閱讀的檔案設成可執行檔。可使用 MC 的檔案選單或使用 chmod 來改變檔案屬性。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.2.8 MC 的FTP虛擬檔案系統 MC 可通過 FTP 來存取網路上的檔案。按 F9 轉到選單列,輸入 `p' 啟 動 FTP 虛擬檔案系統。以 username:passwd@hostname.domainname 格式 輸入 URL ,遠端的目錄就會像本地端目錄一樣顯示出來。 試著流覽 http.us.debian.org/debian 中的 Debian 檔案。請參閱 Debian archives, 第 2.1 節了解這些是如何組織起來的。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3 Unix-like 工作環境 雖然 MC 能幫助你完成許多事情,但是學會如何從 shell 命令列執行指 令並熟習 Unix-like 環境是非常重要的。 [16] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3.1 特殊的組合鍵 在 Unix-like 環境中,有許多組合鍵有特別的意義。 [17] • Ctrl-U: 清除一行中游標之前的文字。 • Ctrl-H: 移除游標前的一個字元。 • Ctrl-D: 結束輸入。(如果您在 shell 下,就會跳出該 shell) • Ctrl-C: 終止正在執行的程式。 • Ctrl-Z: 暫時停止程式。 (將該工作放到背景,參閱 command &, 第 4.3.10.1 節) • Ctrl-S: 停止輸出到畫面上。(類似 Scorll Lock) [18] • Ctrl-Q: 回復輸出到畫面上。 預設的 shell 是 bash ,它能記住使用過的命令 (history-editing) 和 命令列擴展 (tab-completion) 的功能來輔助互動式的使用。 • up-arrow: 開始收尋過去的命令。 • Ctrl-R: 開始漸進示收尋過去的命令。 • TAB: 擴展要輸入的檔案到命令列上。 • Ctrl-V TAB: 輸入 TAB,而不是命令列擴展 其他重要的組合鍵: • Ctrl-Alt-Del: 重新啟動/關閉系統,參閱其它主機安裝提示, 第 3.8 節。 • Left-click-and-drag mouse: 選取並拷貝至剪貼簿。 • Click middle mouse button: 將剪貼簿內容貼至游標處。 • Meta-key (只針對 Emacs) 是設定在左邊的 Alt。有些系統會使用 Windows-key 當 Meta-key。 為了在 Linux 文字主控台中使用滑鼠,您必須使用 gpm 服務。 [19] 參 閱滑鼠設定, 第 3.3 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3.2 基本的 Unix 指令 我們來學一些基本的 Unix 指令吧。 [20] 試著由非特權帳號penguin來 執行下列的指令: • pwd □ 顯示目前的工作目錄。 • whoami □ 顯示目前的使用者 • file foo □ 顯示foo檔案的型別。 • type -p commandname □ 顯示執行檔commandname的檔案路徑。 □ which commandname 也是相同功能。 [21] • type commandname □ 顯示執行檔 commandname 的資訊。 • apropos key-word □ 找出與 key-word 有關的說明文件。 □ man -k key-word 也具有相同功能。 • whatis commandname □ 顯示指令commandname的單行敘述。 • man -a commandname □ 顯示指令 commandname的說明 (Unix 風格) • info commandname □ 顯示指令 commandname 較豐富的說明 (GNU 風格) • ls □ 列出目錄的內容。 (非點開頭的檔案和目錄) [22] • ls -a □ 列出目錄的內容。 (所有的檔案和目錄) • ls -A □ 列出目錄的內容。 (幾乎所有的檔案和目錄,也就是略過 ".." 和 ".") • ls -la □ 列出目錄下所有的檔案和細節資訊。參閱 Debian 的檔案系統, 第 4.5.2 節。 • ls -d □ 列出目前目錄下所有的目錄。 • lsof foo □ 列出以開檔的 foo 狀態。 • mkdir foo □ 在目前的目錄下產生新目錄: foo。 • rmdir foo □ 在目前的目錄下移除目錄: foo。 • cd foo □ 切換目錄到目前目錄下的 foo 或是CDPATH變數所定義的目錄下 的目錄。參閱文件builtins(7) 中的 cd。 • cd / □ 切換到根目錄。 • cd □ 切換到使用者的家目錄。 • cd /foo □ 切換到絕對路徑為/foo的目錄。 • cd .. □ 切換到上一層目錄。 • cd ~foo □ 切換到家目錄中的 foo 目錄。 • cd - □ 切換到先前的目錄。 • foo □ 建立 foo 檔案而內容為已解壓縮的 README.gz。 • zcat README.gz >> foo □ 附加已解壓縮的 README.gz的內容到 foo 檔案。(如果該檔案不 存在,請先建立。) • find . -name pattern □ 使用 shell 原型收尋相符的檔名。(速度較慢) • locate -d . pattern □ 使用 shell 原型收尋相符的檔名。(使用定期產生的資料庫,較 快) 請先使用上述的指令當作測試來探勘系統目錄。如果您有任何指令上的問 題,請閱讀說明文件。比如說,這些指令是好的出發點: $ man man $ man bash $ man ls 現在使用 vim 的好機會,請按下 F1。您應該會看到至少前 35 行。然後 實作線上測驗,將游標移至 |tutor| 並按下 Ctrl-]。參閱編輯器, 第 11 章了解更多編輯器。 請注意,許多從 GNU 和 BSD 來的 Unix-like 指令皆有簡潔的說明,您 可以使用以下其一的方法叫出來(有些情況是不用加任何參數): $ commandname --help $ commandname -h 也順便練習一下Debian技巧, 第 8 章的範例來練功吧。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3.3 The command execution 相信您現在比較清楚如何使用 Debian 系統了。我們來探勘 Debian 中更 進階的指令技巧。 [27] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3.4 簡單的命令 一個簡單的指令是以下的排列 變數宣告 (額外的) 指令名稱 參數 (額外的) 導向 (額外的:> , >> ,< , << ...等) 控制運算子 (額外的:&& , || ; , ; , & , ( , )) 對於置換和引用,參閱命令列操作, 第 13.2.6 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3.5 指令執行和環境變數 典型的指令執行是使用下述的 shell 指令列: [28] $ date Sun Oct 26 08:17:20 CET 2003 $ LC_ALL=fr_FR date dim oct 26 08:17:39 CET 2003 在這裡,date是前景工作。至於環境變數 LC_ALL 是指: • 第一個指令未設定 (系統預設是跟 C 一樣) LC_ALL • 第二個指令將 LC_ALL 設成 fr_FR (French locale) 大部份的指令在執行時不會比環境變數更早執行。對於上面的範例來說, 你也可以這樣做: $ LC_ALL=fr_FR $ date dim oct 26 08:17:39 CET 2003 當你看到這裡時,輸出的結果是受到環境變數的影響而產生 French 的文 字。如果您想要環境變數也影響到子程序(舉例來說,當使用 shell script),您必須 "export" 它: $ export LC_ALL ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3.6 指令收尋路徑 當您在 shell 輸入指令時,shell 會 PATH 這個環境變數中列舉的目錄 來找指令。PATH 同時也是 shell 的收尋路徑。 在預設安裝的 Debian 下,使用者的PATH 不會包含/sbin/。所以當您需 要從 /sbin/ 執行一些像 ifconfig的指令時,您必須修改 PATH 的值並 包含該路徑。PATH通常是設定在 ~/.bash_profile 之中,參閱 Bash 設 定, 第 3.2 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3.7 命令列參數 部份的指令需要額外的參數才能執行,這些參數通常是以 - 或 -- 開頭 並透過指令來呼叫。 $ date Mon Oct 27 23:02:09 CET 2003 $ date -R Mon, 27 Oct 2003 23:02:40 +0100 這裡的參數 -R 會改變 date 的輸出結果而變成 RFC-2822 相容的字串。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3.8 Shell wildcards 有時候您希望能同時處理相同類別的檔案但不想一個一個輸入時,shell wildcards的 "檔名原型擴展" 就能解決這樣的問題。 • * □ 符合任何 0 個或更多個的字元。 □ 這不符合檔名以 "." 開頭的檔案。 • ? □ 只符合一個字元。 • [...] □ 只符合括號中的一個字元。 • [a-z] □ 只符合a 和 z 中的一個字元。 • [^...] □ 符合括號中沒有列舉的一個字元("^"並不包含)。 舉例來說,思考一下底下的範例: $ mkdir junk; cd junk; touch 1.txt 2.txt 3.c 4.h .5.txt $ echo *.txt 1.txt 2.txt $ echo * 1.txt 2.txt 3.c 4.h $ echo *.[hc] 3.c 4.h $ echo .* . .. .5.txt $ echo .[^.]* .5.txt $ echo [^1-3]* 4.h $ cd ..; rm -rf junk ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3.9 指令的傳回值 每個指令會回傳 exit 狀態當成回傳值。 • 如果指令成功執行完成的話,則回傳值 = 0。 • 如果指令因錯誤終止,則回傳值不為 0。 執行後的回傳值可經由 $? 環境變數來存取。 $ [ 1 = 1 ] ; echo $? 0 $ [ 1 = 2 ] ; echo $? 1 請注意,shell 使用邏輯計算回傳值時,success的話就當成邏輯 TRUE。 這並不是那麼直覺,因為success有代表 zero 的意思。 參閱 Shell 條件式, 第 13.2.5 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3.10 標準的指令順序 我們試著記憶底下的 shell 指令用法。閱讀過這些用法後也請參考 Shell 參數, 第 13.2.3 節, Shell 重導 (redirection), 第 13.2.4 節 , Shell 條件式, 第 13.2.5 節和命令列操作, 第 13.2.6 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3.10.1 command & 該 command 指令是在背景中的子 shell 執行。背景的工作允許使用者在 一個 shell 中執行多個程式。 背景程序的管理包含了 shell 本身的 jobs, fg, bg 和 kill。請閱讀 bash(1) 中的 "SIGNALS", "JOB CONTROL" 和 "SHELL BUILTIN COMMANDS"。 [29] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3.10.2 command1 | command2 command1 的 standard output 是餵給 command2 的stand input。兩個 指令可以同時執行。這就叫作 pipeline。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3.10.3 command1 ; command2 command1 和 command2 是按照順序地執行。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3.10.4 command1 && command2 command1 先被執行。如果成功的話,則command2也會依序的執行。 command1 和command2皆成功執行,則傳回 success。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3.10.5 command1 || command2 command1 先被執行。如果不成功的話,則command2還是會依序的執行。 command1 或command2其一成功執行的話,則傳回 success。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3.10.6 command > foo 將command的結果重導到foo檔案。(會覆寫) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3.10.7 command >> foo 將command的結果重導到foo檔案。(會附加) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3.10.8 command > foo 2>&1 將command的 standard output 和 standard error 重導到foo檔案。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3.10.9 command < foo 將command的 standard input 導到foo檔案。試試看以下的例子: $ □ 符合文字的結尾。 • [abc...] □ 這個字元列表符合 "abc..." 中任何一個字元。 • [^abc...] □ 這個字元列表符合非 "abc..." 中任何一個字元。 • r* □ 符合 "r" 這個敘述 0 次以上的文字。 • r+ □ 符合 "r" 這個敘述 1 次以上的文字。 • r? □ 符合 "r" 這個敘述 0 或 1 次的文字。 • r1|r2 □ 符合"r1" 或 "r2" 敘述之一的文字。 • (r1|r2) □ 符合"r1" 或 "r2" 敘述之一的文字並以 bracketed 表示法處理 。 在 BREs 裡,metacharacters:"+ ? ( ) { } |" 是無作用的,取而代之 的是倒斜線的 "\+ \? \( \) \{ \} \|"。所以說,使用 BREs 時,(r1| r2) 必須像 \(r1|r2\) 用倒斜線隔開。雖然 emacs 也支援 BRE,但改用 "+ ?" 來當作metacharacters。所以不需要使用雙引號來隔開。參閱置換 表示法, 第 4.4.2 節了解這些metacharacters組合怎麼使用。 舉例來說,grep 可以使用正規表示法來收尋文字: $ egrep 'GNU.*LICENSE|Yoyodyne' /usr/share/common-licenses/GPL GNU GENERAL PUBLIC LICENSE GNU GENERAL PUBLIC LICENSE Yoyodyne, Inc., hereby disclaims all copyright interest in the program ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.4.2 置換表示法 在置換表示法中,底下的字元有特別的意義: • & □ 顯示符合正規表示法的字串。(emacs下請用 \&) • \n □ 顯示第 n 個符合正規表示法的字串。 如要使用 Perl 置換字串,請改用 $n 代替\n和&。因為後兩各在 Perl 中是無意義的。 舉例說明: $ echo zzz1abc2efg3hij4 | \ sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/=&=/' zzz=1abc2efg3hij4= $ echo zzz1abc2efg3hij4 | \ sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/\2===\1/' zzzefg3hij4===1abc $ echo zzz1abc2efg3hij4 | \ perl -pe 's/(1[a-z]*)[0-9]*(.*)$/$2===$1/' zzzefg3hij4===1abc $ echo zzz1abc2efg3hij4 | \ perl -pe 's/(1[a-z]*)[0-9]*(.*)$/=&=/' zzz=&= 請特別注意各處理工具在置換時所使用的分隔符號,以及軟體如何用正規 表示法比對這些文字的方式。 在編輯器中使用這些表示法也可以用來移動游標和置換文字。 請閱讀以上這些指令相關的說明文件。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5 Unix-like 檔案系統 在 GNU/Linux 和其他 Unix-like 的系統上,檔案是有組織地放置在目錄 下。 [30] 全部的檔案和目錄被整理放在一個階乘和樹狀的根目錄(/)。 這些檔案和目錄可以放在不同的硬體裝置上。mount(8) 指令能掛載硬體 裝置並加入到這巨大的檔案樹系統上。反過來說,umount(8)則可以卸載 這些裝置。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5.1 Unix 檔案基礎 以下是一些基礎觀念: • 檔案是大小寫相異。也就是說 MYFILE 和 MyFile是不同的檔案 • 根目錄以 / 表示。可別把 "root" 跟 root 帳號搞混了喔。參閱用 root 登入 shell 提示符號, 第 4.1.1 節。 • 每個目錄皆可用字母或符號來命名,但就是不能用 /。 [31] 根目錄 是一個例外,它的檔名:/(叫做 "斜線" 或 "根目錄")且不能更名。 • 每個檔案或目錄皆設計成 fully-qualified filename, absolute filename或path,必須有順序地輸入路徑才能切換到最後的目錄。以 上三者是同等的意思。全部的絕對路徑以 / 開頭且每個檔案或目錄 的路徑都包含 / 符號。第一個 /是目錄的名稱,其餘的皆為分隔符 號以便區分檔名的每個部份。 以上的說明容易造成混淆。請看一下底下的範例: /usr/share/keytables/us.map.gz 這是一個完整的檔案名稱,有些人也稱作 path。但大部分都只用 us.map.gz 來當作檔名。 [32] • root 目錄有幾個分支,例如 /etc/ and /usr/。這些子目錄底下有 更多的子目錄,例如 /etc/init.d/ 和 /usr/local/。總括來說,這 就叫做目錄樹(directory tree)。 您可以想像一個絕對路徑是從該樹的根(/)延伸到最後的分支(檔案) 。您也曾聽過別人稱為家族樹,所以每個子目錄都有其父母或祖先, 而路徑就是檔案完整的起源。 至於相對路徑並不是以 root(/) 目錄開頭。您必須牢記 ../ 代表上 一層的目錄。 • 至於硬體裝置是沒有任何目錄對應的。這跟 CP/M, DOS, 和 Windows 中的所有檔案是以硬體裝置(例如,C:\)開頭的檔名不同。請參閱 Debian 的檔案系統, 第 4.5.2 節。 有興趣的話可以參閱Filesystem Hierarchy Standard,該文件詳細說明 了階層式檔案系統的細節。您要記住的是底下這些目錄的用途: • / □ / 代表 root 目錄。 • /etc/ □ 所有的系統設定檔案皆放在該目錄下。 • /var/log/ □ 所有的系統日誌檔皆放在該目錄下。 • /home/ □ 該目錄包含了非特權帳號的所有家目錄。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5.2 Debian 的檔案系統 同於 Unix,Debian 系統提供了一個檔案系統,能夠統一化所有硬碟,儲 存媒體,主控台或透過串列埠遠端存取硬體的動作。 Debian 系統中每個檔案,目錄,named pipe 或硬體裝置都有一個inode 的資料結構,記載該檔案的相關屬性,例如:使用者所擁有 (擁有者),屬 於那一個群組,最後存取的時間等。參閱 /usr/include/linux/fs.h 了 解 Debian GNU/Linux 系統中的 inode結構的意義。 將硬體統一化成檔案的表示法是非常有用的,這允許我們可以使用相同的 方法來存取完全不同的硬體。 全部的檔案可以存放在一個硬碟,或者 20 個硬碟,有些硬碟甚至是分散 在網路上不同的電腦。您無法想像在查詢檔案或目錄時,所有的指令都能 正常運作且不用理會真正的檔案是放在哪一個實體裝置上。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5.3 檔案和目錄的存取權限 檔案和目錄的存取權限對下面三種使用者分別定義: • 檔案擁有者 user (u) , • 檔案所屬群組的使用者 group (g) 和 • 所有使用者 other (o) 。 對檔案來說,每個權限分別對應到一些可做的動作: • 讀取read (r):查看檔案的內容 • 寫入write (w):對檔案作修改 • 執行execute (x):把檔案當作指令來執行 對目錄來說,每個權限分別對應到一些可做的動作: • 讀取read (r):列出目錄的內容 • 寫入write (w):在目錄中加入或刪除檔案 • 執行execute (x):存取目錄中的檔案 在這裡,目錄的執行權限不只代表允許讀取目錄內的檔案,也代表允許看 到它們的屬性,像是檔案大小和更動時間等。 使用 ls 來顯示檔案和目錄的權限資訊 (和更多其他的資訊). 請參閱 ls (1) 。當使用 ls 的 -l 選項,則會依下列順序來顯示相關資訊: • 檔案型態 (第一字元) □ -: 一般檔案 □ d: 目錄 □ l: 符號連結 □ c: 字元狀置節點 □ b: 區塊狀置節點 □ p: 命名的管線 □ s: 通訊端 • 檔案的存取權限 (之後九個字元,依序是擁有者,群組,其他,各三 個字元) • 檔案的硬連結個數 • 檔案擁有者名稱 • 檔案所屬群組名稱 • 檔案大小 (以 bytes 為單位) • 檔案的目期和時間 (mtime) • 檔案的名稱。 在 root 帳號下可使用 chown 改變檔案的擁有者。要改變檔案的所屬群 組,可以用檔案擁有者或 root 的身份來執行 chgrp。要改變目錄的存取 權限,可以用檔案擁有者或 root 的身份來執行 chmod。控制foo檔案的 語法是: # chown newowner foo # chgrp newgroup foo # chmod [ugoa][+-=][rwx][,...] foo 請參閱 chown(1), chgrp(1) 和 chmod(1) 以取得更多資訊。 舉例來說,如果要改變目錄的擁有者為 foo 以及群組為 bar,請用 root 帳號執行以下指令: # cd /some/location/ # chown -R foo:bar . # chmod -R ug+rwX,o=rX . 有 3 個更特殊的權限位元: • set user ID (s 或 S 取代擁有者的 x), • set group ID (s 或 S 取代群組的 x) 和 • sticky bit (t 或 T 取代其他使用者的 x) 。 在這裡,如果設定這些特殊權限設定後蓋住了原本顯示的執行權限的話, 則 ls -l 的輸出就會用大寫來表示。 在可執行檔上設定 set user ID 的話,會以這個檔案擁有者的身份 (如 root) 來執行這個可執行檔。同樣地,在可執行檔上設定 set group ID 的話,會以這個檔案的群組身份 (如 root) 來執行這個可執行檔。因為 這些設定會導致安全性上的問題,要打開它們的話要格外小心。 在目錄上設定 set group ID 的話,會使用類似 BSD 的檔案建立規則, 也就是在此目錄中建立的檔案都會屬於此目錄的群組。 在目錄上設定e sticky bit 可以防止非檔案擁有者來刪除此目錄中的檔 案。在一些大家可以寫入的目錄,如 /tmp 或是在允許群組寫入的目錄下 ,為了要保持檔案內容的安全,不只要關上檔案的寫入權限,還要在目錄 上設定 sticky bit 。不然的話,任何擁有目錄寫入權限的人都可以刪除 檔案,並且建立一個新的同名檔案。 這裡有些關於檔案權限的有趣例子。 $ ls -l /etc/passwd /etc/shadow /dev/ppp /usr/sbin/pppd crw-rw---- 1 root dip 108, 0 Jan 18 13:32 /dev/ppp -rw-r--r-- 1 root root 1051 Jan 26 08:29 /etc/passwd -rw-r----- 1 root shadow 746 Jan 26 08:29 /etc/shadow -rwsr-xr-- 1 root dip 234504 Nov 24 03:58 /usr/sbin/pppd $ ls -ld /tmp /var/tmp /usr/local /var/mail /usr/src drwxrwxrwt 4 root root 4096 Feb 9 16:35 /tmp drwxrwsr-x 10 root staff 4096 Jan 18 13:31 /usr/local drwxrwsr-x 3 root src 4096 Jan 19 08:36 /usr/src drwxrwsr-x 2 root mail 4096 Feb 2 22:19 /var/mail drwxrwxrwt 3 root root 4096 Jan 25 02:48 /var/tmp 另外的辦法是使用數字並搭配 chmod(1) 來設定檔案權限。數字模式使用 3 到 4 數字寬的八進制數字。每個數字皆有其代表意義: • 第一個選擇性數字:set user ID (=4), set group ID (=2) 和 sticky bit (=1) 的總合。 • 第二個數字:針對 user 的 read (=4), write (=2) 和 execute (= 1) 權限的總合。 • 第三個數字:同上,但針對於 group。 • 第四個數字:同上,但針對 other。 這聽起來很複雜,但其實是相當簡單的。如果您觀察ls -l的結果就能發 現前面幾行(2-10)是代表檔案權限(請用二進制,"-"表示 "0","rwx"表 示"1")。這些數字如果用八進制來代表檔案權限的話,相信您一定能夠了 解。 [33] 舉個例子,比如: $ touch foo bar $ chmod u=rw,go=r foo $ chmod 644 bar $ ls -l foo bar -rw-r--r-- 1 penguin penguin 0 Nov 3 23:30 foo -rw-r--r-- 1 penguin penguin 0 Nov 3 23:30 bar 預設的檔案權限遮罩可使用 shell 內建的 umask 來設定。參閱builtins (7)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5.4 時間戳記 在 GNU/Linux 檔案中,有三個時間戳記: • mtime:修改時間 (ls -l) , • ctime:狀態改變時間 (ls -lc) 和 • atime:最後存取時間 (ls -lu) 。 注意, ctime 並不是檔案建立時間。 • 覆寫檔案會改變檔案的 mtime , ctime 和 atime 全部的時間戳記 。 • 改變檔案權限或擁有者的話,會改變檔案的 ctime 和 atime 時間戳 記。 • 讀取檔案會改變檔案的 atime 時間戳記。 要注意的是,在 GNU/Linux 系統中,即使只是簡單的讀取檔案,通常也 會為了要更新 inode 中的 atime 而導致寫入的動作。如果以 noatime 選項來掛上檔案系統的話,就可以略過這個動作而使讀取的動作加快。請 參閱 mount(8) 。 使用 touch(1) 中的指令來改變檔案的時間戳記。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5.5 連結 有兩種方法可以把一個叫 foo 的檔案關連到另一個檔名 bar 。 • 硬式連結 (hard link) 是現存檔案的一個別名 (ln foo bar) , • 符號連結 (symbolic link) ,或是 "symlink" ,是一個特殊的檔案 ,它指向另一個檔案的名稱 (ln -s foo bar) 。 下面的例子顯示了在使用 rm 指令後,連結數的改變和一些微妙的差異。 $ echo "Original Content" > foo $ ls -l foo -rw-r--r-- 1 osamu osamu 4 Feb 9 22:26 foo $ ln foo bar # 硬式連結 $ ln -s foo baz # 符號連結 $ ls -l foo bar baz -rw-r--r-- 2 osamu osamu 4 Feb 9 22:26 bar lrwxrwxrwx 1 osamu osamu 3 Feb 9 22:28 baz -> foo -rw-r--r-- 2 osamu osamu 4 Feb 9 22:26 foo $ rm foo $ echo "New Content" > foo $ cat bar Original Content $ cat baz New Content 就像上面的例子所顯示的,符號連結的一般檔案存取權限為 "rwxrwxrwx" ,而實際的存取權限均由它們所指向的檔案來決定。 . 目錄是連結到其所出現的目錄,所以任何新目錄的連結數都是由 2 起 跳的。而 .. 目錄是連結到其所上層目錄,所以目錄的連結數會隨著子目 錄數目而增加。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5.6 Named pipes (FIFOs) named pipe 是類似管線的檔案。您可以輸入資料到這個檔案,然後他會 輸出到別的地方。因此他也就作 FIFO(First-In-First-Out):第一個送 入管線的資料也是第一個送出管線的資料。 如果寫入 named pipe 時,寫入的程序並不會中斷直到該管線讀入為止。 如果讀取 named pipe,讀取的程序會一直等待直到資料讀取完畢才停止 。管線的大小永遠是零,因為它並不儲存資料,它主要是連結兩個程序, 就像 shell 的 |。但是,自從管線被命名之後,兩個程序不需要在同一 行執行或同一個使用者執行。 試著執行以下的例子: $ cd; mkfifo mypipe $ echo "hello" >mypipe & # put into background [1] 5952 $ ls -l mypipe prw-r--r-- 1 penguin penguin 0 2003-11-06 23:18 mypipe $ cat mypipe hello [1]+ Done echo hello >mypipe $ ls mypipe prw-r--r-- 1 penguin penguin 0 2003-11-06 23:20 mypipe $ rm mypipe ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5.7 Sockets socket 有點類似 named pipe (FIFO) 且允許程序與程序之間可以交換資 料。針對 socket 來說,這些程序不需要在同一個時間執行或者同一個父 程序產生的子程序。這是 inter process communication 的 ENDPOINT。 網路上不同的主機透過 socket 也能夠互換資料。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5.8 Device files 任何的硬體或虛擬裝置,例如硬碟,顯示卡,螢幕或鍵盤等,皆視為裝置 檔案。/dev/console,主控台是最常見的虛擬裝置。 裝置有兩種型別: • character device □ 一次存取一個字元。就是說存取該裝置最小的資料單位元是字元 (byte)。 • block 裝置 □ 一次存取較大單位的裝置稱為 block。硬碟就是一個 block 裝 置。 您可以讀寫裝置檔案,即使是這些檔案可能採用二進制而讓人難以理解。 直接寫入資料到這些檔案有時候是測試硬體是否已經連線的好方法。例如 ,您可以列印文字檔到印表機裝置:/dev/lp0或送指令到連接數據機的串 列埠上:/dev/ttyS0。但請小心操作,也許會造成重大的損壞。所以要特 別小心。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5.8.1 /dev/null 類別 /dev/null 是一個特別的裝置檔案,它會捨棄所有寫入的資料。如果您不 需要某些資料,直接丟到 /dev/null。它基本上就是個黑洞。如果您讀取 /dev/null,您會馬上得到 end-of-file (EOF) 字元。 /dev/zero 也是一樣,差別在於讀取時會得到\0字元(不是數字 0 喔)。 參閱空檔案, 第 8.6.34 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5.8.2 裝置節點編號 執行 ls 您就可以得到裝置節點的號碼: $ ls -l /dev/hda /dev/ttyS0 /dev/zero brw-rw---- 1 root disk 3, 0 Mar 14 2002 /dev/hda crw-rw---- 1 root dialout 4, 64 Nov 15 09:51 /dev/ttyS0 crw-rw-rw- 1 root root 1, 5 Aug 31 03:03 /dev/zero 請看底下說明: • /dev/hda 的主要裝置號碼:3,次要號碼是:0。只有disk群組中的 使用者可以讀寫它。 • /dev/ttyS0 的主要裝置號碼:4,次要號碼是:64。只有dialout群 組中的使用者可以讀寫它。 • /dev/zero 的主要裝置號碼:1,次要號碼是:5。任何帳號皆可讀寫 它。 在舊式的系統上,安裝過程會使用 /sbin/MAKEDEV 建立裝置節點。參閱 MAKEDEV(8)。 較新的系統上,/dev 下的檔案系統是經由類似 /proc 的檔案系統自動產 生。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5.9 /proc 檔案系統 /proc 檔案系統是虛擬的檔案系統,紀錄著系統資訊和執行中的程式。 許多人常常因為 /proc/kcore 太大而傷腦筋。該檔案的大小跟您電腦安 裝的記憶體一樣大。它主要用來進行核心偵錯,但本身並不存在任何地方 ,所以請別擔心它的容量大小。 參閱透過 proc 檔案系統調整核心, 第 7.2 節和 proc(5)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.6 X Window 系統 請參閱 X, 第 9.4 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.6.1 啟動 X Window System X Window 系統會跟著 xdm-like 等圖形登入軟體執行時啟動,或者在主 控台輸入: $ exec startx ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.6.2 X Window 系統的選單功能 自從 X 環境提供了許多的視窗管理器之後,他們的使用者介面都有些許 的差異。請牢記按下右鍵會帶出系統選單。該功能一直都有。 • 要取得 shell 命令列,點選選單中的 Xterm: □ "XShells" --> "XTerm". • 至於圖形化的網頁瀏覽器,點選選單中的 Mozilla: □ "Apps" --> "Net" --> "Mozilla Navigator". • 至於圖形化的 PDF 瀏覽器,點選選單中的 Xpdf: □ "Apps" --> "Viewers" --> "Xpdf". 如果您找不到 menu,請安裝相關的套件。參閱體驗 Debian 套件管理, 第 6.2 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.6.3 X Window 系統的鍵盤順序 底下是執行 X Window 系統時重要的組合控制鍵。 • Ctrl-Alt-F1 到 F6: 切換到其他的虛擬終端機 (從 X window, DOSEMU 等) • Alt-F7: 返回 X window 畫面 • Ctrl-Alt-minus: 降低 X window 的解析度 (這裡的 minus(-) 是指 數字鍵上的減號) • Ctrl-Alt-plus: 提高 X window 的解析度 (這裡的 plus(+) 是指數 字鍵上的加減號) • Ctrl-Alt-Backspace: 終止 X Server • Alt-X, Alt-C, Alt-V: 同於 Windows/Mac 上的剪下,複製,貼上。 在某些程式如 Netscape Composer 需改用 Alt 來代替 Ctrl。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.7 後續的學習指南 現在,我推薦您閱讀 The Linux Documentation Project: Guides 網站 上主要的引導書籍: • "The Linux System Administrators' Guide", □ 此書包含了如何讓系統永不停機,使用者帳號管理,備份,系統 設定等觀念。 □ 套件:sysadmin-guide □ 檔案: file:///usr/share/doc/sysadmin-guide/html/ index.html □ 網址:http://www.tldp.org/LDP/sag/index.html • "The Linux Network Administrator's Guide, Second Edition", □ 這是一本駕馭 Linux 網路管理的參考手冊。 □ 套件: (not available) □ 檔案: (not applicable) □ 網址: http://www.tldp.org/LDP/nag2/index.html • Linux: Rute User's Tutorial and Exposition □ 管理 GNU/Linux 系統的精裝版線上書籍。 □ 作者: Paul Sheer □ 由 Prentice Hall 發行 □ 套件: rutebook (從 non-free) □ 檔案: file:///usr/share/doc/rutebook/ 參閱 Debian 的技術支援, 第 15 章取得更多的學習資源。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一 頁 ] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Debian Reference (version 1) 第 5 章 - 將 distribution 升級至 stable, testing 或 unstable ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 官方的升級通知發佈於 http://www.debian.org/releases/stable/ releasenotes 和 http://www.debian.org/releases/testing/ releasenotes (正在進行中)。 將系統升級到 stable, testing 或 unstable 必須依照以下步驟一一完 成: • 升級到 Woody (如果您的系統比 Woody 更早) • 升級到 stable • 升級到 testing • 升級到 unstable 如果跳過中間的版本,Debian無法保證能升級成功。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.1 從 Potato 到 Woody 以下的步驟是獨立出來介紹的,因為 Potato 的 APT 並不支援 apt_preferences(5)文件中的功能。 編輯/etc/apt/sources.list只留下 Woody 的來源之後,請依照下列步驟 升級 APT 以及核心程式到 Woody 的版本: # apt-get update # apt-get install libc6 perl libdb2 debconf # apt-get install apt apt-utils dselect dpkg 接下來請升級系統到 Woody。 # apt-get upgrade # apt-get dist-upgrade ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.2 升級前的準備 您可以透過網路安裝來升級目前的發行版本到另外一個。以下說明完成的 方法。 首先取得 stable 的 repositories: # cd /etc/apt # cp -f sources.list sources.list.old # :>sources.list # apt-setup noprobe 如果您想升級到 testing,請加入 testing 的來源到該檔。如果您想升 級到 unstable,請加入 unstable 的來源到該檔。 # cd /etc/apt # grep -e "^deb " sources.list >srcs # :>sources.list # cp -f srcs sources.list # sed -e "s/stable/testing/" srcs >>sources.list # sed -e "s/stable/unstable/" srcs >>sources.list # apt-get update # apt-get install apt apt-utils 請看體驗 Debian 套件管理, 第 6.2 節中說明調效 /etc/apt/ sources.list 和 /etc/apt/preferences 的藝術。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.3 升級 當您按照上述的說明設定好 /etc/apt/sources.list 和 /etc/apt/ preferences 之後,您就可以進行升級的動作了。 值得注意的地方,從套件上載到unstable並移植到testing的這段時間內 ,會造成 Debian testing延遲安裝含有安全性修正的軟體。 參閱 Debian 套件管理系統, 第 6 章了解套件處理基礎,遇到問題時請 參閱 APT 升級的錯誤排除方法, 第 6.3.2 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.3.1 使用 dselect 如果系統裝了許多套件的 -dev 等套件,推薦下面使用 dselect 的操作 方法來進行套件的精細操作 (fine-grained package control)。 # dselect update # 在升級前要先執行這一步 # dselect select # 選擇附加的套件 當執行 dselect 時,所有你目前的套件都會被選擇, dselect 會基於 Depends , Suggests 和 Recommends 來提示你附加的套件,如果不想添 加任何套件,只需輸入 Q 退出 dselect 。 # dselect install 在安裝過程中,必須回答一些有關套件設定的問題,準備好你的筆記本花 點時間處理它們。參閱 dselect, 第 6.2.4 節。 使用 dselect看看,他做得還不錯 :) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.3.2 使用 apt-get # apt-get update # apt-get -t stable upgrade # apt-get -t stable dist-upgrade # apt-get -t testing upgrade # apt-get -t testing dist-upgrade # apt-get -t unstable upgrade # apt-get -t unstable dist-upgrade 當您將系統升級到 Sarge 時,建議用aptitude來取代apt-get。 (aptitude 接受 apt-get 許多的功能和參數,甚至包含了上述的所有功 能。) 利用目前 dselect 的設定來升級的方法: # apt-get dselect-upgrade 請參閱套件相依性, 第 2.2.8 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一 頁 ] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Debian Reference (version 1) 第 6 章 - Debian 套件管理系統 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 進階級套件管理工具 aptitude 是首選的 APT 前端程式。它會紀錄額外 安裝的軟體並解決惱人的相依性問題。aptitude也會移除掉不被已安裝軟 體需要的套件。它內建了一個套件過濾器,但比較難上手。 synaptic 是目前首選的以 Gtk 為 toolkit 的視窗化 APT 前端程式。它 的套件過濾器就比aptitude來的友善且簡單多了。更多的功能和支援請參 閱Debian Package Tags。 為了減少 Debian 檔案庫 (repository) 的網路負擔並加速您的下載速度 ,您可以考慮從 Debian 鏡射站台下載。 如果您的區網內需要安裝重複的套件到多台電腦上,請在使用 APT 下載 套件時,考慮使用 squid 設定本地端的 HTTP proxy。必要的話,設定 http_proxy環境變數或加入 http 設定到/etc/apt/apt.conf。 儘管 apt_preferences(5) 的 pinning 功能十分強大,但造成的影響是 難以偵錯和管理。除非熟悉該工具才考慮採用。 在 chroot, 第 8.6.35 節中所敘述的方法非常適合於需要同時結合系統 的穩定性和使用最新版軟體的情況。 本章是基於 Woody 之後的系統所撰寫的,有些資訊只適用於 Sarge 或更 新的系統。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.1 介紹 如果你沒精力閱讀完所有的開發文件,那麼先看看本章的內容,然後就開 始體驗 Debian testing/unstable 的威力吧 :-) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.1.1 主要的套件管理工具 dpkg – 安裝 Debian 套件的工具 apt-get – APT 安裝套件的指令 aptitude – 進階級的文字介面的 APT 前端工具 synaptic – 圖形介面的 APT 前端工具 dselect – 使用選單介面的套件管理工具 tasksel – 安裝 task 這些工具並非是為了取代對方而產生的,相反的,他們甚至能共用彼此。 例如說 dselect 能搭配使用 APT 和 dpkg來安裝套件。 APT 使用 /var/lib/apt/lists/* 來追蹤可用的套件,而 dpkg 則是使用 /var/lib/dpkg/available 。如果直接用 aptitude 或類似工具來安裝套 件的話,別忘了要使用 dselect 的 [U]pdate 選項,或在執行 dselect update 來更新 /var/lib/dpkg/available 。 在處理套件相依性的方式上, apt-get 會自動搜尋下載相依的套件,但 不會額外安裝該軟體推薦或建議的套件。 相反地,aptitude 可以設定成是否要額外安裝 "推薦" 或 "建議" 的套 件。 dselect 在套件的選擇方面提供了選單方式的操作,會列出該軟體推薦或 建議的套件並個別決定是否要安裝。請參閱套件相依性, 第 2.2.8 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.1.2 方便的工具 dpkg-reconfigure - 重新設定一個已經安裝的套件 (如果它是使用 debconf 的話) dpkg-source - 管理套件源碼檔案 dpkg-buildpackage - 自動重新編建套件檔案 apt-cache - check package archive in local cache ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2 體驗 Debian 套件管理 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2.1 設定 APT 參閱升級前的準備, 第 5.2 節來設定sources.list。 [34] 請參考 Debian 系統安裝提示, 第 3 章, 將 distribution 升級至 stable, testing 或 unstable, 第 5 章和應急的編輯器, 第 11.2 節. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2.2 tasks 安裝 您可以安裝一個許多軟體集合的套件來規畫特定用途的 Debian 系統。而 該集合就叫作 "Task"。 安裝 tasks 最簡單的方法就是在安裝系統過程中,執行 tasksel。請記 得先執行 dselect update 。 建議使用 aptitude 來安裝 tasks,而這也是它的特色之一。它能在您選 擇好 tasks 並準備安裝之前再額外刪除掉您不需要的軟體。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2.3 aptitude aptitude 是一套全新的套件安裝系統,類似於 dselect,不同的是針對 APT 重新設計的。它也能當作 apt-get 另一個指令介面且完全相容 apt-get的參數喔。請參閱 aptitude(1) 和 file:///usr/share/doc/ aptitude/README。 從您開始安裝軟體,建議使用aptitude來代替所有的安裝工具,不然會失 去了aptitude所建立的套件追蹤清單。這會使您無法移除多餘的套件。 aptitude 的功能鍵如下(大部分為小寫): Keystroke Action F10 Menu ? Help for keystroke (complete listing) u Update package archive information Mark the package to be upgraded or newly installed - Mark the package to be removed (keep config) _ Mark the package to be purged (remove config) = Place the package on hold U Mark all upgradable packages to be upgraded g Download and install selected packages q Quit current screen and save changes x Quit current screen and discard changes Enter View information about a package C View a package's changelog l Change the limit for the displayed packages / Search for the first match \ Repeat the last search 如同apt-get,aptitude在安裝軟體時也會解決掉惱人的相依性問題。 aptitude 也能設定成是否要安裝軟體額外推薦或建議的軟體。利用主畫 面選單上的F10 -> Options -> Dependency handling來改變預設的安裝 策略。 aptitude 的其他功能: • aptitude 能存取所有版本的套件。 • aptitude 的動作會紀錄在/var/log/aptitude。 • aptitude 能輕鬆地追蹤本地端建立的套件並列在 "Obsolete and Locally Created Packages"。 • aptitude 內建強大的收尋引擎並過濾顯示的套件。 mutt的使用者會 很容易上手,因為 expression 的文法是來自於 mutt。請參閱 file:///usr/share/doc/aptitude/README 的 "SEARCHING, LIMITING, AND EXPRESSIONS"。 • aptitude內建 su 的功能所以一般使用者皆可以執行直到安裝或移除 軟體時再取得管理者的權限。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2.4 dselect 從 Stable 發行到現在為止(包含Potato),dselect是主要的套件維護工 具。當 Sarge 發行後,您可以考慮使用 aptitude 來取代。 當你啟動程式時, dselect 會自動選取所有 "Required" 、 "Important" 和 "Standard" 分類的套件。 雖然dselect 的使用介面有點怪,但大部分的人都已經習慣了。有四主要 的指令 (都是大寫的指令!): 按鍵 動作 Q 離開。確認目前所選取的並離開程式。 (override dependencies) R 回復 (Revert)! I did not mean it. D 不管你 (Damn it)!我不管 dselect 怎麼想的。照我的做就是了! U 都照建議 (sUggested) 的來做 使用 D 和 Q 可以選擇有衝突的選項。要小心地使用這些指令。 在 /etc/dpkg/dselect.cfg 中加上一行 "expert" 選項以減少干擾。 對於速度慢的機器,可以在其它速度快的機器上執行 dselect 先選好套 件,然後用 apt-get install 來安裝。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2.5 使用 APT 來維持 Debian 發行版本 請編輯/etc/apt/preferences並加入以下的說明來維持系統為 testing 版本: Package: * Pin: release a=testing Pin-Priority: 800 Package: * Pin: release a=stable Pin-Priority: 600 要注意的是追蹤testing版本會有延誤安裝安全性修正軟體的副作用。這 樣的軟體是因為上傳到unstable並移植到testing的這段期間所造成的延 誤。 更多且複雜的範例請參考 apt_preferences(5),允許您做更多的事情, 例如安裝 unstable 的套件還能把系統維持在testing。 關於限制替定軟體在特定的版本的範例可以在 examples subdirectory 找到 preferences.testing 和 preferences.unstable。 如果您混用不同的發行版本,例如 testing 和 stable 或 unstable 和 stable,您終究會安裝到testing或unstable版本的核心軟體,例如libc6 ,而這樣的行為無法保證系統無臭蟲存在。您必須特別小心。 另外一個例子,preferences.stable會強制降級所有的軟體到stable。 Debian 不支援將某個套件降級到先前的發行版本。但新版的套件出問題 時,重裝舊版的套件是被允許的。您可以在本地端的 /var/cache/apt/ archives/ 或遠地端的 http://snapshot.debian.net/ 找到先前發行的 版本。請參考使用 dpkg 來救援, 第 6.3.3 節。 Debian 也不支援將某個發行版本降級到先前的版本且這樣做往往會造成 很多問題。如果您願意冒險的話,也是值得嘗試看看。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.2.6 aptitude,apt-get和apt-cache 命令 當像之前的例子一樣跟隨著 testing,您可以下列的指令來管理系統。 • aptitude update (或 apt-get update 以上動作會更新檔案庫中最新的套件列表 • aptitude upgrade (或 apt-get upgrade 或 aptitude dist-upgrade 或 apt-get dist-upgrade) 這樣會跟隨testing版本 — 他們會安裝目前testing版本上可提供升 級的套件以及其相依的軟體。 [35] • apt-get dselect-upgrade 這會跟隨testing版本 — 上述指令升級的方法是依照dselect的處理 方式來決定的。 • aptitude install package/unstable 由 unstable distribution 安裝 package ,並由 testing distribution 安裝相依的套件。 • aptitude install -t unstable package 將 unstable 的 Pin-Priority 設為 990,會由 unstable distribution 安裝 package,也從 unstable distribution 安裝相 依的套件。 • apt-cache policy foo bar ... 檢查 foo bar ... 套件的狀態。 • aptitude show foo bar ... | less (或 apt-cache show foo bar ... | less) 檢查 foo bar ... 套件的資料。 • aptitude install foo=2.2.4-1 安裝 foo 套件的特定版本 2.2.4-1 。 • aptitude install foo bar- 安裝 foo 套件,並移除 bar 套件 • aptitude remove bar 移除 bar 套件但不刪除設定檔。 • aptitude purge bar 移除 bar 並刪除其設定檔。 在上面的例子中,在apt-get 中使用 -u 選項會列出所有要升級的套件列 表,並在動作前請示使用者。aptitude預設也是如此。下面的作法也會使 apt-get完成上述的動作: $ cat >> /etc/apt/apt.conf << . // 總是列出要升級的套件 (-u) APT::Get::Show-Upgraded "true"; . 搭配 --no-act 來模擬這些安裝,移除...套件等動作。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.3 Debian 生存指令 掌握了這些知識,就能讓你享受無窮盡的"升級"了 :-) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.3.1 檢查 Debian 中的 bugs 並尋求幫助 如你使用某個套件出現問題,在尋求幫助或發送錯誤報告之前請確認查看 過下列網站( lynx 、 links 和 w3m 都很好用): $ lynx http://bugs.debian.org/ $ lynx http://bugs.debian.org/package-name # 如果你知道套件名稱 $ lynx http://bugs.debian.org/bugnumber # 如果你知道錯誤序號 在 Google (www.google.com) 中使用關鍵字 "site:debian.org" 搜索。 如有疑問,可閱讀說明文件。設定 CDPATH 如下: export CDPATH=.:/usr/local:/usr/share/doc 並輸入 $ cd packagename $ pager README.Debian # 如果存在的話 $ mc 在 Debian 的技術支援, 第 15 章有更多的參考資料。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.3.2 APT 升級的錯誤排除方法 在升級 unstable或testing 時可能會遇到在升級, 第 5.3 節所描述的套 件相依性問題。在大多數情況下,是因為將要升級的套件所相依性套件不 存在。這個問題可用下面的方法來解決: # aptitude dist-upgrade 如果這也沒辦法的話,就重複使用下列之一的方法至到問題自動解決: # aptitude -f upgrade # 即使遇到錯誤也繼續升級 ... 或 # aptitude -f dist-upgrade # 即使遇到錯誤也繼續 dist-upgrade 有些升級用的 script 的確有問題,所以會持續出現狀況。通常要解決這 個狀況,你最好能檢查一下這些討厭套件中的 /var/lib/dpkg/info/ packagename.{post-,pre-}{install,removal} script ,並執行: # dpkg --configure -a # 設定所有部分安裝的套件 如果 script 抱怨它找不到設定檔的話,在 /etc/ 中找找對應的設定檔 。如果你找到的是個有 .dpkg-new 的副檔名(或是類似的東西),就把 它的後綴去除掉(用 mv )。 在安裝 unstable或testing 系統時也可能遇到相依性問題。可用這個方 法巧妙的解決: # aptitude -f install package # override broken dependencies 要修正這些問題,另一個可用的方法是使用 equivs 套件。請參閱 file: ///usr/share/doc/equivs/README.Debian 和 equivs 套件, 第 6.5.2 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.3.3 使用 dpkg 來救援 如果你在使用 APT 遇到死胡同,那麼可以從 Debian 鏡射站台下載套件 並使用dpkg來安裝。如果您還沒連上網路,可以鎖住 /var/cache/apt/ archives/ 的快取檔案。 # dpkg -i fetchmail_6.2.5-4_i386.deb 如果您嘗試安裝套件卻因為相依性問題失敗的話,請搭配 --ignore-depends--force-depends或其他參數來執行dpkg。dpkg(8)有更 詳盡的介紹。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.3.4 回復套件的選取狀態的資料 不論是什麼原因,如果 /var/lib/dpkg/status 亂掉了的話,則 Debian 系統會失去套件的選取狀態的資料,這是很糟糕的事。到 /var/lib/dpkg /status-old 或 /var/backups/dpkg.status.* 找找看舊的 /var/lib/ dpkg/status 檔。 因為 /var/backups/ 這個目錄中有很多重要的系統資料,所以把它放到 分開的分割區會是個不錯的主意。 如果連舊的 /var/lib/dpkg/status 檔也找不到了,你仍可以從 /usr/ share/doc/ 目錄來回復這些資料。 # ls /usr/share/doc | \ grep -v [A-Z] | \ grep -v '^texmf$' | \ grep -v '^debian$' | \ awk '{print $1 " install"}' | \ dpkg --set-selections # dselect --expert # 重新安裝系統,如果需要的話去除一些選取 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.3.5 在 /var 崩潰後救援系統 因為 /var 目錄下包含了常被更動的資料,如 mail ,所以比較容易會有 損壞。把它放到獨立的分割區可以減少風險。如果災難發生了,你必需重 建 /var 以回復 Debian 系統。 從相同或較舊版本的最簡化的 Debian 系統中取得 /var 目錄內容的架構 ,例如 var.tar.gz,將它放入受損系統的根目錄,然後 # cd / # mv var var-old # 如果還留下有用的資料的話 # tar xvzf var.tar.gz # 使用 Woody 架構的檔案 # aptitude # 或是用 dselect 上述步驟應可使系統恢復工作。使用回復套件的選取狀態的資料, 第 6.3.4 節中描述的技術來加快套件選取資料的恢復。 ([FIXME] :這個流 程需要更多的實驗來驗證。) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.3.6 把套件安裝到一個無法開機的系統 用 Debian 救援磁片/CD 或是一個多重開機的 Linux 系統的其它分割區 來開機進入 Linux 。請參閱啟動系統, 第 8.1 節。在 /target 掛上這 個無法開機的系統,並使用 dpkg 的 chroot 安裝模式。 # dpkg --root /target -i packagefile.deb 然後設定並解決問題。 By the way, if a broken lilo is all that prevents booting, you can boot using a standard Debian rescue disk. At boot prompt, assuming the root partition of your Linux installation is in / dev/hda12 and you want runlevel 3, enter: boot: rescue root=/dev/hda12 3 Then you are booted into an almost fully functional system with the kernel on floppy disk. (There may be minor glitches due to lack of kernel features or modules.) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.3.7 如果 dpkg 指令壞了怎麼辦 如果 dpkg 有問題,就不能安裝任何 .deb 檔了。下列的流程可幫助你來 修復這個情況。(在第一行中,你可以把 "links" 換成你喜歡的瀏覽器 指令。) $ links http://http.us.debian.org/debian/pool/main/d/dpkg/ ... 下載正確的 dpkg_version_arch.deb $ su password: ***** # ar x dpkg_version_arch.deb # mv data.tar.gz /data.tar.gz # cd / # tar xzfv data.tar.gz 如果是 i386 的話,也可以用 http://packages.debian.org/dpkg 。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.4 Debian 神技之指令 經過這些指令的啟示,你將可由無休止的升級地獄中解放出來,到達 Debian 涅盤。 :-) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.4.1 檔案中的資訊 在已安裝的套件中尋找特定檔案樣板所屬的套件: $ dpkg {-S|--search} pattern 或者搜尋 Debian 檔案庫中類似的: $ wget http://ftp.us.debian.org/debian/dists/sarge/Contents-i386.gz $ zgrep -e pattern Contents-i386.gz 或是使用特殊的套件命令: # aptitude install dlocate $ dlocate filename # dpkg -L 和 dpkg -S 的快速版 ... # aptitude install auto-apt # on-demand package installation tool # auto-apt update # 建立 auto-apt 的 db 檔 $ auto-apt search pattern # 尋找符合某個 pattern 的套件,不論是否安裝 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.4.2 套件的資訊 從套件 archive 中尋找並顯示資訊。編輯 /etc/apt/sources.list 以確 定 APT 指向適合的 archive(s)。如果想了解 testing/unstable 中的相 對應套件與當前系統安裝的套件有何差別,使用 apt-cache policy—會好 得多。 # apt-get check # 更新暫存區並檢查損壞的套件 $ apt-cache search pattern # 搜尋套件的文字敘述 $ apt-cache policy package # 套件的 priority/dists 資訊 $ apt-cache show -a package # show description of package in all dists $ apt-cache showsrc package # show description of matching source package $ apt-cache showpkg package # 套件的除錯資訊 # dpkg --audit|-C # search for partially installed packages $ dpkg {-s|--status} package ... # 已安裝套件的敘述 $ dpkg -l package ... # 已安裝套件的狀態 (一行一個) $ dpkg -L package ... # 列出套件安裝的檔案 apt-cache showsrc 在 Woody release 時沒有文件,但是會動 :) 你也可以在下列的地方找到套件資訊 (我用 mc 來瀏覽) : /var/lib/apt/lists/* /var/lib/dpkg/available 比較下面的檔案可以正確的了解最近幾個安裝的過程對系統造成了那些改 變。 /var/lib/dpkg/status /var/backups/dpkg.status* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.4.3 Unattended installation with APT For an unattended installation,請在 /etc/apt/apt.conf 加入一行 : Dpkg::Options {"--force-confold";} 這等同於執行 aptitude -y install packagename 或 apt-get -q -y install packagename。因為這個作法是對所有的提示都回答 "yes" 的, 所以可能會造成問題,請小心使用。參閱 apt.conf(5) 和 dpkg(1) 。 你可以在稍後用重新設定已安裝的套件, 第 6.4.4 節的方法重新設定特 定的套件。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.4.4 重新設定已安裝的套件 使用下面的指令來重新設定任何已安裝的套件。 # dpkg-reconfigure --priority=medium package [...] # dpkg-reconfigure --all # 重新設定所有的套件 # dpkg-reconfigure locales # 產生額外的 locales # dpkg-reconfigure --p=low xserver-xfree86 # 重新設定 X server 如果你要永久設定 debconf 為對話窗模式,請對 debconf 進行重設定。 有些程式是用做特殊設定的 scripts 。 [36] apt-setup - 建立 /etc/apt/sources.list install-mbr - 安裝 Master Boot Record manager tzconfig - 設定本地時區 gpmconfig - 設定 gpm mouse daemon eximconfig - 設定 Exim (MTA) texconfig - 設定 teTeX apacheconfig - 設定 Apache (httpd) cvsconfig - 設定 CVS sndconfig - 設定音效系統 ... update-alternatives - 設定預設的指令, e.g., vim as vi update-rc.d - System-V init script management update-menus - Debian 選單系統 ... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.4.5 移除和清除套件 移除套件但保留它的設定檔: # aptitude remove package ... # dpkg --remove package ... 移除套件並清除所有的設定檔: # aptitude purge package ... # dpkg --purge package ... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.4.6 維持舊的套件 舉例來說,下面的指令可以在 dselect 和 aptitude install package 時維持 libc6 和 libc6-dev 的版本: # echo -e "libc6 hold\nlibc6-dev hold" | dpkg --set-selections 但這個方法擋不住 aptitude install package 。如果要在 aptitude upgrade package 或 aptitude dist-upgrade 時自動降級來維持版本的 話,在 /etc/apt/preferences 中加入: Package: libc6 Pin: release a=stable Pin-Priority: 2000 在這裡的 "Package:" 不能用類似 "libc6*" 的用法。如果你要所有有關 glibc 的二進位套件都維持同步的話,你需要明確地把它們都列出來。 下面的指令可以列出被維持住的套件: dpkg --get-selections "*"|grep -e "hold$" ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.4.7 stable/testing/unstable 混合系統 apt-show-versions 能以 distribution 來列出可用的套件版本。 $ apt-show-versions | fgrep /testing | wc ... 在 testing 中的套件數目 $ apt-show-versions -u ... 列出可升級的套件 $ aptitude install `apt-show-versions -u -b | fgrep /unstable` ... 將所有 unstalbe 的套件升級至各自最新的版本 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.4.8 刪除暫存的套件檔 用 APT 安裝的套件會在 /var/cache/apt/archives/ 留下暫存的套件檔 。這些檔案是可以刪除的。 # aptitude autoclean # 只刪除無用的套件檔 # aptitude clean # 刪除所有的暫存套件檔 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.4.9 記錄/複製系統設定 要把套件選取狀態複製到本地端: # dpkg --get-selections "*" >myselections # 或使用 \* # debconf-get-selections > debconfsel.txt "*" 使 myselections 也包含標記為 "purge" 的套件。 你可將這個檔案傳到另一台電腦,並用下列的方法把它安裝起來: # dselect update # debconf-set-selections < debconfsel.txt # dpkg --set-selections override # editor override # 調整 priority 和 section # dpkg-scanpackages pool override /usr/local/ \ > dists/unstable/main/binary-i386/Packages # cat > dists/unstable/main/Release << EOF Archive: unstable Version: 3.0 Component: main Origin: Local Label: Local Architecture: i386 EOF # echo "deb file:/usr/local unstable main" \ >> /etc/apt/sources.list 不然,你也可以用一個快速但骯髒的方法來建立本地端的 deb repository : # aptitude install dpkg-dev # mkdir /usr/local/debian # mv /some/where/package.deb /usr/local/debian # dpkg-scanpackages /usr/local/debian /dev/null | \ gzip - > /usr/local/debian/Packages.gz # echo "deb file:/usr/local/debian ./" >> /etc/apt/sources.list 把這些目錄開放給 HTTP 或 FTP 存取,並在 /etc/apt/sources.list 中 設定相對應的位址,就可以遠端存取這些 archives 了。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.4.12 轉換或安裝外來的二進位套件 alien 可將 Red Hat rpm , Stampede slp , Slackware tgz 和 Solaris pkg 的二進位套件檔案格式轉成 Debian 的 deb 套件。如果你 不要使用你已安裝在系統中的套件,而想裝來自其他 Linux distribution 的套件的話,你可以使用 alien 來將其轉成你喜愛的套件 格式並安裝。 alien 也支援 LSB 套件。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.4.13 Automatically install command auto-apt is an on-demand package installation tool. $ sudo auto-apt update ... update database $ auto-apt -x -y run Entering auto-apt mode: /bin/bash Exit the command to leave auto-apt mode. $ less /usr/share/doc/med-bio/copyright # access non-existing file ... Install the package which provide this file. ... Also install dependencies ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.4.14 驗證已安裝的套件檔 debsums 以 MD5 偵錯碼的方式來驗證已安裝的套件檔。有些套件並沒有 可用的 MD5 偵錯碼。有個可能的暫時性的修正方法提供給系統管理員: # cat >>/etc/apt/apt.conf.d/90debsums DPkg::Post-Install-Pkgs {"xargs /usr/bin/debsums -sg";}; ^D per Joerg Wendland joergland@debian.org (untested). ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.4.15 sources.list 最佳化 簡而言之,像我這樣住得離美國很遠的人,用什麼奇特的方法建出來的最 佳化 sources.list 其實並沒什麼顯著的效果。還是用 apt-setup 手動 選個靠近的站台吧。 apt-spy 會依 latency 和頻寬來自動產生 sources.list 檔。 netselect-apt 會建立更完整的 sources.list ,但在選站台時用的是比 較差的方法 (比較 ping 的時間) 。 # aptitude install apt-spy # cd /etc/apt ; mv sources.list sources.list.org # apt-spy -d testing -l sources.apt ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.5 Debian 其它特別之處 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.5.1 dpkg-divert 指令 檔案移轉是強迫 dpkg 把某個檔案安裝在一個被轉移過的位置,而非預設 的位置。當 Debian 套件的 scripts 發生衝突時,可用移轉來將檔案移 開。系統管理者也可以用移轉來多載套件的設定檔,或是用在當安裝套件 新版本時,包括有些沒被標記為 conffiles 而需要被 dpkg 所保留的檔 案。(參閱保留本機設定檔, 第 2.2.4 節)。 # dpkg-divert [--add] filename # 加入 "diversion" # dpkg-divert --remove filename # 刪除 "diversion" 平時不要請使用 dpkg-divert ,除非是必要的情況下。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.5.2 equivs 套件 如果你從源碼來編譯程式,最好是能將它做成本地的 Debian 套件 (*.deb)。最後的手段是使用 equivs 。 Package: equivs Priority: extra Section: admin Description: Circumventing Debian package dependencies This is a dummy package which can be used to create Debian packages, which only contain dependency information. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.5.3 Alternative 指令 如果想用 vi 來執行 vim ,請用 update-alternatives : # update-alternatives --display vi ... # update-alternatives --config vi Selection Command ----------------------------------------------- 1 /usr/bin/elvis-tiny 2 /usr/bin/vim *+ 3 /usr/bin/nvi Enter to keep the default[*], or type selection number: 2 在 Debian alternatives 系統中的項目都以符號連結的方式放在 /etc/ alternatives/ 。 想設定你喜歡的 X 視窗環境的話,請用 update-alternatives 來修改 / usr/bin/x-session-manager 和 /usr/bin/x-window-manager 。詳請請 參閱自定 X sessions, 第 9.4.5.1 節。 /bin/sh 則就直接符號連結至 /bin/bash 或 /bin/dash 。如果要相容於 舊有且 bash 化的 script 的話,用 /bin/bash 會比較好點,但用 /bin /dash 可強迫訓練你與 POSIX 相容。升級至 2.4 Linux kernel 時傾向 於將其設定至 /bin/dash 。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.5.4 Runlevel 大部分的Debian套件在安裝後是被設定在 runlevel 2 到 5 時會自動執 行。因此,Debian 系統的 runlevel 2,3,4,5是沒有差別的,而 Debian 是保留給系統管理者來設定。自訂 RunLevel, 第 2.4.3 節說明如何自定 runlevels。這樣的 runlevels 系統是與其他有名的 GNU/Linux 發行版 本完全不同。您或許想取消 runlevel 2 上的xdm 或 gdm 在開機後自動 執行 X display 管理器。您也可以試著修改 runlevel 3 的設定。 Runlevels, 第 2.4.2 節有更多 Runlevl 的資訊。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.5.5 停止 daemon 服務程式 Debian distribution 非常注重系統安全,許多 daemon 伺服程式都定位 在最高安全等級,因而在預設的安裝狀態下,系統只啟動最少的可用的服 務程式。 如果你不確定你執行了什麼服務程式(像 Exim , DHCP …)的話,執行 ps aux 或檢查一下 /etc/init.d/* 和 /etc/inetd.conf 的內容。同時 也使用利用 PAM 來控制登入程序, 第 9.2.1 節的方法確認一下 /etc/ hosts.deny 。而 pidof 指令也是很有用的(請參閱 pidof(8))。 在最近的 Debian 版本中,預設 X11 是不允許(遠端) TCP/IP 連接的 。請參閱在TCP/IP的環境中使用X Window, 第 9.4.6 節。經由 SSH 來 X forwarding 也是禁止的。請參閱連線到遠端的 X server – ssh, 第 9.4.8 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一 頁 ] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Debian Reference (version 1) 第 7 章 - Debian下的Linux核心 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Debian運用自己的方式來編譯核心及相關模組。參閱Debian和系統核心, 第 2.7 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.1 核心(重新)編譯 Debian unstable發行版中的gcc、binutils和module-init-tools可用來 編譯最新的Linux核心。這方面的官方訊息,參閱file:///usr/share/doc /kernel-package/README.gz文件的後半部分。 核心編譯是個很困難的議題,由于目標在不斷的變化,即使是最受人尊敬 的開發者也會有不同的見解: Manoj Srivastava寫到: --initrd 需要Debian專用cramfs修正檔。 Herbert Xu 寫到: 不,它不需要,想使用除CRAMFS以外的文件系統只需在/etc/ mkinitrd/mkinitrd.conf中設定MKIMAGE。 按照Manoj和Kent撰寫的file:///usr/share/doc/kernel-package/ README.gz以及http://kernel-handbook.alioth.debian.org/的指導小心 行事,如果要編譯最新版本的核心請確認安裝了最新unstable版 kernel-package套件。 對於單機核心編譯,initrd不是必須的。我用它是希望我新編譯的核心與 相應的核心一模一樣。如果使用initrd,請先閱讀一下mkinitrd(8)和 mkinitrd.conf(5)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.1.1 核心標頭檔 絕大多數"正常"程序不需要核心標頭檔,事實上如果直接引用它們會出錯 。這些程序應該引用那些編譯glibc所用的標頭檔,它們位於Debian系統 的/usr/include/linux和/usr/include/asm目錄下。 故不要在/usr/src/linux目錄中建立指向/usr/include/linux和/usr/ include/asm的連結,一些過時的文檔曾建議建立它們。 如果某些核心類應用程序需要特定的標頭檔,可修改Makefile(s),使其 包含指向"特定標頭檔目錄/include/linux"和"特定標頭檔目錄/include/ asm"的路徑。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.2 透過 proc 檔案系統調整核心 透過proc檔案系統,可在運行的狀態下進行調整Linux核心動作。 有關 /proc 檔案系統下修改核心參數的基礎知識,可參閱Linux源碼中的 Documentation/sysctl/*文件。 調整核心參數的例子,可參考/etc/init.d/networking和無法存取某此站 台的怪問題, 第 3.8.5 節。 參閱 sysctl.conf(5) 了解如何透過 /etc/init.d/procps.sh 和 /proc 檔案系統來設定核心啟動組態。/etc/rcS.d/S30procps.sh 在執行時會呼 叫 /etc/init.d/procps.sh script。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.2.1 開啟太多檔案 Linux核心有時會報告 “Too many open files”,原因是file-max預設值 (8096)太小。要解決這個問題,請用 root 身份執行下列命令: # echo "65536" > /proc/sys/fs/file-max # for 2.2 and 2.4 kernel # echo "131072" > /proc/sys/fs/inode-max # for 2.2 kernel only 或者修改加入底下的敘述到 /etc/sysctl.conf: file-max=65536 # for 2.2 and 2.4 kernel inode-max=131072 # for 2.2 kernel only ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.2.2 清除磁碟緩衝區時間 透過proc檔案系統來修改清除磁碟緩衝區時間。下面的操作將預設的5秒 時間間隔縮短到1秒。 # echo "40 0 0 0 100 30000 60 0 0" > /proc/sys/vm/bdflush 這可能對文件I/O效能產生一些負面影響。但它能保證文件內容是最近1秒 的,比預設的5秒更短。對日誌式檔案系統來說更是如此。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.2.3 慢速且記憶體小的機器 對某些記憶體少的舊機器來說,在proc檔案系統中打開 over-commit 功 能會很有效果: # echo 1 > /proc/sys/vm/overcommit_memory ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.3 核心 2.6 和 udev udev 是取代 /dev/ 的動態配置的檔案系統。裝置名稱可以取較短的名稱 。而 2.4 核心中的 devfs 已經淘汰了。 安裝 Debian 新版的 kernel-image-2.6.NN 和 udev 就能啟動該功能了 。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一 頁 ] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Debian Reference (version 1) 第 8 章 - Debian技巧 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.1 啟動系統 參閱 LDP BootPrompt-HOWTO獲得有關系統提示的詳細資訊。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.1.1 「我忘了root密碼!」(1) 只要能存取控制台 (console) 鍵盤,不需要 root 密碼就可以啟動系統 登入到 root 帳號。(假設 BIOS 或 lilo 之類的啟動引導器在啟動時不 需要密碼。) 整個過程不需要另外的開機軟碟或對 BIOS 設定進行修改。在此,「 Linux」只有是一個標簽,它代表啟動 Debian 預設值安裝的 Linux 核心 。 在 lilo 啟動螢幕中,一但出現boot:(對某些系統而言,必須按下shift 鍵以阻止自動啟動以及當 lilo 使用 framebuffer 時,您必須按下 "TAB" 來查詢所輸入的參數),就輸入: boot: Linux init=/bin/sh 它會指示系統啟動核心後執行 /bin/sh 而不是 init。現在你已獲得 root 特權和 root shell。由於目前的/是以唯讀方式掛載,而其它的硬 碟分區均未掛載,故你必須完成下列步驟才能獲得一個有適當功\能的系 統。 init-2.03# mount -n -o remount,rw / init-2.03# mount -avt nonfs,noproc,nosmbfs init-2.03# cd /etc init-2.03# vi passwd init-2.03# vi shadow (如果在 /etc/passwd 檔案中所有使用者的第二個網域的資料為「x」, 就表明系統使用了影子密碼,必隅虓編輯/etc/shadow。)要刪除root密 碼,請編輯密碼檔案中第二個資料網域,將它設定為空白。重啟系統不用 密碼就能登入到 root。當系統啟動進入 runlevel 1 時,Debian(至少 是Potato以後的版本)需要密碼,一些較老的版本則不需要。 在 /bin/ 下裝一個小編輯器是個好習慣,因為有時 /usr 是無法存取的 (參閱應急的編輯器, 第 11.2 節)。 如果安裝 sash 套服軟體,當系統無法啟動時,還可執行: boot: Linux init=/bin/sash 當 /bin/sh 無法使用時,sash 可作為 sh 的交談式替代品,它是靜態連 結,內建了許多標準工具(在系統提示符下輸入「help」可獲得參考清單 )。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.1.2 「我忘了root密碼!」(2) 從急救 boot/root 磁碟啟動系統。假設 /dev/hda3 是原始 root 分區, 可用下面的方法編輯密碼檔案,與上述方法一樣容易。 # mkdir fixit # mount /dev/hda3 fixit # cd fixit/etc # vi shadow # vi passwd 與上面的方法相比,該方法的好處在於不需要知道 lilo 密碼(如果有的 話)。但如果系統沒有預先設定為從軟式磁碟機或 CD 啟動,就需要存取 BIOS 的權限。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.1.3 無法啟動系統 沒在安裝過程中製作開機軟碟?沒關係。如果 lilo 損壞了,從 Debian 安裝套件中拿出開機軟碟,用它來啟動系統。假設你的 root 分割區在 / dev/hda12,你想進入runlevel 3,在啟動提示符後輸入: boot: rescue root=/dev/hda12 3 接下來,系統使用軟式磁碟機上的核心啟動,你可登入到一個幾乎擁有全 部功\能的系統了。(可能有少量特性或模組無法使用。) 如果系統已經崩潰,亦可參閱把套件安裝到一個無法開機的系統, 第 6.3.6 節。 如果想做張自訂開機軟碟,參閱急救磁碟 (rescue disk) 中的 readme.txt 文件。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.1.4 「我不想直接啟動到 X!」 玩 unstable/sid 很有趣,但在啟動進程中執行不穩定的xdm、 gdm、kdm 或wdm會讓你焦頭爛額。 首先,在啟動提示符後輸入如下指令獲得 root shell: boot: Linux vga=normal s 其中,Linux代表你要啟動的核心對映,「vga=normal」告訴lilo在普通 VGA螢幕下執行,「s」(或「S」)是傳給init的參數,告訴它進入單使 用者模式。在提示符後輸入root密碼。 有多種方法禁用X啟動deaemons: • run update-rc.d -f ?dm remove ; update-rc.d ?dm stop 99 1 2 3 4 5 6 . • insert "exit 0" at the start of all /etc/init.d/?dm files. • rename all /etc/rc2.d/S99?dm files to /etc/rc2.d/K99?dm. • remove all /etc/rc2.d/S99?dm files. • run :>/etc/X11/default-display-manager 其中,rc2.d 的檔案的編號必須與/etc/inittab中指定的runlevel一致 。?dm表示您需要多次執行這些命令來選擇xdm、gdm、kdm和wdm。 在Debian下只有第一種方法「最正確」。最後一種方法比較簡單但只適用 於Debian,而且還需要使用dpkg-reconfigure重新設定 display manager 。其它方法都是通用的中止daemons的方法。 你仍可在任何控制台 (console) shell中輸入startx啟動 X。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.1.5 其它用於啟動提示的技巧 使用 lilo 啟動提示,可指定系統啟動到特定的 runlevel 和組態。詳情 參閱BootPrompt-HOWTO (LDP)。 如果希望系統啟動到runlevel 4,可以lilo啟動提示後輸入: boot: Linux 4 如果希望系統啟動到正常功\能的單使用者模式,而且你知道 root 密碼 ,可在 lilo啟動提示後輸入下列任一參數。 boot: Linux S boot: Linux 1 boot: Linux -s 如果希望系統以少於實際記憶體數的記憶體啟動(也就是說機器有 64MB 記憶體,只分配 48MB 給系統使用),在lilo啟動提示符後輸入: boot: Linux mem=48M 注意,不要指定大於實際記憶體數的記憶體,否則核心會崩潰。如果你有 多於 64MB 的記憶體,如 128MB ,應在系統啟動時執行 mem=128M 或在 /etc/lilo.conf 中添加類似的指令行,否則舊核心或使用舊 BIOS 的主 板將無法使用大於64MB的記憶體。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.1.6 設定 GRUB 啟動參數 GRUB 是 Hurd 計畫開發的新型啟動管理器,比 Lilo 更靈活,不過啟動 參數也與之稍有不同。 grub> find /vmlinuz grub> root (hd0,0) grub> kernel /vmlinuz root=/dev/hda1 grub> initrd /initrd grub> boot 請注意 Hurd 中的裝置名稱: HURD/GRUB Linux MS-DOS/Windows (fd0) /dev/fd0 A: (hd0,0) /dev/hda1 C: (usually) (hd0,3) /dev/hda4 F: (usually) (hd1,3) /dev/hdb4 ? 詳情參閱 file:///usr/share/doc/grub/README.Debian.gz 和 file:/// usr/share/doc/grub-doc/html/。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.2 活動記錄 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.2.1 記錄shell活動 比起普通的個人電腦環境,Unix環境的系統管理包括了更多細致的工作。 必須掌握所有基本的群組態方法以便進行系統故障恢復。基於X11的GUI群 組態工具看上去又好又方便,但不適用於緊急狀況。 記錄 shell 活動是個好習慣,特別是 root 使用者。 Emacs:使用M-x shell在快取區中開始記錄,使用C-x C-w將快取區中的 記錄寫入檔案。 Shell:使用screen指令和「^A H」,參閱用screen來切換 console, 第 8.6.28 節或使用script指令: $ script Script started, file is typescript ... do whatever ... Ctrl-D $ col -bx savefile $ vi savefile 還可使用下面的方法: $ bash -i 2>&1 | tee typescript ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.2.2 記錄 X 操作 如果需要 X 套用程式的操作記錄圖,內含 xterm ,可使用gimp(GUI) 。它可以對每個視窗或整個螢幕拍攝快照。還可以使用 xwd( xbase-clients)、import(imagemagick)和 scrot(scrot)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.3 拷貝及建立子目錄 這些複製和存檔指令提供了備份整個系統和檔案的基礎。the example scripts 的 backup 指令為一個簡單的備份 scripit 範例。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.3.1 拷貝整個子目錄的基本指令 如果想重新整理檔案群組織結構,可使用下面的方法移動檔案及檔案連結 : 標準方法: # cp -a /source/directory /dest/directory # requires GNU cp # (cd /source/directory && tar cf - . ) | \ (cd /dest/directory && tar xvfp - ) 如果包括硬連結,則需要更嚴謹的方法: # cd /path/to/old/directory # find . -depth -print0 | afio -p -xv -0a /mount/point/of/new/directory 如果是遠端操作: # (cd /source/directory && tar cf - . ) | \ ssh user@host.dom (cd /dest/directory && tar xvfp - ) 如果沒有連結檔案: # scp -pr user1@host1.dom:/source/directory \ user2@host2.dom:/dest/directory 下面的有關拷貝整個子目錄的訊息由 Manoj Srivastava srivasta@debian.org 發表於 debian-user@lists.debian.org。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.3.2 cp 傳統上,cp並不能真正完成這個工作,因為它既沒對符號連結進行區別對 待,又不能儲存硬連結。另一件需要注意的事就是稀疏檔案(有洞的檔案 )。 GNU cp克服了這缺陷,然而對於非 GNU 系統,cp仍存在問題。而且使用 cp無法生成小巧輕便的文文件案包。 % cp -a . newdir ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.3.3 tar Tar 克服了cp在處理符號連結時出現的問題,然而,cpio可以處理特殊檔 案,傳統的tar卻不行。 對於某個有多重硬連結的檔案,tar的處理方法是只將其中一個連結拷貝 到磁帶上,所以日後你只能找回拷貝中所保留那個的連結所指的檔案; cpio會為每個連結做一個拷貝,日後你可以找回任意一個連結所指的檔案 。 在 Potato 和 Woody 中,操作.bz2檔案的tar指令參數有所變化,所以請 在script中使用--bzip2而不要簡寫為-I(Potato)或-j(Woody)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.3.4 pax 全新的,符合POSIX(IEEE Std 1003.2-1992, pages 380–388 (section 4.48) and pages 936–940 (section E.4.48))標準的,眾望所歸的,輕 便的文文件案包交互工具。pax可以讀、寫以及列出文文件案包的成員, 並能拷貝檔案目錄層次。pax的操作獨立於特定的文文件案包格式,支援 各種各樣不同的文文件案包格式。 pax工具剛剛成形,還很新。 # apt-get install pax $ pax -rw -p e . newdir or $ find . -depth | pax -rw -p e newdir ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.3.5 cpio cpio從cpio或tar文文件案包提取/放入檔案。該文文件案包可以是硬碟上 的另一個檔案,也可以是磁帶或管道。 $ find . -depth -print0 | cpio --null --sparse -pvd new-dir ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.3.6 afio afio更善於處理cpio格式的文文件案包。通常它比cpio要快,且提供了更 多磁帶選項,並且能更友好的處理有訛誤的輸入資料。它支援交談式處理 多卷文文件案包。用afio製作壓縮文文件案包比壓縮tar或cpio文文件案 包更安全。在備份處理script中afio是更佳的「文文件案處理引擎」。 $ find . -depth -print0 | afio -px -0a new-dir 對所有的磁帶備份我都使用afio。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.4 差異備份與資料同步 要進行差異備份和資料同步可使用下列幾種方法: • rcs:備份並進行歷史記錄,只支援文本。 • rdiff-backup:備份並進行歷史記錄。支援連結。 • pdumpfs:對檔案系統進行備份和歷史記錄。支援連結。 • rsync:單路同步。 • unison:雙路同步。 • cvs:多路同步伺服器備份並進行歷史記錄,只支援文本,技術成熟 。參閱Concurrent Versions System (CVS), 第 12.1 節。 • arch:多路同步伺服器備份並進行歷史記錄,但內含「處於工作中的 目錄」。 • subversion:多路同步伺服器備份並進行歷史記錄,專用於Apache。 有關將這些方法與文文件案包操作結合套用的討論參閱拷貝及建立子目 錄, 第 8.3 節,有關自動進行備份的討論參閱日程安排(cron,at), 第 8.6.27 節。 我只講解三個較容易使用的工具。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.4.1 使用rdiff進行差異備份 rdiff-backup提供了簡單好用的方法對任何檔案內含連結進行歷史差異備 份。例如要對~/目錄下的所有檔案備份到/mnt/backup: $ rdiff-backup --include ~/tmp/keep --exclude ~/tmp ~/ /mnt/backup 從該文文件案包中取出三天前的舊資料恢復到~/old目錄: $ rdiff-backup -r 3D /mnt/backup ~/old 參閱rdiff-backup(1)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.4.2 使用pdumpfs進行每日備份 pdumpfs是一種簡單的每日備份系統,與Plan9的dumpfs一樣,它每天都儲 存系統快照。任何時候都可以用它來恢復到某天的系統狀態。請使用 pdumpfs和cron來備份你的home目錄。 在目的地目錄中,pdumpfs以YYYY/MM/DD的方式建立系統快照。第一次執 行時,它將所有來來源檔案拷貝到快照目錄。從每二次執行起,pdumpfs 只有拷貝更新的或開新檔案的檔案,對於沒有改變的檔案用硬連結方式指 向前一天的系統快照,以此來節省硬碟空間。 $ pdumpfs src-dir dest-dir [dest-basename] See pdumpfs(8). ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.4.3 使用 RCS 進行定期差異備份 Changetrack會定期對 RCS 文文件案包中基於文本格式的群組態檔案的變 化進行記錄。參閱changetrack(1)。 # apt-get install changetrack # vi changetrack.conf ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.5 系統凍結恢復 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.5.1 中止一個進程 執行top看看什麼進程的活動有異常。按「P」以CPU使用率排序,「M」以 記憶體使用率排序,「k」可以中止一個進程。還有一種方法,使用 BSD 風格的ps aux | less或 System-V 風格的ps -efH | less。System V 風 格的排列會顯示父進程 ID PPID,這對中止發生錯誤的(死掉的)子進程 十分有用。 知道了進程的 ID ,就可使用kill中止(或發信號給)某個進程, killall的作用正如其名一樣。經常使用的信號有: 1: HUP,重啟daemon 15: TERM,普通中止 9: KILL,強令中止 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.5.2 Alt-SysRq 核心編譯選項「Magic SysRq key」提供系統強心針。在i386機器上按下 Alt-SysRq 群組合鍵後,試試按下列各鍵r 0 k e i s u b,奇跡產生了 : Un'r'aw讓鍵盤從 X 崩潰中重生。將控制台 (console) loglevel改為'0' 以減少錯誤訊息。sa'k'(system attention key)中止目前的虛擬控制 台 (console) 的所有進程。t'e'rminate中止目前的終端設備除init外的 所有進程。k'i'll中止除 init 外的所有進程。 'S'ync,'u'mount和re'b'oot幫你逃離真正的險境。 詳情參閱/usr/share/doc/kernel-doc-version/Documentation/ sysrq.txt.gz或/usr/src/kernel-version/Documentation/sysrq.txt.gz 。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6 記住這些可愛的小指令 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.1 Pager less就是預設的 pager(檔案內容瀏覽器)。按「h」可獲得幫助。它比 more更有用。在shell啟動script中執行eval $(lesspipe)或eval $ (lessfile)可以讓less活力四射。詳情參閱file:///usr/share/doc/less /LESSOPEN。使用-R選項可輸出生癖字元and enables ANSI color escape sequences.參閱less(1)。 對於某些編碼系統(EUC)w3m可能是更好的選擇。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.2 釋放記憶體 free和top能讓你了解記憶體資來源的許多有用訊息。別擔心「Mem:」行 中「used」的大小,看看它下面的數字(本例的數字是38792)。 $ free -k # for 256MB machine total used free shared buffers cached Mem: 257136 230456 26680 45736 116136 75528 -/+ buffers/cache: 38792 218344 Swap: 264996 0 264996 實體記憶體的準確大小可通過grep '^Memory' /var/log/dmesg得到,本 例將顯示「Memory: 256984k/262144k available (1652k kernel code, 412k reserved, 2944k data, 152k init)」。 Total = 262144k = 256M (1k=1024, 1M=1024k) Free to dmesg = 256984k = Total - kernel - reserved - data - init Free to shell = 257136k = Total - kernel - reserved - data 約有5MB記憶體系統不能使用,因為核心需要它。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.3 設定時間(BIOS) # date MMDDhhmmCCYY # hwclock --utc --systohc # hwclock --show 設定系統時間和硬體時間為MM/DD hh:mm, CCYY。顯示時間為本地端時間 而硬體時間使用的格式為 UTC。 如果硬體(BIOS)時間設定程 GMT,請修改 /etc/default/rcS 中的設定成 UTC=yes。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.4 設定時間(NTP) 參考:Managing Accurate Date and Time HOWTO。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.4.1 擁有永久Internet連接的系統設定時間 設定系統小時鐘通過遠端伺服器自動對時: # ntpdate server 如果你的系統擁有永久的 Internet 連接,應該將該指令加入/etc/ cron.daily/。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.4.2 偶爾進行 Internet 連接的系統設定時間 使用 chrony 套件軟體。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.5 如何控制 console 的特色,例如螢幕保護程式 執行下列指令來取消螢幕保護程式: 對於 Linux console: # setterm -powersave off 啟動 kon2(kanji)console 執行: # kon -SaveTime 0 執行 X 可執行: # xset s off 或 # xset -dpms 或 # xscreensaver-command -prefs 參閱相關的幫助頁面來管理其餘的 console 功能。請參閱 stty(1) 來改 變終端機顯示的行數。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.6 查詢系統管理資料程式庫 Glibc提供了getent(1)查詢管理資料程式庫的各類項目。例如passwd、 group、hosts、services、protocols、networks。 getent database [key ...] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.7 禁用聲音(響鈴) 最直接的方法是拔掉 PC 喇叭 ;-),對於Bash shell可執行: echo "set bell-style none">> ~/.inputrc ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.8 控制台 (console) 上的錯誤訊息 不想看螢幕顯示的錯誤訊息,喜好設定的方法是檢查/etc/init.d/klogd ,在該script中設定KLOGD="-c 3"然後執行/etc/init.d/klogd restart 。另一種方法是執行dmesg -n3。 這兒是各種錯誤層級的含義: • 0: KERN_EMERG, 系統無法使用 • 1: KERN_ALERT, 必須立即執行 • 2: KERN_CRIT, 緊急狀態 • 3: KERN_ERR, 錯誤狀態 • 4: KERN_WARNING, 警告狀態 • 5: KERN_NOTICE, 正常狀態且十分重要 • 6: KERN_INFO, 報告 • 7: KERN_DEBUG, debug-level訊息 如果你很厭惡詳細而無用的錯誤訊息,可以試試這個小補丁 shutup-abit-bp6(位元於樣例script子目錄)。 另一個該看看的地方是/etc/syslog.conf;,檢查一下是否有訊息記錄被 送出到了控制台 (console) 設備。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.9 正確設定控制台 (console) 檔案類型 在類Unix系統中,console 螢幕通常要呼叫程式庫例程,這就為使用者提 供了一種獨立於終端設備的方式來更新螢幕上的文字,這是合理化的最佳 選擇。參閱ncurses(3X)和terminfo(5)。 在Debian系統中,有大量預定義項目: $ toe | less # 所有項目 $ toe /etc/terminfo/ | less # 使用者可再群組態的項目 選擇好之後請設定 TERM 這個環境變數。 當登入到遠端 Debian 系統時,如果 xterm 的 terminfo 項目在非 Debian 的 xterm 中失效,請將終端設備檔案類型改為支援較少特性的版 本如「xterm-r6」。參閱file:///usr/share/doc/libncurses5/FAQ。「 dumb」是terminfo的最小公分母。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.10 恢復 console 到穩定狀態 如果執行cat some-binary-file後螢幕一片混亂(指令的返回值與你的輸 入大相徑庭): $ reset ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.11 將 DOS 下的文字檔案轉換為Unix檔案類型 將 DOS 文字檔案(行尾=^M^J)轉換成Unix文字檔案(行尾=^J)。 # apt-get install sysutils $ dos2unix dosfile ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.12 利用 recode 來轉換文字檔 底下示範轉換文字檔在 DOS,Mac和Unix底下斷行的方法: $ recode /cl../cr mac.txt $ recode /cr.. unix.txt $ recode ../cl dos.txt recode依據不同字元集和介面來轉換檔案: $ recode charset1/surface1..charset2/surface2 \ output.txt 一般常使用的字元集轉換(請參閱locales 簡介, 第 9.7.3 節) [37] : • us — ASCII (7 bits) • l1 — ISO Latin-1 (ISO-8859-1, Western Europe, 8 bits) • EUCJP — EUC-JP for Japanese (Unix) • SJIS — Shift-JIS for Japanese (Microsoft) • ISO2022JP — Mail encoding for Japanese (7 bits) • u2 — UCS-2 (Universal Character Set, 2 bytes) • u8 — UTF-8 (Universal Transformation Format, 8 bits) 一般常用的介面為 [38] : • /cr — Carriage return as end of line (Mac text) • /cl — Carriage return line feed as end of line (DOS text) • / — Line feed as end of line (Unix text) • /d1 — Human readable bytewise decimal dump • /x1 — Human readable bytewise hexidecimal dump • /64 — Base64 encoded text • /QP — Quoted-Printable encoded text 相關的資訊請參閱info recode。 也有一些特別的轉換工具: • 字元集轉換: □ iconv — locale encoding conversions □ konwert — fancy encoding conversions • 二進制檔案轉換: □ uuencode 和 uudecode — Unix 上有的。 □ mimencode — 使用在 Mail。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.13 Regular-expression substitution 將所有檔案FILES ...中的所有FROM_REGEX字段取代成TO_TEXT字段。 $ perl -i -p -e 's/FROM_REGEX/TO_TEXT/g;' FILES ... -i表示「就地編輯」,-p表示「在FILES...各檔案中循環」。如果置換很 復雜,應使用參數-i.bak而非-i,這有助於發生錯誤恢復;它會將每個原 始檔案儲存為以.bak為後綴的備份檔案。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.14 使用 script 來編輯檔案 下面的script將刪除 5–10 行以及 16–20 行。 #!/bin/bash ed $1 < file.patch0 $ diff -u old/file new/file > file.patch1 diff 檔案(也稱修正檔案)通常用於送出程式更新。收到的修正檔案可 使用下面的方法更新另一個檔案: $ patch -p0 file < file.patch0 $ patch -p1 file < file.patch1 如果有三個版本的來源代碼,使用diff3來合併效率更高: $ diff3 -m file.mine file.old file.yours > file ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.16 分割大檔案 $ split -b 650m file # 將大檔案分塊成多個650MB的小檔案 $ cat x* >largefile # 將所有小檔案合併成一個大檔案 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.17 從文字檔格式的表格中抽取資料 假設有一個文字檔案名為DPL,其中存放著所有前 Debian 計畫領導人的 名字和他們的上臺日期,表格格式是以空格做為分隔的。 Ian Murdock August 1993 Bruce Perens April 1996 Ian Jackson January 1998 Wichert Akkerman January 1999 Ben Collins April 2001 Bdale Garbee April 2002 Martin Michlmayr March 2003 AWK經常用於從這類檔案中提取資料。 $ awk '{ print $3 }' , , and 的組合。 請小心這個 IFS 陷阱。尤其當 shell 轉譯讀入的script時,可能會出現 奇怪的問題。 $ IFS=":," # use ":" and "," as IFS $ echo IFS=$IFS, IFS="$IFS" # echo is a Bash built-in IFS= , IFS=:, $ date -R # just a command output Sat, 23 Aug 2003 08:30:15 +0200 $ echo $(date -R) # sub shell --> input to main shell Sat 23 Aug 2003 08 30 36 +0200 $ unset IFS # reset IFS to the default $ echo $(date -R) Sat, 23 Aug 2003 08:30:50 +0200 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.18 精巧的管道指令輔助script 下列script做為管道的一部分十分有用。 find /usr | egrep -v "/usr/var|/usr/tmp|/usr/local" # find all files in /usr excluding some files xargs -n 1 command # run command for all items from stdin xargs -n 1 echo | # split white-space-separated items into lines xargs echo | # merge all lines into a line grep -e pattern| # extract lines containing pattern cut -d: -f3 -| # extract third field separated by : (passwd file etc.) awk '{ print $3 }' | # extract third field separated by whitespaces awk -F'\t' '{ print $3 }' | # extract third field separated by tab col -bx | # remove backspace and expand tabs to spaces expand -| # expand tabs sort -u| # sort and remove duplicates tr '\n' ' '| # concatenate lines into one line tr '\r' ''| # remove CR tr 'A-Z' 'a-z'| # convert uppercase to lowercase sed 's/^/# /'| # make each line a comment sed 's/\.ext//g'| # remove .ext sed -n -e 2p| # print the second line head -n 2 -| # print the first 2 lines tail -n 2 -| # print the last 2 lines ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.19 查看每個檔案的輕巧 script The following ways of looping over each file matching *.ext ensures proper handling of funny file names such as ones with spaces and performs equivalent process: • Shell loop (這個範例是PS2=" "的多行風格。要打成一行的話,您 必須在每一行末加入分號。) for x in *.ext; do if test -f "$x"; then command "$x" fi done • find and xargs combination: find . -type f -maxdepth 1 -name '*.ext' -print0 | \ xargs -0 -n 1 command • find with -exec option with a command: find . -type f -maxdepth 1 -name '*.ext' \ -exec command '{}' \; • find with -exec option with a short shell script: find . -type f -maxdepth 1 -name '*.ext' \ -exec sh -c "command '{}' && echo 'successful'" \; ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.20 輕巧的 Perl Script 雖然 Awk scripts 透過a2p(1)就能自動轉換成 Perl,對於只有一行的 Awk Script 到 Perl Script,直接手動修改是最方便的了。例如: awk '($2=="1957") { print $3 }' | 同等於下列任意一行: perl -ne '@f=split; if ($f[1] eq "1957") { print "$f[2]\n"}' | perl -ne 'if ((@f=split)[1] eq "1957") { print "$f[2]\n"}' | perl -ne '@f=split; print $f[2] if ( $f[1]==1957 )' | perl -lane 'print $F[2] if $F[1] eq "1957"' | 其實上面各行中所有perl參數中的空格均可去掉,這得益於Perl的數字字 串自動轉換功能。 perl -lane 'print$F[2]if$F[1]eq+1957' | 有關指令行參數的訊息可參閱perlrun(1),在http:// perlgolf.sourceforge.net有更多令人著魔的Perl script,你會感興趣 的。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.21 從網頁上取得文件或通信清單(mailing list) 下面的操作將網頁轉化為文字檔案。從網上拷貝設定檔案時十分有用。 $ lynx -dump http://www.remote-site.com/help-info.html >textfile links和w3m也可以這麼用,只是生成的文本樣式可能略有不同。 如果是信件清單文文件案,可使用munpack從文本獲得mime內容。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.22 列印網頁 下面的操作將網頁內容列印成PostScript檔案或送出到印表機。 $ apt-get install html2ps $ html2ps URL | lpr 參閱lpr/lpd, 第 3.6.1 節。還可使用a2ps和mpage套服軟體生成 PostScript檔案。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.23 列印幫助頁面 下面的操作將幫助頁面列印成PostScript檔案或送出到印表機。 $ man -Tps some-manpage | lpr $ man -Tps some-manpage | mpage -2 | lpr ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.24 合併兩個Postscript或PDF檔案 可以將兩個Postscript檔案或PDF檔案合併。 $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite \ -sOutputFile=bla.ps -f foo1.ps foo2.ps $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \ -sOutputFile=bla.pdf -f foo1.pdf foo2.pdf ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.25 指令耗時 顯示某進程的耗時 # time some-command >/dev/null real 0m0.035s # time on wall clock (elapsed real time) user 0m0.000s # time in user mode sys 0m0.020s # time in kernel mode ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.26 nice指令 使用nice(來自GNU shellutils套服軟體)可設定指令啟動時的nice值。 renice(bsdutils)和top可以重設進程的nice值。nice值為19代表最慢 的(優先等級最低的)進程;負值就「not-nice」,如-20代表非常快的 (優先等級高的)進程。只有Supervisor可以設定負nice值。 # nice -19 top # very nice # nice --20 cdrecord -v -eject speed=2 dev=0,0 disk.img # very fast 有時過度的nice值對系統弊大於利,所以使用該指令要小心。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.27 日程安排(cron,at) 在Linux下使用cron和at進行工作日程安排。參閱at(1)、crontab(5)、 crontab(8)。 執行指令crontab -e建立或編輯crontab檔案,為規律事務(按周期循環 的事務)安排日程。下面的一個crontab檔案樣例: # use /bin/sh to run commands, no matter what /etc/passwd says SHELL=/bin/sh # mail any output to `paul', no matter whose crontab this is MAILTO=paul # Min Hour DayOfMonth Month DayOfWeek command (Day... are OR'ed) # run at 00:05, every day 5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1 # run at 14:15 on the first of every month -- output mailed to paul 15 14 1 * * $HOME/bin/monthly # run at 22:00 on weekdays(1-5), annoy Joe. % for newline, last % for cc: 0 22 * * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%.%% 23 */2 1 2 * echo "run 23 minutes after 0am, 2am, 4am ..., on Feb 1" 5 4 * * sun echo "run at 04:05 every sunday" # run at 03:40 on the first Monday of each month 40 3 1-7 * * [ "$(date +%a)" == "Mon" ] && command -args 執行at指令為偶然工作(只執行一次的工作)安排日程: $ echo 'command -args'| at 3:40 monday ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.28 用screen來切換 console The screen程式容許在單一的物理終端設備或終端設備類比視窗執行多個 偽終端設備,每個偽終端設備都擁有自己的交談式shell。即便可以使用 Linux偽終端設備或多個xterm視窗,研究一下如何設定screen豐富的特性 仍很有益,這些特性內含: • 回溯歷史顯示, • 拷貝和貼上, • 輸出到日誌, • 圖形入口, • 將終端設備與整個screen階段作業分離,稍後再連接。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.28.1 遠端存取作業方式 If you frequently log on to a Linux machine 如果你經常從遠端終端 設備登入到Linux機器或使用VT100終端設備程式,screen的detach(分離 )特性將簡化你的生活。 通過拔號連接登入,執行了一個非常復雜的screen會談,開啟舊檔了好幾 個視窗,有編輯器和其它一些程式。 突然你需要離開終端設備一下,但你並不想掛斷連線中止工作。 輸入^A d離開階段作業,然後登出系統。(或是更簡單些,輸入^A DD離 開階段作業並自動登出系統) 當你回來時,需要再次登入,可輸入指令screen -r,screen會如魔法般 地重新連線上所有開啟舊檔的視窗。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.28.2 典型的screen指令 一但開啟舊檔了screen程式,除了指令按鍵(預設值為^A)所有的鍵盤輸 入都被送到目前的視窗,所有的screen指令均按特定方式輸入:^A加一個 單鍵指令[加一些參數]的。常用的指令有: ^A ? 顯示說明螢幕(顯示指令集) ^A c 建立並切換到新增視窗 ^A n 跳到下一個視窗 ^A p 跳到上一個視窗 ^A 0 跳到0號視窗 ^A w 顯示視窗清單 ^A a 將Ctrl-A做為鍵盤輸入送出到目前的視窗 ^A h 對目前的視窗做硬拷貝寫入到檔案 ^A H 開始/中止將目前的視窗v饇O錄到檔案 ^A ^X 鎖定終端設備(密碼保護) ^A d 從終端設備分離螢幕階段作業 ^A DD 分離螢幕階段作業並結束登入 以上只是screen指令的一個很小的子集。只要是你認為screen能幹的事, 沒準它真就可以!詳情參閱screen(1)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.28.3 screen階段作業中的退格鍵和Ctrl-H 在執行screen時,如果發現退格鍵和/或Ctrl-H無法正常工作,可編輯/ etc/screenrc,找到這行: bindkey -k kb stuff "\177" 將這注釋掉(例如在句首添加「#」)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.29 網路測試基礎 安裝netkit-ping、traceroute、dnsutils、ipchains(適用於2.2版核心 )、iptables(適用於2.4版核心)和net-tools套服軟體,然後執行: $ ping yahoo.com # 檢查Internet連接 $ traceroute yahoo.com # 追蹤IP封包 $ ifconfig # 檢查主電腦設定 $ route -n # 檢查路由設定 $ dig [@dns-server.com] host.dom [{a|mx|any}] |less # 檢查dns-server.com的host.dom DNS記錄 # 尋找{a|mx|any}記錄 $ ipchains -L -n |less # 檢查包過濾(2.2 kernel) $ iptables -L -n |less # 檢查包過濾(2.4 kernel) $ netstat -a # 尋找系統上所有開啟舊檔的連接埠 $ netstat -l --inet # 尋找系統監聽的連接埠 $ netstat -ln --tcp # 尋找系統監聽的TCP連接埠(連接埠數字) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.30 清理(flush)本地端的 Mail 佇列 想要:清理(flush)本地端的 Mail 佇列 # exim4 -q # 清理待讀信件 # exim4 -qf # 清理所有信件 # exim4 -qff # 清理凍結信件 -qff選項用在/etc/ppp/ip-up.d/eximscript中效果更好。在 Woody 和更 舊的版本中,改用exim來取代exim4。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.31 刪除已凍結的信件 刪除本地端凍結信件並返回發生錯誤訊息: # exim4 -Mg `mailq | grep frozen | awk '{ print $3 }'` 在 Woody 和更舊的版本中,改用exim來取代exim4。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.32 重新寄送mbox中的信件 如果home目錄沒有空間造成procmail不能處理信件,就需要對磁碟空間進 行擴容,擴容完成後需要手動分發/var/mail/username目錄中的信件到 home目錄中的分類信箱,執行: # /etc/init.d/exim4 stop # formail -s procmail file-to-be-cleared ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.34 空檔案 下面的指令可以建立空檔案: $ dd if=/dev/zero of=filename bs=1k count=5 # 5KB of zero content $ dd if=/dev/urandom of=filename bs=1M count=7 # 7MB of random content $ touch filename # create 0B file (if file exists, updates mtime) 例如,最實用的使用方式是從Debian啟動軟式磁碟機的shell中執行下列 指令將硬碟/dev/hda的內容完全清理。 # dd if=/dev/urandom of=/dev/hda; dd if=/dev/zero of=/dev/hda ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.35 chroot chroot程式,chroot(8),不需要重啟系統,就可以在單獨的系統上同時 執行多個不同的GNU/Linux環境。 還可以在較快主電腦的chroot下執行某些需耗大量系統資來源記憶體的程 式如apt-get或dselect,並將較慢子機的硬碟通過NFS方式掛載到主電腦 ,開放讀/寫權限,在主電腦上以chroot方式操作子機。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.35.1 用chroot來執行不同版本的Debian 在Sarge中使用debootstrap指令很容易建構chroot Debian環境。在Sarge 後續版本,你可改用cdebootstrap和適當參數來替代。例如,在一臺擁有 快速Internet連接的機器的/sid-root下建立一個Sid chroot: main # cd /; mkdir /sid-root main # debootstrap sid /sid-root http://ftp.debian.org/debian/ ... watch it download the whole system main # echo "proc /sid-root/proc proc none 0 0" >> /etc/fstab main # mount /sid-root/proc main # mount /dev/ /sid-root/dev -o bind main # cp /etc/hosts /sid-root/etc/hosts main # chroot /sid-root /bin/bash chroot # cd /dev; /sbin/MAKEDEV generic; cd - chroot # apt-setup # set-up /etc/apt/sources.list chroot # vi /etc/apt/sources.list # point the source to unstable chroot # dselect # you may use aptitude, install mc and vim :-) 現在你就擁有了一個全功能Debian子系統,可以盡情測試而不必擔心主 Debian受到不利影響。 該debootstrap套用技巧還可以實現在沒有Debian安裝盤的情況下,從另 一個GNU/Linux發行版下安裝Debian。參閱http://www.debian.org/ releases/stable/i386/apcs04。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.35.2 設定chroot登入 輸入chroot /sid-root /bin/bash非常簡單,但這將沿用目前的的所有環 境變量,你可能並不希望這樣並且有時還會出問題。更好的方法是,在別 的虛擬終端設備上執行另一個登入進程,登入到chroot目錄。 在Debian系統中預設值從tty1到tty6執行Linux console,tty7執行 X Window系統,在本例中,我們將tty8設定成chroot console。按照用 chroot來執行不同版本的Debian, 第 8.6.35.1 節中的描述建立好chroot 系統後,就可以在主系統的root shell中輸入: main # echo "8:23:respawn:/usr/sbin/chroot /sid-root "\ "/sbin/getty 38400 tty8" >> /etc/inittab main # init q # reload init ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.35.3 群組態chroot下的X 想在 chroot 下安全地執行最新版的 X 和 GNOME 嗎?完全可以!下面的 例子將實現在虛擬終端設備vt9下執行 GDM。 首先,按照用chroot來執行不同版本的Debian, 第 8.6.35.1 節中描述的 方法安裝好chroot系統,從主系統的root下拷貝關鍵群組態檔案到chroot 系統。 main # cp /etc/X11/XF86Config-4 /sid-root/etc/X11/XF86Config-4 main # chroot /sid-root # or use chroot console chroot # cd /dev; /sbin/MAKEDEV generic; cd - chroot # apt-get install gdm gnome x-window-system chroot # vi /etc/gdm/gdm.conf # do s/vt7/vt9/ in [servers] section chroot # /etc/init.d/gdm start 在此,編輯/etc/gdm/gdm.conf來改變第一個虛擬終端裝置,使其在vt7到 vt9上建立虛擬終端設備。 現在可以很容易地能過切換Linux虛擬終端設備來實現在主系統的X環境和 chroot系統的X環境之間轉換,例如使用Ctrl-Alt-F7和Ctrl-Alt-F9。酷 吧! [FIXME] 在chroot系統下gdm的initscript中添加一條注釋和一條連結。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.35.4 使用chroot來執行其它發行版 很容易建立一個其它發行版的 chroot 環境。使用其它發行版的安裝程式 將它們安裝到單獨的硬碟分區中。例如root分區位元於/dev/hda9: main # cd /; mkdir /other-dist main # mount -t ext3 /dev/hda9 /other-dist main # chroot /other-dist /bin/bash 然後,執行用chroot來執行不同版本的Debian, 第 8.6.35.1 節、設定 chroot登入, 第 8.6.35.2 節和群組態chroot下的X, 第 8.6.35.3 節中 描述的內容。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.35.5 使用chroot來編譯軟體 這兒有一個很特殊的chroot套服軟體pbuilder,它構造一個chroot系統並 在其中編譯套服軟體。該體系可用於檢查套服軟體編譯時關聯關係是否正 確,並確保編譯生成的套服軟體中沒有不必要的或錯誤的關聯關係。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.36 怎樣檢查 hard links 檢查兩個檔案是否是指向同一個檔案的兩個硬連結: $ ls -li file1 file2 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.37 mount硬碟上的映象檔案 如果 file.img 檔案是硬碟內容的對映檔案,而且原始硬碟的群組態參數 為 xxxx = (bytes/sector) * (sectors/cylinder),那麼,下面的指令 將其掛載到/mnt: # mount -o loop,offset=xxxx file.img /mnt 注意絕大部分的硬碟都是 512 bytes/sector。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.38 Samba 取得 Windows 檔案的基本方法: # mount -t smbfs -o username=myname,uid=my_uid,gid=my_gid \ //server/share /mnt/smb # mount Windows files to Linux # smbmount //server/share /mnt/smb \ -o "username=myname,uid=my_uid,gid=my_gid" # smbclient -L 192.168.1.2 # list the shares on a computer 可從 Linux 檢查 Samba 網路上的芳鄰: # smbclient -N -L ip_address_of_your_PC | less # nmblookup -T "*" ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.6.39 外來檔案系統的操作工具 Linux 核心支援多種外來檔案系統,想存取它們只需將其掛載到合適的檔 案系統下就行了。對某些檔案系統,還提供專門工具不需要掛載,只依靠 使用者空間的程式,不需要核心提供檔案系統支援,就能完整存取。 • mtools: for MSDOS filesystem (MS-DOS, Windows) • cpmtools: for CP/M filesystem • hfsutils: for HFS filesystem (native Macintosh) • hfsplus: for HFS+ filesystem (modern Macintosh) 對於建立和檢查 MS-DOS FAT 檔案系統 dosfstools 非常有用。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.7 打錯字的情況 這裡示範幾個危險的動作。當使用特權帳號:root時,負面影響的程度是 相當嚴重。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.7.1 rm -rf .* 在命令列操作萬用檔名(*號)如"rm -rf .*"可能會造成嚴重的錯誤,因為 ".*"會參考到"." 和 ".."。幸運地,在Debian上的"rm"版本會很聰明地 檢查檔名並取消移除"." and ".."。但這並非永遠如此。試試看底下的例 子來了解萬用檔名的用法。 • "echo *":列出現在目錄下所有非 . 開頭的目錄與檔案。 • "echo .[^.]*":列出該目錄下所有 . 開頭的檔案和目錄 • "echo .*":列出上層所有的檔案和目錄以及該上層目錄。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.7.2 rm /etc/passwd 由於您愚蠢地移除掉 /etc/passwd 是會造成相當嚴重的損失。Debian系 統會慣例性地備份重要檔案到/var/backups/。當你回存這些檔案時,請 記得更改適當的權限。 # cp /var/backups/passwd /etc/passwd # chmod 644 /etc/passwd 請參閱回復套件的選取狀態的資料, 第 6.3.4 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一 頁 ] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Debian Reference (version 1) 第 9 章 - Debian 系統調整 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 這一章節主要是說明如何在指令介面下設定系統組態。 Debian 系統安裝 提示, 第 3 章. 如果您關心系統安全性,請閱讀 Securing Debian Manual 來建構系統的 安全性,該文件也可以安裝 harden-doc 套件取得。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.1 初始化系統的提示 Debian 使用 System V 的 init 系統與流程,先閱讀 init 程式, 第 2.4.1 節了解大概內容。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.1.1 自定 init 命令稿 最簡單控管 init script 的方法是設定在/etc/default下的檔案中的系 統環境變數。 [39] 舉例來說,/etc/default/hotplug就能控制/etc/ init.d/hotplug的行為。可以自行編輯 motd,sulogin 等服務命令稿並 放置在 /etc/init.d/rcS 讓系統開機時即可啟動。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.1.2 設定系統登入日誌( system logging ) 系統日誌是由 syslogd 這支程式控制,編輯 /etc/syslog.conf 設定日 誌輸出型態。透過 colorize 這個套件可以讓日誌檔更容易辨識。查看 syslogd(8) 和 syslog.conf(5) 可以得到更多的訊息。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.1.3 硬體最佳化(Optimizing hardware) Debian 保留了部份硬體最佳化的設定,系統管理者可以在安裝之後進行 設定。 • hdparm □ 硬碟讀寫最佳化軟體,效果十分顯著。 □ 請小心使用該軟體,最好先閱讀過 hdparm(8) 再嚐試。 □ hdparm -tT /dev/hda :測試 /dev/hda 的讀寫速度。 □ hdparm -q -c3 -d1 -u1 -m16 /dev/hda:加速新型的硬碟機。( 有可能照成錯誤 ) • setcd □ 光碟機讀寫最佳化軟體。. □ setcd -x 2:設定讀取速度為 2.倍速。 □ 閱讀 setcd(1) 可以得到更多資訊。 • setserial □ 串列埠管理工具集。 • scsitools □ SCSI 裝置管理工具集。 • memtest86 □ 記憶體檢測軟體。 • hwtools □ 低階硬體管理程式的集合。 ☆ irqtune: 改變硬體的 IRQ 優先權,使快速的裝置或服務可 以擁有較高的優先權,比如加速串列埠數據機的產量達 3 倍等。 ☆ scanport: 掃描 ISA 裝置從 0x100 到 0x3ff 的輸入輸出 位置。 ☆ inb: 從輸出輸入埠傾印資料並轉換成二進制和十六進制。 • schedutils □ Linux 程序排程工具 □ 包括了 taskset, irqset, lsrt 以及 rt 。 □ 另外還有 nice and renice(不包括),可以全盤控制程序的排程 參數。 掛載檔案系統時加上 noatime 這個參數能提昇檔案讀寫的效率。閱讀 fstab(5) 以及 mount(8)。 部份的硬體裝置可以藉由 Linux Kernel 設定 proc 檔案系統來直接設定 及最佳化。閱讀透過 proc 檔案系統調整核心, 第 7.2 節。 Debian 納入了許多設定硬體特性的軟體。大部分的軟體都是針對筆記型 電腦設計。底下是 Debian 中比較有趣的軟體: • tpconfig - 觸碰版設定軟體 • apmd - 進階電源管理程式 • acpi - 檢視 ACPI 裝置資訊的工具 • acpid - 使用 ACPI 的工具集 • lphdisk - 提供 Phoenix NoteBIOS 的硬體磁區休眠功能 • sleepd - 設定筆記型電腦休眠狀態的軟體 • noflushd - 讓閒置的硬碟可以停止運轉以節省電源 • big-cursor - 提供 X 更大的滑鼠指標 • acme - 啟動筆記型電腦上的多媒體功能鍵 • tpctl - IBM ThinkPad 硬體裝置設定工具 • mwavem - Mwave/ACP 數據機支援 • toshset - Toshiba 筆記型電腦的硬體設定程式 • toshutils - Toshiba 筆記型電腦相關工具 • sjog - 支援 Sony Vaio 筆記型電腦上的 "Jog Dial" 的軟體 • spicctrl - 調整 Sony Vaio 液晶螢幕亮度的軟體 ACPI 是一個全新的架構是且比 APM 要來的新且完整。 部份的套件需要特定的 Kernel 模組且已經納入最新的 Kernel Source 之中。如果硬體依然不支援,只好自行抓取修正檔並重新編譯 Kernel。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.2 存取限制 ( Restricting access ) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.2.1 利用 PAM 來控制登入程序 PAM (Pluggable Authentication Modules) 允許管理者控管使用者登入 的方式。 /etc/pam.d/* # PAM 控制檔案的位置 /etc/pam.d/login # PAM 控制登入的設定檔 /etc/security/* # PAM 模組參數的設定檔 /etc/securetty # 限制 root 從 console 模式下登入的設定檔 /etc/login.defs # 登入系統之後的環境變數設定檔 如果想允許空白密碼的使用者登入系統,可以編輯 /etc/pam.d/login 並 加入以下的訊息,此動作的風險很大,請管理者斟酌。 #auth required pam_unix.so nullok auth required pam_permit.so xdm, gdm...等軟體透過這樣的步驟也能允許空白密碼的使用者登入。 另一方面,使用 cracklib2 可以加強密碼安全機制,設定 /etc/pam.d/ passwd 並加入以下的敘述。 password required pam_cracklib.so retry=3 minlen=6 difok=3 使用 passwd 並加入 -e 這個參數會強迫使用者在下一次登入時必須修改 密碼。閱讀 passwd(1) 以取得更多的資訊。 在 Bash shell 的環境中,可以執行 ulimit -u 1000 來設定執行程序的 最大值,或者直接編輯 /etc/security/limits.conf。在該檔案中可以找 到類似 core 的參數,試著編輯它即可。 PATH 的設定可以藉由 /etc/ login.defs 的內容來初始化。 PAM 的文件被包裝在 libpam-doc 之中。在這個套件包裝的文件有: Linux-PAM System Administrator's Guide,涵蓋了如何設定 PAM 以及 相關模組的說明。The Linux-PAM Application Developers' Guide 以及 The Linux-PAM Module Writers' Guide。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.2.2 "為何 GNU su 不支援 wheel 群組" 這是 Richard M. Stallman 的慣用語,可以在舊式的 info su 頁面底下 找到。請不要擔心,目前 Debian 中的 su 程式是使用 PAM的,所以編輯 /etc/pam.d/su 並加入 pam_wheel.so 的敘述就可以限定那些使用者可以 執行 su。底下以 Debian 中的 adm 群組當作範例;如何實現 BSD 中的 wheel 群組直接執行 su 且不需輸入密碼就能切換成 root。 # anti-RMS configuration in /etc/pam.d/su auth required pam_wheel.so group=adm # Wheel members to be able to su without a password auth sufficient pam_wheel.so trust group=adm ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.2.3 Purposes of standard groups 比較特殊的群組: • 如果 pam_wheel.so 不加上 group= 參數指定群組名稱,則 root 群 組便是 su 所定義的預設 wheel 群組。 • adm 群組可以讀取系統紀錄檔。 • cdrom 群組可以對光碟機進行存取的動作。 • floppy 群組可以讀寫控制軟碟槽。 • audio 群組可以讀寫音效裝置。 • src 群組擁有管理軟體源碼的權限,比如 /usr/src 下的檔案存取。 • staff 針對新上手的系統管理者或是系統諮詢帳號所規劃的群組,該 群組的使用者擁有 /usr/local 以及 /home 的讀寫權。 想要了解更多的資料,請閱讀 Securing Debian Manual 的 "FAQ"。 Debian Woody 可以安裝 harden-doc 套件取得該文件。base-passwd (> 3.4.6) 更納入了權限的列表。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.2.4 更安全的工作環境 – sudo 對我而言,sudo 絕大部分是防止我做出愚笨的行為,使用 sudo 會是比 直接切換成 root 更好的辦法。 安裝 sudo 之後,編輯好 /etc/sudoers 就能啟動。順便檢查 file:/// usr/share/doc/sudo/OPTIONS 中的 sudo 群組參數。 這個例子是說明 "staff" 群組透過 sudo 的設定之後便能以 root 身份 執行任何程式;同樣地,"src" 群組透過 sudo 設定之後便能以 root 身 份執行部份程式。 使用 sudo 的好處在於一般 user 只要輸入自己的密碼就能登入並被系統 監視。且能提供部份權限給予新上手的管理者練習。舉例來說: $ sudo chown -R myself:mygrp . 如果你擁有 root 密碼,那麼你能以 root 權限來執行任何命令: $ su -c "shutdown -h now" Password: (我知道我應該要加強管理者帳號的 sudo 權限。但這是我自家使用的伺 服器,所以不用去煩惱這個問題。) 安裝 super 這個套件能夠讓一般使用者以 root 權限執行特定指令。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.2.5 服務的存取限制 super-server, inetd, 在開機時被 /etc/rc2.d/S20inetd (for RUNLEVEL=2)呼叫並啟動,而這個檔案是 /etc/init.d/inetd 的一個 soft link。基本上,inetd 能啟動和控制其他的服務,減低系統負載度 。 當一個服務對 inetd 送出需求時,它的通訊協定與服務可以從 /etc/ protocols 以及 /etc/services 中找到,然後 inetd 便會搜尋 /etc/ inetd.conf 找到適合的網際網路服務來對應,如果是 Sun-RPC 類型的服 務,便會搜尋 /etc/rpc.conf 這一個設定檔。 由於系統安全上的考量,請取消 /etc/inetd.conf 中不必要或是不使用 的服務。Sun-RPC 服務需要啟動 NFS 以及其他 RPC 為主的程式。 有些時候,inetd 並不會直接啟動,而是透過 tcpd 這個 TCP/IP 服務控 制程式並以 /etc/inetd.conf 中已定義的伺服器服務名稱來啟動。這個 情況下,tcpd 在登入以及請求時必須使用 /etc/hosts.deny 以及 /etc/ hosts.allow 進行附加的檢查,然後在執行相對應的服務程序。 如果您在新版的 Debian 上無法進行遠端登入,請將 /etc/hosts.deny 中的 "ALL: PARANOID" 給註解掉。 想要得知更多的資訊,請閱讀 inetd(8), inetd.conf(5), protocols (5), services(5), tcpd(8), hosts_access(5), 以及 hosts_options (5). 有關 Sun-RPC 更多的訊息,請參閱 rpcinfo(8), portmap(8), 以及 file:///usr/share/doc/portmap/portmapper.txt.gz. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.2.6 集中式的認證功能 – LDAP 請使用 Use Lightweight Directory Access Protocol (LDAP)。請參考 : • OpenLDAP • OpenLDAP Admin Guide in the openldap-guide 套件 • LDP: LDAP Linux HOWTO • LDP: LDAP Implementation HOWTO • OpenLDAP, extensive use reports • Open LDAP with Courier IMAP and Postfix ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.3 燒錄器 ATAPI/IDE 介面的燒錄器是越來越流行了。對於系統備份或是文件容量 < 640MB 的家用戶來說可是不錯的選擇。閱讀 LDP CD-Writing-HOWTO 能夠 得到更進階的資訊喔。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.3.1 簡介 首先,對於光碟片來說,燒錄器將資料寫入光碟片之後,已經無法回覆光 碟上的資料。如果預算不是問題,建議直接購買 SCSI 介面的燒錄器來取 代 ATAPI/IDE 介面的。如果要連接 IDE 裝置,請使用 PCI 匯流排(例如 ,在主機板上)而不要使用 ISA 匯流排( SB16 音效卡就是使用它) 如果您的燒錄器是 IDE 介面且 Kernel 為 2.2 或是 2.4 時,則需要 IDE-SCSI 來驅動燒錄功能。所以必須使用 SCSI 泛型驅動程式。底下有 兩種方法可以達成上述功能,假設使用的是較新版本的 Kernel(如 2001 年三月的版本)。 Kernel 2.6 能使用原本的 IDE 驅動程式來取代 IDE-SCSI 並直接使用 / dev/hdx 來存取 CD-RW 裝置。搭配 DMA 會更好。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.3.2 方法一:modules + lilo 如果您使用的是 Debian 所包裝的 kernel-image,請在 /etc/lilo.conf 中加入以下的字串。如果有多個選項請用空白分開: append="hdx=ide-scsi ignore=hdx" 燒錄器的裝置代號標示法為 hdx,其中的 x 代表以下的任一種硬體裝置 : hda for a master on the first IDE port hdb for a slave on the first IDE port hdc for a master on the second IDE port hdd for a slave on the second IDE port hde ... hdh for a drive on an external IDE port or ATA66/100 IDE port 完成上述設定之後,以 root 權限執行以下的命令: # lilo # shutdown -h now ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.3.3 方法二:recompile the kernel Debian 使用 make-kpkg 來產生 kernel image。執行 make-kpkg 並加入 --append_to_version 的參數能夠建立多種 kernel images。請參閱 Debian下的Linux核心, 第 7 章。 執行 make menuconfig 加入底下的 kernel 參數與設定: • bzImage • Exclude the IDE CD driver (not a must, but simpler to do this) • Compile in ide-scsi and sg, or make them modules ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.3.4 設定步驟 以下的步驟可讓系統在開機時啟動燒錄器: # echo ide-scsi >>/etc/modules # echo sg >>/etc/modules # cd /dev; ln -sf scd0 cdrom 手動啟動可以這樣做: # modprobe ide-scsi # modprobe sg 重新開機之後,您可以用下列方式檢查: $ dmesg|less # apt-get install cdrecord # cdrecord -scanbus [Per Warren Dodge] 如果系統同時存在 CD-ROM 以及 CD-R/RW 的話,有 時會造成 ide-scsi 和 ide-cd 的衝突。試著增加底下的設定到 /etc/ modutils/aliases 並執行 update-modules 和重新開機: pre-install ide-scsi modprobe ide-cd 這會使得 IDE 驅動程式比 ide-scsi 更早載入到核心。ide-cd 管理所有 的 ATAPI CD-ROM—被指明忽略的裝置除外。剩下的裝置才由 ide-scsi 來 控制。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.3.5 光碟映像檔 (可開機) 如何產生一個 target-directory/ 下所有資料的光碟映像檔: cd-image.raw (可開機, Joliet TRANS.TBL-enabled format; 如果不需 要光碟開機,拿掉 -b 和 -c 參數)?先將一片開機磁片放入軟碟機中並 執行 # dd if=/dev/fd0 target-directory/boot.img # mkisofs -r -V volume_id -b boot.img -c bootcatalog -J -T \ -o cd-image.raw target_directory/ 另一個方法是產生一個開機 DOS 映像檔。假設一個開機片映像檔放在 boot.img 之下,則當軟碟開機時,CD-ROM 也會被驅動。您可以藉由 freeDOS 來達成這些動作。 光碟映像檔可以當成 loop 裝置來掛載。 # mount -t iso9660 -o ro,loop cd-image.raw /cdrom # cd /cdrom # mc # umount /cdrom ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.3.6 寫錄到燒錄機上(R, RW): 先測試看看 (假設燒錄速度為兩倍) # nice --10 cdrecord -dummy speed=2 dev=0,0 disk.img 如果無誤,則燒錄到 CD-R 只需執行以下指令 # nice --10 cdrecord -v -eject speed=2 dev=0,0 disk.img 或是燒錄到 CD-RW 的片子上 # nice --10 cdrecord -v -eject blank=fast speed=2 dev=0,0 disk.img 對於某些 CD-RW 來說,陸續的指令會好 # nice --10 cdrecord -v blank=all speed=2 dev=0,0 disk.img 接續如下 # nice --10 cdrecord -v -eject speed=2 dev=0,0 disk.img 為了預防清除 CD-RW 光碟片時出現 SCSI timeouts,則以上兩個步驟是 必須的。而 nice 的值需要特別注意。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.3.7 產生一個光碟映像檔 有些版權光碟具有防拷的保護使得在使用 dd 時無法正確拷貝 ( Windows 98 便是其中之一 )。您可以試用 readcd 這個指令來拷貝,readcd 包含 在 cdrecord 套件之中。利用該軟體來複製光碟大綱以產生映像檔。如果 是資料光碟,請先掛載它,並執行 df 來查詢光碟大小。將得到的 blocks (1 block = 1024 bytes) 數目除以 2 來取得 sector 數目 (1 sector = 2048)。執行 readcd 並加入以下參數來建立映像檔並燒錄到 CD-R/RW。 # readcd dev=target,lun,scsibusno # select function 11 大部分來說,只要將以上三個參數皆設為 0 就可以了。通常 readcd 所 檢查出來的 sectors 數目都會過多!所以改用掛載時所產生的 block, sector 數目會比較好。 dd 對於光碟複製上可能會有些小問題。第一次執行 dd 時可能會產生錯 誤訊息且映像檔會失去最末端的資料。第二次執行 dd 時如果沒指定大小 ,可能會產生過大的映像檔,當然,這些過多的資料都是無用的。目前解 決的辦法是在執行第二次 dd 時指定正確的大小,第一次有錯誤時也不要 退出光碟。假設由 df 查出來的大小為 46301184 blocks,則執行以下指 令兩次來取得正確的映像檔大小。(以我的經驗來說) # dd if=/dev/cdrom of=cd.img bs=2048 count=$((46301184/2)) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.3.8 Debian 光碟映像檔 您可以在 Debian CD site 取得最新的 Debian 光碟訊息。 如果您有高速網路,則可以考慮網路安裝: • 部份 floppy images. • 一個 minimal bootable CD image. 如果您的網路不夠快,則可以考慮從 CD vendor 來購買 Debian 光碟。 除非您是映像檔測試者,否者請不要浪費頻寬來下載光碟映像檔(即使是 使用 jigdo)。 另一個值得注意的光碟映像檔為 KNOPPIX - Live Linux Filesystem On CD。您可以在光碟開機之後馬上擁有 Debian 系統而不需安裝到硬碟內。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.3.9 備份您的資料到 CD-R 如何備份重要的資料到 CD-R 呢?您可以採用備份 script "backup"。也 請留意拷貝及建立子目錄, 第 8.3 節以及差異備份與資料同步, 第 8.4 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.3.10 拷貝音樂光碟 我沒有測試過喔: # apt-get install cdrecord cdparanoia # cdparanoia -s -B # cdrecord dev=0,0,0 speed=2 -v -dao -eject defpregap=1 -audio *.wav 或是 # apt-get install cdrdao #disk at once # cdrdao read-cd --device /dev/cdrom --paranoia-mode 3 my_cd # read cd # cdrdao write --device /dev/cdrom --speed 8 my_cd # write a new CD cdrdao 能夠完整複製光碟(沒有音軌空隙,等...)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.3.11 燒錄 DVD-R,DVD-RW 和 DVD+RW 燒錄 DVD 光碟有兩種方式: • 使用 growisofs 並搭配 mkisofs。 • 請依照 file:///usr/share/doc/cdrecord/README.DVD.Debian 的說 明重新編譯 cdrecord 並加入 dvd 支援來產生本地端建立的套件。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4 X X Window 系統是由 Xfree86 所提供的。在 Debian 上有兩個主要版本的 X 伺服器: XFree86 版本 3.3(XF3) 以及 XFree86 版本 4.x(XF4);兩 者皆是以 X11R6 為基礎並由 X.Org 所建構。 了解 X 的基本概念,您可以閱讀 X(7), LDP XWindow-User-HOWTO, 以及 Remote X Apps mini-HOWTO。您可以閱讀 xfree86-common 套件中的 file:///usr/share/doc/xfree86-common/FAQ.gz,這是專對於 Debian 的設計的使用者指南。其中 Branden Robinson 有一些有趣並且有權威的 對 key binding 的討論。 X 伺服器, 第 9.4.3 節 此軟體將本地端主機的 X window 視窗或桌面顯示到使用者的螢幕 (CRT, LCD) 並接受鍵盤與滑鼠的輸入。 X clients, 第 9.4.4 節 與 X 相容的應用軟體,可以在本地端或是遠地端的主機執行。 這些正好與一般的 "server" 和 "client" 的觀念相反。 有幾種方法可以讓 "X server" (顯示端) 接受遠端連線的 "X client" (程式端): • xhost 方式 □ 主機列表機制 (很不安全)。 □ 未加密的協定 (易受到網路監聽攻擊)。 □ 如果可以,盡量不要使用。 □ 請參閱連接到遠端的X server – xhost, 第 9.4.7 節以及 xhost(1x)。 • xauth 方式 □ MIT magic cookie 機制 (不算安全,但比 xhost 安全多)。 □ 未加密的協定 (易受到網路監聽攻擊)。 □ 如果是本地端連線,建議採用,比 ssh -X 更省資源。 □ 請參閱在 X 裡取得 root, 第 9.4.12 節以及 xauth(1x)。 • xdm, wdm, gdm, kdm, ... 方式 □ MIT magic cookie 機制 (不算安全,但比 xauth 安全多)。 □ 請參閱 xdm(1x) 以及 Xsecurity(7) 來建立簡單的存取權限控 制。 □ 請參閱 wdm(1x), gdm(8), 和 kdm.options(5) 了解更多資訊。 □ 請閱讀自訂 RunLevel, 第 2.4.3 節來了解如何在不刪除 xdm 套件時取消 xdm 並回到系統啟動的終端機畫面。 • ssh -X 方式 □ 透過安全 shell 埠號轉送機制 (很安全)。 □ 加密的傳輸協定 (對於本地端使用簡直是浪費)。 □ 當遠端連線時,建議採用。 □ 請閱讀連線到遠端的 X server – ssh, 第 9.4.8 節。 以上所有遠地端連接 X 的方式,除了 ssh 之外,都需要設定 X server 啟動 TCP/IP 連線,請閱讀在TCP/IP的環境中使用X Window, 第 9.4.6 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4.1 X 套件 目前在 woody 上已經有許多 meta 套件能降低您安裝 X 系統的難度。 x-window-system-core 此 metapackage 提供最基本工作站使用的 X Window 系統。它提供 了 X 函式,X 伺服器 (xserver-xfree86),以及一些字型和基本的 X clients 與工具。 x-window-system 此 metapackage 提供大部分的 XFree86 計畫的 X Window System 元件,以及一套許多有名的附屬應用程式。(包含了 x-window-system-core、twm和xdm等組件,故安裝了它就不用再安裝 x-window-system-core了) xserver-common-v3 XFree86 3.x X 伺服器(X3)相關的軟體和工具。 xserver-* X3伺服器器軟體的額外套件,包含了支援對那些新的 X4 伺服器 (xserver-xfree86)不支援的硬體。如X4不支援某些老舊的ATI mach64卡,某些顯示卡在Woody版的X4中無法工作等等。(要獲得可 用的套件,可執行 apt-cache search xserver-|less。所有這些X3 伺服器均是基於xserver-common-v3的。) 大多數情況下,應該安裝x-window-system(如果要使用終端模式登入, 需停用xdm,詳細方法參閱「我不想直接啟動到 X!」, 第 8.1.4 節。) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4.2 X 的硬體偵測 在安裝系統之前只要先安裝以下軟體就能在配置 X 時偵測週邊硬體: • discover – 硬體偵測系統。 • mdetect – 滑鼠自動偵測工具。 • read-edid – VESA PnP 的硬體訊息監督器。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4.3 X 伺服器 請參閱 XFree86(1x) 了解更多 X 伺服器的資訊。 從本地的終端機開啟 X 伺服器的方式: $ startx -- : vtXX e.g.: $ startx -- :1 vt8 -bpp 16 ... start on vt8 connected to localhost:1 with 16 bpp mode --後面接的是 X 伺服器的參數。 注意,在使用~/.xserverrc script 來自訂 X 伺服器啟動時所開啟的軟 體時,請確定執行的是真正的 X 伺服器。如果沒這麼做會導致 X 伺服器 啟動過慢以及退出。例如: #!/bin/sh exec /usr/bin/X11/X -dpi 100 -nolisten tcp ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4.3.1 設定 X 伺服器 (Version 4) (重新)設定 XF4 伺服器, # dpkg-reconfigure --priority=low xserver-common # dpkg-reconfigure --priority=low xserver-xfree86 將會產生 /etc/X11/XF86Config-4 文件並使用 dexconf script 來設定 X。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4.3.2 設定 X 伺服器 (Version 3) (重新)設定 XF3 伺服器, # dpkg-reconfigure --priority=low xserver-common-v3 # dpkg-reconfigure --priority=low xserver-mach64 將會產生 /etc/X11/XF86Config 文件並使用 xf86config-3 script 來設 定 X。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4.3.3 手動設定 X 伺服器 在 Woody 系統上,修改/etc/X11/XF86Config-4時,請不要修改以下文字 間的設定 ### BEGIN DEBCONF SECTION [snip] ### END DEBCONF SECTION 正確的作法是將自訂的內容加在定義段落之前。例如,新增顯示卡,可在 設定檔開頭增加類似下面的內容: Section "Device" Identifier "Custom Device" Driver "ati" Option "NoAccel" EndSection Section "Screen" Identifier "Custom Screen" Device "Custom Device" Monitor "Generic Monitor" DefaultDepth 24 Subsection "Display" Depth 8 Modes "1280x960" "1152x864" "1024x768" "800x600" "640x480" EndSubsection Subsection "Display" Depth 16 Modes "1280x960" "1152x864" "1024x768" "800x600" "640x480" EndSubsection Subsection "Display" Depth 24 Modes "1280x960" "1152x864" "1024x768" "800x600" "640x480" EndSubsection EndSection Section "ServerLayout" Identifier "Custom" Screen "Custom Screen" InputDevice "Generic Keyboard" "CoreKeyboard" InputDevice "Configured Mouse" "CorePointer" EndSection 在 Sarge (本文撰寫時為testing )系統上,如果您想再升級時保留使用 者自訂/etc/X11/XF86Config的設定,請用 root 執行下列命令: # cp /etc/X11/XF86Config-4 /etc/X11/XF86Config-4.custom # md5sum /etc/X11/XF86Config-4 > /var/lib/xfree86/XF86Config-4.md5sum # dpkg-reconfigure xserver-xfree86 如果想美化字體,請依照在 X 的 TrueType 字型, 第 9.4.13 節的說明 來修改/etc/X11/XF86Config-4。 並檢查其餘的 X 設定。不良的螢幕設定可能會造成更多比難看字型的問 題,所以請調高您的螢幕更新頻率(85 Hz 不錯,75 Hz 還可以,60 Hz 就很糟了)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4.4 X clients 絕大多數的 X client 軟體都能用類似下面的命令啟動: client $ xterm -geometry 80x24+30+200 -fn 6x10 -display hostname:0 & 命令行中個參數的意義如下: • -geometry WIDTHxHEIGHT+XOFF+YOFF:視窗的初始尺寸與位置。 • -fn FONTNAME:用來顯示文字的字體。 FONTNAME 可以是: □ a14: 普通字體 □ a24: 大型字體 □ ... (使用xlsfont查詢可用的字體。) • -display displayname: X server 的名稱。 displayname 可以是: □ hostname:D.S表示在名為hostname的主機的螢幕 D 上顯示的稱 為 screen S;使用螢幕 D 的 X server 所間聽 TCP 埠號為 6000+D。 □ host/unix:D.S表示在host 主機的螢幕D上所顯示的稱為 screen S;使用螢幕 D 的 X server 所監聽 /tmp/.X11-unix/XD (所以 只能從主機 host 登入。 □ :D.S就是代表 host/unix:D.S,其中 host本地主機名稱。 預設的 X client 程式(應用端)的 displayname 可透過 DISPLAY 環境變 數來設定。例如,在執行某 X client 軟體之前,執行下列命令之一就可 以完成設定工作: $ export DISPLAY=:0 # 預設情況下,本地主機使用第一個 X screen $ export DISPLAY=hostname.fulldomain.name:0.2 $ export DISPLAY=localhost:0 軟體啟動程序可以在 ~/.xinitrc 中自定。例如: xrdb -load $HOME/.Xresources xsetroot -solid gray & xclock -g 50x50-0+0 -bw 0 & xload -g 50x50-50+0 -bw 0 & xterm -g 80x24+0+0 & xterm -g 80x24+0-0 & twm 如自定 X sessions, 第 9.4.5.1 節所提到的,startx 不理會 Xsession 所有的常規操作。通常使用 ~/.xsession 僅做為最後的辦法。請參閱 xsetroot(1x),xset(1x)以及X 資源, 第 9.4.10 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4.5 X sessions 啟動 X session (X server + X client) 的方式如下: • startx:文字介面下用來啟動 X server 與 client 的 xinit 指令 集。如果 ~/.xinitrc 不存在,擇/etc/X11/Xsession 會透過執行 / etc/X11/xinit/xinitrc 時呼叫。 • xdm, gdm, kdm, or wdm:X 顯示管理程式,用來啟動 X server 與 X client 且直接在 X 下控管帳號的登入。/etc/X11/Xsession 也會 被呼叫。 請參閱「我不想直接啟動到 X!」, 第 8.1.4 節了解從終端機啟動 X 的 資訊。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4.5.1 自定 X sessions 預設的啟動 script /etc/X11/Xsession是/etc/X11/Xsession.d/ 50xfree86-common_determine-startup 以及/etc/X11/Xsession.d/ 99xfree86-common_start 的組合。 /etc/X11/Xsession的執行會受到/etc/X11/Xsession.options的影響,基 本上,它使用exec命令執行系統中的程式,讀取的順序如下: ~/.xsession or ~/.Xsession,如果它被定義的話。 /usr/bin/x-session-manager,如果它被定義的話。 /usr/bin/x-window-manager,如果它被定義的話。 /usr/bin/x-terminal-emulator,如果它被定義的話。 Debian alternative 系統對這些命令有詳細的說明,請參閱 Alternative 指令, 第 6.5.3 節。例如: # update-alternatives --config x-session-manager ... or # update-alternatives --config x-window-manager 如果想定義某 X 視窗管理程式為預設,同時保留已安裝的GNOME和KDE的 session管理程式,可用http://bugs.debian.org/168347 中第二個錯誤 報告所附的檔案替換/etc/X11/Xsession.d/ 50xfree86-common_determine-startup(我希望它能早日加到發行版中) ,然後按下面的方法編輯/etc/X11/Xsession.options取消Xsession管理 程式: # /etc/X11/Xsession.options # # configuration options for /etc/X11/Xsession # See Xsession.options(5) for an explanation of the available options. # Default enabled allow-failsafe allow-user-resources allow-user-xsession use-ssh-agent # Default disabled (enable them by uncommenting) do-not-use-x-session-manager #do-not-use-x-window-manager 如果不想按照上述的方法修改系統,則gnome-session 以及 kdebase 所 附的 X session 管理程式就變成預設的了。移除掉他們的話,X 視窗管 理程式就變成預設的視窗管理程式。(廢話,還有更好的主意嗎?) 對於那些 /etc/X11/Xsession.options 只包含一行 allow-user-xsession 的系統而言,任何定義了~/.xsession 或 ~ /.Xsession的使用者均可以自行定義/etc/X11/Xsession的行為。 ~/.xsession 檔案中的最後一行命令,其格式應該為exec some-window/ session-manager,用來啟動您喜歡的 X 視窗/session 管理程式。 file:///usr/share/doc/xfree86-common/examples/xsession.gz 提供了 一個相當不錯的file:///usr/share/doc/xfree86-common/examples/ xsession.gz 範例。 我使用它來設定每一個使用者的視窗管理員,screen 存取以及語言支援 。請參閱針對使用者啟動 X Session, 第 9.4.5.2 節、在 X 裡取得 root, 第 9.4.12 節、多語系的 X 視窗系統範例, 第 9.7.9 節。 如果您希望某些 X client 軟體可以自動啟動,請參閱X clients, 第 9.4.4 節的範例並寫到~/.xsession來取代~/.xinitrc。 使用者新增的 X 資源(resources)可以儲存在~/.Xresources,請參閱X 資源, 第 9.4.10 節。 使用者自訂的鍵盤與滑鼠按鍵配置檔是存放在~/.xmodmaprc。請參閱 X 的按鍵和指標按鈕對應, 第 9.4.11 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4.5.2 針對使用者啟動 X Session 依照自定 X sessions, 第 9.4.5.1 節這一節所描述的,要啟動使用者自 訂的 X session/window manager 可透過安裝相對應的軟體並在 ~ /.xsession 的最後加入以下內容 (我偏好 blackbox/fluxbox 因為簡潔 快速。): • 預設的 X session manager □ 參閱 Alternative 指令, 第 6.5.3 節 □ exec /usr/bin/x-session-manager • 預設的 X window manager □ 參閱 Alternative 指令, 第 6.5.3 節 □ exec /usr/bin/x-window-manager • GNOME session manager (loaded) □ 須安裝的套件: gnome-session □ exec /usr/bin/gnome-session • KDE session manager (loaded) □ 須安裝的套件: kdebase (or kdebase3 for KDE3) □ exec /usr/bin/kde2 • Blackbox window manager (lightweight, slick) □ 須安裝的套件: blackbox □ exec /usr/bin/blackbox • Fluxbox window manager (lightweight, new blackbox) □ 須安裝的套件: fluxbox □ exec /usr/bin/fluxbox • Xfce window manager (Mac OS-X, SUN CDE–like) □ 須安裝的套件: xfce □ exec /usr/bin/xfwm • IceWM window manager (lightweight, GNOME alternative) □ 須安裝的套件: icewm □ exec /usr/bin/X11/icewm • FVWM2 virtual window manager (lightweight, Win95-like) □ 須安裝的套件: fvwm □ exec /usr/bin/fvwm2 • Windowmaker window manager (somewhat NexT-like) □ 須安裝的套件: wmaker □ exec /usr/bin/wmaker • Enlightenment window manager (loaded) □ 須安裝的套件: enlightenment □ exec /usr/bin/enlightenment 參閱 Window Managers for X. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4.5.3 配置 KDE/GNOME 要建立完整的 KDE/GNOME 桌面環境,下列的綜合套件是很有用的: • KDE: 安裝 kde 套件 • GNOME: 安裝 gnome 套件 使用能夠額外安裝 Recommends 的套件管理程式,如 dselect and aptitude,將會提供比 apt-get 更豐富的軟體供您選擇。 如果想從 console 登入,請確定先取消 X display managers,例如 kdm ,gdm以及wdm,這會影響「我不想直接啟動到 X!」, 第 8.1.4 節這一 節中所提及的關聯性問題。 如果您想使用 GNOME 取代 KDE 來當視窗管理程式的話,請參閱 Alternative 指令, 第 6.5.3 節的方法來設定 x-session-manager。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4.6 在TCP/IP的環境中使用X Window 因為遠端TCP/IP的連線是沒有經過加密的處理所以會有被竊聽的危險性存 在,因此在最近的幾個 Debian 版本中都會取消(disable)這個 TCP/IP socket。因此如果要遠端連線就必須使用 ssh 來建立連線(參閱連線到遠 端的 X server – ssh, 第 9.4.8 節 )。 這裡所使用的方法並不鼓勵您使用除非您所在的環境是一個在良好的防火 牆後方而且只有信任的使用者會使用的安全環境中。如果是這樣請用以下 的指令來設定您現在X server的設定。 # find /etc/X11 -type f -print0 | xargs -0 grep nolisten /etc/X11/xinit/xserverrc:exec /usr/bin/X11/X -dpi 100 -nolisten tcp 移除-nolisten讓X server回復對TCP/IP的監聽。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4.7 連接到遠端的X server – xhost xhost以主機名稱(hostnames)為權限設定是非常不安全的。如果一個TCP /IP socket的連線是被允許的,則以下的步驟將會取消主機(host)的 檢查並且允許從任何一個地方的連線。(參閱在TCP/IP的環境中使用X Window, 第 9.4.6 節): $ xhost + 你可以用以下的步驟再開啟主機的檢查: $ xhost - xhost 並不會區別在遠端主機上不同的使用者。並且主機名稱( hostnames)也可以被捏造。 如果你是在一個不被信任的網路中,這個方法必須避免使用,即使是在一 個高度限制的主機環境中(例如利用PPP撥接上網的環境中)。參閱 xhost(1x). ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4.8 連線到遠端的 X server – ssh ssh 能建立一道從本地端的 X server 到遠端的應用程式伺服器的安全連 線。 • 設定遠端主機的/etc/ssh/sshd_config設定檔,將 X11Forwarding 和 AllowTcpForwarding 的值設成 yes,這免除掉命令列啟動時需要 的相關參數。 • 啟動本地端主機的 X server。 • 在本地主機開啟一個 xterm 視窗。 • 執行 ssh 來建立與遠端站台的連線。 localname @ localhost $ ssh -q -X -l loginname remotehost.domain Password: ..... • 在遠端站台執行 X 應用程式指令。 loginname @ remotehost $ gimp & 這個方式允許輸出遠端的 X 用戶畫面,就像在本地端透過 UNIX domain socket 連接。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4.9 X 終端機模擬器 – xterm 學習 http://dickey.his.com/xterm/xterm.faq.html 中關於 xterm 的 所有東西。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4.10 X 資源 許多舊有的 X 程式使用 X 資源資料庫來設定他們的外觀,如 xterm。~ /.Xresources 用來儲存使用者資源明細。該檔在登入時會自動合併到預 設的 X 資源。系統預設的 X 資源是儲存在 /etc/X11/Xresources/*,應 用程式預設的資源檔是儲存在 /etc/X11/app-defaults/*。使用這些設定 來當作學習的起點。 這些是對妳的~/.Xresources有用的設定: ! Set the font to a more readable 9x15 XTerm*font: 9x15 ! Display a scrollbar XTerm*scrollBar: true ! Set the size of the buffer to 1000 lines XTerm*saveLines: 1000 ! Large kterm screen KTerm*VT100*fontList: -*-fixed-medium-r-normal--24-*,\ -*-gothic-medium-r-normal--24-*,\ -*-mincho-medium-r-normal--24-* 要即使改變設定的效果,執行底下指令合併它們到資料庫: xrdb -merge ~/.Xresources 參閱 xrdb(1x)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4.11 X 的按鍵和指標按鈕對應 xmodmap 程式用來編輯和顯示鍵盤修改表和按鍵對應表,用戶端程式用這 些表格來轉換 X 裡的按鍵代碼事件(event keycodes)成按鍵符號 (keysyms)。 $ xmodmap -pm ... 顯示目前的 modifier 表 $ xmodmap -pk | pager ... 顯示目前的鍵盤對應表 $ xmodmap -e "pointer = 3 2 1" # 設定滑鼠為左手慣用 $ xmodmap ~/.xmodmaprc # 讀取 ~/.xmodmaprc 設定鍵盤 這些通常用者的對話(session)啟動 script ,~/.xsession 中執行。 如何取得按鍵代碼(keycode), 在 X 執行 xev 並按下測試的鍵. 如何取 得按鍵符號(keysym)的意義, 查詢 /usr/include/X11/keysymdef.h 檔案 中的巨集定義。該檔中的 #define 敘述被命名為 XK_,這些 XK_ 是預留 給按鍵符號(keysym)的名稱. 參閱 xmodmap(1x). ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4.12 在 X 裡取得 root 如果一個 GUI 程式在執行時需要 root 特權,使用下列的步驟就能在使 用者的 X server 顯示程式的輸出。為了避免可能造成的安全性問題,千 萬不要嘗試直接從 root 帳號啟動 X server. 利用普通使用者啟動 X server 並開啟 xterm 主控台. 然後: $ XAUTHORITY=$HOME/.Xauthority $ export XAUTHORITY $ su root Password:***** # printtool & 當使用su 到非 root 使用者時, 確定 ~/.Xauthority 是允許群組讀取以 便該非 root 使用者可以讀取. 要自動化這些指令流程, 建立該使用者帳號的 ~/.xsession, 包含底下的 敘述: # This makes X work when I su to the root account. if [ -z "$XAUTHORITY" ]; then XAUTHORITY=$HOME/.Xauthority export XAUTHORITY fi unset XSTARTUP # If a particular window/session manager is desired, uncomment # the following and edit it to fit your needs. #XSTARTUP=/usr/bin/blackbox # This starts x-window/session-manager program if [ -z "$XSTARTUP" ]; then if [ -x /usr/bin/x-session-manager ]; then XSTARTUP=x-session-manager elif [ -x /usr/bin/x-window-manager ]; then XSTARTUP=x-window-manager elif [ -x /usr/bin/x-terminal-emulator ]; then XSTARTUP=x-terminal-emulator fi fi # execute auto selected X window/session manager exec $XSTARTUP 接著在該使用者的xterm視窗執行su (不是 su -). 現在起, GUI 程式從 這個xterm啟動的能夠在該使用者的 X 視窗顯示以 root 權限執行的程式 的輸出畫面. 這個技巧只要在預設的/etc/X11/Xsession被執行的情況下 成立. 如果一位使用者改用~/.xinitrc或~/.xsession來自定偏好,則上 述展示的環境變數 XAUTHORITY 需要以類似的 script 來設定. 另外, sudo 可用來自動化這些指令流程: $ sudo xterm ... or $ sudo -H -s 在這裡, /root/.bashrc 必須包含: if [ $SUDO_USER ]; then sudo -H -u $SUDO_USER xauth extract - $DISPLAY | xauth merge - fi 即使是該使用者的家目錄是 NFS 掛載的位置, 還是能正常運作, 因為 root 不需要讀取 .Xauthority 檔案. 還有幾個針對這個目的的套件: kdesu, gksu, gksudo, gnome-sudo 和 xsu. 其他方式可用來達成類似的結果: 建立 /root/.Xauthority 的符號 連結到使用者對應的位置; 使用sux 的 script; 或加入 "xauth merge~USER_RUNNING_X/.Xauthority" 到root 的初使 script. 更多訊息請參閱 debian-devel mailing list. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4.13 在 X 的 TrueType 字型 在 XFree86-4 ,標準的 xfs 和 TrueType 字型運作良好。如果你使用 XFree86-3 ,你必需安裝一 third-party 字型伺服器例如 xfs-xtt 。 你只需要去確認你要使用 TrueType 字型的任何應用程式是靠 libXft 或 libfreetype 連結(如果你是使用pre-compiled .debs,你大概不需要去 擔心 )。 首先設定字型支援基礎配備: • 安裝 x-ttcidfont-conf 和 defoma 套件。該套件會自動產生 fonts.scale 和 fonts.dir 檔案。 # apt-get install x-ttcidfont-conf • 編輯 /etc/X11/XF86Config-4 的 Section "Files" 部份如下 Section "Files" FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType" FontPath "/usr/share/fonts/truetype" FontPath "/usr/lib/X11/fonts/CID" FontPath "/usr/lib/X11/fonts/Speedo" FontPath "/usr/lib/X11/fonts/misc" FontPath "/usr/lib/X11/fonts/cyrillic" FontPath "/usr/lib/X11/fonts/100dpi:unscaled" FontPath "/usr/lib/X11/fonts/75dpi:unscaled" FontPath "/usr/lib/X11/fonts/Type1" EndSection 第一行將會安裝 XFree86 來使用任何你從 Debian 套件安裝的 TrueType 字型。自從 XFree86 支援較少 Type1 字型描繪,Type1的 字型目錄就放在比較後面了。 bitmap字型的 :unscaled 方法在新的 XF4 再也不需要,但我在這裡包含它只是做確認。 為了要保存手動修改 /etc/X11/XF86Config-4的部份,請接著手動設 定 X 伺服器, 第 9.4.3.3 節的指示。 然後安裝 DFSG 字型套件: • 西文 TrueType 字型: □ ttf-bitstream-vera:一套由 Bitstream, Inc創造的高品質 TrueType 字型。 [40] □ ttf-freefont:一套開放高品質 TrueType 字型包含了 UCS 字 元集。 □ ttf-thryomanes:一套 unicode 的 TrueType 字型,包含了 Latin, Greek, Cyrillic 和 IPA。 • 亞洲字型: □ tfm-arphic-bsmi00lp: Chinese Arphic "AR PL Mingti2L Big5" TrueType font TeX font metric data □ tfm-arphic-bkai00mp: Chinese Arphic "AR PL KaitiM Big5" TrueType font TeX font metric data □ tfm-arphic-gbsn00lp: Chinese Arphic "AR PL SungtiL GB" TrueType font TeX font metric data □ tfm-arphic-gkai00mp: Chinese Arphic "AR PL KaitiM GB" TrueType font TeX font metric data □ ttf-baekmuk: Korean Baekmuk 系列的 TrueType 字型 □ hbf-jfs56: Chinese Jianti Fangsong 56x56 bitmap font (GB2312) for CJK □ hbf-cns40-b5: Chinese Fanti Song 40x40 bitmap font (Big5) for CJK □ hbf-kanji48: Japanese Kanji 48x48 bitmap font (JIS X-0208) for CJK 自從 Free 字型有些限制開始,對 Debian 使用者來說,安裝或分享一些 商業性的 TrueType 字型變成一種選擇。為了要使這程序對使用者來說更 加容易,一些便利的套件被開發出來: • ttf-commercial • msttcorefonts (>1.1.0) [41] You'll have a really good selection of TrueType fonts at the expense of contaminating your Free system with non-Free fonts. 所有在 Debian 的字型套件應該能無痛使用且所有的 X 程式只要使用 "core" 字型系統,就應該能使用這些字型。這包含了像是 Xterm, Emacs, 和許多其他非 KDE 和非 GNOME 的應用程式。 現在,執行 xfontsel 並選擇任何在 fndry 選單的 TrueType 字型,你 應該能夠在 "fmly" 選單看到許多反灰階項目。 對 KDE2.2 和 GNOME1.4 (搭配 libgdkxft0 使得 GTK 1.2 能做出反鋸齒 的效果) ,同樣地,你需要安裝 Xft1。Xft1 是非常過時了,並且基本上 只有 GNOME1.4 和 KDE2.2 使用。輯編 /etc/X11/XftConfig 並增加一行 dir "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType" 在其它 "dir" 行之前。 [42] 針對 GNOME2 和 KDE3 (Sarge 之後的版本),您需要設定 fontconfig使 得 Xft2 能找到字型。 [43] 你不應該需要對這去安裝任何額外的東西, 因為每一使用 fontconfig 的套件已經 (間接地) 相依於 (Depends) 它 了。 首先,查閱 /etc/fonts/fonts.conf。應該有類似下面這一行。如果沒有 ,修改 /etc/fonts/local.conf 並增加 /var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType 只要在 這一行之後即可。 Fontconfig 應該能直接取得字型資訊,"fc-list" 應該能列出您的新字 型。另一 fontconfig 的特色是你可以僅在~/.fonts/ 中停用字型,而所 有字型設定程式能夠即時接受更動。 如果你在 X 下手動安裝非 Debian 套件的新 TrueType 字型,請執行 # xset fp rehash 使得 XFree86 重新查詢目錄的內容並產生新的資料。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4.14 在 X 中的網頁瀏覽器 在 Woody 發行版本中,納入了一些解析影像功能的網頁瀏覽器套件: • mozilla Mozilla 瀏覽器 (新增的) • galeon 以 Mozilla 為基礎,套用 Gnome UI 的瀏覽器 (新增的) • konqueror KDE b瀏覽器 • dillo GTK 瀏覽器 • amaya-gtk W3C 參考瀏覽器 • amaya-lesstif W3C 參考瀏覽器 • netscape-... (很多,舊式的) • communicator-... (很多,舊式的) • ... mozilla 這個版本需要符合 galeon 所需要的版本。雖然他們在 UI 中不 同,這兩個程式共用 Gecko HTML 的描繪引擎。 瀏覽器的外掛程式,例如 mozilla 和 galeon 可以靠著安裝 "*.so" 到 plug-in 目錄和重新啟動瀏覽器來生效。 外掛程式資源: • Java 外掛程式:安裝 http://java.sun.com 的 "J2SE" 二源碼。 • Flash 掛外程式:安裝 http://www.macromedia.com/software/ flashplayer/ 的 "Macromedia Flash Player 5" 二源碼。 • freewrl:VRML 瀏覽器和 Netscape 外掛程式 • ... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.5 SSH SSH (Secure SHell) 是連接網際網路的一個安全方式。Debian 納入的 free 的 SSH 版本為 OpenSSH,由 ssh 套件取得。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.5.1 SSH 的基礎 首先,安裝 OpenSSH 伺服器和用戶端程式。 # apt-get update && apt-get install ssh 如果妳需要啟動 OpenSSH 伺服器,請移除 /etc/ssh/ sshd_not_to_be_run。 SSH 有兩種認證的協定: • SSH 協定版本 1: □ Potato 發行版本只支援該協定。 □ 可使用的認證方式: ☆ RSAAuthentication: 以 RSA identity key 為主的使用者 認證 ☆ RhostsAuthentication: 以 .rhosts 的主機認證 (不安全, 預設為取消) ☆ RhostsRSAAuthentication: .rhosts 認證與 RSA host key 的結合(預設為取消) ☆ ChallengeResponseAuthentication: RSA challenge-response authentication ☆ PasswordAuthentication: 密碼為主的認證 • SSH 協定版本 2: □ Woody 發行版本主要使用該協定。 □ 可使用的認證方式: ☆ PubkeyAuthentication: 以 public key 為主的使用者認證 ☆ HostbasedAuthentication: 以 .rhosts 或 /etc/ hosts.equiv 並結合 public key 的用戶主機認證 (預設為 取消) ☆ ChallengeResponseAuthentication: challenge-response authentication ☆ PasswordAuthentication: 密碼為主的認證 請特別注意這些差異,尤其是轉換到 Woody 或使用其他非 Debian 的系 統。 詳情請參閱 /usr/share/doc/ssh/README.Debian.gz, ssh(1), sshd(8), ssh-agent(1), 和 ssh-keygen(1)。 底下是主要的設定檔案: • /etc/ssh/ssh_config: 預設的 SSH 用戶端設定檔。參閱 ssh(1). 注意項目: □ Host: 限制符合匹配條件所指定的 (直到下一個 Host 保留字) 主機 □ Protocol: 指定 SSH 的協定版本。預設為 "2,1"。 □ PreferredAuthentications: 指定 SSH2 用戶端認證方式。預設 為 "hostbased,publickey,keyboard-interactive,password"。 □ PasswordAuthentication: 如果妳想採用密碼登入,妳必須確定 該欄的值不是 no。 □ ForwardX11: 預設為取消。執行指令時加入 "-X" 參數可強制啟 動。 • /etc/ssh/sshd_config: 預設的 SSH 伺服器設定檔。參閱 sshd(8). 注意項目: □ ListenAddress: 指定 sshd 監聽的本地端位址。多個值是可允 許的。 □ AllowTcpForwarding: 預設為取消。 □ X11Forwarding: 預設為取消。 • $HOME/.ssh/authorized_keys: 該列表為用戶端以該帳號連接到主機 的公開金鑰(public key)。參閱 ssh-keygen(1)。 • $HOME/.ssh/identity: 參閱 ssh-add(1) 和 ssh-agent(1). 底下的命令會從用戶端建立 ssh 連線。 $ ssh username@hostname.domain.ext $ ssh -1 username@hostname.domain.ext # Force SSH version 1 $ ssh -1 -o RSAAuthentication=no -l username foo.host # force password on SSH1 $ ssh -o PreferredAuthentications=password -l username foo.host # force password on SSH2 對使用者而言,ssh 功能會比 telnet 聰明和安全 (將不會有 ^] 問題) 。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.5.2 Port forwarding for SMTP/POP3 tunneling 如果妳想建立一個從本地端埠號 4025, 連接遠端伺服器埠號 25 的管線, 以及透過ssh從本地端埠號 4110 遠端伺服器埠號110, 請在本地主機執 行: # ssh -q -L 4025:remote-server:25 4110:remote-server:110 \ username@remote-server 在網際網路上, 這是安全建立連線到 SMTP/POP3 伺服器的方式. 設定遠 端主機的 /etc/ssh/sshd_config 檔案中 AllowTcpForwarding 項目, 將 其值填入 yes. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.5.3 以少許密碼連線 – RSA 使用 RSAAuthentication (SSH1 protocol) 或 PubkeyAuthentication (SSH2 protocol) 可免去記憶每一台遠端主機的登入密碼. 在遠端的系統上, 個別設定 /etc/ssh/sshd_config 檔案中的 "RSAAuthentication yes" 或 "PubkeyAuthentication yes". 然後在本地產生認證金鑰並安裝公開金鑰到遠端主機: $ ssh-keygen # RSAAuthentication: RSA1 key for SSH1 $ cat .ssh/identity.pub | ssh user1@remote \ "cat - >>.ssh/authorized_keys" ... $ ssh-keygen -t rsa # PubkeyAuthentication: RSA key for SSH2 $ cat .ssh/id_rsa.pub | ssh user1@remote \ "cat - >>.ssh/authorized_keys" ... $ ssh-keygen -t dsa # PubkeyAuthentication: DSA key for SSH2 $ cat .ssh/id_dsa.pub | ssh user1@remote \ "cat - >>.ssh/authorized_keys" 執行 "ssh-keygen -p" 後可更改通關密碼. 記得測試連線以驗證設定正 確. 為避免問題, 使用 "ssh -v". 妳可增加額外的選項到authorized_keys項目來限制主機並指定特定指令. 詳情參閱 sshd(8). 注意, SSH2 支援 HostbasedAuthentication. 為了使它運作, 妳必須更 改伺服器機器上的/etc/ssh/sshd_config檔案, 將 HostbasedAuthentication 設定成 yes,或者設定在用戶端機器上的 $HOME/.ssh/config 檔案. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.5.4 與不同的 SSH 用戶端程式溝通 還有其他非 Unix-like 平台的 free SSH 用戶端程式. Windows puTTY (GPL) Windows (cygwin) SSH in cygwin (GPL) Macintosh Classic macSSH (GPL) [注意, Mac OS X 有內建 OpenSSH; 使用 Terminal application 中的 ssh] 也請參閱 SourceForge.net, site documentation,"6. CVS Instructions". ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.5.5 設定 ssh-agent 設定通關密語來保護妳的 SSH 認證金鑰是比較安全。如果尚未設定,執 行ssh-keygen -p來設定它。 以以少許密碼連線 – RSA, 第 9.5.3 節描述的密碼為主的方式連線到遠 端主機,將你的公開金鑰(例如:~/.ssh/id_rsa.pub)放在遠端主機的~ /.ssh/authorized_keys。 $ ssh-agent bash # 或改執行 zsh/tcsh/pdksh 程式 $ ssh-add ~/.ssh/id_rsa Enter passphrase for /home/osamu/.ssh/id_rsa: Identity added: /home/osamu/.ssh/id_rsa (/home/osamu/.ssh/id_rsa) $ scp foo user@remote.host:foo ... no passphrase needed from here on :-) $^D ... terminating ssh-agent session 針對 X server 而言,正常的 Debian 啟動的 script 會執行 ssh-agent 來當父程式。所以你只需要執行 ssh-add 一次。 更多訊息請參閱 ssh-agent(1) 和 ssh-add(1)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.5.6 SSH 錯誤解決 如果你遇到問題,檢查設定檔的權限並加入"-v"參數來執行 ssh。 當你是 root 且有防火牆上的問題,改使用"-P"參數;這會避免使用伺服 器的1–1023的埠號。 如果連線到遠端站台的ssh連線突然失效,它可能是系統管理者在測試的 關係,大部份在系統維護時改變host_key的值。確定是這個原因造成的而 非他人試著駭入並竄改遠端主機的名稱,則移除掉本地端的$HOME/.ssh/ known_hosts的host_key項目就能重獲得連線。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.6 Mail 郵件設定可分成三個種類: • 郵件傳送代理(MTA):exim4, exim, postfix, sendmail, qmail, ssmtp, nullmailer, ... • 郵件工具:procmail, fetchmail, mailx, crm114, ... • 郵件用戶代理(MUA):mutt, emacs+gnus, ... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.6.1 郵件傳送代理 (MTAs) 針對全功能的 MTA 來說,使用 Woody 中的 exim 和 Sarge 中的 exim4 。 [44] 參考文件: • 針對 exim 的 exim-doc 和 exim-doc-html 套件 • 針對 exim4 的 exim4-doc-info 和 exim4-doc-html • http://www.exim.org/ 如果妳考量安全性,另一個可以接受的 MTA 是 postfix。sendmail和 qmail都納入 Debian 套件庫中,但不推薦。 如果妳的隨身系統,例如筆記型電腦不需要 MTA 的 relay 功能,那麼妳 可考慮使用這些輕量級的套件: • ssmtp:需要 SMTP 連線且支援別名,或者 • nullmailer:可spool但不支援別名。 在寫本文時,我發現 exim 更適合我的工作電腦--筆記型電腦。 安裝底下不相容 exim 的套件時,妳就必須移除 exim: # dpkg -P --force-depends exim # apt-get install nullmailer # 或 ssmtp ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.6.1.1 Smarthost 如果您的網路連線是消費性質的,如撥接型,而您想使用 exim4 或 exim 在您的主機上,請先確認送出的郵件是透過 ISP 或其他供應商提供的 smarthost 機制。 [45] 有許多好處: • ISP 的 smarthost 通常有更可靠的連線使得 SMTP 重複寄送郵件。 • 動態 IP寄出的郵件可避免被當作撥接的 spam 列表。 • 節省寄出多個收件者的郵件的頻寬。 唯一可想到的壞處是: • 您的 ISP SMTP 服務如果出問題時的緊急救援處理。 • 用來授課講解的實驗。 • 您的主機是工作用網路伺服器。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.6.1.2 Exim 基本設定 為了讓 exim4 或 exim 成為您的 MTA,請設定底下的檔案: /etc/exim/exim.conf 執行 "eximconfig" 來建立和編輯 (exim) /etc/exim4/* 執行 "dpkg-reconfigure exim4-config" 來建立和編輯 (exim4) /etc/inetd.conf 註解 smtp 的敘述使 exim 能獨立運行 /etc/email-addresses 加入改寫郵件來源位置的列表 執行 exim4 或 exim 並加入 -brw, -bf, -bF, -bV, ... 等參數可用來 檢查分析器。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.6.1.3 在 Exim 下設定不存在的電郵位址的垃圾桶 在 /etc/exim/exim.conf (Woody 或更新的版本) 的 DIRECTORS 部份, 在最後的地方 (localuser: director 之後) 加入清潔指揮器來處理該指 揮器無法反解的位址 (per Miquel van Smoorenburg): catchall: driver = smartuser new_address = webmaster@mydomain.com 如果需要了解每個 Virtual Domain 詳細的處理方式,請在 /etc/exim/ exim.conf 加入底下的敘述(這對我有用但沒完整測試過): *@yourdomain.com ${lookup{$1}lsearch*{/etc/email-addresses} \ {$value}fail} T 然後加入 "*" 項目到 /etc/email-addresses。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.6.1.4 在 Exim 下設定寄出郵件的位址重寫 寄出郵件的位址重寫會產生適當的 "From:" 標頭,使用 exim 能輕鬆達 成該功能。只要設定 /etc/exim/exim.conf 檔案最後的部份: *@host1.something.dyndns.org \ "${if eq {${lookup{$1}lsearch{/etc/passwd}{1}{0}}} {1} \ {$0}{$1@something.dyndns.org}}" frFs 這將會重寫所有符合 *@host1.something.dyndns.org 的位址。 1. 它搜尋 /etc/password 檔案中的使用者 ($1) 是否為本機帳號。 2. 如果是,將會重寫位址中 ($0) 帳號所在的部份。 3. 如果不是,則重寫網域的部份。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.6.1.5 在 Exim 下設定 SMTP 認證 部份 SMTP 服務如 yahoo.com 需要 SMTP 認證才能寄信。設定 /etc/ exim/exim.conf 如下所示: remote_smtp: driver = smtp authenticate_hosts = smtp.mail.yahoo.com ... smarthost: driver = domainlist transport = remote_smtp route_list = "* smtp.mail.yahoo.com bydns_a" ... plain: driver = plaintext public_name = PLAIN client_send = "^cmatheson3^this_is_my_password" 不要忘記最後一行的雙引號喔。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.6.2 擷取信件l – Fetchmail fetchmail 是一套以 daemon 模式運行的郵件擷取軟體。它會透過 ISP 來擷取 POP3 帳號的郵件到本地端的郵件系統。設定檔案: /etc/init.d/fetchmail /etc/rc?.d/???fetchmail 預設以優先權 30 來執行 update-rc.d fetchmail /etc/fetchmailrc 設定檔 (權限 600,擁有者為 fetchmail) Potato 版本中,敘述如何從 init.d script 以 daemon 模式啟動 fetchmail 是錯誤的(Woody 已經修正)。參閱 example scripts 的 /etc /init.d/fetchmail 和 /etc/fetchmailrc 檔案。 如果您的郵件標頭因為 ISP 的郵件程式增加了 ^M 符號,請加入 "stripcr" 參數到 $HOME/.fetchmailrc: options fetchall no keep stripcr ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.6.3 處理郵件 – Procmail procmail 是本地端郵遞和分析程式。使用者必須先建立 $HOME /.procmailrc 才能使用它。範例:_procmailrc ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.6.4 使用 crm114 來處理垃圾郵件 crm114 套件提供了 /usr/share/crm114/mailfilter.crm script,該 script 是以 CRM114 所撰寫而且題攻了一個非常有效的垃圾信分析器, 餵垃圾信給它就能訓練其處理能力。 CRM114 是一套小和用來設計分析器的語言。搭配 grep 能發揮出更大的 功能。參閱 crm(1)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.6.5 閱讀郵件 – Mutt 使用 mutt 搭配 vim 來當作郵件用戶代理 (MUA)。請設定 ~/.muttrc; 例如: # use visual mode and "gq" to reformat quotes set editor="vim -c 'set tw=72 et ft=mail'" # # header weeding taken from the manual (Sven's Draconian header weeding) # ignore * unignore from: date subject to cc unignore user-agent x-mailer hdr_order from subject to cc date user-agent x-mailer auto_view application/msword .... 加入底下的敘述到 /etc/mailcap 或 $HOME/.mailcap 來顯示 HTML 郵件 和 MS Word 夾檔: text/html; lynx -force_html %s; needsterminal; application/msword; /usr/bin/antiword '%s'; copiousoutput; description="Microsoft Word Text"; nametemplate=%s.doc ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.7 Localization (l10n) Debian 是國際化的,支援越來越多的語言和區域使用規則。下一節列出 目前 Debian 支援不同語言的差異性,下下一節則討論 localization, 自訂您工作環境的步驟,允許目前選擇語言的輸入和輸出和日期規則,數 字和貨幣格式以及不同於其他區域的差異。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.7.1 localization 的基礎 有許多不同的方式來自定 localization 和國際語言的支援。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.7.1.1 Localizing 鍵盤 Debian 發行版本支援了將近兩打的鍵盤對應表。在 Woody 系統,執行底 下指令重新設定鍵盤: • dpkg-reconfigure --priority=low console-data # console • dpkg-reconfigure --priority=low xserver-xfree86 # XF4 • dpkg-reconfigure --priority=low xserver-common-v3 # XF3 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.7.1.2 Localizing 資料檔案 過半數以上的 Debian 軟體支援處理非美國 ASCII 字元的資料,透過 glibc 的 locale 所提供的 LC_CTYPE 環境變數。 • 8-bit clean:幾乎所有的程式 • 其他 Latin 字元集(例如 ISO-8859-1 or ISO-8859-2):半數以上的 程式 • 雙位元組(multibyte)語言,例如中文、日文、韓文:許多新程式 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.7.1.3 Localizing 顯示 X 能顯示任何編碼,包括 UTF-8並支援所有字型。該列表不只支援 8-bit 字型也包括 16-bit 字型,例如中文、日文和韓文。雙位元組字元輸入法 是透過其他的 X 輸入法, 第 9.7.10 節技術達到輸入的功能。參閱多語 系的 X 視窗系統範例, 第 9.7.9 節和支援 UTF-8 的 X 終端機, 第 9.7.12 節。 日文 EUC 代碼也能在 (S)VGA graphics 主控台下透過 kon2 顯示。目前 有另一個新的日文顯示套件--jfbterm,也是利用 frame-buffer 主控台 。在這些主控台環境,日文輸入法必須仰賴軟體的提供。使用 egg 套件 搭配 Emacs 和日文化的 jvim 來使用 Vim 環境。 安裝非 Unicode 字型到 X 就能在 X 下顯示任何編碼的文件。所以不用 太擔心字型的編碼問題。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.7.1.4 Localizing 訊息和文件 許多的文字訊息和文件已經翻譯好並納入 Debian 系統,例如錯誤訊息, 標準的程式輸出,選單和說明文件。目前說明文件支援的語言有--日文、 西班牙文、芬蘭文、法文、匈牙利文、義大利文、日文、韓文、波蘭文、 葡萄牙文、中文和俄羅斯文,只要安裝manpages-LANG(LANG 是一個以逗 號分隔的兩個字母的 ISO 國家代碼列表,執行 apt-cache search manpages-|less 來取得系統提供的 Unix 說明文件) 套件就能取得。 要存取 NLS 說明文件,使用者必須設定 LC_MESSAGE 環境變數。例如, 以義大利文的說明文件來說,LC_MESSAGE 必須設定成 it。man program 將會搜尋 /usr/share/man/it/ 底下的義大利文的說明文件。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.7.2 Locales Debian 支援 locale 機制。 Locale 是一套允許程式提供適合的輸出和 對應協定功能的技術,例如字元集、日期和時間格式、貨幣符號...等。 它使用環境變數來決定適合的作法。舉例來說,假設您安裝了美式英文和 德文的區域資料到系統,許多程式的錯誤訊息可變成多語言化: $ LANG="en_US" cat foo cat: foo: No such file or directory $ LANG="de_DE" cat foo cat: foo: Datei oder Verzeichnis nicht gefunden Glibc 的功能以函式提供給程式呼叫。參閱 locale(7)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.7.3 locales 簡介 完整的 locale 描述包含三個部份:xx_YY.ZZZZ。 • xx:ISO 639 語言代碼(英文小寫) • YY:ISO 3166 國家代碼(英文大寫) • ZZZZ:代碼集合,也就是字元集或編碼標示? 關於語言代碼和國家代碼,請參閱info gettext中的相關敘述。 請注意這個代碼集合部份可能被"內部標準化",為了完成跨平台的相容性 ,移除所有的-和轉換所有的字元為英文小寫。典型的代碼集合為: • UTF-8:符合所有區域的萬國碼,大部份是 1-3 個八字元組成(new de facto standard) • ISO-8859-1: western Europe (de facto old standard) • ISO-8859-2: eastern Europe (Bosnian, Croatian, Czech, Hungarian, Polish, Romanian, Serbian, Slovak, Slovenian) • ISO-8859-3: Maltese • ISO-8859-5: Macedonian, Serbian • ISO-8859-6: Arabic • ISO-8859-7: Greek • ISO-8859-8: Hebrew • ISO-8859-9: Turkish • ISO-8859-11: Thai (=TIS-620) • ISO-8859-13: Latvian, Lithuanian, Maori • ISO-8859-14: Welsh • ISO-8859-15: western Europe with euro • KOI8-R: Russian • KOI8-U: Ukrainian • CP1250: Czech, Hungarian, Polish (MS Windows origin) • CP1251: Bulgarian, Byelorussian (MS Windows origin) • eucJP: Unix style Japanese (=ujis) • eucKR: Unix style Korean • GB2312: Unix style Simplified Chinese (=GB, =eucCN) for zh_CN • Big5: Traditional Chinese for zh_TW • sjis: Microsoft style Japanese (Shift-JIS) As for the meaning of basic encoding system jargons: • ASCII: 7 bits (0-0x7f) • ISO-8859-?: 8 bits (0-0xff) • ISO-10646-1: Universal Character Set (UCS) (31 bits, 0-0x7fffffff) • UCS-2: First 16 bit of UCS as straight 2 Octets (Unicode: 0-0xffff) • UCS-4: UCS as straight 4 Octets (UCS: 0-0x7fffffff) • UTF-8: UCS encoded in 1-6 Octets (mostly in 3 Octets) • ISO-2022: 7 bits (0-0xff) with the escape sequence. ISO-2022-JP is the most popular encoding for the Japanese e-mail. • EUC: 8 bits + 16 bits combination (0-0xff), Unix style • Shift-JIS: 8 bits + 16 bits combination (0-0xff), Microsoft style. ISO-8859-?, EUC, ISO-10646-1, UCS-2, UCS-4, 和 UTF-8 共用同一個 7-bit ASCII 字元代碼。 EUC 或 Shift-JIS 使用 high-bit 字元 (0x80-0xff)來指示部份的編碼是 16-bit。UTF-8 也是使用 high-bit 字 元(0x80-0xff) 來指示非 7-bit 字元序列位元組而這也是大部分編碼完 整的系統處理非 ASCII 字元的方式。 請注意 Unicode 實作位元組順序的差異: • Standard UCS-2, UCS-4: big endian • Microsoft UCS-2, UCS-4: little endian for ix86 (針對特定機 器) 字元集的轉換請參閱利用 recode 來轉換文字檔, 第 8.6.12 節。更多訊 息請參閱 Introduction to i18n。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.7.4 啟動 locale 支援 Debian 不預先編譯所有的 locales。/usr/lib/locale 目錄下的 locales 資料(包含預設的 "C")是針對您的系統編譯出來的。如果您預期 的 locale 並不存在,您有兩個作法: • 編輯 /etc/locale.gen 加入想要的 locale,然後以 root 權限執行 locale-gen 來編譯它。參閱 locale-gen(8) 和 "SEE ALSO" 段落的 說明文件。 • 執行 dpkg-reconfigure locales 來重新設定 locales 套件。如果 尚未安裝,安裝 locales 套件會呼叫 debconf 介面讓您選擇需要的 locales 並編譯該資料庫。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.7.5 啟動特定的 locale 底下的環境變數設定步驟是針對程式給予特定的 locale 資訊: 1. LANGUAGE:該環境變數包含了依照優先權順序的冒號分隔的 locale 名稱列表。只有在 POSIX locale 被設定成非 "C" 以外的值才使用 它[在 Woody 是這樣;Potato 發行版本 LANGUAGE 優先權總是高於 POSIX locale]。(GNU 擴充) 2. LC_ALL:如果非空的,則該值會套用在所有的 locale 分類 (POSIX.1)。通常是 ""(空的)。 3. LC_*:如果非空的,則該值會套用在對應的分類(POSIX.1)。通常是 "C"。 LC_* 變數是: □ LC_CTYPE:字元分類和大小寫轉換。 □ LC_COLLATE:字母字串順序比較。 □ LC_TIME:日期和時間格式。 □ LC_NUMERIC:非貨幣的數字格式。 □ LC_MONETARY:貨幣格式。 □ LC_MESSAGES:偵錯訊息和交談回應訊息的格式。 □ LC_PAPER:紙張大小。 □ LC_NAME:姓名格式。 □ LC_ADDRESS:地址格式和位置資訊。 □ LC_TELEPHONE:電話號碼格式。 □ LC_MEASUREMENT:度量衡單位 (Metric or Other)。 □ LC_IDENTIFICATION:辨識 locale 資訊的資料。 4. LANG:如果非空的且 LC_ALL 未定義,該值會套用在所有的 LC_* 分 類,其值也是未定義的。(POSIX.1) 通常是 "C"。 注意,有些程式(如 Netscape 4)會忽略 LC_* 的設定。 locale 程式能顯示目前使用的 locale 設定和可獲得的 locales 資料; 參閱 locale(1)。(注意:locale -a 列出系統支援的 locale;這並不表 示所有的資料都編譯好!參閱啟動 locale 支援, 第 9.7.4 節。) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.7.6 ISO 8601 日期格式 locale locale 支援國際時間標準--yyyy-mm-dd(ISO 8601 日期格式),是由 en_DK "English in Denmark" 這個 locale 所提供,然而,這有些好笑 :-) 這看來只能夠用在主控台畫面下執行ls的時候。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.7.7 US (ISO-8859-1) 的範例 加入底下的敘述到 ~/.bash_profile: LC_CTYPE=en_US.ISO-8859-1 export LC_CTYPE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.7.8 France with Euro sign (ISO-8859-15) 加入底下的敘述到 ~/.bash_profile: LANG=fr_FR@euro export LANG LC_CTYPE=fr_FR@euro export LC_CTYPE 按照Localizing 鍵盤, 第 9.7.1.1 節設定法式鍵盤--"AZERTY";安裝 manpages-fr套件加入法文說明文件。US 的 Right-Alt 鍵在歐洲被稱為 Alt-Gr。按下該組合鍵和其他按鍵後會產生許多特別的腔調字元。例如, Alt-Gr+E 會產生 Euro 記號。 大部分的西歐語系也是同樣的設定方式。 參閱 Debian Euro HOWTO 來加入歐洲新的貨幣格式。法文的更多訊息請 參閱 Utiliser et configurer Debian pour le francais 。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.7.9 多語系的 X 視窗系統範例 讓我們來建立一個多語系的 X 視窗環境且同時支援日文,英文,德文和 法文以及不同終端機下支援 EUC, UTF-8 和 ISO-8859-1 的編碼。 我將會展示如何自訂 Debian 選單系統。參閱 file:///usr/share/doc/ menu/html/index.html 的 Debian 選單系統。我也會示範建立一個 mozilla 網頁瀏覽器捷徑。 [46] • 使用 Localization (l10n), 第 9.7 節章節所提及的方式加入日文 ja_JP.eucJP 的 locale 和其他需要的 locale 資料。(全部) • 安裝 Kana-to-Kanji 轉換系統和字典 (針對日文語系): □ canna – 本地端伺服器 ("free-beer" license),或 □ freewnn-jserver – 加入網路功能的伺服器 (Public Domain) • 安裝日文輸入法系統 (針對日文語系): □ kinput2-canna – X 下或 □ kinput2-canna-wnn – X 下和 □ egg – 在主控台下就能搭配 Emacsen 直接輸入日文(額外的) • 安裝相容的終端機 (針對所有語系): □ xterm – X (支援 ISO-8859-1 and UTF-8), □ kterm – X (支援日文 EUC),和 □ mlterm – X (支援多語系)。 • 加入所有日文字體套件。(針對所有語系) • 依照自定 X sessions, 第 9.4.5.1 節章節提及的方式,建立 ~ /.xsession 並設定使用者專屬的 X 環境(針對所有語系): #!/bin/sh # This makes X work when I su to root. if [ -z "$XAUTHORITY" ]; then XAUTHORITY=$HOME/.Xauthority export XAUTHORITY fi # Set specific environment through debian menu system. # Reset locale unset LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES unset LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT unset LC_IDENTIFICATION LC_ALL LANG LANGUAGE PAGER # set locale default in X LANG=C # export locale export LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES export LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT export LC_IDENTIFICATION LC_ALL LANG LANGUAGE PAGER ### # activate input method for Japanese with kinput2 kinput2 & XMODIFIERS="@im=kinput2" export XMODIFIERS # How about blackbox window manager (lightweight) exec blackbox #exec xfwm #exec wmaker • 針對 Linux 主控台設定 ~/.bash_profile 的 locale 資訊 (針對所 有語系)。 • 移除 ~/.bashrc 已有的 locale 設定 (針對所有語系)。 • 建立新的檔案到/etc/menu/(針對所有語系)。 □ /etc/menu/xterm-local:(加入新項目到選單) [47] ?package(xterm):\ needs=x11\ section=XShells\ longtitle="XTerm: terminal emulator (en_US.ISO-8859-1)"\ title="XTerm (en_US.ISO-8859-1)"\ command="sh -c 'LC_ALL=en_US.ISO-8859-1 xterm'" ?package(xterm):\ needs=x11\ section=XShells\ longtitle="XTerm: terminal emulator (de_DE.ISO-8859-1)"\ title="XTerm (de_DE.ISO-8859-1)"\ command="sh -c 'LC_ALL=de_DE.ISO-8859-1 xterm -T xterm-de'" ?package(xterm):\ needs=x11\ section=XShells\ longtitle="XTerm: terminal emulator for X with Unicode support (Japanese)"\ title="UXTerm (ja_JP.UTF-8)"\ command="sh -c 'LC_ALL=ja_JP.UTF-8 uxterm'" □ /etc/menu/kterm:(強制複寫系統預設) [48] ?package(kterm):\ needs="x11"\ section="XShells"\ command="sh -c 'LC_ALL=ja_JP.eucJP PAGER=w3m /usr/X11R6/bin/kterm -xim'" \ title="Kanji Terminal" ?package(kterm):\ needs="x11"\ section="XShells"\ command="sh -c 'LANG=ja_JP.eucJP \ LC_MESSAGES=en_US.ISO-8859-1 PAGER=w3m /usr/X11R6/bin/kterm -xim'" \ title="Kanji Terminal (bilingal)" □ /etc/menu/mozilla-local:(加入新捷徑) [49] ?package(mozilla-browser):needs="x11" section="/" \ title=" Mozilla Navigator" command="mozilla-1.5" hints="Web browsers" \ icon=/usr/share/pixmaps/mozilla.xpm □ 從 root 帳號執行 update-menus。 • 加入底下的敘述到 ~/.muttrc (針對日文語系): # UTF-8 support is not popular in popular Japanese EMACS environment # 7-bit encoding of iso-2022-jp is easier for everyone. # default encoding order = us-ascii --> iso-8859-1 --> iso-2022-jp set send_charset="us-ascii:iso-8859-1:iso-2022-jp" set allow_8bit=no • 啟動 XIM kinput2 給 X 程式 (針對日文語系): □ 加入 *inputMethod: kinput2 和 KTerm*VT100*OpenIm: true 到您的 X 資源檔--~/.Xresources (Debian 應該會有某些方式 自動完成這個動作)。 □ 有些程式 (例如 mlterm) 也允許您設定 *inputMethod: 和其他 資訊,並在執行時動態載入(在 mlterm 按下 Ctrl-MouseButton-3)。 • 執行 startx 來啟動 X 或任一個顯示管理器 (xdm, gdm, kdm, wdm, ...) (針對所有語系)。 • 在kterm下啟動一個相容日文的程式,例如 Vim 6, (x)emacs21, mc-4.5, mutt-1.4, ...(針對日文語系)(Emacs 看起來是滿多人用的 ,雖然我不使用它。) • 按下 Shift+Space 來啟動/關閉日文字元輸入模式(針對日文語系)。 • 在該語系相容的終端機下閱讀翻譯好的說明文件 (針對所有語系)。 針對 CJK 語系支援,請參閱接下來的章節和 SuSE pages for CJK。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.7.10 其他的 X 輸入法 還有許多其他的 X 輸入法支援的套件: Language LC_CTYPE XIM server XMODIFIERS Start key Japanese ja_JP* kinput2 "@im=kinput2" Shift-Space Korean ko_KR* ami "@im=Ami" Shift-Space Chinese(T) zh_TW.Big5 xcin "@im=xcin-zh_TW.big5" Ctrl-Space Chinese(S) zh_CN.GB2312 xcin "@im=xcin-zh_CN.GB2312" Ctrl-Space 日文輸入法 kinput2 程式是包在 kinput2-canna-wnn、kinput2-canna 和 kinput2-wnn 套件。理論上還需要辭典服務器如 canna 和 freewnn-jserver 才能使用。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.7.11 X 終端機 還有許多 X 終端機支援 8-bit 編碼,安裝相關的字型就能正常顯示: • xterm – X 終端機 • gnome-terminal – Gnome 的 xterm • konsole – KDE 的 xterm • rxvt – VT102 終端機 (lighter) • aterm – Afterstep WM 的 VT102 終端機 • eterm – Enlightment WM 的 VT102 終端機 • wterm – WindowMaker WM 的 VT102 終端機 xterm在 UTF-8 的編碼環境下就能支援雙位元組編碼(參閱支援 UTF-8 的 X 終端機, 第 9.7.12 節)。其他傳統編碼的終端機還在開發中(2003年 時)。底下是已經支援傳統編碼的套間: • aterm-ml – Multi-lingual • kterm – Multi-lingual (Japanese, ...) • rxvt-ml – Multi-lingual • wterm-ml – Multi-lingual • cxterm-big5 – Chinese (Trad., Big5) • cxterm-gb – Chinese (Simp., GB) • cxterm-ks – Chinese (KS) • cxterm-jis – Japanese • hanterm-classic – Korean (Hangul) • hanterm-xf – Korean (Hangul) • hztty – Chinese (GB, Big5, zW/HZ) 使用 kterm 時(或其他終端機),您需要在選單上按下 Ctrl+滑鼠中鍵才 能啟動 XIM。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.7.12 支援 UTF-8 的 X 終端機 支援 UTF-8 的終端機有 XFree86 4.x 版本的 xterm 套件裡的 uxterm 程式。它支援所有的語言。它是一個啟動後續程式使用 "UXTerm" X 資源 集的一個 wrapper(參閱xterm(1))。 舉例還說,使用漂亮的大字型來顯示英文、俄文、日文、中文和韓文文字 時,安裝對應的字型套件後加入底下的設定到 ~/.Xresources 檔案。 ! set large font UXTerm*font: -misc-fixed-medium-r-normal-*-18-120-100-100-c-90-iso10646-1 ! Use XIM for Japanese *inputMethod: kinput2 然後執行 xrdb -merge ~/.Xresources 來更新 X 資源,就像 X 資源, 第 9.4.10 節這一節所提及的。 雖然大部分的終端機程式,例如 vim, mutt 和 emacs 已經相容 UTF-8 (Woody-Sarge 之後的版本)了。但還是有少許的程式,如 mc 還不支援 UTF-8,可幸的是還有支援了 8-bit 編碼。如果您編輯 7-bit ASCII 字 元到未知編碼或是混用編碼的檔案,建議是使用無法辨識 locale 且支援 8-bit 編碼的編輯器是比較安全。 未來,每個人都會用到這些東西。參閱 The Unicode HOWTO。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.7.13 支援 UTF-8 的 framebuffer 主控台 在 debian-installer 程式裡,bterm 是提供 FB 主控台支援 UTF-8 的 套件。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.7.14 locales 之外 當您第一次設定好國際語言環境之後,請使用 tasksel 或 aptitude 來 安裝您的語言環境對應的套件。該套件的安裝選單也適用於多國語言設定 。如果您在安裝過程時遇到相依性問題時,取消和避免安裝與系統衝突的 套件。您或許需要使用 update-alternative 來回復指令安裝前的狀態, 因為新安裝的套件有可能有更高的優先權覆蓋指令的連結。 使用 glibc 2.2 版的新版程式通常具備了國際化。所以特定的區域版本 程式如 jvim 就不需要另外安裝,因為新的 vim 6.0 版本已經支援了它 所提供的功能。事實上,還是有些小問題。由於 jvim 是針對日文輸入法 支援所編譯的,所在在終端機上處理其他日文相關的文件,它還是很值得 推薦的 :-) 應用程式有時需要忽略locale的設定才能適用於現有的工作環境。安裝 language-env 套件和使用其內建的指令 set-language-env 能很輕鬆地 解決這些麻煩的步驟。 請參閱國際化相關文件,Introduction to i18n。該文件是針對開發者撰 寫但也適用於系統管理者。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.8 Multilingualization (m17n) 安裝 language-env 套件就能完成 Localization (l10n), 第 9.7 節的 設定步驟,該套件的目標就是將所有的語系視為一種語言。這些套件也使 用傳統的編碼方式處理文字檔案。在這個環境下,您不能混用法文和日文 文字,因為他們不相容 ISO-8859-1 和 EUC-JP。 使用 Gnome 和 KDE 程式在 UTF-8 的 locale 設定下,就能獲得多國語 系的 UTF-8 桌面。(Sarge)在這樣的環境下,您能混用英文、中文、俄 文和日文字元在任何 UTF-8 相同的軟體中。 [50] 在這樣的系統下,新的多國語系輸入法建議使用 scim。由 scim 提供的 輸入法只需按下 Ctrl-Space 就能啟動或關閉。滑鼠點選 SCIM 的控制視 窗就能切換輸入轉換引擎。 vim offers the multilingualized environment and can handle both UTF-8 and conventionally encoded files (EUC-JP, ISO-8859-1, ...) when it is run under the UTF-8 console such as gnome-teminal. See vim help message with pressing [Esc] and typing :help mbyte.txt. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一 頁 ] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Debian Reference (version 1) 第 10 章 - 網路設定 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 這一章的重點在 Debian 的網路管理。請閱讀Net-HOWTO了解一般 GNU/ Linux 的網路設定。 為了讓 Debian 的主機能夠成功連上網路,必須先設定好網路卡。 首重就是要確認核心支援的裝置,例如乙太網路卡,無線網路卡和數據機 。您可能需要重新編譯核心並加入驅動程式模組Debian下的Linux核心, 第 7 章來支援這些硬體。 以下說明如何設定網路裝置。這一章的內容主要是針對 Debian Sarge。 大部分的內容不一定能相容早期的版本。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.1 IP 網路基礎 一台 Debian主機會有多個 IP 位置。其硬體裝置有許多種,比如: • Loopback: lo • Ethernet: eth0, eth1, ... • Wi-Fi: wlan0, wlan1, wifi0, ... [51] • Token Ring: tr0, tr1, ... • PPP: ppp0, ppp1, ... 還有其他不同的網路裝置,包含 SLIP、PLIP(串列和並列 IP)、控制網路 流量的"shaper"裝置、frame 傳送、AX.25、X.25、ARCnet 以及 LocalTalk。 每一個連線到網路的裝置(或任何 IP 基礎的網路)將以唯一一個 32 bit 的 IP 位置來辨識。 [52] IP 位置可以分成網域位置和主機位置兩部份 。將您的 IP 位置的網域位元全部設成1,而主機位元全部設成0,則您會 得到該網路遮罩。 以傳統上來說,IP 網路分成 8、16、24 bits 長度的三個組別。 [53] IP addresses net mask length Class A 1.0.0.0 - 126.255.255.255 255.0.0.0 = /8 Class B 128.0.0.0 - 191.255.255.255 255.255.0.0 = /16 Class C 192.0.0.0 - 223.255.255.255 255.255.255.0 = /24 IP 位置不在這個範圍之內的是用在特殊環境上。 每一個類別的位置都給保留給本地網路(LANs)。這些位置保證不會影響到 網路上的IP位置。(同理,如果主機被分配到這些地址的話,則該主機就 無法直接存取網路,除非透過支援 proxy或是 Network Address Translation(NAT)功能才能夠連上網路。)底下的表格列出每個類別的 IP 位置: network addresses length how many Class A 10.x.x.x /8 1 Class B 172.16.x.x - 172.31.x.x /16 16 Class C 192.168.0.x - 192.168.255.x /24 256 IP 網路的第一個位置就是該網路本身,最後一個位置是這個網路的廣播 位置。 [54] 其餘的的 IP 位置就可以分配給其他該網域上的主機。通常 IP位置的第一個與最後一個是用來當作網路通訊閘。 路由表記載了核心如何傳送 IP 封包到目的端。底下說明一台位於本地端 網路(LAN) IP 位置為 192.168.50.x/24 的 Debian 主機的路由表。另一 台 192.168.50.1(也在 LAN 裡面) 的主機是 172.20.x.x/16 共用網路的 路由器以及 192.168.50.254(也在 LAN 裡面)負責網際網路的路由器。 # route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 127.0.0.0 * 255.0.0.0 U 0 0 2 lo 192.168.50.0 * 255.255.255.0 U 0 0 137 eth0 172.20.0.0 192.168.50.1 255.255.0.0 UG 1 0 7 eth0 default 192.168.50.254 0.0.0.0 UG 1 0 36 eth0 • 第一行說明傳遞的目的位置如果是 127.x.x.x,則會透過 lo (loopback)裝置路由。 • 第二行說明傳遞的目的位置如果是 LAN,則會透過 eth0 裝置路由。 • 第三行說明傳遞的目的位置如果是共用網路,則會透過 eth0 裝置路 由,最後傳送到 192.168.50.1 通訊閘。 • 第四行說明傳遞的目的位置如果是網際網路,則會透過 eth0 裝置路 由,最後傳送到 192.168.50.254 通訊閘。 路由表的 IP 位置也以名稱表示,這些名稱由/etc/networks或 resolver C函式來取得。 除了路由支外,核心也能實現 network address translation(NAT)、流 量控制以及封包過濾。 請閱讀 Net-HOWTO 以及 other networking HOWTOs 了解背後的運作原理 。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.2 低階網路設定 傳統的 GNU/Linux 系統設定網路的工具是 ifconfig and route,這兩個 程式可以從 net-tools 套件取得。目前有新的工具:ip 可以取代這兩個 程式的功能,您可以從 iproute 套件取得。ip 程式需搭配 Linux 2.2 或更新的核心且比舊有的程式功能更強。即使如此,這些傳統的設定工具 還是相當實用且大家也比較熟悉。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.2.1 低階網路設定 – 使用 ifconfig 和 route 以下的說明示範如何改變eth0的 IP 從 192.168.0.3 到 192.168.0.111 以及透過192.168.0.1 路由到 10.0.0.0 這個網域。執行 ifconfig 和 route 時不加入網路裝置會顯示目前的網路裝置和路由表狀態。 # ifconfig eth0 Link encap:Ethernet HWaddr 08:00:46:7A:02:B0 inet addr:192.168.0.3 Bcast:192.168.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:23363 errors:0 dropped:0 overruns:0 frame:0 TX packets:21798 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:13479541 (12.8 MiB) TX bytes:20262643 (19.3 MiB) Interrupt:9 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:230172 errors:0 dropped:0 overruns:0 frame:0 TX packets:230172 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:22685256 (21.6 MiB) TX bytes:22685256 (21.6 MiB) # route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 * 255.255.0.0 U 0 0 0 eth0 default 192.168.0.1 255.255.255.255 UG 0 0 0 eth0 首先,我們先關閉 eth0。 # ifconfig eth0 inet down # ifconfig lo Link encap:Local Loopback ... (no more eth0 entry) # route ... (no more routing table entries) 接下來我們啟動 eth0 並給予新 IP 位置和路由。 # ifconfig eth0 inet up 192.168.0.111 \ netmask 255.255.255.0 broadcast 192.168.0.255 # route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.0.1 dev eth0 結果是: # ifconfig eth0 Link encap:Ethernet HWaddr 08:00:46:7A:02:B0 inet addr:192.168.0.111 Bcast:192.168.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 ... lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 ... # route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 * 255.255.255.0 U 0 0 0 eth0 10.0.0.0 192.168.0.1 255.0.0.0 UG 0 0 0 eth0 請參閱 ifconfig(8) 和 route(8) 取得更多資訊。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.2.2 低階網路設定 – ip ip 與 ifconfig和 route 有同樣功能的指令如下: • ip link show • ip route list • ip link set eth0 down • ip addr del dev eth0 local 192.168.0.3 • ip addr add dev eth0 local 192.168.0.111/24 broadcast 192.168.0.255 • ip link set eth0 up • ip route add dev eth0 to 10.0.0.0/8 src 192.168.0.111 via 192.168.0.1 執行 ip 指令時加入 help 參數會顯示指令的用法。例如,ip link help 代表: Usage: ip link set DEVICE { up | down | arp { on | off } | dynamic { on | off } | multicast { on | off } | txqueuelen PACKETS | name NEWNAME | address LLADDR | broadcast LLADDR | mtu MTU } ip link show [ DEVICE ] 請參閱 ip(8)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.2.3 設定 Wi-Fi 裝置 想要設定 Wi-Fi 裝置,除了ifconfig 或 ip之外,您還需要安裝 wireless-tools並使用內附的iwconfig程式。 請參閱 iwconfig(8)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.2.4 設定 PPP 裝置 如果您透過 modem 來撥接上網的話,這樣的連線被稱為 Point-to-Point (PPP) 協定。這樣連線作業的網路裝置為 ppp0, ppp1 等等。 一個 PPP 裝置是由 pppd 這個 PPP 服務所管理,您可以在 ppp 套件中 找到該程式。因此,設定 PPP 裝置也就是設定 pppd 的意思。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.2.4.1 手動設定 pppd 一個網路連線的建立需要完成以下一連串的手續:開啟通訊埠(通常是串 列埠),透過通訊裝置送出指令(通常是數據機),撥出電話號碼,發送端 的身分必須給外界的 PPP 服務認證,由核心建立 PPP 裝置並設定路由表 ,使得資料可以透過該線路傳遞。pppd 能完成以上所有的動作,所以會 有一堆設定參數。關於參數的說明請參閱 pppd(8)。 在Debian系統中,全域選項是設定在/etc/ppp/options。使用者格式選項 是設定在~/.ppprc。必需依賴通訊埠來使用的選項放置在/etc/ppp/ options.portname。舉例來說,假設你有兩台數據機 —一固定式的 Lucent LT modem 從/dev/LT-modem來存取資料和一外部的 modem 從/dev /ttyS0來存取資料。建立下列這兩個選項檔案。 # cat > /etc/ppp/options.LT-modem < /etc/ppp/options.ttyS0 < /etc/ppp/peers/KPN < /etc/ppp/peers/Planet < /etc/ppp/peers/KPN-Amsterdam < /etc/ppp/peers/KPN-DenHaag < /etc/ppp/peers/Planet-Amsterdam < /etc/ppp/peers/Planet-DenHaag < /etc/chatscripts/KPN-DenHaag < /etc/chatscripts/Planet-DenHaag < PRE ---> ------> FORWARD -----> ----> POST -----> OUT interface ROUTING \ filter / ROUTING interface DNAT | tracking ^ SNAT REDIRECT | | MASQUERADE v | INPUT OUTPUT | filter ^ filter,DNAT v | \--> Local Process --/ user-space programs ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.12.1.2 Netfilter 表格 每一個內建的 "chain" 使用底下的表格來處理所有的封包。 • filter (預設使用的封包分析器) □ INPUT (針對目標為本地主機的封包) □ FORWARD (針對主機路由後的封包) □ OUTPUT (針對本地主機產生的封包). • nat (網路位址轉譯) □ PREROUTING (針對進入主機所改變的封包) □ OUTPUT (針對路由前所改變的本地主機產生的封包) □ POSTROUTING (針對要送出所改變的封包) • mangle (network address mangling, 只適用核心 2.4.18 之後的版 本) □ 以上是所有五個內建的鍊。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.12.1.3 Netfilter 目標 防火牆的規則有幾種目標: • 基本目標: □ ACCEPT 表示讓封包通過。 □ DROP 表示捨棄封包。 □ QUEUE 表示傳遞封包到 userspace (如果核心支援的話)。 □ RETURN 表示停止讀取該鍊並回到前一個(呼叫的)鍊中的下一個 規則。 • 擴充的目標: □ LOG 啟動核心紀錄功能。 □ REJECT 回送一個錯誤封包並捨棄該封包。 □ SNAT 改變封包的來源位址,只用在 POSTROUTING 鍊。(只適用 nat 表格) --to-source ipaddr[-ipaddr][:port-port] □ MASQUERADE 與 SNAT 相同但用在動態指定 IP (撥接)的連線。 (只適用 nat 表格) --to-ports port[-port] □ DNAT 改變封包的目的源位址,只用在 PREROUTING 和 OUTPUT 以及使用者組合這兩種鍊的自訂鍊。(只適用 nat 表格) --to-destination ipaddr[-ipaddr][:port-port] □ REDIRECT 改變封包的目的源位址並傳送封包到自己的機器。 --to-ports port[-port] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.12.1.4 Netfilter 指令 基本的iptables指令為: iptables -N chain # 建立一個新 chain iptables -A chain \ # 加入規則到 chain -t table \ # 使用 table (filter, nat, mangle) -p protocol \ # tcp, udp, icmp, 或 all, -s source-address[/mask] \ --sport port[:port] \ # 當 -p 是 tcp 或 udp 時,指定來源埠號 -d destination-address[/mask] \ --dport port[:port] \ # 當 -p 是 tcp 或 udp 時,指定目的埠號 -j target \ # 如果符合則作何處理 -i in-interface-name \ # 針對 INPUT, FORWARD, PREROUTING -o out-interface-name # 針對 FORWARD, OUTPUT, POSTROUTING ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.12.1.5 網路位址轉譯(NAT) 區網內的機器能夠存取網際網路的資源是因為通訊閘轉譯了區網內的 IP 位置成網際網路合法的 IP 位置。 # apt-get install ipmasq 使用範例的規則來加強ipmasq的保護。參閱file:///usr/share/doc/ ipmasq/examples/stronger/README。 另外,如果是透過 PCMCIA 網路卡連線的,ipmasq 需要由 /etc/pcmcia/ network.opts(閱讀 file:///usr/share/doc/ipmasq/ipmasq.txt.gz)或/ etc/network/interfaces(閱讀網路設定和 PCMCIA, 第 10.8.5 節和觸發 (Triggering)網路設定, 第 10.8 節)來啟動。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.12.1.6 重導 SMTP 連線 (2.4) 假設您的筆記型電腦在不同的區網環境下,如果您不希望重新設定郵件用 戶代理程式就能直接使用在筆記型電腦上。 執行 iptables 並加入底下的規則,它將會重導 SMTP 連線到通訊閘的機 器。 # iptables -t nat -A PREROUTING -s 192.168.1.0/24 -j REDIRECT \ -p tcp --dport smtp --to-port 25 # smtp=25, INPUT is open 至於完整的重導規則,安裝ipmasq套件並複製M30redirect.def到/etc/ ipmasq/rules/目錄下。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.12.2 管理多重的網路連線 [FIXME] Policy routing (by Phil Brutsche pbrutsch@tux.creighton.edu): 更多訊息請參閱 iproute manual。 Traffic control (tc) 也是有幫助的。 環境設定: eth0: 192.168.1.2/24; 通訊閘 192.168.1.1 eth1: 10.0.0.2/24; 通訊閘 10.0.0.1 該機器沒有任何 IP 偽裝的機制。 Special magic: ip rule add from 192.168.1.2 lookup 1 ip rule add from 10.0.0.2 lookup 2 ip route add to default via 10.0.0.1 metric 0 ip route add to default via 192.168.1.1 metric 1 ip route add table 1 to 192.168.1.0/24 via eth0 ip route add table 1 to 10.0.0.2/24 via eth1 ip route add table 1 to default via 192.168.1.1 ip route add table 2 to 192.168.1.0/24 via eth0 ip route add table 2 to 10.0.0.2/24 via eth1 ip route add table 2 to default via 10.0.0.2 [FIXME] 我從未試驗過。至於如何設定備緩的撥接以及自動重撥的功能來 實現快速連線?還請寄給我一個補丁 :-) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一 頁 ] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Debian Reference (version 1) 第 11 章 - 編輯器 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.1 流行的編輯器 Linux 下有許多在控制台 (console) 環境下執行的文字編輯器任你選用 ,包括: • vim: 強大而輕便的 BSD 傳統編輯器。VI iMproved。 • emacs: 重量級的 GNU 傳統編輯器。RMS (Richard M. Stallman) 原 創。 • xemacs: Emacs 的下一代,由 Lucid 原創。 • mcedit: 初學者的 GNU 編輯器。也就是 mc 內建編輯器。參閱 MC 的編輯器, 第 4.2.5 節。 • ae: 預設的小型編輯器 (Potato)。通常不用它。 • nano: 預設的小型 GNU 編輯器 (Woody)。模彷 pico。 • joe: 給舊式的 WordStar 或 TurboPascal 。 • jed: 快速、多功能、選單式的編輯器,相容於 Emacs 的鍵盤操作方 式。 • jove: 微型編輯器,相容於 Emacs 的鍵盤操作方式。 • nvi: 新版 vi。連 Bug 都相容於原本的 vi 。 使用 update-alternatives --config editor 命令可改變預設的編輯器 。許多程式也使用環境變數 EDITOR 或 VISUAL 來決定編輯器。參閱 MC 的編輯器, 第 4.2.5 節。 還有一些於 X 環境下執行的編輯器也值得一提: • gvim: Vim with GUI (vim 和 vim-gtk 套件) • emacs: 唯一的 Emacs (自動偵測 X) 。 • xemacs: 次世代 Emacs (自動偵測 X) 。 這些 xclient 的命令列使用標準選項,如 -fn a24,這對像我這樣的老 傢伙來說就再好不過了 :) 參閱 X clients, 第 9.4.4 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.2 應急的編輯器 有少數幾個編輯器安裝在 /bin 下。至少應該安裝一個這類的編輯器,以 免 /usr/ 不能存取時,就無法編輯文件了。 • elvis-tiny: 最小的 vi 編輯器 (用 vi 命令啟動) • nano: 最小的非 vi 編輯器 (用 nano-tiny 命令啟動) • ed: 最小的編輯器 (總是存在但使用起來不方便) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.3 Emacs 和 Vim ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.3.1 Vim 指示 程式執行時可按下 閱讀 "VIM - main help file" 文件。 說明 返回正常模式 V Visual 模式 i Insert 模式 : 命令列指令 :set tw=72 設定文字行寬為 72 插入 (貼上) 模式 :r! date -R 插入 RFC-822 日期 qa 將鍵盤操作記錄到暫存器 a q 停止鍵盤操作記錄 @a 執行暫存器 a 的鍵盤操作 :edit foo.txt 載入並編輯檔案 foo.txt :wnext 寫入目前的檔案並編輯下一個檔案 q 和 @ 可用來記錄簡單的鍵盤巨集然後執行它們。例如,想建立一個巨 集為將游標所在處的單詞加上 HTML 斜體字標籤,可以輸入 qii^[ea ^[q (此處 ^[ 表示按 ESC 鍵) 。然後,在單詞前輸入 @i ,編輯器 就會自動為它加上 。 也請參閱在 Vim 中使用 GnuPG, 第 14.4.2 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.3.2 Emacs 提示 說明 選單 C-u M-! date -R 插入 RFC-822 日期 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.3.3 啟動編輯器 啟動編輯器: emacs filename vim filename 以與 vi 相容方式啟動: vim -C 以與 vi 不相容方式啟動: vim -N 以編譯預設值啟動: emacs -q vim -N -u NONE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.3.4 Editor 指令摘要 (Emacs , Vim) exit: C-x C-c :qa /:wq /:xa /:q! Get back/command mode: C-g Backward(left): C-b h Forward(right): C-f l Next(down): C-n j Previous(up): C-p k stArt of line(^): C-a 0 End of line($): C-e $ mUltiple commands: C-u nnn cmd nnn cmd Multiple commands: M-digitkey cmd save File: C-x C-s :w file beginning of buffer: M-< 1G end of buffer: M-> G scroll forward 1 screen: C-v ^F scroll forward 1/2 screen: ^D scroll forward 1 line: ^E scroll backward 1 screen: M-v ^B scroll backward 1/2 screen: ^U scroll backward 1 line: ^Y scroll the other window: M-C-v delete under cursor: C-d x delete from cursor to eol: C-k D iSearch forward: C-s isearch Reverse: C-r Search forward: C-s enter / search Reverse: C-r enter ? isearch regexp: M-C-s isearch backward regexp: M-C-r search regexp: M-C-s enter / search backward regexp: M-C-r enter ? Help: C-h C-h :help Help Apropos: C-h a Help key Bindings: C-h b :help [key] Help Info: C-h i Help Major mode: C-h m Help tutorial: C-h t :help howto Undo: C-_ u Redo: C-f ^R Mark cursor position: C-@ m{a-zA-Z} eXchange Mark and position: C-x C-x goto mark in current file: '{a-z} goto mark in any file: '{A-Z} copy region: M-w {visual}y kill region: C-w {visual}d Yank and keep buffer: C-y Yank from kill buffer: M-y p convert region to Upper: C-x C-u {visual}U convert region to Lower: C-x C-l {visual}u Insert special char: C-q octalnum/keystroke ^V decimal/keystroke replace: M-x replace-string :%s/aaa/bbb/g replace regexp: M-x replace-regexp :%s/aaa/bbb/g query replace: M-% :%s/aaa/bbb/gc query replace: M-x query-replace query replace regexp: M-x query-replace-regexp Open file: C-x C-f :r file Save file: C-x C-s :w Save all buffers: C-x s :wa Save as: C-x C-w file :w file Prompt for buffer: C-x b List buffers: C-x C-b :buffers Toggle read-only: C-x C-q :set ro Prompt and kill buffer: C-x k Split vertical: C-x 2 :split Split horizontal: C-x 3 :vsplit (ver. 6) Move to other window: C-x o ^Wp Delete this window: C-x 0 :q Delete other window(s): C-x 1 ^Wo run shell in bg: M-x compile kill shell run in bg: M-x kill-compilation run make: :make Makefile check error message: C-x` :echo errmsg run shell and record: M-x shell :!script -a tmp ...clean BS, ... :!col -b record ...save/recall shell record: C-x C-w record :r record run shell: M-! sh :sh run command: M-! cmd :!cmd run command and insert: C-u M-! cmd :r!cmd run filter: M-| file {visual}:w file run filter and insert: C-u M-| filter {visual}:!filter show option :se[t] {option}? reset option to default :se[t] {option}& reset boolean option :se[t] no{option} toggle boolean option :se[t] inv{option} wrap text at column 72 :se tw=72 do not wrap :se tw=0 autoindent :se ai expand tab :se et specify comment (mail) :se comments=n:>,n:\| run GDB M-x gdb describe GDB mode C-h m step one line M-s next line M-n step one instruction (stepi) M-i finish current stack frame C-c C-f continue M-c up arg frames M-u down arg frames M-d copy number from point, insert at the end C-x & set break point C-x SPC ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.3.5 Vim 設定 要使用 Vim 所有的功能和高亮度關鍵字,請在 ~/.vimrc 或 /etc/vimrc 加入下列內容: set nocompatible set nopaste set pastetoggle= syn on Paste 模式能避免自動縮進功能影響在控制台終端下的剪下-貼上操作, 比只用 ":set noai" 更好。 有關 GnuPG 整合的資訊,請參閱在 Vim 中使用 GnuPG, 第 14.4.2 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.3.6 Ctags 執行 apt-get install exuberant-ctags,接著就可以在源碼檔中使用 ctags 了。在 Vim 中輸入 :tag function_name 可直接跳到 function_name 的開始行。它適用於 C 、 C++ 、 Java 、 Python 和許 多其它的語言。 Emacs 也有相同的 ctags 功能。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.3.7 將高亮度顯示的螢幕內容轉為 HTML 文件 在 Vim 命令模式下輸入 so \$VIMRUNTIME/syntax/2html.vim ,可將螢 幕上高亮度顯示的文字轉化為 HTML 文字,然後用 :w file.html 存檔, :q 退出。對 C 等源碼特別適用。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.3.8 用 vim 分割螢幕 vim 可以在多重分割視窗 (multi-split-screen) 環境下編輯多個檔案。 想了解有關詳情,可輸入 :help usr_08.txt 。 要分割螢幕顯示多個不同文件,請在 vi 命令提示後輸入: :split another-file :vsplit another-file 或在 shell 提示時: $ vi -o file1.txt file2.txt # 水平分割 $ vi -O file1.txt file2.txt # 垂直分割 就可以使用多視窗 vi。 $ vimdiff file.txt~ file.txt # 檢查 file.txt 的最近修改情況 $ vimdiff file.en.sgml file.fr.sgml # 檢查翻譯的變化 $ gvimdiff file.txt~ file.txt # 在 X 中 上述操作可以明確地顯示原始文件與備份文件的差別。對 SGML 文件,它 進行標籤匹配檢查,所以用它來檢查翻譯結果十分有效。 用 CTRL-W 命令指定游標移動: Ctrl-W + 增加視窗大小 Ctrl-W - 減小視窗大小 Ctrl-W h 移動至視窗左邊 Ctrl-W j 移動至視窗下方 Ctrl-W k 移動至視窗上方 Ctrl-W l 移動至視窗右邊 ... 下列命令用於控制螢幕捲軸: :set scrollbind :set noscrollbind ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一 頁 ] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Debian Reference (version 1) 第 12 章 - 版本控制系統 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.1 Concurrent Versions System (CVS) 有關的詳細訊息可使用 lynx 查閱 /usr/share/doc/cvs/html-cvsclient , /usr/share/doc/cvs/html-info,/usr/share/doc/cvsbook 或執行 info cvs 及 man cvs。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.1.1 安裝 CVS 伺服器 以下設定的步驟,僅允許 "src" 群組的成員存取 CVS 檔案庫,並且僅 "staff" 群組的成員才可管理 CVS,這樣做可以降低管理者不小心犯錯的 機會。 # cd /var/lib; umask 002; mkdir cvs # [Woody] FSH # apt-get install cvs cvs-doc cvsbook # export CVSROOT=/var/lib/cvs # cd $CVSROOT # chown root:src . # "staff" to restrict more for starting project. # chmod 3775 . # 如果上面使用 "staff",則這裡用 2775 # cvs -d /var/lib/cvs init # 在此明確指定 -d 會更安全! # cd CVSROOT # chown -R root:staff . # chmod 2775 . # touch val-tags # chmod 664 history val-tags # chown root:src history val-tags ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.1.2 CVS session 範例 下面是設定 shell 環境以便存取 CVS 檔案庫 (repository)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.1.2.1 匿名 CVS (僅能下載) 遠端唯讀存取: $ export CVSROOT=:pserver:anonymous@cvs.sf.net:/cvsroot/qref $ cvs login $ cvs -z3 co qref ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.1.2.2 使用本地 CVS 伺服器 透過同一台機器上的 shell 進行本地端存取: $ export CVSROOT=/var/lib/cvs ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.1.2.3 使用遠端 CVS pserver 不使用 SSH (在 cvs 中使用 RSH 協議) 遠程存取: $ export CVSROOT=:pserver:account@cvs.foobar.com:/var/lib/cvs $ cvs login 這個方法有被竊聽攻擊的疑慮。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.1.2.4 透過 ssh 使用遠端 CVS 透過 SSH 進行遠端存取: $ export CVSROOT=:ext:account@cvs.foobar.com:/var/lib/cvs 或以 SourceForge 為例: $ export CVSROOT=:ext:account@cvs.sf.net:/cvsroot/qref 你亦可使用 RSA 認證 (以少許密碼連線 – RSA, 第 9.5.3 節),它不需 要密碼提示。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.1.2.5 建立新的 CVS 庫存 (archive) 想要建立如下的檔案, ITEM VALUE MEANING source tree: ~/project-x 所有的源碼 Project name: project-x 專案名稱 Vendor Tag: Main-branch 整個分支的標記 (Tag) Release Tag: Release-initial 特定分支的標記 則, $ cd ~/project-x # 進源碼目錄 ... 建立源碼樹 ... $ cvs import -m "Start project-x" project-x Main-branch Release-initial $ cd ..; rm -R ~/project-x ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.1.2.6 使用 CVS 使用本地端 CVS 檔案庫來進行 project-x: $ cd # 轉到工作區 $ cvs co project-x # 從 CVS 下載源碼到本地端 $ cd project-x ... 修改內容 ... $ cvs diff -u # 相當於 diff -u repository/ local/ $ cvs up -C modified_file # 取消對文件的修改 $ cvs ci -m "Describe change" # 將本地端源碼存到 CVS 上 $ vi newfile_added $ cvs add newfile_added $ cvs ci -m "Added newfile_added" $ cvs up # 從 CVS 合併最新版本 ... 要從 CVS 建立所有新建立的子目錄的話,請改用 "cvs up -d -P" ... 注意以 "C filename" 作開頭的行 ... 沒有變動的碼會移至 `.#filename.version' ... 在 filename 中搜尋 "<<<<<<<" 和 ">>>>>>>" $ cvs tag Release-1 # 添加 release tag ... 繼續編輯 ... $ cvs tag -d Release-1 # 移除 release tag $ cvs ci -m "more comments" $ cvs tag Release-1 # 重新加入 release tag $ cd # 返回工作區 $ cvs co -r Release-initial -d old project-x ... 取得原版本並放入 old 目錄 $ cd old $ cvs tag -b Release-initial-bugfixes # 建立 branch (-b) tag ... 現在你可以對舊版本做修改了 (Tag=sticky) $ cvs update -d -P ... 源碼樹現在有 "Release-initial-bugfixes" 的 sticky tag ... 對分支做修改 $ cvs up -d -P # 將在這個分支版本上被他人修改的檔案同步化 $ cvs ci -m "check into this branch" $ cvs update -kk -A -d -P ... 移除 sticky tag 並取消內容 ... update from main trunk without keyword expansion $ cvs update -kk -d -P -j Release-initial-bugfixes ... 將 Release-initial-bugfixes 的分支合併至主要版本 ... trunk without keyword expansion. Fix conflicts with editor. $ cvs ci -m "merge Release-initial-bugfixes" $ cd $ tar -cvzf old-project-x.tar.gz old # 建立壓縮備份, -j 可使用 bz2 格式 $ cvs release -d old # 移除本地端源碼(可選) 應該記住的幾個選項(用作 cvs 命令行的第一個參數): -n dry run, no effect -t display messages showing steps of cvs activity ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.1.2.7 從 CVS 匯出 (export) 檔案 要從 CVS 獲得最新版本,用 "tomorrow" : $ cvs ex -D tomorrow module_name ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.1.2.8 管理 CVS 為專案加上別名 (alias)(本地伺服器): $ su - admin # staff 成員之一 $ export CVSROOT=/var/lib/cvs $ cvs co CVSROOT/modules $ cd CVSROOT $ echo "px -a project-x" >>modules $ cvs ci -m "Now px is an alias for project-x" $ cvs release -d . $ exit # 或 Ctrl-D 自 su 返回 $ cvs co -d project px ... 自 CVS 中匯出 project-x (別名: px) 至 direcotry 專案 $ cd project ... 修改內容 ... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.1.3 CVS 常見問題解決方法 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.1.3.1 容器庫中的檔案權限 CVS 不會覆蓋當前容器中的文件,而是用另一個文件替換它。因此,對檔 案庫目錄的寫入權限是很重要的權限。所以如果需要的話,在新建檔案庫 時請執行下面的命令,以確保權限的設定。 # cd /var/lib/cvs # chown -R root:src repository # chmod -R ug+rwX repository # chmod 2775 repository # 如果需要的話,對子目錄也做同樣的設定 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.1.3.2 可執行權限 (Execution bit) 當文件被別人匯出後會保留可執行權限。任何時候當你匯出的文件遇到執 行權限的問題,可用下面的命令在 CVS 檔案庫中修改文件的權限。 # chmod ugo-x filename ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.1.4 CVS 命令 這裡是一些 CVS 命令和他們的捷徑的用法。 {add|ad|new} [-k kflag] [-m 'message'] files... {admin|adm|rcs} [rcs-options] files... {annotate|ann} [options] [files...] {checkout|co|get} [options] modules... {commit|ci|com} [-lnR] [-m 'log_message' | -f file] \ [-r revision] [files...] {diff|di|dif} [-kl] [rcsdiff_options] [[-r rev1 | -D date1] \ [-r rev2 | -D date2]] [files...] {export|ex|exp} [-flNn] -r rev|-D date [-d dir] [-k kflag] module... {history|hi|his} [-report] [-flags] [-options args] [files...] {import|im|imp} [-options] repository vendortag releasetag... {login|logon|lgn} {log|lo|rlog} [-l] rlog-options [files...] {rdiff|patch|pa} [-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] modules... {release|re|rel} [-d] directories... {remove|rm|delete} [-lR] [files...] {rtag|rt|rfreeze} [-falnR] [-b] [-d] [-r tag | -D date] \ symbolic_tag modules... {status|st|stat} [-lR] [-v] [files...] {tag|ta|freeze} [-lR] [-F] [-b] [-d] [-r tag | -D date] [-f] \ symbolic_tag [files...] {update|up|upd} [-AdflPpR] [-d] [-r tag|-D date] files... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.2 Subversion Subversion 是下一代版本控制系統,它將替代 CVS。當前開發者稱它還 處於 "alpha" 階段,但對大多數用戶而言它已足夠穩定了。到本文檔寫 作之時,Subversion 僅在 Debian unstable 中可用。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.2.1 安裝 Subversion 伺服器 subversion meta-package 依賴一些相依的套件 (libapache2-svn 和 subversion-tools) 來設定伺服器。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.2.1.1 設立檔案庫 當前,subversion 無法建立檔案庫,所以使用者需要手動創建它們。通 常會在 /var/local/repos 下建立檔案庫。 創建目錄: # mkdir -p /var/local/repos 建立檔案資料庫: # svnadmin create /var/local/repos 將容器的寫權限賦給 www server: # chown -R www-data:www-data /var/local/repos ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.2.1.2 設定 Apache2 想要用使用者認證來授權存取檔案庫,則添加(或去除注釋)下列內容到 /etc/apache2/mods-available/dav_svn.conf : DAV svn SVNPath /var/local/repos AuthType Basic AuthName "Subversion repository" AuthUserFile /etc/subversion/passwd Require valid-user 接著,使用下面的命令建立使用者認證檔: htpasswd2 -c /etc/subversion/passwd some-username 重新啟動 Apache2,就可以使用 URL http://hostname/repos 來存取新 的 subversion 檔案庫了。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.2.2 將 CVS 檔案庫轉移到 Subversion ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.2.3 Subversion 使用範例 下面的小節將教你如何在 Subversion 下使用各種命令。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.2.3.1 建立新的 Subversion 保存檔(archive) 要建立新的 Subversion 保存檔,請輸入下面的命令: $ cd ~/your-project # 進入你的源碼目錄 $ svn import http://localhost/repos your-project \ project-name -m "initial project import" 這將在你的 Subversion 檔案庫下建立一個名為 project-name 的目錄, 用來存放你的專案文件。查看 http://localhost/repos/ 它是否在那兒 ? ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.2.3.2 使用 Subversion 用 Subversion 來管理 project-y: $ cd # 進入工作區域 $ svn co http://localhost/repos/project-y # 匯出源碼 $ cd project-y ... 完成一些工作 ... $ svn diff # 相當於 diff -u repository/ local/ $ svn revert modified_file # 取消對文件所做的修改 $ svn ci -m "Describe changes" # 將你做的修改匯入至檔案庫中 $ vi newfile_added $ svn add newfile_added $ svn add new_dir # 將 new_dir 中的所有文件遞迴地加入檔案庫中 $ svn add -N new_dir2 # 將 new_dir2 中的文件非遞迴地加入檔案庫中 $ svn ci -m "Added newfile_added, new_dir, new_dir2" $ svn up # 從檔案庫中合併最新的版本 $ svn log # 顯示所有已提交的修改記錄 $ svn copy http://localhost/repos/project-y \ http://localhost/repos/project-y-branch \ -m "creating my branch of project-y" # 建立 project-y 的分支版本 $ svn copy http://localhost/repos/project-y \ http://localhost/repos/proj-y_release1.0 \ -m "project-y 1.0 release" # 加入 release tag ... 注意,分支 (branching) 和標記 (tagging) 是相同的。唯一的不同在分支會提交 (committed) 而標記不會。 ... 對分支版本做修改 ... $ # 將分支版本回存至主要版本 $ svn merge http://localhost/repos/project-y \ http://localhost/repos/project-y-branch $ svn co -r 4 http://localhost/repos/project-y # 取得第四版本 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一 頁 ] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Debian Reference (version 1) 第 13 章 - 程式設計 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 不要把測試用的執行檔名稱取成 "test" 。 test 是一個 shell 的內建 指令。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.1 從哪兒開始 參考資料: • 在 file:///usr/share/doc/package 中的文件和範例 • Unix / Programming Information • Linux Programming Bible (John Goerzen/IDG books) 從 GNU 可以獲得更多可印成紙本的豐富文件。 接下來的四個小節包含了用不同程式語言所寫的簡單 script ,其功能是 建立一個文字檔,其內容可提供給像 newusers 之類的批次執行程式來使 用,其功能是用來加入 /etc/passwd 的帳號資料。每個 script 都需要 一個輸入檔,其每行都是像 first_name last_name password 這樣的格 式。 (這些 script 會建立實際的使用者 home 目錄。) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.2 Shell 了解 Unix-like 系統如何工作的最好方法就是閱讀 shell script。在此 ,我們對 shell 編程做個簡單的重點提示。從錯誤中學習,請參閱 Shell Mistakes 。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.2.1 Bash – GNU 標準互動式 shell Bash 的參考資料: • bash(1) • info bash • the LDP BASH Programming - Introduction HOWTO 是初學者的資訊 來源。 • mc file:///usr/share/doc/bash/examples/ file:///usr/share/ doc/bash/ (安裝 bash-doc 套件可以看到更多的範例檔。) • Learning the bash Shell, 2nd edition (O'Reilly) 簡短的程式範例 (從標準輸入讀取輸入,可提供 newusers 來建立帳號資 訊) : #!/bin/bash # (C) Osamu Aoki Sun Aug 26 16:53:55 UTC 2001 Public Domain pid=1000; while read n1 n2 n3 ; do if [ ${n1:0:1} != "#" ]; then let pid=$pid+1 echo ${n1}_${n2}:password:${pid}:${pid}:,,,/home/${n1}_${n2}:/bin/bash fi done ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.2.2 POSIX shells Debian 中有幾個套件提供了 POSIX shell : • dash (Sarge) □ Priority: optional □ Installed-Size: 176 □ 目前為止最小而且最快的 – 用來開機初始的最佳選擇 • ash (Woody) □ Priority: optional □ Installed-Size: 180 □ 較小並且較快的 – 用來開機初始的好選擇 • bash □ Essential: yes □ Priority: required □ Installed-Size: 580 □ 較大並且功能完整 – 實作了很多擴充功能 • pdksh □ Priority: optional □ Installed-Size: 408 □ 完整 AT&T ksh 的外觀和風格 如果你想編寫具有可攜性的 shell script ,最好能寫成 POSIX shell script。可將 /bin/sh 鏈接到 ash (或 dash) 來測試和 POSIX 的相容 性。最好能避免寫出包含 "bashisms" 或 "zshisms" 的 script 。例如 ,應避免下面的用法: • if [ foo == bar ] ; then ... • diff -u file.c{.orig,} • mkdir /foo{bar,baz} 在這份文件中的敘述只適用於 POSIX 的 shell ,而不適用於 csh 式的 shell ,包括 tcsh 。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.2.3 Shell 參數 有幾個特別的參數是應該要記得的: $0 = shell 的名稱或 shell script 的名稱 $1 = 第一個 shell 參數 ... $9 = 第九個 shell 參數 $# = 參數的個數 "$*" = "$1 $2 $3 $4 ... $n" "$@" = "$1" "$2" "$3" "$4" ... "$n" $? = 最近執行命令的退出狀態 $$ = 目前 shell script 的 PID $! = 最近啟動的背景執行工作的 PID 要記住的基本延伸參數: 從 如果 var 設定的話 如果 var 沒有設定的話 ${var:-string} $var string ${var:+string} string null ${var:=string} $var string (並且執行 var=string) ${var:?string} $var (echo string and then exit) 在這裡,這些操作中的冒號 `:' 都是選擇性的。 • 有 `:' = 操作中測試 "存在" 和 "非空" 。 • 沒有 `:' = 操作中只測試 "存在" 。 需要記住的基本參數代換: 從 結果 ${var%suffix} 移除最小符合 suffix 的後綴形式 ${var%%suffix} 移除最大符合 suffix 的後綴形式 ${var#prefix} 移除最小符合 prefix 的前綴形式 ${var##prefix} 移除最大符合 prefix 的前綴形式 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.2.4 Shell 重導 (redirection) 需要記住的基本重導 (redirection)用法 (在此 [n] 是可指定的數字, 代表檔案描述子 (file descriptor)): [n]> file 將 stdout (或 n) 重導至 file 。 [n]>> file 將 stdout (或 n) 附加至 file 。 [n]< file 由 file 重導至 stdin (或 n)。 [n1]>&n2 將 stdout (或 n1) 重導至 n2 。 2> file >&2 將 stdout 和 stderr 重導至 file 。 > file 2>&1 將 stdout 和 stderr 重導至 file 。 | command 將 stdout 通過管線 (pipe) 傳遞給 command。 2>&1 | command 將 stdout 和 stderr 通過 pipe 傳遞給 command。 在這裡, • stdin: 標準輸入 (檔案描述子 = 0) • stdout: 標準輸出 (檔案描述子 = 1) • stderr: 標準錯誤 (檔案描述子 = 2) shell 允許你用其內建的 exec ,以任意的檔案描述子來開啟檔案。 $ echo Hello >foo $ exec 3bar # open files $ cat <&3 >&4 # redirect stdin to 3, stdout to 4 $ exec 3<&- 4>&- # close files $ cat bar Hello 在這裡的 n<&- 和 n>&- 是關閉檔案描述子 n 。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.2.5 Shell 條件式 每個命令均可回傳一個退出狀態,而這個狀態值可用於條件判斷式: • 成功: 0 (真值) • 錯誤: 1–255 (偽值) 注意此處的用法,回傳值 0 用來表示“真值,與計算機其它領域中常見的 表示是不同的。另外 `[' 等同於使用 test 命令,並會將與 `]' 間的文 字當成參數,所以相當於一個條件判斷式。 需要記住的基本條件式慣用法: command && "如果前指令成功的話,也要執行這個指令" || true command || "如果前指令失敗的話,就執行這個指令" if [ 條件判斷式 ]; then "如果前指令成功的話,也要執行這個指令" else "如果前指令失敗的話,就執行這個指令" fi 在這裡的 || true 是需要的,以確保如果是用 -e 的選項在執行這行時 ,不會意外地結束程式。 在條件判斷式中的檔案比較有: -e file 如果 file 存在則為真。 -d file 如果 file 存在且為一目錄則為真。 -f file 如果 file 存在且為一般檔案則為真。 -w file 如果 file 存在且可寫入則為真。 -x file 如果 file 存在且可執行則為真。 file1 -nt file2 如果 file1 比 file2 新的話則為真。 (modification) file1 -ot file2 如果 file1 比 file2 舊的話則為真。 (modification) file1 -ef file2 如果兩者的 device 和 inode 號碼都相同則為真。 在條件判斷式中的字串比較有: -z str 如果 str 的長度是零則為真。 -n str 如果 str 的長度非零則為真。 str1 == str2 如果字串相等則為真。 str1 = str2 如果字串相等則為真。 (為了嚴格遵守和 POSIX 相容性,應用 "==" 來取代 "=") str1 != str2 如果字串不相等則為真。 str1 < str2 如果 str1 的排列順序在 str2 之前則為真 (和 locale 相關) 。 str1 > str2 如果 str1 的排列順序在 str2 之後則為真 (和 locale 相關) 。 在條件判斷式中的整數算術比較有 -eq 、 -ne 、 -lt 、 -le 、 -gt 和 -ge 。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.2.6 命令列操作 Shell 會用下列的方法來處理 script : • 以中介字元來切分 tokens ,有: SPACE 、 TAB 、 NEWLINE 、 ; 、 ( 、 ) 、 < 、 > 、 | 、 & • 如果不在 "..." 或 '...' 內的話,會檢查關鍵字 (loop) • 如果不在 "..." 或 '...' 內的話,會展開alias (別名) (loop) • 如果不在 "..." 或 '...' 內的話,會展開大括號, a{1,2} -> a1 a2 • 如果不在 "..." 或 '...' 內的話,會展開tilde , ~user -> user 的家目錄 • 如果不在 '...' 內的話,會展開參數, $PARAMETER • 如果不在 '...' 內的話,會展開命令取代式, $(command) • 如果不在 "..." 或 '...' 內的話,會以 $IFS 來切分文字 • 如果不在 "..." 或 '...' 內的話,會展開路徑名稱中的 *?[] • 搜尋命令 □ 函式 □ 內建 □ $PATH 中的檔案 • loop 在單引號中的雙引號是沒有作用的。 Executing set -x in the shell or invoking the shell with -x option make the shell to print all of commands executed. This is quite handy for debugging. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.3 Awk Awk 的參考資料: • Effective awk Programming, 3rd edition (O'Reilly) • Sed & awk, 2nd edition (O'Reilly) • mawk(1) 和 gawk(1) • info gawk 簡短的程式範例 (從標準輸入讀取輸入,可提供 newusers 來建立帳號資 訊) : #!/usr/bin/awk -f # Script to create a file suitable for use in the 'newusers' command, # from a file consisting of user IDs and passwords in the form: # first_name last_name password # Copyright (c) KMSelf Sat Aug 25 20:47:38 PDT 2001 # Distributed under GNU GPL v 2, or at your option, any later version. # This program is distributed WITHOUT ANY WARRANTY. BEGIN { # Assign starting UID, GID if ( ARGC > 2 ) { startuid = ARGV[1] delete ARGV[1] } else { printf( "Usage: newusers startUID file\n" \ " where:\n" \ " startUID is the starting userid to add, and\n" \ " file is an input file in form:\n" \ " first_name last_name password\n" \ ) exit } infile = ARGV[1] printf( "Starting UID: %s\n\n", startuid ) } /^#/ { next } { ++record first = $1 last = $2 passwd = $3 user= substr( tolower( first ), 1, 1 ) tolower( last ) uid = startuid + record - 1 gid = uid printf( "%s:%s:%d:%d:%s %s,,/home/%s:/bin/bash\n", \ user, passwd, uid, gid, first, last, user \ ) } 在 Debian 中提供 POSIX awk 的套件: • mawk □ Priority: required □ Installed-Size: 228 □ 較小並且快得多 — 適合於預設安裝 □ Compile-time limits exist ☆ NF = 32767 ☆ sprintf buffer = 1020 • gawk □ Priority: optional □ Installed-Size: 1708 □ 較大並且功能多 — 實作很多延伸功能 ☆ System V Release 4 version of UNIX ☆ Bell Labs awk ☆ GNU-specific ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.4 Perl 這是 Unix-like 環境中最重要的直譯器。 Perl 的參考資料: • perl(1) • Programming Perl, 3rd edition (O'Reilly) • The Perl Directory 簡短的程式範例 (從標準輸入讀取輸入,可提供 newusers 來建立帳號資 訊) : #!/usr/bin/perl # (C) Osamu Aoki Sun Aug 26 16:53:55 UTC 2001 Public Domain $pid=1000; while () { if (/^#/) { next;} chop; $pid++; ($n1, $n2, $n3) = split / /; print $n1,"_",$n2,":", $n3, ":",$pid, ":",$pid,",,,/home/",$n1,"_",$n2,":/bin/bash\n" } 安裝 Perl 模組 (model) module_name: # perl -MCPAN -e 'install module_name' ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.5 Python 這是一個不錯的物件導向直譯器 Python 的參考資料: • python(1) • Learning Python (O'Reilly). • Python Programming Language 簡短的程式範例 (從標準輸入讀取輸入,可提供 newusers 來建立帳號資 訊) : #! /usr/bin/env python import sys, string # (C) Osamu Aoki Sun Aug 26 16:53:55 UTC 2001 Public Domain # Ported from awk script by KMSelf Sat Aug 25 20:47:38 PDT 2001 # This program is distributed WITHOUT ANY WARRANTY. def usages(): print \ "Usage: ", sys.argv[0], " start_UID [filename]\n" \ "\tstartUID is the starting userid to add.\n" \ "\tfilename is input filename. If not specified, standard input.\n\n" \ "Input file format:\n"\ "\tfirst_name last_name password\n" return 1 def parsefile(startuid): # # main filtering # uid = startuid while 1: line = infile.readline() if not line: break if line[0] == '#': continue (first, last, passwd) = string.split(string.lower(line)) # above crashes with wrong # of parameters :-) user = first[0] + last gid = uid lineout = "%s:%s:%d:%d:%s %s,,/home/%s:/bin/bash\n" % \ (user, passwd, uid, gid, first, last, user) sys.stdout.write(lineout) +uid if __name__ == '__main__': if len(sys.argv) == 1: usages() else: uid = int(sys.argv[1]) #print "# UID start from: %d\n" % uid if len(sys.argv) > 1: infilename = string.join(sys.argv[2:]) infile = open(infilename, 'r') #print "# Read file from: %s\n\n" % infilename else: infile = sys.stdin parsefile(uid) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.6 Make Make 的參考資料: • info make • make(1) • Managing Projects with make, 2nd edition (O'Reilly) 簡單自動變數: 規則 (rule) 的語法: target: [ prerequisites ... ] [TAB] command1 [TAB] -command2 # 忽略錯誤 [TAB] @command3 # 抑制 echo 這裡的 [TAB] 就是一個 TAB 。在 make 完成變數代換後,將會用 shell 逐行執行。在行尾使用 \ 可以續行。使用 $$ 可在 shell script 的環 境中輸入 $ 。 適用於 target 和 prerequisites 的隱含規則 (Implicit rules),如下 的例子: %: %.c header.h 或, %.o: %.c header.h 在此, target 包含了 % (exactly one of them), % 可匹配實際的目 標檔名中任何的非空子串。 prerequisites 同樣也使用 % 來顯示它們的 名稱是如何關聯到實際的目標檔名的。 後綴規則 (Suffix rules) 是用來定義 make 隱含規則的過時方法。GNU make 為了相容性的考量仍支持它,但只要可能的話就應該使用與之等價 的規則: 舊的後綴規則 --> 新的規則 .c: --> % : %.c .c.o: --> %.o: %.c 規則中的自動變數: foo.o: new1.c new2.c old1.c new3.c $@ == foo.o (目標) $< == new1.c (第一個) $? == new1.c new2.c new3.c (有更新的) $^ == new1.c new2.c old1.c new3.c (所有的) $* == 在 target 中 `%' 所匹配的文字。 變數參考: foo1 := bar # 舊時的 expansion foo2 = bar # 遞迴的 expansion foo3 += bar # 附加 SRCS := $(wildcard *.c) OBJS := $(foo:c=o) OBJS := $(foo:%.c=%.o) OBJS := $(patsubst %.c,%.o,$(foo)) DIRS = $(dir directory/filename.ext) # 取出 "directory" $(notdir NAMES...), $(basename NAMES...), $(suffix NAMES...) ... 執行 make -p -f/dev/null 可查看內部自動規則。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.7 C 準備工作: # apt-get install glibc-doc manpages-dev libc6-dev gcc C 的參考資料: • info libc (C 函式庫函式參考資料) • gcc(1) • each_C_library_function_name(3) • Kernighan & Ritchie, The C Programming Language, 2nd edition (Prentice Hall). http://cm.bell-labs.com/cm/cs/cbook/ • ISO C standard. http://www.open-std.org/jtc1/sc22/wg14/ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.7.1 簡單的 C 程式 (gcc) 一個簡單的範例,將 example.c 和 libm 函式庫一起編譯,產生執行檔 run_example : $ cat > example.c << EOF #include #include #include int main(int argc, char **argv, char **envp){ double x; char y[11]; x=sqrt(argc+7.5); strncpy(y, argv[0], 10); /* prevent buffer overflow */ y[10] = '\0'; /* fill to make sure string ends with '\0' */ printf("%5i, %5.3f, %10s, %10s\n", argc, x, y, argv[1]); return 0; } EOF $ gcc -Wall -g -o run_example example.c -lm $ ./run_example 1, 2.915, ./run_exam, (null) $ ./run_example 1234567890qwerty 2, 3.082, ./run_exam, 1234567890qwerty 在這裡,因為用到了 sqrt() ,所以必需要用 -lm 來連結 libm 函式庫 。實際上的函式庫是位於 /lib/ 中的 libm.so.6 ,而這是個符號連結至 libm-2.1.3.so 。 請注意輸出文字的最後一個參數。即使已經指定了 %10s ,仍會超過 10 個字元。 不建議使用沒有邊界檢查的記憶體指標操作,如 sprintf 和 strcpy 。 為預防暫存溢位的問題,請以 snprintf 和 strncpy 來取代。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.7.2 除錯 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.7.2.1 用 gdb 來除錯 準備工作: # apt-get install gdb gdb 參考資料: • info gdb (tutorial) • gdb(1) • http://www.unknownroad.com/rtfm/gdbtut/gdbtoc.html 使用 gdb 的 -g 選項可以用來除錯已編譯的程式。很多命令都可以縮寫 。 Tab expansion 的功能和在 shell 時一樣。 $ gdb program (gdb) b 1 # 在第一行設中斷點 (gdb) run arg1 arg2 arg3 # 執行程式 (gdb) next # 下一行 ... (gdb) step # 單步前進 ... (gdb) p parm # 印出 parm ... (gdb) p parm=12 # 設定其值為 12 在 Emacs 下做除錯的工作,請參閱 Editor 指令摘要 (Emacs , Vim), 第 11.3.4 節。 由於編譯好的軟體會被拆解成數個套件安裝到 Debian 系統,大部分的 debugging symbols 是被移除的。為了讓 gdb 能有效地除錯 Debian 套 件,相關的套件在重新編譯時需要注意下列項目: • 編輯 debian/control 來分解套件 version. • 檢查建立套件的 scripts 並使用 CFLAGS=-g -Wall 來編譯軟體。 • 設定 DEB_BUILD_OPTIONS=nostrip,noopt 環境變數來建立 Debian 套件。 請參閱 Policy 10.1 了解更多資訊。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.7.2.2 檢查函式庫相依關係 使用 ldd 可查看程式相依的函式庫: $ ldd /bin/ls librt.so.1 => /lib/librt.so.1 (0x4001e000) libc.so.6 => /lib/libc.so.6 (0x40030000) libpthread.so.0 => /lib/libpthread.so.0 (0x40153000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) 所以在 chroot 的環境下要使用 ls,上列的函式庫在你的 chroot 的環 境中都必需可用才行。 下面的命令也很有用: • strace: 追蹤系統呼叫和訊息 (signal) • ltrace: 追蹤函式庫呼叫 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.7.2.3 用記憶體漏失偵測工具來進行除錯 Debian 中有幾個記憶體漏失偵測工具。 • njamd • valgrind • dmalloc • electric-fence • memprof • memwatch (沒有包成套件,可在 memwatch 取得。) • mpatrol • leaktracer • libgc6 • Insure++ from Parasoft 。 (非自由軟體,商業用途要付費) 也可參閱 Debugging Tools for Dynamic Storage Allocation and Memory Management 。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.7.3 Flex – 更好的 Lex flex 是一個快速的字詞分析產生器。 flex 的參考資料: • info flex (tutorial) • flex(1) 需要提供你自己的 main() 和 yywrap() ,或者你的 program.l 在不用 library 時應該看起來看像這樣 (yywrap是一個巨集;%option main 隱 含地打開了 %option noyywrap): %option main %% .|\n ECHO ; %% 另外,還可以在 cc 命令列末尾加上 -lfl 連接器的選項來進行編譯 (就 像 AT&T-Lex 使用 -ll 一樣),此時就不需要 %option 了。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.7.4 Bison – 更好的 Yacc Debian 中有幾個套件提供了與 Yacc 兼容的 LALR 文法分析生成器: • bison: GNU LALR 文法分析產生器 • byacc: The Berkeley LALR 文法分析產生器 • btyacc: Backtracking parser generator ,以 byacc 為基礎 bison 的參考資料: • info bison (tutorial) • bison(1) 需要提供自己的 main() 和 yyerror() 。 main() 呼叫 yyparse() ,而 yyparse() 呼叫 yylex() ,通常由 FleX 建立。 %% %% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.7.5 Autoconf autoconf 一個 shell script 生成工具,由它生成的 script 能自動設 定軟體的源碼套件,以適用於各種使用完整 GNU build 系統的 UNIX-like 系統。 autoconf 會產生設定 script 的 configure。 configure 使用 Makefile.in 模版來自動建立適合的 Makefile。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.7.5.1 編譯和安裝程式 Debian 不會改動 /usr/local/ 下的文件 (參閱多樣性支援, 第 2.5 節) 。所以如果是從源碼來編譯程式,並將其安裝到 /usr/local/ 下,就不 會影響到 Debian。 $ cd src $ ./configure --prefix=/usr/local $ make $ make install # 這會把檔案放到系統中 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.7.5.2 反安裝程式 如果你仍保有源碼,而且是用 autoconf/automake ,你也記得是如何進 行設定的話: $ ./configure all-of-the-options-you-gave-it # make uninstall 另一種方法是,如果可以確定安裝過程將檔案都放在 /usr/local/ ,並 且該目錄下沒有什麼別的重要文件的話,可用下面的命令將其全部刪除: # find /usr/local -type f -print0 | xargs -0 rm -f 如果不能確定文件安裝到什麼位置,最好使用 checkinstall ,可提供明 確用來反安裝的路徑。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.8 Web 基本的交談性動態網頁可以利用下列方式來實現: • 查詢(query)使用 HTML 格式呈現在使用者的瀏覽器上。 • 填寫和點選網頁上的項目會送出編碼後的參數到網址。 [66] 從瀏覽 器到網頁伺服器的過程,例如: □ http://www.foo.dom/cgi-bin/program.pl?VAR1=VAL1&VAR2= VAL2&VAR3=VAL3 □ http://www.foo.dom/cgi-bin/program.py?VAR1=VAL1&VAR2= VAL2&VAR3=VAL3 □ http://www.foo.dom/program.php?VAR1=VAL1&VAR2=VAL2&VAR3= VAL3 • 網頁伺服器上的 CGI 程式 (任何形式的檔案 program.*) 會收到解 碼後的參數 "VAR1=VAL1 VAR2=VAL2 VAR3=VAL3" 來當成環境變數 "QUERY_STRING" 並執行。 • CGI 程式的 stdout 將會送給使用者的瀏覽器以呈現出交談性的動態 網頁。 為了安全性的考量,最好能避免手動分析這些 CGI 參數。有一些 Perl (參閱Perl, 第 13.4 節)和 Python(參閱Python, 第 13.5 節)能達成這 些功能。PHP 已經內建這些函式。如果需要儲存 client 端的資料,請使 用 cookies。處理 client 端的資料,通常是使用 javascript。 更多的資訊請閱讀 The Common Gateway Interface, The Apache Software Foundation, 和 JavaScript。 在瀏覽器上利用已編碼的網址 http://www.google.com/search?hl=en&ie =UTF-8&q=CGI+tutorial 在 Google 上查詢 "CGI tutorial" 來查閱 CGI script 對於 Google 伺服器的處理是不錯的辦法喔。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.9 文件準備 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.9.1 roff 排版 傳統上, roff 是主要的 Unix 文字處理系統。 參閱 roff(7) , groff(7) , groff(1) , grotty(1) , troff(1) , groff_mdoc(7) , groff_man(7) , groff_ms(7) , groff_me(7) , groff_mm(7) 和 info groff 。 在 -me 巨集中有份不錯的教程。如果你是用 groff (1.18 以上版本), 找到 file:///usr/share/doc/groff/meintro.me.gz 並做下面的動作: $ zcat file:///usr/share/doc/groff/meintro.me.gz | \ groff -Tascii -me - | less -R 下面的作法將產生一份完整的純文字檔案: $ zcat file:///usr/share/doc/groff/meintro.me.gz | \ GROFF_NO_SGR=1 groff -Tascii -me - | col -b -x > meintro.txt 如果要列印的話,就用 PostScript 輸出。 $ groff -Tps meintro.txt | lpr $ groff -Tps meintro.txt | mpage -2 | lpr ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.9.2 SGML 準備工作: # apt-get install debiandoc-sgml debiandoc-sgml-doc debiandoc-sgml 的參考資料: • file:///usr/share/doc/debiandoc-sgml-doc • debiandoc-sgml(1) • DocBook: The Definitive Guide, by Walsh and Muellner, (O'Reilly) (package docbook-defguide) SGML 能夠管理一份文件的多種格式。 Debiandoc 是個較簡單的 SGML 系 統,本文件就是用它來編寫。只需將原本的文字檔對下列字元進行少許轉 換: • "<" --> < • ">" --> > • " " -->   (不可斷行的空白) • "&" --> & • "%" --> % • "(c)" --> © • "–" --> – • "—" --> — 要把一段文字變成不輸出的註解的話,請輸入: 要把一段文字變成可選擇是否輸出的註解的話,請輸入: 在 SGML 中,只有首次定義 (first definition)是有效的。例如: ]]> ¶m; 最後結果是 "Data 1" 。如果第一行是用 "IGNORE" 而不是 "INCLUDE" ,則結果是 "Data 2" (第二行是條件判斷式) 。而且,重覆出現的文字 可提前在文件中定義。 Hello &whoisthis; friend. This is &whoisthis; book. 結果如下: Hello my friend. This is my book. 可參閱 examples 目錄中簡短的 SGML 範例文件 sample.sgml 。 當 SGML 文件不斷增大後,有時以 Tex 做為後端文字處理會出現問題, 請參閱 TeX/LaTeX, 第 13.9.3 節。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.9.3 TeX/LaTeX 事前準備: # tasksel # 請選擇 Miscellaneous --> TeX/LaTeX environment LaTeX 的參考手冊: • The teTeX HOWTO: The Linux-teTeX Local Guide • tex(1) • latex(1) • The TeXbook, by Donald E. Knuth, (Addison-Wesley) [67] • LaTeX - A Document Preparation System, by Leslie Lamport, (Addison-Wesley) • The LaTeX Companion, by Goossens, Mittelbach, Samarin, (Addison-Wesley) TeX 是一個強大的寫作環境。許多 SGML 處理程式使用它來當作後端文字 處理器。lyx、lyx-xforms或lyx-qt內附的 Lyx 以及 GNU TeXmacs 內附 的texmacs提供了相當不錯的 WYSIWYG 編輯環境。使用者大多採用 Emacs 和 Vim 當作撰寫 LaTeX 原始碼的編輯器。 下列有許多線上參考資料: • teTeX - A Documentation Guide (tetex-doc package) • A Quick Introduction to LaTeX • A Simple Guide to Latex/Lyx • Word Processing Using LaTeX • Local User Guide to teTeX/LaTeX 當文件越來越大時,編譯 TeX 有時候會出錯。使用者必須編輯/etc/ texmf/texmf.cnf (或者適當地修改 /etc/texmf/texmf.d/95NonPath並執 行update-texmf)加大 pool size 來修正該問題。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.9.4 文學編程 和在編程時寫文件不同的,文學編程者是在寫文件時編程。這個方法確保 程式有個良好的文件。 要對文學編程有更多了解,請參閱 Literate Programming 。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.9.4.1 Noweb 準備工作: # apt-get install nowebm Noweb 的參考資料: • Noweb --- A Simple, Extensible Tool for Literate Programming • noweb(1) 這是個 WEB-like 的文學編程工具,可更容易地提供擴充性和與語言無關 性, [68] When noweb is invoked, it writes the program source code to the output files mentioned in the noweb file, and it writes a TeX file for typeset documentation. Debian 中的 ifupdown 套件是個好例子。 $ apt-get source ifupdown $ cd ifupdown* $ make ifupdown.pdf ifupdown.ps ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.9.4.2 Doxygen 準備工作: # apt-get install doxygen doxygen-doc doxygen-gui Doxygen 的參考資料 (也是用 doxygen 建立的!): • Homepage • /usr/share/doc/doxygen-doc/html/index.html 它可以由 C++ 、 C 、 Java 、 IDL 和一些 PHP 和 C# 程式產生 HTML 、 RTF 、 Unix manual pages 、 PostScript 和 PDF (使用 LaTeX) 文 件。Doxygen 相容於 JavaDoc (1.1) 、 Qt-Doc 、 KDOC 並被特別設計 為用在使用到 Troll Tech's Qt toolkit 的專案中。它可以建立 include 相依圖,合作圖表,和圖型化的類別繼承圖,即使在沒有被文件 化的程式。它的輸出是類似 Qt 的文件。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.10 包裝套件 準備工作: # apt-get install debian-policy developers-reference \ maint-guide dh-make debhelper # apt-get install packaging-manual # 如果是 Potato 包裝套件的參考資料: • Debian 套件管理系統, 第 2.2 節 (basics) • Debian New Maintainers' Guide (tutorial) • dh-make(1) • Debian Developer's Reference (best practice) • Debian Policy Manual (authoritative) • Packaging Manual (Potato) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.10.1 包裝一個單一二進位套件 Joey Hess 的單一二進位套件快速粗糙的打包法: # mkdir -p mypkg/usr/bin mypkg/DEBIAN # cp binary mypkg/usr/bin # cat > mypkg/DEBIAN/control Package: mypackage Version: 1 Architecture: i386 Maintainer: Joey Hess Description: my little package Don't expect much. ^D # dpkg-deb -b mypkg ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.10.2 使用工具來進行包裝工作 使用 dh-make 套件中的 dh_make 來建立一個基本的套件。接著按照 dh-make(1) 中描述的方法進行。會用到 debian/rules 中的 debhelper 。 一個較舊的方法是使用 debmake 套件中的 deb-make 。不需要 debhelper script,只需要 shell 就行了。但請不要再使用這樣的方法 了。 有關多重源碼套件 (multiple-source) 的例子,參閱 "mc" ( dpkg-source -x mc_4.5.54.dsc) ,其中用到 Adam Heath( doogie@debian.org) 的 "sys-build.mk" 以及 "glibc" (dpkg-source -x glibc_2.2.4-1.dsc) ,它使用到已故的 Joel Klecker( espy@debian.org) 所寫的另一個系統。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一 頁 ] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Debian Reference (version 1) 第 14 章 - GnuPG ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 參考資料: • gpg(1). • file:///usr/share/doc/gnupg/README.gz • file:///usr/share/doc/gnupg-doc/GNU_Privacy_Handbook/ 中的 GNU privacy handbook (安裝 gnupg-doc 套件) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.1 安裝 GnuPG # gpg --gen-key # 產生新的 key # gpg --gen-revoke my_user_ID # 產生 my_user_ID 的廢止用 key # host -l pgp.net | grep www|less # 指出 pgp keyservers 加入一個預設的穩定 keyserver 到$HOME/.gnupg/gpg.conf檔案內: keyserver hkp://subkeys.pgp.net 必須注意不能建立 2 個以上的 sub-keys,如果你這樣做,pgp.net 上的 keyservers 會廢除(corrupt)你的 key。使用新版的 gnupg (> 1.2.1-2) 來處理這些廢除的 subkeys。參閱 http://fortytwo.ch/gpg/ subkeys。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.2 使用 GnuPG 檔案處理: $ gpg [options] command [args] $ gpg {--armor|-a} {--sign|-s} file # 將 file 簽名,存至文字檔 file.asc $ gpg --clearsign file # clear-sign 訊息 $ gpg --clearsign --not-dash-escaped patchfile # clear-sign patchfile $ gpg --verify file # 驗證 clear-signed file $ gpg -o file.sig {-b|--detach-sig} file # 建立 detached 簽章 $ gpg --verify file.sig file # 用 file.sig 驗證 file $ gpg -o crypt_file {--recipient|-r} name {--encrypt|-e} file # public-key encryption intended for name $ gpg -o crypt_file {--symmetric|-c} file # 對稱式加密 $ gpg -o file --decrypt crypt_file # 解密 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.3 管理 GnuPG Key 管理: $ gpg --edit-key user_ID # "help",互動式的說明 $ gpg -o file --exports # 將所有的 key 匯出至 file $ gpg --imports file # 匯入 file 中所有的 key $ gpg --send-keys user_ID # 將 user_ID 的 key 傳送到 keyserver $ gpg --recv-keys user_ID # 從 keyserver 接收 user_ID 的 key $ gpg --list-keys user_ID # 列出 user_ID 的 key $ gpg --list-sigs user_ID # 列出 user_ID 的 sig. $ gpg --check-sigs user_ID # 檢查 user_ID 的 sig. $ gpg --fingerprint user_ID # 檢查 user_ID 的 fingerprint $ gpg --list-sigs | grep '^sig' | grep '[User id not found]' \ | awk '{print $2}' | sort -u | xargs gpg --recv-keys # 取得未知的 keys # 將所有未知的 sigs 更新 key 。 $ gpg --refresh-keys # 更新本地端的 keyrin。 Trust code: - No ownertrust assigned / not yet calculated. e 計算信任度失敗。 q 計算所需的資訊不足。 n 永不信任這把 key。 m Marginally trusted. f 完全信任 (Fully trusted)。 u 極度信任 (Ultimately trusted)。 下面的命令會將我的 key "A8061F32" 上傳到熱門的 key servers hkp:/ /subkeys.pgp.net: $ gpg --keyserver hkp://subkeys.pgp.net --send-keys A8061F32 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.4 在應用程式中使用 GnuPG ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.4.1 在 Mutt 中使用 GnuPG 在 ~/.muttrc 中加入下列的內容,則如果你在 index 選單中輸入 `S' 的話,將會自動啟動一個低速的 GnuPG。 macro index S ":toggle pgp_verify_sig\n" set pgp_verify_sig=no ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.4.2 在 Vim 中使用 GnuPG 將 examples subdirectory 中的 _vimrc 文件的內容加到 ~/.vimrc 就 可以自然的執行 GnuPG。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一 頁 ] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Debian Reference (version 1) 第 15 章 - Debian 的技術支援 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 下列資源提供了與 Debian 相關的幫助、建議和支援。在郵件列表裡大呼 救命之前,務必先好好使用這些資源自助。:) 注意,系統中就有大量的文件,可使用 WWW 瀏覽器來讀取,可透過 dwww 或 dhelp 指令在相關的套件中找到它們。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 15.1 參考資料 下列資源通常適用於 Debian 和 Linux。如果它們的內容彼此間出現衝突 ,應該相信首要的 (primary) 來源而不是像本文件之類的次要 (secondary) 來源。 • 安裝手冊 (Installation Manual) (首要的) □ 在安裝和升級前閱讀。 □ 網站: http://www.debian.org/releases/stable/ installmanual □ 網站: http://www.debian.org/releases/testing/ installmanual (正在進行後,有時會不存在) □ 套件: Not available in install-doc: Bug#155374 □ 檔案: Debian CD under /doc/ • 發佈注意事項 (Release Notes) (首要的) □ 就算你很有經驗,在安裝和升級前也一定要讀。 □ 網站: http://www.debian.org/releases/stable/ releasenotes □ 網站: http://www.debian.org/releases/testing/ releasenotes (正在進行後,有時會不存在) □ 套件: Not available in install-doc: Bug#155374 □ 檔案: Debian CD under /doc/ • FAQ (次要的) □ 常見問題 □ 網站: http://www.debian.org/doc/manuals/debian-faq/ □ 套件: doc-debian □ 檔案: file:///usr/share/doc/debian/FAQ/index.html • Debian 參考手冊 (Debian Reference) (次要的) □ 最全面性的使用手冊 □ 網站: http://www.debian.org/doc/manuals/ debian-reference/ □ 套件: debian-reference-en □ 檔案: file:///usr/share/doc/debian-reference-common/ html/ • APT HOWTO (次要的) □ Debian 套件管理系統的詳細使用指南。(woody) □ 網站: http://www.debian.org/doc/manuals/apt-howto/ □ 套件: apt-howto □ 檔案: file:///usr/share/doc/Debian/apt-howto/ • Debian 安全手冊 (Securing Debian Manual) (次要的) □ 有關如何強化預設安裝的 Debian 系統安全的詳細使用指南。 (woody) □ 網站: http://www.debian.org/doc/manuals/ securing-debian-howto/ □ 套件: harden-doc □ 檔案: file:///usr/share/doc/harden-doc/html/ securing-debian-howto/ • dselect 初學者文件 (dselect Documentation for Beginners) (次 要的) □ dselect 的初學教程。 □ 網站: http://www.debian.org/releases/woody/i386/ dselect-beginner □ 套件: Not available in install-doc: Bug#155374 □ 檔案: Debian CD under /doc/ • Debian Policy Manual (首要的) □ Debian 的基本技術架構。 □ 網站: http://www.debian.org/doc/debian-policy/ □ 套件: debian-policy □ 檔案: file:///usr/share/doc/debian-policy/ • Debian 開發人員參考手冊 (Debian Developer's Reference) (首要 的) □ 開發人員需要了解的基礎知識。 □ 我們之中的一部分人也需要讀一讀。 □ 網站: http://www.debian.org/doc/manuals/ developers-reference/ □ 套件: developers-reference □ 檔案: file:///usr/share/doc/developers-reference/ • Debian 新維護者指南 (Debian New Maintainers' Guide) (首要的) □ 開發人員的實用指南。 □ 我們中的一部分需要閱讀其中的包裝套件教程。 □ 網站: http://www.debian.org/doc/manuals/maint-guide/ □ 套件: maint-guide □ 檔案: file:///usr/share/doc/maint-guide/ • Packaging Manual (Potato) □ Potato 中的 packaging-manual 套件。 (已移到 Developer's Reference 的附錄中。) • Unix-style manual pages (首要的) □ dlocate -man package-name (list available) □ man section command-name • GNU-style info pages (首要的) □ info (access top level) □ info command-name • Package specific documents (首要的) □ 在 /usr/share/doc/package-name 可以找得到 • LDP: Linux Documentation Project (次要的) □ 一般通用的 Linux HOWTOs 和 mini-HOWTOs 。 □ 網站: http://www.tldp.org/ □ 套件: doc-linux-text 和 doc-linux-html □ 檔案: file:///usr/share/doc/HOWTO/ • Linux Gazette (次要的) -- 每月發行 □ The Linux Gazette □ 網站: http://www.linuxgazette.com/ □ 套件: lg-all 或 lg-latest-two □ 檔案: file:///usr/share/doc/lg/ • DDP: Debian Documentation Project (次要的) □ Debian-specific manuals □ 網站: http://www.debian.org/doc/ • Debian Developers' Corner (次要的) □ Debian 開發者的重要資訊。 □ 一般使用者可以用來增廣見識。 □ 網站: http://www.debian.org/devel/ • 源碼 (絕對是首要的) □ 沒人會表示反對吧 :-) □ 按照源碼, 第 2.1.15 節的方法下載源碼。 • Internet Assigned Numbers Authority (主要的) □ 網站: http://www.iana.org/ □ 套件: doc-iana □ 檔案: file:///usr/share/doc/doc-iana/ • Internet requests for comments (IETF 標準) (主要的) □ 網站: http://www.ietf.org/rfc.html □ 套件: doc-rfc □ 檔案: file:///usr/share/doc/RFC/ 下列是 Unix 通用的參考資源。注意各種 Unix 系統之間存在著稍許不同 。設備名稱和初始化方式需要格外注意。 • The UNIX Programming Environment □ 閱讀本書以了解 UNIX 如何運行。 □ 作者: B. W. Kernighan 和 R. Pike □ 由 Princeton Hall Software Series 發行 • The C Programming Language (第二版) □ 閱讀本書來學習 ANSI C。 □ 作者: B. W. Kernighan 和 D. M. Ritchie □ 由 Princeton Hall Software Series 發行 • UNIX Power Tools □ 閱讀本書來學習 Unix 使用技巧。 □ 作者: Jerry Peek , Tim O'Reilly 和 Mike Loukides □ 由 O'Reilly and Associates 發行 • Essential System Administration (第二版) □ 閱讀本書來學習如何管理各種風格的 Unix 系統。 □ 作者: Aeleen Frisch □ 由 O'Reilly and Associates 發行 • Linux: Rute User's Tutorial and Exposition □ 管理 GNU/Linux 系統的精裝版線上書籍。 □ 作者: Paul Sheer □ 由 Prentice Hall 發行 □ 套件: rutebook (從 non-free) □ 檔案: file:///usr/share/doc/rutebook/ • Bell Labs: Computing Sciences Research □ 有關 Unix 歷史的豐富文獻 □ 主要: http://cm.bell-labs.com/cm/cs/ □ 技術報告精選: http://cm.bell-labs.com/cm/cs/cstr.html □ 一些論文: http://cm.bell-labs.com/cm/cs/papers.html • 線上 Linux 通用技術支援資料 □ Debian Planet □ debianHELP □ Linux.com □ The Linux Home Page at Linux Online □ Red Hat (commercial Linux vender) (RPM, Sys-V init) □ SuSE, Inc. (commercial Linux vender) (RPM, Sys-V init) □ Slackware (TGZ, BSD-style init) • 線上一般的 Unix 指南及資源 □ The UNIX System by The Open Group □ A UNIX Introductory Course from Ohio State University □ UNIXhelp from The University of Edinburgh □ Unix / Programming Information □ comp.unix.questions FAQ □ comp.unix.user-friendly FAQ □ FreeBSD Documentation □ The FreeBSD Handbook □ UNIX GUIDE □ The Unix Heritage Society • 自由軟體專案首頁 □ GNU Project □ The Linux Documentation Project □ The Linux Kernel Archives □ The XFree86 Project, Inc □ GNOME □ K Desktop Environment □ GNU software at Red Hat □ Mozilla □ FreeBSD □ OpenBSD □ NetBSD ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 15.2 查詞意 Debian 中使用了大量術語和縮寫,下面的命令將會回答你大多數的疑問 (需安裝dict和相關套件): $ dict put-a-weird-word-here ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 15.3 查找流行的 Debian 套件 Debian 中有許多套件,有時很難決定該裝哪一個。參閱 Debian Popularity Contest Results 可了解別人都在用什麼軟件。亦可安裝 popularity-contest 套件參加投票。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 15.4 Debian 錯誤追蹤系統 Debian distributoin 有一個 bug tracking system (BTS),它將來自使 用者和開發人員的錯誤報告的詳細內容進行歸檔,每個錯誤都有一個編號 ,錯誤報告將一直存在於資料庫中,直到獲得已更正的標記。 在發送錯誤報告之前,請先檢查一下別人是否已提出了相同的錯誤報告。 World Wide Web 或其它地方 elsewhere 均可找到目前未更正錯誤列表。 參閱檢查 Debian 中的 bugs 並尋求幫助, 第 6.3.1 節。 許多嚴重錯誤的報告標記為 FTBFS。意思是 "Fails To Build From Source"。 http://www.debian.org/Bugs/Reporting 中描述了錯誤報告方法。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 15.5 郵件列表 閱讀最新的 "debian-devel-announce" (英文,唯讀且低流量) 與 Debian 保持同步。 Debian 使用者最感興趣的郵件列表是 "debian-user" (英文,開放且高 流量) 和其他的 "debian-user-language" 郵件列表 (給其他語言使用 者)。 想了解這些郵件列表的詳細資訊和如何訂閱,請參閱 http:// lists.debian.org/ 。發言前請先搜尋答案,並注意遵守郵件列表相關禮 儀和規則。 如果你不希望在回覆至郵件列表時收到複本的話,你應該用 Mail-Followup-To: 的標頭,很有效的。這是郵件列表中非官方的習慣, 在 http://cr.yp.to/proto/replyto.html 有些說明。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 15.6 Internet Relay Chat (IRC) IRC (Internet Relay Chat) 可讓你與世界各地的人進行即時地聊天。在 freenode 上可找到與 Debian 相關的 IRC 頻道。要連上頻道,你需要一 個 IRC 客戶端。一些流行的客戶端有 XChat、BitchX、ircII、irssi、 epic4 和 KSirc,每一個都可以在 Debian 套件中找到。安裝好客戶端後 ,你需要連接到伺服器。對大多數的客戶端,可輸入: /server irc.debian.org 當連接上伺服器後,可輸入下面的指令加入 #debian 頻道: /join #debian 要離開 #debian 頻道的話,就輸入 /part #debian 要離開 irc 的軟體,就輸入 /quit 要送個私人的訊息 "Hello Mr. Foo" 給 foo ,請輸入 /msg foo Hello Mr. Foo 要注意的是,你所打的任何東西只要不是以 / 開頭的話,就會被當做是 訊息而送至頻道上。 注意:像 XChat 這類的客戶端在加入伺服器/頻道的圖形使用者介面會有 不同。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 15.7 搜尋引擎 有許多搜尋引擎提供有關 Debian 的文件: • Debian WWW search site. • Google: 將 "site:debian.org" 加入搜尋字詞中。 • Google Groups: 新聞群組搜尋引擎。將 "group:linux.debian.*" 加入搜尋字詞中。 • AltaVista 例如,搜尋字串 "cgi-perl" 會得到更多關於這個套件的詳細說明,而不 只是在 control 檔中的簡要說明。請參考檢查 Debian 中的 bugs 並尋 求幫助, 第 6.3.1 節獲得相關建議。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 15.8 網站 下面是我收集的一些特定主是討論的零散 URL。 • IBM developerWorks: Linux • Adrian Bunk's latest packages (back port to stable) • Linux on Laptops • Xterm FAQ • EXT3 File System mini-HOWTO • Large File Support in Linux • Window Managers for X • Linux USB Project • SuSE pages for CJK • LNX-BBC (Business-card-sized boot CD project) • Linux info by Karsten Self (partitioning, backup, browsers...) • Backup info HOWTO by Alvin Oga • Security info HOWTO by Alvin Oga • Various UNOFFICIAL sources for APT • Laptop Ethernet Configuration ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一 頁 ] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Debian Reference (version 1) 附錄 A - 附錄 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A.1 作者 Debian Reference (version 1) 是由青木修 (Osamu Aoki) osamu#at# debian.org 所發起,剛開始時是做為個人的安裝備忘錄,而後叫做 "Quick Reference ..."。許多內容來自於 "debian-user" 郵件列表的彙 整庫。也參考了 "Debian Installation Manual" 和 "Debian Release Notes" 。 而後由 Debian Documentation Project (DDP) 的積極參與者、也是目前 "The Debian FAQ" 的主要維護者 Josip Rodin 的建議,這份文件更名為 "Debian Reference (version 1)" ,並和 "The Debian FAQ" 中的幾個 類似參考的章節合併。而 "Debian Quick Reference" 則是以節錄的方式 形成。 本文件是由下列 QREF 團隊成員所編輯,翻譯和擴充: • 原本 "Quick Reference..." 的英文原版 □ 青木修 (Osamu Aoki) osamu#at#debian.org (所有內容的領導 者) • 英文版校對和後續的貢獻 □ Esko Araj酺vi edu#at#iki.fi (etch的更新) □ Thomas Hood jdthood#at#yahoo.co.uk (網路相關的內容) □ Brian Nelson nelson#at#bignachos.com (特別是 X 相關的內 容) □ David Sewell dsewell#at#virginia.edu (已退休) □ Jan Michael C Alonzo jmalonzo#at#spaceants.net □ Daniel Webb webb#at#robust.colorado.edu □ 所有翻譯人員的回饋 • 法文版翻譯 □ Guillaume Erbs gerbs#at#free.fr (法文版領導者) □ Renald Casagraude rcasagraude#at#interfaces.fr □ Jean-Pierre Delange adeimantos#at#free.fr □ Daniel Desages daniel#at#desages.com • 義大利文版翻譯 □ Davide Di Lazzaro mc0315#at#mclink.it (義大利文版領導者) • 葡萄牙文版翻譯 □ Paulo Rogerio Ormenese pormenese#at#uol.com.br (葡萄文版 領導者) □ Andre Luis Lopes andrelop#at#ig.com.br □ Marcio Roberto Teixeira marciotex#at#pop.com.br □ Rildo Taveira de Oliveira to_rei#at#yahoo.com □ Raphael Bittencourt Simoes Costa raphael-bsc#at# bol.com.br □ Gustavo Noronha Silva kov#at#debian.org (coordinator) • 西班牙文版翻譯 □ Walter Echarri wecharri#at#infovia.com.ar (西班牙文版領 導者) □ Jose Carreiro ffx#at#urbanet.ch • 德文版翻譯 □ Jens Seidel tux-master#at#web.de (德文版領導者) □ Willi Dyck wdyck#at#gmx.net □ Stefan Schroeder stefan#at#fkp.uni-hannover.de □ Agon S. Buchholz asb#at#kefk.net • 波蘭文版翻譯 — 下列是 PDDP 的成員: □ Marcin Andruszkiewicz □ Mariusz Centka mariusz.centka#at#debian.linux.org.pl □ Bartosz Fenski fenio#at#debian.linux.org.pl (波蘭文版領 導者) □ Radoslaw Grzanka radekg#at#debian.linux.org.pl □ Bartosz 'Xebord' Janowski □ Jacek Lachowicz □ Rafal Michaluk □ Leonard Milcin, Jr. □ Tomasz Z. Napierala zen#at#debian.linux.org.pl □ Oskar Ostafin cx#at#debian.linux.org.pl □ Tomasz Piekos □ Jacek Politowski □ Mateusz Prichacz mateusz#at#debian.linux.org.pl □ Marcin Rogowski □ Pawel Rozanski □ Mariusz Strzelecki □ Krzysztof Scierski □ Przemyslaw Adam Smiejek tristan#at#debian.linux.org.pl □ Krzysztof Szynter □ Mateusz Tryka uszek#at#debian.linux.org.pl □ Cezary Uchto □ Krzysztof Witkowski tjup#at#debian.linux.org.pl □ Bartosz Zapalowski zapal#at#debian.linux.org.pl • 簡體中文翻譯 □ Hao "Lyoo" LIUiamlyoo#at#163.net □ Ming Hua minghua#at#rice.edu □ Xiao Sheng Wen atzlinux#at#163.com (leader: zh-cn) □ Haifeng Chen optical.dlz#at#gmail.com □ Xie Yanbo xieyanbo#at#gmail.com □ easthero easthero#at#gmail.com • 繁體中文翻譯 □ 葉信佑 (asho) asho#at#debian.org.tw (繁體中文版領導者) □ 唐偉清 (wctang) wctang#at#csie.nctu.edu.tw • 日文翻譯 □ Shinichi Tsunoda tsuno#at#ngy.1st.ne.jp (日文版領導者) □ Osamu Aoki osamu#at#debian.org • 芬蘭翻譯 □ Esko Araj酺vi edu#at#iki.fi (芬蘭版領導者) QREF 是原本文件標題 "Quick Reference..." 的縮寫,也是在 qref.sourceforge.net 上的專案名稱。 在編寫本文件時,很多在 Debian 系統中的 manual 頁面和 info 頁面被 當做是主要的參考資料。 To the extent Osamu Aoki considered within the fair quotation stature, many parts of them, especially command definitions, were used as phrase pieces after careful editorial efforts to fit them into the style and the objective of this document. 在 Debian 基礎, 第 2 章中大多數的內容來自於 "The Debian FAQ" ( 2002 年 3 月): • 5. The Debian FTP archives: ftparchives.sgml (整個章節) • 6. Basics of the Debian Package Management System: pkg_basics.sgml (整個章節) • 7. The Debian Package Management Tools: pkgtools.sgml (整個 章節) • 8. Keeping Your Debian System Up To Date: uptodate.sgml (整 個章節) • 9. Debian and the kernel: kernel.sgml (整個章節) • 10. Customizing your installation of Debian GNU/Linux: customizing.sgml (部分章節) 這些 "The Debian FAQ" 的章節為了反應在 Debian 系統的變化,是經過 了較大的重組後才加入本文件的。現在這兩份文件的內容都是同時被更新 的。 最初 "Debian FAQ" 是由 J. H. M. Dassen (Ray) 和 Chuck Stickelman 建立和維護。重新編寫過的 "Debian FAQ" 作者是 Susan G. Kleinmann 和 Sven Rudolph 。在他們之後, "The Debian FAQ" 是由 Santiago Vila 來維護。目前的維護者是 Josip Rodin 。 "The Debian FAQ" 部分的資訊是來自於: • The Debian-1.1 release announcement ,由 Bruce Perens 所著。 • The Linux FAQ ,由 Ian Jackson 所著。 • Debian Mailing List Archives , • the dpkg programmers' manual 和 the Debian Policy manual (參 閱參考資料, 第 15.1 節) • 眾多開發人員、自願者、beta 版測試人員,和 • 其作者的片斷記憶。 :-) 在 "Tutorial" 這一節中有部分內容是來自於: • "Debian Tutorial" by Havoc Pennington, Oliver Elphick, Ole Tetlie, James Treacy, Craig Sawyer, and Ivan E. Moore II. (這份文件是承接自 "Linux User's Guide" by Larry Greenfield 。) • "Debian GNU/Linux: Guide to Installation and Usage" by John Goerzen and Ossama Othman. 作者在此感謝所有曾經幫助完成本文件的人們。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A.2 保證 因為我不是專家,我也不敢自詡對 Debian 或 Linux 瞭若指掌。我所使 用的安全性考量可能只適合於家庭使用。 本文件不能取代任何權威指南。 不提供任何保證。所有商標的所有權均屬於個別商標的所有人。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A.3 回饋 歡迎對本文件提出建議和補充。請以 email 寄給 debian-reference 套 件或個別翻譯套件的 Debian BTS system。使用 reportbug 可以更容易 的提供一個精確的錯誤報告。你也可以用英文寄 email 至 osamu#at# debian.org 給 Osamu Aoki 或是用個別翻譯的語言寄給其翻譯者。 雖然我住在美國,不過我不是道地的英語使用者。歡迎任何有關文法上的 指正。 最好的回饋方式是 SGML 版本的 patch,但是純文字版的 patch 也是歡 迎的。請參閱官方文件網站官方文件, 第 1.1 節。 建立這份文件的原始 SGML 檔也可以 CVS 方式取得。CVS 位於: :pserver:anonymous@cvs.sf.net/cvsroot/qref 或 http:// svn.debian.org/wsvn/ddp/manuals/trunk/quick-reference/. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A.4 文件格式 這份文件是以 DebianDoc SGML DTD (由 LinuxDoc SGML 改寫而來) 來編 寫。 DebianDoc SGML 系統讓一份原始文件可產生各種格式的文件,例如 ,本文件可以用 HTML,純文字,TeX DVI,PostScript,PDF 和 GNU info 等方式來閱讀。 DebianDoc SGML 的轉換工具可在 /debiandoc-sgml套件中取得。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A.5 Debian 迷宮 Linux 系統是一個基於連網電腦的強大計算平台。然而,學習使用它所有 的功能並非易事。設定印表機就是個好例子。 有一張完整而詳盡的地圖叫做 "SOURCE CODE"。它非常準確但極難理解。 還有一些參考書叫 HOWTO 和 mini-HOWTO。它們易於理解但給出了太多細 節反而讓人迷失了方向。為了使用某個命令,我有時得在長長的 HOWTO 中找上半天。 為了在 Linux 系統設定的迷宮裡找到出路,我開始用文字檔的格式寫下 簡單的備忘錄,作為我快速參考之用。當這些備忘錄越積越多之時我學會 了 debaindoc 。於是 Debian Reference (version 1) 就產生了。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A.6 Debian 諺語 這裡有一些來自於 Debian 郵件列表的有趣諺語。 • "This is Unix. It gives you enough rope to hang yourself." —Miquel van Smoorenburg miquels@cistron.nl • "Unix IS user friendly... It's just selective about who its friends are." —Tollef Fog Heen tollef@add.no ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Debian Reference (version 1) 註 1 debian-installer 專案介紹了一種副檔名為 .udeb 的套件格式。簡單來 說,它是一種簡化型.deb,因為不用遵循 Debian policy。沒有納入文件 且只使用在 debian-installer,Debian installer一開始是針對 Sarge 發行而設計的。.deb 與 .udeb 檔案格式是相同的。udpkg 是用來處理 .udeb 套件,但功能上比 dpkg 要來的少且支援較少的相依資訊。兩者的 差別在於 Debian 檔案維護者並不喜歡這些檔案庫裡的 .debs 不遵循套 件政策,所以才選擇不一樣的副檔名以免使用者不經意地安裝這些套件到 系統上。.udebs 是用在安裝系統時建立的限制型 Debian 的初始 ramdisk。 .udebs are used in an initial ramdisk during the base install only to create a very restricted Debian system. 2 Debina提供這種機制是為了支援系統從a.out格式向ELF格式安全升級,在 該過程中套件的解包順序攸關重要。對於某些重大升級這種機制也很有用 。 3 同時按下鍵盤左邊的 Ctrl, Alt 以及 F1。 4 如果您編輯 /etc/motd,則問候訊息就會不同。 5 我必須說明我常常使用超級使用者帳號,只因為它是很容易且我比較不拘 小節。 6 安裝 gpm, emacs21 和 doc-linux-html 也是不錯的選擇喔,請參閱滑鼠 設定, 第 3.3 節 and 編輯器, 第 11 章。 7 我傾向將此帳號命名為 admin,當然也可以是任何有權威性的名字。 8 您可以將 penguin 加入到 adm 群組中以便讀取 /var/log/ 中的紀錄檔 。請參閱 passwd(5), group(5), shadow(5), group(5), vipw(8) 和 vigr(8)。對於使用者帳號和群組的官方定義,請參考最近的 Users and Groups。 9 請在主控台同時按下 Ctrl,Alt(位在鍵盤的左邊) 以及 Delete 鍵。預設 的情況是會重新開機。如同其它主機安裝提示, 第 3.8 節說明的,編輯 /etc/inittab 檔案中的 shutdown並加入 -h 就能關機。 10 Debian 系統會這樣做的原因是因為在安裝系統後,良好的檔案權限可以 防止非特權用戶破壞系統。當然,依然有許多存在的漏洞被發現,但這些 問題應該是留給適合 Securing Debian Manual 的使用者而非閱讀此章節 的人。 11 同時按下左Ctrl鍵和D。不需要按 Shift 即使是控制字元被標示成大寫的 "control D"。 12 如果您將 penguin 換成 root 登入,就會取得 root 權限。如果您要重 新取得 root 權限請執行這個動作。 13 如果您不清楚我說明的,可以先跳過。 14 如果是在像 kon 和 Kterm for Japanese 等使用某些圖形特性的終端的 話,則在命令列中加上 -a 可以預防 MC 出現一些問題。 15 事實上,vi 或 nvi 是您在那都能取得的。我推薦新手使用 vim 是因為 按下 F1 就能看到說明文件且類似於前者並提供更強大的功能。 如果您不熟悉 vim 或不喜歡用,那麼您可繼續使用 mcedit 來處理大部 份系統維護的工作。自從 mcedit是以 8-bit 編碼且傻瓜(指不理會檔案 編碼),用它來修改未知編碼的檔案是比較方便的。mcedit無法正確顯示 UTF-8 的檔案。 16 在本章節中,shell 指的是 bash。想要伸入了解各個 shell 的差異,請 參閱 Shell, 第 13.2 節。 17 在正常的 Linux 文字主控台下,只有左邊的 Ctrl 和 Alt 是有用的。 18 您可以利用 stty(1) 來關閉這個終端機功能。 19 在 X 系統環境下,滑鼠的功能跟 Xterm 軟體一樣。 In the X Window environment, the mouse functions in the same way with the Xterm program. 20 我在這邊使用 "Unix" 當作通解。任何的 Unix 系列的作業系統通常有提 供一樣的指令。Debian 也不例外。別擔心,如果有些指令不能運作,這 些範例將不會在這邊出現。 21 如果在 shell 使用 alias,則輸出的結果就不相同。 22 Unix 有個傳統是將檔案名稱以 "." 開頭為隱藏檔。這些檔案通常是紀錄 設定資訊和使用者偏好設定。 23 全新精簡的 Debian 系統預設的 pager 為 more,但不能上下捲動。執行 apt-get install less 來安裝 less 就會變成預設的 pager 且您可以使 用方向鍵來捲動上下頁。 24 正規式表示法中的 [ 和 ] 可使 grep 避免收尋到自己。至於表示法中的 4* 代表符合四個字元的次數大於零來使grep匹配exim和exim4。雖然 *皆 可用在 shell filename wild card 和正規表示法,但兩者的意義是不同 的。 25 在這裡用 --bzip2 來替代較短的 -j 來保證 Potato 中舊版的 tar 能正 常工作。 26 同樣地,--bzip2是確保相同性。 27 在這裡,我省略了一些東西,這對於新手比較好入手。詳細說明請參閱 See bash(1)。 28 要完成下列的輸出,您必須安裝 French locale,參閱 Locales, 第 9.7.2 節。這並不是該指南的基本。這只是為了說明它另一個結果。 29 Debian 系統是多工的系統。 30 在某些系統上,目錄(diretory) 也被稱為資料夾(folder)。 31 您可以用任意的字母或符號來命名檔案,但實際上這不是好的命名方式。 最好能避免使用一些特殊意義的字元,比如 spaces, tabs, newlines 和 其他特殊意義的字元:{ } ( ) [ ] ' ` " \ / > < | ; ! # & ^ * % @ $。 如果您想要分隔檔名中的字串,逗號(,),連字符號(-)和底線(_)是比較 推薦的。您也可以用大寫,像是這樣:LikeThis。 32 關於 path 也有不同的用法。參閱指令收尋路徑, 第 4.3.6 節。透過上 述的解釋應該就可了解。 33 當然,這各方法只適用於 3 個數字寬的表示法。 34 如果您的系統以testing 或 unstable為主,您可以移除/etc/apt/ sources.list 和 /etc/apt/preferences中的 stable敘述,因為testing 初使是拷貝自stable。 35 upgrade與dist-upgrade不同的地方是對於那些升級套件的相依性問題的 處理方式。請參閱apt-get(8)來了解更多細節。 aptitude upgrade 和 aptitude dist-upgrade 是aptitude 的組合指令 。按下 e可以全螢幕顯示。 36 Some *config scripts are disappearing in the newer Sarge releases and the package configuration functionality are moved to the debconf system. 37 recode 比iconv允許更多方便的別名。 38 行尾表示法: • Carriage return means ASCII 13, ASCII 0xD, ^M, and \r . • Line feed means ASCII 10, ASCII 0xA, ^J, and \n . 39 /etc/default/下的檔案只有包含系統環境變數。當 init script 執行時 會讀取對應的檔案來改變 init script 中預設的變數。請參閱 peculiar 來了解 Debian 選擇該目錄的原因。/etc/default/同等於 Red Hat 等系 統中的 /etc/sysconfig。 40 雖然 Woody 並沒有納入,你可以從 Sarge 來安裝這些字型。 41 由於 Microsoft 的網站在 8/2002 之後有更動,所以 Woody 裡的套件無 法正常運作。請改用 Sarge 裡的版本。 42 在我機器上已經沒有任何 xft1 的東西,所以我不確定你是不是需要重新 啟動 X。我似乎記得 "xftcache" 會更新 Xft1 快取,但如果某人可以對 我證實會更好。 43 Woody 沒納入 Fontconfig。 44 接下來的部份以 exim 為例子。Sarge 的話則以 exim4 取代。 45 您必須遵循這規則並套用在撥接、DSL、cable或區網等透過寬頻路由器連 接網路的主機。就算您的家用主機有固定 IP,還是建議採用該方法。大 部份的工作站或家用服務可歸納於這個類型。 46 這在個範例上,有兩個問題會影響到blackbox2003的發行版本。下指令時 是在 sh -c 環境下。另外,root 不需要建立 ~/.menu/* 項目,改用 / etc/menu/* 取代。 47 使用一個不會重複到其他套件名稱的名字。 48 使用一個不會重複到這個套件的名字。 49 section="/" 的斜線會使該項目加入到初始的選單中,title=" Mozilla Navigator" 前頭的空白會使該項目加入到列表最頂端。 50 在多國語系環境下,language-env 套件並不那麼實用。 51 注意,有些Wi-Fi裝置是抓用乙太網路裝置的名稱,只是參數的設定是針 對 Wi-Fi。這些參數是由iwconfig控制。 52 這是針對 IPV4 而言。IPV6是採用 128bit 定址,請參閱http:// www.ipv6.org/。 53 這樣的系統缺乏彈性並會浪費許多網路位置,所以現在的 IPV4 網路是採 用可變的長度來分組。 54 網域的計算方式是將 IP 位置與網路遮罩進行 AND 運算。而廣播位置的 計算是先網路遮罩經過一補數計算再與網域進行 OR 運算。 55 這一個設定檔案包括使用這一個 call 選項。 56 在 2004 年四月也有一個套件 dhcp-client 可以利用。這包含了 ISC DHCP 用戶端的第二個版本。這已經被目前套件 dhcp3-client 的第三版 本所取代。維護人員計劃在 Sarge 釋放之後將 dhcp3-client 重新命名 為 dhcp-client 。 確認你沒有安裝 dhcp-client 的測試版本。ifupdown 並不和他們一起運 作。 57 /etc/network/interfaces 的格式與現行的 ifupdown 版本和早先的 Potato 版本的套件是不能並存的。這 ifupdown 在後安裝的 script 在 必要時應該自動的升級檔案。無論如何,去檢查有改變的檔案這是一個好 主意。 58 參閱 bug #196877。 59 參閱 bug #127786。 60 這專門術語是使用在 ifupdown 套件中的使用說明。 61 注意,命名含有 auto 字串的那一行上的裝置界面必須是 physical 裝置 界面,而不是邏輯裝置界面。 62 注意,這個動作忽略了 "stop"軟連結(/etc/rc?.d/K??foo)。更多訊息請 參閱 Runlevels, 第 2.4.2 節。 63 網路硬體也能被安裝在 /etc/hotplug.d/net/ 目錄下的 hook script 設 定。例如,安裝ifplugd 和 waproamd套件會增加這些 hook script。 64 在 0.0.20040329-4 左右的版本,hotplug在某些情況下可以加入不同模 式,使得它控制的方式跟往常不一樣。有一種模式為 "all",hotplug會 帶起所有的可熱抽換裝置介面。另外有一種模式為 "auto",hotplug只會 帶起列在/etc/network/interfaces中的 auto 敘述行的裝置介面。在這 些模式裡,ifup 不會加入=hotplug附加參數啟動。 65 在先前發行的 Debian 版本裡,設定 PCMCIA 網路卡的標準動作是透過 cardmgr的 hook script/etc/pcmcia/network 和 /etc/pcmcia/ network.opts。這些hook scripts是比 Linux 獲得更多熱抽換機制前就 已經開發好了。 還是有些人使用 Debian Woody 的 scripts 為預設的解決方式,不管裝 置介面加入或移除時,他們只用ifup和ifdown來處理。現在推薦改使用 hotplug 來管理這些事情。 其餘的人仍然使用特別的啟動系統;當 /etc/pcmcia/network.opts中的 特定變數被設定成 "y"時,直接呼叫低階的網路設定指令來啟動裝置介面 。該系統有些許的問題。在某些 race condition 下會出錯;它只能用在 16 bit 的 PCMCIA 卡;留給 ifupdown 來處理會比較恰當。所以不贊成 使用該方式。 66 這裡的 %nn 是將字元編碼成 16進位。 nn. 67 可以到 ftp://ftp.dante.de/pub/tex/systems/knuth/tex/texbook.tex 取得書中的 Tex 原始碼。ftp://ftp.dante.de/pub/tex/systems/knuth/ lib/manmac.tex內建大部分所必須的巨集。加入\input manmac \ proofmodefalse來註解掉第七到第十的內容,就可以使用tex來編譯該文 件了。 建議買下此書(以及 Donald E. Knuth 其他的書籍)來替代線上的版本, 即使是 Tex 原碼對於 TeX 輸入是很棒的範例。 68 This WEB has nothing to do with World Wide Web。WEB (用 PASCAL) 和 CWEB (用 C/C++) 是傳統的文學編程工具。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ [ 上一頁 ] [ 目錄 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 下一 頁 ] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Debian Reference (version 1) This translation is based on old version of Debian Reference (English, version 1.x), well before Sat, 26 Jan 2008. Osamu Aoki osamu#at#debian.org Asho Yeh asho#at#debian.org.tw 作者, 第 A.1 節 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━