2011年10月12日 星期三

建議先熟悉的幾個指令及架構


這裡不做詳細說明,只做舉例式的說明,以馬上能用為原則,要詳細請看 man pages、info pages、HOWTO 文件或書籍裡頭的說明。最重要的是,您要親自去操作看看。剛開始學習時由於規則不熟悉,會很不習慣,但可以把一些常用到的 tips 收集起來,就像以前學英文時先由句型著手一般,而且,盡量由指令的完整原文來記憶。如果您是在 GUI 的環境下,請開個終端機(rxvt/xterm...),來試試看。請千萬記得 Un*x 的哲學,工具的組合,所以有許多指令是可以組合在一起來使用的。
  1. uname 
    這是得知所用系統資訊的指令。包括使用的是什麼系統、kernel 版本……等等。
    uname uname -a
    請馬上就試試,會有什麼結果出現。
  2. locate 
    這是快速尋找檔案的指令,請試試 locate locate 看看。這行指令,前面的 locate 是指令,後面的 locate 就要去尋找的檔案名稱(出來結果會含路徑在內)。如果跑出來一大堆的結果,那可以使用 more 來將輸出的東西分頁暫停,例如:
    locate locate | more
    這樣,locate locate 的結果,就會透過管線21,導引給 more 這個過濾器來做進一步的處理。這樣一來每輸出滿一頁,就會暫停,按 Space 鍵又會繼續下一頁,可參考 man more 或本節第 11 項的說明。如果 locate locate 時有錯誤訊息出現的話,請用 updatedb 更新一下系統資料庫。比較複雜的條件式搜尋,請研究一下 find 指令。
  3. > 及 >> 重導 
    重導(redirect)的功能在 Un*x 系統吃很重的份量,通常可以使用管線的時機都可以使用這種重導的方式,將結果導入實際的檔案中。例如上面所舉的 locate 的例子,也可以:
    locate locate > locate.lst
    這樣一來,本來是在螢幕顯示的內容,現在被導向進 locate.lst 這個檔案內了,這樣就可以將這個檔案做進一步的處理或備份、保存。那兩個 >> 又是什麼呢?和 > 一樣,但是不會去除原來檔案的內容,而是附加上去。有一個很特殊的使用方法,那就是把一個檔案的內容清掉:
    > locate.lst
    這樣會把 locate.lst 這個檔案的原來內容清掉,成為一個空檔案,簡單的思考方式就是,你把沒有的東西導入一個檔案內了,而 > 本就會先將原來的內容清掉。
  4. which 
    尋找系統上的指令,是否在目前路徑22所及之處,例如,想知道 ls 這個指令系統上有沒有,如果有的話,是在哪裡,就可以下 which ls。這個 which 用的相當頻繁,參數設得好的話,甚至連 alias 都會顯示。一般的 distro 會在 /etc/profile.d/which.sh 設定好。例如:
    alias which='alias | /usr/bin/which --tty-only \
                 --read-alias --show-dot --show-tilde'
    
    這樣一來,每次執行 which 就會預設加了這些參數。請別忘了 man which
  5. alias 
    這個是 bash 內建的指令,作用是替某些指令取別名,使用上較方便,例如第 4 項的 which 就是一個很好的例子。通常,目前的 distro 都會幫您設定了一些預設的 alias,不過,不一定合您需要就是了。畢竟 alias 是非常個人化的東西,除非是系統上的需要,是沒有必要整個系統預設的,以免本尊、分身混淆不清。像我自己的 ~/.bashrc23 就設了一堆,但其他人不一定會和我的用法一樣吧?
    # .bashrc
    alias m='mount' 
    alias rm='rm -i'
    alias cp='cp -i'
    alias df='df -h'
    alias du='du -h'
    alias v='ls -l -F --color'
    alias d='ls -F'
    alias um='umount'
    alias telnet='telnet -8'
    alias l='locate'
    alias zg='zgrep'
    alias g='grep'
    alias bz='bzip2'
    alias gz='gzip -9'
    
  6. find 
    這是進階的找尋檔案的指令,在要找特定的檔案時很好用,對找到的檔案也可以加上一些特殊的處理。可加上不同的參數為條件來搜尋,但搜尋時間可能會久些,除非必要,不然,使用 locate 可能會更方便。
    find . -name "*.tmp"
    尋找目前目錄及其子目錄,副檔名為 tmp 的檔案
    find . -name "*.tmp" -exec rm {} \;
    同上,但找到後執行刪除動作
    
    英文句點代表現行目錄,當然也可以改成其他的目錄。其他,也可以找特定大小,或特定時間建立的檔案,就請各位研究一下 man find 了。
  7. grep 
    這個也是搜尋工具,但他找的是檔案內容是否含有某些字串。
    grep Linux *
    找目前目錄(不含子目錄)所有含有 Linux 字串的檔案
    grep -r Linux *
    同上,但會連子目錄也去找
    
    這個指令常和其他的指令組合起來使用,例如,前面所舉的 locate locate,我們就可以再分析一下,以便縮小搜尋範圍:
    locate locate | grep bin
    只找含有 bin 字串的 locate,這樣就會縮小至 bin 目錄的範圍(會有例外的情形)。
    locate locate | grep doc
    同理,要找 locate 的相關說明檔時,就可以這樣使用
    locate locate | grep doc | more
    這樣也行!
    
  8. man (manual) 
    這是看 manual pages 線上說明的指令。請試試 man locate 看看。按 h 來看操作說明,有空的話就 man man。請善用 man -k(或 apropos) 來找系統上的指令。例如要找 ftp 的相關指令 man -k ftp 就會列出一堆出來。
  9. info(information) 
    比 man 更強大的線上說明的指令,通常 man 主要是把程式的用法(如使用哪些參數代表什麼意義)列出來,而 info 會說得更詳細,有時連它的發展史都會有。不過並不是每個程式或軟體都會提供 info 的說明,此時 info 就直接把 man 的說明拿來用了。請試試 info ls  man ls 的說明有什麼不同。按 Ctrl + h來看操作說明,有空的話就 info info。有個 pinfo 指令,但可能系統上沒有,找看看您的光碟上有沒有,可取代 info 指令,操作較簡便,而且有彩色。
  10. ls (list) 
    這就是 DOS 裡的 dir 指令,意思就是 list 啦!功能比 dir 強多了!ls 的參數相當多,別忘了 man ls,找些您喜歡的參數試試看。
  11. cat (concatenate) 
    可以顯示檔案內容或結合數個檔案成為一個檔案。
    cat bg5.txt 顯示 bg5.txt 的內容。 
    cat 1.txt 2.txt > 3.txt 將 1.txt 及 2.txt 合併成 3.txt。
  12. more (and less) 
    這在 DOS 裡也有,不過功能不可同日而語。壓縮檔請改用 zmore  zless (*.gz, *.Z)  bzmore  bzless (*.bz2)more /etc/profile  cat /etc/profile | more 兩種方式皆可,後者的用法,在不是檔案的情形會用得到,例如,ls -l | more 就是一例,ls 是指令,他的輸出引導(就是那個 `|')給 more 來處理。less  more 幾乎是同樣的功能,只是 less 是較後發展的,改進了一些 more 不方便的地方,例如向後翻頁,man 的分頁機制,靠的就是 less
  13. gzip, bzip2, tar 
    這是 Un*x 系統常用到的壓縮、打包的工具,請務必要先熟悉,在網路上下載的檔案有許多都是 *.tar.gz, *.tar.bz2, *.tgz 的格式,您要解開就要利用到這些工具。
    tar zcvf test.tar.gz test/
    將 test 目錄的所有檔案打包成 test.tar.gz
    tar zxvf test.tar.gz
    將 test.tar.gz 解開至 test/ 目錄下,會自動建立目錄
    
  14. wget (web get) 
    這是抓檔的工具,如果沒有安裝,把您的安裝光碟 mount 上來,裝上去,http, ftp 上的檔案都可以抓,整個網站抓下來也沒問題。一般使用很簡單:
    wget ftp://xxx.xxx.xxx/target.tar.gz 
    wget -c ftp://xxx.xxx.xxx/target.tar.gz(續傳) 
    wget -spider ftp://xxx.xxx.xxx/target.tar.gz 
    不下載,只是看檔案存不存在 
    wget http://xxx.xxx.xxx/target.tar.gz 
    wget -m -np http://xxx.xxx.xxx/target.html 
    將以 target.html 為中心的整個相關案抓下來,m=mirror,np=no parent 不抓上層目錄的檔案。
    man wget 裡頭有相當多的實例供參考,也有 gwget 的 GUI 界面供使用。
  15. ln (link) 
    ln -s orig.txt link.txt 將原存在的 orig.txt 建一個連結檔 link.txt。有如 Windows 系統中的捷徑 (shortcut) 一樣。不加 -s 的話,則是硬連結(hard link),除非找出他的 inode (ls -i),不然,無法分出誰是分身,誰是本尊。請千萬注意,原始檔(orig.txt)在前面,連結檔(link.txt)在後面。
  16. chmod (change mode) 這是改變檔案權限的指令。在 Un*x 系統中,檔案權限的觀念很重要,權限不對,可能會打不開檔案而無法編輯,執行檔的話,會無法執行。
    chmod +r test  使檔案可讀(read)
    chmod +w test  使檔案可寫(write)
    chmod +x test  使檔案可執行(eXecute)
    使用 + 號就是加入所指定的權限,使用 - 號,就是去除所指定的權限
    
    權限的問題當然沒那麼單純,這個問題往後會另立專章詳細說明,以上只是這篇文章上會用到的。您可以先試試 man chmod  info chmod,想瞭解檔案權限的話,可以 info fileutils 詳讀 File permissions 那個章節。如果使用 GUI 的檔案管理程式,那大概這些權限都被包起來了,可以由視窗中很容易就進行更改,當然,大量檔案的權限改變還是要在命令列來執行比較有效率。
  17. mkdir (make directory) 
    這是建立目錄的指令。使用上很簡單,mkdir test 就會在目前的目錄下建立一個 test 子目錄。
  18. rm (remove) 
    這是刪除檔案或目錄的指令。在 Un*x 系統裡頭,檔案一旦刪除就很難回復,所以,請小心使用,一般都會像我在前面所設的 alias 一樣,加上 -i 參數,這樣每次的刪除檔案時,系統就會要求確認,多了一層保障。刪除目錄的話,要多加個 -r 參數,如果已再三確定這個目錄通通要刪除,檔案多,又有子目錄的話,由於加了 -i 參數,會一一要求確認,兩會煩不勝煩,這時可以使用 rm -fr 來強迫刪除目錄,而不做確認。
  19. mv (move) 
    這是移動檔案或目錄的指令,包括更改他們的名稱。例如:
    mv test.tex test.txt
    將檔案 test.tex 改名為 test.txt
    mv back bak
    將目錄 back 改名為 bak
    mv test.txt /tmp/test.txt
    將 test.txt 由目前目錄移至 /tmp 目錄下
    
  20. telnet 
    打 BB 嗎?telnet bbs.xxx.xxx.xxx 就可以了!當然您要先有中文終端機,例如:chdrv, jmcce, crxvt...等等。而且要有中文輸入法,chdrv, jmcce 就有附,crxvt 的話可配合 xcin 來輸入中文。如果碰到亂碼,可使用 telnet -8 參數試看看。
  21. mount/umount 
    這是一個和 Windows 系統很不一樣的觀念。在 Linux 裡頭,所有設備都是視做檔案的,就在 /dev 目錄下。像 /dev/hdc 是我的 IDE CD-ROM,平常就是和/dev/cdrom 連結在一起,在開機進入 Linux 系統時,預設只會掛(mount)上 root 檔案系統,其他的就要看 /etc/fstab 裡頭是否有設定,有的話,也會掛上來,沒有的話,就要手動了。好了,我的 /etc/fstab 有一行是記載:
    /dev/cdrom /mnt/cdrom iso9660 noauto,owner,kudzu,ro 0 0
    因為有 noauto 的設定,所以不會自動掛上來。要掛上來時,只要下:
    mount /mnt/cdrom
    即可。如果沒有事先在 /etc/fstab 設定,那就得自行指定,例如:
    mount -t iso9600 /dev/cdrom /mnt/cdrom
    或
    mount -t auto /dev/cdrom /mnt/cdrom
    
    要注意的是,/mnt/cdrom 這個目錄要事先就建立好,而且前面的是 device,後面的才是磁碟上的目錄,千萬不要搞錯了。-t 主要是指定檔案系統 (file system type),不指定或指定 auto  mount 會自動去判斷。相對的指令就是 umount 了。
    umount /mnt/cdrom
  22. ps (process status) 
    這是觀察目前系統所有載入的所有行程(process,暫時想像成載入記憶體的程式)。一般使用 ps aux  ps auxw 即可,其中顯示出來的第二欄 PID 就是 process ID 號碼,系統就是以這個號碼來辨識這支程式而不是原程式名稱。
  23. top 
    這有點類似 ps,不過,他是動態隨系統變動的。而且可以直接在裡頭下必要的指令,可進入 top 後按 h 或 ? 來看一下他的說明。
  24. free 
    這是得知系統記憶體運用的情形。這裡有個問題,是 BBS/news 上常問的 FAQ,那就是我的 free 欄位怎麼那麼少?我明明有 1GB 的 RAM 呀!不必懷疑,Linux 會拿去自行運用,例如當做 buffer/cache 之類的,你要用到時會馬上還你的啦!
  25. du/df 
    這是觀察硬碟使用的情形,disk usage/disk free。通常我都會加上個 -h 的參數,因為我是人類,那個 h 就是代表 human,這樣會顯示 M/G 等這類單位,比較好觀察。du 的話,比較常用的是加 -s 參數,意思是 sum,只報告總結就好了,不必囉唆的以下子目錄的也列出一大堆出來,試試 du -s /usr(沒那麼快啦!要等他算一下,多工嘛!請先去做其他的事情),然後再試一下 du /usr 看有什麼不同。
  26. kill/killall 
     ps aux 觀察到有某一個程式佔用大量的 CPU,而且執行不正常又不退出來,這時只好請殺手來了。只要找出這個程式的 PID,然後:
    kill PID
    即可。如果還是殺不掉,那就用最厲害的殺手絕招「九陽神功」:
    kill -9 PID
     killall 是幹什麼用的呢?那是比較懶的殺手,不必找 PID,只要知道程式名稱即可,他會把程式名稱轉換成 PID 再傳給系統,例如執行中的 vim,只要下:
    killall vim
    即可,但請小心,這樣一來所有執行中的 vim 都會殺掉。killall 也可以加 -9 參數。
  27. 請先熟悉任一種編輯器 
    在 Un*x 裡頭,有許多檔案的設定,都得自行手動去編輯設定檔,而 Un*x 裡頭的編輯器,實在是多的不像話 :-)。請選個自己認為順手而其他 Un*x 系統也有的編輯器來使用。vi, emacs 這兩個幾乎是 Un*x 系統的基本配備,當然使用上非常有個性就是了!另外還有 joe, pico...等較簡單的。
  28. bash 
    這是 GNU/Linux 預設的 shell,簡單的說,您一進入 GNU/Linux,這個 shell 就負責您和作業系統的溝通的工作,就像 DOS 裡頭的 command.com 一樣。光這一個 shell 要詳細的話,就可以出一本書,您一有空的話,不妨 man bash 或 info bash,熟悉一下,一些有關 shell 的環境變數設定,裡頭都會有詳細的交待。bash 的相關問題可以先參考 FAQ: 
    ftp://ftp.cwru.edu/pub/bash/FAQ 
    深入一點的文件: 
    http://www.tldp.org/LDP/abs/html/ 
    學 bash,這個 abs (Advanced Bash-Scripting) guide 文件很值得研究,有相當多的實例供參考,在作者的網頁有 tarball26 可以下載。
  29. 如果使用的是 GUI 介面,那可以叫出 gnome-help-browser 或 khelpcenter (舊版為 kdehelp),可直接叫出然後由選單來選,或加參數,來看一些系統上就有的說明文件,例如叫出 bash 的 man/info:
    gnome-help-browser man:bash 
    gnome-help-browser info:bash 
    khelpcenter man:bash 
    khelpcenter info:bash
    由於 GNOME/KDE 環境並沒有 man/info pages 的說明文件,因此要使用這兩個工具來叫用他們的說明文件,而這兩個工具也是可以解讀 man/info pages 格式,使用上相當方便。
  30. man, info, more, less 的搜尋功能 
    按個 / 然後輸入要找的字串,再按 Enter 即可,按 n (next) 會繼續找,大寫的 N 則是往回(上)找,按 q (quit) 離開。
  31. 偷個懶:指令補全(Tab 鍵)及歷史指令的再使用 
    有人或許會認為使用鍵盤在命令列輸入指令很麻煩,尤其是碰到指令名稱很長的,請多多利用補全鍵,就是 Tab 鍵,只要輸入前面幾個字母,按一下 Tab鍵就會去補全系統中所能找得到的所有可能指令(包括 bash 的內建命令及環境變數27、hostname28、函數、username29)、目錄、檔案名,相當方便。另外上下方向鍵則可以叫出所曾下過的指令,history 這個指令,更可以列出所曾下過的指令歷史清單供選擇,只要在清單號碼前加個 ! 即可執行該整串指令內容。
  32. od 
    這個不必先熟悉,只是提出來「搞怪」一下,好玩用的。你可以 man od,大概看一下內容,然後,思考一下這個指令能幹什麼用?然後再對照一下我底下的應用實例,你會發覺,東西真的是死的,人才是活的。:-)
    echo '你好' | od -t x1 
    這會產生以下的結果: 
    0000000 a7 41 a6 6e 0a 
    0000005
    好吧!葫蘆裡到底是在賣什麼碗糕?沒什麼大學問,只是在查「你好」這兩個字的 Big-5 中文內碼,由以上的結果可以知道,「你」的 Big-5 內碼是0xa741,而「好」的則是 0xa66e。把 x1 改成 a 的話,輸出的結果是所對應的 ascii 字元(請注意,有些是不可見字元,螢幕上不一定看得到)。不相信的話,把 xcin 叫出來,按 Ctrl-Alt-0 轉到內碼輸入法,然後輸入 a741 看看是出來什麼字。

2011年10月11日 星期二

志工與義工有何不同?


       許多人搞不清楚義工不同,其實義工的差別在於自願與否。像許多學校不少義工家長,多少帶半強迫性質,雖也愛心十足,但「不得已」成分居多,得「空」才能付出愛心;則是主動而不強迫的、不求回報且無償付出的、甚至把它視為是一種工作而非玩樂,例如有些工會主動請假去當一日資訊,教小孩電腦等,這就是。     

E世代流行這樣一個笑話:「欲練寶典,必先『自宮』」,所以,誰可以練葵花寶典?答案是:。雖是笑話一則,不過在界流傳來流傳去,許多笑說,當好,因為義工不能練葵花寶典

一日志哪些類別?    


服務包羅萬象,但大致可區分為七大類別:     

一、弱勢關懷:像端午包粽送愛心、關懷育幼院兒童等。     

二、環保服務:例如淨灘、清潔掃地、協助資源回收等。     

三、醫療服務:到醫院當、或者醫療團隊到各需要場所進行義診。     

四、生態保育:例如重型機車隊深入山林排除路障等。     

五、社區服務:以鄰里社群為單位,美化家園,讓社區鄰里關係更親近。     

六、急難救助:如金錢或人力需要,立即啟動前往協助。     

七、資訊服務:到偏遠地區學校、或阿公阿媽資訊班教電腦也是奉獻專長的服務項目之一。


1.志工並不是一個生涯工作者:

所謂生涯工作者,有其生涯目標,例如一個職員,他想升遷,從課員--課長—秘書—主秘等職位,而志工開頭即是平行的進來,其為愛心而做事,不是為將來當幹部而做。所以他的生涯規劃是付出,不是來進階的。

2.志工提供的服務是不支薪的

部分機構會發給志工車馬補助費,因其路程較遠。基本上,志工是不支薪的。

些志工對組織認同度較低,其可自由變換機關,相對地有些志工對組織認同度反比實際工作人員要高,因為他之所以從事志工是發自內心的喜愛,他會不計代價付出,因此認同度較高。所以當一個志工幹部,我們要很清楚志工與職員是不同的,今天我當幹部,並不是來取代他們的工作,是來協助他們共同完成一件工作,這是一個很重要的理念。

志工參與之動機分成下列幾種類型:

1.社會服務志工:主要是以人為服務對象。

2.議題取向的志工:其針對某一議題而加入志工,如環保意識主題、婦權運動之主題等等。

3.完美或自我表現的志工:志工參加志工團體主要目的是為喜悅或個人表現,如義工到科工館、美術館,醫院、孤兒院舉行之表演。

4.職業或經濟上的自我利益的志工:如保險、直銷等,在販售貨物前,會告知顧客各項相關常識,讓顧客免費得知該項常識,在這過程即是志工,惟其最終目的是以利益為主。

5.慈善或基金會的志工:如募款,我們最常見的是慈濟的志工。

 

四、義工需求

1.求取經驗的需求:視志工希望求取之經驗而有所不同,如文化志工和在醫院服務之志工其對經驗之需求不同。

2.表達社會責任感的需求:願意付出曾經工作的經驗、願意付出人生經驗、付出體力、時間來分享其他需要的人。

3.接觸社會的需求:有些志工較少接觸社會層面、漸感與社會脫節,其加入志工,是為擴展自己社會層面。

4.反應他人期望的需求:部分志工是應配偶或公司要求加入。

5.求取未來報償的需求:取得經驗,以作為下一次工作上的歷練或經驗。

6.成就的需求:最終志工追求的是自我實現及一份成就感,其對工作的滿意,他就越能投入工作。