路人 管理員
|
1#
大 中
小 發表於 2006-11-30 14:37 只看該作者
Linux 基礎文件
Linux 的起源
1991 年的十月,有一個名為 Linus Torvalds 的芬蘭赫爾辛基的大學生 (Kernel)
自由軟體基金會
(Free Software Foundation;FSF)是由Richard Stallman(RMF)在1984年所創立,第一個計畫就是GNU(GNU's Not Unix),目的在推動發展開放原始碼的自由軟體
GNU General Public License
GPL 的授權之軟體,乃為自由軟體(Freeware),任何人皆可擁有他。
開發 GPL 的團體(或商業企業)可以經由該軟體的服務來取得服務的費用。
經過 GPL 授權的軟體,其屬於 Open source 的情況,所以應該公布其原始碼。
任何人皆可修改經由 GPL 授權過的軟體,使符合自己的需求。
經過修改過後 Open source 應該回饋給 Linux 社群。
Linux系統架構
應用程式 |
| 命令解譯器(Shell) | 命令與工具 | 系統軟體 |
Linux開機流程
1 載入 BIOS 的硬體資訊
2 BIOS從開機磁碟機的第 0 磁區、第 0 磁柱載入可供開機的磁區, 讀取 MBR
3 自MBR載入Kernel Loader (亦即是 lilo, grub, spfdisk 等等)開機資訊
4 載入 Kernel 的作業系統核心資訊 (/boot/vmlinuz-xxxx)
5 Kernel 執行第一支程式 /sbin/init 並依 /etc/inittab 來決定不同的run-level
0-halt : 關機
1-single user mode : 單人模式
2-Multiuser, with NFS :
3-Full multiuser mode : 文字模式
4-unsed : 目前未指定
5-X11 : X-Windows
6-reboot : 重新開機
6 init執行第一支 script : /etc/rc.d/rc.sysinit
7 啟動核心的外掛式模組 (/etc/modules.conf)
8 init 執行 run-level 的各個批次檔( Scripts )
9 init 執行 /etc/rc.d/rc.local 檔案
10 getty 監測登入要求,登入前顯示/etc/issue檔案內容(telnet顯示issue.net)
11 執行 /bin/login 程式 , 根據輸入核對/etc/passwd, 登入後顯示/etc/motd檔案內容, 並將登入的訊息紀錄寫入/var/run/utmp與/var/log/wtmp
12 登入之後開始以 Shell 控管主機
終端機切換
登入login
登出logout, exit, Ctrl+D
關機halt, poweroff, shutdown -h now
重新啟動reboot, shutdown -r now
Linux file system Hierarchy Standards
·/lib 系統最基本的動態鏈結函式庫
·/home 使用者家目錄
·/usr 安裝的程式,文件,原始碼,字型等較靜態的檔案
o /usr/bin、/usr/sbin 一般使用者常用的程式
o /usr/lib 一般使用者常用的程式所需的動態鏈結函式庫、靜態檔案庫
o /usr/X11R6:X-Window目錄
o /usr/src:Linux原始碼
o /usr/include:系統頭檔
·/dev 裝置設備檔目錄(device)
·/etc 系統組態設定檔,包含應用程式設定,網路組態設定等
·/boot 開機相關檔案與核心,包括了開機管理程式的設定檔,核心檔案:vmlinuz
·/bin 一般使用者執行程式(binary)
·/sbin 系統管理員執行程式(binary)
·/var 紀錄,spool佇列,mailbox,網頁,FTP
·/proc 為一虛擬目錄,是記憶體的映射,放置核心網路,行程資訊狀態
·/mnt 固定裝置掛載點,一般是空的,用來臨時掛載別的檔系統
·/media 移動裝置掛載點
·/tmp 暫存目錄,可供所有使用者讀寫之用,系統將不定期清除之
·/root 管理者家目錄
指令教學
名稱:cat使用權限:所有使用者使用方式:cat [-AbeEnstTuv] [help] [version] fileName 說明:把檔案串連接後傳到基本輸出(螢幕或加 > fileName 到另一個檔案)參數:-n 或 number 由 1 開始對所有輸出的行數編號-b 或 number-nonblank 和 -n 相似,只不過對於空白行不編號-s 或 squeeze-blank 當遇到有連續兩行以上的空白行,就代換爲一行的空白行-v 或 show-nonprinting 範例:cat -n textfile1 > textfile2 把 textfile1 的檔案內容加上行號後輸入 textfile2 這個檔案裏cat -b textfile1 textfile2 >> textfile3 把 textfile1 和 textfile2 的檔案內容加上行號(空白行不加)之後將內容附加到 textfile3 名稱 : cd使用權限 : 所有使用者使用方式 : cd [dirName] 說明 : 變換工作目錄至 dirName。其中 dirName 表示法可爲絕對路徑或相對路徑。若目錄名稱省略,則變換至使用者的 home directory (也就是剛 login 時所在的目錄)。另外,"~" 也表示爲 home directory 的意思,"." 則是表示目前所在的目錄,".." 則表示目前目錄位置的上一層目錄。範例 : 跳到 /usr/bin/ : cd /usr/bin 跳到自己的 home directory : cd ~ 跳到目前目錄的上上兩層 : cd ../..
. | 表示目前所在目錄
| .. | 表示上一層目錄
| ~ | 表示目前使用者家目錄
| cd
| ~user | 表示指定user的使用者家目錄
| / | 根目錄
| 亦可表示絕對路徑:以 / 開始表示連續的階層目錄
| 指令名稱 : chmod使用權限 : 所有使用者使用方式 : chmod [-cfvR] [help] [version] mode file... 說明 : Linux/Unix 的檔案存取許可權分爲三級 : 檔案擁有者、群組、其他。利用 chmod 可以藉以控制檔案如何被他人所存取。把計 : mode : 許可權設定字串,格式如下 : [ugoa...][[+-=][rwxX]...][,...],其中u 表示該檔案的擁有者,g 表示與該檔案的擁有者屬於同一個群體(group)者,o 表示其他以外的人,a 表示這三者皆是。+ 表示增加許可權、- 表示取消許可權、= 表示唯一設定許可權。r 表示可讀取,w 表示可寫入,x 表示可執行,X 表示只有當該檔案是個子目錄或者該檔案已經被設定過爲可執行。-c : 若該檔案許可權確實已經更改,才顯示其更改動作-f : 若該檔案許可權無法被更改也不要顯示錯誤訊息-v : 顯示許可權變更的詳細資料-R : 對目前目錄下的所有檔案與子目錄進行相同的許可權變更(即以遞回的方式逐個變更) help : 顯示輔助說明version : 顯示版本範例 :將檔案 file1.txt 設爲所有人皆可讀取 : chmod ugo+r file1.txt 將檔案 file1.txt 設爲所有人皆可讀取 : chmod a+r file1.txt 將檔案 file1.txt 與 file2.txt 設爲該檔案擁有者,與其所屬同一個群體者可寫入,但其他以外的人則不可寫入 : chmod ug+w,o-w file1.txt file2.txt 將 ex1.py 設定爲只有該檔案擁有者可以執行 : chmod u+x ex1.py 將目前目錄下的所有檔案與子目錄皆設爲任何人可讀取 : chmod -R a+r * 此外chmod也可以用數位來表示許可權如 chmod 777 file 語法爲:chmod abc file 其中a,b,c各爲一個數位,分別表示User、Group、及Other的許可權。r=4,w=2,x=1 若要rwx屬性則4+2+1=7;若要rw-屬性則4+2=6;若要r-x屬性則4+1=7。範例:chmod a=rwx file 和chmod 777 file 效果相同chmod ug=rwx,o=x file 和chmod 771 file 效果相同若用chmod 4755 filename可使此程式具有root的許可權指令名稱 : chown使用權限 : root 使用方式 : chmod [-cfhvR] [help] [version] user[:group] file... 說明 : Linux/Unix 是多人多工作業系統,所有的檔案皆有擁有者。利用 chown 可以將檔案的擁有者加以改變。一般來說,這個指令只有是由系統管理者(root)所使用,一般使用者沒有許可權可以改變別人的檔案擁有者,也沒有許可權可以自己的檔案擁有者改設爲別人。只有系統管理者(root)才有這樣的許可權。把計 : user : 新的檔案擁有者的使用者 IDgroup : 新的檔案擁有者的使用者群體(group)-c : 若該檔案擁有者確實已經更改,才顯示其更改動作-f : 若該檔案擁有者無法被更改也不要顯示錯誤訊息-h : 只對於連結(link)進行變更,而非該 link 真正指向的檔案-v : 顯示擁有者變更的詳細資料-R : 對目前目錄下的所有檔案與子目錄進行相同的擁有者變更(即以遞回的方式逐個變更)help : 顯示輔助說明version : 顯示版本範例 : 將檔案 file1.txt 的擁有者設爲 users 群體的使用者 jessie : chown jessie:users file1.txt 將目前目錄下的所有檔案與子目錄的擁有者皆設爲 users 群體的使用者 lamport : chmod -R lamport:users * 名稱:cp使用權限:所有使用者使用方式:cp [options] source dest cp [options] source... directory 說明:將一個檔案拷貝至另一檔案,或將數個檔案拷貝至另一目錄。-a 盡可能將檔案狀態、許可權等資料都照原狀予以複製。-r 若 source 中含有目錄名,則將目錄下之檔案亦皆依序拷貝至目的地。-f 若目的地已經有相同檔名的檔案存在,則在複製前先予以刪除再行複製。
-s建立軟性連結
範例:將檔案 aaa 複製(已存在),並命名爲 bbb : cp aaa bbb 將所有的C語言程式拷貝至 Finished 子目錄中 : cp *.c Finished 名稱 : find用法 : find 使用說明 : 將檔案系統內符合 expression 的檔案列出來。你可以指要檔案的名稱、類別、時間、大小、許可權等不同資訊的組合,只有完全相符的才會被列出來。find 根據下列規則判斷 path 和 expression,在命令列上第一個 - ( ) , ! 之前的部份爲 path,之後的是 expression。如果 path 是空字串則使用目前路徑,如果 expression 是空字串則使用 -print 爲預設 expressionexpression 中可使用的選項有二三十個之多,在此只介紹最常用的部份。-mount, -xdev : 只檢查和指定目錄在同一個檔案系統下的檔案,避免列出其他檔案系統中的檔案-amin n : 在過去 n 分鐘內被讀取過-anewer file : 比檔案 file 更晚被讀取過的檔案-atime n : 在過去 n 天過讀取過的檔案-cmin n : 在過去 n 分鐘內被修改過-cnewer file :比檔案 file 更新的檔案-ctime n : 在過去 n 天過修改過的檔案-empty : 空的檔案-gid n or -group name : gid 是 n 或是 group 名稱是 name -ipath p, -path p : 路徑名稱符合 p 的檔案,ipath 會忽略大小寫-name name, -iname name : 檔案名稱符合 name 的檔案。iname 會忽略大小寫-size n : 檔案大小是 n 單位,b 代表 512 位元組的區塊,c 表示字元數,k 表示 kilo bytes,w 是二個位元組。-type c : 檔案類型是 c 的檔案。d: 目錄c: 字型裝置檔案b: 區塊裝置檔案p: 具名貯列f: 一般檔案l: 符號連結s: socket -pid n : process id 是 n 的檔案你可以使用 ( ) 將運算式分隔,並使用下列運算。exp1 -and exp2 ! expr -not expr exp1 -or exp2 exp1, exp2 範例: 將目前目錄及其子目錄下所有延伸檔名是 c 的檔案列出來。# find . -name "*.c" 將目前目錄其其下子目錄中所有一般檔案列出# find . -ftype f 將目前目錄及其子目錄下所有最近 20 分鐘內更新過的檔案列出# find . -ctime -20 名稱:less 使用權限:所有使用者使用方式:less [Option] filename 說明:less 的作用與 more 十分相似,都可以用來瀏覽文字檔案的內容,不同的是 less 允許使用者往回卷動以瀏覽已經看過的部份,同時因爲 less 並未在一開始就讀入整個檔案,因此在遇上大型檔案的開啓時,會比一般的文書編輯器(如 vi)來的快速。範例:指令名稱 : ln 使用權限 : 所有使用者使用方式 : ln [options] source dist,其中 option 的格式爲 : [-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}] [help] [version] [] 說明 : Linux/Unix 檔案系統中,有所謂的連結(link),我們可以將其視爲檔案的別名,而連結又可分爲兩種 : 硬連結(hard link)與軟連結(symbolic link),硬連結的意思是一個檔案可以有多個名稱,而軟連結的方式則是産生一個特殊的檔案,該檔案的內容是指向另一個檔案的位置。硬連結是存在同一個檔案系統中,而軟連結卻可以跨越不同的檔案系統。ln source dist 是産生一個連結(dist)到 source,至於使用硬連結或軟鏈結則由參數決定。不論是硬連結或軟鏈結都不會將原本的檔案複製一份,只會佔用非常少量的磁碟空間。-f : 鏈結時先將與 dist 同檔名的檔案刪除-d : 允許系統管理者硬鏈結自己的目錄-i : 在刪除與 dist 同檔名的檔案時先進行詢問-n : 在進行軟連結時,將 dist 視爲一般的檔案-s : 進行軟鏈結(symbolic link)-v : 在連結之前顯示其檔名-b : 將在鏈結時會被覆寫或刪除的檔案進行備份-S SUFFIX : 將備份的檔案都加上 SUFFIX 的字尾-V METHOD : 指定備份的方式help : 顯示輔助說明version : 顯示版本範例 : 將檔案 yy 産生一個 symbolic link : zz ln -s yy zz 將檔案 yy 産生一個 hard link : zz ln yy xx 名稱:locate 使用權限:所有使用者使用方式: locate [-q] [-d ] [database=] locate [-r ] [regexp=] locate [-qv] [-o ] [output=] locate [-e ] [-f ] <[-l ] [-c] <[-U ] [-u]> locate [-Vh] [version] [help] 說明:locate 讓使用者可以很快速的搜尋檔案系統內是否有指定的檔案。其方法是先建立一個包括系統內所有檔案名稱及路徑的資料庫,之後當尋找時就只需查詢這個資料庫,而不必實際深入檔案系統之中了。在一般的 distribution 之中,資料庫的建立都被放在 contab 中自動執行。一般使用者在使用時只要用# locate your_file_name 的型式就可以了。參數:-u -U 建立資料庫,-u 會由根目錄開始,-U 則可以指定開始的位置。-e 將排除在尋找的範圍之外。-l 如果是 1.則啓動安全模式。在安全模式下,使用者不會看到許可權無法看到的檔案。這會始速度減慢,因爲 locate 必須至實際的檔案系統中取得檔案的許可權資料。-f 將特定的檔案系統排除在外,例如我們沒有到理要把 proc 檔案系統中的檔案放在資料庫中。-q 安靜模式,不會顯示任何錯誤訊息。-n 至多顯示個輸出。-r 使用正規運算式做尋找的條件。-o 指定資料庫存的名稱。-d 指定資料庫的路徑-h 顯示輔助訊息-v 顯示更多的訊息-V 顯示程式的版本訊息範例:locate chdrv : 尋找所有叫 chdrv 的檔案locate -n 100 a.out : 尋找所有叫 a.out 的檔案,但最多只顯示 100 個locate -u : 建立資料庫名稱 : ls 使用權限 : 所有使用者使用方式 : ls [-alrtAFR] [name...] 說明 : 顯示指定工作目錄下之內容(列出目前工作目錄所含之檔案及子目錄)。-a 顯示所有檔案及目錄 (ls內定將檔案名或目錄名稱開頭爲"."的視爲隱藏檔,不會列出) -l 除檔案名稱外,亦將檔案型態、許可權、擁有者、檔案大小等資訊詳細列出-r 將檔案以相反次序顯示(原定依英文字母次序) -t 將檔案依建立時間之先後次序列出-A 同 -a ,但不列出 "." (目前目錄) 及 ".." (父目錄) -F 在列出的檔案名稱後加一符號;例如可執行檔則加 "*", 目錄則加 "/" -R 若目錄下有檔案,則以下之檔案亦皆依序列出範例:列出目前工作目錄下所有名稱是 s 開頭的檔案,愈新的排愈後面 : ls -ltr s* 將 /bin 目錄以下所有目錄及檔案詳細資料列出 : ls -lR /bin 列出目前工作目錄下所有檔案及目錄;目錄於名稱後加 "/", 可執行檔於名稱後加 "*" : ls -AF 名稱:more使用權限:所有使用者使用方式:more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..] 說明:類似 cat ,不過會以一頁一頁的顯示方便使用者逐頁閱讀,而最基本的指令就是按空白鍵(space)就往下一頁顯示,按 b 鍵就會往回(back)一頁顯示,而且還有搜尋字串的功能(與 vi 相似),使用中的說明文件,請按 h 。參數:-num 一次顯示的行數-d 提示使用者,在畫面下方顯示 [Press space to continue, q to quit.] ,如果使用者按錯鍵,則會顯示 [Press h for instructions.] 而不是嗶聲-l 取消遇見特殊字元 ^L(送紙字元)時會暫停的功能-f 計算行數時,以實際上的行數,而非自動換行過後的行數(有些單行字數太長的會被擴展爲兩行或兩行以上)-p 不以卷動的方式顯示每一頁,而是先清除螢幕後再顯示內容-c 跟 -p 相似,不同的是先顯示內容再清除其他舊資料-s 當遇到有連續兩行以上的空白行,就代換爲一行的空白行-u 不顯示下引號(根據環境變數 TERM 指定的 terminal 而有所不同)+/ 在每個檔案顯示前搜尋該字串(pattern),然後從該字串之後開始顯示+num 從第 num 行開始顯示fileNames 欲顯示內容的檔案,可爲複數個數範例:more -s testfile 逐頁顯示 testfile 之檔案內容,如有連續兩行以上空白行則以一行空白行顯示。more +20 testfile 從第 20 行開始顯示 testfile 之檔案內容。名稱:mv使用權限:所有使用者使用方式:mv [options] source dest mv [options] source... directory 說明:將一個檔案移至另一檔案,或將數個檔案移至另一目錄。參數:-i 若目的地已有同名檔案,則先詢問是否覆蓋舊檔。範例:將檔案 aaa 更名爲 bbb : mv aaa bbb 將所有的C語言程式移至 Finished 子目錄中 : mv -i *.c 名稱:rm使用權限:所有使用者使用方式:rm [options] name... 說明:刪除檔案及目錄。把計-i 刪除前逐一詢問確認。-f 即使原檔案屬性設爲唯讀,亦直接刪除,無需逐一確認。-r 將目錄及以下之檔案亦逐一刪除。範例:刪除所有C語言程式檔;刪除前逐一詢問確認 : rm -i *.c 將 Finished 子目錄及子目錄中所有檔案刪除 : rm -r Finished 名稱:rmdir 使用權限:於目前目錄有適當許可權的所有使用者使用方式: rmdir [-p] dirName 說明:刪除空的目錄。參數: -p 是當子目錄被刪除後使它也成爲空目錄的話,則順便一併刪除。範例:將工作目錄下,名爲 AAA 的子目錄刪除 : rmdir AAA 在工作目錄下的 BBB 目錄中,刪除名爲 Test 的子目錄。若 Test 刪除後,BBB 目錄成爲空目錄,則 BBB 亦予刪除。rmdir -p BBB/Test 名稱:touch 使用權限:所有使用者使用方式:touch [-acfm] [-r reference-file] [file=reference-file] [-t MMDDhhmm[[CC]YY][.ss]] [-d time] [date=time] [time={atime,access,use,mtime,modify}] [no-create] [help] [version] file1 [file2 ...] 說明:touch 指令改變檔案的時間記錄。 ls -l 可以顯示檔案的時間記錄。參數:a 改變檔案的讀取時間記錄。m 改變檔案的修改時間記錄。c 假如目的檔案不存在,不會建立新的檔案。與 no-create 的效果一樣。f 不使用,是爲了與其他 unix 系統的相容性而保留。r 使用參考檔的時間記錄,與 file 的效果一樣。d 設定時間與日期,可以使用各種不同的格式。t 設定檔案的時間記錄,格式與 date 指令相同。no-create 不會建立新檔案。help 列出指令格式。version 列出版本訊息。範例:最簡單的使用方式,將檔案的時候記錄改爲現在的時間。若檔案不存在,系統會建立一個新的檔案。touch file touch file1 file2 將 file 的時間記錄改爲 5 月 6 日 18 點 3 分,西元兩千年。時間的格式可以參考 date 指令,至少需輸入 MMDDHHmm ,就是月日時與分。touch -c -t 05061803 file touch -c -t 050618032000 file 將 file 的時間記錄改變成與 referencefile 一樣。touch -r referencefile file 將 file 的時間記錄改成 5 月 6 日 18 點 3 分,西元兩千年。時間可以使用 am, pm 或是 24 小時的格式,日期可以使用其他格式如 6 May 2000 。touch -d "6:03pm" file touch -d "05/06/2000" file touch -d "6:03pm 05/06/2000" file
fdisk 基本指令fdisk device 例如:fdisk /dev/hda
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition (刪除磁區)
l list known partition types (列出已知的格式)
m print this menu (顯示目錄)
n add a new partition (新增一個磁區)
o create a new empty DOS partition table (新增一個DOS磁區)
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id (交換磁區系統代碼)
u change display/entry units
v verify the partition table
w write table to disk and exit (寫入並離開)
x extra functionality (experts only)
命令 | 意義 | 常用參數 | 範例 | compress | 壓縮檔案為.Z //僅能壓縮單一檔案
| -d:解壓縮
-b n:壓縮比例 0~16
| compress man.config
compress -d man.config.Z
| uncompress | 解壓縮.Z的檔案
|
| uncompress man.config.Z
| bzip2 | 壓縮檔案為.bz2 //僅能壓縮單一檔案
| -d:解壓縮
-z:壓縮
-#:壓縮等級(1~9)
-k:不刪除原檔案
| bzip2 -z man.config
bzip2 -d man.config.bz2
| bunzip2 | 解壓縮.bz2的檔案
| -v:顯示進度
-k:保留原壓縮檔
| bunzip2 man.config.bz2
| bzcat | 無須解壓縮.bz2便能cat其內容
|
| bzcat man.config.bz2
| gzip | 壓縮檔案為.gz//僅能壓縮單一檔案
| -d:解壓縮
-#:壓縮等級(1~9)
-r:包含子目錄
| gzip man.config
gzip -d man.config.gz
gzip -9 man.config //9為最大壓縮比
| gunzip | 解壓縮.gz的檔案
| -r:包含子目錄
| gunzip man.config.gz
| zcat | 無須解壓縮.gz與.Z便能cat其內容
|
| zcat man.config.gz
| zip | 壓縮檔案為.zip
| -r:包含子目錄
| zip man.config
| unzip | 解壓縮.zip的檔案
|
| unzip man.config.zip
| tar | 打包程式(已整合gzip功能)
| -c:壓縮
-z:呼叫gzip功能
-x:解壓縮
-v:顯示過程
-f: 使用檔名
-u:更新壓縮檔內容
-r:再增加至壓縮檔
-t:列出
| tar -cvf dir.tar /home/test/*
tar -xvf dir.tar
tar -zcvf /tmp/etc.tgz /etc
tar -zcvf /dev/st0 /
tar -zxvf dir.tar.gz
tar -rf dir.tar mydoc.txt
tar -uf dir.tar .bashrc
| RPM (RedHat Package Manager)
·RPM為RedHat所研發出來的套件管理程式,目前使用的distriution有Mandrake, Suse等
·需以root身份方可執行
q 套件名
| 查詢已安裝套件的安裝版本
| rpm -ql python
| -ql 套件名
| 查詢已安裝套件中包含了哪些檔案
| rpm -ql python
| -qpl rpm檔名
| 查詢未安裝套件中包含了哪些檔案
| rpm -qpl netwatch-0.9d-1.i386.rpm
| -qi 套件名
| 查詢已安裝套件的詳細資訊
| rpm -qi xcin
| -qpi rpm檔名
| 查詢未安裝套件的詳細資訊
| rpm -qpi xcin-2.5.2pre5-3.i386.rpm
| -qa
| 列出所有已安裝套件的名稱
| rpm -qa
| -qf 一般檔名
| 查詢現有檔案屬於哪一個套件
| rpm -qf /usr/sbin/lpd
rpm -qf `which startx`
|
|