高見龍

iOS app/Ruby/Rails Developer & Instructor, 喜愛非主流的新玩具 :)

APT(Advenced Package Tool)

APT(Advenced Package Tool),是Linux用來管理套件的工具,透過 APT可以更有效率的管理RPM,不管是安裝、移除、或是升級都很方便。然而APT最大的優點,是可以自動處理RPM相依性的問題,例如當安裝 A rpm,而A rpm和B rpm又有相依性的時候,原本作法是先下載B rpm安裝後,再下載A rpm安裝;利用APT則只需要「apt-get install A」就完成了,這樣 APT 就會幫我們下載A rpm,而且會自動下載相依性檔案(B rpm)幫我們安裝,這樣對 RPM 的安裝、移除、或是升級都可以不用去管煩人的相依性問題了。

安裝:

Step 1 安裝apt:

> rpm -ivh ftp://apt.nc.hcc.edu.tw/pub/freshrpms/redhat/9/apt/apt-0.5.5cnc6-fr1.i386.rpm

Step 2 修改設定:

>vi /etc/apt/sources.list

因為原本預設的apt source是連到國外,速度比較慢。

> rpm http://ayo.freshrpms.net/ fedora/linux/1/i386 core updates freshrpms

可以改成新竹縣教育研究發展暨網路中心維護的 APT Server:

> rpm ftp://apt.nc.hcc.edu.tw/pub/apt/redhat/9 i386 os updates freshrpms firefly extra

使用說明:

> apt-get update

更新:這是用來取得記錄在/etc/apt/sources.list內的apt伺服器的套件檔案清單,在使用apt-get dist-upgrade指令升級套件前,要記得先用這指令將套件檔案清單更新。

執行apt-get update指令的時候會同步client端和APT伺服器的RPM索引清單(package list),APT伺服器的RPM索引清單置於base資料夾內,使用者端電腦取得base資料夾內的bz2 RPM索引清單壓縮檔後,會將其解壓置放於/var/state/apt/lists/

> apt-get dist-upgrade

升級:這裡的升級,並不是由 Red Hat Linux 8.0 變成 9 這樣的升級,而是當 Red Hat 有出升級的 rpm 的時候,利用這個指令,升級我們已經安裝的 rpm;加上-y參數可自動回答yes直接安裝。

當使用者用 apt-get install 或 apt-get dist-upgrade 指令的時候,就會將 /var/state/apt/lists/ 資料夾內的資料和使用者端電腦內的 RPM 資料庫比對,如此一來就可以知道那些RPM已安裝、未安裝、或是可以升級的,然後APT 就會自動透過網路下載需要的rpm回來安裝了。

> apt-cache search

搜尋:用這個指令可以搜尋 rpm,例如:apt-cache search httpd,這樣檔名內有httpd字眼的rpm都會出現了。

> apt-cache depends

相依性:利用這個指令來看到某個 rpm 的所有相依性檔案,例如:apt-cache depends httpd,這樣 httpd 的所有相依性檔案就會出現了,有時候不確定某個相依性檔案是屬於那個 rpm 時,這個指令就很有用。

> apt-get install

安裝:當我們知道rpm名稱的時候,就可以用這指令安裝套件,例如:apt-get install httpd,這樣 apt 就會自動下載httpd的rpm回來安裝,若 httpd 有相依性套件的時候,apt也會自動下載安裝。

> apt-get clean

清除:當使用 apt-get install 指令安裝套件,下載下來的 rpm 會放置於 /var/cache/apt/archives,使用apt-get clean指令可以將之清除,避免佔用硬碟空間。

> apt-get remove

移除:如果要移除某個 rpm 的時候就可以使用此指令,例如:apt-get remove httpd,就會移除 httpd 了,假如這個 rpm 有相依性套件的時候,apt 也會一併移除。

另外,把apt寫成script排入每天的排程工作(/etc/cron.daily),就可以每天自動比對更新了:

#!/bin/sh
apt-get update
apt-get -y dist-upgrade
apt-get clean

參考網址:

http://apt.nc.hcc.edu.tw/web/apt/apt.html

Redirect and Pipe

什麼是redirect? 簡單的說,就是把目前所得的資料轉到其它地方。例如:

> ls -al > test

就會把ls -al所得到的資料,全部轉到test這個檔案。要注意的是,如果test檔案原本不存在,執行上面這個指令後,會建立一個新的檔案;如果test檔案已經存在,那上面這個指令就會把test檔案覆蓋掉!!

如果是這樣的話:

> ls -al >> test

兩個大於符號代表會把輸出的結果append到test檔案的最後面。

另外,輸出分成stdoutstderr兩種,stdout就是一般的輸出結果,當在輸入過程有遇到錯誤時,就會送到stderr,而1>2>分別就代表著stdout跟stderr,要注意數字跟大於符號之間沒有空格。

> ls -al 1> test 2> test.err

上面這行就是會把ls -al的結果輸出到test檔案,如果遇到錯誤的,就會導向test.err檔案。

redirect是雙向的,除了「>」,也有「<」,例如:

> mail -s “hello, eddie” eddie < /home/eddie/test

就是把這個test檔寄給指定的使用者。

> mysql -u root -p mydb < sql.txt

就是把檔案sql.txt裡面的sql語法,輸入到mysql裡的mydb資料庫。

而pipe(管線)跟redirect不太一樣,pipe能處理前一個指令傳來的輸出資訊,處理完後再丟給下一個指令(如果有的話)。例如下面這個指令:

> ps aux | grep java | more

意思就是說執行ps所輸出的結果,丟到grep裡面,然後grep會把含有java字串的那一行抓出來,grep再把結果輸出給more指令,如果grep輸出的結果超過一頁,more指令就會負責做分頁的動作。

差別:

> cat test | mail -s “hi” eddie

這個是會把test檔案的內容,輸出給mail程式,再寄出去。

> mail -s “hi” eddie < test

這個則是把test檔當作附加檔案寄出信件。

以上大致上是redirect跟pipe的介紹,這在很多地方都用得上,相信熟悉這些技巧將會對系統管理更得心應手。

Webmin安裝

Webmin是一套Web-based的系統管理軟體,原本複雜難記的指令,只透過瀏覽器就可以簡單的完成。不過,方便歸方便,該記的指令式還是要知道怎麼使用。

Step 1:下載Webmin

到Webmin網站http://www.webmin.com/,可以下載tar.gz或rpm格式的,如果是在linux環境下,下載rpm格式安裝會簡單很多。

Step 2:安裝Webmin

> rpm -ivh webmin-x.xxx-x.noarch.rpm

Step 3:使用Webmin

執行Step2安裝結束後,安裝訊息會告訴你使用網頁瀏覽器連到指定的位置,通常是http://localhost:10000/

第一次使用是以root的帳號密碼來登入,為了安全性的考量,建議第一次登入後新增一位跟root同等權限的使用者,然後把root帳號從Webmin系統 移除(對原系統沒影響,只是root不能使用webmin系統而已),另外,預設的port 10000也建議改到其它的port。

其實Webmin使用並不困難,例如上面提到使用者的新增、修改、更換port這些動作,相信都不難找到在哪裡做設定。

Enjoy it!!

加裝新硬碟on Red Hat 9

今天試著裝上一顆6G的IDE硬碟,打算來當備份資料用的,感覺不是挺困難。

Step 1.分割partition:

> fdisk /dev/hdb原來的硬碟是hda,新的這個是hdb。

Step 2.格式化:

> mke2fs /dev/hdb

Step 3.建立mount的目錄:

> mkdir /backup

因為在Linux環境裡,device是以目錄形態表示,所以先新增一個目錄,待會再把硬碟mount到這個目錄。

Step 4.mount:

> mount -t ext2 /dev/hdb /disk2

這樣大致上就OK了。如果想在開機後自動把這個新硬碟掛進來的話,動手修改「/etc/fstab」這個檔案即可。

> vi /etc/fstab
#Device   MountPoint  filesystem Options  dump  fsck
/dev/hdb  /backup    ext3    defaults   1    1

其它相關指令:

  • mount
  • umount
  • fdisk
  • mke2fs
  • e2label
  • fsck
  • mkbootdisk

Runlevel

在Microsoft Windows開機的時候,除了一般正常開機外,有時候系統出了問題可以進入「安全模式」來解決,在Linux的環境也有類似的模式,就是 「runlevel」。通常Linux開時的時候,它預設的登入runlevel通常是level 3或level 5,而各種runlevel也代表不同的意思:

0 – Halt the system
1 – Single-user mode
2 – Multi-user mode (without NFS)
3 – Multi-user mode
5 – Multi-user mode, graphical login
6 – Reboot the system

如果是runlevel 5,在系統開機後就會進入圖形介面的登入畫面;如果是runlevel 3,就是文字介面的登入畫面。

當 你按下Ctrl+Alt+Del鍵想讓系統重新啟動,其實就是告訴系統進入runlevel 6(Reboot the system),系統就會重新開機,你可以利用telinit 6達到一樣的效果;而telinit 0則是有跟指令shutdownpoweroff一樣的效果。

在開機的時候,也可以指定系統啟動的runlevel:

LILO: linux 3

另外,有時忘了root密碼,也可進入single-user mode(runlevel 1)後,直接修改root密碼。

參考網址: http://www.iodynamics.com/education/runlevel.html