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

2012年4月19日 星期四

[Linux][RAM Info]

Here are some commands for query ram related information.

Q1. How many slots?
A1. sudo dmidecode | grep -P -A5 "Memory\s+Device" | grep Size | grep -v Range

Q2. The maximum capacity supported.
A2. sudo dmidecode | grep -P "Maximum\s+Capacity"

Q3. RAM frequency.
A3. sudo dmidecode | grep -A16 "Memory Device" | grep "Speed"

References:
http://linux.chinaitlab.com/command/837383.html

2012年4月18日 星期三

[Linux][gprof and gcov]

[gprof] performance analysis

flag used: -pg

gcc -pg test.c
./a.out
gprof a.out > test

[gcov] code coverage

flag used: -ftest-coverage

gcc -ftest-coverage test.c
./a.out
gcov test.c

References:
http://blog.superd.org/index.php/2004/11/02/39/
http://codingfreak.blogspot.com/2009/02/gcov-analyzing-code-produced-with-gcc.html

2012年3月24日 星期六

[Linux][Ubuntu][Kernel Local Version 比較]

試了兩種方法

http://zqpmmemo.blogspot.com/2012/03/linuxubuntukernel-local-name.html
http://zqpmmemo.blogspot.com/2012/03/linuxubuntuerror-message-after.html

一個是用 make-kpkg 的 --append-to-version。

一種是修改 kernel 裡的 Local Version,且在 compile kernel 的過程中,修改 debian/control 這檔案裡的資訊使兩者一致。

兩者都能達到同樣的結果,不過就手續上而言的確後者比較麻煩一些。

[Linux][Ubuntu][Kernel Local Name]

因為直接改 Kernel 裡的 Local Name 需要一些方法才能正確的編譯。

所以乾脆直接利用 make-kpkg 的 flag 來改比較方便,就是「--append-to-version」。

指令如下:

sudo fakeroot make-kpkg --initrd --append-to-version=-zqpm kernel_image kernel_headers

編出來的檔案在我這邊的情形是

linux-headers-3.1.10-zqpm_3.1.10-zqpm-10.00.Custom_amd64.deb
linux-image-3.1.10-zqpm_3.1.10-zqpm-10.00.Custom_amd64.deb

安裝好後在 grub.cfg 呈現的樣子是

menuentry 'Ubuntu, with Linux 3.1.10-zqpm' --class ubuntu --class gnu-linux --class gnu --class os

理論上來說,重開機後選它登入後 uname -a 顯示類似

Linux 3.1.10-zqpm

[Linux][Ubuntu][Error Message After Compiling]

在 make menuconfig 後於 local version 填入了 zqpm,但在 compile 之後會出現類似

"dpkg-gencontrol: error: package linux-image-3.1.10zqpm not in control info"

這樣的 error message。

原因是在 kernel 資料夾底下 debian/control 這檔案裡的資料與 target file 不符合。

比較直接的解決方法是進行

http://zqpmmemo.blogspot.com/2012/03/linuxubuntucompile-new-kernel.html

的第五步,sudo make-kpkg clean

然後再一次進行第六步。

第六步 Enter 按下去執行指令後立刻開另一個 Terminal。

修改 debian/control 這個檔案。

把開頭為 linux-source、linux-image、linux-header 的字串都加上自己 local version 設定的字串。

以我的狀況就是

linux-source-3.1.10 -> linux-source-3.1.10zqpm
linux-image-3.1.10 -> linux-image-3.1.10zqpm
linux-headers-3.1.10 -> linux-headers-3.1.10zqpm

阿,linux-image-3.1.10-dbg 不用改。

改好後存檔,另一邊的 compile 就讓它自己繼續跑下去吧~

大概這樣子就不會出現 error 了。

方法我自己有試過了,也順利編出在下一步需要用的兩個 .deb 檔了。

不過非人工的作法我還沒找到,似乎跟 make-kpkg 有關。

Reference:
http://ubuntuforums.org/showpost.php?p=9638461&postcount=1488

2012年3月21日 星期三

[Linux][Latex][右上角的 (R) 或是 TM]

ABC 後加上 \textsuperscript{\texttrademark} 這樣會在 ABC 的右上角出現代表商標的 TM。

將 \texttrademark 改成 \textregistered 則會在右上角出現代表註冊的圈圈內的 R。

2012年3月20日 星期二

[Linux][Ubuntu][調整單一 Terminal 內字體的大小]

剛剛無意間試出來的。

在一個 Terminal 下,按 「Ctrl」 + 「-」 可以縮小該 Terminal 的字體。

不過那個 <-> 是在英文字母區塊的那個 「-」,上頭的注音符號是ㄦ。

按數字鍵的不會作用。

而要放大該 Terminal 的字體,就是按 「Ctrl」 + 「Shift」 + 「=」。

說到底,「Shift」 + 「=」 也就等於是 「+」 了。

不過在這邊為了能清楚知道按鍵要怎麼按,所以還是採用比較麻煩的敘說方式。

同樣的,按數字區的 「+」 並不會作用。

2012年3月15日 星期四

[Linux][Ubuntu][Compile a New Kernel]

此處以 3.0.24 做範例,我的 Ubuntu 版本是 10.04。

裡邊有些所需要的 package 自行安裝,反正系統會提醒的。

============================================================

從 http://www.kernel.org/ 下載 linux-3.0.24.tar.bz2 到 /usr/src。

1) sudo tar zxvf linux-3.0.24.tar.bz2

2) sudo cd linux-3.0.24

3) sudo make menuconfig
(有出現錯誤的話看這裡:
http://zqpmmemo.blogspot.com/2012/02/linuxubuntumake-menuconfig-requires.html)

4) 挑選自己想要編的項目,可以以核心 (*) 的型式或是模組 (M) 的型式,完成後退出並儲存 configure。
(會有個 .config 檔產生在同目錄下)

5) sudo make-kpkg clean
(optional)
(沒有 make-kpkg 的話就 sudo apt-get install kernel-package 吧!)

6) sudo fakeroot make-kpkg --initrd --revision=3.0.24 kernel_image kernel_headers
(其實 = 後面可以加上自己想要的編號或文字,只是我習慣直接寫上版本號)
(不過就是會產生等下有點有趣的狀況就是了)
(這個時間會有點長)

7) cd ../
(會產生兩個開頭為 linux- 的 .deb 檔案)
(以我為例的話是 linux-headers-3.0.22_3.0.22_amd64.deb 和 linux-image-3.0.22_3.0.22_amd64.deb)

8) sudo dpkg -i linux-*.deb

9) sudo vi /boot/grub/grub.cfg
(雖然理論上步驟八就會自動幫忙寫入,不過還是自己檢查一下吧)

10) sudo reboot
(沒問題的話就可以 reboot 選自己剛編好的 kernel 開機囉)

Reference:
http://blog.xuite.net/robert1030tw/blog/19639294-Debian%2FUbuntu+%E7%B7%A8%E8%AD%AF%E6%A0%B8%E5%BF%83

[Linux][Ubuntu][Change NIC Priority via Metric Value]

說實在的不算是設定 priority,只是算讓系統知道說這條路比較好而已。

所以送封包出去時會優先走這條路。

情況是這樣的,我有兩張網卡,兩張各有各的 IP,兩張都可以連線到外邊。

但我想要以 eth0 作為主要連出去的對象。

所以我改了 /etc/network/interfaces 裡 eth0 跟 eth1 的 metric 值。

直接在 eth0 跟 eth1 網路設定中加上「metric 」就好了。

範例如下:

auto eth0
iface eth0 inet static
address 192.168.77.88
netmask 255.255.255.0
gateway 192.168.77.254
metric 1

metric 的值愈小代表路徑愈佳,而我 eth1 的 metric 是設 9999。(印象中是極限了)

所以之後封包船送都會以 eth0 為優先。

2012年3月12日 星期一

[Linux][Ubuntu][Update GCC Version]

偶爾會碰到一些 GCC 4.6 版本的要求,雖然用舊有的 4.4.3 也可以做。

不過這次就趁勢升級一下好了。

由 sudo apt-get install 並沒辦法升級,所以要先

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.6
sudo apt-get install g++-4.6

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 20

這兩道指令最後的「20」應該是 priority,但為什麼給定 20,目前還不清楚。

當 update-alternatives 的選擇是設定為 auto 時,會去看 priority 的值,值越大越優先。

sudo update-alternatives --config gcc
sudo update-alternatives --config g++

最後這兩道指令都會出現「There is only one alternative in link group gcc: /usr/bin/gcc-4.6」。

所以應該是可打可不打吧。

所有指令完成後就可以發現自己的「gcc --version」和「g++ --version」顯示出「現在最新」的 4.6.2 囉。

Reference:
http://superuser.com/questions/310809/how-can-i-update-gcc-to-the-latest-version-in-ubuntu-10-04

2012年3月11日 星期日

[Linux][Ubuntu][Skype P2P connection failed]

本來還想說是不是上游端有設備擋住了。

後來嘗試著把 ~/.Skype/shared.xml 砍掉再重新啟動 Skype。

就可以順利連線了,真是奇也怪哉。

Reference:
http://askubuntu.com/questions/18537/how-can-i-fix-the-login-error-p2p-connect-failed-on-skype

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」,
     似乎挺有趣的,改天再來試試。

2012年1月31日 星期二

[Linux][Ubuntu][Expect]

紀錄我在使用 Exepct 時的種種。

Expect 的位置,/usr/bin/expect

輸入 control+c --> send \003

2012年1月30日 星期一

[Linux][Ubuntu][Japanese content PDF with evince]

雖然知道 evince 沒有對全部的編碼進行預設安裝,不過沒想到連日文也沒有。

看了下錯誤訊息是 "Error: Missing language pack for 'Adobe-Japan1' mapping"

好吧,看來還是跟 Adobe 有些關係。

沒關係,就裝吧。

sudo aptget install poppler-data

關於 poppler-data 的描述是,"Encoding data for the poppler PDF rendering library"。

裝了之後就可以正常瀏覽日文內容的 PDF 文件了。

2012年1月21日 星期六

[Linux][Ubuntu][改 eth 編號]

會吃到 ethX (這邊的 X 泛指 eth 的數字) 設定的,有兩個地方。

/etc/network/interfaces -- 這個檔案本來就是在做 IP 設定時會修改到的檔案。

/etc/udev/rules.d/70-presistent-net.rules -- 這個檔案是紀錄網卡的種種資訊。

像是識別的名稱 (eth0, eth1)、MAC Address 等。

因為之前有多拿幾張網卡進行測試,所以 70-presistent-net.rules 記了許多張網卡的資料。

所以在 ifconfig 理會出現 eth0 與 eth3 的狀況。

因此我把 70-presistent-net.rules 這個檔案刪除了之後重開機,讓系統重新建立識別我插在上邊的兩張網卡。

結果 ifconfig 就得到了 eth0 語 eth1 的結果。

事實上也可以直接進行檔案內容的修改,把 eth3 改成 eth1 之類的。

2012年1月14日 星期六

[Linux][Ubuntu][COM1 via Minicom]

$sudo apt-get install minicom

$minicom -s

Choose "Serial port setup"

Change the value of "Serial Device" to "/dev/ttyS0" in order to use COM1.

Set "Bps/Par/Bits" to what you need.

"Hardware Flow Control"...whatever, up to the user.

Then choose "Save setup as dfl", or you have to configure minicom every time you use.

To use minicom, just type as below.

$minicom

After pressing enter key for twice, it will display the login of the hardware such as switch or others.