顯示具有 Linux 標籤的文章。 顯示所有文章
顯示具有 Linux 標籤的文章。 顯示所有文章

2015年6月17日

tmux resolution

在tmux執行程式,經常會遇到解析度的問題,比如說在A電腦的解析度是1366*768,而在B電腦的解析度是1920*1080,如果在A電腦登入遠端主機使用tmux後,再使用B電腦登入遠端主機使用tmux attach時,會發現tmux邊緣會有一大片空白。

解決方法是B電腦使用tmux時,使用tmux attach -d,(detach the client),然後tmux就會依B電腦的解析度正確設定。

2014年6月4日

sudo的PATH重置問題

sudo在執行的時候預設會重置PATH環境變數
而不是使用root的PATH環境變數.

例.以root帳號開啟終端機(需先修改PATH讓他跟預設不同)
$env
PATH=/root/cbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

$sudo env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

看出差別了嗎?
root帳號有我自己加進去的/root/cbin
而用sudo去執行就沒有,因為他會重置成/etc/login.defs裡面的設定

方法1:在.bashrc設定alias,在sudo時帶入PATH環境變數(僅套用至目前帳號) 
$nano ~/.bashrc
加入以下這行
alias sudo='sudo env PATH=$PATH'

方法2:直接修改login.defs(影響全系統)
$nano /etc/login.defs

在這兩行修改成自己想要的
ENV_SUPATH      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV_PATH        PATH=/usr/local/bin:/usr/bin:/bin:/usr/games

方法3:關閉重置環境變數的設定(影響全系統) 
$visudo
打開sudo設定檔,加入或修改以下這行
Defaults    !env_reset


方法4:設定保留PATH環境變數的設定(影響全系統) 
$visudo
打開sudo設定檔,加入或修改以下這行
Defaults    env_keep = "PATH"

2014年3月13日

snmp安裝,設定

情前提要
再使用網路管理軟體前,需要先取得系統各個資訊,以此為目我們需要安裝一些套件,下列為套件名稱 
  1. snmp 
  2. snmpd
  3. snmp-mibs-downloader

套件介紹
  1. snmp這是一個通訊協定可以取得系統的資訊
  2. snmpd可以透過此套件直接下達指令驗證取得資訊
  3. snmp-mibs-downloader 如果只用上述兩種軟體下達指令,會得到數值排列的訊息,為了更好了解這些數值排列的意思就有所謂的mib套件,就如同IP有DNS一樣的意思

使用的系統
system ubuntu 12.04 LTS

安裝方式
apt-get install snmp snmpd snmp-mibs-downloader

確認後就可直接安裝

確認安裝版本
dpkg -l | grrp snmp


檔案配置
下列為需要配置的檔案
/etc/snmp/snmpd.conf
/etc/snmp/snmp.conf
/etc/default/snmpd

配置方式
/etc/snmp/snmpd.conf
設定snmpd.conf,這是有關連線、監控方式有關,為了簡化操作,我們只配置三行
首先將原始檔案更名,作為備份用
mv /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.bk
建立相同檔名
vi /etc/snmp/snmpd.conf
寫入下列三行
#讓外部是否有連進來的權利,public是關鍵字串,就像是通關密語

rocommunity  public
#設定你的名稱,這裡的名稱不是hostname,是位置
syslocation  varnish
#聯絡人
syscontact  admin@chin.com.tw


/etc/snmp/snmp.conf
這是要設定的是跟mib有關,需要註解一行即可
#mibs :
註解這行是因為要讓snmp抓到的是名稱


/etc/default/snmpd
這裡配置剛剛設定的snmpd.conf,以及可以設定可以連線的網域/網址
可以將原本的 SNMPDOPTS註解掉加入這行

SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid -c /etc/snmp/snmpd.conf  0.0.0.0'

加入也是要了解這些的作用有哪些,主要加入下列一行,加入snmpd.conf 配置檔 ,可存取的來源位置
-c /etc/snmp/snmpd.conf  0.0.0.0

驗證程序
可以透過指令的方式確認是否有啟動snmp 服務

snmpwalk -v 2c -c public localhost system

指令說明
snmpwalk 取得所有SNMP物件
-v 2c 設定版本
-c public 設定通行指令
localhost 位置(ip也可以)
system 以MIB字串方式顯示

2013年12月21日

Gentoo編譯scipy(with intel MKL)

在gentoo安裝好mkl後,依照官方的說明
http://software.intel.com/en-us/articles/numpyscipy-with-intel-mkl
依序安裝numpy, scipy,
在numpy的部份順利完成,但是在scipy的部份,安裝完後使用
import scipy時,出現

ImportError: /usr/lib64/python2.7/site-packages/scipy/sparse/sparsetools/_csr.so: undefined symbol: __intel_sse4_strlen

原因如下,C/C++ 有完整的「編譯 -> 連結 -> 執行」三個階段, 各階段都可能發生 undefined symbol。在解決惱人的 undefined symbol 前, 得先明白整個編譯流程:
  1. 編譯 .c / .cpp 為 .o (object file) 時, 需要提供 header 檔 (用到 gcc 參數 -I)。事實上, 在編譯單一檔案時, gcc/g++ 根本不在意真正的 symbol 是否存在, 反正有宣告它就信了, 所以有引對 header 即可。這也是可分散編譯的原因, 程式之間在編譯成 .o 檔時, 並沒有相依性。
  2. 用 linker (ld 或 gold) 將 *.o 連結成 dynamic library 或執行檔時, 需要提供要連結的 library (用到 gcc 參數 -L 指定目錄位置, 用 -l 指定要連什麼函式庫)。不同於前一步, 此時 symbol 一定要在。
  3. 執行的時候, 會再動態開啟 shared library 讀出 symbol。換句話說, 前一個步驟只是檢查是否有。檢查通過也連結成 executable 或 shared library 後, 若執行時對應的檔案不見了, 仍會在執行期間找不到 symbol。若位置沒設好, 可能需要用 LIB_LIBRARY_PATH 指定動態函式的位置, 但不建議這麼做, 最好在執行 linker 時就指定好位置。
就看 undefined symbol 發生在那個階段, 若是編 object file 時發生, 就是沒和編譯器說 header 檔在那, 記得用 -I 告訴它。若在 linking 時發生, 就要同時設好 -L 和 -l。不過難就難在要去那找 undefined symbol 的出處。

因為我的問題是發生在執行時間,所以屬於第3類。
首先使用nm _csr.so或是objdump -x _csr.so確認連結。

而 __intel_sse4_strlen定義在
/opt/intel/lib/intel64/libirc.so
/opt/intel/lib/intel64/libiomp5.so

#使用ldconfig -p確認mkl設定(需root權限)
#ldconfig -p|grep mkl
 libiomp5.so (libc6,x86-64) => /opt/intel/composerxe/lib/intel64/libiomp5.so
libirc.so (libc6,x86-64) => /opt/intel/composerxe/lib/intel64/libirc.so

#檢查檔案的格式
$file _csr.so

_csr.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, not stripped

#使用ldd -r查看缺少的symbol
$ldd -r _csr.so

linux-vdso.so.1 =>  (0x00007fff207ff000)
        libpython2.7.so.1.0 => /usr/lib64/libpython2.7.so.1.0 (0x00007f3757ffe000)
        libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.5.3/libstdc++.so.6 (0x00007f3757cf4000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f3757a72000)
        libgcc_s.so.1 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.5.3/libgcc_s.so.1 (0x00007f375785c000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f37574d2000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f37572b5000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f37570b1000)
        libutil.so.1 => /lib64/libutil.so.1 (0x00007f3756ead000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f37587e8000)
undefined symbol: __intel_sse4_strlen   (./_csr.so)
undefined symbol: _intel_fast_memset    (./_csr.so)
undefined symbol: _intel_fast_memcpy    (./_csr.so)
undefined symbol: __intel_sse4_strncmp  (./_csr.so)
undefined symbol: __intel_sse4_strcpy   (./_csr.so)
undefined symbol: __intel_sse4_strncpy  (./_csr.so)
undefined symbol: __intel_sse4_strcat   (./_csr.so)

解法方法:
首先在編譯scipy時,使用以下的指令:
  1. python setup.py config --compiler=intelem --fcompiler=intelem build_clib --compiler=intelem  --fcompiler=intelem build_ext --compiler=intelem --fcompiler=intelem install >>build.log
    將編譯時期的log寫進build.log中
  2. cat build.log|grep _csr.so, 可得到
    c++ -shared build/temp.linux-x86_64-2.7/scipy/sparse/sparsetools/csr_wrap.o -L/usr/lib64 -Lbuild/temp.linux-x86_64-2.7 -lpython2.7 -o build/lib.linux-x86_64-2.7/scipy/sparse/sparsetools/_csr.so
    copying build/lib.linux-x86_64-2.7/scipy/sparse/sparsetools/_csr.so -> /usr/lib64/python2.7/site-packages/scipy/sparse/sparsetools
    由於已知道是linking的時候有問題,所以在scipy目錄下,將上述編譯指令改成:
    c++ -shared build/temp.linux-x86_64-2.7/scipy/sparse/sparsetools/csr_wrap.o -L/opt/intel/lib/intel64 -L/usr/lib64 -Lbuild/temp.linux-x86_64-2.7 -lpython2.7 -lirc -o build/lib.linux-x86_64-2.7/scipy/sparse/sparsetools/_csr.so
  3. 完成編譯後,將編譯完成的檔案拷貝到系統目錄下(需root權限)
    cp build/lib.linux-x86_64-2.7/scipy/sparse/sparsetools/_csr.so /usr/lib64/python2.7/site-packages/scipy/sparse/sparsetools
  4. 全部完成後,使用import scipy.sparses(scipy.stats)來確認問題解決。
除了_csr.so之後,還有幾個檔案_csc.so, _coo.so, _dia.so, _bsr.so, _csgraph都是用上述方法解決。

_bsr.so除了-lirc外,還需加上-lsvml.





2013年12月13日

iptables保存


iptables的設定在在每次重開機之後就會消失
所以設定完後可以用iptables-save將設定檔存起來,如:
sudo iptables-save > /etc/iptables-rules


但是存起來之後,他並不會幫你在每次重開機都讀那個檔

所以還要再設定,修改/etc/network/interfaces,最後面加上:
pre-up iptables-restore < /etc/iptables-rules

2013年3月9日

更換BLAS implementation

使用openBLAS替換ATLAS(Ubuntu 12.04)
  1. sudo apt-get install libopenblas-base, libopenblas-dev
  2. sudo update-alternatives --all
  3. set liblapack.so.3gf to/usr/lib/lapack/liblapack.so.3gf

其它的BLAS替代方案可參考Debian wiki:http://wiki.debian.org/DebianScience/LinearAlgebraLibraries

2013年2月5日

linux新增字型

OS: ubuntu 12.04 
新增字型的方法:
  1. 在/usr/share/fonts新增資料夾(e.g. winfonts)
  2. 將字型檔案copy至/usr/share/fonts/winfonts/
  3. 執行sudo fc-cache -f -v

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月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。

    2011年8月20日

    標準輸出入與重新導向

    在Unix(Linux)當中,系統將標準輸入輸出分成三個:標準輸入(stdin)、標準輸出(stdout)、以及標準錯誤輸出(stderr),它們的fd (file descriptor, 檔案描述子) 分別是 0,1,2。在標準情形下,這些FD與以下設備關聯:

    • stdin(0): keyboard 
    • stdout(1): monitor 
    • stderr(2): monitor 

    而在shell當中「>」的意思其實是,將「>」左邊輸出的東西重新導向到右邊去。當「>」左邊未指定任何東西時,它會讀取左方程式的標準輸出(也就是fd=1)重新導向給右邊的東西,但是也可以指定要重新導向的fd (也就是說「>abc.txt」會等於「1>abc.txt」)。所以可以想見 2>&1 的意思應該是把 fd=2,也就是標準錯誤輸出重新導向給&1。而這邊的 &1 指的其實就是 fd=1。因此以下的結果:
    /tmp/test.sh > test.log
    如果不使用2>&1的方法,則test.log中只會儲存test.sh的執行結果,而test.sh的錯誤只會顯示在營幕中,反之,若使用了2>&1方法,則執行結果與錯誤訊息都會存在test.log當中。所以由此可知,如果只想儲存錯誤訊息,可用 2> file的方式。

    小結一下,2>&1就是將標準錯誤併到標準輸出一起輸出,而1>&2就是將標準輸出併到標準錯誤當中一起輸出。

    在crontab中常常見到以下的寫法:
    renice -20 cat /home/yoursrcdspath/srcds.pid >/dev/null 2>&1

    /dev/null是 Unix 底下的垃圾筒+黑洞。它不帶任何意義,所有丟進去的東西都會被吃掉然後不見,反正你不想看到的東西丟給 null 就對了。
    根據「man bash」裡 REDIRECTION 段落裡的說明,重新導向的順序是由左至右。也就是說「>/dev/null 2>&1」會先處理「>/dev/null」再處理「2>&1」。所以其意思就是將標準輸出和標準錯誤全部都丟到/dev/null中,眼不見為淨。

    sed簡易筆記

    sed為串流編輯器,可直接編輯檔案的資料流(stream),其工作模式為比對每一資料列,若符合樣式,即執行指定的動作。

    要注意sed並不會修改檔案的內容,而是讀取檔案後,修改其內容再送到標準輸出。

    #sed 'pattern cmd' files
    sed syntax

    • #sed '1,4d' thisfile
      刪除thisfile的第1~4列,剩下的顯示出來
    • #sed '/http/d' thisfile
      刪除thilsfile中含有http字串的所有列,剩下的顯示出來
    • #sed '/[0-9]\{3\}/d' thisfile
      刪除thisfile中含有3個數字的所有列,剩下的顯示出來
    • #sed '/^$/' thisfile
      刪除thisfile中的所有空白列,剩下的顯示出來 
    • #sed '/http/!d' thisfile
      刪除thilsfile不含有http字串的所有列,剩下的顯示出來
    • #sed -n '/http/p' thisfile
      印出thisfile中含有http字串的所有列(-n是抑制預設全部印出的選項)
    • #sed -n 's/http/web/gp' thisfile
      將thislfile中所有的http字串改為web, s為取代(substitute)的命令, g表示全域(global),不加g時,只會更換第一個找到的http字串
    • #sed -n 's/http//gp' thisfile
      將thisfile中所有的http字串刪除 
    • #sed 's/^...//' thisfile
      將thisfile中每一行的前三個字元刪除 
    • #sed -n 's/\(http\)/\1s/gp' thisfile
      使用\1將符合http字串的部份存起來,再抓出來使用,所以上面是將每一列中的http字串換成https字串
    • #sed -n '/AAA/ s/123/456/p' thisfile
      找到在thisfile中有AAA的資料列後,再將該列的123換成456
    •  #sed -n '/AAA/,/DDD/ s/123/456/p' thisfile
      找到在thsifle中AAA列至DDD列的所有資料列中,將123換成456
    •  #sed -n '2,4 s/123/456/p' thisfile
      將thisfile中第2~4列的123換成456 

     

     

     

     

     

     

    awk簡易筆記

    awk是種可以處理資料,且產生格式化報表的語言,在shell程式當中廣泛的被使用。awk的工作方式是讀取資料檔,將每一列資料視為一筆記錄(record),每筆記錄以欄位分割符號分成若干個欄位(類似csv),然後輸出各個欄位之值。

    #ps auxw|awk '{print $2}'
    以上指令印出 ps auxw 指令中,每一列資料的第二欄(pid) 

    awk處理記錄的方法,是將指定的pattern套用到每一筆記錄當中,若記錄符合指定的pattern,則執行指定的action。action與pattern任一個可以省略,如果只有pattern,表示只要對符合pattern的記錄作用。如果只有action,表示要處理所有的記錄。

    awk常用的格式

    • awk 'pattern' files: 把符合apttern的資料列全部列出
    • awk '{action}' files: 對每一列都執行action的動作
    • awk 'pattern {action}' files: 對符合pattern的資料列,執行action的動作

    #awk '/http/' web.log
    顯示web.log中含有http pattern的資料列 

    #awk '/http/ {print $1, $2}' web.log
    顯示web.log中含有http pattern的第一欄及第二欄的資料

    #awk -F: '/^admin/ {prnt $3, $4}' /etc/passwd
    用-F指定欄分割符號為:,印出admin為開頭的第三欄及第四欄的資料 

    Example:

    #ifconfig|grep 'inet addr:'|grep Bcast|awk '{print $2}'|awk -F: '{print $2}'
    取得網路卡的ip address

     

    2011年1月23日

    Linux們的對話

    每次看到這個對話都覺得很經典,乾脆就轉貼上來了.

    有一天,Arch,Ubuntu,Debian,Fedora,Gentoo約好要一起試車。他們約在城外的一間速食店見面。
    Ubuntu是一個新秀,他車上永遠有一大多酷炫的裝飾,和最新的技術。
    Debian是個老實的守舊派,他兩年前當大家都在用引擎2.6的時候,他還在用引擎2.2。不過聽說這兩年他也換成引擎2.6了。
    Fedora繼承爺爺留給他的車子之後,努力的改造一番之後倒也沒有辜負爺爺的給的跑車。他爺爺曾經是跑車界的第一人,也留給Fedora一些別人沒有的技術。
    Gentoo是個古怪的實踐家,他車上除了一般配備之外,他還有一套可以輕鬆換掉輪子的工具,他甚至有一套可以修理這套工具的工具(Bootstrap)。
    Archlinux是Gentoo的堂弟,他也和他堂哥一樣,只是他很多東西可以買現成的就買現成。必要時候才會拿起工具包敲敲打打。

    他 們集合後,從城外出發,一開始領先的Gentoo和Archlinux,因為他們車上沒有太多累贅的配備,跑起來特別快。 Fedora,Debian,Ubuntu稍稍落後一小段。後來快到城內時下起雨來,大家紛紛換成雨胎,Gentoo首先察覺到下雨,他一停下來,大家也 跟著停車換輪胎。

    Fedora,Debian,Ubuntu,Archlinux換上預備的輪胎就上路。
    Gentoo還在拿起工 具打造他專屬的雨胎。

    Fedora,Ubuntu,Archlinux所用的雨刷是兩個月前最新的技術,他會針對雨勢大小調整速度,但是未經完整測試的結 果就是,遇到閃電就會失常而阻擋視線。幸好Debian用的是手動控制的雨刷,沒有問題的繼續前進。
    到了城裡,遇到紅燈,大家紛紛停下來。漫長的紅燈大家等得有點不耐煩,這時看到Windows騎著腳踏車橫越馬路。
    Windows說:你們還在開過時的跑車嗎?為何不試看看腳踏車?你看我騎得不也很平穩?而且自從我加了輔助輪(WINXP)之後我已經不常跌倒(Crash)了。況且連我這樣的小孩子都會騎得很好,而在IIS牌的紅綠燈下,你們只是眼睜睜的看著我騎過去。
    語畢,Windows走了之後,Gentoo問:他剛剛講什麼?
    Ubuntu和Fedora預設有裝samba,稍微可以和Windows溝通,但也說不上來。
    Ubuntu說:好像是在謝謝我們讓他過去…..吧。
    Archlinux,Debian:好有禮貌的小孩!

    綠燈亮了,他們紛紛出城。出了城外,他們發現開始下雪。下雪已經超出他們常識之外,因為這個地方很少下雪。

    Fedora和ubuntu打電話回原廠尋求解答。
    Debian和Archlinux開始詢問google。
    Gentoo拿起工具,開始想要把他的雨胎纏上鍊子。
    Archlinux看著表哥,也學著要把雨胎纏上鍊子,只是帶很少工具,所以花了比較多時間。
    隨至Archlinux和Gentoo再出發之後。

    Ubuntu也收到原廠外派更新組件車的服務。
    Fedora也從使用者群組得到雪胎套件。
    Debian由於現有輪軸不相容雪胎,所以用雨胎硬上。

    這是一場試車活動,沒有起點和終點。
    大家只是想從別人身上再次確認自己玩車的方式是自己想要的。
    當然,這只是一場試車活動,如有雷同…存屬巧合。:p

    2011年1月18日

    Linux drop cache功能

    要觀察Linux 運作時的虛擬記憶體,可以使用vmstat或是觀察/proc/meminfo兩種方式皆可。

    vmstat -S m
    watch cat /proc/meminfo

    在Linux kernel 2.6.16以後,新增drop caches的機制,只要利用讀寫 proc 檔案就可以清除 cache 記憶體檔案:
    release page cache:

    echo 1 > /proc/sys/vm/drop_caches

    release dentries and inodes:

    echo 2 > /proc/sys/vm/drop_caches

    release page cache, dentries and inodes:

    echo 3 > /proc/sys/vm/drop_caches

    2011年1月5日

    Linux中光碟轉iso格式



    簡單一個命令就可以完成此功能:
    dd if=/dev/cdrom of=XXX.iso

    2010年11月30日

    Linux回到上一次目錄

    有的時候在console模式下,進到了一個目錄,但是必須和另外一個目錄切換來切換去,這個時候除了再開一個console外,有個指令可以快速回到上一次到達的目錄。
    cd -
    #效果等同於在bash下的
    cd $OLDPWD