Linux 筆記 Linux note

本網頁以打造無障礙閱讀為目標,可以用任何瀏覽器來觀看本網頁


Linux源起

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在逛澳洲動物園時被一隻小企鵝咬到,所以印象特別深刻喔。

Linux作業系統

自由軟體基金會

自由軟體基金會(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

General Public License (GPL)的精神

Linux系統架構

使用者

應用程式
 
命令解譯器(Shell)
命令與工具
系統軟體

核心(Kernel)
核心模組

電腦硬體與週邊

核心功能

System Calls
  • System call interface
  • Process control
  • Memory management
  • File system management
  • Device drivers
Process Control
File Control
Device Drivers
Hardware Interface

Linux擁有優異的資源管理與記憶體管理,使用Preemptive Multitasking的行程管理 ,避免特定的行程強佔資源不放,記憶體保護方面分為使用者空間(user space)與核心空間(kernel space),程序的錯誤不會影響到核心的運作

  1. Linux 核心網址:http://www.kernel.org
  2. 核心的版本:uname -r

套件(Distribution)

常見的版本有 Ubuntu, Mandriva , Fedora , Debian , SuSE , Slackware , Gentoo , Knoppix等,Linux所有的套件種 類可參考DistroWatch , 若你無法抉擇使用哪一種套件,不妨利用 Linux Distribution Chooser為你決定。

Ubuntu
2004年10月首次發佈的Linux套件其衍生自Debian套件,安裝光碟具備Live CD方式開機功能,可在Live CD的作業環境下,立即將系統安裝到指定的硬碟。2006年6月剛釋出最新的6.06 LTS(Long-Term Support)版,即代號"Dapper Drake"的版本提供三年的桌面支援與五年的伺服器支援,並區分為桌上型電腦與伺服器等應用版本。桌上型版本採用GNOME桌面環境(使用KDE則以 Kubuntu套件另外發布),伺服器版雖然使用文字介面,但核心卻經過效能的調整。
Mandriva(原Mandrake)
以RedHat架構為藍本,Xwindow改用KDE介面,並自行設計了許多圖形化的設定工具,收錄的軟體不但快也很新,是所有 套件中最具有親和力的一種。
Fedora
特色為安裝快速方便,由RedHat套件分離出來,使用的package管理系統rpm(RedHat Package Manager)廣為流傳與使用。
Debian
大家公認結構最為嚴謹的套件,有自己的package管理系統dpk(Debian Package)。
SuSE
德國發展的套件版本,現已為Novell收購。
Slackware
完全手工打造,建議老手使用。
Gentoo Linux
提供相當便利的 Portage 軟體套件管理系統。
KNOPPIX Linux Live CD
一片活的CD, 由Debian改裝而來 。

Linux安裝

Mandrake套件 9.2的安裝步驟與畫面

建議硬體

安裝過程

調整BIOS

硬體設定

一般3鍵滑鼠可選 MS intelliMouse

儲存裝置代號

PC 的IDE硬碟裝置代號
  Master Slave
IDE 1
/dev/hda
/dev/hdb
IDE 2
/dev/hdc
/dev/hdd

磁碟分割

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 控管主機
步驟 讀取檔案 寫入檔案
載入 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

觀看硬體資訊

dmesg
查看系統硬體的資訊。
uname
看主機資訊。

Linux的文件系統與資源

線上手冊(man pages)

手冊位置:/usr/share/man/
設定檔:/etc/man.conf

man [分類號碼] [選項][指令名稱]
-k:尋找出現在哪幾頁

以/usr/bin/less檢視時的操作
g:第一行
G:最後一行
/:尋找
q: 離開

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

檔案系統

/etc/fstab

ext3(Third Extended File System)

若選擇將硬碟格式化為ext3格式之後,硬碟會分為4個部分

boot block
ext3檔案系統中的第一個區塊(block) ,含有啟動程式,負責載入核心
super block
負責記錄檔案系統的配置方式,例如:i-node數量,可用區塊數量等
data block
資料實際儲存的地方,大小為512bytes的倍數 ,預設為4096bytes
i-node(index-node)
i-node負責記錄一個檔案的資訊,但一個檔案可以有多個i-node來指向它,記錄的資訊有

與分割相關的指令

fdisk

語法:fdisk /dev/hd[a-d]

範例:fdisk /dev/hdc

fdisk 按鍵說明
p 看現有partition l 看partition system ID
n 新增分割區 d 刪除分割區
t 設定分割區的system id a 設定分割區為可開機
w 儲存分割的結果並離開 q 不儲存分割的結果直接離開

常用的Partition system ID
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

語法: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/

Linux file system Hierarchy Standards

路徑目錄

.
表示目前所在目錄
..
表示上一層目錄
~
表示目前使用者家目錄 cd
~user
表示指定user的使用者家目錄
/ 根目錄 亦可表示絕對路徑:以 / 開始表示連續的階層目錄

開機片製作

開機管理程式

LILO

GRUB

若root密碼遺忘,可進入單人模式進行變更密碼: 在grub開機選單中最後一行加入" single",開機後直接輸入passwd root即可 ,詳細步驟請參考 http://163.19.59.1/~linux/student_samba/ChangeRootPassword/index.htm

檔案目錄操作

命令

意義

常用參數 範例
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 [選項] 原始來源檔 目的連結檔

硬連結(hard link)

這種連結必須在同一個檔案系統下進行,允許對"檔案"做連結,但"目錄"則不適用。檔案只佔用一個 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)

不能連結目錄與不同跨檔案系統的限制,稍後被克服了,這種連結被稱為符號連結(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

使用者/檔案/目錄 權限

ls -al

drwx------  8 root root 4096 Oct 20 04:22 ./
drwxr-xr-x 20 root root 4096 Oct 19 13:04 ../
檔案屬性 連結數 擁有者 所屬群組 檔案容量 修改時間 檔案名稱

改變檔案的權限

命令

意義 常用參數 範例
數字型: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:設定存取時間不可修改
S:設定資料同步寫入磁碟
a:設定只能增加,不可刪除
c:設定自動壓縮/解壓縮
d:設定備份屬性
i:設定不可增刪修改,連結也不可
j:記錄於日誌中
s:設定完全抹除
u:設定可用來反刪除

 
lsattr [-aR] 顯示檔案特殊屬性 a:全部檔案,含隱藏檔
R:含子目錄
 

ps:以root身份拷貝完檔案後,別忘了可能需要change owner喔

SUID , SGID

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」 ,代表執行此程式之人自動取得此檔案所屬群組的權限

Sticky bit

ls -l /
drwxrwxrwt 2 root root 4096 Jul 18 13:08 tmp

在tmp目錄的其它使用者執行權限處出現了「t」,代表設定了sticky bit ,在此目錄中,只有檔案擁有者與root才有權力刪除檔案,可避免在開放權限的共享目錄中,不小心刪除了其它人的檔案。

mount , umount

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

shell 命令模式操作

提示符號

命令的語法

語法:指令 選項 參數1 參數2 參數....

範例: rm  -rf  tmpfile  abc

命令列的編修

GNU readline

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 過去的命令記錄
history 20 顯示20行
!!或向上的方向鍵 叫出最後下的指令
! command 叫出過去曾用過的指定command
! n 叫出第n個指令
export HISTCONTROL=ignoreboth 避免history出現重複的指令

檔名擴充字元(filename expansion characters)

其它

Filter 串流過濾指令

常用的過濾命令

命令

意義 常用參數 範例
tee 可將標準輸出同時作標準輸出顯示在螢幕與導向儲存為檔案
這是管線工人的術語,代表 T 型的管線分叉器
  last | tee /tmp/tee.list | cut -d " " -f1
cut 以指定字元切割資料

-d:分隔字元
-c:第幾個字元
-f:第幾個區塊

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:顯示行
-w:顯示單字
-c:顯示字元

wc /etc/httpd/conf/httpd.conf
nl 加行號

-v:設定起始編號
-i:設定增量編號

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:忽略大小寫
-w:顯示完全符合完整字的行
-v:顯示不符合的行
-r:搜尋包含子目錄

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
==> testaa, testab, testac.....

帳戶管理

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
mail 收信或發信(Body的結束獨立輸入 . 表示輸入完畢)   mail peter , mail peter@hotmail.com

文書處理器


一般模式

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設計

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 使用者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"
\ 倒斜線
  1. 使下一個字元失去其特殊作用,僅能代表字元本身
    echo \$PATH
    touch This\ is\ a\ file
  2. 斷行
    echo "hello \
    > world"

命令結果代換(command substitution)

Shell 設定檔

更改設定檔後,除了重新登入外,可利用 source 執行設定檔,例如:source ~/.bashrc

輸出/輸入重導(input / output redirection)

命令與檔案之間的關係

標準輸入,標準輸出,標準錯誤

導向(Redirect)

管線(Pipe)

命令與命令之間的關係,前一個指令的標準輸出會當作下一個指令的標準輸入,通常以『 | 』來表示

last | grep root

last | grep root | wc -l

Shell Script 編寫

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"

Shell Script 偵錯

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:解壓縮
-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

正規表示式

正規表示式(Regular Expression)或稱通用運算式最早是由數學家Stephen Kleene于1956年提出,他是在對自然語言的遞增研究成果的基礎上提出來的。具有完整語法的正規表示式使用在字元的格式比對方面上,後來被應用到資 訊技術領域。自從那時起,正規表示式經過幾個時期的發展,現在的標準已經被ISO(國際標準組織)批准和被Open Group組織認定。

簡單的比對 :請選出下方哪些會符合指定的正規表示式
/y/ /yes/ /^yes/ /yes$/ /ca./
  1. y
  2. Y
  3. yes
  4. yy
  5. hey
  6. heyes
  7. x
  8. good
  1. yes
  2. Yes
  3. YES
  4. yes!
  5. yeS
  6. yesterday
  7. y e s
  8. yes? no! yes ....
  1. yes
  2. Yes
  3. yes no
  4. no yes
  5. yey yes
  6. myes
  7. eyes
  1. yes
  2. yesyes
  3. yes no
  4. no yes
  5. yesterday
  6. yes, it is.
  7. my eyes
  1. ca
  2. car
  3. cap
  4. cat
  5. CAT
  6. cats and dogs
  7. This is a cat.
  8. 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-]+/
URL:
http://([\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]?. /
  1. 1
  2. 5
  3. 10
  4. 50
  5. 100
  6. 500
  7. 1000
  8. 5000
  1. 101
  2. 1001
  3. 10001
  4. 100001
  5. 1000001
  1. 5am6a4
  2. p43
  3. amma
  4. aqk4
  5. bom1
  1. 4
  2. 54
  3. m0
  4. s4a
  5. pmq1

正規表示式初級考試題庫

套件管理程式

RPM (RedHat Package Manager)

屬性相依

套件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 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套件升級

rpm -Uvh rp-pppoe-3.1-5.i386.rpm

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檔名

rpm -qa | grep pppoe
rpm -e rp-pppoe

RPM驗證

rpm -V rp-pppoe-3.1-5.i386.rpm

dpkg

命名規則

dpkg安裝

dpkg -i kde-i18n-zhtw_3.0.4-1_all.deb

dpkg移除

需注意,移除的是套件名稱,而非完整的deb檔名

dpkg --remove kde-i18n-zhtw

查詢已安裝套件

dpkg -l

Tarball

命名規則

安裝

cd /usr/local/src
tar -zxvf rp-pppoe-2.6.tar.gz
cd rp-pppoe
./configure   //在檢視你的系統並製作安裝參數檔案,如 config.h 或 Makefile 等檔案
make clean   // 清除前一次安裝的編譯檔
make      // 開始以你的系統來編譯
make install   //安裝到系統

urpmi

使用 urpmi .addmedia增加一個rpm媒體來源

設定提供更新的站台 :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自動下載與更新所有rpm檔案

以後要更新的話要先作 urpmi.update 以更新媒體資訊,才進行自動下載

urpmi --auto-select

更新清單檔案資訊

urpmi.update mdk.linux.org.tw

urpmi.update -a

更新單一套件

urpmi jmcce

移除指定套件

urpme jmcce

查詢指定套件

urpmq jmcce

YUM (Yellow dog Updater, Modified )

修改連線設定

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 升級系統

# 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 的動作了

#chkconfig crond on
#chkconfig yum on

yum相關的套件

Yum Extender
是一套圖形介面的yum更新程式,安裝後會出現在 Xwindow的應用程式/系統工具/yum延伸程式。
yum -y install yumex
Yum UpdateOnBoot
若電腦並非24小時開機,不適合作cron定時更新的主機,可設定在開機時檢查是否有要更新的套件。
yum -y install yum-updateonboot
chkconfig yum-updateonboot on

yum的常用指令

更新套件
 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 [參數]
 

網路基礎

TCP/IP的基礎概念

IP有v4與v6二種版本,本文僅探討IPv4的部分

IP位址(Internet Protocol address)

在網際網路的世界,凡是遵循TCP/IP通訊協定的電腦都可以彼此連接並傳遞訊息,因此必須賦予全世界唯一的IP位址(IP address)來作為身份識別,IP位址是一個32bits的數值,通常以「dotted quad decimal」的格式來表示,即以四個句點分開的數字所組成,每個數字均為0∼255之間,例如140.128.77.170

自然遮罩(natural mask)

早期遮罩值的決定以每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

子網路遮罩(subnet mask)

子網路遮罩也是一個32bits的數值,由一連串的『1』加上一連串的『0』所組成,其表示法有二種
1.IP位址表示法:例如『255.255.255.0』 2.遮罩長度表示法:例如 『24 』

為了分辨「本地網路」與「遠端網路」,IP位址與子網路遮罩(subnet mask)配合後,分為二部分 1.網路位址(network address) 2.主機位址(host address)

計算「網路位址 」:將IP位址與遮罩都化為二進位,並逐位元進行AND邏輯運算
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與10.32.42.50二 者是否為同一個網段
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/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範圍

CIDR (Classless Inter-Domain Routing)

為了能更有效率地分配IP位址,一種稱為CIDR的新定址法被提出,又稱為Supernet,此法借用Net address給Host address以增加net mask ,可集合數個較小的網路形成較大的網路。

特殊位址

通訊埠編號(port number)

每一個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

上網方式設定

電腦要能夠上網,必須設定以下內容

/etc/sysconfig/network

# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=localhost
GATEWAY=192.168.61.254  //若為Cable Modem等使用DHCP上網方式,則無須設定

/etc/sysconfig/network-scripts/ifcfg-eth0

下列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中的設定為高

/etc/resolv.conf

# 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

NIC(Network Interface Card)

在linux下第一張乙太網路卡名稱為eth0(Solaris 為be0,Ultrix為le0),loopback網路介面名稱則為lo0

命令 意義 常用參數 範例

ifconfig interface options address

寫入設定檔
/etc/sysconfig/network-scripts/ifcfg-eth0

網卡設定

interface :網路介面卡代號,例如 eth0, eth1...
options :主要有以下幾個參數
   network :網段
   broadcast :廣播網段
   netmask :子網路遮罩
   up | down :啟動 | 關閉網路介面

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 (Address Resolution Protocol)

命令 意義 常用參數 範例
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    

DNS (Domain Name Server)

命令 意義 常用參數 範例
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

ICMP

命令 意義 常用參數 範例

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啟動的方式有兩種

  1. stand-along:佔系統資源,反應較快
  2. super daemon :不佔系統資源,反應較慢

系統安全

inetd

Fedora 將 inetd 改由 xinetd 來做控制, 設定檔為 /etc/xinetd.conf 跟 /etc/xinetd.d/ 這個目錄

TCP_Wrappers

TCP_Wrappers 設定 TCP 封包是否可以進入的設定檔在 /etc/hosts.allow 與 /etc/hosts.deny 當中。因此,基本上,如果一個服務是受到 xinetd 或 TCP_Wrappers 的控制時,那麼該服務就會受限於 hosts.allow 與 hosts.deny 的管理 ,通常我們都是: 允許進入的寫在 /etc/hosts.allow 當中; 不許進入的則寫在 /etc/hosts.deny 當中。

Firewall

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
  1. /etc/X11/XF86Config
  2. XF86Config-4
套件更新 urpmi / rpmdrake yum / apt-get yast
  1. /etc/urpmi/urpmi.cfg
  2. /etc/yum.conf
網路設定 netconf / draknet netconfig / internet-druid yast
  1. /etc/sysconfig/network
  2. /etc/resolv.conf
  3. /etc/hosts
  4. /etc/sysconfig/network-scripts/ifcfg-eth0
關閉、啟動服務 chkconfig ntsysv yast  

高段技法

延長ssh閒置等待的時間

  1. 開啟 /etc/ssh/sshd_config 檔案,尋找參數 ClientAliveCountMax,其單位為分鐘。
  2. 修改後儲存及關閉檔案,重新啟動 sshd

/etc/rc.d/init.d/sshd restart

ftp自動登入

在使用者家目錄建立.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

jmcce倚天鍵盤排列

找尋/etc/chinese/jmcce/jmcceb5.ini中的倚天輸入法與零壹輸入法對調

啟動xcin倚天鍵盤排列

找尋/etc/chinese/xcin/xcinrc中的keymap將其值改為1

啟動終端機模式的滑鼠支援

#gpm -t imps2 -m /dev/psaux

改變支援utf8產生亂碼的情形

「資料本土化」簡稱 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
以上為信件轉寄的電郵地址。

只准 root 登入

在 /etc 目錄內建立一文字檔案名 nologin ,內容隨意。只要系統發現此檔案存在,就會禁止其他使用者登入,並且會顯示 nologin 檔的內容。

如何使 CTRL+ALT+DEL 失效?

避免任何人都可以關機,請修改檔案 /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/
140.128.94.130/default.asp?x
account.exe.ncut.edu.tw/
gen.ncut.edu.tw/
gen.ncut.edu.tw/AE/
glmrc.ie.ncut.edu.tw/
idtm.ncut.edu.tw/
iee.ncut.edu.tw/
irw.ncut.edu.tw/
linux3.ncut.edu.tw/ddos

#!/bin/sh

while read f
do
 wget -q -O /dev/null $f
 if [ $? = 1 ]
 then
  echo $f
 fi
done

批次改檔名

批次更改副檔名

更改檔名 *.html -> *.htm 更改檔名 *.htm -> *.html

#!/bin/sh
for i in *.html
do
  echo $i
  mv $i `basename $i .html`.htm
done

#!/bin/sh
for i in *.htm
do
  echo $i
  mv $i `basename $i .htm`.html
done

BV1AL knoppix

儲存設定

請在icewm的menu裡的「系統控管」選擇「儲存系統設定」,再依選單裡勾選你要的項目,可選擇存入軟碟或 USB 隨身碟。

掛載USB 隨身碟

可以下dmesg 看usb 使用哪一個名稱 sda1,sda2 or sda sdb

mkdir /mnt/usbhd
mount /dev/sda1 /mnt/usbhd

rebuildfstab
mount /dev/sda1 /mnt/usbhd

httpd 網站伺服器(apache)

vsftpd 檔案傳輸伺服器(very secure ftp daemon)

設定可參考:加強 VSFTP的安全性

Linux 系統管理教學

課程規劃:

課程內容
有效學習
如何善用現有資源發揮組合的力量、學習命令列的好處、 GNU與自由軟體介紹
基本概念
UNIX / Linux發展歷史、各種LinuxDistribution介紹、基本指令使用、求助方式
檔案系統
檔案系統管理、檔案掛載
帳戶管理
使用者帳號管理
命令稿
vi文字編輯器、Shell script、正規表示式 (grep, sed)
套件管理
安裝(執行檔或原始檔)、更新、刪除, 檔案壓縮
網路基礎
網路架構、 TCP/IP介紹
網路服務
系統工用程式和工具(arp,ifconfig,ping,traceroute) 、結業考

Linux考題

結業考成績公佈

網路資源

主 網 站:http://peterju.notlong.com (目前轉址至 http://irw.ncut.edu.tw/peterju/) Sitetag Logo

Level Triple-A conformance icon | [歡迎使用任何作業系統、瀏覽器觀看!] | Valid XHTML 1.0 Transitional | Valid CSS! | [Valid RSS] | [創意公眾許可証]
This work is licensed under a Creative Commons License