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