2009年9月7日 星期一

如何在 FreeBSD 安裝 Java

說明:學習 FreeBSD 的套件安裝,Java 是一個不錯的練習,因為它有點難又不會太難,剛好適合了解 Ports 的運作,由於 在 FreeBSD 中可安裝的 Java 方式很多,在這邊選擇的應該算是相當簡單的方式,利用 Ports 來安裝 Diablo JDK 1.6.0_07。

作業系統:Freebsd 6.4
Java 版本:Diablo Java 1.6.0_07

步驟一

前往 FreeBSD Foundation 頁面下載套件

下載 Diablo Caffe JDK 1.6.0-7
  • diablo-jdk-freebsd6.i386.1.6.0.07.02.tbz
  • diablo-caffe-freebsd6-i386-1.6.0_07-b02.tar.bz2
步驟二

將下載好的檔案複製到 /usr/ports/distfiles/

步驟三

# cd /usr/ports/java/diablo-jdk16
# make install clean

步驟四

確認是否安裝完成,登出後登入
# java -version
java version "1.6.0_07"
Diablo Java(TM) SE Runtime Environment (build 1.6.0_07-b02)
Diablo Java HotSpot(TM) Client VM (build 10.0-b23, mixed mode, sharing)
注意事項:

當第一次安裝時會遇到 config 頁面,建議 POLICY 與 TZUPDATE 皆取消,不要安裝。若你已選擇要安裝,也可輸入
# make config
來取消選擇。

如何尋找想安裝的 FreeBSD 套件

官方正式的搜尋方法

以 ldap 關鍵字搜尋 ports 之下各套件名稱,介紹等。
# cd /usr/ports
# make search key=ldap

以 ldap 關鍵字搜尋 ports/ftp 下各套件名稱,介紹等。
# cd /usr/ports/ftp
# make search key=ldap

以 ldap 關鍵字搜尋,ports 下各套件名稱
# cd /usr/ports
# make search name=ldap

其他指令搜尋
# echo /usr/ports/*/*lsof*
/usr/ports/sysutils/lsof

# whereis lsof
lsof: /usr/ports/sysutils/lsof

參考文件:

2009年8月28日 星期五

CentOS 5.3 網路安裝

網路安裝流程相當簡單,但因為某些原因我卡住了,在這邊紀錄一下正確流程
主要參考來源:http://www.chrisgountanis.com/technical/34-technical/45-centos-netinstall.html
Images re reference:http://www.chrisgountanis.com/technical/34-technical/45-centos-netinstall.html

下載 Net Install 光碟 Iso
檔名:CentOS-5.3-i386-netinstall.iso
義守大學:http://ftp.isu.edu.tw/pub/Linux/CentOS/5.3/isos/i386/CentOS-5.3-i386-netinstall.iso
台中教網:http://ftp.tcc.edu.tw/Linux/CentOS/5.3/isos/i386/CentOS-5.3-i386-netinstall.iso

Configure TCP/IP

這邊很簡單,就是設定網路,關不關 IPv6 都可以。

Choose Installation Method

在此請選擇 HTTP


HTTP 設定


台灣的 mirror 站台很多,可任選一個,由官網 Mirrors List 查詢

以義守大學為例
Web site name: ftp.isu.edu.tw
Directory:/pub/Linux/CentOS/5.3/os/i386/

以台中教網為例
Web site name: ftp.tcc.edu.tw
Directory:/Linux/CentOS/5.3/os/i386/

開始安裝 - 成功畫面

當開始取得 img 時,會出現以下畫面



注意事項:
  1. 我第一次安裝時,卡在網路設定錯誤,但由於沒有錯誤訊息,一直以為是鏡射站台輸入有誤。當網路設定未成功時,畫面會一直停住,但成功時,則是會很快(1-3 秒)載入安裝方法的選擇頁面,可由此判斷網路是否設定成功。
  2. CentOS 5.3 安裝時,記憶體至少要大於 256MB,大約 384 MB以上,我使用 256 MB 安裝會一直失敗,由官網的討論區確認,這個情形好像只有 CentOS 5.3 才有。
  3. 在輸入 HTTP Setup,可輸入相對路徑,如:CentOS/5.3/os/i386,理論上,系統會自動搜尋站台。

2008年10月30日 星期四

ps 指令的範例蒐集

行程 (process) 的意義 ,已談過何謂行程並簡介 ps 這個指令。
現在我想要做的不是深入探討 ps 指令的意義,而是蒐集常用 ps 指令串,列出提及的旗標,
這將方便我快速查詢目前的行程狀態。

一般旗標:
-A:顯示所有程序
-e:顯示所有程序
T: 顯示現行終端本身的所有程序
a: 顯示現行終端本身的所有程序,包括其他使用者
x: 顯示所有程序,不以終端來區分。
輸出格式規劃:
-f:全格式的顯示。
-l:較長、較詳細的將該 PID 的的資訊列出。
j:工作的格式 (jobs format)。
u:以使用者導向顯示。
f:以 ASCII 字符顯示程序的樹狀結構,以表示程序間的關係

注意:
ps 指令支援多種作樣系統,故旗標相當多元,有沒有 - 號,代表意義完全不同
,部分作業系統可相容兩種顯示,但一般學習 ps 指令還是得分辨有沒有 - 的差異。

範例一:最常用顯示詳細行程狀態

bang@linuxdiary:~$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 1692 552 ? S Sep30 0:01 init [5]
root 2 0.0 0.0 0 0 ? S Sep30 0:00 [migration/0]
範例二:次常用顯示所有行程狀態
bang@linuxdiary:~$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Sep30 ? 00:00:01 init [5]
root 2 1 0 Sep30 ? 00:00:00 [migration/0]
範例三:顯示某個指令行程狀態
bang@linuxdiary:~$ ps -fC httpd
UID PID PPID C STIME TTY TIME CMD
root 26990 1 0 Oct25 ? 00:00:00 /usr/sbin/httpd
範例四:找出某兩個服務有關行程
bang@linuxdiary:~$ ps aux | egrep 'cron|syslog'
root 3270 0.0 0.0 1604 608 ? Ss Sep30 1:51 syslogd -m 0
root 3761 0.0 0.0 4624 1044 ? Ss Sep30 0:07 crond
root 14312 0.0 0.0 5216 1344 ? S 04:00 0:00 crond
root 20013 0.0 0.0 3732 716 pts/1 S+ 12:07 0:00 egrep cron|syslog
範例五:列出 CPU 使用率最高的 10 行程
bang@linuxdiary:~$ ps aux | head -1 ; ps aux | sort -k3rn | head -10
範例六:列出記憶體使用率最高的 10 行程
bang@linuxdiary:~$ ps aux | head -1 ; ps aux | sort -k4rn | head -10
範例七:另一種列出記憶體使用率最高的 10 行程,他是利用排列 SZ (記憶體使用量)
bang@linuxdiary:~$ ps -elf | head -1 ; ps -elf | sort -k10rn | head -10
範例八:列出行程樹
bang@linuxdiary:~$ ps auxf

2008年10月1日 星期三

學習使用 Logwatch (日誌檢視系統)

每天檢視日誌是系統管理員的工作,但就算是老練的網管一個個日誌檔的檢視,也要解讀老半天,使用 Logwatch 將幫助你更有效的檢視日誌。它主要用途是收集系統上的日誌資料,以淺顯易懂的方式表達,並 Email 給系統管理員,由於它已安裝在 Linux 中,基本上你只需要知道如何配置及使用,以下節錄 Logwatch 內容片段。
--------------------- Disk Space Begin ------------------------
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
108G 68G 35G 67% /
/dev/hda1 99M 26M 69M 28% /boot
---------------------- Disk Space End -------------------------

大略在 Logwatch 7 之後的版本,設定檔被移至 /etc/logwatch/conf/ 目錄下
,其中包含 ignore.conf,logfiles,logwatch.conf,override.conf,services 等檔案。
且都是空的檔案與資料夾,表示一切設定為預設值。而預設的範例設定檔則放置於
/usr/share/logwatch/default.conf,你可以參考此檔案的預設設定,而將它改寫至 /etc/logwatch/logwatch.conf 中。

以下我們用問答的方式來介紹 Logwatch 常用功能與常見問題。

問題一:將日誌寄給誰,由誰寄出

我們可以在 /etc/logwatch/logwatch.conf 中,設定 Logwatch 將日誌資料寄到哪個信箱,以及由誰寄出。

#寄給誰

MailTo = admin@aaa.com

#由誰寄出

MailFrom = admin@aaa.com

問題二:如何移除不想分析的服務

有些服務不是那麼重要,移除後可以減少日誌郵件寄出的大小,Logwatch 預設為掃描所有的服務,參數為 All,所花的時間是最多,為了節省時間,可以把不需要分析的移除,以下為範例。

# The 'Service' option expects either the name of a filter

# (in /usr/share/logwatch/scripts/services/*) or 'All'.

# The default service(s) to report on. This should be left as All for most people.

Service = -audit

Service = -cisco

Service = -http

Service = -samba

Service = -postfix

問題三:省略寄信步驟,直接列出昨天的日誌資訊

[root@lamp ~]# logwatch --print

問題四:單獨查看某個服務 (如 clamav )

[root@lamp ~]# logwatch --service clamav --print

問題五:剛剛修改 logwatch config 設定,想馬上知道結果

修改 range 旗標,將其目標縮小至今天。

[root@lamp ~]#logwatch --service clam-update --range Today --print

問題六:如何移除警告 Warning: Large mailbox: root

Large Mailbox threshold: 40MB (41943040 bytes)
當收到的 Log 其中個人郵件超過 40MB 就會被記錄,可以根據以下說明修改限制大小。
在 /etc/logwatch/conf/servicessendmail-largeboxes.conf 中

  # Mailbox size threshold

# can add units KB, MB, GB, TB

# can set to 0 to report spool files being created where they shouldn't

sendmail_largeboxes_size = 40MB

# 改為希望的大小就可以了。

2008年9月1日 星期一

在 CentOS 5 安裝 MRTG

1.安裝 snmp 與 MRTG

bang@linuxdiary:~$ yum -y install net-snmp mrtg net-snmp-utils

說明:安裝 net-snmp-utils 是為了使用 snmpwalk。

2.設定 snmp

先備分一份設定檔

bang@linuxdiary:~$ cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.bak

編輯設定檔 /etc/snmp/snmpd.conf
在 snmpd.conf 有好幾段範例,請註解第一段範例,使用者由第二個範例修改。
在第二段範例設定一開始你可以看到

# Here is a commented out example configuration that allows less
# restrictive access.

你需要修改的地方只有 community string,其餘請依序移除註解。

a.設定 community string

#       sec.name  source          community
com2sec local localhost hplus

說明:hplus 即為 community string

b. Map Group name

#       groupName      securityModel securityName
#group MyRWGroup any local

說明:移除紅色 #

c. 設定檢視權限

#           incl/excl subtree                          mask
#view all included .1 80

說明:移除紅色 #


d. 最後,讓群組可以唯讀方式檢視系統

#                context sec.model sec.level prefix read   write  notif
#access MyRWGroup "" any noauth 0 all all all

說明:移除紅色 #

e.啟動 SNMP

bang@linuxdiary:~$ /etc/rc.d/init.d/snmpd start

f.測試 SNMP

bang@linuxdiary:~$ snmpwalk -v 1 localhost -c hplus

若 snmp 安裝完成,會顯示一大堆 snmp 回傳訊息,以下節錄一小段

SNMPv2-MIB::sysDescr.0 = STRING: Linux www.hundredplus.com 2.6.15-1.2054_FC5 #1 Tue Mar 14 15:48:33 EST 2006 i686
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (2289589) 6:21:35.89
SNMPv2-MIB::sysContact.0 = STRING: Root (configure /etc/snmp/snmp.local.conf)

g.防火牆

如果不是觀察本機端 SNMP,請記得對方要開啟 UDP PROT 161

3.設定 MRTG

架構說明

觀察對象的 Community String:hplus
輸出設定目錄:/etc/mrtg/
輸出網頁目錄:/opt/lampp/htdocs/mrtg/
目的:建立主機流量圖

a.產生 cfg 檔案
執行以下命令

bang@linuxdiary:~$ cfgmaker --global 'WorkDir: /opt/lampp/htdocs/mrtg' \
--global 'Options[_]: growright' \
--output /etc/mrtg/network.cfg \
hplus@localhost

說明:更多 cfgmaker 設定請參考
http://mrtg.cs.pu.edu.tw/doc/cfgmaker.en.html

b.執行 mrtg

bang@linuxdiary:~$ env LANG=C /usr/bin/mrtg /etc/mrtg/ network.cfg

說明:會出現多行警告訊息如下

Rateup WARNING: /usr/bin/rateup Can't remove localhost_2.old updating log file

請重複執行命令,直到警告消失為止

c.產生網頁

bang@linuxdiary:~$ indexmaker /etc/mrtg/network.cfg > /opt/lampp/htdocs/mrtg/network.html

說明:輸出的網頁只是一種顯示方式,可依據喜好編輯網頁。

e.檢視網頁是否建立成功

http://localhost/mrtg

你應該要看到以下圖片

f.自動排程

編輯 /etc/cron.d/mrtg ,加入已下一行

*/5 * * * * root env LANG=C /usr/bin/mrtg /etc/mrtg/network.cfg

說明:每五分鐘執行一次,需重新啟動 crond

bang@linuxdiary:~$ /etc/rc.d/init.d/crond restart

4.其他觀察指標

下載 mrtg.zip,利用現成範例檔案,完成其他觀察指標,以記憶體為例,解開壓縮檔後,上傳 mem.cfg 至 /etc/mrtg,並編輯

Target[freemem]: .1.3.6.1.4.1.2021.4.11.0&.1.3.6.1.4.1.2021.4.11.0: hplus@localhost
Title[freemem]: Free Memory
MaxBytes[freemem]: 10000000
kMG[freemem]: k,M
YLegend[freemem]: bytes
ShortLegend[freemem]: bytes
PageTop[freemem]: Free memory, not including swap, in bytes
Legend1[freemem]: Free memory, not including swap, in bytes
LegendI[freemem]: Free Memory:
LegendO[freemem]:
Options[freemem]: nopercent,growright,gauge,noinfo
WorkDir:/opt/lampp/htdocs/mrtg/
Language:big5

編輯檔案時,需確認 Community String@觀察 IP,輸出網頁目錄是否正確。
完成後,執行回到之前 設定 MRTG介紹,重複執行 b,c,e,f 動作即可。

同理依序上傳並編輯各個檔案,包含

AttemptFails.cfg
連線嘗試失敗
cpu_act.cfg
CPU 負載率
cpu_idle.cfg
CPU 閒置率
cpu_usr.cfg
CPU 使用者與系統使用率
dsk.cfg
磁碟使用率
estabcons.cfg
目前連線數
hrStorage.cfg
磁碟目前用量
mem.cfg
記憶體使用率
newconn.cfg
新建立連線數

5.監控硬碟項,要注意的地方

a.監控硬碟必須先知道我們掛載的情況

輸入命令

bang@linuxdiary:~$ df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
471016352 14887036 431817100 4% /
/dev/sda1 101086 10960 84907 12% /boot
tmpfs 1037820 0 1037820 0% /dev/shm

利用以上資訊,編輯 snmp.conf

b.然後在 snmp.conf 指定硬碟

開啟 /etc/snmp.conf`,尋找 # disk checks
你可以看到一些設定範例,可將 df 所得資訊,插入以下兩行

disk / 471016352       #代表第一個要觀察的分割區

disk /boot 101086 #代表第二個要觀察的分割區

c.於/etc/mrtg 編輯 dsk.cfg,內容如下

LoadMIBs: /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
Target[kontor.root]:dskPercent.1&dskPercent.2:MY_SRTING@localhost
MaxBytes[kontor.root]: 100
Title[kontor.root]: DISK USAGE
PageTop[kontor.root]: DISK / and /boot Usage %
Unscaled[kontor.root]: ymwd
ShortLegend[kontor.root]: %
YLegend[kontor.root]: DISK Utilization
Legend1[kontor.root]: Root disk
Legend2[kontor.root]: /boot disk
Legend3[kontor.root]:
Legend4[kontor.root]:
LegendI[kontor.root]: Root disk
LegendO[kontor.root]: /boot disk
Options[kontor.root]: growright,gauge,nopercent
WorkDir:/opt/lampp/htdocs/mrtg

編輯檔案時,只需確認 Community String,觀察 IP,輸出網頁目錄是否正確。
完成後,執行 設定 MRTG:b,c,e,f 動作即可。

6.編輯 index.html

這是最後結果,可視情況要不要作,當所有範例檔都修改並上傳完成,可根據範例包中 index.html,
修改連結與圖片正確的位址,即完成所有安裝。

範例

<div>
<a href="freemem.html"><img border="1" alt="freemem Traffic Graph" src="freemem-day.png"></a><br>
<small><!--#flastmod file="kontor.root.html" --></small>
</div>

2008年5月14日 星期三

如何知道現在的 Distribution

Distribution 不知道該怎麼翻譯,通常我會叫他「發佈」或「發行」,指的是各個軟體商或社群利用不同版本的核心,自行組裝各種套件,客製化後的各種不同 Linux 版本,如 Slackware、Red Hat、Mandriva、Debian、Ubuntu 等。
隨著發行版本越多,個人手邊安裝的系統也越多,加上版本號不斷更新,常常遊走不同版本之間的人難免會錯亂,現在是第幾版?哪一個 Distribution?核心是多少 ...
以下整理如何解決這些問題:

  • 從開機紀錄著手
    dmesg 可以將開機紀錄列印出來,/var/log/dmesg 也記錄著相同資料。
    bang@linuxdiary:~$ dmesg | head -1

    Linux version 2.6.12-1.1381_FC3smp (bhcompile@porky.build.redhat.com) (gcc version 3.4.4 20050721 (Red Hat 3.4.4-2)) #1 SMP Fri Oct 21 04:03:26 EDT 2005

  • 利用 /proc/version
    這裡的結果與 dmesg 顯示的結果相同
    bang@linuxdiary:~$ cat /proc/version

    Linux version 2.6.12-1.1381_FC3smp (bhcompile@porky.build.redhat.com) (gcc version 3.4.4 20050721 (Red Hat 3.4.4-2)) #1 SMP Fri Oct 21 04:03:26 EDT 2005

  • 利用 /etc/issue
    這個方式應該是最接近標題問題的正確解答
    bang@linuxdiary:~$ cat /etc/issue

    Fedora Core release 3 (Heidelberg)
    Kernel \r on an \m
  • 如何查詢核心版本
    這是 LPI1 的基本考題
    bang@linuxdiary:~$ uname -a

    Linux hundredplus.com 2.6.12-1.1381_FC3smp #1 SMP Fri Oct 21 04:03:26 EDT 2005 i686 i686 i386 GNU/Linux

2008年3月25日 星期二

如何製作 ssh 的鑰匙

使用 puttygen 製作鑰匙
  1. 點選 PUTTYGEN.EXE 程序 (官網下載頁面)。
  2. 在 Parameters 一欄選擇 Key 類型為「SSH2 DSA」。( 其實這裡的三個選項都可以選,主要式配合你的 ssh )
  3. 點擊 Generate 按鈕。
  4. 在空白處隨機移動鼠標用以產生隨機數據。這些隨機數據將被 Puttygen.exe 用來產生安全的 KEY (密鑰),收集到足夠的隨機數據密鑰就會產生。
  5. 基本上此時鑰匙以建立完成,但若你考慮在鑰匙上加上安全機制,可在"Key passphrase" 和 "Confirm passphrase"處輸入密碼,為你的私鑰加密,當然你也可以選擇不輸入密碼;當使用者利用私鑰要登入伺服器時,會被問起這組密碼。
  6. 保存這對鑰匙,Save private key 保存私鑰,Save public_key 保存公鑰,保存私鑰的附檔名為 .ppk,此文件就是客戶端要使用的私鑰,若你沒有設定 passphrase ,在儲存私鑰同時會詢問 passphrase 是否空白 。基本上,公鑰可以不儲存,可以將文字方塊中的那一長串文字複製於 authorized_keys 中,若真的遺失了,可用 load 私鑰的方式產生公鑰。
  7. Puttygen會在 key 文字方塊中產生一對亂碼,將整段複製,貼於個人資料夾中的 .ssh/authorized_keys ,以下為公鑰範例。
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAz7y1oBJiH6yuW6hOWu3jzTPYOJ5MRwvhvM6pcK9+NAjj8nJk9Msvpt7fwBoQyBNuXN/fZTneUxL16rYbeVQ8M2xWUZ0QbB38aCSRkM3iUaD/JuPXrfGkTsSEvwsztr+jyz8/SCeOiaZ7YXoCUUoTobJ2l4R43C8y6m7Y8DivH/k= rsa-key-20080514

增加使用公鑰的限制

在公鑰的亂碼前加入 from 或 command,可以限制使用公鑰的指令與來源IP如下
from="192.168.101.10" ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAz7y1oBJiH6yuW6hOWu3jzTPYOJ5MRwvhvM6pcK9+NAjj8nJk9Msvpt7fwBoQyBNuXN/fZTneUxL16rYbeVQ8M2xWUZ0QbB38aCSRkM3iUaD/JuPXrfGkTsSEvwsztr+jyz8/SCeOiaZ7YXoCUUoTobJ2l4R43C8y6m7Y8DivH/k= rsa-key-20080514

ssh-keygen 製作鑰匙

首先決定要使用這把公鑰的用戶(可以是 root),並切換至用戶目錄下。
bang@linuxdiary:~$ su bang
bang@linuxdiary:~$ cd ~
產生鑰匙,如同 puttygen,會產生一對鑰匙,公鑰與私鑰,-t 為產生格式,有一般可選擇 dsa 或 rsa,在產生時,系統會詢問你存放地點與使用密碼,你可以直接 Enter 略過,不設密碼,代表使用私鑰時,不須密碼。
bang@linuxdiary:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):/root/.ssh/id_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /bang/.ssh/id_rsa.
Your public key has been saved in /bang/.ssh/id_rsa.pub.
The key fingerprint is:
f4:b4:55:93:89:f7:d5:b0:4a:38:39:76:36:6c:a4:b6 bang@192.168.1.10

以下是容易忘記的地方,必須完成幾個重要的權限設定,最後將公鑰匯入 authorized_key
bang@linuxdiary:~$ chmod 700 .ssh
bang@linuxdiary:~$ cd .ssh
bang@linuxdiary:.ssh$ touch authorized_keys
bang@linuxdiary:.ssh$ chmod 600 authorized_keys
bang@linuxdiary:.ssh$ cat id_dsa.pub > authorized_keys
有關於私鑰的使用

在Linux上的使用方法,根據 /etc/ssh/ssh_config 的設定,私鑰放置預設路徑為 ~/.ssh/id_rsa
故製作完私鑰後,可以將私鑰內容,複製於 ~/.ssh/id_rsa 之中,但 id_rsa 只能放一把鑰匙,若同時擁有多把主機鑰匙可用以下方式登入。

bang@linuxdiary:~$ ssh -i 鑰匙名稱 root@192.168.1.1
sshd.conf 的相關設定

IdentityFile ~/.ssh/id_rsa
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

IdentityFile: 私鑰檔的路徑與名稱
AuthorizedKeysFile:公鑰檔的路徑與檔名
RSAAuthentication:是否開啟 RSA 認證
PubkeyAuthentication:是否允許公鑰認證

2008年2月11日 星期一

rpm 對照 dpkg

安裝、移除

目的 rpm 範例 長旗標
dpkg 範例長旗標
安裝 rpm -i webmin-1.400-1.noarch.rpm install
dpkg -i webmin_1.400_all.debinstall
移除
rpm -e webmin
erase
dpkg -r webmin (保留設定檔)
dpkg -P webmin (完全移除)
remove
purge

查詢已安裝套件

目的 rpm 範例 長旗標
dpkg 範例長旗標
顯示所有已安裝的套件名稱 rpm -qa query
all
dpkg -llist
顯示套件包含的所有檔案rpm -ql webmin
query
list
dpkg -L webmin
listfiles
顯示特定檔案所屬套件名稱rpm -qf ./webmin.conf
query
file
dpkg -S ./webmin.conf
search
查詢套件檔案資訊rpm -qi webmin
query
info
dpkg -p webmin (顯示詳細資訊)
print-avail
查詢套件安裝檔的資訊rpm -qip webmin-1.400-1.noarch.rpmquery
info
package
dpkg -I webmin_1.400_all.debinfo
查詢套件安裝檔的欲安裝檔案rpm -qlp webmin-1.400-1.noarch.rpmquery
list
package
dpkg -c webmin_1.400_all.debcontent

本文是主要參考
http://cha.homeip.net/blog/archives/2005/08/rpm_vs_dpkg.html
本來想做更詳盡的整理,但原文已夠棒了,就稍微整理一下編排就發布了。
這裡題一下 alien 這命令,它在 LPI1 常考,主要目的是用於 debian 系統上使用 rpm 的套件。

2008年1月4日 星期五

搜尋指令的整理

各種搜尋命令
命令名稱 對象
說明
locate 檔案、目錄
以比對資料庫索引的方式,尋找檔案與目錄。
find
檔案、目錄實際於目錄樹中尋找檔案或目錄。
whereis
命令
顯示命令、命令原始碼、命令 manual page 的位置。
which
命令顯示命令 (二進位檔) 的存放位置。
ldd
命令顯示與命令相依的分享函式庫。
whatis
Man Page
以關鍵字精確搜尋 manual page。
apropos
Man Page以關鍵字模糊搜尋 manual page。
info
Info Page以 Info 格式讀取 manual page。
man
Man Page搜尋 manual page。
whois
網域名稱
查詢網域名稱的註冊資訊。

2008年1月1日 星期二

分割區的管理

分割區的管理其實就是 fdisk 指令的應用,講起來很簡單,但這只是了解 Linux 檔案系統的其中一步而已,以下一個易搞混的例子來說,fdsik -l,mount,df 所顯示資訊的差異,這三個指令顯示的內容有類似的資訊,但事實上完全是兩碼事。
bang@linuxdiary:~$ fdisk -l

Disk /dev/sda: 164.6 GB, 164696555520 bytes
255 heads, 63 sectors/track, 20023 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 144 1052257+ 82 Linux swap
/dev/sda3 145 20023 159678067+ 83 Linux

bang@linuxdiary:~$ mount
/dev/sda3 on / type ext3 (rw)
none on /proc type proc (rw)
none on /sys type sysfs (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
usbfs on /proc/bus/usb type usbfs (rw)
/dev/sda1 on /boot type ext3 (rw)
none on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

bang@linuxdiary:~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 157171140 130211572 18975668 88% /
/dev/sda1 101086 11071 84796 12% /boot
none 252752 0 252752 0% /dev/shm
注意
在參考書中,或 man page 中常常遇到,也容易搞混的一個名詞 Filesystem「檔案系統」,此 名詞有兩種不同的意思:一,檔案與目錄在硬碟(或其它儲存裝置)上的具體組織方法,簡單的說就是分割區類型 (partition type)。二,儲存裝置內容的組織結構,意即目錄樹 (directory tree),也可以說將分割區掛載後的目錄結構。
二的解釋是大家熟悉的檔案系統說明,但也許有人會質疑一的說明,認為分割區就分割區,檔案系統就檔案系統,但如果你去 man 一下 filesystem 就會發現在 man page 中,Filesystem 的意義多為一的解釋。
劃分分割區的注意事項
  • 雖然系統可規劃多個分割區,但系統必須在掛載 「/」根目錄的分割區完成開機作業,因此「/bin/」,「/sbin/」,「/etc/」,「/lib/」,「/dev/」此五個目錄必須與根目錄配置於同一分割區。
  • 若硬碟容量有限,建議容量最大的分割區分配給「/user/」使用。
  • 「/root/」,「/home/」為選擇建立 (optional) 的目錄,若硬碟空間不足,可不建立。
  • 「/」,「/var」,「/tmp」,「/usr」,「/usr/local」,「/opt」,「/home」分別配置在不同的獨立分割區,可提高存取效能,增加備份的便利性。

2007年12月23日 星期日

檔案權限

存取控制 文章可知,stat 指令可知道檔案的相關資訊,在存取的部分,你可以看到一行如 Access: (0644/-rw-r--r--) 的資訊,其中 -rw-r--r-- 在 存取控制 中就說明了,而 0644 呢?就是本篇的主角之一。

位元模式

在 Linux 中以 chmod 工具來修改檔案權限。但是使用 chmod 時需要一套簡單的表示法來描述檔案權限,而能表示檔案權限的表示法有兩種,分別為位元模式與存取模式。
-rw-r--r-- 用後九個符號來表示檔案存取,而事實上位元模式的位元有 12 個(其中 3個為特殊權限),若直接用二進位來表達過於冗長且容易搞錯。最理想的方式為八進位,因為每三個八位元的數字剛好能表示 12-bits 位元模式分成 4 組不同意義的組合,而下表即各個進位轉換的對照表:

符號 二進位 八進位
--- 000 0
--x 001 1
-w- 010 2
-wx
011
3
r--
100
4
r-x
101
5
rw-
110
6
rwx
111
7
範例:
rw-r--r--
110100100
644

rwxrwxr-x
111111101
775
字串模式

以八進位表示雖然簡潔,但不容易解讀。因此許多工具會以字串模式來表事檔案權限,如之前常提的 ls -l 的輸出訊息,但 ls -l 只顯示 r、w、x 、特殊權限等符號,不包括身分 (u、g、o) 與操作 (-、+,=) 符號,下表即說明字串模式的各個符號:


符號 說明
身分 u
擁有者 (user)

g 群組

o 其他人

a
所有人
操作
-
移除
r-x
+
添加
rw-
=
設定
權限
r
讀取

w
寫入

x
執行

s
SUID 或 SGID (s 代表同擁有 x 權限,S 則無)

t
Sticky 權限 (t 代表同擁有 x 權限,T 則無)

範例
u+x 讓使用者有執行權限
go-w 移除群組與其他人的寫入權限
o+t 將其他人設定 Sticky 權限
a=rw 所有人都為讀取與寫入權限
我們會用 chmod 來調整檔案或目錄的存取模式,就會大量的用到字串模式的表示法,以下為範例:
範例一:用字串模式將檔案存取權限設定為 rw-r--r--,並顯示操作結果。
bang@linuxdiary:~$ chmod -v u=rw,go=r chmod_test1
mode of `chmod_test1' retained as 0644 (rw-r--r--)
範例二:讓其它使用者無法存取整個 Desktop 目錄,並顯示操作結果。
bang@linuxdiary:~$ chmod -vR o-rwx Desktop
mode of `Desktop' retained as 0750 (rwxr-x---)
mode of `Desktop/abc.txt' changed to 0640 (rw-r-----)
範例三:將 Desktop 目錄設定 SGID,並顯示操作結果。
bang@linuxdiary:~$ chmod -v g+s Desktop
mode of `Desktop' changed to 2750 (rwxr-s---)
範例四:將 Desktop 目錄設定 Stickey 權限,並顯示操作結果。
bang@linuxdiary:~$ chmod -v +t Desktop
mode of `Desktop' changed to 3750 (rwxr-s--T)

預設存取模式

當使用者新增一個檔案或目錄時,系統會根據 umask 設定值,來決定這個檔案或目錄的存取權限,而甚麼是 umask 設定值呢?這是一個設定預設存取權限的命令 umask ,以下為範例

查詢目前的
bang@linuxdiary:~$ umask
0022
新增一個檔案,並檢查預設存取權限
bang@linuxdiary:~$ touch umask_test1
bang@linuxdiary:~$ ls -l umask_test1
-rw-r--r-- 1 bang bang 0 Dec 24 00:18 umask_test1
更改目前的預設權限
bang@linuxdiary:~$ umask 002
bang@linuxdiary:~$ touch umask_test2
bang@linuxdiary:~$ ls -l umask_test
-rw-r--r-- 1 bang bang 0 Dec 24 00:18 umask_test1
-rw-rw-r-- 1 bang bang 0 Dec 24 23:46 umask_test2
我們可以發現 umask 前後,新增檔案的存取權限是相異的。
注意
  • 通常系統預設的 umask 設定,會在 /etc 目錄下的 profile (debian)或 bashrc (red hat)中。這點好像不太重要,因為可以放的地方還蠻多的,FHS 也沒硬性規定一定要放哪,只是喚起對這兩個 shell 設定檔的記憶。
  • 在 red hat 中,一般用戶的 umask 為 0002,而 root 為 0022;debian 皆為 0022,故這邊的範例是以 debian 為例喔,我是用一般用戶 touch 一個檔案。

2007年12月17日 星期一

GRUB 的安裝與設定

GRUB (Grand Unified Bootloader) 是一個多段式開機管理程式,由它的名稱 GR,就可猜想,它支援多種檔案系統和作業系統,幾乎可以啟動任何核心。

GRUB 的裝置命名方式

之前曾經提過 Linux 裝置的命名方式 文章,而本文主要是在探討 GRUB 在用的命名方式。

GRUB 的命名方式: ( xdn[,m] )

其中 xd 代表磁碟類型,n 是『BIOS 的磁碟編號順序』從 0 開始,m 是第幾個分割區,從 0 開始。
範例:
(fd0) :第一台軟碟機。
(hd0):第一顆硬碟。
(hd0,1):第一顆硬碟上的第二個分割區。
注意:
  • 在 GRUB 之中,hd 即代表各種硬碟,無規格區分,IDE ,SATA,SCSI 硬碟都以 hd 表示。
  • GRUB 的分割區編號由 0 開始,而一般裝命名由 1 開始,如第二顆硬碟的第二個分割區 GRUB 為 (hd1,1),一般為 hdb2
GRUB 裝置檔的設定

裝置檔位置
redhat:/etc/grub.conf,/boot/grub/menu.lst,/boot/grub/grub.conf (真實檔案位置)
debian: /boot/grub/menu.lst

舉以下例子 (fedora 3) 說明:

default=1 #預設以哪一個選項開機,起始為 0
timeout=5 #暫停時間 (單位:秒)
splashimage=(hd0,0)/grub/splash.xpm.gz #背景圖片
hiddenmenu #是否隱藏選單
#以下為開機選項
title Fedora Core (2.6.12-1.1381_FC3) #標題
root (hd0,0) #開機目錄所在位置
kernel /vmlinuz-2.6.12-1.1381_FC3 ro root=/dev/VolGroup00/LogVol00 rhgb quiet #核心映像檔
initrd /initrd-2.6.12-1.1381_FC3.img #initrd 映像檔
title Fedora Core (2.6.12-1.1381_FC3smp)
root (hd0,0)
kernel /vmlinuz-2.6.12-1.1381_FC3smp ro root=/dev/VolGroup00/LogVol00 rhgb quiet
initrd /initrd-2.6.12-1.1381_FC3smp.img

2007年12月12日 星期三

存取控制

「存取控制」的作用就是,讓適當身分的人獲得適當的存取權。
何謂身分?在 Linux/Unix 系統中,定義以下三種關係。
  • Owner 擁有者:檔案的擁有者,通常是產生檔案的那個人。
  • Group 群組:檔案所屬的群組。通常是擁有者所屬的群組。
  • Other 其他人:既非擁有者,也不是群組成員的其他人。
所謂的「存取權」,是指使用者可以對檔案進行何種動作。在 Linux/Unix 系統中,定義以下
三種動作:讀 (read),寫 (write),執行 (execute)。對於目錄,同樣也有三種動作:列出檔案,新增檔案,進入目錄。以下為權限列表:

權限 符號 檔案權限說明 目錄權限說明
讀取 (Read)
r 檢視檔案內容 列出目錄內容
寫入 (Write) w 寫入(或變更)檔案 建立,移除目錄下的檔案
執行 (Execute) x 將檔案當成程式執行 進入 (cd ) 到目錄

我們可以用 ls -l 或 stat FileName | Directory 來顯示目錄或檔案的權限資訊,以下為例子
bang@linuxdiary:~$ ls -l
drwxr-xr-x 2 bang bang 4096 2007-05-20 13:51 Desktop
bang@linuxdiary:~$ stat Desktop/
File: `Desktop/'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 301h/769d Inode: 10666042 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 1000/ bang) Gid: ( 1000/ bang)
Access: 2007-12-23 07:35:21.000000000 +0800
Modify: 2007-05-20 13:51:01.000000000 +0800
Change: 2007-05-20 13:51:01.000000000 +0800

目錄內容 文章中,即簡介了 rwxr-xr-x 的意義,但在這邊要注意的是 Desktop 在此為目錄,以身分為其他人為例 r-x 的意義為,其他使用者 對於 Desktop 可用 ls 列出目錄,不能新增刪除檔案,可以 cd 進入目錄。

2007年12月10日 星期一

Cron Job 排程工作

設定系統的工作排程,主要是修改 /etc/crontab,當我們檢視 /etc/crontab 時,我們可以看到以下程式碼
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 1 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
由這段程式碼我們可窺見程式碼中每個數字的意義
crontab 檔案的格式為一行中有5個數字,以空白鍵或tab鍵分開。這五個數字指定命令執行的時間:

01 * * * * root run-parts /etc/cron.hourly
角色 排程工作

代表意義 分鐘 小時 日期 月份
數字範圍 0-59 0-23 1-31 1-12 0-7
0,7皆可代表週日

範例:
  • 01 * * * * => 每個鐘頭的 01 分
  • 02 4 * * * => 每天的 4 點 02 分
  • 22 1 * * 0 => 每個週日的 1 點 22 分
  • 42 4 1 * * => 每月 1 號的 4 點 42 分
進階寫法
  • 0 3,6 * * * => 每天 3 點與 6 點
  • 20 8-12 * * * => 每天 8 點到 12 點之間的每個小時的 20 分
  • */5 * * * * =>每五分鐘進行一次,用 * 與 /n 來搭配代表每隔 n 單位間隔
排程工作的指令
crontab 可讓使用者建立自己的排程工作,而 root 也可利用 crontab 管理修改其他用戶的排程。
crontab -e:建立,編輯使用者的工作排程。
crontab -l:列出使用者的工作排程。
crontab -r:清空使用者的工作排程。
注意事項:
  • crontab -e 命令會在/var/spool/cron/crontabs目錄下建立一個與您的使用者名稱同名的檔案。
    此檔案中的命令會在特定時間間隔於用戶的起始目錄中執行。
  • 當crontab 命令錯誤時,會發一封郵件給管理者,可藉由編輯 /etc/crontab 中的 MAILTO,來指定寄件信箱。

2007年12月1日 星期六

忘記 root 密碼怎麼辦

root 密碼若忘記,該台主機幾乎無法再做任何重大變動,這種情形容易發生在 MIS 交接的時候,如果真的發生怎麼辦呢?在系統啟動文章有提到 GRUB 在啟動顯示開機選單時,可修改核心命令,那時我們可以將系統啟動為 runlevel 1 的狀態,即單用戶模式,此時 root 的登入是不需要密碼的,再用 passwd 修改 root 密碼。

以下用 Fedora 8 為例示範整個流程:
1.首先開機後進入 GRUB 選單,在你欲開機的核心上點擊按鍵 e

2.在核心命令列上點擊按鍵 e


3.在該行命列最後加上 1 或 s 或 S,修改完後按 Enter


4.點擊按鍵 b,立即開機。

5.以下即為 runlevel 1 時的畫面,可用 passwd 修改 root 密碼。

2007年11月26日 星期一

指令別名

指令在之前就提到過了,當時沒記錄 alias ,是覺得還蠻簡單的,會想重提 alias,是後來學到/etc/aliases 與 newaliases 的指令,覺得兩者易搞混,故決定記錄一下兩者的差別。

Command alias 指令別名

指令別名主要用意是希望用簡單的指令別名代替原本較長加上複雜參數的指令,最常見的莫過於 ll (常用於 red hat),它其實是 ls 的指令別明,而其原本的寫法為 ls -l --color=tty,以下為查詢指令別名的方法:
bang@linuxdiary:~$ alias
alias ls='ls --color=auto'
alias 與 unalias 分別為設定與解除指令別名的指令,以下為範例:

設定 l. 為顯示所有隱藏檔的指令別名
bang@linuxdiary:~$ alias l.='ls -d .* --color=tty'
bang@linuxdiary:~$ l.
. .chewing .gaim .gnome2 .lesshst .profile .thumbnails .Xauthority
.. .config .gconf .gnome2_private .metacity .recently-used .Trash .xsession-errors
略...
取消 l. 的設定
bang@linuxdiary:~$ unalias l.

但以上指定的別名在登出 Shell 後,即失去作用。如果想讓系統維持別名的設定,必須在 Shell 的設定擋 .bashrc 設定想要常駐的別名,以下節錄 Ubuntu 的 ~/.bashrc 檔案
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

#if [ -f ~/.bash_aliases ]; then
# . ~/.bash_aliases (使用者也可使用 .bash_aliases 來替代在 .bashrc 編寫別名)
#fi

# enable color support of ls and also add handy aliases
if [ "$TERM" != "dumb" ]; then
eval "`dircolors -b`"
alias ls='ls --color=auto' (Ubuntu 預設中唯一的別名...)
#alias dir='ls --color=auto --format=vertical'
#alias vdir='ls --color=auto --format=long'
fi

# some more ls aliases (red hat 常見的 ls 別名,在 Ubuntu 都註解掉了)
#alias ll='ls -l'
#alias la='ls -A'
#alias l='ls -CF'

2007年11月25日 星期日

執行層級 runlevel

Linux 與許多 Unix 系統都有 執行層級 runlevel 的觀念,意即藉由控制實際啟動的服務組合,而改變系統用途。舉例而言,一台網頁伺服器,我們會希望他在開機時,自動啟動 Apache Server。每一個不同的執行層級會執行對應的各個 script 檔,而每一執行層級的 script 檔備存放在 /etc/rc.d/rc[x].d 目錄,其中 [x] 即為 runlevel。以下說明各個層級的意義:

層級目錄描述
0 /etc/rc.d/rc0.d
Halt ,關機,切斷系統的電源。這是過渡性的運作層級,不能設為預設的執行層級,否則會造成一開機即關機。
1 /etc/rc.d/rc1.d
Single-user mode,單用戶模式。此模式通常只含基本運作,而不妨礙維修的基礎服務。
2/etc/rc.d/rc2.d Red Hat:Multiuser, without NFS,不提供 NFS 檔案共享服務的多人模式。
Debian:Full multi-user mode,多人模式。
3/etc/rc.d/rc3.d Red Hat:Full multi-user mode (no GUI interface) ,多用戶模式,無圖形界面。
Debian:預設不使用。
4 /etc/rc.d/rc4.d
Not used (user-definable) ,未使用,用戶定義。
5 /etc/rc.d/rc5.d
Red Hat:Full multiuser mode (with GUI interface),多用戶模式,圖形界面。
Debian:預設不使用。
本層級相當層級 3 外加 X11 在加上 GUI 登入服務,一般桌面系統都以此為預設層級。
6 /etc/rc.d/rc6.d
Reboot ,重新開機,這是過渡性的運作層級,不能設為預設的執行層級,否則會造成不斷重新開機。


如何設定預設執行層級 runlevel?

編輯 /etc/inittab,範例如下
# Level to run in
# 定義預設執行層級,在此 runlevel 為 2
id:2:initdefault:

# System initialization before anything else.
# 系統初始化
si::sysinit:/etc/rc.d/bcheckrc

# Runlevel 0,6 is halt and reboot, 1 is maintenance mode.
# 個別運作層級的處始化
l0:0:wait:/etc/rc.d/rc.halt
l1:1:wait:/etc/rc.d/rc.single
l2:2345:wait:/etc/rc.d/rc.multi
l6:6:wait:/etc/rc.d/rc.reboot
開機時,即會根據 runlevel ,執行 /etc/rc.d/rc[x].d 目錄下的 script。

如何改變執行層級 runlevel?

當想進行系統維護需要進入單人模式,或是要從文字登入畫面改成 GUI 登入畫面,或是想要關閉系統或重新開機,改變系統當時的執行層級,是眾多的做法之一。
但在運作之前,可能會需要了解一下目前的 runlevel,而使用的指令即為 runlevel
bang@linuxdiary:~$ runlevel
N 2
第一個字代表前次的執行層級,第二個數字代表現在的執行層級。N 代表前次與現在一樣沒有變過。
知道了目前的執行層級後,可利用 init 或 telinit 命令來改變執行層級,telinit 通常是 init 的硬連結或軟連結,兩者使用方法完全相同,以下為範例:
讓系統立刻關機
root@linuxdiary:~# init 0
讓系統立刻重新開機
root@linuxdiary:~# init 6
讓系統立刻進入單人模式
root@linuxdiary:~# init 1


root@linuxdiary:~# init s

2007年11月18日 星期日

系統啟動

一開始先了解,從進入 BIOS 畫面到,出現命令提字元,系統做了哪些事。

順序 名稱
1 載入 BIOS ,硬體裝置的初始化
2 讀取第一個開機裝置的 MBR 的 boot Loader (亦即是 lilo, grub, spfdisk 等等) 的開機資訊
3 載入 Kernel 作業系統核心資訊, Kernel 開始解壓縮,並且嘗試驅動所有硬體裝置
4 Kernel 執行 init 程式 (/etc/inittab)
5 init 執行 /etc/rc.d/rc.sysinit 檔案 (red hat)
6 init 執行 run-level 的各個批次檔( Scripts )
7 init 執行 /etc/rc.d/rc.local 檔案
8 執行 /bin/login 程式,並等待使用者登入
9 登入之後開始以 Shell 控管主機

1~2
當 BIOS 完成硬體初始化後接手的系統軟體是 boot loader。Linux 系統常用的 boot loader 為 LILO 與 GRUB,他們不僅能將 Linux 核心映像檔載入記憶體,還可以傳遞核心參數 (kernel parameter)給 Linux 核心,就像 shell 啟動程式時,指定命令列選項那樣。
GRUB 可以讓你在啟動 Linux 之前,編輯要傳給核心的參數。你只要在 GRUB 顯示開機選單時,先選定所要啟動的核心,然後按下 e 鍵 ( edit ) 來編輯該核心的命令,最後按下 b 鍵 ( boot ) 來開機。
3
這是將核心載入記憶體的一個過程,當核心載入記憶體後,會顯示一些訊息至主控台 (system console) 上,如核心版本,核心是在哪種機器上,以何種編譯器所編譯等,並開始逐一驅動硬體。
在核心載入同時,initrd (initial Ram Disk) 也會被載入,即 /boot 分割區中的 initrd.img-2.6.20-16-generic 檔案,由於此時尚未掛載任何檔案系統,無法取得硬碟中的驅動程式,而此檔包含開機所需的驅動程式,在此時與核心映像檔一起載入記憶體。
4~5
/sbin/init 是開機初始化程式,能幫助使用者調整開機程序的配置與環境的設定。當它一旦啟動,自動會變成系統中所有行程 (Process) 的父行程或祖父行程,故它的 PID 為 1。
在初始化設定周邊後裝置後,核心就會執行 /sbin/init 程式,其所做的任何事都由 /etc/inittab 所控制,其中包含執行層級 (runlevel) 。
在 red hat 中,/sbin/init 的第一個動作通常是執行 /etc/rc.d/rc.sysinit ,這​個 script 能設​定​環​境​路​徑​、starts swap、​檢​測​檔​案​系​統​,並​執​行​其​它​所​有​系​統​初始化所​需​的​步​驟​。舉例來說每個​系​統​都擁有一個​​​時間,rc.sysinit 能​讀​取 /etc/sysconfig/clock 設​定​檔​並​啟​始​硬​體​時間​。
6-7
runlevel 是一個用來指定目前系統狀態的數字或字母。例如,當系統的 runlevel 變成 3 時,所有在 /etc/inittab 中,runlevel 欄位包含 3 的項目都會被執行。在 red hat 中每一層級的 Script 檔都被存放在 /etc/rc.d/rc[x].d/ 中,其中 [x] 即為runlevel,目錄中可以看見很多檔案,多以 Snnxxxx 或 Knnxxx 命名,其中 nn 為 00 至 99 的數字,數字較小的 Script 會先執行,你會發現一個 S99rc.local 的檔案,沒錯它就是最後一個被執行的 Script,也就是第 7 個步驟。
8-9
登入

如何回顧開機訊息

開機期間顯示的訊息往往捲動過快難以閱讀,當管理者需要回頭檢閱這些訊息時該怎麼辦只要使用 dmesg 命令變可重現最近一次的開機訊息,而 /var/log/dmesg 也會記錄這筆訊息。

bang@linuxdiary:~$ dmesg | less
[ 0.000000] Linux version 2.6.20-16-generic (root@king) (gcc version 4.1.2 (Ubuntu 4.1.2-0ubuntu4)) #2 SMP Thu Aug 30 23:16:15 UTC 2007 (Ubuntu 2.6.20-16.31-generic)
[ 0.000000] Command line: root=UUID=404fb0f7-4a3d-4124-9b0f-c28dd9325da7 ro quiet splash
[ 0.000000] BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
[ 0.000000] BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
[ 0.000000] BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
[ 0.000000] BIOS-e820: 0000000000100000 - 000000003fff0000 (usable)
[ 0.000000] BIOS-e820: 000000003fff0000 - 000000003fff3000 (ACPI NVS)
[ 0.000000] BIOS-e820: 000000003fff3000 - 0000000040000000 (ACPI data)
[ 0.000000] BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved)
[ 0.000000] BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved)
略...

bang@linuxdiary:~$ less /var/log/dmesg
[ 0.000000] Linux version 2.6.20-16-generic (root@king) (gcc version 4.1.2 (Ubuntu 4.1.2-0ubuntu4)) #2 SMP Thu Aug 30 23:16:15 UTC 2007 (Ubuntu 2.6.20-16.31-generic)
略...

注意:
ubuntu 預設不使用 /etc/inittab 來做開機管理,而是使用 upstart,而 debian 也實驗性的引進 upstart,目前還在研究他的使用方式。

2007年11月5日 星期一

系統日誌 messages 與 syslog.conf

在 Linux 中,有多種日誌檔案,包含各個 Server 的日誌檔,清楚的理解各個日誌檔的功能及作用是很有必要的,但眾多日誌檔中,最重要的莫過於系統的日誌檔,messages (red hat 系列),它記錄著系統的各種運行日誌,包含安全,認證,郵件,新聞等等。而 syslog.conf 檔則控制著 messages 記載行為。
以下擷取 messages 片段,來說明 messages 記錄方式
時間           主機名稱   程序名稱       事件描述
Nov 4 05:10:44 linuxdiary syslogd 1.4.1: restart.
以下擷取 syslog.conf 片段,來說明 syslog.conf 使用的語法
Facility(工具).Priority(優先等級)          Action(日誌檔)
cron.* /var/log/cron
uucp,news.crit /var/log/spooler
Facility 是指系統常用的工具,可以逗號來增加多個 Facility,已知的 Facility 可由下表得知。
名稱 說明
user 由使用者程序產生的訊息,此訊息是程式預設的,故在檔案中,不包含於 facilities 的設定中。
kern 由 kernel 產生的訊息。
mail 郵件系統的訊息。
daemon 系統 daemon 所產生的訊息,但大部分的 daemon 有自己的日誌。
auth,authpriv 認證系統的訊息,login,su,getty 等。
news 指的是 USENET 新聞群組系統。
uucp 指的是UUCP(UNIX 間複製協議) 系統,已經很少再用 syslog 機制。
cron 指的是由 cron 與 at 兩支程式所產生的訊息。
local0-7
使用者自訂類型,通常為遠端伺服器,網路裝置。

Priority 是指每個工具發生何種事件時要記錄的優先等級。
優先等級 名稱 說明
0 emerg ( emergencies ) 系統損毀無法使用
1 alerts 必須立刻採取應對行動
2 crit ( critical ) 危急狀態
3 err ( errors ) 錯誤狀態
4 warn ( warnings ) 注意狀態
5 notice ( notifications ) 一般但重要的狀態
6 info ( informational ) 一般訊息
7 debug ( debugging ) 除錯訊息

Action 是指要記錄的地方或動作,以下是常見的寫法
Action說明
/var/log/message 記錄在 message 中
root傳訊息給該用戶
*所有用戶
@www.abc.com遠端主機
@192.168.101.1遠端主機

範例說明:
1.
*.info;mail.none;authpriv.none;cron.none        /var/log/messages  
這是 RedHat 與 Fedora 中常見的寫法,他們習慣將多種日誌放置於 /var/log/message 中,在範例中,*.info 表示去收集了所有已知且優先等級為 info 以上(即包含 notice,warn...等) 的 facility日誌 。要注意的是分號將幾個 facility 分開,且以 none 表明,不收集 mail、authpriv、cron 等程式產生的訊息。
2.
*.debug                                          /var/log/messages
如果想讓範例1 顯示的紀錄的方式更敏感,可使用範例2 的寫法,因為它將紀錄所有 Facility debug 以上各個優先等級的事件,等同於使用 (*.*),將更適合系統問題排除。
3.
 *.=debug;\
auth,authpriv.none;\
news.none;mail.none -/var/log/debug
範例3 中提供更進階的寫法,如要用多行表示時,接續行的結尾必須加入斜線,表示下行的敘述是與本行連接的。=debug 其中 「= 」表示僅針對 debug 等級的訊息紀錄,而不是該等級以上的訊息都記錄;「-」減號代表訊息暫存於記憶體中,等到一定的量再回存於檔案中,可提高 syslog 的執行效率。
4.
 kern.info;kern.!err /var/adm/kernel
範例4 中出現 !,表示將 kern 中,優先等級高於或等於「info」,但「error」除外的訊息記錄至檔案 /var/adm/kernel 中。