第六章 Linux Installation and Package Management
一. linux檔案系統目錄結構:
1. linux 檔案系統內的目錄,是一個樹狀結構,最上層目錄稱為根目錄(root directory),以 」/」 表示,注意,勿與系統管理員或稱超級使用者(super user) root弄混。
2. 樹狀目錄結構:
/ 目錄下分為:
boot:核心所在位置及其相關檔案。
etc:系統設定檔。<note>修改設定檔前,記得back up。
home:使用者家目錄,即使用者登入後,預設的使用者目錄位置。
dev:device,存放與裝置相關的檔案,且大多為字元裝置與區塊裝置,在linux下,皆把device當成檔案看待。
例: /dev/fd0、 /dev/cdrom、 /dev/hda1 …。
tmp:讓一般使用者暫存檔案處。
bin:存放一般使用者常用的執行檔。
sbin:一般為root常使用的程式。
usr/bin:與 /bin比較,其程式較屬於使用者導向。
sbin:存放root的程式。
src:存放核心原始碼的位置,所以當我們要編譯核心時,亦須至此目錄下。
share/doc:系統套件說明處。
man:manual page,存放程式或檔案說明處。
有的版本是放在 /usr/doc /usr/man。
若是下載tarball回來安裝,則有可能在 /usr/local/doc /usr/local/man。
var:variable,系統記錄檔存放處。
mnt:檔案系統掛載點。一般習慣將其放置於此。
例: /mnt/floppy /mnt/cdrom /mnt/hda1
proc:存放系統程序及系統相關訊息,其不佔硬碟空間,而是存在於記憶體內。
lib:library,函式庫,執行程式或編繹核心時會用到。
lost+found:當執行fsck時,會將遺失資料置此。
二. Design a Hard Disk Layout
1. 在做linux硬碟分割時,須考慮以下因素:
(1) 硬碟空間大小。
(2) 系統資料多寡 (視安裝時所選套件數而定) 。
(3) 系統用途:例如當我們架Mail Server、Web Server時,其預設路徑
( /var/spool/mail、/var/www/html ) 都位於 /var目錄下,因此這個時候 /var可能要切割大一些。
(4) 在哪個partition做backup行為,例如使用者須要於自己家目錄下做複製動作或做備份時,那麼 /home也須切割大一些。
2. 假設安裝linux OS時,劃分partition為 /boot、 /、 /usr、 /var、/home、 swap,安裝完成後,用 #du -b 個別檢視每個目錄實際佔用區塊空間,發現八成以上的空間都被 /usr占掉,由此可知OS大多被安裝於此。
3. swap space:安裝linux OS,最少須2個partition,即 / 及swap,swap partition為一虛擬記憶的分割區,其功用為暫存主記憶體的程式資料,例如當很多程序在執行時,可能造成記憶體不足,於是允許將一些不是經常使用的程式資料暫存於swap內,等程序執行ok了再放回來。一般我們在劃分swap大小時,習慣與主記憶體相同,或2倍或3倍不等,視您系統使用情形而定,沒有絕對的限制。
4. linux partition size分配要點:
(1) /boot分配於1024cylinder之前,較不易有問題(16-50MB)。
(2) / 可劃分小些,這樣可以讓出其它空間給須較大空間的partition。
不過如此做法的前題是 / 及 /usr 需分別獨立。
(3) /var須分割足以掌握記錄檔及循環檔。
(4) /usr須能容納系統程式、套件訊息、核心編繹等。
(5) /home視使用者多寡而定,若架SAMBA,還須讓使用者有足夠的空間放置他們自己的資料。
三. Install a Boot Manager:linux boot loader分lilo及grub。
lilo設定檔為 /etc/lilo.conf,grub設定檔為/etc/grub.conf或/boot/grub/grub.conf
1. 開啟linux OS,不外乎兩個基本步驟:
(1) 從開機磁碟(硬碟或軟碟)執行lilo,lilo找到核心並將其載入記憶體,lilo至此工作已完成。
(2) 在lilo載入核心後,其階段性任務便已結束,接著就由核心起始相關程序的執行。
2. /etc/lilo.conf→LILO預設的設定檔內容如下
prompt
→此參數會顯示選單畫面,若無prompt設定,就看不到選單畫面,此時lilo會直接開啟default os,除非按ctrl+x。
timeout=50
→啟動選單畫面出來後,若5秒內沒做選擇,便會開啟預設的作業系統。
default=linux
→預設開啟的作業系統 (如5秒內無動作)。
boot= /dev/hda2
→表示lilo存放位置在 /dev/hda2的super block,若boot= /dev/hda,則表示lilo是放在MBR。
map=/boot/map
→主要紀錄kernel檔名、位置…等訊息。
install= /boot/boot.b
→指定boot.b 檔案安裝在新的啟動磁區,至於檔案內容是描述開機區的一些訊息。
message= /boot/message
→執行lilo時顯示的訊息。
linear
→大容量硬碟使用,在SCSI較常見。
image= /boot/vmlinuz -2.4.7-10
→核心所在位置
label=linux 為核心提供一OS名稱。<note>與default須相同。
root= /dev/hda3 根目錄所在partition。
append=」hdc=ide-scsi」 允許將額外的參數傳給kernel,以此為例,就是讓kernel認識hdc是cdrom裝置。
other= /dev/hda1
→other是代表一個非linux核心的作業系統。
label=DOS
另外像lba32與linear都是在 /boot>1024時會使用到(BIOS須支援)。還有read-only是開機過程根目錄mount狀態,等開機完後會回到read-write。
另外若想設定lilo密碼,可加上參數password=xxxxx,這樣當lilo在載入核心前,就會先要求您輸入這裡所指定的lilo密碼,但是若您使用開機
片時就不受此限制了,因開機片內有lilo及核心之故。另外像用光碟開機來進入救援模式也是無效。
當修改完lilo.conf後須執行:
# lilo 或 # lilo –v –v 或 # lilo –v –v –v
-v愈多,顯示執行過程的訊息愈多。
執行此命令主要是讓修改後的結果寫入mbr 或super block中。
3. 解決錯誤問題:
(1)開機時出現LI便停住 (或LIL-)(或loading…又跳回選單)
<1>LILO載入核心後,便完成其任務,而此情況是尚未載入核心便出問題,故可拿開機磁碟片開啟OS後,修改lilo.conf,將linear取消,但若無linear,就加入lilo.conf中,OK後=>
# lilo –v –v
逕會將所做修改寫入MBR或 /boot開機磁區,視您lilo安裝位置而定。
<2>將BIOS中,硬碟設定Mode改成LBA試試。
(2)開機時出現0101…,無法進入Linux時:
<1>有可能硬碟出問題,可用fsck修正root partition。
<2>進入BIOS,將硬碟的mode改成LBA試試。
<3>也有可能硬碟磁區改變,卻沒重新安裝lilo,此時可於單人模式下修改lilo.conf即可。
4. grub: grub是linux另一種loader,比lilo還新,lilo做得到的,grub也能做到,甚至它可以讓您在grub的選單上編輯開機設定。底下就開始跟大家約略介紹一下。
(1) grub的主設定檔 ( /etc/grub.conf或 /boot/grub/menu.lst 或/boot/grub/grub.conf)
default=0
逕 預設開啟的作業系統,0代表底下出現的第一個title其後所接的OS,同樣道理,1就代表第二個title後所接的OS,依此類推。
timeout=10
逕 10秒內未做選擇,就開啟預設的作業系統。
title Red Hat Linux (2.4.18-14)
root (hd0,1)
kernel /vmlinuz-2.4.18-14 ro root=LABLE=/
逕 hd0代表hda,hd1代表hdb,依此類推,後面所接數字,0代表第一個分割區,1代表第二個分割區…,所以 (hd0,1)就是hda2,至於root (hd0,1),表示要grub掛載hda2,也就是 /boot所在的分割區,因為核心就在這個分割區內。另外root (hd0,1)已把核心所在位置
/boot定義為根目錄,所以下面那一行 kernel /vmlinuz-2.4.18-14的實際路徑就會變成 kernel /boot/vmlinuz-2.4.18-14,當然您要這樣寫也是可以的。要是當初安裝0S時,沒把 /boot分割出來,那麼該行要寫成 kernel /boot/vmlinuz-2.4.18-14。至於最後面的敘述是告訴核心實際根目錄位置,並將其掛載成唯讀。
title DOS
rootnoverify (hd0,0)
chainloader +1
逕 第一行是指示grub不要掛載hda1的分割區,只要知道待會是要啟動此分割區上的作業系統即可。
第二行是指定hda1的第一個磁區做啟動磁區。
後面兩行已亦可合併成chainloader (hd0,0) +1
(2) 安裝grub在super block方式:
# grub
grub> root (hd0,1) <== 核心所在的分割區
grub> setup (hd0,1) <== 將grub安裝在hda2
grub> quit
(3) 安裝grub在MBR方式:
# grub
grub> root (hd0,1)
grub> setup (hd0)
grub> quit
(4) 安裝grub還可用以下方式:
安裝在superblock: # grub-install /dev/hda2
安裝在mbr: # grub-install /dev/hda
四. 壓縮及解壓縮檔案的指令
gzip.bzip2.compress→對單一檔案個別壓縮。
tar→將很多檔案打包成單一檔案(archive),另加-z參數可打包兼壓縮。
1.gzip:(GUN zip)
$ cp /etc/passwd /etc/termcap .
→將檔案複製至家目錄下。
$ gzip passwd termcap
→原檔案沒了,變成*.gz的檔案。
$ ls –l /etc/passwd /etc/termcap passwd.gz termcap.gz
→比較壓縮前與壓縮後檔案的大小。
$ gzip –d passwd.gz termcap.gz
→解壓完後,*.gz 檔案不見了。
= gunzip passwd.gz termcap.gz
$ gzip –l passwd.gz
→顯示壓縮前後大小、壓縮比及壓縮前檔名。
$ gzip –cd passwd.gz
→顯示壓縮檔案解開後的內容(檔案實際未解開)。
=zcat passwd.gz
2.bzip2:
$ bzip2 passwd termcap
→原檔案沒了,變成*.bz2壓縮檔。
$ bzip2 –d passwd.bz2 termcap.bz2
=bunzip2 passwd.bz2 termcap.bz2
$ bzip2 –cd passwd.bz2 termcap.bz2
→顯示解開後的內容。
註:*.bz2壓縮檔不能用zcat看檔案內容。
3.compress:
$ compress passwd termcap
→壓縮成*.Z的檔案。
$ compress –cd passwd.Z
→顯示壓縮檔內容。
=zcat passwd.Z
$ compress –d passwd.Z termcap.Z 解壓縮
=uncompress passwd.Z termcap.Z
<note>˙壓縮比率:bzip2>gzip>compress
˙zcat只能用於*.gz及*.Z及*.tar.gz(*.tgz)的壓縮檔。
˙bzip2及gzip可用-1~ -9(最大壓縮)來定其壓縮大小。
bzip2預設為-9,gzip為-6。
˙*.gz、*.bz2、*.Z附檔名皆自動產生。
4.tar:將很多檔案及目錄打包起來成單一檔案(archive)-tarfile,其附檔名不會自動產生,一般指定為*.tar。
參數:-c→creat -v→verbose -f→filename
-t→list -z→gzip壓縮 -j或-I→bzip2
-x→extract -r→append files to the end of archive
--delete –f→delete files in an archive.
若加上-z參數,其附檔名為 .tar.gz或 .tgz,亦即一般所謂的tarball,須與archive做區分。
# tar cvf tarfile.tar /var/spool/mail /etc/named.conf
# tar tf tarfile.tar =>顯示tarfile內的清單。
# tar xvf tarfile.tar =>解開tarfile。
# ls =>可看到var、etc、tarfile.tar
# tar rf tarfile.tar /var/log/messages /var/log/maillog /home
=>將2個檔案及一個目錄附加至tarfile後面。
# tar tf tarfile.tar 確定附加檔案目錄有進去。
# tar --delete –f tarfile.tar var/log/maillog=>從tarfile中移除此檔案。
# tar xvf tarfile.tar var/log/messages =>只解一檔案出來。
# tar zcvf tarball.tar.gz /var/named /etc/fstab /etc/passwd
=>打包兼壓縮。
# tar ztf tarball.tar.gz =>顯示tarball清單。
# gzip -cd tarball.tar.gz =>顯示tarball內檔案的內容。
= zcat tarball.tar.gz
# tar zxvf tarball.tar.gz etc/passwd
=>只將 passwd 檔案解開。
# tar zxvf tarball.tar.gz =>將tarball解壓縮。
= gzip –cd tarball.tar.gz | tar xf -
注: tarball內不能附加檔案進去,亦不能刪除某一檔案。
補充: 安裝tarball:設已於網路上download proftpd-1.2.7rcl.tar.gz
root # tar zxvf proftpd -1.2.7rcl.tar.gz
# cd proftpd -1.2.7rcl
接著打開其下的INSTALL 檔案,看其安裝步驟來安裝。
# ./configure --prefix= /usr --sysconfdir= /etc \
--with –modules=mod_readme:mod_ldap
逕 此步驟主要是先找尋有無待會編譯時需用到的程式,如gcc等,並會產生一makefile檔案,此檔主要是規劃等一下編譯的過程。
# make
逕根據makefile的規劃執行編譯。
# make install
逕將編譯完後的檔案放置在指定的目錄下。
此一步驟必須要root來執行。