2012年4月20日

Python 教學及程式範例大全


 
先前曾經寫了一篇 Java 教學及程式範例大全
整理了一路走來,我自己遇過的 Java 的問題、學習經驗和一堆範例,
最近也開始碰 Python,所以一樣先放一篇大全,
以後有遇上問題解決後就會更新在這邊。

圖片來源:http://wadah-it.com/programming/python/python-programming-introduction.html/attachment/python-logo

Python 入門用書、電子書:
  1. Python 入門教學書籍、電子書推薦
使用 Python 印資料夾內容:
  1. Python:使用os.walk() 遞迴印出資料夾中所有目錄及檔名
其他總整理類型的文章請見:大全中的大全,文章總整理index

關鍵字:Python, 範例, 例子, 程式, 教學

    舊版 CentOS 光碟映像檔 ISO、套件下載


     
    最近需要 CentOS 舊版的光碟,
    可是幾乎在所有的 mirror 上都找不到比較舊的版本,
    似乎是因為 CentOS 統一只保留幾個較新的版本,
    如我在Linux Mirror List 及 yum 設定整理(含 yum proxy)提到的 mirror site 裡,
    現在都只剩下 CentOS 5.8 和 6.2 兩個版本可以下載,
    其他的資料夾裡面就只有一個 readme。

    圖片來源:http://zirkan.com/tips/mount-external-drive-in-centos/

    然而不管是當學生或是在工作,
    有時候我們還是會需要較舊版本的 CentOS 光碟,
    如果找不到真的會相當困擾 (像我,所以才有這篇文出現嘛 orz)。
    後來找了資料,發現 CentOS 官方有一個網站,
    專門放舊版本 ISO 和 套件:http://vault.centos.org/

    這個網站幾乎可以下載到任何東西,
    唯一比較麻煩的是舊版本 (如5.7以前) 的 DVD iso檔,
    可能是因為怕造成整個網站流量的負擔,
    所以 http://vault.centos.org/ 沒有提供舊版本的 DVD iso 直接下載。
    那如果我們還是需要要怎麼辦呢?

    方法有好幾個:
    1. 我在所有 mirror list 中找到了日本的理化学研究所 mirror site
      上面似乎有每個版本的DVD iso直接下載,速度也不慢,有幾百KB在跑。
    2. http://vault.centos.org/ 要下載版本的資料夾中下載 torrent 檔,
      用 bt 下載 DVD iso,種子很多,速度也很快!
    3. 在非不得以的情況下,我們只好下載所有的 cd-iso 下來,
      再用 CentOS 所提供的 mkdvdiso.sh 將 iso 轉換成 DVD。
    若使用方法3,可以再參考以下步驟:
    步驟一:下載所有光碟 iso 檔,可參考 cURL 批次下載指令教學
    像要下載 CentOS 5.7,cd-iso 共有八片,則可以下以下指令:
    # curl -O http://vault.centos.org/5.7/isos/x86_64/CentOS-5.7-x86_64-bin-[1-8]of8.iso
    
    [1/8]: http://vault.centos.org/5.7/isos/x86_64/CentOS-5.7-x86_64-bin-1of8.iso --> CentOS-5.7-x86_64-bin-1of8.iso
    --_curl_--http://vault.centos.org/5.7/isos/x86_64/CentOS-5.7-x86_64-bin-1of8.iso
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100  627M  100  627M    0     0   141k      0  1:15:26  1:15:26 --:--:--  205k
    
    [2/8]: http://vault.centos.org/5.7/isos/x86_64/CentOS-5.7-x86_64-bin-2of8.iso --> CentOS-5.7-x86_64-bin-2of8.iso
    --_curl_--http://vault.centos.org/5.7/isos/x86_64/CentOS-5.7-x86_64-bin-2of8.iso
    100  632M  100  632M    0     0   101k      0  1:46:27  1:46:27 --:--:-- 81717
    
    [3/8]: http://vault.centos.org/5.7/isos/x86_64/CentOS-5.7-x86_64-bin-3of8.iso --> CentOS-5.7-x86_64-bin-3of8.iso
    --_curl_--http://vault.centos.org/5.7/isos/x86_64/CentOS-5.7-x86_64-bin-3of8.iso
    100  632M  100  632M    0     0  84003      0  2:11:40  2:11:40 --:--:-- 82888
    
    ......
    

    步驟二:用 mkdvdiso.sh 將 cd-iso 轉換成 DVD,
    可參考:[Centos-docs] DVD install create small howto。指令大概如下:
    # 假設 script 在當前目錄,cd-isos 在 cd 子資料夾
    # DVD 要存在 /dvd/ 子資料夾(要是絕對路徑),並命名為 CentOS-5.7-x86_64-bin-DVD.iso  
    # 記得先將 script 指令轉換權限,並以 root 或sudo執行
    chmod 700 ./mkdvdiso.sh
    ./mkdvdiso.sh ./cd/ /dvd/CentOS-5.7-x86_64-bin-DVD.iso
    

    完成以上兩個步驟若一切順利,就可以把 dvd iso產生出來了!
    不過我自己試的時候 script 出現了權限不足的錯誤,
    後來還是用 bt 直接下載 XD

    總之以上的方法應該都有辦法弄到舊版 CentOS 的 iso 和套件,
    供大家參考囉!

    關鍵字:centos, iso, dvd, download, 下載, 舊, 舊版, 過期, 最新, CentOS 5, 6, 5.5, 5.6, 5.7, 5.8, 6.0, 6.1, 6.2, 光碟, 映像檔, 軟體, 套件
    參考資料:

    Citi:花旗信用卡電信用戶專案-好禮16選1


     
    2012.12.29更新:
    據說花旗開放加辦後因電信專案刷卡禮太優惠讓一堆人用此專案申請,
    所以已在 11.26 取消加辦者用此專案拿 16選1的者刷禮,
    現在只要是加辦,無論是何種方案進件,最多都只能拿到 300元刷卡金囉!
    相關討論:[情報] 花旗專案首刷禮,臨時變更內容~要辦的快~

    一般網路辦卡刷卡滿額禮門檻較高,
    似乎是要在一個月內刷滿 7 次且累積達 3000元,
    才送禮享家點數16000點,可兌換的滿額禮項目也較少。
    一般網路申辦滿額禮的項目及規定可以參考:花旗官網說明

    圖片來源:http://www.cool80.com/logo/2009-1-2/huaqi.html

    至於花旗信用卡電信用戶專案,
    先前似乎是叫「遠傳貴賓專案」、「遠傳電信客戶專案」之類的,
    但是其實資格並不限制是遠傳或哪家電信客戶,
    反正只要用這個專案申請進件,一方面核卡禮的門檻低很多,
    另一方面可選擇的項目也比較多,所以廣受大家喜愛。

    最近特地跟專員拿到最新一期的申請書 (2012.10.02版本),
    最重要的核卡禮規定和項目節錄如下:

    2012/12/31前進件,即可獲得好禮十六選一。
    新申辦花旗信用卡,核卡後卡片寄出日起一個月內消費滿NT$399(含)以上,
    花旗既有卡友加辦花旗信用卡,核卡後卡片寄出日起一個月內消費滿NT$999(含)以上

    首刷禮勾選欄(單選):
    請在選項上打v,若無勾選或重複勾選,視同選擇全家便利商店禮券NT$500(587)
    □ 聲寶 食物料理棒 ZS-L1125L(580)
    □ 西華5公升不鏽鋼免火再煮節能料理鍋(581)
    □ Rebacca 20吋硬殼四輪航空箱(582)
    □ Beurer德國博依 典雅歐風玻璃體重計 GS12(583)
    □ 歌林 厚片烤麵包機 KT-R307(584)
    □ 歌林 時尚烤箱5L BO-R051(585)
    □ SOGO禮券NT$500(586)
    □ 全家便利商店禮券NT$500(587)
    □ 刷卡回饋金NT$500(588)
    □ 360度旋轉拖把組(589)
    □ 白朗 9吋氣流循環扇 (592)
    □ iPad/iPhone隨身攜帶充電器 (591)
    □ COOLONE 晶鑽時尚神秘紫 20吋四輪旅行箱 (938)
    □ 白朗高音質全罩耳機FBFH-A06 (974)
    □ 星巴克咖啡兌換券 五張 (975)
    □ 白朗輕便式手提吸塵器FBPC-A03 (976)

    相關文件如下,供大家參考及下載。
    更多信用卡資訊及使用教學,
    請見我所整理的文章:信用卡資訊大全
    花旗信用卡電信用戶專案申請書20121002

    花旗信用卡電信用戶專案DM-201210

    花旗透明卡DM
    花旗現金回饋DM
    花旗饗樂卡DM

    關鍵字:花旗, 遠傳, 電信, 專案
    參考資料:

    2012年4月18日

    cURL 指令用法與教學


     
    cURL 和 wget 一樣是 linux 中檔案下載時非常實用的工具,
    對於大部份的下載工作兩者都同樣能達成,
    curl 比 wget 強大的地方在於他還能支援上傳,
    然而 curl 可以應用的地方和方式太多了無法一一深入介紹,
    所以我先在最下面列出 curl 指令的說明。

    圖片來源:http://www.clipartpal.com/clipart_pd/education/helpmanual_10828.html

    之後若有實際應用 curl 的例子或遇上的問題,
    會再以另外的文章補充在這裡:
    1. curl: (3) [globbing] illegal character in range specification at pos …
    2. cURL 批次下載指令教學
    如果在這邊沒看到如何解決你遇上的問題,
    也可以參考我的另一篇 wget 指令用法與教學
    因為說不定是同樣的問題,只是我用 wget 解決掉了 XD

    curl 指令用法如下:
    Curl Manual

    關鍵字:curl, post, curl linux, curl command, 教學
    參考資料:

    cURL 批次下載指令教學


     
    在先前的文章中有提到,
    cURL 和 wget 一樣是 linux 中檔案下載時非常實用的工具,
    大部份的下載工作兩者都同樣能達成,
    不同的是 curl 還可以支援上傳的功能。
    想知道兩者的用法可以先到我先前整理的文章看一下:
    1. wget 指令用法與教學
    2. cURL 指令用法與教學
    圖片來源:http://web.ee.yuntech.edu.tw/lab/videolab/download.html

    這篇要來說的是 curl 如何支援批次下載,
    原本想說大部份的下載功能 curl 和 wget 都一樣,
    沒想到用 wget 要批次下載時卻出現了這樣的警告。
    「Warning: wildcards not supported in HTTP.」
    「警告: HTTP 不支援萬用字元。」

    原因很明顯啦,就是 wget 的 HTTP 不支援萬用字元的批次下載。
    幸好換到 curl 這個問題簡直就是 a piece of cake。
    只要善用 [ ] 即可,請看以下範例:

    下載單一檔案:
    # curl -O http://xxx.xx/filename.xxx
    
    批次下載編號 1,2~15:
    # curl -O http://xxx.xx/filename[1-15].xxx
    
    批次下載編號 01,02~15,自動補0:
    # curl -O http://xxx.xx/filename[01-15].xxx
    

    這次我用來解決問題的指令和結果如下:
    # curl -O http://vault.centos.org/5.7/isos/x86_64/CentOS-5.7-x86_64-bin-[1-8]of8.iso
    
    [1/8]: http://vault.centos.org/5.7/isos/x86_64/CentOS-5.7-x86_64-bin-1of8.iso --> CentOS-5.7-x86_64-bin-1of8.iso
    --_curl_--http://vault.centos.org/5.7/isos/x86_64/CentOS-5.7-x86_64-bin-1of8.iso
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100  627M  100  627M    0     0   141k      0  1:15:26  1:15:26 --:--:--  205k
    
    [2/8]: http://vault.centos.org/5.7/isos/x86_64/CentOS-5.7-x86_64-bin-2of8.iso --> CentOS-5.7-x86_64-bin-2of8.iso
    --_curl_--http://vault.centos.org/5.7/isos/x86_64/CentOS-5.7-x86_64-bin-2of8.iso
    100  632M  100  632M    0     0   101k      0  1:46:27  1:46:27 --:--:-- 81717
    
    [3/8]: http://vault.centos.org/5.7/isos/x86_64/CentOS-5.7-x86_64-bin-3of8.iso --> CentOS-5.7-x86_64-bin-3of8.iso
    --_curl_--http://vault.centos.org/5.7/isos/x86_64/CentOS-5.7-x86_64-bin-3of8.iso
    100  632M  100  632M    0     0  84003      0  2:11:40  2:11:40 --:--:-- 82888
    
    ......
    
    
    以上就是用 curl 批次下載檔案的方法啦,供大家參考。
    值得一提的是雖然 [ ] 非常好用,但偶爾 curl 也會會錯意,
    如果檔名中有  [ ] ,curl 可是會誤會你的意思而發生錯誤的喔!
    請參考:curl: (3) [globbing] illegal character in range specification at pos …

    如果還想知道我用了 curl 做了什麼其他的事,或遇上了什麼問題,
    我都已經統一整理在 cURL 指令用法與教學 囉!歡迎大家參考指教 :p

    關鍵字:cURL, 批次, 下載, 萬用字元, 指令, 教學
    參考資料:

    Python 入門教學書籍、電子書推薦


     
    最近開始接觸 Python,俗話說得好,「工欲善其事,必先利其器」,
    既然要開啟這扇門,那麼對於入門的教學書就一定要很要求的啦。
    查了網路上的一些討論後,把大家推薦的書列在下面。

    實體書:
    說到程式語言的入門書,一定不能少掉的就是「深入淺出系列」。
    這系列如同其名,真的是把每個程式語言、概念說得非常清楚,
    然而他的例子、文字又搭配了大量的圖片,
    把深入的內容用簡單淺顯的說明來表達。

    以我看過這系列一堆書的經驗,
    這系列真的相當適合給初學者學習,
    所以這次我在找 python 入門書籍時也是先從這系列開始找起,
    另外在看別人討論時對實體書的部份也有很多人提到下面這兩本書。

    至於為什麼會有兩本呢?
    第一本深入淺出 Python 完全沒問題,
    就像要學 Java 我們會看深入淺出 Java 一樣,非常合理。

    那麼第二本呢?
    大家推薦的原因是因為他是用 Python 的例子來說明程式設計的方法和理論,
    對非新手但剛接觸 Python 的程式人員而言,
    如果已經看過第一本,再搭配第二本應該會更有感覺。

    『《深入淺出程式設計》以反覆式開發的程序清楚明瞭地教導程式設計,一點一滴、循序漸進地逐步增加理論與解釋的深度和廣度,再據以進行實際的編程工作,讓程式獲得持續不斷的提升與改善。這正是編程工作在真實世界中的理想發展模式。同時,本書亦善用教學論壇的優點,讓這樣的教導方式發揮得更淋漓盡致。我將這本書推薦給想要開始探索編程世界卻又不知從何著手的人,也將這本書推薦給非編程新手但是對Python語言有興趣的人。就一般化程式設計與Python編程而言,這絕對是一本值得好好品味的書籍。
    — Jeremy Jones,《Python for Unix and Linux System Administration》一書的共同作者
      

    本站有提供代訂服務及 e-coupon 分享,若有需要,請見:

    電子書:
    除了上面推薦深入淺出的兩本書外,
    國內外各大論壇也推薦了不少的電子書,
    這些書通常免費,可以下載,重點也還有許多熱心的人幫忙翻譯,
    我先前已整理三本書於三篇文章中,
    這邊就再依我看到的討論,依據他們覺得適合的人的程度排列。

    Python Tutorial 2, 3 (Python入門指南) 中英文版電子書連結整理
    Python Tutorial 由 Python 的作者 Guido van Rossum 主筆,
    可稱得上是 Python 教學書中最權威的一本。
    許多人就只靠著官方網站上的 Tutorial 自學 Python,非常適合初學者使用。

    A Byte of Python (咬一口Python, 简明Python教程) 中英文版電子書連結整理
    A Byte of Python 也是適合用來學習 python 程式語言,
    或用作 python 語言教學的電子書之一,
    網路上的評論是除了 Python Tutorial外,
    這本書也相當適合給初學入門者使用。

    Dive Into Python 2, 3 (深入Python) 中英文版電子書連結整理
    雖然這本書很多人推薦,但也有不少人對這本書有意見,
    多數人一致認同這本書完全不適合給初學者使用,
    加上程式範例有些過時,沒有隨著python的進步而更新,所以寫出來的程式碼會相當醜。
    支持的一派則認為這本書書名就說明了是深入!
    似乎對有程式開發經驗(如c)的人看來仍是有幫助。


    以上就是我整理出來大家比較推薦的 Python 入門書,
    因為看這種書我還是比較習慣有實體書在手,
    所以我目前已買了深入淺出系列的兩本書,
    希望能在 Python 領域快速進步!
    也希望看到這篇推薦文的讀者們都能選到適合自己的入門教學囉!

    關鍵字:python, 書, 書籍, 推薦, pdf, download, 教學, 文件, python教學網站, 中文, 入門

      2012年4月17日

      Python:使用os.walk() 遞迴印出資料夾中所有目錄及檔名


       
      有時候我們會需要在 linux 中列出某個資料夾底下所有的目錄和檔名,
      因為這有點像要某個人進每一個資料夾去看看裡面有什麼東西,
      姑且就讓我們叫這個走訪的行為叫 walk 吧。(下面那個是Johnnie Walker喔~~~ XD)

      圖片來源:http://www.wememap.com/blogs/1619120304

      如果想要對資料夾的內容有視覺化的展現,
      可以使用 tree 這個指令來列出資料夾底下的結構,
      下的指令和顯示的結果如下:
      [root@localhost demo]# tree /python/demo/
      /python/demo/
      |-- os_walk.py
      |-- root
      |   |-- 1file
      |   |-- 2subDir
      |   |   |-- 21file
      |   |   |-- 22subDir
      |   |   |   `-- 221file
      |   |   `-- 23file
      |   |-- 3file
      |   `-- 3subDir
      |       `-- 31file
      `-- walk.py
      
      4 directories, 8 files
      

      由上面我們可以看得出來 root 底下有一些資料夾和檔案,
      我已經特別用不同的顏色標示過了,藍色是資料夾,紅色是檔案,
      而紫色的則是這篇要說明的 python 檔。

      雖然已經可以顯示資料夾內部的檔案結構了,
      但這次我想要的並不是要視覺化的結果,
      我只想要底下所有檔案的完整絕對路徑就好。
      本來想用 bash 之類的 script 寫,但因為基礎不足,
      且想說用 script 來做字串處理感覺只會給自己帶來更多麻煩,
      所以就想說來研究一下強大的 python。

      結果顯示我的選擇是對的,
      短短幾行就能達成我的目的,且 python 的程式碼也能在 windows 上運作。
      以下是能達成我目的的 Python walk.py 原始碼:
      import os
      
      for dirPath, dirNames, fileNames in os.walk("/python/demo/"):
          print dirPath
          for f in fileNames:
              print os.path.join(dirPath, f)
      

      Python 執行結果:
      [root@localhost demo]# python walk.py 
      /python/demo/
      /python/demo/walk.py
      /python/demo/os_walk.py
      /python/demo/root
      /python/demo/root/1file
      /python/demo/root/3file
      /python/demo/root/3subDir
      /python/demo/root/3subDir/31file
      /python/demo/root/2subDir
      /python/demo/root/2subDir/23file
      /python/demo/root/2subDir/21file
      /python/demo/root/2subDir/22subDir
      /python/demo/root/2subDir/22subDir/221file
      

      和上面一樣用不同的顏色標註,
      短短幾行程式就能達成我們的目的了,是不是很簡單呢?

      為了了解整個實作,我們特地先用比較簡單的方式來了解,
      這次程式碼中用到的關鍵是 os.walk(),
      我們先把程式碼成簡化成以下這樣,來看一下回傳的結果。

      Python os_walk.py 原始碼:
      import os
      
      for response in os.walk("/python/demo/"):
          print response
      

      Python os_walk.py 執行結果:
      [root@localhost demo]# python os_walk.py 
      ('/python/demo/', ['root'], ['walk.py', 'os_walk.py'])
      ('/python/demo/root', ['3subDir', '2subDir'], ['1file', '3file'])
      ('/python/demo/root/3subDir', [], ['31file'])
      ('/python/demo/root/2subDir', ['22subDir'], ['23file', '21file'])
      ('/python/demo/root/2subDir/22subDir', [], ['221file'])
      

      由 os_walk.py 的執行結果我們可以發現,
      os.walk() 回傳的結果分為很多行,每一行有其固定格式,
      我已經將關鍵的部份用不同顏色標出來了,
      而這個格式套用在 walk.py 中,就會是關鍵的一行:
      for dirPath, dirNames, fileNames in os.walk("/python/demo/"):

      大家可以把每一行的顏色對應到上面的程式碼中,
      os.walk() 這個 function 回傳時每行可以得到一個三元的 tupple,
      其中第一個 dirPath 是這行啟始路徑,
      第二個 dirNames 是一個 list,裡面包含了 dirPath 下所有的資料夾名稱,
      而第三個 fileNames 也是一個 list,包含了 dirPath 下所有的檔案名稱。
      所以我們利用 for 走過 os.walk() 所有的 dirPath
      並且利用底下的 for 把 fileNames 中所有的 f 拿出來,
      再以 os.path.join(dirPath, f) 把資料夾路徑和檔名串接起來,
      組合成完整路徑後輸出,就達成我們的目的了。

      經過這樣的說明,是不是對 os.walk() 的運作方式完全理解了呢?
      應該還算簡單不會很難理解吧 :p

      關鍵字:Python, 遞迴, 處理, 路徑, 檔案, 資料夾, 使用, os.walk(), 印出, 所有, 目錄, 檔名, 子目錄, 子資料夾, 下面, 走訪
      參考資料:

      2012年4月10日

      A Byte of Python (咬一口Python, 简明Python教程) 中英文版電子書連結整理


       
      A Byte of Python 是適合用來學習 python 程式語言或用作 python 語言教學的電子書之一,網路上的評論是除了 Python Tutorial外,這本書也相當適合給初學入門者使用。

      A Byte of Python
      A Byte of Python for 2.x (pdf)
      A Byte of Python for 3.x (pdf)

      簡體、繁體中文譯本:
      簡體中文版(简明Python教程) for Python 2.x
      繁體中文版(咬一口Python)

      關鍵字:A Byte of Python, 2, 3, pdf, 下載, 中文, 中文版


        Python Tutorial 2, 3 (Python入門指南) 中英文版電子書連結整理


         
        Python Tutorial 由 Python 的作者 Guido van Rossum 主筆,
        可稱得上是 Python 教學書中最權威的一本。
        許多人就只靠著官方網站上的 Tutorial 自學 Python,
        非常適合初學者使用。

        Python Tutorial (官方版本):
        The Python Tutorial (Python 2)
        The Python Tutorial (Python 3)

        翻譯版本,譯者網站:智拙实验室
        Python 2.7 Tutorial 簡體中文對照版 (PDF)
        Python 2.4/2.5/3.0 Tutorial 簡體中文對照版

        關鍵字:Python Tutorial, 2, 3, pdf, 中文, 下載, 中文版, ppt

        Dive Into Python 2, 3 (深入Python) 中英文版電子書連結整理


         
        Dive into Python 3Dive into Python 的原作者 Mark Pilgrim 針對 Python 3 進行了內容的更新,然而和原書相比,大約是20%的內容被修訂過,而其於80%都是新的,「Compared to Dive Into Python, it’s about 20% revised and 80% new material」。

        中文化的部份無論是原著還是新版本,在大陸Python社群啄木鳥社區的努力下,這些非常可貴的教材都有了中文版本。

        Dive Into Python 2:http://www.diveintopython.net/
        簡體中文版:http://woodpecker.org.cn/diveintopython/

        Dive Into Python 3:http://diveintopython3.ep.io/
        簡體中文版:http://woodpecker.org.cn/diveintopython3/


        雖然這本書很多人推薦,但也有不少人對這本書有意見,
        多數人一致認同這本書完全不適合給初學者使用,
        加上程式範例有些過時,沒有隨著python的進步而更新,所以寫出來的程式碼會相當醜。
        支持的一派則認為這本書書名就說明了是深入!
        似乎對有程式開發經驗(如c)的人看來仍是有幫助。

        相關的討論可以先看這兩篇,但記得正反的意見都要看喔:
        1. 为什么《Dive into Python》不值得推荐
        2. 《Dive Into Python》非死不可
        關鍵字:dive into python, pdf, python tutorial, download, 下載, 中文

          2012年4月9日

          wget 指令用法與教學


           
          wget 是 linux 中除了 curl 外另一個檔案下載的好用工具。
          以下是 wget --help 後所得到所有指令用法,
          含完整中英文指令集,供大家參考。

          圖片來源:http://www.mymacosx.com/terminal/wget-replacement-macos.html

          這邊舉一個砍站的指令當作例子,指令為:
          wget -t0 -c -nH -np -m -P /localdir http://example.com/mirrors/ftp.redhat.com
          
          # -t0: 設定重試次數。當連結中斷或超時,wget會重新連接。-t0代表把重試次數設為無窮多。
          # -c:  設定續傳功能。
          # -nH: 不建立該網站名稱的子目錄 /example.com/,而直接在當前目錄下建立鏡像的目錄結構。
          # -np: 不遍歷父目錄,如果有連結連到目標資料夾的parent或其他目錄,不下載。
          # -m:  鏡像,相當同時使用-r和-N。
          # -r:  遞迴下載,把文件中所有的連結都下載回來。
          # -N:  下載時檢查timestamp,只下載有更新的文件,如果檔案大小和最修改日期都一樣就不下載。
          # -P:  指定下載到本機的某個目錄下。

          PDF 下載:
          Wget Manual

          純文字:
          GNU Wget 1.12,非互動式檔案下載工具。
          用法: wget [選項]... [URL]...
          長選項必須用的參數在使用短選項時也是必須的。
          
          啟動:
            -V,  --version             顯示 Wget 版本並離開
            -h,  --help                印出這段說明文字
            -b,  --background          啟動後進入背景作業
            -e,  --execute=指令        執行 ‘.wgetrc’ 形式的指令
          
          紀錄訊息及輸入檔案:
            -o,  --output-file=檔案      將紀錄訊息寫入<檔案>中
            -a,  --append-output=檔案    將紀錄訊息加入<檔案>末端
            -d,  --debug                 印出偵錯訊息
            -q,  --quiet                 安靜模式 (不輸出訊息)
            -v,  --verbose               詳細輸出模式 (預設使用這個模式)
            -nv, --non-verbose           關閉詳細輸出模式,但不啟用安靜模式
            -i,  --input-file=FILE       download URLs found in local or external FILE.
            -F,  --force-html            以 HTML 方式處理輸入檔
            -B,  --base=URL              resolves HTML input-file links (-i -F)
               relative to URL.
          
          下載:
            -t,  --tries=次數               設定重試次數 (0 表示無限)
                 --retry-connrefused        即使連線被拒仍然會不斷嘗試
            -O   --output-document=檔案     將資料寫入指定檔案中
            -nc, --no-clobber               不覆寫已經存在的檔案
            -c,  --continue                 繼續下載已下載了一部份的檔案
                 --progress=方式            選擇下載進度的表示方式
            -N,  --timestamping             除非遠端檔案比較新,否則不下載遠端檔案
            -S,  --server-response          顯示伺服器回應訊息
                 --spider                   不下載任何資料
            -T,  --timeout=秒數             指定所有時限為同一數值
                 --dns-timeout=秒數         指定 DNS 查找主機的時限
                 --connect-timeout=秒數     指定連線時限
                 --read-timeout=秒數        指定讀取資料的時限
            -w,  --wait=秒數                每次下載檔案之前等待指定秒數
                 --waitretry=秒數           每次重覆嘗試前稍等一段時間 (由 1 秒至指定秒數不等)
                 --random-wait              每次下載之前隨機地指定等待的時間
                 --no-proxy                 禁止使用代理伺服器
            -Q,  --quota=大小               設定下載資料的限額大小
                 --bind-address=位址        使用本機的指定位址 (主機名稱或 IP) 進行連線
                 --limit-rate=速率          限制下載速率
                 --no-dns-cache             不記憶 DNS 查找主機的資料
                 --restrict-file-names=OS   只使用作業系統能夠接受的字元作為檔案字元
                 --ignore-case              ignore case when matching files/directories.
            -4,  --inet4-only               只會連接 IPv4 地址
            -6,  --inet6-only               只會連接 IPv6 地址
                 --prefer-family=FAMILY     優先採用指定的位址格式,可以是 IPv6、IPv4 或者 none
                 --user=用戶                指定 ftp 和 http 用戶名稱
                 --password=PASS            指定 ftp 和 http 密碼
                 --ask-password             prompt for passwords.
                 --no-iri                   turn off IRI support.
                 --local-encoding=ENC       use ENC as the local encoding for IRIs.
                 --remote-encoding=ENC      use ENC as the default remote encoding.
          
          目錄:
            -nd  --no-directories            不建立目錄
            -x,  --force-directories         強制建立目錄
            -nH, --no-host-directories       不建立含有遠端主機名稱的目錄
                 --protocol-directories      在目錄中加上通訊協定名稱
            -P,  --directory-prefix=名稱     儲存檔案前先建立指定名稱的目錄
                 --cut-dirs=數目             忽略遠端目錄中指定<數目>的目錄層
          
          HTTP 選項:
                 --http-user=用戶          指定 HTTP 用戶名稱
                 --http-passwd=密碼        指定 HTTP 密碼
                 --no-cache                不使用伺服器中的快取記憶資料
                 --default-page=NAME       Change the default page name (normally
               this is `index.html'.).
            -E,  --adjust-extension        save HTML/CSS documents with proper extensions.
                 --ignore-length           忽略 ‘Content-Length’ 標頭欄位
                 --header=字串             在連線資料標頭中加入指定字串
                 --max-redirect            maximum redirections allowed per page.
                 --proxy-user=用戶         設定代理伺服器用戶名稱
                 --proxy-password=密碼     設定代理伺服器密碼
                 --referer=URL             在 HTTP 請求中包括 ‘Referer: URL’ 標頭
                 --save-headers            將 HTTP 連線資料標頭存檔
            -U,  --user-agent=AGENT        宣稱為 AGENT 而不是 Wget/VERSION
                 --no-http-keep-alive      不使用 HTTP keep-alive (持久性連線)
                 --no-cookies              不使用 cookie
                 --load-cookies=檔案       程式啟動時由指定檔案載入 cookie
                 --save-cookies=檔案       程式結束後將 cookie 儲存至指定檔案
                 --keep-session-cookies    會載入和儲存暫時性的 cookie
                 --post-data=字串          使用 POST 方式送出字串
                 --post-file=檔案          使用 POST 方式送出檔案內容
                 --content-disposition     honor the Content-Disposition header when
               choosing local file names (EXPERIMENTAL).
                 --auth-no-challenge       send Basic HTTP authentication information
               without first waiting for the server's challenge.
          
          HTTPS (SSL/TLS) 選項:
                 --secure-protocol=PR      選擇安全通訊協定,可以使用 auto, SSLv2, SSLv3 或 TLSv1
                 --no-check-certificate    不檢驗伺服器的憑證
                 --certificate=檔案                指定用戶端的憑證檔案名稱
                 --certificate-type=類型           用戶端憑證的類型,可以是 PEM 或 DER
                 --private-key=檔案                指定私鑰檔案
                 --private-key-type=類型           私鑰的類型,可以是 PEM 或 DER
                 --ca-certificate=檔案             載有憑證管理中心 (CA) 簽章的檔案
                 --ca-directory=目錄               載有憑證管理中心 (CA) 簽章的目錄
                 --random-file=檔案                作為 SSL 隨機數產生程序 (PRNG) 的來源數據檔案
                 --egd-file=檔案                   產生隨機數據的 EGD socket 檔案名稱
          
          FTP 選項:
                 --ftp-user=用戶           指定 FTP 用戶名稱
                 --ftp-password=密碼       設定 FTP 密碼
                 --no-remove-listing       不刪除 ‘.listing’ 檔案
                 --no-glob                 不展開有萬用字元的 FTP 檔名
                 --no-passive-ftp          不使用「被動」傳輸模式
                 --retr-symlinks           在遞迴模式中,下載鏈結指示的目標檔案 (不包括目錄)
          
          遞迴下載:
            -r,  --recursive            遞迴下載
            -l,  --level=數字           最大搜尋深度 (inf 或 0 表示無限)
                 --delete-after         刪除下載後的檔案
            -k,  --convert-links        make links in downloaded HTML or CSS point to
               local files.
            -K,  --backup-converted     將檔案 X 轉換前先備份為 X.orig
            -m,  --mirror               相等於 -N -r -l inf --no-remove-listing 選項
            -p,  --page-requisites      下載所有顯示網頁所需的檔案,例如圖片等
                 --strict-comments      用嚴格方式 (SGML) 處理 HTML 注釋。
          
          遞迴下載時有關接受/拒絕的選項:
            -A,  --accept=清單                接受的檔案樣式,以逗號分隔
            -R,  --reject=清單                排除的檔案樣式,以逗號分隔
            -D,  --domains=清單               接受的網域,以逗號分隔
                 --exclude-domains=清單       排除的網域,以逗號分隔
                 --follow-ftp                 跟隨 HTML 文件中的 FTP 鏈結
                 --follow-tags=清單           會跟隨的 HTML 標籤,以逗號分隔
            -G,  --ignore-tags=清單           會忽略的 HTML 標籤,以逗號分隔
            -H,  --span-hosts                 遞迴模式中可進入其它主機
            -L,  --relative                   只跟隨相對鏈結
            -I,  --include-directories=清單   準備下載的目錄
            -X,  --exclude-directories=清單   準備排除的目錄
            -np, --no-parent                  不進入上層的目錄
          
          請將錯誤報告或建議寄給 >bug-wget@gnu.org<。
          
          Usage: wget [OPTION]... [URL]...
          
          Mandatory arguments to long options are mandatory for short options too.
          
          Startup:
            -V,  --version             display the version of Wget and exit.
            -h,  --help                print this help.
            -b,  --background          go to background after startup.
            -e,  --execute=COMMAND     execute a `.wgetrc'-style command.
          
          Logging and input file:
            -o,  --output-file=FILE      log messages to FILE.
            -a,  --append-output=FILE    append messages to FILE.
            -d,  --debug                 print lots of debugging information.
            -q,  --quiet                 quiet (no output).
            -v,  --verbose               be verbose (this is the default).
            -nv, --no-verbose            turn off verboseness, without being quiet.
            -i,  --input-file=FILE       download URLs found in FILE.
            -F,  --force-html            treat input file as HTML.
            -B,  --base=URL              prepends URL to relative links in -F -i file.
          
          Download:
            -t,  --tries=NUMBER             set number of retries to NUMBER (0 unlimits).
                 --retry-connrefused        retry even if connection is refused.
            -O,  --output-document=FILE     write documents to FILE.
            -nc, --no-clobber               skip downloads that would download to existing files.
            -c,  --continue                 resume getting a partially-downloaded file.
                 --progress=TYPE            select progress gauge type.
            -N,  --timestamping             don't re-retrieve files unless newer than local.
            -S,  --server-response          print server response.
                 --spider                   don't download anything.
            -T,  --timeout=SECONDS          set all timeout values to SECONDS.
                 --dns-timeout=SECS         set the DNS lookup timeout to SECS.
                 --connect-timeout=SECS     set the connect timeout to SECS.
                 --read-timeout=SECS        set the read timeout to SECS.
            -w,  --wait=SECONDS             wait SECONDS between retrievals.
                 --waitretry=SECONDS        wait 1..SECONDS between retries of a retrieval.
                 --random-wait              wait from 0...2*WAIT secs between retrievals.
                 --no-proxy                 explicitly turn off proxy.
            -Q,  --quota=NUMBER             set retrieval quota to NUMBER.
                 --bind-address=ADDRESS     bind to ADDRESS (hostname or IP) on local host.
                 --limit-rate=RATE          limit download rate to RATE.
                 --no-dns-cache             disable caching DNS lookups.
                 --restrict-file-names=OS   restrict chars in file names to ones OS allows.
                 --ignore-case              ignore case when matching files/directories.
            -4,  --inet4-only               connect only to IPv4 addresses.
            -6,  --inet6-only               connect only to IPv6 addresses.
                 --prefer-family=FAMILY     connect first to addresses of specified family,
               one of IPv6, IPv4, or none.
                 --user=USER                set both ftp and http user to USER.
                 --password=PASS            set both ftp and http password to PASS.
          
          Directories:
            -nd, --no-directories            don't create directories.
            -x,  --force-directories         force creation of directories.
            -nH, --no-host-directories       don't create host directories.
                 --protocol-directories      use protocol name in directories.
            -P,  --directory-prefix=PREFIX   save files to PREFIX/...
                 --cut-dirs=NUMBER           ignore NUMBER remote directory components.
          
          HTTP options:
                 --http-user=USER          set http user to USER.
                 --http-password=PASS      set http password to PASS.
                 --no-cache                disallow server-cached data.
            -E,  --html-extension          save HTML documents with `.html' extension.
                 --ignore-length           ignore `Content-Length' header field.
                 --header=STRING           insert STRING among the headers.
                 --max-redirect            maximum redirections allowed per page.
                 --proxy-user=USER         set USER as proxy username.
                 --proxy-password=PASS     set PASS as proxy password.
                 --referer=URL             include `Referer: URL' header in HTTP request.
                 --save-headers            save the HTTP headers to file.
            -U,  --user-agent=AGENT        identify as AGENT instead of Wget/VERSION.
                 --no-http-keep-alive      disable HTTP keep-alive (persistent connections).
                 --no-cookies              don't use cookies.
                 --load-cookies FILE       load cookies from FILE before session.
                 --save-cookies FILE       save cookies to FILE after session.
                 --keep-session-cookies    load and save session (non-permanent) cookies.
                 --post-data=STRING        use the POST method; send STRING as the data.
                 --post-file=FILE          use the POST method; send contents of FILE.
                 --content-disposition     honor the Content-Disposition header when
               choosing local file names (EXPERIMENTAL).
                 --auth-no-challenge       Send Basic HTTP authentication information
               without first waiting for the server's challenge.
          
          HTTPS (SSL/TLS) options:
                 --secure-protocol=PR      choose secure protocol, one of auto, SSLv2,
               SSLv3, and TLSv1.
                 --no-check-certificate    don't validate the server's certificate.
                 --certificate=FILE        client certificate file.
                 --certificate-type=TYPE   client certificate type, PEM or DER.
                 --private-key=FILE        private key file.
                 --private-key-type=TYPE   private key type, PEM or DER.
                 --ca-certificate=FILE     file with the bundle of CA's.
                 --ca-directory=DIR        directory where hash list of CA's is stored.
                 --random-file=FILE        file with random data for seeding the SSL PRNG.
                 --egd-file=FILE           file naming the EGD socket with random data.
          
          FTP options:
                 --ftp-user=USER           set ftp user to USER.
                 --ftp-password=PASS       set ftp password to PASS.
                 --no-remove-listing       don't remove `.listing' files.
                 --no-glob                 turn off FTP file name globbing.
                 --no-passive-ftp          disable the "passive" transfer mode.
                 --retr-symlinks           when recursing, get linked-to files (not dir).
                 --preserve-permissions    preserve remote file permissions.
          
          Recursive download:
            -r,  --recursive            specify recursive download.
            -l,  --level=NUMBER         maximum recursion depth (inf or 0 for infinite).
                 --delete-after         delete files locally after downloading them.
            -k,  --convert-links        make links in downloaded HTML point to local files.
            -K,  --backup-converted     before converting file X, back up as X.orig.
            -m,  --mirror               shortcut for -N -r -l inf --no-remove-listing.
            -p,  --page-requisites      get all images, etc. needed to display HTML page.
                 --strict-comments      turn on strict (SGML) handling of HTML comments.
          
          Recursive accept/reject:
            -A,  --accept=LIST                comma-separated list of accepted extensions.
            -R,  --reject=LIST                comma-separated list of rejected extensions.
            -D,  --domains=LIST               comma-separated list of accepted domains.
                 --exclude-domains=LIST       comma-separated list of rejected domains.
                 --follow-ftp                 follow FTP links from HTML documents.
                 --follow-tags=LIST           comma-separated list of followed HTML tags.
                 --ignore-tags=LIST           comma-separated list of ignored HTML tags.
            -H,  --span-hosts                 go to foreign hosts when recursive.
            -L,  --relative                   follow relative links only.
            -I,  --include-directories=LIST   list of allowed directories.
            -X,  --exclude-directories=LIST   list of excluded directories.
            -np, --no-parent                  don't ascend to the parent directory.
          

          總之 wget 真是博大精深,要用得好還是得再深入研究才行。
          大概就這樣簡單介紹,其他的若之後有用到再補充。

          關鍵字:wget, linux, wget指令, wget proxy, wget教學, wget砍站, wget參數
          參考資料:

          Linux Script:自動備份或刪除超過特定時間之過期檔案


           
          在使用 linux 時,有時候我們會想要檢查特定目錄下的所有或某些檔案,
          看看是不是這些檔案已經超過時效,若超過則刪除或移動到其他備份媒體,
          這通常會用在系統 log 的備份等,要達成這個目的,我們該怎麼做呢?

          圖片來源:http://www.icosky.com/icon/find-19-icon/

          首先我們要利用 linux 中非常強大的指令 find,
          利用 find 找到符合特定規則的檔案後再使用指令參數-exec,
          這個參數可以將 find 到的結果接過來執行,如果用得好,應該是項非常好用的工具。

          說了這麼多,先來個簡單的例子,例如要把 tmp 資料夾底下的 .txt 檔備份到另一個地方:
          # find /tmp/ -type f -name "*.txt" -exec cp {} ~/txt \;
          

          首先就 find 相關的參數作說明:
          find /tmp/ -type f -name "*.txt" 
          /tmp/ 要尋找的目標資料夾
          -type f 尋找類型為檔案
          -name "*.txt" 尋找檔名為 .txt 結尾
          若有使用萬用字元星號*的話建議加上引號,如 "*.txt" 或 '*.txt',
          否則在 find 時似乎會有不明錯誤發生,有些該找到的檔案會找不到!

          接著說明 -exec 後方的部分
          -exec cp {} ~/txt \;
          cp  指令
          {}  找到的結果檔案
          ~/txt  cp 的參數
          \;  指令的結束符號

          下面這行指令就是找到 /tmp/ 資料夾底下超過一天的 .log 檔,然後把他們都刪掉,
          其中 -mtime +1 就是要找超過一天沒有被修改的檔案
          # find /tmp/ -type f -name "*.log" -mtime +1 -exec rm -rf {} \;
          

          關鍵字:Linux, Script, bash, shell, 刪除, 超過, 特定時間, 過期, 檔案, 定時, 老舊, 目錄, 資料夾, 備份, 清空, 自動,
          參考資料:

          Linux Script:mv, rename 單次及批次修改檔案名稱


           
          圖片來源:http://gihansblog.wordpress.com/2011/10/29/a-shell-script-for-renaming-large-number-of-file-in-linux/

          在 Windows 系統中,無論我們要重新命名資料夾或是檔案,
          通常都點下右鍵後選擇重新命名即可,
          如果對快捷鍵比較熟,直接按下 F2 可以更快地達成目的。
          而在 Linux 系統中,重新命名資料夾或檔案也可以透過同一個指令來達成,這個指令是 mv !mv 是 move 的縮寫,他除了移動檔案資料夾的功能外也可以同時重新命名。
          所以其實仔細想想拿他來重新命名檔案也不會很難理解啦,
          重新命名時只是把檔案移動到同一個資料夾,然後趁著移動時把檔名給順便改了!

          說了這麼多那 mv 指令到底該怎麼使用呢?
          # mv $1 $2
          # $1: 舊檔案或資料夾名稱
          # $2: 新的檔案或資料夾名稱
          mv oldname.txt newname.txt
          

          上面的方法是用來重新命名單一檔案或資料夾,
          但是當一個目錄資料夾底下有很多有特定規則檔名的檔案需要改名,
          例如相機產生的檔案 IMG001.jpg~IMG999.jpg 超多檔案,
          這絕對不可能直接用 mv 一個個慢慢敲來改名的。
          這時候另一個指令就可以派上用場了,
          rename 這個指令可以用來批次修改檔名共同的部分,使用方式如下:

          # rename $1 $2 $3
          # $1: 要被取代的關鍵字
          # $2: 新的關鍵字
          # $3: 檔名符合這個規則的才取代
          
          # 把 IMG001.jpg, IMG002.jpg… 換成 img001.jpg, img002.jpg… 
          rename IMG img IMG*
          
          # 把所有 .htm 檔案改成 .html
          rename .htm .html *.htm
          
          # 把檔案 foo1, ..., foo9, foo10, ..., foo278.
          # 改成 foo001, ..., foo009, foo010, ..., foo278.
          rename foo foo0 foo?
          rename foo foo0 foo??
          

          關鍵字:linux, rename, file, folder, 改檔名, 重新命名, batch rename, 批次, 用法, 指令, move, mv, inux資料夾, 重新命名軟體, 檔案, 工具, 程式, 大量
          參考資料:

          2012年4月2日

          Linux Script:查詢Linux及Linux Kernel版本


           
          圖片來源:http://apcmag.com/how-to-choose-the-best-linux-distribution.htm

          以下是有關查看 Linux Kernel,或查看 Linux Distribution 版本的指令:
          @ 印出 Linux Kernel 版本
          [root@localhost ~]# uname -a
          Linux localhost.localdomain 2.6.18-238.el5xen #1 SMP Thu Jan 13 16:41:45 EST 2011 x86_64 x86_64 x86_64 GNU/Linux
          
          @ 印出 Linux 發行版本,這邊是 CentOS 的結果
          @ 這個指令通用於所有的發行版本,如:Redhat、SuSE、Debian等
          [root@localhost ~]# lsb_release -a 
          LSB Version: :core-4.0-amd64:core-4.0-ia32:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-ia32:printing-4.0-noarch
          Distributor ID: CentOS
          Description: CentOS release 5.8 (Final)
          Release: 5.8
          Codename: Final
          

          關鍵字:查詢, 查看, Linux, Kernel, 版本, CentOS, Redhat, SuSE, Debian, Ubuntu, 種類, 指令, 如何, 看
          參考資料:

          解決 yum update錯誤:[Errno -1] Metadata file does not match checksum


           
          圖片來源:http://blog.tuxforge.com/yum-update-exclude-packages/

          有時我們在使用 yum update 時會遇到下面的錯誤訊息,
          這似乎是因為 Linux 版本不是最新版的關係,
          像我是使用 CentOS 5.6,但此時 5 系列的最新版本已經是 5.8 了。
          [root@localhost ~]# yum update
          Loaded plugins: fastestmirror
          Loading mirror speeds from cached hostfile
           * base: centos.mirror.cdnetworks.com
           * extras: centos.mirror.cdnetworks.com
           * updates: centos.mirror.cdnetworks.com
          
          base                                          | 1.1 kB     00:00     
          base/primary                                  | 1.2 MB     00:00     
          extras                                        | 2.1 kB     00:00     
          extras/primary_db                             | 175 kB     00:00     
          updates                                       | 1.9 kB     00:00     
          updates/primary_db                            | 187 kB     00:00     
          
          http://centos.mirror.cdnetworks.com/5.8/updates/x86_64/repodata/primary.sqlite.bz2: [Errno -1] Metadata file does not match checksum
          Trying other mirror.
          

          查了一下發現以下的解法:
          yum clean all
          yum clean metadata
          yum makecache --disableplugin=fastestmirror
          yum update
          

          如果還是不行,可以將 /etc/yum.conf 加上下面的指令,
          強迫 yum 不要使用 http caching,然後再執行 yum update 就可以了。
          http_caching=none
          

          關鍵字:yum, update, 錯誤, [Errno -1] Metadata file does not match checksum, 無法, 更新, 失敗, http, cache, 快取
          參考資料: