Linux 筆記

来源:百度文库 编辑:神马文学网 时间:2024/04/26 16:17:49
Linux 筆記 Linux note
本網頁以打造無障礙閱讀為目標,可以用任何瀏覽器來觀看本網頁

Linux源起Linux作業系統簡介Linux安裝Linux開機流程基本系統操作Linux的文件系統與資源檔案系統shell 命令模式操作帳戶管理文書處理器Shell Script設計壓縮指令正規表示式套件管理程式網路基礎網路服務系統安全重要設定檔高段技法BV1AL knoppix網路資源
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作業系統
Unix系統的主要分支,1.BSD系列(加州柏克萊大學) 2.System V 系列(AT&T) 3.AIX系列 (IBM),Linux兼顧了前2者的優點。 Linux遵循可移植作業系統界面(POSIX; Portable Operating System for unIX)的標準來開發,因此可與現今的System V與BSD等Unix like系統相容。 Linux系統對於大小寫字母是有區別的。 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)的精神
GPL 的授權之軟體,乃為自由軟體(Freeware),任何人皆可擁有他。 開發 GPL 的團體(或商業企業)可以經由該軟體的服務來取得服務的費用。 經過 GPL 授權的軟體,其屬於 Open source 的情況,所以應該公布其原始碼。 任何人皆可修改經由 GPL 授權過的軟體,使符合自己的需求。 經過修改過後 Open source 應該回饋給 Linux 社群。
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),程序的錯誤不會影響到核心的運作
Linux 核心網址:http://www.kernel.org 核心的版本:uname -r
套件(Distribution)
常見的版本有Ubuntu,Mandriva ,Fedora ,Debian ,SuSE ,Slackware ,Gentoo ,Knoppix等,Linux所有的套件種類可參考DistroWatch , 若你無法抉擇使用哪一種套件,不妨利用Linux Distribution Chooser為你決定。
Ubuntu2004年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的安裝步驟與畫面
建議硬體
586CPU 256MB RAM 6G HD 知道螢幕的垂直與水平掃描頻率 顯示卡的晶片型號,記憶體大小,安裝套件發行前半年的卡較好 網路卡型號, 可用realtek的螃蟹卡8139c
安裝過程
調整BIOS
調整時間 調整開機順序 : 可從光碟開機安裝
硬體設定
一般3鍵滑鼠可選 MS intelliMouse
儲存裝置代號
IDE硬碟 /dev/hd[a-d] SCSI硬碟 /dev/sd[a-p] 軟碟 /dev/fd[0-1] 印表機 /dev/lp[0-2] 光碟機 /dev/cdrom 滑鼠 /dev/mouse 網路卡 /dev/eth[0-*] SCSI磁帶機 /dev/st0 IDE磁帶機 /dev/ht0 磁碟陣列 /dev/md0
PC 的IDE硬碟裝置代號   Master Slave
IDE 1 /dev/hda
/dev/hdb
IDE 2 /dev/hdc
/dev/hdd
磁碟分割
硬碟的分割區有主要分割區與延伸分割區2種,而一顆硬碟只能有四個分割區,其中只能有一個延伸分割區,或者不劃分延伸分割區,但因為邏輯分割只能在延伸分割區下切割使用,因此通常都會規劃一個延伸分割區 硬碟分割區的代號從1-4,如/dev/hda[1-4], 邏輯分割區則不論是否切完4個分割, 其代號一律從5開始,如/dev/hda5 Linux系統的的分割區有2種 native:用來儲存實際檔案目錄資料的分割區 swap:虛擬記憶體資料交換使用的分割區(256~512MB)
舊的版本需注意BIOS對1024磁柱(8.4GB)的支援, 若未支援1024磁柱時,系統的核心需放置在1024磁柱之前,/boot目錄大約保留500MB 以spfdisk作多重開機說明, swap partition id:82 native partition id:83 linux目錄規劃遵照Linux檔案系統階層式架構標準(Linux file system Hierarchy Standards:FHS) 軟體磁碟陣列 (Software RAID support) linux以軟體模擬磁碟陣列功能,也支援IDE硬碟喔,只做出RAID[0,1,5]的規格,必須在安裝時就指定使用
LVM(Logical Volume Management) 當規劃的分割區空間不夠了,可加上一顆硬碟連結不夠的分割區,方便管理者擴充空間
日誌式檔案系統 (安裝時就要選擇採用的檔案系統) :提供了錯誤復原與稽核的功能 ReiserFS Ext3 JFS XFS
Linux開機流程
載入 BIOS 的硬體資訊 BIOS從開機磁碟機的第 0 磁區、第 0 磁柱載入可供開機的磁區, 讀取 MBR 自MBR載入Kernel Loader (亦即是 lilo, grub, spfdisk 等等)開機資訊 載入 Kernel 的作業系統核心資訊 (/boot/vmlinuz-xxxx) 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 : 重新開機 init執行第一支 script : /etc/rc.d/rc.sysinit 啟動核心的外掛式模組 (/etc/modules.conf) init 執行 run-level 的各個批次檔( Scripts ) init 執行 /etc/rc.d/rc.local 檔案 getty 監測登入要求,登入前顯示/etc/issue檔案內容(telnet顯示issue.net) 執行 /bin/login 程式 , 根據輸入核對/etc/passwd, 登入後顯示/etc/motd檔案內容, 並將登入的訊息紀錄寫入/var/run/utmp與/var/log/wtmp 登入之後開始以 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
檔案系統
檔案系統(File System ; FS)是作業系統(OS)用來儲存與管理檔案的標準。不同的作業系統通常都有自己的檔案系統,而Linux甚至於將硬體與周邊裝置都視為檔案,因此有必要將FS徹底的瞭解一下 Linux可使用非常多的檔案系統,如Ext2, Ext3, RaiserFs, JFS, XFS 等,可到以下目錄看出支援的格式
/lib/modules/`uname -r`/kernel/fs 若需要將分割區於開機時自動掛載,則需修改/etc/fstab檔案 檔案與目錄的名稱最多可以有255個字元,且其中不可有空白
/etc/fstab
系統開機會自動掛載那些 file system或裝置,是紀錄在 /etc/fstab 這個檔案系統配置檔 。 自動掛載vfat的範例
/dev/sda6  /mnt/hdd vfat  iocharset=cp950  0  0
/etc/fstab 每一列包含六個欄位,以空格(一個以上)、tab或兩者同時用來分隔。 第一個欄位設定 分割區 的位置(裝置的路徑) *可利用fdisk -l 先觀察現有的分割情況 第二個欄位設定分割區要在哪個 掛載點 被掛載 *這個掛載點必須事先被建立喔 第三個欄位設定分割區的 檔案系統 第四個欄位設定 mount 要掛載時所使用的 掛載參數 。 因為不同的檔案系統有不同的參數,可查詢 manpage ( man mount ) 來取得完整的參數列表。 若有兩個以上的選項,需以用逗號分開 defaults代表將自動mount該partition為可讀可寫 noauto表示開機時不要自動掛載 iocharset=cp950支援codepage 950功能,讓vfat partition可以看到中文長檔名
第五個欄位被 dump 用來決定這個分割區需不需要被傾印。有0(不做),1(順位第一),2(順位第二)三種值,正常root file system (/)順位第一,其他ext3,ext2檔案系統順位第二,其他檔案系統填0 第六個欄位讓 fsck 決定當系統不正常的關機時,檔案系統要不要作系統 檢查 , 1表示要,0表示不要。只有ext3,ext2等需要做file system check
ext3(Third Extended File System)
若選擇將硬碟格式化為ext3格式之後,硬碟會分為4個部分
boot blockext3檔案系統中的第一個區塊(block) ,含有啟動程式,負責載入核心super block負責記錄檔案系統的配置方式,例如:i-node數量,可用區塊數量等data block資料實際儲存的地方,大小為512bytes的倍數 ,預設為4096bytesi-node(index-node)i-node負責記錄一個檔案的資訊,但一個檔案可以有多個i-node來指向它,記錄的資訊有 檔案大小 使用者id:UID 群組id:GID 檔案存取模式:讀取、寫入、執行等 連結的數量:指向的檔案同時有多少個i-node也指向它 檔案最後修改時間 磁碟區塊位址:檔案實際存放的data block位址 間接區塊位址:檔案大小超過一個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
/lib 系統最基本的動態鏈結函式庫 /home 使用者家目錄 /usr 安裝的程式,文件,原始碼,字型等較靜態的檔案 /usr/bin、/usr/sbin 一般使用者常用的程式 /usr/lib 一般使用者常用的程式所需的動態鏈結函式庫、靜態檔案庫 /usr/X11R6:X-Window目錄 /usr/src:Linux原始碼 /usr/include:系統頭檔
/dev 裝置設備檔目錄(device) /etc 系統組態設定檔,包含應用程式設定,網路組態設定等 /boot 開機相關檔案與核心,包括了開機管理程式的設定檔,核心檔案:vmlinuz /bin 一般使用者執行程式(binary) /sbin 系統管理員執行程式(binary) /var 紀錄,spool佇列,mailbox,網頁,FTP /proc 為一虛擬目錄,是記憶體的映射,放置核心網路,行程資訊狀態 /mnt 固定裝置掛載點,一般是空的,用來臨時掛載別的檔系統 /media 移動裝置掛載點 /tmp 暫存目錄,可供所有使用者讀寫之用,系統將不定期清除之 /root 管理者家目錄
路徑目錄
.
表示目前所在目錄
..
表示上一層目錄
~
表示目前使用者家目錄 cd
~user
表示指定user的使用者家目錄
/ 根目錄 亦可表示絕對路徑:以 / 開始表示連續的階層目錄
開機片製作
DOS:rawite file.img a: Linux :dd if=file.img of=/dev/fd0
開機管理程式
LILO
GRUB
grub具有『動態搜尋核心檔案』的功能,它可以讓您在開機的時候,即時編輯開機設定檔案 grub利用BIOS來決定硬碟,但無法判斷是IDE還是SCSI,因此無法採用 Linux中通用的裝置表示法,而有自己的定義,如(hd0),(hd1,1)等,與實際硬碟的對應要參考 /boot/grub/device.map即可得知 grup的設定檔為/boot/grub/menu.lst GRUB預設將Windows系統設為Other 製作grub開機片
#mke2fs /dev/fd0
#mkdir /mnt/floppy
#mount -t ext2 /dev/fd0 /mnt/floppy -o loop
#mkdir -p /mnt/floppy/boot/grub
#cd /boot/grub
#cp device.map stage1 stage2 /mnt/floop/boot/grub
#cat < menu.lst
> default=0
>timeout=10
>title Floppy Linux
>kernel (hd0,1)/boot/vmlinuz root=/dev/hda1
>initrd (hd0,1)/boot/initrd.gz
> quit
> EOF
#grub --batch --device-map=/dev/null <> device (fd0) /dev/fd0
>root (fd0)
> setup (fd0)
> quit
> EOF
若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 的孤兒檔案。
符號連結(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  ../
----------- --- ----  ---- -----  --------------  ---
檔   連  擁  所  檔    修    檔
案   結  有  屬  案    改    案
屬   數  者  群  容    時    名
性        組  量    間    稱
檔案屬性 第0欄:檔案類型
d 目錄(directory) - 檔案(regular file )
l 連結檔(symbolic link file ) b 區塊裝置(block device file)
c 字元裝置(charcter device file) s socket檔(socket file)
p 管線檔(pipe file)
第1~3欄:檔案擁有者屬性( r:可讀 w:可寫 x:可執行 ) 第4~6欄:檔案所屬群組屬性( r:可讀 w:可寫 x:可執行 ) 第7~9欄:其它人對此檔案之屬性( r:可讀 w:可寫 x:可執行 )
ps:對目錄而言,可執行的屬性代表著可進入此目錄 //因為不開放執行ls, cd等指令
連結數:佔用了多少個i-node 檔案擁有者:此檔案或目錄的擁有者 檔案所屬群組:此檔案或目錄所屬的群組 檔案容量:檔案的大小 檔案最後被修改的時間:顯示建檔日或最後修改日期(月日時) 檔名:檔案名稱 //以. 開頭的為隱藏檔
改變檔案的權限
命令
意義 常用參數 範例
數字型: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 命令模式操作
提示符號
BASH預設開機時的提示符號為[使用者名稱@主機名稱目前所在目錄]提示字元 例如 : #PS1="[\u@\h \W]\$ "
[root@mdk /root] #
查詢有哪些提示符號的格式 man bash 尋找PROMPTING一節
變更提示符號,將提示符號寫入 系統設定 : /etc/profile, /etc/bashrc 使用者家目錄 : .bash_profile, .bashrc
命令的語法
語法:指令 選項 參數1 參數2 參數....
範例: rm  -rf  tmpfile  abc
命令列的編修
GNU readline
現有的許多命令列交談式應用程式 (例如 tcsh, rlab, gdb, psql, lftp, ..。 等等) 都和 readline 程式庫連結。 使用者只要學會一套在命令列上操縱鍵盤的方法, 就可以在所有這些應用程式上大幅度提升工作效率。 以下列出常用的按鍵,其餘可參考 readline(3)
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)
萬用字元(asterisk) : /etc/*, /etc/p*, /etc/*conf* 單一字元(question mark) : /etc/us? 範圍(brackets) : /etc/[pqr]*, /etc/[2-3 , 5-8] , /etc/[!pqr] , file.{sh,jpg,png,gif}
其它
自動補齊 利用TAB鍵作指令或檔案名稱的補齊 遇有一個以上的補齊方法時, bash會beep一聲提示無法補齊,此時再按下TAB鍵,bash就會將所有可能的狀況列出
命令的說明
command_name --help 單一命令的求助畫面
man command_name | col -b > text_file 將命令的說明手冊轉向輸出到文字檔
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:顯示不符合的行
grep tty /var/log/messages
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
文書處理器
常用的文書編輯器有 vi, emacs, nano, pico, jed, 或 joe等,其中 vi 在所有的distribution都有,所以要好好的學習它。 VIM ("Vi IMproved") 與 vi 相容,目前的distribution多以 vim 設定符號連結到vi,因為vim具有圖形使用者介面,而且也增加了許多 vi 所沒有的功能且幾乎與全部的 vi 指令相容,但是沒有 vi 的 bug。 對於 vi 環境的設定可使用指令模式下的 set 命令,如 :set number/set nonumber,如果忘了自己作了哪些設定,可以用 :set 看到目前的設定狀況。如果想要看細部所有的選項(option),則是用 :set all。欲查詢個別的選項可用 :set 選項? 例如 :set ai?。 set 命令可使用的選項可使用縮寫來表示,例如 選項 縮寫 預設值 設定之後的效果
autoindent ai noai 在前一行的欄位中開始每一行新文字
ignorecase ic noic 搜尋時忽略大小寫
number nu nonu 為每一行文字編上號碼
vi 的 set 命令只作用在這次的環境中,下次必須再次設定,因此對於常使用的設定,可以編寫設定檔儲存,例如 " 設定檔中的註解用的是雙引號喔
set wm=8
" set 指令前不需要加冒號喔
set showmode
abbr peter Peter JU
vi對於環境設定檔的搜尋順序為 目前目錄的 .exrc  家目錄的 .exrc  /etc/exrc (所有的使用者都使用相同的 vi 設定)
vim 的環境設定檔大都另外放在 .vimrc 或 /etc/vim/vimrc 。 若要在 vi 中執行外部命令,例如查詢目前所有目錄的檔名,可使用冒號+驚歎號+外部指令 :! 外部指令(不可是alias的指令喔) :! ls -l
若要在 vi 啟動時順便設定需要的環境,例如開啟 .bashrc 並顯示行號,此時可在vi 與欲開啟的檔案中間加上 "+ set nu" vi "+ set nu" .bashrc
vim的分割視窗 水平分割::split 另一個欲開啟在不同視窗的檔案名稱(可簡寫為sp) 垂直分割::vsplit 另一個欲開啟在不同視窗的檔案名稱(可簡寫為vsp) 切換視窗:按Ctrl+W 二次 關閉目前視窗:close 保留目前視窗:only
一般模式
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 游標向右移動n個字元
^B PageDown n 游標向下移動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使用
變數名=變數值 : 設定自訂變數,例如:a=3  // 等號兩旁不可有空白 echo $變數名 : 看單一變數的值 env : 可看所有的環境變數 set : 可看所有的環境變數+所有的自訂變數 set -o ignoreeof  //忽略 EOF訊號 set -o noclobber  //輸出導向到已存在檔案時,提醒existing file set -o nohash  //禁止 Shell記錄曾經執行的指令次數
export 變數 : 將自訂變數轉為環境變數 unset 變數 : 將環境變數消滅 export -n 變數 : 將環境變數轉為自訂變數
常見的環境變數
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"
\ 倒斜線 使下一個字元失去其特殊作用,僅能代表字元本身
echo \$PATH
touch This\ is\ a\ file
斷行
echo "hello \
> world"
命令結果代換(command substitution)
$(command) : rm $(ls /tmp) // 需在/tmp目錄下才可正確執行喔 `command` : grep `whoami` /etc/passwd xargs : xargs可以把本來從 stdin 輸入的資料, 轉成後面那個命令的命令列參數. 這可以在不支援 back quote substitution 的 shell 下做到 back quote substitution 的功能.
Shell 設定檔
/etc/profile :整體的bash環境設定檔,bash 登入時會讀取的檔案,通常定義環境變數,路徑等 ~/.bash_profile :個人的bash環境設定檔,bash根據登入的使用者來讀取其家目錄下的檔案,通常定義環境變數,路徑等 ~/.profile , ~/.bash_login ~/.bashrc :bash每次被呼叫時都會讀取的檔案,通常定義 alias 與 function ~/.bash_logout :bash登出時會讀取的檔案 ~/.bash_history :bash的歷史紀錄檔
更改設定檔後,除了重新登入外,可利用 source 執行設定檔,例如:source ~/.bashrc
輸出/輸入重導(input / output redirection)
命令與檔案之間的關係
標準輸入,標準輸出,標準錯誤
標準輸入 : stdin 0 (預設為鍵盤) 標準輸出 : stdout 1 (預設為螢幕) 標準錯誤 : stderr 2 (預設為螢幕)
導向(Redirect)
> : 將程式的標準輸出重新導向到檔案,例如:ls /tmp > /tmp/list.txt 2>:將程式的標準錯誤輸出重新導向到檔案,例如: ls /ABC 2> /tmp/error.txt 1>:將程式的標準輸出重新導向到檔案,例如: ls /bin/ls /bin/abc 2>err.txt 1>out.txt 2>&1:將程式的標準錯誤輸出同時重新導向到標準輸出,例如: ls /bin/ls /bin/abc > out.txt 2>&1
>>: 將程式的標準輸出重新導向附加到檔案,例如: ls /tmp >> /tmp/list.txt <:將程式需要的標準輸入重新導向到檔案,例如: mail abc@hotmail < content.txt <<:程式由stdin讀入資料直至指定字串時結束,例如:cat << EOF
管線(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
雙引號具有變數代換功能 讀取:read
echo "Please input your name :"
read name
echo "Your name is $name"
條件判斷 &&(and) 與 ||(or) if (條件1) then
命令1
elif (條件2) then
命令2
else
命令3
fi case....esac
迴圈 for while until
常用命令 echo read
命令列參數代號
./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的執行流程
壓縮指令
壓縮工具分類 針對一群檔案進行打包:tar 針對單一檔案進行壓縮:compress, gzip, bzip2 // 先使用tar打包成單一檔案,再進行壓縮 針對一群檔案進行打包並壓縮:zip, rar ,lha,7za
命令
意義 常用參數 範例
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組織認定。
具體地說, 我們在想要搜尋的字串當中夾雜一些特殊符號, 指示電腦以較嚴格或較寬鬆的條件去搜尋, 這樣的字串就叫做 regexp。 UNIX/Linux 的許多軟體或指令都支援正規表示式,例如 grep、sed、awk、ed、vi、emacs 等。 Netscape 及 IE 在第四版後都支援 JavaScript 的正規表示式,特別適用於表單資料的驗證與修改。 在一些Windows上的語言或工具也都支援正規表示式,像是C#, Java, UltraEdit, Dreamweaver 等。 在shell中的pattern match叫 globbing,shell 是不認得正規表示式的。 正規表示式使用 /.../ 或 "..." 框起來一群符號項目來比對字串的樣式狀態,有基本型與延伸型二類
簡單的比對:請選出下方哪些會符合指定的正規表示式 /y/ /yes/ /^yes/ /yes$/ /ca./
y Y yes yy hey heyes x good
yes Yes YES yes! yeS yesterday y e s yes? no! yes ....
yes Yes yes no no yes yey yes myes eyes
yes yesyes yes no no yes yesterday yes, it is. my eyes
ca car cap cat CAT cats and dogs This is a cat. 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 5 10 50 100 500 1000 5000
101 1001 10001 100001 1000001
5am6a4 p43 amma aqk4 bom1
4 54 m0 s4a pmq1
正規表示式初級考試題庫
套件管理程式
Linux的軟體套件包裝的方式有三種 RPM:Red Hat所制訂,副檔名為.rpm dpkg:Debian所制訂,副檔名為.deb Tarball:Unix / Linux共通的方式,副檔名為.tar.gz / .tgz,內容為原始檔以tar+gzip製作
套件管理程式上需注意的問題 安裝的環境必須與打包時的環境需求一致或相當 需要滿足套件的「屬性相依」需求 反安裝時需要特別小心,最底層的套件不可先移除,否則可能造成整個系統的問題!
以原始碼編譯上需注意的問題 缺乏某些Library,例如Xlib,qt,motif..... 每個Distribution使用不同的GNU C library版本(libc5 / glibc2)
RPM (RedHat Package Manager)
RPM為RedHat所研發出來的套件管理程式,目前使用的distriution有Mandrake, Suse等 需以root身份方可執行
屬性相依
套件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
命名規則
套件名稱-版本編號-發行次數. 硬體平台.副檔名 => xanim-27064-3.i386.rpm 副檔名有兩種
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 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
命名規則
套件名稱_版本編號-發行次數.deb => tkpgp_1.11-2.deb
dpkg安裝
dpkg -i kde-i18n-zhtw_3.0.4-1_all.deb
dpkg移除
需注意,移除的是套件名稱,而非完整的deb檔名
dpkg --remove kde-i18n-zhtw
查詢已安裝套件
dpkg -l
Tarball
通常以tar -zxvf 解壓縮之後,一定要看其中的README或INSTALL檔案 通常在編譯原始檔時,可能會需要下列套件,但通常因為distribution預設不安裝「Kernel Development」以及「Software Development」,因此有可能會導致編譯失敗 Kernel sources files make , autoconfig等套件 gcc等compile
命名規則
套件名稱-版本編號-發行次數.壓縮格式 => zip-2.2-3.tar.gz
安裝
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 為 Mandrake 公司發展出來的線上升級程式,可以自行選擇媒體來進行套件升級 。 每個 Mandrake 釋出的 RPM 都會附上一個 hdlist.cz 的檔案來記錄 RPM 的相關性,這個檔案放置的位置依版本而有不同 版本10.1之前放在 RPMS的上一層目錄base下 (../base/hdlist.cz) 版本10.1開始改放在RPMS的media_info目錄下 media_info/hdlist.cz)
可寫成script放在/etc/cron.daily下,以便自動執行
echo "/usr/sbin/urpmi.update -a ; /usr/sbin/urpmi --auto --auto-select" >>/etc/cron.daily/urpmi-update
chmod 700 /etc/cron.daily/urpmi-update
使用 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 )
由於 RPM 所管理的套件在安裝的時候必須要考慮到不同套件之間的相依性,這在系統管理員處理系統的升級/更新上面是很討厭的!為了克服這個問題,所以有 APT/YUM 之類的計劃出來。它會自動計算相依性,判斷哪些應該安裝,哪些則不必。 APT ( Advanced Package Tool ) 是由connectiva 這家公司移植自Debian GNU/Linux 的,而YUM ( Yellow dog Updater, Modified ) 則是由Duke University 所發起的計劃之一,這兩者的目的都是『 為了要解決安裝 RPM 套件時的屬性相依問題!』,而不是額外再建立一個套件安裝模式。
修改連線設定
/etc/yum.conf 放置 YUM的主要設定,例如yum 會連核心rpm檔都會更新,若不想如此,可在 [main]區段 中加入
exclude=kernel kernel-source
從 /etc/yum.conf 的最後一行得知,升級套件位置可放在這個主要設定檔中也可放在 /etc/yum.repos.d 目錄下。 /etc/yum.repos.d 目錄下的預設的設定檔意義如下。 fedora-core.repo:定義Fedora核心套件的位置 fedora-updates.repo:定義Fedora升級套件的位置 fedora-extras.repo:定義Fedora擴充套件的位置 fedora-legacy.repo:定義Fedora舊有套件的位置 fedora-development.repo:定義Fedora發展中套件的位置(不建議設定) fedora-updates-testing.repo:定義Fedora測試中套件的位置(不建議設定) fedora-extras-development.repo:定義Fedora擴充套件的發展版本位置(不建議設定)
以下為設定範例 原先預設的伺服器是用國外的站台,所以連線會比較慢,故路徑可用 # 註解掉,改填較近的伺服器,台灣常用的站台如下 義守大學:http://ftp.isu.edu.tw/pub/Linux/Fedora/linux/ (Fedora 官方認可的台灣區 mirror 站) 新竹縣教網中心:ftp://apt.nc.hcc.edu.tw/pub/fedora/linux/
$releasever 是變數,會自動替換成 core 的版本,例如:4 或 5 $basearch 是變數,會自動替換成核心種類,例如:i386 或 i686
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必須花比較久的時間,因為yum必須檢查伺服器上所有header資料; 完成之後,往後執行 yum check-update就會很快了。 在使用yum升級系統之前,基於系統安全性考量,yum需要所有RPM套件的GPG認證金鑰,認證升級RPM套件的完整性之後,才能安全地幫您自動升級系統,所以您必須先載入Fedora DVD安裝光碟的RPM-GPG-KEY與RPM-GPG-KEY-fedora這兩個GPG認證金鑰檔案,才能執行yum update自動升級所有RPM套件。
# 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 ,可集合數個較小的網路形成較大的網路。
特殊位址
本網路位址(this net):每個網段中,主機位址全為0者 本網路廣播位址(broadcast address):每個網段中,主機位址全為1者 預設路徑(default route) :0.0.0.0/8用來表示未指定路由方式時的路徑處理方式 繞回位址(loopback address) :127.0.0.0/8用來表示電腦本身的位址 私有位址(private address):在A~C等級各有一段保留位址(reserved address) 10.0.0.0 ~ 10.255.255.255 (10.0.0.0/255.0.0.0 => 10/8) 172.16.0.0 ~ 172.31.255.255 (172.16.0.0 / 255.240.0.0 => 172.16/12) 192.168.0.0 ~ 192.168.255.255 (192.168.0.0 / 255.255.255.0 => 192.168/16)
通訊埠編號(port number)
每一個IP對外連接時都包含有一個16bits的通訊埠編號,定義在/etc/services這個檔案裡面
公認通訊埠(well-known ports):由IANA正式定義的標準,從port 1 ~ 1023,需由root才能啟動。 註冊端口(Registered Ports):從port 1024 ~ 49151。 動態和/或私有端口(Dynamic and/or Private Ports):從port 49152 ~ 65535。
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
上網方式設定
電腦要能夠上網,必須設定以下內容
ip:設定檔: /etc/sysconfig/network-scripts/ifcfg-eth0 netmask:設定檔: /etc/sysconfig/network-scripts/ifcfg-eth0 broadcast:設定檔: /etc/sysconfig/network-scripts/ifcfg-eth0 gateway:設定檔: /etc/sysconfig/network DNS:設定檔:/etc/resolv.conf
/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
# 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
/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啟動的方式有兩種
stand-along:佔系統資源,反應較快 super daemon :不佔系統資源,反應較慢
系統安全
Linux 的安全設定約略分成三部份, inetd, TCP_Wrappers 跟 Firewall. Linux 承襲 Unix 系統管理方式, 內建有 inetd 及 TCP_Wrappers.
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 查看登入失敗的使用紀錄
w 查看目前在線名單
/etc/inittab   更改runlevel id:5:initdefault
/etc/sysconfig/i18n   更改ls顯示時的建檔日期亂碼 LC_TIME=en
/etc/protocols   通信協定定義檔
/etc/services   連接埠定義檔
/etc/rpc   遠端程序呼叫定義檔
/etc/hosts   主機名稱與ip的對應檔
/etc/sysconfig/network-scripts/ifcfg-eth0   eth0網卡設定檔
/etc/resolv.conf   DNS設定檔 nameserver 168.95.192.1
/etc/exports   NFS設定檔
常用套件的設定工具
雖然說懂得調整設定檔是橫跨不同血統Linux最好的方法,但不同的Linux發行套件各自都出了一些好用的工具,以下列出常用的工具名稱。 看起來SUSE最聰明了,用一個yast就幾乎解決了。
Mandrake(Fivestar) Fedora Suse
相關設定檔
基礎設定工具 drakconf setup yast
啟動音效 draksound,alsaconf sndconfig
XWindow設定 XFdrake Xconfigurator sax2 /etc/X11/XF86Config XF86Config-4
套件更新 urpmi,rpmdrake yum,apt-get yast /etc/urpmi/urpmi.cfg /etc/yum.conf
網路設定 netconf netconfig yast /etc/sysconfig/network /etc/resolv.conf /etc/hosts /etc/sysconfig/network-scripts/ifcfg-eth0
關閉、啟動服務 chkconfig ntsysv yast
Kernel核心 x.y.z
音量大小 kde 選單 > 設定 > kde > 音效 > sound system > 核選第一個進入 kde 啟動aRTs音效(其他不動) > 確定 kde 選單 > 設定 > mandrake 控制中心 > (左二)硬體清單 > harddrake
> soundcard 下方一行 請用滑鼠點選你的音效卡晶片型號 > 點對話方塊右下角 執行設定程式 kde 選單 > 多媒體 > 音效 > Aumix 設定音量 或 KDE本身的kmix(命令列模式:aumix,kmix)
在開機後執行指定的程式 於/etc/rc.d/rc.local中指定
開放原始碼 Open Source Software/Free Software Free Software Foundation所提出的Copyleft
找尋檔案 Mandrake xwindow:K選單/應用程式/檔案工具/找尋檔案 shell:
Fedora xwindow: shell:
新增使用者 Mandrake xwindow:K選單/設定/其它/UserDrake使用者管理 shell:adduser
開機片製作 DOS:rawrite (rawrite file.img A:) Linux:dd (dd if=file.img of=/dev/fd0) Mandrake Xwindows:設定/Mandrake控制中心/開機/開機磁片
開機設定 Mandrake Xwindows:設定/Mandrake控制中心/開機/開機選項
設定印表機與掃描器 Mandrake Xwindows:設定/Mandrake控制中心/硬體清單
設定ADSL或數據機上網 Mandrake Xwindows:設定/Mandrake控制中心/網路服務/網路連線
設定Konqueror征服家的首頁 設定/設定Konqueror征服家/檔案管理員/行為/家URL(U)
高段技法
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):
LC_COLLATE: 該地區文字排序規則,以及正規化表示式 (regular expression) 的比對依據。 LC_CTYPE: 該地區所使用的編碼系統、字集、與文字分類、轉換等資訊。 LC_MESSAGES: 各應用程式區域化的訊息顯示。 LC_MONETARY: 該地區所通行的貨幣格式。 LC_NUMERIC: 該地區所通行的數字表示格式。 LC_TIME: 該地區所通行的時間、日期表示格式。 LC_ALL: 此類別可以一次設定以上所有的類別。 LANG: 作用類似 LC_ALL,也可用來一次設定所有的 locale 環境。
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
改為
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
檢查網址是否失效
假設我們有一堆網址想要每天檢查它是否失效,可利用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
需先將電腦 BIOS 裡開機順序設為「CDROM 第一優先」(這個動作只需做一次),儲存設定後放入光碟,重新啟動電腦 光碟開機第一個畫面會出現 boot: 提示符號,等候 30 秒以便輸入參數 以一般使用者 knoppix 身份進入圖型操作模式:按 Enter 以 root 身份進入圖型操作模式:root 文字操作模式: root 2 讓KNOPPIX自動去尋找設定檔:root myconfig = scan | /mnt/floppy 讓KNOPPIX自動去尋找家設定檔:root home = scan 設定螢幕解析度: root screen=800x600 | 640x480 設定不支援的顯示卡:root fb1024x768 / root fb800x600 [不]使用LCD螢幕:root nolcd | lcd 載入文鼎字型至記憶體:root ttf2ram 筆者常用的啟動參數:root screen=800x600 myconfig = /mnt/floppy ttf2ram nolcd
儲存設定
請在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)
設定檔:/etc/apache/httpd.conf 網頁目錄:/var/www/ 啟動:/etc/init.d/apache start 關閉:/etc/init.d/apache stop
vsftpd 檔案傳輸伺服器(very secure ftp daemon)
設定檔:/etc/vsftpd/vsftpd.conf 或 /etc/vsftpd/vsftpd.conf anonymous_enable=NO chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list
網頁目錄:/var/ftp 啟動:/etc/init.d/vsftpd start 關閉:/etc/init.d/vsftpd stop 帳號禁用檔 : /etc/ftpusers 或 /etc/vsftpd.ftpusers (記載於/etc/pam.d/vsftpd)
設定可參考:加強 VSFTP的安全性
Linux 系統管理教學
課程規劃:
教材:鳥哥的LINUX私房菜 上奇出版 時間:單週(二四), 雙週(四) pm2:00-5:00
課程內容 有效學習
如何善用現有資源發揮組合的力量、學習命令列的好處、 GNU與自由軟體介紹
基本概念
UNIX / Linux發展歷史、各種LinuxDistribution介紹、基本指令使用、求助方式
檔案系統
檔案系統管理、檔案掛載
帳戶管理
使用者帳號管理
命令稿
vi文字編輯器、Shell script、正規表示式 (grep, sed)
套件管理
安裝(執行檔或原始檔)、更新、刪除, 檔案壓縮
網路基礎
網路架構、 TCP/IP介紹
網路服務
系統工用程式和工具(arp,ifconfig,ping,traceroute) 、結業考
Linux考題
結業考成績公佈
網路資源
GNU/Linux 初學之旅 Study Area鳥哥的 Linux 與 ADSL 私房菜LPI課程講義網路農夫 -- UNIX 自由共享文件臥龍小三的首頁Linux 首頁(中興大學吳賢明老師)Ask Linux(Linux 答客問)摩扥學園SLAT 軟體自由協會SourceForgeRpmfindFreshmeatFreshrpmsLinux InternationalLinux TodayGNU‘s Not UnixThe Linux Documents Project用Open Source工具開發軟體Linux伊甸園Unix 系統簡介 IBM: Linux 所有文章 王垠的個人主頁學生用伺服器建置流程(Fedora Core 5 版)網誌/2005-06-16/160606_CLE 主機上的 FC4 APT/YUM Repository
from: http://irw.ncit.edu.tw/peterju/