2011年10月22日

Linux Filesystem Hierarchy Standard

在網路上看到有高手整理好的FHS結構圖,非常的好用:

關於資料夾的相關解說,也可以在FHS的網站找到詳細說明。

2011年10月7日

IPv6格式整理

最後在學校的電腦突然出現了IPv6的IP,不過一些網路服務原本是以IPv4的設定為主,改到IPv6後會有問題,於是決定一次把問題整理清楚。
IPV6 位址共128bytes,分成8 區以:隔開格式如下
2001:0288:75d8:0000:0222:15ff:fe5b:4525
  • 其中每一個數字均為16進位(4位元),每一區為16 位元
  • 每一區塊前置的0 可以省略,相連的0:0:0 等不管幾個相連都可以簡寫為::
  • 但::的寫法一個位址只能有一個(以相連的0 最多的優先)
    • 001:0db8:85a3 :0000:1319:8a2e:0370:7344等同於2001:0db8:85a3::1319:8a2e:0370:7344 
    • 2001:0DB8 :0000:0000:0000:0000 :1428:57ab等同於2001:0DB8::1428:57ab 
  • ::1 代表 localhost(lo)
  • :: 代表any(相當於ipv4 的0.0.0.0
  • ff0 開頭的位址為多點位址
  • ff02::1 一般電腦的廣播位址
  • ff02::2 路由器廣播位址
    • ping6 –I eth1 ff01::1 ping 一般PC 有那些
    • ping6 –I eth1 ff02::1 ping 路由器有那些
IPv6位址的類型
IPv6有Unicast、Multicast 和 Anycast 三種類型。 IPv6不再使用IPv4的廣播(Broadcast)方式來通信,而是使用Multicast或者Anycast替代廣播。
而IPv6 的 Unicast 如同 IPv4 的 Unicast 傳送模式,用在單一節點對單一節點的資料傳送。 Unicast有下列型態:
  • Global(Scope:global): Global的IPv6 位址,就如同 IPv4 的公開位址(Public Address),在全世界具有唯一性,其它節點不會有相同的位址。 
  • Link- Local(Scope:link):位址僅用在單一個連結上 (同一個子網路中),不可被繞送到其他連結或網際網路上。 它的功用如同 IPv4 的 APIPA 位址(169.254.X.X),僅在一個特定的網路區段使用,這類位址的封包不能通過路由器。
  • Site-Local(Scope:site):位址可以跨連結,在網點間繞送,但不可被繞送到網際網路。Link-Local及Site-Local位址的概念就像是IPv4中的私有位址,對主機間及路由器間自動建立暫時性的通信非常有用。
Link-local單點位址(Scope:link):
主機平台的 IPv6 有啟用,則每一網路介面都會自動配得一個 Link-local 單點位址,此位址以fe80::/64 開頭。此ip 位址可由網卡算出。
例如某一網卡mac 位址為00-0F-EA-41-59-47,最左邊一定是00,寫成2 進位變成0000 0000,再將由左邊算起第7 個bit(稱為global bit 一定是0)改成1,於是00 就會變成02,於是變成02:0f:ea:41:59:47。再將mac 位址拆成2 半,中間加入fffe變成020f:eaff:fe41:5947,於是ipv6 位址就會變成fe80::20f:eaff:fe41:5947,即為網卡的local 單點位址。

IPv6的首碼
在 IPv6 位址的 128 bits 之中,前幾個 bits 為首碼。另一種常見的 IPv6 位址表示法是「IPv6 位址 / 首碼長度」。至於首碼長度到底是多少 bit 呢?這必須視位址是屬於Unicast、Multicast 或 Anycast而定。
Unicast的首碼及位址格式
  • Global的前 3 bits 為首碼,內容固定是「001」。最後的 64 bits 為 Interface ID。Interface ID 的功用如同 IPv4 的 Host ID 。 
  • Site-Local的前 10 bits 為首碼,內容固定為「1111111011」, 間隔 38 bits 的 0 之後, 接著 16 bits 的「子網路位址」( Subnet ID ),最後才是 64 bits 的介面位址。 
  • 因為這種位址的前 10 bits 之後的 6 bit固定補0,所以整個16bit是「1111111011000000」,以十六進位來表示,就是FEC0,因此有人就說 Site-Local IPv6 位址的首碼為FEC0。這種說法是額外多加入六個bit的0!因為實際首碼只有 10 bits。但就結果來看並沒有錯,且加入6bit以後,用FEC0來表示首碼,要比用1111111011清楚許多。 
  • Link-Local也是用前 10 bits 為首碼,內容固定為「1111111010」,接著是連續 54 bits 的 0,最後的 64 bits 也是介面位址。如同在 Site-Local 一樣,Link-Local IPv6 的首碼暫且可以用 FE80來表示。 
Multicast的首碼及位址格式
  • Multicast前 8 bits 為首碼,內容為「11111111」,最後 112 bits 為「群組位址」
Anycast的首碼及位址格式
  • Anycast的首碼長度不是固定長度,首碼之外均為 0。 

2011年9月20日

證交所加權指數開盤價收盤價

今天在證交所抓台灣加權指數的資料時,發現一件很有趣的事,
在[交易資訊]->[TWSE自行編製指數]->[每15秒指數盤後統計],可看到加權指數與各類股指數每15秒(早期為1分鐘)的指數值。
而在[交易資訊]->[TWSE自行編製指數]->[發行量加權股價指數歷史資料],可看到加權指數的開盤價,收盤價,最高價,最低價。
對照兩筆資料,可發現收盤價是13:30:00最後一筆資料值,這沒什麼問題,但是開盤價確不是開盤後第一個值,而是開盤後第一筆資料成交之後的值,即開盤價為09:00:15的值。

2011年9月18日

Magic system request key

Wiki的介紹:http://en.wikipedia.org/wiki/MagicSysRqkey

簡單的說就是能夠執行linux kernel低階命令的按鍵組合,在當機或是system freeze時很有用。
有數種執行Magic Sysrq的方法:
  1. alt+PrtSc(SysRq)+b (QWERY的鍵盤為立即重新開機) 
  2. echo b > sysrq-trigger
  3. 使用daemon sysrqd, listen TCP port 4094,可遠端接收命令
  4. serial console中,在break命令後加上Magic Sysrq。Ex: ctrl-a f可執行break cmd,所以ctrl-a f b可立即重新開機。
使用/禁用Magic Sysrq的方法:
  • disabled: echo 0 > /proc/sys/kernel/sysrq
  • enable: echo 1 > /proc/sys/kernel/sysrq
  • 若要設定部份功能禁用,可參考wiki。

    2011年9月7日

    wget實用技巧

    • wget -r -np -nd http://www.google.com.tw/doc
      可下載doc資料夾下的所有文件,-r為recurisve, -np為不走訪parent directory, -nd為不在本機建立新的資料結構
    • wget -r -np -nd --accept=iso  http://example.com/centos-5/i386/
      只下載i386資料夾下副檔名為iso的檔案
    • wget -i filename.txt
      下載列在filename.txt中的文件
    • wget -c http://example.com/really-big-file.iso
      -c選項為續傳的功能
    • wget -m -k (-H) http://www.example.com/
      對網站做鏡像處理,若圖片在不同網站,可用-H來處理 

    2011年8月21日

    Bash快速鍵

    1. ctrl + r: 進入歷史命令搜尋模式 
    2. ctrl + l: 清除螢幕,效果等同於clear
    3. ctrl +a: 游標移至行首
    4. ctrl +e: 游標移至行尾
    5. ctrl +u: 剪下游標之前的內容
    6. ctrl +k: 剪下游標之後的內容
    7. ctrl +y: 貼上內容 
    8. ctrl +t: 交換游標前兩個字元的順序
    9. ctrl +w:刪除游標之前的內容
    10. ctrl +z: 將目前process suspend。可用jobs看目前有那些process在後台執行,用fg %1將第一個process放至前台。用bg %2將第二個process放在後台執行。
    11. ctrl +x -> ctrl +e: 執行環境變數EDITOR所指定的文字編輯器。
    12. !!:重複上次的命令
    13. !$:重複上次命令的參數。Ex: ls - als在下次使用時可直接用ls !$,也可用來當做上一層目錄。
    14. alt+.:重複上次命令的參數

    實用的Linux命令

    1. pgrep -u root:抓取uid為root process pid,等同於ps -ef|egrep '^root'|awk '{print $2}'
    2. pstree: 將process依樹狀結構印出
    3. split: 將大檔案分割成小檔案,split -b 2m largefile LF_,合併時使用cat LF_* > largefile
    4. nl: 能夠顯示行號的命令, nl log.txt|head
    5. ldd:印出指定檔案所需要的dynamic library。ldd /usr/java/jre1.5.0_11/bin/java會印出java需要那些dynmaic library。
    6. lsof: 印出被打開的文件。lsof|grep TCP 可印出正被打開的TCP port。