發新話題
打印

Linux 基礎文件

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)

命令與工具

系統軟體

核心(Kernel)

核心模組

電腦硬體與週邊



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各爲一個數位,分別表示UserGroup、及Other的許可權。r=4w=2x=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 bytesw 是二個位元組。-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`


TOP

發新話題