本網頁以打造無障礙閱讀為目標,可以用任何瀏覽器來觀看本網頁
1991 年的十月,有一個名為 Linus Torvalds 的芬蘭赫爾辛基的大學生在comp.os.minix 這個新聞群組上發表了這樣一封內容不怎麼起眼的 POST:
Hello everybody out there using minix -
I'm doing a (free) operation system
(just a hobby, won't be big and professional like gnu)
for 386(486) AT clones.
這個 Linus 的興趣(hobby)就是 Linux 核心程式 0.02 版的原始碼,當初還是個大學生的 Linus 大概完全沒想到當初被他視為個人興趣的程式,在幾年以後會有超過億萬個使用者,由他自己帶頭開發的作業系統現在已經在世界各地受到普遍的歡迎。
不同於比爾蓋茲寫程式賺錢,Torvalds寫Linux的原始動機,是為了興趣和分享。Linux 是一套 Unix-like 的作業系統,是 Unix 的一種,支援多人多工的作業系統,它控制整個系統基本服務的核心程式 (kernel) 是由 Linus 帶頭開發出來的,「Linux」 這個名稱便是以「Linus's Minix」來命名。
Linux是依IEEE Std 1003.1-1900 (POSIX.1)及IEEE 1003.2 (POSIX.2) 的標準所設計的,除此之外,Linux也包合了許多其它UNIX 系統標準的特色,例如SVID (System V Interface Document) 以及BSD (Berkeley Software Distribution) 的UNIX。
Linus 選擇用「大眾公有版權」 (GPL,General Public License)的方式來發行這份程式,這個版權允許任何人以任何形式複製與散佈 Linux 的原始程式,正因為此,所以,Linux 實際上是「免費的」,使用者在網路上就可以抓到 Linux 的原始程式碼,隨心所欲的複製與更改 Linux 的原始程式,在網際網路的日漸盛行以及 Linux 開放自由的版權之下,吸引了無數電腦高手投入開發、改善 Linux 的核心程式,使得 Linux 的功能日見強大,所以今日我們可以在網路上免費下載 Linux 使用,或者花很少費用就可以取得 Linux 光碟, 這都是因為 Linux 是 GPL 版權的緣故。
Linux的吉祥物為一隻企鵝(Tux),是因為 Linus Torvalds在逛澳洲動物園時被一隻小企鵝咬到,所以印象特別深刻喔。
自由軟體基金會(Free Software Foundation;FSF)是由Richard Stallman(RMF)在1984年所創立,第一個計畫就是GNU(GNU's Not Unix),目的在推動發展開放原始碼的自由軟體。網址:http://www.fsf.org
長久以來GNU在GPL的授權下發展了一堆open的工具,如 Emacs, GCC, 標準的C函式庫等,但是最重要的核心卻一直難產,直到Linux Torvalds發展了Linux這個Unix Like的核心。因此我們應該稱為GNU/Linux 。
|
使用者 |
|
應用程式 |
命令解譯器(Shell) |
命令與工具 |
|
|
系統軟體 |
|
核心(Kernel) |
核心模組 |
|
電腦硬體與週邊 |
|
|
||
|
|||
|
Linux擁有優異的資源管理與記憶體管理,使用Preemptive Multitasking的行程管理 ,避免特定的行程強佔資源不放,記憶體保護方面分為使用者空間(user space)與核心空間(kernel space),程序的錯誤不會影響到核心的運作
常見的版本有 Ubuntu, Mandriva , Fedora , Debian , SuSE , Slackware , Gentoo , Knoppix等,Linux所有的套件種 類可參考DistroWatch , 若你無法抉擇使用哪一種套件,不妨利用 Linux Distribution Chooser為你決定。
一般3鍵滑鼠可選 MS intelliMouse
| Master | Slave | |
|---|---|---|
| IDE 1 |
/dev/hda |
/dev/hdb |
| IDE 2 |
/dev/hdc |
/dev/hdd |
| 步驟 | 讀取檔案 | 寫入檔案 |
|---|---|---|
| 載入 BIOS | ||
| 讀取MBR | ||
| 載入Boot Loader(LILO / GRUB) | ||
| 載入核心 | /boot/vmlinuz-xxxx | |
| 核心執行/sbin/init並由 /etc/inittab 取得系統登入狀態 | /etc/inittab | |
| init執行第一支 script : /etc/rc.d/rc.sysinit | ||
| 啟動核心的外掛式模組 | /etc/modules.conf | |
| init 執行 run-level 的各個 scripts | ||
| init 執行 /etc/rc.d/rc.local | ||
| getty 監測登入 | /etc/issue, /etc/issue.net | |
| 登入程式 /bin/login | /etc/passwd , /etc/motd | /var/run/utmp, /var/log/wtmp |
| shell程式接管/bin/bash |
一般的Linux套件皆預設提供了6個文字介面的終端機可供使用(tty1-6),可利用按鍵Alt+F1~Alt+F6, 若載入Xwindow後則增加Alt+F7用以切換,但在 Xwindow下切換至文字介面的終端機則還要加上Ctrl。
| 登入 | login |
|---|---|
| 登出 | logout, exit, Ctrl+D |
| 關機 | halt, poweroff, shutdown -h now |
| 重新啟動 | reboot, shutdown -r now |
|
線上手冊(man pages) 手冊位置:/usr/share/man/ |
man [分類號碼] [選項][指令名稱] |
1.使用者指令 8.系統調整指令 2.系統呼叫 3.函式呼叫 4.裝置 5.檔案格式 6.遊戲 7.其它 9.核心內部 |
|---|---|---|
| GNU製作的線上文件(infomation) | info [指令名稱] | 一般而言,GNU本身的工具會較完整 |
| 查看相關的man pages中,包含指定關鍵字的文件 | apropos 關鍵字 | 與 man -k 相同 ,需先makewhatis |
| 查看相關的man pages中,指令的分類 | whatis 指令名稱 | |
| 查看指令的位置與相關的man pages | whereis 指令名稱 | |
| 一般指令的選項(--help) | ls --help cat --help |
選項名稱大於1個字元者要加2個- |
| Linux本身提供之技術文件 | /usr/share/doc/ |
|
| 網路資源 | Mailing List郵件論壇 News Groups新聞論壇 |
LDP, Linux Online, Slashdot, CLDP , BBS |
| /dev/sda6 | /mnt/hdd | vfat | iocharset=cp950 | 0 | 0 |
若選擇將硬碟格式化為ext3格式之後,硬碟會分為4個部分
語法:fdisk /dev/hd[a-d]
範例:fdisk /dev/hdc
| p | 看現有partition | l | 看partition system ID |
|---|---|---|---|
| n | 新增分割區 | d | 刪除分割區 |
| t | 設定分割區的system id | a | 設定分割區為可開機 |
| w | 儲存分割的結果並離開 | q | 不儲存分割的結果直接離開 |
| FAT12 | 1 | FAT16<=32M | 4 |
| FAT16>32M | 6 | FAT32 | b |
| FAT32(LBA) | c | FAT(LBA) | e |
| NTFS/HPFS | 7 | Extended | 5 |
| Linux swap | 82 | Linux native | 83 |
語法:mkfs -t ext3 /dev/hd[a-d] [1-*]
範例:mkfs -t ext3 /dev/hda5
Linux檔案系統採用階層式(或稱樹狀式)的目錄架構存放與管理檔案,結構的最上層為root以「/」來表示,其下有子目錄如 「/etc」「/boot」「/usr」等,不同的儲存裝置都視為檔案,掛(mount)在同一個目錄樹下,與Windows中不同的儲存裝置都有一個獨 立的目錄樹相當的不同。Linux子目錄的名稱可以隨意建立,但有些目錄的存在是有特殊功能或某些目錄的存在是慣例了的緣故,因此不可隨意更改其名稱,但 除了那些為人所知的目錄之外,存放檔案是否有一套標準呢?為避免不同的套件發展後,在檔案系統的命名與習慣不統一,造成使用Linux的門檻,的確有一套 名為FHS的標準,目前最新的版本為2.3,網址為http://www.pathname.com/fhs/
|
. |
表示目前所在目錄 | |
|---|---|---|
|
.. |
表示上一層目錄 | |
|
~ |
表示目前使用者家目錄 | cd |
|
~user |
表示指定user的使用者家目錄 | |
| / | 根目錄 | 亦可表示絕對路徑:以 / 開始表示連續的階層目錄 |
| 命令 |
意義 |
常用參數 | 範例 |
|---|---|---|---|
| ls | 列出目錄內容(list) | -l, -a ,-lu | ls -la |
| pwd | 顯示目前工作目錄(print working directory) | pwd | |
| cd | 切換目錄(change directory) | .., -, ~, / | cd ~ |
| mkdir | 建立目錄(make directory) | -p | mkdir test |
| rmdir | 刪除目錄(remove directory) | rmdir test | |
| touch 檔案 | 建立檔案 | touch aaa | |
| cp 來源檔[1.. *] 目的檔 | 複製檔案(copy) | -a, -R | |
| rm 檔案[1.. *] | 刪除檔案(remove) | -i, -r ,-f | rm -rf test |
| mv 來源檔[1.. *] 目的檔 | 搬移/更改檔案或目錄(move) | -b | |
| cat 檔案[1.. *] | 連接/顯示檔案( catenate ) | -n 或 --number 由 1 開始對所有輸出的行數編號 | |
| tac 檔案[1.. *] | 將檔案內容由最後一行往前顯示 | ||
| less 檔案 | 分頁顯示檔案 | ||
| more 檔案 | 分頁顯示檔案(頁尾自動跳離) | ||
| file | 檢查檔案的格式 | -z:檢查壓縮檔內的檔案的格式 | file /etc/passwd |
Linux/Unix檔案系統中,為了節省硬碟空間資源或便於系統規劃考量,出現了所謂的連結(link)的想法,我們可以將其視為檔 案的別名,而連結又可分為兩種:硬連結(hard link)與符號連結(symbolic link)或稱軟連結(soft link)
ln [選項] 原始來源檔 目的連結檔
這種連結必須在同一個檔案系統下進行,允許對"檔案"做連結,但"目錄"則不適用。檔案只佔用一個 inode,因此實際資料只有一份。任何有權限設定連結的人,允許對這個檔案另外取新的檔名;但所有可以讀寫的人,存取的都是相同的一份檔案。
這種連結的刪除跟一般檔案相同,由於多人多工的作業系統檔案有使用權限的觀念。所以一個使用者如果胡亂開放檔案的使用權限,就有可能會發生下面的狀況:原檔的擁有者 在刪除檔案後,其實檔案還存在於系統的另一角落。這種連結檔案要真正消失,必須得等到 inode 真的被刪除才算數。也因此,有時系統管理者在刪除使用者帳戶後,檔案系統裡仍舊遺留有該使用者 id 的孤兒檔案。
Redhat系列的eth0設定檔位置在 /etc/sysconfig/network-scripts/ifcfg-eth0,這個檔案就是很典型的Hard Link
#ls -i /etc/sysconfig/network-scripts/ifcfg-eth0
8257547 ifcfg-eth0
#find /etc -inum 8257547
/etc/sysconfig/networking/devices/ifcfg-eth0
/etc/sysconfig/networking/profiles/default/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth0
不能連結目錄與不同跨檔案系統的限制,稍後被克服了,這種連結被稱為符號連結(symbolic link)或軟連結(soft
link) 。每個連結的檔案或目錄,有自己的
inode,但沒有資料。只有原檔案才是真正擁有資料的實體。也因此,當原檔案被原擁有者刪除後,其他僅只是連結的
inode,就無法正確地找到資料了。
基本上,ln 指令以硬連結為預設值;要做符號連結必須使用 -s 選項。
| 命令 |
意義 |
常用參數 | 範例 |
|---|---|---|---|
| diff 檔案1 檔案2 | 進行二檔之比對:顯示差異處 | ||
| comm 檔案1 檔案2 |
進行二檔之比對:相同與差異處皆顯示 相同的行:顯示時會被加上有兩個Tab 不同的行:沒有Tab的是左邊檔案,一個Tab的是右邊檔案的內容 |
-1: 不顯示左邊檔案的內容 -2: 不顯示右邊檔案的內容 -3:不顯示比對相符的內容 |
|
| cmp 檔案1 檔案2 | 進行二檔之字元比對 | ||
| sum 檔案1 檔案2 | 對檔案的檢查碼作檢查顯示 |
|
命令 |
意義 | 常用參數 | 範例 |
|---|---|---|---|
| find 起始目錄 依條件搜尋 | 實際搜尋硬碟去查詢檔案名稱 | ||
| locate 檔案 | 配合資料庫察看檔案位置 | updatedb | |
| which 檔案 | 搜尋執行檔 | 根據path | which bash |
| whereis 檔案 | 查看檔案的位置 |
|
命令 |
意義 | 常用參數 | 範例 |
|---|---|---|---|
| df | 查看FileSystem的使用狀況 | -h | |
| du | 查看指定目錄的使用狀況 | -h -s | |
| fuser | 察看檔案系統 | -a | fuser -a /dev/sda |
| drwx------ | 8 | root | root | 4096 | Oct 20 04:22 | ./ |
| drwxr-xr-x | 20 | root | root | 4096 | Oct 19 13:04 | ../ |
| 檔案屬性 | 連結數 | 擁有者 | 所屬群組 | 檔案容量 | 修改時間 | 檔案名稱 |
| d | 目錄(directory) | - | 檔案(regular file ) |
|---|---|---|---|
| l | 連結檔(symbolic link file ) | b | 區塊裝置(block device file) |
| c | 字元裝置(charcter device file) | s | socket檔(socket file) |
| p | 管線檔(pipe file) |
|
命令 |
意義 | 常用參數 | 範例 |
|---|---|---|---|
| 數字型:chmod
755 檔案/目錄 文字型:chmod u=rwx,g+wx,o-x 檔案/目錄 |
改變檔案的rwx權限 | -R:含子目錄 | |
| chown
帳號名稱 檔案/目錄 chown 帳號名稱:群組名稱 檔案/目錄 |
改變檔案擁有者 (change owner) |
/etc/passwd中需有定義的使用者 -R:含子目錄 |
|
| chgrp 群組名稱 檔案/目錄 |
改變檔案所屬群組 (change group) |
/etc/group中需有定義群組名稱 | |
| umask 002
可用touch與mkdir映證 |
顯示或更改預設屬性 | 建立檔案時:666-002 建立目錄時:777-002 一般user預設遮罩:002 root預設遮罩:022 |
|
|
chattr [+-=] [ASacdistu] 檔案/目錄 有許多屬性需要root的權限才可設定 |
改變檔案特殊屬性 |
A:設定存取時間不可修改 |
|
| lsattr [-aR] | 顯示檔案特殊屬性 | a:全部檔案,含隱藏檔 R:含子目錄 |
ps:以root身份拷貝完檔案後,別忘了可能需要change owner喔
ls -l /usr/bin/passwd /etc/shadow
-r-s--x--x 1 root root 13476 Aug 7 2001 /usr/bin/passwd
-rw------- 1 root root 2423 Jun 25 14:29 /etc/shadow
suid:請看 /usr/bin/passwd 在使用者執行權限處出現了「s」 ,表示執行此程式之人自動取得檔案擁有者的權限
sgid:若在群組執行權限處出現「s」 ,代表執行此程式之人自動取得此檔案所屬群組的權限
ls -l /
drwxrwxrwt 2 root root 4096 Jul 18 13:08 tmp
在tmp目錄的其它使用者執行權限處出現了「t」,代表設定了sticky bit ,在此目錄中,只有檔案擁有者與root才有權力刪除檔案,可避免在開放權限的共享目錄中,不小心刪除了其它人的檔案。
mount -a //
依照/etc/fstab的內容,掛載所有的裝置
mount /mnt/cdrom //依照/etc/fstab的內容,掛載
cdrom (簡易掛載)
mount -t iso9660 /dev/cdrom /mnt/cdrom //
掛上光碟到/mnt/cdrom目錄
mke2fs /dev/fd0 //製作ext2的軟碟格式
mount -t vfat /dev/fd0 /mnt/floppy //掛上
windows檔案系統的軟碟到/mnt/floppy
目錄
mount -t ext2 /dev/fd0 /mnt/floppy //掛上
linux檔案系統的軟碟到/mnt/floppy目錄
mount -t ext2 /dev/hdc6 /home //掛上linux
檔案系統的分割區到/home目錄
mount -t vfat -o iocharset=cp950 /dev/sda1 /mnt/usb //掛載usb hd並支援中文與fat32 到/mnt/usb目錄
df
umount /mnt/floppy //
卸載軟碟
umount /home //卸載
df
語法:指令 選項 參數1 參數2 參數....
範例: rm -rf tmpfile abc
| Ctrl+U | 刪除游標左邊的部分 | Ctrl+K | 刪除游標右邊的部分 |
|---|---|---|---|
| Ctrl+A | 移動到命令列的開始處 | Ctrl+E | 移動到命令列的末尾處 |
| Ctrl+B | 向左移動一個字元 (backward) | Ctrl+F | 向右移動一個字元 (forward) |
| [ESC] +B | 向左移動一個單字 | [ESC] +F | 向右移動一個單字 |
| Ctrl+P | 同 history 向上鍵的使用 (previous) | Ctrl+N | 同 history 向下鍵的使用 (next) |
| Shift-PgUp | 在tty上,往上捲一頁 | Shift-PgDn | 在tty上,往下捲一頁 |
| Ctrl+L | 清除畫面 (clear) | Tab | 命令補齊或檔名補齊 |
| Ctrl+C | 中斷程式執行 | Ctrl+D | 登出 / EOF |
| Ctrl+I | 補齊(同 Tab 鍵) | ||
| Ctrl+J | 同 Enter 按鍵 | Ctrl+M | 同 Enter 按鍵 |
| Ctrl+O | 同 Enter 按鍵後再帶出最後一次輸入的指令 | Ctrl+Z | 暫停程式執行 |
| Ctrl+R | 命令歷程反向搜尋 | ||
| [ESC] + < | 移至命令歷程的第一列 | [ESC] + > | 移至命令歷程的最後一列 |
| [ESC] + D | 刪除游標右方的一個單字 | [ESC] + [Bk] | 刪除游標左方的一個單字 |
| history | 過去的命令記錄 |
|---|---|
| history 20 | 顯示20行 |
| !!或向上的方向鍵 | 叫出最後下的指令 |
| ! command | 叫出過去曾用過的指定command |
| ! n | 叫出第n個指令 |
| export HISTCONTROL=ignoreboth | 避免history出現重複的指令 |
| command_name --help | 單一命令的求助畫面 |
| man command_name | col -b > text_file | 將命令的說明手冊轉向輸出到文字檔 |
|
命令 |
意義 | 常用參數 | 範例 |
|---|---|---|---|
| tee | 可將標準輸出同時作標準輸出顯示在螢幕與導向儲存為檔案 這是管線工人的術語,代表 T 型的管線分叉器 |
last | tee /tmp/tee.list | cut -d " " -f1 | |
| cut | 以指定字元切割資料 |
-d:分隔字元 |
cut -d ":" -f 1 /etc/passwd cut -c 1-10 /etc/passwd |
| sort | 排序資料 | -t:分隔字元 -r:反向排序 -f:忽略大小寫 -n:以數字型態排序 +:起始 -:結束 |
sort /etc/termcap sort -r /etc/passwd cat /etc/passwd | sort -t: +2n |
| wc | 計算行,單字,字元 |
-l:顯示行 |
wc /etc/httpd/conf/httpd.conf |
| nl | 加行號 |
-v:設定起始編號 |
nl /etc/passwd |
| head | 顯示檔案開端的前幾行 | -n:指明顯示的行數 | head -n 15 /var/log/messages |
| tail | 顯示檔案尾部的幾行 | -n:指明顯示的行數 | tail -n 15 /var/log/messages |
| grep | 文字過濾搜尋:基本型 Global Regular Expression Print |
-i:忽略大小寫 |
grep tty /var/log/messages grep -r broadcast /etc |
| egrep | 文字過濾搜尋:延伸型 Extended grep |
||
| fgrep | 文字過濾搜尋:只找固定的字串 Fixed GREP grep |
||
| uniq | 刪除鄰近重複的行 | last | cut -d " " -f1 | sort | uniq | |
| tr |
取代 |
-d:刪除指定字串 -s:取代重複的字元 |
last | tr '[a-z]' '[A-Z]' cat /etc/passwd | tr -d : cat abc.txt | tr -d '\r' > def.txt |
| split | 分割檔案 | -b:以檔案大小分割 -l:以行數分割 |
split -l 5 /etc/passwd test |
Linux對於使用者與群組的管理 ,採用類似DNS的助憶方式,即將使用者與群組帳號名稱改以ID來處理,使用者帳號轉換為UID,群組帳號轉換為GID,可觀察/etc/passwd的 第3,4個欄位得知。
|
命令 |
意義 | 常用參數 | 範例 |
|---|---|---|---|
| logname | 查詢目前登入的使用者自己的名稱(login name) | logname | |
| whoami | 查詢目前登入的使用者自己的名稱 | whoami | |
| who | 查詢目前登入的所有使用者名稱與連線方式, 時間 | who | |
| who am i | 查詢目前登入的使用者自己的名稱與連線方式, 時間 | who am i | |
| finger | 查詢指定的使用者其帳戶相關資訊(預設禁用此命令) | finger peter |
|
命令 |
意義 | 常用參數 | 範例 |
|---|---|---|---|
| write | 發送訊息給指定的已登入使用者(Ctrl+z結束輸入) | write peter | |
| talk | 發送訊息給指定的使用者(可透過網路連外) | talk peter , talk peter@140.128.77.175 | |
| mesg | 是否接受訊息(write或talk) | n | y | mesg n , mesg y |
| 收信或發信(Body的結束獨立輸入 . 表示輸入完畢) | mail peter , mail peter@hotmail.com |
| 選項 | 縮寫 | 預設值 | 設定之後的效果 |
|---|---|---|---|
| autoindent | ai | noai | 在前一行的欄位中開始每一行新文字 |
| ignorecase | ic | noic | 搜尋時忽略大小寫 |
| number | nu | nonu | 為每一行文字編上號碼 |
|
i o a -----------> <----------- Esc |
|
||
|
: / ? -----------> <----------- Esc |
|
| :w [檔名] | 將編輯的資料寫入目前檔案[指定檔案] | :r | 讀入指定的檔案到游標所在行之後 |
|---|---|---|---|
| :w! | 強制儲存設有唯讀屬性的檔案 | :q | 離開 |
| :wq | 儲存後離開 | :q! | 不儲存離開 |
| :wq! | 強制儲存後離開 | :set nu | 顯示行號 |
| :n 檔名 | 編輯新檔案 | :set nonu | 取消顯示行號 |
| :e 檔名 | 開啟舊檔案 | n1,n2 w [檔名] | 將n1到n2的內容儲存成指定檔名 |
| i , I | 插入文字到目前游標所在處 | r | 取代游標所在的那一個字元 |
|---|---|---|---|
| a , A | 增加文字到目前游標的下一個字元 | R | 一直取代游標所在的那一個字元到按下Esc為止 |
| o , O | 插入新的一行到目前游標的下一行 | Esc | 返回一般模式 |
| h | 游標向左移動一個字元 | 0 | 游標所在行的第一個字元(數字0) |
|---|---|---|---|
| j | 游標向下移動一個字元 | $ | 游標所在行的最後一個字元 |
| k | 游標向上移動一個字元 | G | 移到檔案的最後一行 |
| l | 游標向右移動一個字元 | nG | 移到檔案的第n行 |
| ^F | PageUp | n<space> | 游標向右移動n個字元 |
| ^B | PageDown | n<Enter> | 游標向下移動n行 |
| ?string | 向游標之前搜尋 | :1,$s/word1/word2/g | 取代 word1 成為 word2 |
|---|---|---|---|
| /string | 向游標之後搜尋 | :1,$s/word1/word2/gc | 取代 word1 成為 word2,並需要使用者確認 |
| n | 下一個找到的字串 | :n1,n2s/word1/word2/g | 在n1~n2行之間取代 word1 成為 word2 |
| N | 上一個找到的字串 |
| x | Delete | yy | 複製游標所在那一行 |
|---|---|---|---|
| X | Backspace | nyy | 複製游標所與向下的n行 |
| nx | 刪除n個字元 | y1G | 複製游標所在到第一行的所有資料 |
| dd | 刪除游標所在的行 | yG | 複製游標所在到最後一行的所有資料 |
| ndd | 刪除游標所在往下的n行 | p | 複製的資料貼在游標的下一行 |
| d1G | 刪除游標所在到第一行的所有資料 | P | 複製的資料貼在游標的上一行 |
| dG | 刪除游標所在到最後一行的所有資料 | J | 結合游標所在的列與下一列成為一列 |
| u | undo | ^r | redo |
Shell Script可視為一個批次指令的執行程序檔,為一個文字檔,其語法只有兩種類型,Bourne shell 以及 C Shell。前者延伸適用於 sh、ksh、bash(語法較為嚴謹);而後者則是 csh、tcsh。可惜的是,這兩大類支援的語法彼此並不相容。另外由於 sh 是 UNIX 的 default shell,而 bash 則是廣泛 UNIX Like 的 default shell。因此一般建議是,有意學習的初學者最好採用 Bourne shell 或語法相容的 shell 撰寫 script。
寫 script 只須簡單地使用 vi 編輯一個文字檔,將你想要執行的一行又一行的指令寫下來就可以了。然後將這個文字檔,以 chmod u+x 來賦予她可執行的權限。一個 shell script 就告完成。
shell有自己的自訂變數空間與環境變數空間,但只有在環境變數空間的變數才能讓下一層shell使用
| HOSTNAME | 主機名稱 | PWD | 目前工作目錄 | PS1 | 系統提示字元 |
|---|---|---|---|---|---|
| USER | 使用者帳號 | 使用者mail路徑 | HISTSIZE | 歷史紀錄的筆數 | |
| UID | User ID | HOME | 使用者家目錄 | ? | 前個指令的傳回值 |
| SHELL | 目前使用的shell路徑 | PATH | 執行檔搜尋路徑 | $ | 目前shell的PID |
| 符號 | 意義 | 範例 |
|---|---|---|
| " |
雙引號 |
echo "hello world" ; echo "$PATH" |
| ' | 單引號 | echo '$PATH' |
| ` | 倒引號 | echo "I am `whoami`" ; echo "current directory : `pwd`" |
| $ | 錢字號 | echo "my uid : $UID" |
| \ | 倒斜線 |
|
命令與檔案之間的關係
命令與命令之間的關係,前一個指令的標準輸出會當作下一個指令的標準輸入,通常以『 | 』來表示
last | grep root
last | grep root | wc -l
vi test.sh // 一般都以vi來撰寫script,以.sh作為結尾
#!/bin/bash //
指定解譯本檔案的shell其完整路徑
# shell script 範例 //註解
a=5 //自訂變數
b=3
name="Peter"
echo a=$a //顯示變數內容
echo b=$b
echo "My name is $name"
echo 'My name is $name'
if [ "$a" = "$b" ] //條件判斷,其 [] 與 =
左右兩邊都要空格喔
then
echo a=b
else
echo a!=b
fi
chmod u+x my_script ; ./my_script //加入「執行」屬性,也可指定shell 來執行,例如:sh my_script
./test.sh hello world 123
echo "The script's name is $0"
echo "parameters is $1 $2 $3"
sh -v my_script.sh //顯示每一個執行步驟的回傳值
sh -x my_script.sh //察看shell
script的執行流程
|
命令 |
意義 | 常用參數 | 範例 |
|---|---|---|---|
| compress | 壓縮檔案為.Z // 僅能壓縮單一檔案 | -d:解壓縮 -b n:壓縮比例 0~16 |
compress man.config compress -d man.config.Z |
| uncompress | 解壓縮.Z的檔案 | uncompress man.config.Z | |
| bzip2 | 壓縮檔案為.bz2 // 僅能壓縮單一檔案 |
-d:解壓縮 |
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:壓縮 |
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 |
正規表示式(Regular Expression)或稱通用運算式最早是由數學家Stephen Kleene于1956年提出,他是在對自然語言的遞增研究成果的基礎上提出來的。具有完整語法的正規表示式使用在字元的格式比對方面上,後來被應用到資 訊技術領域。自從那時起,正規表示式經過幾個時期的發展,現在的標準已經被ISO(國際標準組織)批准和被Open Group組織認定。
| /y/ | /yes/ | /^yes/ | /yes$/ | /ca./ |
|
|
|
|
|
|
基本型 (grep) |
|||
| . | 表示任意單一字元,但不包含換行符號 | /ca./ | |
|---|---|---|---|
| * | 表示前一個正規表示式可能出現0次或多次 | /cats*/ | |
| [ ] | 表示單一字元的範圍 | ||
| [...] | 方括弧內的字元都要 | /[wW]hat/ | |
| [^...] | 方括弧內的字元都不要 | /[^A-K]/ | |
| [a-z] | 要a-z的字元 | /[cC]hapter [1-9]/ | |
| ^ | 比對輸入字串開始的位置 | /^09 ; ^[A-Z][12]/ | |
| $ | 比對輸入字串結束的位置 | /[0-9]$/ | |
| \ | 表示下一個字元失去其特殊作用,僅代表字元本身 | /\.H[12345]/ | |
| \{n,m\} | 表示前一個字元出現的次數介於n到m之間 | ||
|
延伸型 (egrep) |
|||
| + | 表示前一個正規表示式可能出現1次或多次 |
/[a-zA-Z0-9_\.-]+@[a-zA-Z0-9_\.-]+/ |
|
| ? | 表示前一個正規表示式可能出現0次或1次 | /colou?r/ | |
| | | 表示可以比對|前面或後面的正規表示式 (or的概念) | /compan(y|ies)/ | |
| () | 表示集合 | /([a-k][0-9])+/ | |
| { } | 表示前一個正規表示式出現的次數 | ||
| {n} | 表示前一個正規表示式只有出現n次 | /[0-9]{4}\-[0-9]{6}/ | |
| {n,} | 表示前一個正規表示式至少出現n次 //{0,} | /[0-9]{2,}/ | |
| {n,m} | 表示前一個正規表示式至少出現n次,但少於m次 | /colou{0,1}r/ | |
| 特殊字元(metacharacter ) | |||
| \b | 符合文字邊界(word boundary)。也就是說在字與空格之間的位置 | 例如,'er\b' 符合"never" 裡的'er'但是不符合"verb"裡的'er' | |
| \B | 符合非文字邊界 | 例如,'er\B' 符合"verb"裡的'er'但是不符合"never" 裡的'er' | |
| \d | 符合一個數字字元 = /[0-9]/ | /\d{2}-\d{5}/ | |
| \D | 符合一個非數字字元 = /[^0-9]/ | ||
| \w | 符合任何含底線的字元 = /[A-Za-z0-9_]/ |
Email:/[\w-]+@([\w-]+\.)+[\w-]+/ |
|
| \W | 符合任何非字符元的字元 = /[^A-Za-z0-9_]/ | ||
| \n | 換行 ( Line Feed ) | ||
| \f | 換頁 | ||
| \r | Carriage return | ||
| \t | Tab | 比對一個空白行:/^\[ \t]*$/ | |
| \s | 符合任何包括空格的空白字元,像tab,換頁等 = /[\f\n\r\t]/ | ||
| \S | 符合任何非空白字元 = /[^ \f\n\r\t]/ | ||
| \e | escape | ||
| /[15]0* / | /10\{2,4\} 1 / | /[k-q].[^4-9] / | /[^a-k]+[0-9]?. / |
|
|
|
|
套件A必須依賴套件B才能夠運作,在安裝套件A之前,必須先安裝套件B才行,我們稱套件A對套件B具有相依關係。
下面的例子就是在安裝套件ami時,RPM警告需先安裝套件local-ko
rpm -ivh ami-1.0.4-3.i386.rpm
error: failed dependencies:
locale-ko is needed by ami-1.0.4-3
| rpm | 已經經過編譯且包裝完成的 rpm 檔必須要在相同的 Linux 環境下才能夠安裝 |
| src.rpm | 包含未編譯的原始碼資訊的 srpm 檔需再經過編譯的步驟, 產生能適合我們 Linux 環境的 RPM 檔案 ,而不必與原作者打包的 Linux 環境相同,然後再以rpm的方式安裝 |
| i386 | i 指的是 Intel 相容的 CPU 的意思, 386指的是 CPU 的等級,幾乎適用於所有的 x86 平台 |
| i586 | 就是 586 等級的電腦,那是哪些呢?包括 pentum 第一代 MMX CPU, AMD 的 K5, K6 系列 CPU ( socket 7 插腳 ) 等等的 CPU 都算是這個等級; |
| i686 | 在 pentun II 以後的 Intel 系列 CPU ,及 K7 以後等級的 CPU 都屬於這個 686 等級! |
| no arch | 就是沒有任何硬體等級上的限制。 |
| 安裝rpm | rpm -ivh rp-pppoe-3.1-5.i386.rpm rpm -ivh ftp://ftp.aaa.com.tw/linux/newspackage-1.0.i386.rpm |
| 編譯src.rpm |
rpm --rebuild locale-zh-0.9-3.src.rpm |
rpm -Uvh rp-pppoe-3.1-5.i386.rpm
查詢所用到的參數相當的多,以下介紹較為常用的
| -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` |
需注意,移除的是套件名稱,而非完整的rpm檔名
rpm -qa | grep pppoe
rpm -e rp-pppoe
rpm -V rp-pppoe-3.1-5.i386.rpm
dpkg -i kde-i18n-zhtw_3.0.4-1_all.deb
需注意,移除的是套件名稱,而非完整的deb檔名
dpkg --remove kde-i18n-zhtw
dpkg -l
cd /usr/local/src
tar -zxvf rp-pppoe-2.6.tar.gz
cd rp-pppoe
./configure //在檢視你的系統並製作安裝參數檔案,如
config.h 或 Makefile 等檔案
make clean // 清除前一次安裝的編譯檔
make // 開始以你的系統來編譯
make install
//安裝到系統
設定提供更新的站台 :mdk.linux.org.tw
升級檔位置 :/pub/mandrakelinux/official/updates/10.1/RPMS //要看本身的版本來決定路徑
取回站台上的升級套件列表 :media_info/hdlist.cz
urpmi.addmedia mdk.linux.org.tw ftp://mdk.linux.org.tw/pub/mandrakelinux/official/updates/10.1/RPMS with media_info/hdlist.cz
urpmi.addmedia linux.nctu.edu.tw ftp://linux.nctu.edu.tw/dists/mandrakelinux/official/updates/9.1/RPMS with ../base/hdlist.cz
上面的動作進行完畢之後,會更動 /etc/urpmi/urmpi.cfg 以及/var/lib/urpmi/ 目錄下的內容可供更新的網站資料:cat /etc/urpmi/urpmi.cfg
urpmi.removemedia "Installation CD 4 (x86) (cdrom4)"
urpmi.removemedia -a
以後要更新的話要先作 urpmi.update 以更新媒體資訊,才進行自動下載
urpmi --auto-select
urpmi.update mdk.linux.org.tw
urpmi.update -a
urpmi jmcce
urpme jmcce
urpmq jmcce
cd /etc/yum.repos.d
cp fedora-core.repo fedora-core.repo.bak
vi fedora-core.repo
[core]
name=Fedora Core $releasever - $basearch - Base
baseurl= http://ftp.isu.edu.tw/pub/Linux/Fedora/linux/core/$releasever/$basearch/os/
mirrorlist=http://fedora.redhat.com/download/mirrors/fedora-core-$releasever
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora
cp fedora-updates.repo
fedora-updates.repo.bak
vi fedora-updates.repo
[updates]
name=Fedora Core $releasever - $basearch - Released Updates
baseurl=http://ftp.isu.edu.tw/pub/Linux/Fedora/linux/core/updates/$releasever/$basearch/
mirrorlist=http://fedora.redhat.com/download/mirrors/updates-released-fc$releasever
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora
cp fedora-extras.repo
fedora-extras.repo.bak
vi fedora-extras.repo
[extras]
name=Fedora Extras $releasever - $basearch
baseurl=http://ftp.isu.edu.tw/pub/Linux/Fedora/linux/extras/$releasever/$basearch/
mirrorlist=http://fedora.redhat.com/download/mirrors/fedora-extras-$releasever
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-extras
# yum check-update (檢查需要升級的套件)
# rpm --import RPM-GPG-KEY
# rpm --import RPM-GPG-KEY-fedora
# yum -y update (自動升級所有RPM套件)
yum程式已經自動在系統的 /etc/cron.daily 目錄中放有yum.cron,每天會定時幫您自動執行yum系統升級程式,自動檢查並更新伺服器上update的新RPM套件,所有的yum執行過程也都 會記錄在 /var/log/yum.log中,我們只要確定 cron、yum 的 service 有啟動,即會每天作 yum update 的動作了
| 更新套件 yum update [套件1] [套件2] [...] |
yum update |
| 安裝套件 yum install 套件1 [套件2] [...] |
yum install php* |
| 移除套件 yum remove 套件1 [套件2] [...] |
yum removel nmap |
| 列出所有的套件 |
yum list |
| 列出所有可以更新的套件 | yum list updates |
| 列出所有已安裝的套件 | yum list installed |
| 列出所有已安裝但不在 Yum Repository 內的套件 | yum list extras |
| 檢查可以更新的套件 | yum check-update |
| 列出所有套件的資訊 | yum info |
| 列出所有可以更新的套件資訊 | yum info updates |
| 列出所有已安裝的套件資訊 | yum info installed |
| 列出所有已安裝但不在 Yum Repository 內的套件資訊 | yum info extras |
| 列出套件提供哪些檔案 yum provides 套件1 [套件2] [...] |
|
| 搜尋套件 yum search [參數] |
IP有v4與v6二種版本,本文僅探討IPv4的部分
在網際網路的世界,凡是遵循TCP/IP通訊協定的電腦都可以彼此連接並傳遞訊息,因此必須賦予全世界唯一的IP位址(IP address)來作為身份識別,IP位址是一個32bits的數值,通常以「dotted quad decimal」的格式來表示,即以四個句點分開的數字所組成,每個數字均為0∼255之間,例如140.128.77.170
早期遮罩值的決定以每8位元作為一個等級來切割網路,造成IP的使用沒有效率數目
| Class | ip開頭 | 網路數目 | 主機數目 | 使用範圍 | 子網路遮罩 | |
|---|---|---|---|---|---|---|
| A | 0 | 126 | 16777214 | 1.0.0.0~126.255.255.255 | 255.0.0.0 | |
| B | 10 | 16384 | 65534 | 128.0.0.0~191.255.255.255 | 255.255.0.0 | |
| C | 110 | 2097152 | 254 | 192.0.0.0~223.255.255.255 | 255.255.255.0 | |
| D | 1110 | 224.0.0.0~239.255.255.255 | multicast | |||
| E | 1111 | 240.0.0.0~254.255.255.255 | reserved |
子網路遮罩也是一個32bits的數值,由一連串的『1』加上一連串的『0』所組成,其表示法有二種
1.IP位址表示法:例如『255.255.255.0』 2.遮罩長度表示法:例如 『24 』
為了分辨「本地網路」與「遠端網路」,IP位址與子網路遮罩(subnet mask)配合後,分為二部分 1.網路位址(network address) 2.主機位址(host address)
| IP位址(IP address) | 192.168.1.127 | 11000000.10101000.00000001.01111111 |
| 子網路遮罩(subnet mask) | 255.255.255.0 | 11111111.11111111.11111111.00000000 |
| 網路位址(network address) | 192.168.1.0 | 11000000.10101000.00000001.00000000 |
| 主機位址(host address) | 127 | 01111111 |
位於相同網段的電腦其Net ID必定相同,但其 HostID 必定不同。 電腦傳送封包前必須根據前述運算計算目的IP是否與來源IP同網段,若為同網段,則利用ARP Table作區域網路內的封包傳遞,若不同網段,則依據Routing Table 尋找路徑或由default gateway將封包傳送出去。
| 10.21.51.23 & 255.0.0.0 =>10.0.0.0 10.32.42.50& 255.0.0.0 =>10.0.0.0 故兩者屬於同一個網段 |
| 192.168.2.0/255.255.255.128 =>192.168.2.0/25 192.168.2.128/255.255.255.128=>192.168.2.128/25 |
練習:求61.16.66.67 / 255.255.255.248 1.網段IP數量 2.網段IP範圍
為了能更有效率地分配IP位址,一種稱為CIDR的新定址法被提出,又稱為Supernet,此法借用Net address給Host address以增加net mask ,可集合數個較小的網路形成較大的網路。
每一個IP對外連接時都包含有一個16bits的通訊埠編號,定義在/etc/services這個檔案裡面
| Protocol | Standard Port | Secure (SSL) Port |
|---|---|---|
| FTP data | 20 | |
| FTP control | 21 | |
| Telnet server | 23 | |
| SMTP | 25 | - |
| DNS | 53 | - |
| DHCP server | 67 | |
| DHCP client | 68 | |
| HTTP Server | 80 | 443 |
| POP3 | 110 | 995 |
| NNTP Server | 119 | - |
| IMAP4 | 143 | 993 |
| IRC | 194 | - |
| LDAP | 389 | 636 |
電腦要能夠上網,必須設定以下內容
# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=localhost
GATEWAY=192.168.61.254 //若為Cable
Modem等使用DHCP上網方式,則無須設定
下列2個檔案的inode編號都與/etc/sysconfig/network-scripts/ifcfg-eth0相同,若發生更改此檔的IP值卻無作用時,請檢查下列2個檔案的內容是否一致,非常有可能其inode編號已經不一樣了喔(可用此指令查詢:find /etc -inum inode號碼)
/etc/sysconfig/networking/devices/ifcfg-eth0
/etc/sysconfig/networking/profiles/default/ifcfg-eth0
# vi
/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static //若為DHCP上網方式,則設定值改為
dhcp 且以下無須設定
IPADDR=192.168.61.194
NETMASK=255.255.255.0
NETWORK=192.168.61.0
BROADCAST=192.168.61.255
GATEWAY=192.168.61.254 //這裡的gateway設定,其優先權較/etc/sysconfig/network中的設定為高
# vi /etc/resolv.conf
nameserver 168.95.192.1
nameserver 168.95.1.1
# /etc/rc.d/init.d/network restart
# ifdown eth0
# ifup eth0
在linux下第一張乙太網路卡名稱為eth0(Solaris 為be0,Ultrix為le0),loopback網路介面名稱則為lo0
| 命令 | 意義 | 常用參數 | 範例 |
|---|---|---|---|
|
ifconfig interface options address 寫入設定檔 |
網卡設定 |
interface :網路介面卡代號,例如 eth0, eth1... |
ifconfig eth0 up ifconfig -a |
| ifup interface | 啟動某個網路介面卡 | /etc/sysconfig/network-scripts/ifcfg- eth0需存在 | |
| ifdown interface | 關閉某個網路介面卡 | /etc/sysconfig/network-scripts/ifcfg- eth0需存在 | |
|
netstat [-r] [-i interface] netstat [-antulp] |
查閱網路資訊的指令 | 參數說明: -r :顯示出 route 的意思; -i :顯示出 interface 的內容,跟 ifconfig 類似啦! -a :顯示出目前所有的網路連線狀態! -n :預設情況中,顯示出的 host 會以 host name 來顯現,若為 n 則可以使 port 與 host 都以數字顯示 -t :僅顯示 tcp 封包的連線行為 -u :僅顯示 udp 的封包連線狀態 -l :僅顯示 LISTEN 的內容 -p :同時顯示此一連線的 PID 喔!(注意:只有 root 才能行使此功能!) |
netstat -npl netstat -nr |
|
route add [-net|-host] 目標主機或網域 [netmask] [gw|dev] route del [-net|-host] 目標主機或網域 [netmask] [gw|dev] |
路由表顯示與設定 | 參數說明: -n :列出的資訊以 IP 來顯示 -ee :列出較長列的資訊 add :增加路由資訊 net :刪除一個路由資訊 -net :增加一個『網域』的路由,例如 C Class 的網域! -host :增加到某個 IP 主機的路由! netmask :就是 netmask 呀! gw :這個是路由的通訊閘! gw 是以 IP 來建置的 dev :這個是路由的通訊閘! dev 是以 介面 ( internet ) 代號來建置的! |
route -n route add -net 140.113.190.0 netmask 255.255.255.0 dev eth0 route add default gw 192.168.1.254 dev eth0 |
| 命令 | 意義 | 常用參數 | 範例 |
|---|---|---|---|
| arp | 顯示設定arp table資訊 | -n: -s IP MAC:設定固定對應 -d IP:移除 |
arp -n arp -s 192.168.1.100 00-10-B5-AF-82-F2 |
| rarp | 由MAC反查IP |
| 命令 | 意義 | 常用參數 | 範例 |
|---|---|---|---|
| dig [@dns] [ip/hostname] | Domain information gopher | dig www.ncut.edu.tw | |
|
nslookup [ip/hostname] DNS lookup |
從DNS server查詢 IP address對應的FQDN或反查 | nslookup www.ncut.edu.tw | |
|
host [ip/hostname] 較nslookup多了額外資訊 |
從DNS server查詢 IP address對應的FQDN或反查 | host 140.128.77.171 |
| 命令 | 意義 | 常用參數 | 範例 |
|---|---|---|---|
|
ping [-b broadcast] ping [-c
number] host |
送一個 ICMP 的封包給某部主機 |
-b broadcast:當要 ping
一個網段時,可以使用這個方式來『廣播』! -c number:後面加上 number (數字)可以限制 ping 幾次! -s SIZE: 指定packet size的大小 |
ping -c 10 www.google.com.tw ping -s 1024 192.168.1.1 |
| traceroute [-i interface] [-g gateway] [host | IP] | 調查連接到某部主機時,每個節點的連線速度 | -i :使用這個 interface 來連出去!例如 eth0,
ppp0 等! -g :使用這個 gateway 來連出去!例如 192.168.1.2, 140.116.141.29 等! |
traceroute www.hinet.net |
Linux網路伺服器的Daemon啟動的方式有兩種
Fedora 將 inetd 改由 xinetd 來做控制, 設定檔為 /etc/xinetd.conf 跟 /etc/xinetd.d/ 這個目錄
TCP_Wrappers 設定 TCP 封包是否可以進入的設定檔在 /etc/hosts.allow 與 /etc/hosts.deny 當中。因此,基本上,如果一個服務是受到 xinetd 或 TCP_Wrappers 的控制時,那麼該服務就會受限於 hosts.allow 與 hosts.deny 的管理 ,通常我們都是: 允許進入的寫在 /etc/hosts.allow 當中; 不許進入的則寫在 /etc/hosts.deny 當中。
Kernel 2.2.x 時候使用 ipchains 當做 firwall控管工具, Kernel 2.4.x 則使用 iptables 當做 firwall控管工具 ,設定檔案在 /etc/sysconfig/ipchains 或 /etc/sysconfig/iptables , /etc/sysconfig/ip6tables
瞭解各種不同的設定檔與記錄檔是精通Linux的不二法門喔,希望能蒐集一些重要的設定檔。
| 設定檔 | 意義 | 常用內容 |
|---|---|---|
/var/log/wtmp 對應指令:last |
查看登入成功的使用紀錄 | |
/var/log/btmp 對應指令:lastb |
查看登入失敗的使用紀錄 | |
| /etc/inittab | 更改runlevel以控制6種不同啟動模式 這個組態檔還可以控制 Ctrl+Alt+Del 的行為,通常按下這三個按鍵,將導致系統 shutdown,如果要關閉這個功能,請將下面這一行 remark 起來: ca::ctrlaltdel:/sbin/shutdown -t3 -r -now |
id:5:initdefault |
| /etc/protocols | 通信協定定義檔 | |
| /etc/services | 連接埠定義檔 | |
| /etc/rpc | 遠端程序呼叫定義檔 | |
| /etc/hosts | 這個檔案用來定義主機名稱,其作用相當於 windows 下的 LMHOSTS,當該單機需要解析主機名稱時,會先查詢此檔案 設定的考量如下:1.為了改進區域網路的性能 2.確保重要服務不會因為 DNS 故障受到影響 3.某些主機因安全考量並未定義在 DNS 內,那就必須自行將名稱加到 hosts,以確保名稱能正確解析。 |
127.0.0.1 localhost.localdomain localhost |
| /etc/resolv.conf | 定義本地端進行名稱解析時的DNS伺服器 | nameserver 168.95.192.1 |
| /etc/exports | NFS設定檔 | |
| /etc/fstab | 這個檔案是用來定義系統可用的儲存裝置,通常在增加硬碟或增刪磁區之後,需要由網管手動修改設定,另外掛載遠端目錄時也需要修改它,例如:NFS、windows共享資料夾.......等等。 | |
| /etc/rc.d/rc.local | 這個檔案用來自行加入開機指令稿,當我們希望某些程式在開機完成後就自動啟動執行,我們只要將指令加入到這個檔案內就可以了 注意:開機時許多會使用到的設定值都保存在 /etc/sysconfig 這個資料夾下的眾多設定檔,我們不一定需要更改rc.local這個檔案,只需要去修改 /etc/sysconfig 下相關的設定檔,就可以要求系統在下次開機時直接使用新的設定值 |
|
| /etc/sysconfig/network-scripts/ifcfg-eth0 | eth0網卡設定檔 | |
| /etc/sysconfig/clock | 指定時區 | ZONE="Asia/Taipei" |
| /etc/sysconfig/desktop | 指定 X window 的預設桌面系統 | DESKTOP="GNOME" |
| /etc/sysconfig/static-routes | 用來定義開機後要啟動的靜態路由 | |
| /etc/sysconfig/i18n | 用來定義語系以及字型,例如更改ls顯示時的建檔日期亂碼 | LC_TIME=en ; LANG=en ; LANG="zh_TW.Big5" |
| /etc/chinese/xcin/xcinrc | 用來定義中文輸入法,範例為倚天鍵盤排列 | (KEYMAP 1) ; 0:zozy, 1:et, 2:et26, 3:hsu |
| Mandrake(Fivestar) | Fedora | Suse |
相關設定檔 |
|
|---|---|---|---|---|
| 基礎設定工具 | drakconf | setup / linuxconf | yast | |
| 啟動音效 | draksound,alsaconf | sndconfig | ||
| XWindow設定 | XFdrake | Xconfigurator | sax2 |
|
| 套件更新 | urpmi / rpmdrake | yum / apt-get | yast |
|
| 網路設定 | netconf / draknet | netconfig / internet-druid | yast |
|
| 關閉、啟動服務 | chkconfig | ntsysv | yast |
/etc/rc.d/init.d/sshd restart
在使用者家目錄建立.netrc的檔案,並將其權限設定為600,內容如下
machine ftp.peterju.idv.tw login peterju
password 123456
machine mail.cyut.edu.tw login s9154610 password 123456
macdef init //以下這3行可設定登入後要做的動作,亦可省略
bin
bell
找尋/etc/chinese/jmcce/jmcceb5.ini中的倚天輸入法與零壹輸入法對調
找尋/etc/chinese/xcin/xcinrc中的keymap將其值改為1
#gpm -t imps2 -m /dev/psaux
「資料本土化」簡稱 L10N,其意為 LocalizatioN
區域化資料庫 ( locale database ) : 將地區語文的各項細節資料分門別類,安裝在 系統底層的資料庫中,以便讓系統函式庫存取,以提供給上頭的應用程式使用,它們包 括以下的類別 (categories):
export LC_ALL=zh_TW.Big5
一般系統對這些環境變數的 優先順序是: LC_ALL > LC_* > LANG 。如果我們設 了 LC_ALL 的環境變數,則所有的類別設定,包括 LANG 的設定全部會失效,而改以 LC_ALL 的設定來運作。
若以繁體中文安裝Linux時,則在終端機上的日期顯示會有亂碼,此時要修改/etc/sysconfig/i18n這個檔案中的 LC_TIME 成為en
在收信者的 home directory 建立一文字檔名為 .forward,內容如下:
another@domain.com
以上為信件轉寄的電郵地址。
在 /etc 目錄內建立一文字檔案名 nologin ,內容隨意。只要系統發現此檔案存在,就會禁止其他使用者登入,並且會顯示 nologin 檔的內容。
避免任何人都可以關機,請修改檔案 /etc/inittab , 找尋下列句子:
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
可將該行刪除,或之前加上註解#即可,之後重啟服務即可
init q
假設我們有一堆網址想要每天檢查它是否失效,可利用wget檢查並產生失效的網址清單
| 使用方式 | url | chk.sh |
|---|---|---|
| #./chk.sh < url |
140.128.91.93/ |