2012年2月29日 星期三

[Linux][Ubuntu]['make menuconfig' requires the ncurses libraries]

It said "Install ncurses (ncurses-devel) and try again.", but I couldn't find this

package on Ubuntu.

After searching, there's a package named "libnurses5-dev" could help, so just

"sudo apt-get install libncurses5-dev".

Then "make menuconfig" works.

2012年2月27日 星期一

[Linux][Ubuntu][Free Memory]

幾天前,心血來潮下了 free 來看看 memory usage,意外發現可利用的 memory

剩不到 1/4,明明我也沒用的特別兇猛阿。(雖然 Fx 的確可能會吃的很兇啦....)

但用 ps aux 來看,自己加一加卻發現全體 processes 沒有用到那麼大量的記憶體。

那到底是怎麼回事呢??

再仔細看了一下 free show 出的內容,怎麼 cached 那一塊特別的大!?

該不會是都被 cache 用走了吧 Orz

看了 Reference 的部份才發現 Linux 2.6.16 後的版本在顯示上並不會說有

釋放 memory 的動作,不過實際上當有需要時還是會壓榨出來使用。

若想強勢清除 cache 以達到 free memory 的動作,用以下的指令:

sudo su
echo 3 > /proc/sys/vm/drop_caches

sudo su 就事變身為 root,我有試過

sudo echo 3 > /proc/sys/vm/drop_caches

結果是 permission denied....

所以還是先變身為 root 再執行動作吧。

/proc/sys/vm/drop_caches 裡頭原本的值是 0。

不同的值所代表的意義如下:

0 # default
1 # free pagecache
2 # free dentries, inodes
3 # free pagecache, dentries, inodes

(奇怪,我沒有 drop_caches 的 man page....)

現在把值改為 3,再觀察一陣子看看。

Reference:
http://gwokae.mewggle.com/wordpress/index.php/archives/544
ftp://ftp.alaska.edu/pub/sois/man/drop_caches.html

2012年2月20日 星期一

[Linix][Ubuntu][Windows XP on KVM]

來做個空的 12GB img file。
    dd if=/dev/zero of=/home/user/xp.img bs=1024k count=12000

接下來就是直接灌了。
    kvm -m 1024 -cdrom /home/user/winxp.iso -boot d /home/user/xp.img

    -m 的部份是設定 memory (MB),每次啟動時可以自行調整,
    有次想說用 512 結果 XP 慢到無法忍受。

安裝 XP 的步驟就跟平常一樣。

xp.img 製作好了之後,可以直接用下列指令以該 image 開啟。
    kvm -m 1024 -hda /home/user/xp.img

References:
http://www.howtoforge.com/virtualization-with-kvm-on-ubuntu-10.10
http://www.howtoforge.com/installing-windows-xp-as-a-kvm-guest-on-ubuntu-8.10-desktop

2012年2月9日 星期四

[Linux][Ubuntu][Apache2 change Document Root]

Apache2 把設定檔分散的挺細的。

不過光看檔案及資料夾名稱,還是能猜出它們的用途。

而在 Apache2 要更改 Document Root 的話。

有兩種作法,一種是直接改 sites-available/default 裡面的資訊,

把預設的 /var/www 改成自己想要指定的路徑,然後重新啟動 apache2。

另一種就是複製一份 default 自己改 XD

後者的作法需要 a2dissite default 這個指令來 disalbe default。

然後再用 a2ensite 來指定你希望 enable 的 site。

然後再 restart apache2 就 OK 了。

=========================================================
作法二指令化:

在此假設我要把 Document Root 改成 /var/www/MySite,
並且指定在 Apache2 中的代號是 mysite。

sudo mkdir /var/www/MySite
cd /etc/apache2/sites-available
sudo cp default mysite
sudo vi mysite
Change all the "/var/www" to "/var/www/MySite". <--- 這是動作不是指令。
sudo a2dissite default
sudo a2ensite mysite
sudo /etc/init.d/apache2/restart

此時你會發現在 /etc/apache2/sites-enable 中會產生個 mysite 的 symbol link。

搞定。
=========================================================
Reference:
http://www.ajopaul.com/2010/05/01/ubuntu-apache2-change-default-documentroot-varwww/

2012年2月6日 星期一

[Linux][Script][Shell Programming 333 個應用範例技巧大全集 Memo]

編號是我自己編的,跟書內範例的次序不同。

001. 「echo ${PIPESTATUS[1]}」可得到 pipe 中第二個指令的執行回傳值,
     以判斷是否執行成功。

002. 「nohup command &」可以使得 command 在背景執行時即使使用者登出或
     終端被關閉依然繼續執行。

003. 「eval $variable」可將 $variable 的值當作指令執行。

004. 「ls | tee list.txt | sort -r > list_rev.txt」中,tee 將 
     stdio 得出的 ls stdout 寫到 list.txt 中,同時也寫到 tee 自己的
     stdout。在此例中 list.txt 與 list_rev.txt 會是兩份資料次序相反
     的檔案。

005. 「command > filename 2&1」,將 command stdout 跟 stderr 的訊
     息都寫到 filename 中。更精確來說,是將 stderr 的 message 
     redirect 到 stdout。

006. 在 script 中 self-defined 的 function 可以用 unset 來取消,
     不過真的有人會要這麼做嗎....

007. Argument $1, $2..等的個數,可用 $# 來顯示。

008. Shell 中沒有絕對的 Global Variable.

009. 可以用「shift 」來將 arguments 的 index 移動到第 
     number 個 argument 處。

010. Arguments 為「a b c」時,若是「"$*"」的話是「"a b c"」,
     而「"$@"」的話則是「"a" "b" "c"」。

011. 「${var_name:=default_value}」,var_name 未定義或是空值時會將 
     default_value 設定為它的值。

012. 「$(var_name:?message}」,var_name 未被定義時,會顯示 message 
     並且中止 script.

013. 「readonly var_name」,之後 var_name 這個變數無法被改變。

014. (1) 用「"..."」,字串整體會被當成個單字處理,會進行變數展開及指令替換
         等展開動作。
     (2) 用「'...'」,字串整體會被當成個單字處理,但不會進行展開動作。
     (3) 直接寫入,(1) 的情況加上 tilde expansion 和路徑名稱的展開。

015. 「set -- $var」可以將 $var 這個字串分割成多個單字,
     結果可用 $1 到 $9 來參照。

016. 「substr=`echo "$str" | cut -c${start}-${end}」可取出
     字串 $str 中第 start 到 end 的結果存到 substr.

017. 「echo "$text" | tr 'a-z' 'A-Z'」,將 $text 中的小寫轉成大寫。

018. 「echo "${#text}」,顯示 $text 這一字串的長度。

019. 「random=$(((RANDOM % 10) + 1))」會產生 1~10 的亂數。

020. 「if tty -s; then」,判斷是否是在終端執行。

021. 「basename dir1/dir2/sample.txt .txt」會輸出 sample,看起來
     像是只得到檔名而消除了副檔名。

022. 「bname=`expr "$1" : '\(.*\)\.'`」消除副檔名;
     「ext=`expr "$1" : '.*\(\..*\)'`」取得副檔名。

023. 消除像是 -test 這類的檔案,可以用「rm -- '-test'」。

024. 「: >file_name」會得到個內容為空的 file_name 檔案。
     若使用 touch 的話,當檔案本身已存在時,僅會更改更新日期,而內容不變。

025. 「mkdir -p dir1/dir2/dir3」,當 dir2 跟 dir3 不存在時不會出現
     錯誤,而是會自行幫你產生 dir2 跟 dir3.

026. 在 cp 時加上 "-p",可以保留所有權、存取權、更新日期等資訊,
     但 symbolic link 在複製過去時會變成普通的檔案。

027. 「dd if=/dev/zero of=bigimage bs=1024 count=1024」會製作一
     個 1024x1024 (1M) 大小,名稱為 bigimage 的空檔案。

028. getopts:用來拆參數列。

029. 「echo -n "message"」,輸出 message 後不會換行。

030. 「stty raw」,終端會被設定在 raw 模式,此時就會在每次輸入一個字時
     把資料傳給程式。若想恢復成原本的模式,則用「stty -raw」。

031. stty 的「echo」「-echo」是設定是否要把輸入的文字顯示在畫面上。

032. 「stty raw -echo
      char=`dd bs=1 count=1 2>/dev/null`
      stty -raw echo
      echo "Key pressed: '$char'"」
     程式執行時,按一個鍵不用按 Enter,資料就會被送入程式進行處理。

033. 「stty sane」可以重置終端。

034. 「pgrep '^sshd$'」會顯示執行中的一個名稱叫作 sshd 的行程的 pid 一覽表。

035. 優先順位的數值越大,形程執行的優先順位越低。

036. 「trap '' INT」中,「''」是代表預執行的處理部份是空值,所以在程式執行過程
     中下 ctrl+c 並不會被受理。

037. 「tar cf -path | gzip -c | ssh host "cat > filename.tar.gz」,
     似乎挺有趣的,改天再來試試。