20 12
發新話題

[分享] Linux簡介

Linux簡介

誕生於1991年10月,至今已有九年歷史。Linux發展承襲的是開放式原始碼(Open Source)的精神,所有Linux Source Code均可免費取得。

是一套免費且功能完整的UNIX軟體。且它是一個32位元的作業系統,運作穩定且有效率。

是一套專為為80x86個人電腦所設計的UNIX作業系統,從386到Pentinum、P6,都可以執行。

是目前使用人數最多的UNIX作業系統之一。

創使者為芬蘭藉的Linuz Torvalds,加上許多UNIX程式設計師及Internet高手協助開發而成。Linux核心不使用AT&T或其他專屬性的程式碼;主要軟體來至MIT免費軟體的GNU專案。

依循POSIX標準,與UNIX完全相容。

支援完整的網路軟體,包括TCP/IP、Email、Emacs、X Window、NFS、NIS、News、WWW等等。在Linux上建置網路伺服器,已是目前一個經濟且實惠的新選擇。

提供完整的說明文件,及免費的系統原始程式;對於使用者及程式發展者,均是一個成長的絕佳環境。

是一套免費的作業系統,沒有版權問題,軟體取得容易,且網路上應用程式充足,可稱得上是作業系統的新寵兒。(Linux崛起於1991年)

1998年全球Server作業系統,佔有率是17.4%,比起1997年的6.8%整整成長了三倍。(資料來源:IDG)

家族(Linux Distribution)
Linux種類超過20種以上,可謂『族繁不及備載』。這些不同的Linux,使用的系統核心,其實都是相同的,『標準』操作的方式(文字模式)也幾乎大同小異,只是有的Linux Distribution會對系統做『包裝』,使得系統的管理與使用更為簡單。
在台灣最常見的Linux Distribution及目前最新版本如下:
    Linux Distribution        版本     
    RedHat                     6.2(Kernel 2.2.14)
    Slackware                  7.0(Kernel 2.2.12)
RedHat在細心『包裝』下,使得不管是安裝、使用與管理上,都比Slackware簡單許多,但也因為管理的界面隱藏太多技術層面的東西,使用起來很像『MS Windows版的UNIX』。Linux的初學者,如欲探知更多關於Linux (or UNIX)作業系統的觀念及真正的技術,建議由Slackware入門,熟悉系統運作後,在轉至RedHat,俗云『由檢(Slackware)入奢(Redhat)易,由奢(Redhat)返檢(Slackware)難』就是這個道理

TOP

第一章 Linux簡介
一. 何謂Linux?及其由來?(Linus-Minix)
1. Linux為Unix的一種,為一可在PC上執行類似Unix的作業系統,故為一Unix-like的OS。
2. Linux的發展者為Linus-Torvalds,其當初就讀於芬蘭赫爾辛基大學,Linus當時在上課時,安裝一套因上課需求所須的Minix OS,但因Minix無法滿足Linus使用上的需求,於是便自己撰寫一套可以在X86電腦上執行的Unix-Like系統,因是Linus改良的Minix系統,故後來便命名為Linux。
註:由於Unix功能很強,許多開發者就在PC上發展功能差不多的Unix-Like系統,較有名者為Andy的Minix。
3. Linus於1991年推出了 Linux0.0.2版。1994年時,1.0版被發表出來,至2001年,Linux已發表到2.4版了(核心)。

二. Linux的發行版本(套件)---distribution
1. Linux的心臟為核心(kernel)程式,除Kernel外,尚須系統程式與應用程式才能使OS發揮作用。而一些廠商或機構將核心、系統程式、應用程式整合起來便是distribution,以方便使用者安裝使用。
2. 系統程式一般為GNU(美國自由軟體基金會)提供。
3. 目前存在的Linux Distribution有數十種版本,最常見者有RedHat、Mandrake、Open Linux(Caldera)、Debian(GNU)、Slackware、Suse、Turbo Linux等。
註:Unix-like:Linux、FreeBSD、Solaris、Sun、HP/UX。

三. Linux的特色、優點:
1. 穩定性:較Windows穩定,且不易當機。
2. 多人多工:可讓多人於同一時間使用OS,且可同一時間執行多項應用程式。
3. 多平台:可在許多不同CPU執行,不只是Intel。
4. 具行程間記憶體保護:出問題的程式並不影嚮整個系統。
5. 開放原始碼(Source Code):在Linux下,大部份程式原始碼公開,並允許使用者依須要而修改 ( 自由軟體 )。
6. 具卓越的網路能力:可連internet、可架區網、可架各種Server。
7. 所要求的硬體需求較低。
8. 提供完整的程式開發工具,如C、C++、Perl等。



Openlinux 安裝步驟
1. 由光碟開機後,首先選取標準安裝模式(standard install mode)。
2. 選擇語言 → 繁體中文。
3. 授權合約書 → 接受此許可證。
4. 設定滑鼠 → ps/2
5. 設定鍵盤 → 預設。
6. 選擇顯示卡 → 系統會幫你抓。
7. 選擇視頻模式 ( 解析度 ) → 可選1024*768或800*600,選完後有測試按鈕讓您進行測試。另外虛擬桌面選項勿作選擇。
8. 選擇目標 → 自定義。
9. 定義分割區:
˙於右邊選單中選擇主分割或邏輯分割。
分區邊界:輸入結束磁柱大小,填寫完後右邊會顯示這個分割區範圍是多少MB。
 系統類型:選ext3,其後有掛載點選項,依自己需求而定,不過最少需要有 / 及swap兩個分割區。
      這裡假設我分/boot /home /usr / swap等五個分割區,則選掛載點為 /boot時,可啟動項目要打勾,其餘不用。
 完畢後按確定,回到定義分割區,繼續定義其他的分割區。最後一定要記得劃分swap分割區 ( 於系統類型內做選擇 )。
 當全部劃分完後按 」 寫入 「。
10. 格式化所選分割區 → 將所選擇的分割區格式化。
11. 選擇配置檔案 → 選擇所有程式包,若無法選擇,先將縮小選擇範圍項目打勾後就可選擇所有程式包。完後按下一步就開始複製檔案。
12. 設定登錄名稱
˙輸入欲設定的root密碼。
˙輸入一個一般使用者的登錄名稱及密碼,完成後按添加。
13. 設定網路
˙DHCP
˙靜態配置 → ip、netmask、gw
˙主機名稱
˙名稱伺服器
14. 設定啟動加載程式
若硬碟上存在一套以上的作業系統,會列出這些作業系統的選單,看您要不要讓openlinux啟動這些系統。
而在左下角有個寫入至啟動紀錄的選項,就看自己的需求了。
15. 設定數據機
16. 設定印表機
17. 選擇時區 → 本地時間
完畢後就開始玩遊戲,等待作業系統安裝完成。

安裝完後,會有個製作開機片的選項,拿一片空白磁碟片安裝就行了。

不過安裝完後若要在X-WINDOW下顯示繁體中文,尚需下載:
  訪客無法瀏覽此圖片或連結,請先 註冊登入會員
將其燒成光碟後 ( 盡量不要使用nero ),進入圖形介面,然後放入光碟片,接著按照其指示的步驟安裝即可。Reboot後就可顯示中文了。

TOP

第二章 GNU and Unix Commands

一. Shell概述
1. shell是一command interpreter,在核心及使用者間提供一介面,並且可讓使用者與系統做交談(interact)。
以下圖來說,比如使用者在shell下輸入date指令,這時候會透過shell解析給核心這個訊息,因電腦認得的是二進位的程式碼,它並不認識date是什麼東西,所以要經過shell來將date解析成核心認得的二進位程式碼,如此工作才有辦法順利進行。

2. 微軟下,都是配標準的shell,如MS-DOS的command.com,Windows的explorer. exe,而在Linux下則有多種shell可供選擇 (sh、ash、ksh、csh、tcsh、bash)。
3. 第一個Unix系統的shell為Steve Bourne所寫,稱之為sh,在sh出現後,一些人相繼發展出各種不同的shell,而Liunx預設使用的shell為Bourne Again SHell,就是所謂的bash,是依sh發展而來的。
4. $ cat /etc/shells
→ 看看系統上目前可使用的shell有哪些。
  $ chsh –s /bin/sh
→ 改變自己的shell為sh ( logout再login才生效 ) 。
$ echo $SHELL
→ 顯示目前所使用的shell。
# chsh –s /bin/csh userol
→ root將userol的shell改為csh。

二. Entering commands at the command prompt
在介紹基本指令之前,我們先大概認識一下提示號,以bash為例,如:
[barry@openlinux barry]$
在@左邊的barry為使用者名稱 ( 帳號 ),openlinux為主機名稱,在@右邊的barry為目前所在的目錄位置,也就是一般使用者登入系統後預設的家目錄位置barry。$ 是一般使用者的提示號,若是超級使用者 root登入,則其提示號為 #,如:[root@openlinux root]#

1. cd ( change directory ):
$ cd
→ 切換至家目錄,等於 $ cd ~
# cd ~user01
→ 切換至使用者user01的家目錄。
$cd -
→ 切換至前一個目錄的位置(非上一層目錄),於此前並顯示完整路徑。
$ cd /etc/mail
→ 切換至mail目錄,此為絕對路徑寫法。
$ cd ..
→ 切換至上一層目錄。
$ cd ../dir
→ 切換至上一層目錄下的dir目錄。此為相對路徑寫法。
另外」.」表示現在這個目錄,例如:
$ cp /etc/passwd .
→ 將passwd複製到現在這個目錄下。

2. ls (list):
-l:Lists in long format.
-a:Lists all files,including hidden files.
-R:Lists all files recursively down the tree.
-r:reverse order while sorting.
-d:Lists only the name of a directory,not its contents,一般搭配 -l。
例:$ ls -laR
$ ls –l /var
→ 列出var ( 不含 ) 以下的檔案目錄名稱,並以長格式顯示。
$ ls –ld /etc
→ 只列出etc目錄的長格式。
$ ls –l /etc/passwd
→ 顯示passwd檔案的長格式。

3. cat:
To send the contents of one or more files and to create new files.
例:$ cat /etc/passwd
$ cat /etc/named.conf>babafile
$ cat>newfile
→ 馬上按ctrl+d就是製造新檔案,亦可輸入內容後,再按ctrl+d。
$ cat>oldfile
→ 馬上按ctrl+d就等於清空原檔案的內容。
$ cat file1 file2 file3
$ cat –n /etc/termcap>newfile

4. more、less:顯示檔案內容
例:$ more /etc/termcap
→ to scroll forward using the spacebar
  to scroll backward using the b key.
$ less /etc/termcap
→ 同上,但習慣用pageup、pagedown來翻頁,上式也可寫成
$ cat /etc/termcap | less
若要退出,按q。

尋找大檔案中字串:
例:$ cat –n /etc/termcap>barry
$ more barry → /fix 尋找fix字串 ( 從最前面找起 ) → n 找下一個fix。無法往回找。
$ less barry → /fix→n ( 找下一個 ) → n ( 再下一個 ) → N ( 回上一個 )。
若要進入vi command mode,可按v進入,若要退回原more或less
畫面,使用:q 。

˙Redirector and Pipes and Stream
(1) Stream: stdin ( standard input ),代表數字0。
stdout ( standard output ),代表數字 1。
stderr ( standard error ),代表數字 2。
stdin預設為從keyboard輸入。
stdout、stderr此兩種輸出類型則預設輸出至screen。
(2) Pipe:send the stdout of one command as stdin to another command
例:$ cat /etc/termcap | less
= $ less /etc/termcap
$ rpm –qa | grep bind
(3) Redirector:主要為改變stream的預設值。
>:where to send stdout
例:$ cat /etc/passwd> barryfile ( 會cover原內容 )
$ cat >file
→ 按ctrl+d等於建新的空檔案或清空原檔案內容,亦可先
輸入內容後,再按ctrl+d。
$ ls –l /var> newfile
$ cat /etc/passwd noexistfile 1>file1 2>file2
→ 將此兩個檔案內容,其stdout輸出至file1,stderr輸出
至file2,1為預設值。

$ cat /etc/passwd noexistfile>file1
→ 將stdout輸出至file1,stderr輸出至screen。

$ cat /etc/passwd noexistfile>barryfile 2>&1
= $ cat /etc/passwd noexistfile >& barryfile
= $cat /etc/passwd noexistfile &> barryfile
→ 將stdout及stderr輸出至barryfile。

$ cat /etc/fstab noexistfile > /dev/null 2>&1
$ true > barryfile
→清空檔案內容
= $ cat >barryfile 按ctrl+d
= $ cat /dev/null > barryfile

>>:append file,can』t cover file content.
例:$ cat /etc/fstab >> barryfile

<:redirect stdin ( 由stdin讀取資料 )
例:$ cat < /etc/fstab
→ file was opened by the shell ( note:shell一次只能開一
個檔案 )
$ cat /etc/fstab
→ file was opened by cat.以上兩者結果相同,但意義不同。
$ mail Jessica < messagefile
<<:
例:$ cat <<endoff
→ 表示輸入至endoff字串時結束。
$ cat << end > barryfile
→ 輸入至end後結束,並且將輸入的內容輸出到barryfile。


以下為file filter command
5. head:output the first part of files
例:$ head -5 /etc/passwd
→ 列檔案前5行
= $ head –n 5 /etc/passwd
= $ cat /etc/passwd | head –5
$ head /etc/passwd
→ 預設列前10行
$ head -8 /etc/passwd /etc/termcap

6.tail:output the last part of files
例:$ tail -15 /etc/termcap
→ 列檔案最後面15行的內容
= $ tail –n 15 /etc/termcap
$ tail +20 /etc/passwd
→ 從第20行開始列至最後一行
# tail –f /var/log/messages
→ 按ctrl+c結束
(看最新訊息紀錄。Note:須root身份)
$ cat –n /etc/termcap | head –n 20 | tail –n 6
= $ cat –n /etc/termcap | head –20 | tail +15
→ 列出檔案15-20行的內容

7.cut:縱向截取檔案部份資料。
-c ( character )
-f (field) 搭配-d ( delimit )
例:$ cat /etc/passwd | cut –c 2,5
→ 列出檔案中第2及第5個字元。
$ cut –c 2-5 /etc/passwd
→ 列出第2到第5個字元。
$ cut –d: -f 2 /etc/passwd
→ 列出檔案內容中以 」 : 」 做界限的第2欄位。
$ cut –d: -f 3,5 /etc/passwd
→ 以 」 : 」 做界限來列出第3及第5 欄位。
$ cut –d: -f 3-5 /etc/passwd
→ 以 」 : 」 做界限,列出第3至5欄位。

8.wc: -l(lines) -w(words) -c(characters)
例 $ wc /etc/fstab /etc/passwd
→ 列出順序:行、字、字元。即分別列出fstab、passwd內容的
行數、字數、字元數,兩檔案的合計也會列出來。
      $ cat /etc/termcap | wc –c
$ cat /etc/passwd | wc –l
→ 有幾行即表幾個帳號。

 9.tr:replace one string with another or delete characters in a file
-s characters 將重覆字元縮成一個。
    -d characters 刪除所指定字元。
    <note> tr can』t open files
→ tr是所有filters中,唯一不能直接open file的。
    例:$ cat /etc/passwd | tr a-z A- Z
→ 將所有小寫英文字母替換成大寫英文字母。
$ cat /etc/passwd | tr bary abcd
→ 將檔案中的b換成a,a換成b,r換成c,y換成d。
      $ tr a-z A-Z /etc/passwd
→ 錯誤,因不能open files。
$ cat file | tr –s ad
→ 將a及d 字母有重覆的,縮成一個。
$ cat file1 file2 | tr –d c
→ 刪除檔案內容中的c字元。

10.nl: = cat –n 將檔案內容附上編號列出來。
例: $ nl /etc/passwd

11.sort ( 排序 ) :預設以每行第一字元為依據做排序。
預設順序:空格 → 其它字元(#!…) → 數字 → 英文字母大、小寫。
-n:按數字大小排序,英文字母大、小寫 → 數字。
-r:以預設相反預序作排序 (reverse) 。
-m (merge) :將檔案內容合併(上下),但不做排序。
-o (output) :排序後,將結果輸出至file中。
例: $ cat /etc/passwd | cut –d: -f 1,3 | sort
$ sort –n file1 file2
$ sort –m file1 file2
$ sort –r /etc/passwd -o newfile
= $ sort –r /etc/passwd > newfile
$ cat /etc/fstab /etc/passwd | sort –m -o newfile

12.tac:cat的相反順序
例:$ tac /etc/passwd

13.od:examine binary files and output in octal numbers。
例:$ od /usr/bin/nslookup( $ file /usr/bin/nslookup查屬性)

14.sed:a stream editor
例:$ cat –n /etc/passwd > passwd
$ sed 『3,5d』 passwd
→ 刪除第3~5行。
$ sed 『5,$d』 passwd
→ 刪除第5行~最後一行。
$ sed 『10d』 passwd
→ 刪除第10行。
$ sed 『/root/d』 passwd
→ 刪除root字串所在列數的那一行。
$ sed 『s/user/barry/』 passwd
→ 將每列遇到的第一個user字串改成barry。
<note>:替代字串與原字串字數可不同,但tr指令須需相同。
Ex:$ cat passwd | tr user barry
→ 只替代了barr。
$ sed 『s/user/mary/g』 passwd
→ global,將檔案內容中所有user字串改成mary,不限於只修改每列遇到的第一個字串。
$ sed –n 『34s/user/christal/gp』 passwd
→ 只列出有改變的行數,記得p一定要搭配 –n。
  $ sed 』34,$s/user/michael/g』 passwd
$ sed –n 『3,5p』 passwd
$ sed –n 』20,$p』 passwd
$ vi file
→ 編輯內容:35s/user/david/gp
$ sed –nf file passwd

以下二者為重導指令
15.tee:唯一可同時將檔案內容輸出至screen及file中。
例:$ cat /etc/fstab | sed 『s/none/barry/g』 | tee file1
若要避免cover,可用tee –a ( append )
16.xargs:將前面指令執行結果,當成xargs其後所接指令的引數(argument),
    此引數可能為檔案名稱或目錄名稱。
例:$ find /home/barry -name passwd | xargs rm –f
$ ls | xargs rm –rf

TOP

三. Search text files content using regular expressions ( RE )
RE: $ cat passwd | grep pattern
→ pattern出現以下特殊符號的意義:
.:代表任意單一字元。
Ex:$ cat passwd | grep .ser
〔…〕:代表﹝﹞內的單一字元。
  Ex:$ cat passwd | grep〔abc〕user
〔^…〕:不是其內的單一字元。
Ex:$ cat passwd | grep〔^bc〕user
*:在 * 的前面一個pattern,可出現0~n次。
Ex:$ cat passwd | grep ba*rry
^:以^其後所接pattern為首。
Ex:$ cat passwd | grep ^user
$:以$其前所接pattern為尾。
Ex:$ cat passwd | grep flase$
?:前面pattern可出現0 -1次。
+:前面pattern可出現1 –n次。
\:跳脫特殊符號,使其變成一般符號。
  如:#.&.~.().;.」.…及以上所列。
      Ex:$ cat passwd | grep \*

範例:有一file,內容如下:
dea50aw*3d6
3fga2x8zw*dx
mayxz9w*38d
abcdw*d
$ cat file | egrep 「a.x*[a-z0-9]+w\*3?d」
按enter後,結果為何? 1.2.4

˙grep:print lines matching a pattern
-n:把含有搜尋pattern的lines,附上編號列出來。
-c:只顯示合乎條件的列數。
-v:把不含pattern的lines列出來。
-i:忽略大小寫。
-w:pattern是一個word的,列出來。
例:$ cat passwd | grep user
$ cat –n passwd | grep user
$ cat passwd | grep –c user
$ grep –v user passwd
$ grep –in user passwd
$ grep –w user01 passwd

四. wildcard:通配字元,萬用字元
1.*:表0~n個字元。
2.?:表任意單一字元。
3.〔…〕:表其內單一字元。
4.{ab,cd}:將其內字串展開。
5.〔!a-z〕:除a-z外的任意單一字元。
例:$ touch file filea fileb filec filed fileab
$ ls file*
$ ls ?????
$ ls file〔a-z〕
$ ls file{a,b,c}
$ ls file〔!A-Z〕

五.Vi Editor:
1.command mode:$vi file所進入畫面便是command mode。
此模式下,除←↑↓→可用外,亦可用H(←).J(↓).K(↑).L(→)。
至於翻頁可用pagedown(或ctrl+f)及pageup(或ctrl+b)。
按鍵代表涵意:
數字0 →start of line.
$ →end of line.
G →go to last line.
gg →go to first line=1G
b →biginning of word.
e →end of word.
w →start of next word.
(1) 刪除(delete):
x:delete character under cursor.(同DEL)
X:delete character to left of cursor.
dd:delete complete line.
3dd:刪除本行及以下2行,共3行。
db:delete to beginning of word.
de:delete to end of word.
dw:delete to start of next word.
d0:delete to start of line.
d$:delete to end of line.=D
dG:delete to end of file.
若配合區塊,只須按d即可。
(區塊:v→character, V→line)
(2) 取代(replace)
r:replace character under cursor.
R:enter replace mode.(向右替代)
cc:先執行dd,再進入insert mode。
cb:先執行db,再進入insert mode。
其他用法參照上面,不再說明。
配合區塊,用c。
(3) 複製(yank):
yy:yank complete line.
5yy:yank five complete lines.
yw.y0.y$.yG……
配合區塊,用y。
(4) 剪下:
x:只剪區塊涵蓋處。
X:以行為單位剪下。
(5) 貼上:
p:貼於cursor右邊or所在行下面。
P:貼於cursor左邊or所在行上面。
(6) 按u,可一直往回復原。
(7) /pattern:search forward for pattern(從file前面開始找)
          n:往下找另一個相同的pattern。
          N:回上一個相同的pattern。
?pattern:search backward for pattern(n:往上,N:往下)
(8) ZZ:存檔離開 (command mode下) 。

2.insert mode:
由command mode → insert mode方式(最習慣用insert key)
a:append after cursor. A:append at end of line.
i:insert before cursor. I:insert at start of line.
o:open new line below cursor. O:open new line above cursor
Press <ESC> to return to command mode.

3.extended mode:(ex mode)
(1):s/squid/mary
→將squid字串換成mary。只替換cursor所在行(sed是全部)。
亦可於最後面加上 「/」,如:s/squid/mary/ (使用sed替換時,後面一定要有 」 / 」 )。
:20,$s/user/michael/g
→將第二十行至最後一行執行替換。
(2):5,$d
→從第五行刪除至最後一行。
(3):$
→將游標移至最後一行, :1→到首行。
(4):wq
→存檔離開, =:x。
(5):w!
 →強迫存檔,未離開。
(6):q!
→強迫離開,未存檔。
(7):w file
→將目前檔案內容寫入新檔案file (command mode)中。
(8):e newfile
→開啟另一新檔newfile 來編輯。
(9):set nu
→將檔案內容設定編號。
(10):set nonu
→取消所設定的編號。

六.Use the shell environment:
1. echo command and Quote and alias
(1) $ echo very good => very good
$ echo very good => very good
$ echo 「very good」 => very good 單引號同結果
$ echo `date` 也等於 $ echo 」`date`」
$ echo 『`date`』 => `date` 會將單引號的內容當成一般文字處理。
$ echo 「current directory is `pwd`」
(2) $ barry=very good =>command not found(very good中不能有空格)
$ barry=」very good」(單引號同,要養成變數後面用雙引號的習慣)
$ echo $barry =>very good
$ echo 「$barry」 =>very good
$ echo 『$ barry』 =>$ barry
$ barry=」current time is `date`」(此時不能用』 『)
$ echo $barry =>current time is ……
→執行程式的後面及變數內容中含有可執行程式時,絕不能使用單
引號,只能使用雙引號。
$ export barry=very good
$ echo $barry =>very 所以須搭配雙引號使用。
(3) 跳脫符號:\
例:$ echo \$ PATH => $PATH
(4) alias:別名
例:$ alias barry= ls =>$ barry
$ alias barry=」ls -l」 單引號亦同。
$ unalias barry
→取消別名設定
<note>alias別名名稱=執行程式,此執行程式用單、雙引號皆可。
$ alias barry=』ls -l;pwd』

2.當user login成功後,login程式便會開啟一個shell,以提供user的使用環境。一般而言,linux對每一新增user,都使用預設的shell-bash。
Ex:$ bash =>$ tcsh =>$ exit =>$ exit
→表示由此層bash→下層bash→下層tcsh,然後輸入2次exit,退回
原bash。

3.環境變數(Environment Variable):($ env或$ set來看)
所謂使用者的操作環境,即是在shell下的各項設定,設定項目如PATH(路徑)、HOME(家目錄)、PS1(提示號)、MAIL(user信件接收處)、NAME(user名稱)…等等,而其每項環境設定,即是透過環境變數來達成。

4.Shell and Environment Variables(變數類型有此2種)
(1)shell(user) variables:
local variable:child shell don』t inherit them
變數名稱=變數內容
變數名稱一般由字母、數字、_所組成,且第一個字不能為數字。
Ex:$test_local=tommow
$echo $test_local
$bash
$echo $test_local→顯示無法繼承父shell。
$test_local= 或 $unset test_local
→取消變數的方式。
$barry=good =>$ mary=$barry =>$ echo $mary =>good

export (global) variables:child shells inherit them
Ex:$ export boy=good
上式等於 $ boy=good =>$ export boy
$ bash
$ echo $boy
$ bash
$ echo $boy
$ unset boy
→取消變數
$ pstree 目前位哪層shell
        $ export var=」/etc/passwd」

(2)environment variables:(global) can inherit
˙ 查看目前使用者的環境變數:使用指令查看$ env或$ set,而其中的環境變數在哪定義,目前不得而知,有可能是shell設計師預設定義好的。
˙ 若要修改環境變數,可於命令列重新定義或透過設定檔來設定。
˙ 環境變數設定檔:$ man bash => /etc/profile =>尋找bash讀取檔案的順序。
/etc/profile:user login時,首先執行的檔案(bash所讀取)。
其內容定義以下變數:PATH、 USER=`id -un`→username
LOGNAME=$USER、 HISTSIZE =1000、
HOSTNAME=`/bin/hostname`、 INPUTRC、
MAIL=」/var/spool/mail/$USER」
~/.bash_profile:如果此檔案存在,便讀取 (redhat)。
~/.bash_login:若.bash_profile不存在,便讀此檔案。
~/.profile:若以上兩者不存在,便讀取這個檔案 (openlinux)。
  ~/.bashrc:login後會被自動執行。
      ~/.bash_logout:logout其間會被執行。
/etc/bashrc:user login shell後,都會採用。
註:openlinux → /etc/config.d/shells/bashrc
<note>:redhat: ~ /.bashrc內敘述
if〔-f /etc/bashrc〕;then
. /etc/bashrc
fi
openlinux: ~/.bashrc內敘述
[ -r /etc/config.d/shells/bashrc ] &&
. /etc/config.d/shells/bashrc

common environment variables:
PATH:在命令列上輸入指令後,系統會先找尋是否為bash的內鍵命令,若不是,再到PATH中查詢此指令所在目錄是否存在於PATH變數所定義的路徑中,若是→可於命令列下直接輸入指令,若否→需輸入相關路徑。
HISTFILE:定義指令紀錄檔位置(~/.bash_history)。
HISTSIZE,HISTFILESIZE: 定義指令紀錄檔內,所能儲存指
 令最大數。
HOME:家目錄位置。
PS1:定義提示號樣式。
\u→username
\h→hostname
\H→FQDN
\W→the present working directory
\w→the present working directory (絕對路徑)
\d→date
\t→24小時制 \T→12小時制
\$→Uid為0者(root)顯示 #,其它人則顯示 $。
\#→顯示指令數(目前輸入第幾個指令)。
Ex:$ PS1=」[\d@\t \W]\\$」
PWD:目前所在工作目錄。

範例1:$ PATH=」$PATH:.」
「.」表示現在這個目錄,其意思是說將現在這個目錄加入路徑當中。若現於目錄下新增一執行檔(設檔名barry),此時便可於提示號下直接輸入。
→$ barry
但若沒加入路徑,則須寫成 $ ./barry或 $ sh barry
範例2:$ ifconfig =>command not found
# which ifconfig => /sbin/ifconfig
$ echo $PATH =>找無/sbin目錄
$ PATH=」$PATH: /sbin」 =>加入sbin目錄,另外一種方式是修改~/.bash_profile中的PATH,改完後再執行
$ source .bash_profile或
$ . .bash_profile或logout再login。

5. bash history file
$ history
→顯示使用過的指令,含正在login所使用的指令。
$ cat –n .bash_history
→指令紀錄檔案,不含正在login使用的指令。
$ echo $HISTFILESIZE (同HISTSIZE)
→ .bash_history內,所能儲存最大指令數限制。指令數超過限制時,則刪除前面的指令,以維持設定值。
$ !150
→表執行第150行指令(先用$history看)。
$ !cat
→表執行最後面的cat指令(含引數)。
$ !!
→執行前一個指令。

6. /etc/skel:
$ cd /etc/skel
$ ls –a
→ .bash_profile .bash_logout .bashrc
當新增user時,就會由 /etc/skel 複製一份至新user家目錄下,故管理者可由此目錄下的檔案,設定新user的使用環境。

TOP

Perform basic file management
 $ ls –l /etc/passwd
  -rw-r--r-- 2  root  root  1581 9 18 12:30 /etc/passwd
→第一欄第一格代表檔案類型(file type),有以下幾種:
     -:regular file,為一般檔案,有白色(ascii file、hard link)、綠色
→執行檔、紅色→壓縮檔。(openlinux壓縮檔為白色)
 d:directory,目錄,一般為深藍色。
  l:symbolic link file,淺藍色。
 c:character devic,黃色。
     b:block device,黃色。
例:$ ls –ld /var
$ ls –l link (先執行$ln -s /etc/passwd link)
$ ls –l /dev/ttys0 (lp0.audio.tty1.psaux…)→字元裝置(與顯示有關)。
$ ls –l /dev/hda (hdd.fd0.hda.sda…)→區塊裝置(與資料儲存有關)。
    第一欄2-4格為owner permission,5-7格為group permission,8-10格
       為other permission。
    第二欄為硬式連結數 (hard link count),目錄的hard link count等於其下
       的子目錄數加2(目錄本身及上個目錄要算進去),至於檔案的
       hard link count要把本身算進去。
    第三欄為owner
  第四欄為 group
第五欄為檔案大小,單位為bytes。
    接著是檔案的建立時間或修改時間,最後則是檔案名稱。

1. 權限:r(讀)、w(寫)、x(執行)
針對目錄:r(read):表示可以看得到該目錄下的子目錄及檔案名稱清單。
w(write):可新增或刪除其下的子目錄及檔案。
x(execute):可切換到該目錄上。
針對檔案:r:可讀取檔案內容。
w:可寫入檔案內容,就是可修改檔案內容的意思。
x:執行該檔案。
目錄權限 r-- 表不可切換至該目錄,亦不能於其下新增刪除子目錄及檔
案,只能讀取該目錄下的清單。
--x表無法看到此目錄下清單,亦不能於其下新增刪除子目錄及
檔案,只能切換至此目錄。
欲於目錄下新增、刪除子目錄及檔案,則該目錄須開放w、x的權限。
欲於目錄下讀、寫 檔案內容,則該層目錄只須開放x權限。
  另外若欲複製檔案至目錄中,執行者須對該檔案的上層目錄有x權限,目
的目錄有w.x權限,對檔案須有r的權限。
至於scripts file,執行此scripts file的使用者需對此file有r.x的權限,對於file的上層目錄需有x權限。
   Ex:設 /tmp下有一目錄 /tmp/dir,目錄下有一檔案/tmp/dir/file,
drwxr-xr-x root root dir
-rw-rw-rw- barry barry file
→file擁有者為barry,但無法刪除此file,因上層目錄dir的other無w權限所致。
Ex:drwxr--r-- root group dir
-rw-rw-rw- barry barry file,barry屬於group群組
 →barry無法修改file內容,因所屬group無x權限。

2. basic UNIX file management commands
(1)cp: 一般使用者執行此指令時若未加參數,預設會cover原內容,若為
root使用,則會出現交談模式,因在 ~/.bashrc內有設定別名之故。
而openlinux預設都沒設定,可自行補上,如:
   alias cp=』cp –i』
alias mv=』mv –i』
alias rm=』rm –i』
-i:interactive交談,→y or n
-b:backup
-r:(同-R)copy directory』s contents to another recursively.
-P ( --parents ):將來源目錄複製到已存在的目錄中。
-s(-d): copy symbolic link file.
-l:copy hard link file.
-f:force the copy (RedHat預設)
-p:preserve file attributes if possible.
-a= -dpR→-a為cp指令最常使用參數
 Ex. # cp –a /var/spool/mail/* /tmp/dir
# cp –pr /home/barry/dir /tmp/dir1
# cp –P /var/log/messages /dir (dir須已存在)
→來源目錄下可再接目錄,但最後要接檔案,如此才有意義。
$ cp /etc/passwd 「my file」
$ cp file1 file2 dir =$ cp f* dir

(2)mv: -f -i -b(同上),-f(預設)
Ex. $ mv file dir
→將file移至目錄dir下。
$ mv file filename
→將file改名成filename。故mv可有邊移邊改名的功能。
$ mv -i file1 file2
$ mv –b file1 file2
以上兩參數須對已存在的2 file,才有意義,cp亦同。

(3)mkdir:製造新目錄, -p.-m
Ex:$ mkdir newdir
$ mkdir 「new dir」
$ mkdir new\ dir 建立名為new dir的目錄
$ mkdir -- -new-dir 建立-new-dir目錄
$ mkdir -- 「-new dir」 = $ mkdir -- -new\ dir
$ mkdir –m 700 dir1 dir2
$ mkdir –p dir/dir1/dir2
→遞迴製造空目錄。
(4)rmdir:刪除目錄,且必須是空目錄。
Ex:$ rmdir -- -dir
$ rmdir –p dir/dir1/dir2
→遞迴刪除空目錄。
(5)rm:刪除檔案及目錄 -i、-r(R)、-f
Ex:$ rm file1 file2 file3
$ rm –rf dir file
(6)touch:建立空檔案或更新檔案時間。
Ex:$ touch emptyfile
$ touch emptyfile oldfile
$ cat >newfile → ctrl+d

3. 檔案、.目錄權限及擁有權變更:chmod.chown.chgrp
--- --x -w- -wx r-- r-x rw- rwx
000 001 010 011 100 101 110 111
0 1 2 3 4 5 6 7

umask:
預設:$ umask 002表預設目錄權限775,檔案權限664。
# umask 022表預設目錄權限755,檔案權限644。
$ umask 2 表002
$ umask 27 表027
例:$ umask 027
$ mkdir newdir
$ touch newfile
$ ls –l
→drwxr-x--- newdir
-rw-r----- newfile

(1)chmod(Change Permissions on a file or directory)
Only the owner or root can change the permission.
<1>symbolic mode:
u→user, g→group, o→other, a=u+g+o
例:$mkdir dir dir1 dir2
$ chmod –v g-w dir1 dir2 (755)
$ chmod –v go+w dir (777)
$ chmod –v a=rw dir (666)
$ chmod –v u=rx, g=x, o= dir (510)
$ chmod –v u+w,g=rw,o+rx dir (765)
$ chmod –v +r newdir
→表示讓所有人都有r 的權限,+x是讓所有人都有x 權限,
 但無法使用+w。
<2>number mode:
例:$ chmod –v 644 file1 file2
參數:-v→無論權限改變前後是否相同,都會顯示(enter後)。
-c→權限改變後與改變前相同,不顯示,不同才顯示。
-R→目錄下的子目錄及檔案權限會跟目錄相同。
例:$ chmod –Rv 777 dir
→ 若dir底下有子目錄或檔案,則它們的權限也改成777。

(2) chown(change the user and the group ownership)
chgrp(change the group ownership)
<note:chmod所使用的參數-v、-c、-R皆可適用於此>
only root can change the ownership
例:# chown –v user01.user02 dir
   →將dir目錄的擁有者改為user01,擁有群組改為user02。也可使用user01:user02
# chown –Rv .user02 dir1
 →將dir1的擁有群組改成user02。
# chgrp –Rv user01 dir2 dir3
 →將dir2.dir3的擁有群組改為user01。
註: 一般使用者可使用chown.chgrp的時機,除非該檔案的擁有者同時也屬於群組成員的一分子(預設群組或附屬群組皆可),此時擁有者才可將檔案的擁有群組改為該群組。


進限權限設定:
SUID:Set User ID(4). SGID:Set Group ID(2). Sticky bit(1)
rwxrw-rw- =>0766 rwsrw-rw- =>4766
rwsrwSrw- =>6766 3644 =>原權限rw-r--r-- =>rw-r-Sr-TSUID:只能使用於執行檔。
當執行檔案時,執行此程式所具備的權限,就是以執行者的ID為準,現若增加SUID,則執行此檔案所具權限,是以檔案擁有者為主,當然本身須具備x權限才行。
Ex:$ ls –l /usr/bin/passwd r-s--x—x (r-sr-xr-x)
→passwd指令須寫入 /etc/shadow,而此檔案一般user無法存取,若無SUID,則user無法使用此指令,有SUID則執行此程式所擁有的權限,等於該檔案的擁有者所擁有的權限。
SGID:用於檔案時,同SUID,只是執行此檔案所具權限是以檔案擁有群組為主。
用於目錄,則此目錄下,無論誰新增檔案或子目錄(含root),則此檔案或子目錄所屬群組必和此目錄的所屬群組相同。
Ex:barry$ mkdir –m 2775 dir
# chgrp –v group dir
$ touch dir/file1
# touch /home/barry/dir/file2
# ls –l /home/barry/dir
Sticky bit:一般針對目錄而設,而位此目錄下的檔案及子目錄的擁有者(root除外),方有權刪此檔案或子目錄,other縱使有w權限,亦不能刪除
Ex:$ ls –ld /tmp drwxrwxrwt
barry$ touch /tmp/file 另一user mary從另一終端機 login
mary$ rm –f /tmp/file 無法刪除

<補充>指令chattr. lsattr
# chattr +i /home/barry/passwd
→設定+i屬性,表passwd 檔案不能被修改、刪除、重命名,root亦
例外。(只有root能刪除此屬性)
# lsattr /home/barry/passwd→看檔案屬性。
# chattr –i /home/barry/passwd 取消檔案屬性。

TOP

第三章 Administrative Tasks
一. Manage users and group accounts
1. Accounts and the password file
(1) /etc/passwd # vi /etc/passwd = # vipw
barry: x: 500:500:: /home/barry: /bin/bash
帳號 密碼 UID GID 備註 家目錄 shell
˙username:為唯一的,且區分大小寫。

˙password:x表示經過shadow passwords加密保護,且將encrypted password置 /etc/shadow。
# pwunconv → Revert(恢復) from shadow password configuration to a standard password file.
照字面上翻譯就是將編碼後的密碼不轉換到shadow內,也就是執行此指令後,加密過的密碼會放在/etc/passwd之中。
# cat /etc/passwd → 密碼經編碼(MD5→單向編碼)
# cat /etc/shadow → no such file or directory
# pwconv → 回復使用shadow passwords file
when you run this command , it creats a /etc/shadow file from your /etc/passwd file.
The 「pwunconv」 command will update /etc/passwd file and then delete the /etc/shadow file.
If you need to restrict a user』s access , place an asterisk(*)at the beginning of the field.(如此設定會造成使用者無法收發信件)
If the field is empty, only the username is required to login.

˙UID (unique)、GID:一般使用者帳號UID、GID由500開始,但並非絕對,視版本而異,500以下為供系統帳號所使用。
UID、GID為非負數的整數 (nonnegative interger ),且UID是唯一的。
Kernel 2.2為16bit範圍,亦即可開帳號數為216 (0-65535)。
Kernel 2.4為32bit範圍,亦即可開帳號數為232。
<note>系統辨別身份是以UID.GID為主。另此GID是預設群組ID。

(2) /etc/shadow:存放編碼後密碼及密碼相關設定訊息。
shadow權限為rw-------。而chage指令,會將結果寫入此檔內。
而openlinux的shadow權限為r--------。
shadow內容如下:
barry:$ 1$a40w32A…:11941:0:99999:7: : :
帳號 編碼後密碼 -d  -m -M -W -I -E 保留
11941表示 chage –d所指定日期至1970.1.1的天數 。
倒數第二欄為chage –E 所指定日期至1970.1.1的天數。
最後一欄為保留的欄位。
若密碼欄為!!→表示當初新增使用者時,並未設定密碼,如此會造成使用者無法登入(redhat版本)。
若密碼欄為空白,則使用者不需密碼即可登入(redhat)。當我們執行:
# passwd –d username時,就是將shadow的密碼欄改成空白,但passwd檔案的密碼欄未異動。
由以上我們可以歸納出只要passwd或shadow的密碼欄有一個是空白,該使用者就可不需密碼登入,若是兩者密碼欄都是空白,也可不需密碼登入。

(3) /etc/group
groupname: x : 510 :
群組名稱 群組密碼 GID 加入此群組的username
# grpunconv及# grpconv同user原理。

(4) /etc/gshadow存放group編碼後的密碼。一般群組不設密碼。

2. User and Group Management Commands ( root方有權使用 )
(1) useradd:新增使用者帳號
使用useradd指令時,等於進行以下行為:
於 /etc/passwd加入帳號資料 → 將編碼後的密碼置 /etc/shadow
→ 於 /etc/group建立群組 → 建立家目錄在 /home/username
→ 將 /etc/skel 中的隱藏檔複製一份至家目錄下。
參數:-d:指定家目錄。
-g:指定預設群組,可用群組名稱或GID。
  -G:指定所屬多群組(附屬群組),可同時指定多個群組名稱或GID,如group01,group02或501,502。
-s:指定使用者所使用的shell。
-m:製造家目錄。
-e:帳號有效期限(09/24/2002)
   -c:備註。
-u:指定使用者UID。
-D:系統預設值。
一般使用 useradd指令時,其預設值在 /etc/default/useradd內。
    若我們執行 # useradd –D –s /bin/ksh ,代表新增使用者時使用預設的shell為ksh,亦可直接修改 /etc/default/useradd。
另外一個相關檔案為 /etc/login.defs 可自行參考看看。

  例:# useradd –m –d /home/mary –s /bin/sh –u 600 vivian
→ 新增一使用者vivian,其家目錄為 /home/mary,使用的shell為sh,uid為600。
     # passwd vivian
→ 建立使用者密碼。
# useradd –m barry
# passwd barry
→ 然後會要求您輸入兩次密碼作確認的動作。
     用同樣方式新增另一使用者mary。然後使用groupadd指令新增一個群組group01:
# groupadd group01
再來使用usermod指令對已存在的使用者預設項目作修改:
# usermod –g group01 barry
  → 將barry的預設群組改成group01,可由passwd檔案的內容看出其GID已改成group01的GID。
     # usermod –G group01 mary
→ 將mary加入group01群組中,此時我們可由 /etc/group
       檔案中發現mary已附屬在group01群組當中。
     我們也可用 # id mary 及 # id barry比較一下不同處。
另外可用 # groups barry來看barry 的預設群組及附屬群組。
     # usermod –e 12/30/2003 vivian
→ 修改vivian的帳號有效期限為2003年12月30日。
     日期的另一種寫法:2003-12-30或03-12-30。
       若要恢復預設值 ( 無限定帳號期限 ),可執行:
usermod –e 「」 vivian,有的版本亦可執行如下:
usermod –e 0 vivian
  # chage –l vivian
→ 看vivian帳號密碼相關設定。
  
(2)userdel:刪除使用者帳號。
-r:連同使用者的家目錄一起刪除。
  例:# userdel –r user01

(3)usermod:參數同useradd ( -D除外 ),-l → 改變使用者登入帳號。
  例:# usermod –d /home/david barry
→ /etc/passwd中barry的家目錄有改為david,但 /home底下沒改,還是barry。所以須執行以下:
  home# mv barry david 這樣barry登入時才有david家目錄可用。若配合-m參數執行如下:
# usermod –d /home/barry –m barry
→ 這樣 /etc/passwd及 /home的家目錄都已改成barry。

# usermod –l michael barry
→ 將帳號barry改成michael。這裡只是改變登入帳號為michael,家目錄仍為barry。若要連家目錄一起更改:
# usermod –d /home/michael –m michael

(4)groupadd:新增群組。
-g:指定群組GID,其後不能接群組名稱。
例:# groupadd –g 510 group01

(5)groupmod:
-g:修改群組GID。
-n:修改群組名稱。
例:# groupmod –n group02 group01
→將group01名稱改成group02

(6)groupdel:刪除群組。
例:# groupdel group01

(7)passwd:設定使用者密碼及鎖住、解除密碼、刪除使用者密碼。
-l ( lock ):鎖住使用者密碼。
-u ( unlock ):解除使用者密碼。
-d ( delete ):刪除使用者密碼,該使用者登入時,就可不須密碼而直接登入。
註:Openlinux版本無法使用 –d 參數。
例:# passwd –l user01 =>鎖住user01密碼。
# passwd –u user01 =>解除鎖住的密碼。
# passwd –d user01 =>刪除user01密碼。

(8)gpasswd:administer /etc/group file and /etc/gshadow file
此指令若不加參數,為設定群組密碼。
-a:增加使用者至群組中 ( 附屬群組 )。
-d:將使用者從附屬群組中移除。
-r:將群組密碼移除。
例:# gpasswd –a user01 group01
           → 將使用者user01加入group01群組中。
# gpasswd –d user01 group01
           → 將使用者user01從group01群組中移除。
# gpasswd –r group01
→ 移除群組密碼。

(9)chage:change user password expiry information
-m:使用者可變更密碼的最少天數。
-M:設定密碼最大期限,使用者需在期限內編更密碼。
-d:最後變更密碼的時間MM/DD/YY(YY-MM-DD),預設為更改密碼當日(也可設定非當日時間)。
-I:密碼期限到期後所能閒置的天數,一過則密碼將被鎖住。
-W:密碼期限到期前,對使用者提出警告的天數。
 -E:帳號期限, MM/DD/YY或YY-MM-DD。
 -l:只看帳號密碼設定情形。
例:# chage –m 7 –M 30 -I 5 –W 3 –E 02-12-31 –d 6/12/02 \
user01
# chage –l user01
# cat /etc/shadow
→ 比較上面兩式,另外可用:
# chage user01
→ 進入交談模式進行設定,可達相同設定效果。

<綜合>欲讓使用者暫時無法登入的做法:
˙# passwd –l username
˙# chage –E 02/20/2001 username
→ 將account有效日期設定過去的時間。若要恢復原預設值可:
˙# chage –E 「」 username或 # chage –E 0 username ,視版本而定。
˙# usermod –e 02/5/01 username
→ 同上。
˙# vi /etc/passwd
→ 將使用者的密碼欄更改成」*」 (redhat)。
   也可將shell改成 /sbin/nologin或 /bin/false。

<註> chage –l username中 Maximum + Last Change = Password Expires
天數    日期    日期
Password Expires+Inactive = Password Inactive
日期 天數 日期

二. Create、Monitor、and Kill Process 行程 ( 程序 ) 管理
1. Processes ( 程序or行程 ):
Each program running on your system is a process.
每個process,系統會分配一個number給它,此number稱Process ID
( PID ),PID是唯一的、不可重複的整數 ( interger )。
在Linux中,一程式可同時執行多個程序,每個process各有其唯一的number。
系統於開機後執行的第一個程序為init,其PID為1(由Kernel執行init)。

2. Process Monitoring commands
(1)ps:不加參數,會顯示使用者所在終端機上的程序。
-a:顯示所有終端機上的程序,需搭配 –x (including other users)。
-u:與ps類似,多出username、cpu記憶體使用及其它資訊。
-x:顯示所有程序。( 含daemon processes 系統程序 )
-w:Wide output format
e:show the environment f:Forest mode
樹系結構
例:$ ps aux =$ ps –aux
$ ps auxw
$ ps –ef ( 不等於 ps ef )
所以欲看系統上所有程序 ( 含daemon ) 有:
$ ps aux ( ps ax 亦可 )
$ ps –ef
$ pstree =>顯示父行程、子行程的樹狀結構。
$ pstree –a ( -c、-p…皆可 )
$ top

(2)top:動態更新程序管理指令 ( man ps → /sleep )
$ top
→輸入指令後,可看到很多訊息。
第一部分顯示系統資訊,包括已開機時間、登入人數、系統平均負載(1分.5分.15分)、行程數統計、CPU、記憶體及SWAP使用狀態等等。
第二部分顯示動態行程資訊,其各欄位意義如下:
 PRI:The priority of the task.
NI :The nice value of the task.
RSS:佔用實體記憶體大小 ( kb )
SHARE:共享記憶體大小 ( kb )
→ shared memory是指同一記憶體區段被一個以上的行程所分享。
STAT:R ( running )
S ( sleeping )
T ( stop ) → 等於暫停 ctrl+z
W ( swap):不常使用到的行程,放置換區(RSS:0)
D ( uninterruptible sleep ):不間斷睡眠,與R類似。
 < :表高優先權,當nice值小於0時會顯示。
 N:表低優先權,當nice值大於0時會顯示。
    Z ( Zombie ) 殭屍,表行程當掉。
 以上STAT代號亦可適用於PS aux中,而於PS aux中的TTY為?者,表不佔終端機。
若要離開top,按q鍵 。

TOP

底下就來談談top畫面中的按鍵說明:
h => 顯示top按鍵功能說明,看完說明後,按任意鍵繼續。
k => kill process,按下k後,接著輸入PID,enter後出現
  Kill PID number with signal〔15〕:的敘述,直接按enter
就可殺掉該程序,若殺不掉可輸入9來強迫終止。若按下k後欲取消,直接enter即可。
u => 只看此user的行程。看完後要回上個畫面按u,再按
enter就可回原畫面。
s => top畫面更新的秒數(second)。
r => 重設優先權(renice)。
P => 按佔用CPU的百分比做排序。
M => 按佔用記憶體的百分比做排序。
q => 離開。
<說明>優先權:範圍 -20~19,0為預設值,-20為最高優先權。
       19為最低優先權。

3. Modify Process Priorities ( -20 ~ 19 )
(1)nice:對程序設定優先權的指令,預設為0。
一般user只能設大於0的數字(低優先權),只有root有權設小於0的數字(高優先權)。
例:$ nice –n 10 top = $ nice -10 top
$ nice –n -2 ls –laR / => Permission denied
# nice –n -10 top = # nice --10 top

(2)renice:user所能設定數字權限同nice。
renice為重新設定已執行程式的nice值。
例:$ renice 5 1917
→對PID為1917者,重設其優先權為5。
# renice -2 –u barry重設使用者barry所有程序優先權為-2。
# renice -15 -p 1917 =>-p為預設,可省略。
註:對一般使用者而言:
  ˙只能設定大於0的nice值。
  ˙nice值一旦調高後 ( 低優先權 ) 就不能再調低。
  ˙只能設定及調整自己程序的nice值。

4. Jobs control ( 工作管理 )
當您輸入一指令,或者藉由pipe輸入多指令時,就已經新增一個job,故一job可包含多程序。而您只能在前景 ( foreground ) 執行一個job,但可在背景 ( background ) 執行多個jobs ( 同一終端機下 )。
例:$ vi file
→ctrl+z(暫停suspend)
$ top
→ctrl+z
$ cat /etc/termcap | less
→ctrl+z
$ jobs
→可看到有編號1.2.3等三個工作暫停。
( 「+」 表最後一個job, 」-」 表倒數第二個job )
$ jobs –l
→可看到3個工作有4個程序(4PID)。
$ fg %2
→工作編號2 ( top ) 回前景執行。
若只輸入fg ( $ fg ) 則執行最後一個工作,即cat /etc/termcap | less
$ bg %1
→回背景執行。
$ kill %3
→結束編號3的工作。

5. Signals:A signal is a communication sent to a process.
You can use the kill command to send a signal to a process.
$ man 7 signal
(1) SIGHUP(1):讓程式重新讀取設定檔內容。
(2)SIGSTOP(19):暫停程序 ( 類似前景執行時按ctrl+z )
(3)SIGTERM(15):終止程序,此乃系統預設值。
(4)SIGKILL(9):強迫終止行程。
(5)SIGINT(2):似前景執行ctrl+c,例如使用者由一終端機登入執行
$ ping 168.95.1.1,然後root由另一終端機登入執行 
# killall –INT ping
再回client所登入的終端機上看結果。
在對程序送出信號前,最好能先查其PID。(ps aux)
例:$ kill –l
→看有哪些signal可用。
$ kill –STOP 10250
→-STOP可用以下代替 –stop -19 -SIGSTOP -sigstop

$ kill -TERM 10255 = $ kill 10255
-15
$ kill –HUP `cat /var/run/xinetd.pid` ( 或cat /var/run/inetd.pid )
$ kill –HUP `pidof xinetd` ( kill –HUP `pidof inetd` )
$ kill –kill 9885 9886
-9
$ killall vi ( 可終止所有vi的程序 )
$ killall –TERM top ( killall非接PID,而是接程式名稱 )
$ kill -9 %2 =>將暫停或背景工作強迫終止。

6. nohup:一般在父行程終止時,其下子行程亦終止,所以在登出後,shell下的所有程序都會終止,但若想在登出後,程序能繼續執行,便要使用nohup ( 忽略父行程終止 )。
例:$ nohup ls –laR / &
→立刻logout再login時,發現多一個nohup.out 的檔案,此檔案即為上述程式所執行的內容。

TOP

第四章 Linux Filesystems,Filesystem Hierarchy Standard
一、 Create partitions and filesystems(fs)
1. 磁碟構造:
˙Cylinder(磁柱):0起算,1 Cylinder=255 Heads.
˙Head(讀寫磁頭):0起算,1 Head=63 Sectors.
˙Sector(磁區):1起算,1 Sector=512 bytes ,而磁碟分割是以磁柱為計算單位,第一個磁柱(0)的第一個磁區(1)放MBR ( 管理開機紀錄),故做partition時,第一個分割區設定範圍是由磁柱1開始起算設定的。
Ex:2434 cylinders的hard disk,其大小為多少G?
2434 × 255 × 63 × 512 = 20020331519 bytes = 20GB
<note> 硬碟的sector,是屬於physical unit (物理或實體單位),在硬碟一出廠時即已固定,無法做更改。而block是屬於logical unit,可於formatting時,用mke2fs來更改系統預設值。

2. 分割區:
(1) IDE介面:
一般主機板上至少兩個IDE介面(IDE0.IDE1),每個IDE介面可安置兩個devices,故有四個devices可供安置,devices可為硬碟、光碟機、燒錄器等。
IDE0 (primary): hda (master) → primary master
hdb (slave) → primary slave
IDE1 (secondary): hdc (master) → secondary master
hdd (slave) → secondary slave
<說明> h: 表示為IDE介面。
s: 表示為SCSI介面。
d: disk 磁碟機。
      a: 表示第一個裝置,一般為硬碟,b.c.d 依此類推,至於其後所接數字是代表為第幾個分割區 (partition number)。
       Ex: hda2表示第一個IDE介面上的第一顆硬碟的第二個分割區。
     hdc3表示第二個IDE介面上的第一顆硬碟的第三個分割區。
  hdd一般為光碟機之類的裝置。

     (2) partition:
Primary partition:max → 4個(編號1-4)
Extended partition:max → 1個(編號1-4) 。
Logical partition:編號5開始至16 (redhat)。
Openlinux為5 – 60。
以上ID皆不可重複。
<note> extended partition本身不可存放data,而須由其下的logical partition來存放。

3. 檔案系統 (fs):作業系統用來存取的資料格式。
Linux支援很多的fs,如msdos、vfat、ntfs、iso9660、nfs等等,不過前提是該檔案系統需被掛載到linux下才行。
(1) partition types:
Minix:81→older linux.
Linux swap:82
Linux(native):83→安裝linux時,最少須有兩個分割區,即82.83。
Windows:FAT32(ob). NTFS(07)…。
(2) linux可用的檔案系統 (83)
˙ext2 (extended second file system)
˙日誌式fs ( journaling ) 分以下幾種:
ext3 (ext2+journaling):Kernel 2.4才開始支援,Red Het是最早使用ext3檔案系統的版本。
reiser:SuSE研發,小檔案系統適用,大檔案系統可用以下兩個:
XFS:SGI公司研發。
JFS:IBM研發。
<note>日誌式:將系統所做的更動,像日記一樣記載下來,並存放於硬碟的journal file,如遇不正常關機或電力中斷,在reboot後,會自動於journal file檢查記錄,故可順利讓系統開機,並確保資料不會遺失。
若是ext2,則須等待系統檢查有無壞軌及修復的時間。
<note>ext2 fs會先將系統所做的更動暫存至記憶體內,再伺機回存硬碟,以增快系統效率,但一旦碰上不正常關機時,可能會造成快取緩衝區的資料遺失。

以下指令 --- fdisk mkfs fsck 都只有root才有權執行。
4. fdisk : create partition
(1) # fdisk –l /dev/hda
→顯示partition table (包含未掛載的partition),device若沒寫,預設為hda。如:
# fdisk –l
(2) # fdisk –s /dev/hda3
→ 顯示第三分割區大小。
(3) # fdisk /dev/hda
→ 對第一顆硬碟執行磁碟分割。
m:print the menu.
p:print the partition table.
n:add a new partition.
d:delete a partition.
t:change a partition』s system id.
l:list known partition types.
w:write table to disk and exit.
q:quit without saving changes (或ctrl+c).
(4) 一般PC上的BIOS,只能抓取1024cylinders內的範圍(約8.4G),所以儘量將 /boot放置在8.4G以前,但若 /boot超出此範圍,不妨加入LBA32 (Large Block Adress)這個參數試試。

5. mkfs: create filesystems (formatting),支援ext3.ext2.vfat.msdos等。
當硬碟分割好後,還無法使用,尚須製造一檔案系統給它,即所謂的格式化。
例:# mkfs –t msdos /dev/fd0
  → 未用-t來指定欲格式化的檔案系統時,預設為ext2。
# mkfs –t ext2 –c /dev/hda2
→ mkfs –t ext2可用mke2fs及mkfs.ext2代替。
 -c: check the device for bad blocks before building the fs.
# mke2fs –c /dev/hda3
# mke2fs –j /dev/hda3
→ 格式化成ext3的檔案系統。
# mke2fs –b 1024 /dev/hda3
→ 用-b (block)來指定區塊大小,系統有效區塊大小值為1024.2048.4096 bytes.
# mke2fs –i 1024 /dev/hda3
→ 指定inode大小為1024 bytes i≧b
# mke2fs –N inode數 /dev/hda3
     → 指定inode數。
# mke2fs –jb 2048 –c /dev/hda5
       → 格式化成ext3的檔案系統。
     註: 若要對已mount的分割區進行mkfs,記得先umount 該分割區。

二. Maintain the integrity of filesystems
在linux裡,每個分割區都有每個分割區的 fs,此fs中,與資料存取相關的基本結構如下:
super block -----------> inode block -------------> data block
super block存放著檔案系統的重要資訊,從super block裡就可取得檔案系統中的任何檔案資訊,然後再從inode block取得檔案實際存放的區塊位置。所以我們需要存取任何資料時,都會先經過super block。


1. inode觀念:
(1) inode(index node索引節點): A data structure called an inode.
inode block為一data structure,其大小為128 bytes,inode block會指出檔案存放於硬碟的實際位置 、檔案擁有者和所屬群組ID、檔案存取權限、檔案大小、檔案連結數及時間相關訊息等,但真正的檔名並不儲存於此,而是存於上一層目錄中。
     

      
  inode number:a unique number associated with each filename . This number
is used to look up an entry in the inode table which gives
information on the type,size,permission,owners and location
of the file .
當我們要存取檔案於硬碟時,須要有一個inode number指標。在同一partition中,inode number是唯一的,也就是每個檔案目錄都有其唯一的inode number,但若不同的partition,其inode number便有可能產生相同的情形。
底下我們以 /etc/passwd作例子,來看看是怎麼樣的一個搜尋流程:
    首先我們需要的第一個 inode 是檔案系統根目錄 ( / ) 的 inode,我們可以得到它的值在檔案系統的 superblock中,因而找到了根目錄的inode block ,最後找到了根目錄所在的區塊位置,接著從此區塊中可找到etc的目錄名稱及etc的inode number,因而找到了etc的inode block,由此inode block中得到etc所在的區塊位置,再由此處得到passwd的檔案名稱及passwd的inode number,接著找到passwd的inode block,而由inode block的訊息得到passwd實際存放的區塊位置。

Ex: $ stat /etc/passwd →inode data structure (redhat)
→其內容中的Block:8,表示檔案佔用block空間為512×8=4096 bytes(8個磁區)

(2) block size(區塊大小)
資料的寫入是以block為單位,大小以byte表示,其有效的預設 為1024.2048.4096 bytes。
# tune2fs –l /dev/hda3 →可查出預設block大小、indoe數、block數…。

假設一檔案大小為1000 bytes,block為4096 bytes,則剩下的3096 bytes會浪費掉。又如檔案為5k,則會佔用掉2個blocks。

(3) 綜合以上,inode大小 (bytes-per-inode)通常不能少於block size,而inode count、block count數量,理論上是以磁碟容量去除以他們的預設大小。
inode count意謂著能寫入的檔案數,而block為檔案寫入磁碟的最小儲存單位。
block越小,大檔案寫入速度慢,適合小檔案且數量多的系統。
block越大,大檔案寫入速度快,但對小檔案便浪費很多空間。

2. fsck:check and repair a Linux file system
於一般正常情況下,勿使用此指令,否則不小心會造成對檔案資料的危害。故只有在系統出問題時,進入單人維護模式下才須使用到。其它使用fsck的時機,例如用fsck來check剛剛formatting的硬碟分割區有無問題等。
 <note>進入單人模式方式:
˙ # init 1
˙ 於lilo選單畫面下,按ctrl+x後,就會看到boot: 提示號,此時輸入如下:
     boot : linux single 或 linux –s (redhat尚可使用linux 1)
註: openlinux於boot: 提示號下輸入linux –s或linux single,接者會要求輸入root密碼,若不想在進入單人模式輸入密碼可修改 /etc/inittab。最後在成功進入後,記得先執行mount –o rw,remount / ,這樣才可修改檔案。
˙ 於grub選單畫面下,先用上下鍵選擇linux os,然後按e進入編輯,再用上下鍵選擇kernel那一行,再按e進入編輯,於該行最後面補上linux -s或linux single或 (記得要空一格),然後按enter,最後按b就大功告成了。
˙ 用光碟開機時,boot: linux rescue,進入提示號後,記得執行
# chroot /mnt/sysimage,這樣才可用root身份進行修改 (redhat)。
註: openlinux可藉由redhat的開機光碟進入rescue mode 。
    ˙ 若是使用磁片開機,則與第二點相同(boot : )。
    
fsck使用前提:該分割區fs要umount(root partition除外)或該分割區fs要remount為read-only
Ex:# fdisk /dev/hda =>creat a new partition:hda6=>reboot
# mke2fs –j /dev/hda6
# e2fsck –c /dev/hda6 (-c:check bad blocks)
→ fsck –t ext2等於e2fsck,其可支援ext3 fs。
# fsck –a /dev/hda6
→ Automatically repair the file system without any questions.
# fsck –r /dev/hda6
→ Interactively repair the file system.
# mkdir /mnt/hda6
# mount –t ext3 /dev/hda6 /mnt/hda6
# cd /mnt/hda6 =>hda6目錄下會新增lost+found目錄。
當執行fsck時,若有檢查到bad blocks,會在lost+found目錄下顯示錯誤的、有問題的檔案及遺失的檔案。

When running fsck during system boot,the root partition is mounted in read-only,then running fsck and then the root partition is mounted as read –write.
All other partitions are checked before they are mounted.
root partition需先於其他partition作fsck。

3. df (disk free):
查詢硬碟分割區剩餘可用空間的指令,另外也可顯示系統目前已掛載的檔案系統。
例:$ df –h
→空間大小使用單位,視字元長度而自動調整顯示單位(M.G..K)。
$ df –T
→多顯示fs type。
$ df –i
→顯示inode count。
$ df –t ext3
→只顯示fs type 為ext3者。
$ df –k
→以kilo bytes表示(預設),-m則是以mega bytes表示。

4. du (disk usage):df為針對分割區,du為針對檔案、目錄實際所佔用的block大小。
<note>du指令請以root login,因若為一般user,有些檔案權限會被拒絕,因而所看到的block size會不準確,但若只看自己家目錄便無所謂。
例:$ du –b ( 以bytes ) 為單位
→顯示當前目錄 ( 含子目錄 ) 所佔用的block size,所以也可這樣寫 $ du –b .
$ du /etc
→顯示 etc目錄實際佔用的區塊大小,以kilo tytes為單位。
          $ du –a /etc
→包含檔案都列出。
$ du –s /etc
→display only a total.
$ du –lb若有hard link,會重複計算。
其它參數:-k、-m、-h同df用法。

TOP

三. mount and umount fs
1. Linux的fs與windows的fs不太相同,Windows下,每個分割區都有其磁碟機代號,從c: ~ z:,且各有其獨立的目錄,但在Linux下,所有partation都歸在 / (根目錄)下, / 有其自己的partition,而其它partition則被掛於 /下的目錄或子目錄中,此目錄或子目錄稱為mount-point,而將partition掛入mount point的動作便稱為mount (掛載)。
mount –t <fs-type> -o <options> device mount-point

2. Linux can mount a variety of fs , including
minix ext2 ext3 reiserfs
ntfs vfat msdos iso9660(CD-ROM)
nfs smbfs

3. mount –t <fs-type> -o options device mount-point
-o其後所接選項,有一些選項只有在 /etc/fstab內才有效用。
option:auto → 開機時自動mount ←→ noauto
exec → 讓程式能於掛載的fs上執行 ←→ noexec
suid → 讓可執行程式,能發揮suid及sgid效用 ←→ unsuid
user → 允許一般使用者掛載檔案系統 ←→ nouser
sync → 對mounted fs,建立同步輸入輸出,也就是讓磁碟與記憶體建立同步寫入的動作←→ async
ro → read-only
rw → read-write
dev → 解析fs上的字元裝置or區塊裝置。
         remount → attempt to remount an already-mounted file system.
defaults → rw,auto,nouser,exec,dev,suid,async。

4. # mount -t msdos /dev/fd0 /mnt/floppy
# mount –tr iso9660 /dev/cdrom /mnt/cdrom 等於
# mount –t iso9660 –o ro /dev/cdrom /mnt/cdrom 等於
  # mount –t iso9660 –r /dev/cdrom /mnt/cdrom
→ 上式未加唯讀選項亦可,因 /dev/cdrom or /dev/hdd is write-protected.
# mount –a =>將 /etc/fstab內所列檔案系統掛載起來(有noauto選項除外)。
→ 作試驗時,可先將 /etc/fstab內的檔案系統執行umount (單人模式下),然後再執行 # mount –a,看看能否remount。
# mount -t ext2 -o rw /dev/hda6 /mnt/hda6等於
   # mount –t ext2 –w /dev/hda6 /mnt/hda6
# mount –t ext2 –n /dev/hda6 /mnt/hda6
→ 如此做法,就不會讓 /etc/mtab出現掛載訊息。
 
5. 要umount (卸載)前,須切換目錄至非掛載目錄上,方可順利umount,以上面為例:
# umount /dev/hda6或 # umount /mnt/hda6亦可:
# eject /mnt/hda6直接退出光碟。
在做mount時,若沒用 -t指定fs-type,其實系統也抓得到,如下:
# mount /dev/fd0 /mnt/floppy =>用 # df –T 看看便知。

6. /etc/fstab:紀錄系統啟動時將自動掛載的檔案系統,共分六欄位:
/dev/hda3 /mnt/hda3 ext2 defaults 1 1
device mount-point fs-type options dump check(fsck)
備份程式
<說明><1>dump:備份整個fs,其值分1和0,當選擇1時,表示當磁碟分割區內資料有異動時,先cache在記憶體中,直到緩衝區滿了或系統閒置時,才寫入磁碟裡,其優點為加快系統執行效能,缺點為遇當機或不正常關機時可能會造成資料流失,因此選dump時,一般會配合第六欄位fsck來使用,一般若是Linux fs,其dump皆設為1,others則設0。

<2>check:分0、1、2
1:表開機時先做fsck的fs,因 / 須先於其它分割區,故設為1。
2:非 / 所在的fs要做fsck,則設為2。Ex: /boot
0:不做fsck。
在options中,若設defaults,則系統開機時會自動mount這些device,若是設noauto,如CD-ROM,則須下mount指令,如mount /mnt/cdrom或mount /dev/cdrom 才能將這些裝置掛載上來。
當我們在提示號下執行mount時,若 /etc/fstab中有紀錄,則mount時可mount device或mount-point,但若fstab內無記錄裝置訊息,則此partition(device)須按步就班mount。

當我們檢視 /etc/fstab時,會發現有個device為none,mount-point為 /proc,這是一個虛擬裝置,不存在於實體device上,但其可顯示記憶體內的訊息。
每個process都會在 /proc下的子目錄中,而系統訊息則會顯示於其下的檔案內。
例:root login tty2執行top指令,回tty1 login,接著執行 # ps aux 來查詢top的 PID(設為2367)
# ls /proc =>有個2367目錄。
# cd /proc/2367 然後用ls看其內容有cmdline.status.…
# cat cmdline =>顯示此process command line內容。
# cat status =>顯示程式名稱PID.PPID.UID.GID…

例:# cat /proc/cpuinfo
→檢試cpu廠牌、速度。
# cat /proc/interrupts
→中斷要求(IRQ值)
# cat /proc/ioports
→I/O Address
I/O port為device與cpu或device與memory(DMA存在時不須經cpu,而是直接與記憶體溝通,以加快效率)間溝通的管道。
DMA全名:Direct Memory Access
# cat /proc/meminfo
→記憶體訊息
# cat /proc/mounts
→系統目前已掛載的檔案系統。
# cat /proc/modules
→顯示目前核心已載入的模組,同 # lsmod
# cat /proc/swaps

7. /etc/mtab (mount table) 動態紀錄系統目前已掛載的檔案系統。
it is a listing of mounted fs presently.

8. 查詢系統目前掛載哪些檔案系統的方式:
(1) # cat /proc/mounts
(2) # mount
(3) # mount -l
(4) # cat /etc/mtab

<note> /etc/fstab是開機時自動mount的fs,若開機後手動mount fs, /etc/fstab內並不會顯示。
另外我們在看目前系統已掛載訊息時,以 /proc/mounts的資料最
    準確,因其不受mount –n 的影響。

9. umount:參數-a、-t、-n同mount。

TOP

四. hard link and symbolic link(soft link)
1. Symbolic link: ln –s來源檔 連結檔名
例:$ ln –s /etc/termcap slink =>shink:lrwxrwxrwx
$ ls –li /etc/termcap slink
可看出inode number不同,檔案權限、檔案擁有者及所屬群組不同,檔案大小、檔案修改時間不同。(以自己為主)
若刪除原始檔,則連結檔便無法連結。
當我們建立soft link file後,可用$ du –b . 觀看,發現家目錄所佔用的block size不變(與建立前比較) 。另外soft link可應用於目錄,且可在不同partition或fs上使用。

2. hard link: ln 來源 目的
長格式中的連結數,即是以hard link為主。
hard link file其inode number指向來源檔案的inode number。
例:$ ln /etc/passwd hlink (設 /etc及 /home為同一分割區)
$ ls -li /etc/passwd hlink
很明顯看出hard link file的inode number、檔案權限、檔案擁有者及所屬群組、檔案大小、檔案修改時間等,都與來源檔案相同。
$ du –b =>家目錄所佔block size增加。
$ du –b / =>系統所佔block size不變。
   另可用家目錄下的檔案做hard link來測試:
$ ln file hlink
$ du –b =>家目錄所佔block size不變。
故做hard link時,若link到其它目錄下的file時,hard link file所在目錄其block size會增加,若link本身dir下的file,則不變。
<note>hard link不可應用於目錄,且在不同partition或fs上無法使用。
   另外hard link中,無論來源檔或連結檔,只要還存在一個檔案,此inode number所對應的data block便不會消失,須直到所有檔案刪除後,此空間才釋放出來。

 ˙不論hard link或soft link,當更改link file的內容時,來源file也會跟著改 (但要有適當的權限) ,而在windows下是無法辦到的。
 ˙做link時,未寫出link file名稱,則以來源file之名做為link file之名,但來源與目的不可是同一目錄。
 Ex:$ ln –s /etc/passwd
→用ls看,會有passwd的link file。
$ ln –s /var/spool/mail /home
→ /home下會有mail的link file(目錄)。

五. Managing disk quota (硬碟限額管理)
quota用來對user或group做不同的或相同的使用空間限制,且quota設定,只能針對partition做限制,而無法針對partition下的某個目錄設限。
現在以 /home partition為例,來說明quota的設定:
1. 開啟quota功能:
# vi /etc/fstab
→ 於 /home所在行增加defaults,usrquota,grpquota,然後存檔離開。
2. reboot (RedHat 7.1核心2.2版,在quotacheck後,才reboot)
3. 掃瞄檢視磁碟空間使用情形:
若系統預設有開啟quota,則在執行檢查前需先關閉quota:
# quotaoff –a

   再來才可執行quotacheck:
# quotacheck –guv /home
→ 於 /home下會產生aquota.user及aquota.group這兩個紀錄檔,記載著user與group在 /home下的使用空間情形。
    核心2.4以前為quota.user及quota.group。
<說明>-g:check group於 /home下所佔空間 (檔案數、目錄數)。
-u:check user於 /home下所佔空間 (預設)。
-v:顯示執行過程。
-a:check all file systems in /etc/mtab
˙系統執行quotacheck時,會先將檔案系統 remount成read –only,scan結束後,再remount回read –write。
  ˙若系統已執行quota,則須先執行quotaoff –a。
 ˙若有錯誤訊息,可用-m強迫check。
# quotacheck –guvm /home

4. 建立quota限額
# edquota -u barry (-g group) = # edquota barry
blocks soft hard
4 2000 2500
單位:KBytes
blocks:已經使用的data blocks空間,在此為4kb。
soft:達此限制時,系統會開始提出警告。(搭配grace使用)
hard:最大空間限制,當超過此限制,即無法再儲存data。
<note>執行quotacheck成功的partition,在執行edquota時皆會顯示。
   另外若針對群組做quota,需將加入此group的user,設定group
為其預設群組。
# edquota –up barry mary (-gp group01 group02)
→ 將barry的quota限額,copy一份予mary。-u為預設,可省略。
  另外需注意,quota限額的複製需在同一分割區下。
<註>多user要套用barry的quota的做法,可事先編輯一檔案,設為/tmp/file,然後將使用者放進此檔內,如:
# vi /tmp/file
user01 user02 user03 user04 user05
再執行:
# edquota –up barry `cat /tmp/file`

# edquota –ut = # edquota –t (edquota -gt)
Block grace:10hours(預設7days),Inode grace:0
表示使用者儲存資料超過soft時,便開始計時,在此10hours內,user只要不超過hard限制皆可儲存。一旦超過10hours便無法再存data進去。
Inode grace:0 表示無限制。

5. 啟動quota:
# quotaon –a
→於 /etc/fstab內,有磁碟限額者都啟動。
# quotaon –u /home
→啟動 /home下user的磁碟限額。
 # quotaon –guva

6.檢視磁碟配額:quota, repquota (report quota)
# repquota –a  (= # repquota -ua)
→ /etc/mtab內有quota限額的使用者,檢視其quota限額。
 假設barry在 /home及 /var皆有設quota,則不能同時顯示,須使用:
# quota –u barry才可同時顯示 /home及 /var下的磁碟配額。
# repquota –ga
# repquota -gua
# repquota –u /home (repquota –g /var)
# repquota –uv /home
→ -uv表示檢視有quota限額的user,就算user尚未使用到磁碟空間也
   會顯示出來。
$ quota
→user檢視自己限額及使用情形。

補充:當我們設定群組quota限額時,使用者的gid (預設群組)需為此群組的id,所以要將使用者加入群組時,需用usermod –g,不能用usermod –G或gpasswd –a的方式。
   另外一點,若群組quota剛設定完成,群組中的使用者尚未儲存資料,則執行 # quota –g group時,會發現群組quota無法使用的訊息,當使用者開始儲存資料後就可正式啟用。
另外在執行quotacheck時,若執行過程不順利,可於此之前先:
   # touch aquota.user aquota.group
# ln –s aquota.user quota.user
# ln –s aquota.group quota.group
然後再執行quotacheck。

六. Find system files and place files in the correct location
1. find:依指定條件找尋檔案或目錄。(用ls –li長格式去想)
(1) -inum n (inode number)
# find /usr –inum 160159
→ 找出 /usr目錄下,inode number為160159者。
(2) -type f
# find /etc -type f
→ 找出 /etc目錄下,檔案類型為檔案者。其他較常用的類型有d目錄,b區塊裝置,c字元裝置。
(3) -perm <bits mode> (permission)
# find / -perm 1777
→ 找出根目錄下,權限為1777者。
(4) -uid n
# find / -uid 501
→ 找出檔案或目錄的擁有者的ID為501者。-gid同理。
(5) -user username
# find /home -user barry  ( group同理 )
→ 找出家目錄下的檔案或目錄,其擁有者為barry者。
(6) -size n
# find /etc –size 737535c ( character=byte )
→ /etc下,將大小為737535 bytes的檔案找出。
# find / -size +3k
→ 將大於3×1024 bytes的檔案找出。
1k = 1-1024 bytes
2k = 1025-2048 bytes 餘依此類推
+2k = 2048 bytes ( 不含 ) 以上的檔案大小
-2k = 1025 bytes ( 不含 ) 以下的檔案大小
# find /var –size -2b ( 預設1b = 512bytes )
→ 1b = 1-512 bytes
2b = 513-1024 bytes 餘依此類推
-2b = 513 bytes ( 不含 ) 以下的檔案大小
+2b = 1024 bytes ( 不含 ) 以上的檔案大小
(7) -name <檔案或目錄名稱> ( 可配合wildcard )
# find / -name 「linuxconf」 =>名稱為linuxconf者列出。
# find / -name 「linuxconf*」
# find /var –type d –name 「log」
# find /tmp –type f ∣xarges rm可寫成下式:
# rm `find /tmp –type f`
# find /home /tmp –name 「barr*」
<note>find其後若無接目錄,預設為現在所處的目錄。

2. which:依PATH變數內的路徑依序尋找執行檔。
# echo $PATH
# which ls useradd ping echo

3. locate:使用資料庫檔案來尋找。( /var/lib/slocate/slocate.db←資料庫位置)
slocate:Security Enhanced version of the GNU Locate
# which locate slocate先找出路徑
# ls –l /usr/bin/locate /usr/bin/slocate
→ locate為一soft hard link,link至slocate。
# locate named =>似RE
→ 將檔案及目錄名稱中含有named字串者全列出。
# updatedb =>更新資料庫指令(預設排程每天執行),也可寫成下式:
# slocate -u

TOP

 20 12
發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。