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密碼。

參考網址:

Crontab & At

在Linux系統,crontabat 都是可以用來做排程,但這兩者的差異是:

  • at:工作僅執行一次後就會系統中的排程中取消,工作排程會寫入到 /var/spool/at 目錄下。
  • crontab:工作將持續例行性的執行,工作排程會寫入 /var/spool/cron

at 的使用方法:

> at TIME

如果使用 -m 參數,at 會把排程輸出的結果 mail 給下達指令的使用者。

> at 5am
warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh

at> mail eddie -s “hi, eddie”

按下 Ctrl+D 就可離開 at 環境

job 1 at 2005-01-19 05:00

使用 atq 可看目前的at排程

> atq
1 2005-01-19 05:00 a root

其中第一個 1 代表這個排程的編號

使用 atm 指令可移除已排好的工作

> atm 1

接下來介紹crontab的用法:

> crontab [-u user] [-l | -e | -r]
-u user :只有 root可使用,可以編譯其他使用者的crontab內容。
-l:列出 crontab 內容。
-e:編輯 crontab 內容。
-r:刪除 crontab 內容。

執行 crontab -e 之後,則會進入一般的文字編輯器畫面編輯。

時間部份有5個欄位,分別是「分」、「時」、「日」、「月」、「星期幾」,最後就是要執行的工作,例如:

0 12 * * * mail eddie -s test

就是在每個月的每天的12點0分時,寄一封主旨為 test 的信件給eddie。其中,「*」代表所有數字。星期幾這欄數值由0~6,0代表星期日。再看一個例子:

*/5 * * * * mail eddie -s test

其中「*/5」表示每5分鐘寄一次信。

另外要注意的是,如果只是要刪除某個 crontab 的工作項目,建議使 crontab -e 來編輯,因為使用 -r 參數,會將所有的工作都移除。

如果是系統的例行性工作,不需要以某人的權限執行,則可編輯 /etc/crontab 檔案,詳細的內容在 /etc/crontab 檔案裡面有說明。

Postfix安裝

Sendmail 在 Un*x系統已行之久遠,是一套功能強大的 MTA 郵件系統(Mail Transfer Agent),但設定的複雜程度,使人望之怯步,也因為常容易被找到漏洞,所以市面上也推出一些新的 MTA 軟體,如 QMail 跟 Postfix。我個人覺 得Postfix是目前在效能上也是相當出色的,設定也較容易,如果您也覺得 sendmail 太複雜,倒是可考慮用 postfix 來當作MTA。

Step 1 停止 Sendmail 運作:

> /etc/rc.d/init.d/sendmail stop
> kill -9 `cat /var/run/sendmail.pid`
> killall sendmail

Step 2 備份Sendmail 設定:

> mkdir /root/sendmail-old
> cp /etc/aliases /root/sendmail-old/
> cp /etc/sendmail.cf /root/sendmail-old/
> cp /etc/sendmail.cw /root/sendmail-old/
> cp /etc/mail/* /root/sendmail-old/

Step 3 取得postfix的rpm:

可至 rpmfind 網站搜尋適合的版本

Step 4 安裝 rpm:

> rpm -ivh postfix-xxx-x.i386.rpm

Preparing… ######################################## [100%]
1:postfix ######################################### [100%]
postalias: fatal: My hostname proxy is not a fully qualified name – set myhostname or mydomain in /etc/postfix/main.cf

Step 5 修改 /etc/postfix/main.cf 主要設定檔:

> vi /etc/postfix/main.cf

把myhostname、mydomain改成自己機器的hostname跟domain name。另外,postfix預設值只會接受localhost的smtp,如果要對外服務,記得修改inet_interfaces=all

Step 6 啟動 Postfix:

> /usr/sbin/postfix start

or

> service postfix start

以上是大致的安裝流程,細節部份可再參考下列網站:

初始化相關資料庫:

postmap hash:/etc/postfix/access
postalias hash:/etc/postfix/aliases

安裝 phpMyAdmin 遇到的問題

MySQL 4.1 以上版本為了提高安全性,使用了新的密碼驗證機制,所以,MySQL 的 Client Library 需要 4.0 版本以上。

但目前在 Client 端所使用的 PHP 版本若為 5.0 以下(如 4.3.9),內建的 MySQL Library 大都為 3.23,並不支援新版的密碼驗證機制。

解決方案

一、將 PHP 升級為 5.0版以上:

但是大部份的伺服器,包括諸多 Blog 平台,尚未支援 PHP5,這點倒是挺麻煩。

二、MySQL console 下,更新密碼形式改為 OLD_PASSWORD() (設回原來舊版的密碼驗證機制)。

mysql> UPDATE mysql.user SET Password = OLD_PASSWORD(’新的密碼’) WHERE Host = 'localhost' AND User = 'root'
mysql> FLUSH PRIVILEGES;

參考文件

  • MySQL Manual - A.2.3 Client does not support authentication protocol