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 大概完全沒想到當初被他視為個人興趣的程式,在幾年以後會有超過億萬個使用者,由他自己帶頭開發的作業系統現在已經在世界各地受到普遍的歡迎。而Red Hat Linux 1.0 更在1994年3月14日釋出後,大大幫助一些新入門的使用者。

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系統對於大小寫字母是有區別的。
  • 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)
核心模組

電腦硬體與週邊

核心功能

Linux 核心網址:http://www.kernel.org

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),程序的錯誤不會影響到核心的運作

套件(Distribution)

完整的套件一覽

  • 常見的版本有Mandrake , Fedora , Debian , SuSE , Slackware , Gentoo , Trustix , Knoppix
  • Mandrake:所有套件中最具有親和力的一種,收錄的軟體不但快也很新。
  • Fedora:特色為安裝快速方便,由RedHat套件分離出來,使用的package管理系統rpm(RedHat Package Manager)廣為流傳與使用。
  • Debian:大家公認結構最為嚴謹的套件,有自己的package管理系統dpk(Debian Package)。
  • SuSE:德國發展的套件版本,現已為Novell收購。
  • Slackware:完全手工打造,建議老手使用。
  • Gentoo Linux:提供相當便利的 Portage 軟體套件管理系統
  • KNOPPIX Linux Live CD :一片活的CD, 由Debian改裝而來
  • Trustix Secure Linux :著重於安全與穩定的 Linux 套件

Linux安裝

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

建議硬體

  • 586cpu
  • 128mb 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磁柱(8GB)的支援, 若未支援1024磁柱時,系統的核心需放置在1024磁柱之前/boot目錄大約保留300MB就夠了
  • 以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開機流程

  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  

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

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
   
file 檢查檔案的格式 -z:檢查壓縮檔內的檔案的格式 file /etc/passwd
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.....

檔案系統

  • 檔案系統(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 這個檔案系統配置檔 。
  • /etc/fstab 使用特別的語法。每一列包含六個欄位,以空格(一個以上)、tab或兩者同時用來分隔。
    • 第一個欄位設定 分割區 的位置(裝置的路徑)
    • 第二個欄位設定分割區要在哪個 掛載點 被掛載
    • 第三個欄位設定分割區的 檔案系統
    • 第四個欄位設定 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 block
    ext3檔案系統中的第一個區塊(block) ,含有啟動程式,負責載入核心
  • super block
    負責記錄檔案系統的配置方式,例如:i-node數量,可用區塊數量等
  • i-node(index-node)
    i-node負責記錄一個檔案的資訊,但一個檔案可以有多個i-node來指向它,記錄的資訊有
    • 檔案大小
    • 使用者id:UID
    • 群組id:GID
    • 檔案存取模式:讀取、寫入、執行等
    • 連結的數量:指向的檔案同時有多少個i-node也指向它
    • 檔案最後修改時間
    • 磁碟區塊位址:檔案實際存放的data block位址
    • 間接區塊位址:檔案大小超過一個i-node時的儲存位址
  • data block
    資料實際儲存的地方,大小為512bytes的倍數 ,預設為4096bytes

與分割相關的指令

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」等,雖然說子目錄的名稱可以隨意建立,但有些目錄的存在是有特殊功能或某些目錄的存在是慣例了的緣故,因此不可隨意更改其名 稱,但除了那些為人所知的目錄之外,存放檔案是否有一套標準呢?為避免不同的套件發展後,在檔案系統的命名與習慣不統一,造成使用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開機片
    #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 <<EOF > 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 <<EOF
    > device (fd0) /dev/fd0
    >root (fd0)
    > setup (fd0)
    > quit
    > EOF

檔案目錄操作

命令

意義

常用參數 範例
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
rm 檔案[1..*]
刪除檔案(remove)
-i, -r ,-f rm -rf test
cp 來源檔[1..*] 目的檔
複製檔案(copy)
-a, -R  
cat 檔案[1..*]
連接/顯示檔案( catenate )
   
tac 檔案[1..*]
將檔案內容由最後一行往前顯示
   
less 檔案
分頁顯示檔案
   
more 檔案
分頁顯示檔案(頁尾自動跳離)
   
mv 來源檔[1..*] 目的檔
搬移/更改檔案或目錄(move)
-b  

檔案比較

命令

意義

常用參數 範例
diff 檔案1 檔案2
進行二檔之比對:顯示差異處
   
comm 檔案1 檔案2
進行二檔之比對:相同與差異處皆顯示
相同的行:顯示時會被加上有兩個Tab
不同的行:沒有Tab的是左邊檔案,一個Tab的是右邊檔案的內容
-1: 不顯示左邊檔案的內容
-2: 不顯示右邊檔案的內容
-3:不顯示比對相符的內容
 
cmp 檔案1 檔案2
進行二檔之字元比對
   
sum 檔案1 檔案2
對檔案的檢查碼作檢查顯示
   

檔案搜尋

命令

意義 常用參數 範例
find 起始目錄 依條件搜尋
實際搜尋硬碟去查詢檔案名稱
   
locate 檔案
配合資料庫察看檔案位置
updatedb  
which 檔案
搜尋執行檔
根據path  
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
  • 檔案擁有者:此檔案或目錄的擁有者
  • 檔案所屬群組:此檔案或目錄所屬的群組
  • 檔案容量:檔案的大小
  • 檔案最後被修改的時間:顯示建檔日或最後修改日期(月日時)
  • 檔名:檔案名稱 //以. 開頭的為隱藏檔

改變檔案的權限

命令

意義 常用參數 範例
chgrp 群組名稱 檔案/目錄
改變檔案所屬群組
(change group)
/etc/group中需有定義群組名稱  
chown 帳號名稱 檔案/目錄
chown 帳號名稱:群組名稱 檔案/目錄
改變檔案擁有者
(change owner)
/etc/passwd中需有定義的使用者
-R:含子目錄
 
數字型:chmod 755 檔案/目錄
文字型:chmod u=rwx,g+wx,o-x
檔案/目錄
改變檔案的rwx權限
-R:含子目錄  
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

帳戶管理

Linux對於使用者與群組的管理 ,採用類似DNS的助憶方式,即將使用者與群組帳號名稱改以ID來處理,使用者帳號轉換為UID,群組帳號轉換為GID,可觀察/etc/passwd的第3,4個欄位得知

文書處理器

  • 常用的文書編輯器有 vi, emacs, nano, pico, jed, 或 joe等。
  • vi / vim是linux上最普遍的文書處理器,在所有的distribution都有,所以要好好的學習它


一般模式

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使用

  • 變數名=變數值 : 設定自訂變數,例如: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"
\ 倒斜線
  1. 使下一個字元失去其特殊作用,僅能代表字元本身
    echo \$PATH
    touch This\ is\ a\ file
  2. 斷行
    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的執行流程

壓縮指令

  • 常見的檔案壓縮、打包工具
    • compress, gzip, bzip2, tar
    • lha , zip, rar
  • 壓縮工具分類
    • 針對個別檔案進行壓縮:compress, gzip, bzip2
    • 針對一群檔案進行打包:tar
    • 針對一群檔案進行打包並壓縮:zip, rar ,lha

命令

意義 常用參數 範例
compress 壓縮檔案為.Z //僅能壓縮單一檔案 -d:解壓縮 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   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./
  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

正規表示式初級考試題庫

套件管理程式

  • 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 套件時的屬性相依問題! 』,而不是額外再建立一個套件安裝模式。
  • ※ yum 會連核心rpm檔都會更新,若不想如此,可編輯 /etc/yum.conf 設定檔,並在 [main] 中加入
    exclude=kernel kernel-source

修改連線設定

  • /etc/yum.conf的內容共分成四段:base、updates-released、update-testing、以及development
  • base 是定義Fedora安裝光碟套件的位置,updates-released是定義Fedora升級套件的位置,後面update-testing與 development則是測試與發展中套件的位置。我們只要定義base與updates-released的網址即可,因為update- testing與development套件可能還有錯誤會造成系統不穩,除非您是開發測試人員,否則不用安裝這些套件。再來請把原先系統預設的伺服器路 徑以 # 註解掉,然後改填入離您較近的伺服器即可,請將base與updates-released段落中baseurl= 設成中山大學的伺服器,因為預設是用國外的站台,所以連線會比較慢

    #vi /etc/yum.conf

    [main]
    ......
    #.....
    [base]
    name=Fedora Core $releasever - $basearch - Base
    baseurl= http://ftp.cdpa.nsysu.edu.tw/Linux/Fedora/linux/core/ $releasever/$basearch/os/

    [updates-released]
    name=Fedora Core $releasever - $basearch - Released Updates
    baseurl= http://ftp.cdpa.nsysu.edu.tw/Linux/Fedora/linux/core/updates/ $releasever/$basearch/

  • 可依上述指令將YUM升級網址放在/etc/yum.conf,也可另存成檔案放在/etc/yum.repos.d目錄

    #vi /etc/yum.repos.d/fedora.repo
    #vi /etc/yum.repos.d/fedora-updates.repo

啟動 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 update [套件1] [套件2] [...]
yum update
安裝套件
 yum install 套件1 [套件2] [...]
yum install nmap
移除套件
 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

子網路遮罩(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
故兩者屬於同一個網段

自然遮罩(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

CIDR (Classless Inter-Domain Routing)

為了能更有效率地分配IP位址,一種稱為CIDR的新定址法被提出,又稱為sub net,此法借用host address給net address以增加net mask ,可針對IP作更有效率的分配

計算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範圍

特殊位址

  • 本網路位址(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 -
DNS53-
DHCP server 67  
DHCP client 68  
HTTP Server 80443
POP3 110 995
NNTP Server 119 -
IMAP4143993
IRC194-
LDAP389636

上網方式設定

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

  • 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.ncit.edu.tw

nslookup [ip/hostname]

DNS lookup

從DNS server查詢 IP address對應的FQDN或反查
  nslookup www.ncit.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 :不佔系統資源,反應較慢

系統安全

  • 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

重要設定檔

相關指令 設定檔 意義 內容
last /var/log/wtmp 查看登入成功的使用紀錄  
lastb /var/log/btmp 查看登入失敗的使用紀錄  
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設定檔  

套件的設定工具

  Mandrake(Fivestar) Fedora Suse

相關設定檔

基礎設定工具 drakconf setup 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 netconfig yast
  1. /etc/sysconfig/network
  2. /etc/resolv.conf
  3. /etc/hosts
  4. /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.ncit.edu.tw/
gen.ncit.edu.tw/
gen.ncit.edu.tw/AE/
glmrc.ie.ncit.edu.tw/
idtm.ncit.edu.tw/
iee.ncit.edu.tw/
irw.ncit.edu.tw/
linux3.ncit.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 隨身碟

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)

  • 設定檔:
  • 網頁目錄:
  • 啟動:

arrow
arrow
    全站熱搜

    Bluelove1968 發表在 痞客邦 留言(0) 人氣()