Saturday, July 31, 2010

android環境設定筆記

給未來的裕翔

其實我也有點忘光光了

不過至少在全忘掉之前多少寫一點

這就是累積阿!

首先下載android-sdk_r06-linux_86.tgz

解壓縮進入android-sdk-linux_86資料夾

然後tools/android update sdk來安裝sdk

安裝在android-sdk-linux_86資料夾裡

它建議以後升級或幹嘛的都利用它的manager

不要自己下載覆蓋貼上

再來是Eclipse要安裝adt

開啟Eclipse後, Help -> Install New Software

新增以下網址

https://dl-ssl.google.com/android/eclipse/

然後安裝它所提供的東西

重啟Eclipse之後, Window -> Preferences -> Android

把位置指定剛才的android-sdk-linux_86資料夾

然後Apply -> OK

( 赫然發現, 在Eclipse裡面, Window -> Android SDK and ADK Manager )

( 也可以叫出類似update manager的東西耶! 還是說是一樣的? 本來就有這功能? 還是哪時跑進去的? )

到此, 環境算是設定好了, 應該吧

Eclipse安裝ADT遇到問題

給未來的裕翔

我這次要提供的不是解法

而是禱告感謝神蹟

幾天前無法裝ADT

我真的不知道遇到什麼問題

幾天後, 就可以動了!!!!!! 該死!!!

到底是我重開Eclipse所以可以動?

還是我重開機?

還是因為我玩小遊戲贏了?

我做了一堆有的沒的

但Eclipse一直開在那沒管它

重開機後卻可以動, 這叫我怎麼知道哪步是關鍵步驟!

快速得知process id

給未來的裕翔

平常如果想查某process的pid的話, ex: pidgin

都是ps aux | grep pidgin

剛又進不了^^

在知道process是pidgin的情況下

我可以pidof pidgin

就直接回傳數字了

帥吧^^

藍牙耳機充電後再啟用的最方便方式

給未來的裕翔

如果現在藍牙手機沒電了

充完電後

把藍牙耳機調到"被找模式" ^^      <-      這是錯的, 開啟耳機就可以了

然後在Gnome的右上角上找藍牙符號

由於藍牙耳機還在選單上

選Connect, 有時不會馬上生效, 要稍等再按~

接著選Open Sound Preferences

在裡面的Output

選這隻藍牙耳機, 這樣應該就可以繼續聽了

不需要重開瀏覽器或有的沒的

另外, 如果重開機了

原本建立的連線還會在

耳機不需要先關掉再重新進入"被找模式" ^^

而是直接在Gnome右上角的藍芽符號

從該設備點選Connect即可

再另外, 如果切換到level 3再切換回level 5

直接可以聽喔^^

什麼都不需要做~

後記: 如果充完電後重開卻一直無法建立連線

可以考慮重開進入"被找模式^^ "

然後去藍芽圖示裡的設定點一下該裝置的連線

藍芽圖示就會說它偵測到一個裝置要求連線之類的

搞定~

再後記:

有時開機就可以Connect

有時要進入被找模式再Connect

是不是跟我直接關機或是直接充電有關?

充電算不算關機?

還是關掉時間長短?

先紀錄一下

--------------------------------------------------

我關機一個晚上, 隔天要進入"被找模式"才可以比較快連線

--------------------------------------------------

昨天晚上充電, 剛直接開啟好像就接通了

--------------------------------------------------

吃飯去先關掉, 回來開機就自動接上了

Friday, July 30, 2010

A台有的套件, B台也要

給未來的裕翔

這是一個我很喜歡的實作題

首先, 在A台電腦把所有安裝的套件名稱存檔

rpm -qa -queryformat "%{NAME}" > a-installed.txt

把a-installed.txt複製到B台電腦後

比較優雅的作法是, 把B台也有的套件從名單濾掉
for package in `cat a-installed.txt`
do
rpm -q $package &> /dev/null || echo $package >> b-not-installed.txt
done

先不管指令的回傳值, 上面那個script的意思是

對a-installed.txt的每個套件名稱

測試B本機有沒有, 以rpm -q來測試, 沒有就當false(先不管回傳值)

兩個指令中間是以||區隔

&&檢查到有false就停

||是檢查到有true就停

對那些不存在B本機的套件, 回傳false, 因此就會執行第二道指令

把它們的名稱echo到b-not-installed.txt裡面

那如果B本機本來有存在數個a-installed.txt裡面的套件呢?

在一開始的rpm -q會回傳true, 然後就沒事了~

這樣產生的b-not-installed.txt就是A有B沒有的

接著, yum似乎不能接受stdin來的input

所以可以利用xargs

cat b-not-installed.txt | xargs sudo yum -y install



sudo yum -y install `cat b-not-installed.txt`

似乎後者較好^^

當然啦, 這是比較優雅的作法, 因為少了上面那個bash script

也是無所謂阿, 已經裝過的會自動略過嘛!

rpm的queryformat

給未來的裕翔

原來rpm這麼多選項可以用阿!

如果想知道我裝哪些套件

用rpm的話, rpm -qa就好

不過這是有版本編號和architecture的

如果只想要套件名稱就好呢?

rpm -qa --queryformat "%{NAME}\n"

帥吧!

列出套件安裝順序

給未來的裕翔

原來可以列出套件順序阿!

rpm -qa --last

這樣就會列出從最新到最舊的順序

很久以前裝的套件更新後, 就是當下最新

但是因為套件很多

如果想要順序顛倒, 新的在最下面的話

rpm -qa --last | tac

yum和rpm查詢安裝軟體的速度

給未來的裕翔

如果想知道裝了哪些含有gnome字眼的套件

rpm -qa | grep gnome



rpm -qa '*gnome*'

都可以, 速度差不多

如果要用yum的話

yum list installed | grep gnome



yum list installed '*gnome*'

也是都可以

不過後者快多了!

需要xargs的理由

給未來的裕翔

為什麼需要xargs?

我小小的大腦認為

因為不是每個指令都可以對stdin作處理的

ex: 指令a | 指令b | 指令c

指令a的output就是指令b的stdin

指令b的output就是指令c的stdin

重複一次

不是每個指令都可以對stdin作處理的

所以需要xargs

ex: 如果我想用whatis針對前面指令丟出來的幾個東西作查詢

因為whatis的用法只處理後面接的對象, ex: whatis blabla

無法ex: 指令d | whatis

所以就必須利用

指令d | xargs whatis

以上: 我小小的大腦的結論

sed的delimiter

給未來的裕翔

剛看到一個指令

rpm -ql rpm | sed -n '/bin/s:.*/::p'

一開始看到::就傻眼了

而且還有那個s:

經我小小的大腦思考後

我判斷那個::和:都是delimiter

而完整的意思就是

先以rpm -ql rpm把套件rpm所含有的檔案列出來

再以sed作處理, -n的意思是, sed只列出作處理的那幾行

不加-n的話, 從stdin進來的都會列出來

再來就是重頭戲'/bin/s:.*/::p'

上色加空白以表示方便的看法

' / bin / s : .*/ : : p'

紅色的斜線是第一階段的delimiter, 區隔範圍動作

/bin/的意思是鎖定stdin含有bin的行

後接的s:.*/::p是說, 任意連續字元 .* 以斜線 / 當右側結束字元(貪婪原則)

全部替換為

然後print出來

真是帥呆了!

查某package各版本的log changec和會執行的script

給未來的裕翔

以套件mlocate為例

想看它每個小版本之間的差異的話

rpm -q --changelog mlocate

想知道它在安裝或移除時會額外作啥

rpm -q --scripts mlocate

Thursday, July 29, 2010

grep的正規表示式

給未來的裕翔

如果要在grep裡面用正規表示, ex:

grep '^\[.*\]' file      單引號可以

grep "^\[.*\]" file      雙引號可以

grep ^\[.*\] file      不加不可以

crontab移除注意事項

給未來的裕翔

不管用crontab -e幾個事項

crontab -r會一次全部清除

連問也不問......

Tuesday, July 27, 2010

pts和virtual console

給未來的裕翔

渾渾噩噩過了24載

對於pts和virtual console的差別, 不想再無所謂了^^

pts是pseudo terminal slave, 也就是在桌面環境開啟的terminal

而virtual console就是Ctrl + Alt + F1~F6的那個東西

至於名稱來源我就不知道啦~

為boot menu上鎖

給未來的裕翔

當忘記root密碼的時候, 可以藉由single user mode去建新密碼

帥呆了^^

對於那些不懂linux有這功能的人來說

只要電腦能被別的linux玩家直接接觸, 有鎖等於沒鎖阿!

這讓我超得意也超緊張, 雖然我會改密碼, 但我不會防止人家改我密碼

剛發現, boot menu可以上鎖耶!!!

先以grub-md5-crypt產生一組亂碼

假設叫做 35984ut98h9fx

在/boot/grub/grub.conf新增一行

password --md5 35984ut98h9fx

這樣之後如果人家要edit自己的boot menu

就必須先輸入密碼(但依然可以使用rescue mode破解)

沒要修改的話, 就沒影響(表示我可以遠端開機)

另外發現一件事!

即使我輸同樣的密碼, 不同時間產生的亂碼會不一樣耶!

我在某電腦以normal user產生一組亂碼

再以root身份把它貼到/boot/grub/grub.conf

也可以耶!!!

Monday, July 26, 2010

暫時更改hostname

給未來的裕翔

/proc裡面紀錄著電腦的一些資訊

像是記憶體: /proc/meminfo

或是cpu: /proc/cpuinfo

平常我們設定hostname

是到/etc/sysconfig/network修改, 然後重開機才生效

開機時會把hostname的值紀錄在/proc/sys/kernel/hostname

之後如果輸入指令hostname

它會去讀/proc/sys/kernel/hostname

所以我們可以暫時修改該檔案來達到"不重開機改hostname"的目的

不過記得要改回來阿

不然我也不知道會發生什麼事

查看cpu數量

給未來的裕翔

如果想要查看cpu數量

可以/ecc /proc/cpuinfo

不過這樣顯示的資訊落落長

可以安裝套件x86info

然後輸入指令x86info

可以看到濃縮的cpu資訊

(至少展示長度是濃縮的)

bash的`

給未來的裕翔

剛發現, 在同一行可以用兩次以上的``耶!

ex: mkinitrd --with=raid1 initramfs-raid1-`uname -r`.img `uname -r`

這樣可以製作還有raid1.ko的RAN disk file

阿琪與遠端桌面

給未來的阿琪

如果你說的連線是只有桌面環境的

從linux連到windows的話

先安裝套件tsclient

(linux裡面的套件你就想成是windows裡面的軟體吧)

先切換成root

su -

再以yum下載

yum -y install tsclient

yum安裝過程會跟你確認是否下載

加那個-y就可以自動幫你回答yes

那如果要自動回答no呢? 你來鬧的阿^^?

裝好之後

Applications -> Internet -> Terminal Server Client

-> Add Connection -> Windows Terminal Service

Host填IP就可以了

Username和Password看你要現在填(之後可以直接進入工作畫面)

或是不填(之後連線會先進入登入畫面)

Domain就不用鳥它了, 其它我也沒用過, 有心得再跟我分享吧^^

至於windows連linux桌面, 不會耶, 也不想研究, 哈哈

不過我知道可以, 要裝一個軟體, 名稱我忘了, 不過不想google耶, 哈哈

幫不上忙, 歹勢^^

阿琪與gnome terminal

給現在的阿琪

雖然在linux的桌面環境裡

可以叫出模擬的terminal

然後輸入指令叫出視窗程式, ex: pidgin &

不過這樣會有幾個缺點

有些pidgin的訊息可能會輸出到剛才輸指令的terminal

當然, 沒繼續使用terminal的話沒差

還有一個缺點就是, 萬一不小心關掉terminal

因為pidgin是那個teminal的子程式

就一起關掉啦~

在fedora如何使用中文輸入法

給現在的証琪^^

System -> Preferences -> Input Method -> Input Method Preferences

-> Input Method -> Select an input method -> Chinese -> Chewing -> Add

bluetooth adapter

給未來的裕翔

當以藍芽耳機聽音樂聽到一半時

把藍芽adapter拔掉, 再插上

可以聽耶!!!

Thursday, July 22, 2010

chrome的快捷鍵

給未來的裕翔

原來Alt + 左是上一頁阿!!!

Alt + 右是下一頁

似乎眾所皆知?

Wednesday, July 21, 2010

java編譯多個檔案

給未來的裕翔

如果現在有兩個檔案

design.java和designTest.java

書上說, 編譯時要javac design.java designTest.java

然後java designTest來執行

我也都照做,  後來又多了extends

我的疑問是, 被extends的那個也需要放進來一起編譯嗎?

還是我依舊編譯那兩個, 它會自己去找?

似乎會自己去找?

那我如果一開始就只編譯那個designTest.java

它也會自己去找會用到的東西嗎?

實驗結果: 會耶! 會自己去找!

所以以後只編譯那個designTest.java就可以了

Tuesday, July 20, 2010

vlc player的snapshot

給未來的裕翔

totem似乎沒有snapshot的功能

而vlc player有

Video -> Snapshot

影像會存到

/home/xxxxx/.local/share/vlc

Monday, July 19, 2010

把檔案非註解部份秀出來

給未來的裕翔

以/etc/ntp.conf為例

它裡面的的註解是#

所以先把它cat出來

再利用grep把每列開頭不為#的抓出來

完整命令如下

cat /etc/ntp.conf | grep ^[^#]

如何架設NTP Server

給未來的裕翔

首先

把ntpd服務關掉: service ntpd stop

不然無法先以ntpdate校正時間

架server前

要先以ntpdate粗略校正: ntpdate -b more-accurate-time-server

不然如果時間差太多, 之後本機架好NTP Server似乎就會瀟灑的罷工

接著修改/etc/ntp.conf

server more-accurate-time-server-1
server more-accurate-time-server-2
server more-accurate-time-server-3
server 127.127.1.0 # 我看到的兩範例都有這行, 我也不甚了
fudge 127.127.1.0 stratum 10 # 我看到的兩範例都有這行, 我也不甚了
driftfile /var/lib/ntp/drift
# 想限制可以使用此NTP Server的來源就如下設定
# restrict $$$.$$$.$$$.$$$

之後把ntpd服務打開: service ntpd start

同時設定成每此開機都會啟動: chkconfig ntpd on

搞定~

編譯C++需要安裝的套件

給未來的裕翔

為了編譯 OpenCV 2(因為yum只能下載到1.1)

我需要裝C++編譯器, 不然會一直configure錯誤

看到網頁說gcc也可以編譯C++檔案

親自嘗試後, 如果不是我太笨就是他騙人……

後來想起之前在windows上編譯C++是利用MinGW的g++指令

於是利用所學^^

yum provides g++

失敗~他建議我改成

yum provides /g++

果然找到一個!

gcc-c++

耶!搞好久~~~

結語: 都快忘了重點是編譯OpenCV……

Qt起手包

給未來的裕翔

本來是不想用Qt的

因為之前看過Qt和Gtk的歷史鬥爭文

Qt飾演反派^^

不過既然朋友A和朋友B都希望我學Qt

那就來吧!

首先, 安裝qt-devel套件: yum install -y qt-devel

之後

在要編譯的程式碼的資料夾裡

依序輸入

qmake -project

qmake

make

就產生與資料夾同名的執行擋了^^

真爽~

對partition製作ext3 file system和label

給未來的裕翔

利用fdisk切割好一個partitinon後

本來我是用

mkfs -t ext3 /dev/sda#

tune2fs -L label-name

來達到這兩個目的

剛發現可以一行搞定的簡單指令

mkfs.ext3 -L label-name /dev/sda#

有沒有label成功可用blkid來驗證

又進步了~耶

快速製作大量使用者

給未來的裕翔

寫一個script

for name in name1 name2 name3 # …
do
useradd $name
echo password | passwd $name –stdin
done

如果使用者實在太大量了

可以把所有使用者另外存一個name-file

name1
name2
name3
blablabla

把原來的script修正為

for name in `cat name-file`
do
useradd $name
echo password | passwd $name –stdin
done

搞定~

從光碟製作映像檔+掛載

給未來的裕翔

這是從網路上看到的

(我很需要……)

已經成功做出映像檔

不過還不確定做出來的映像檔可否使用

在此先把指令記錄下來

dd if=/dev/cdrom of=/my-iso-file-destination

搞定!

幾天後的今天

我嘗試掛載幾天前的那天所製作的映像檔

mount -t iso9660 -o loop /where-my-iso-is/file-name.iso /where-I-want-to-mount

可以用耶^^

下次來測試最新防拷電影DVD看看, 以嚴肅嚴謹的科學探討精神~

查詢自動掛載的NTFS硬碟的uuid

給未來的裕翔

我是Fedora 12的LXDE桌面

每當要使用win下的NTFS分割區時

它才會自動掛載在/media下

但我想要開機就自動掛載

可是我看/etc/fstab下的自動掛載大部分都藉由uuid來指定

所以我想知道我使用的NTFS硬碟uuid是多少

網路上查了一下

把步驟記錄下來供我日後使用^^

首先, 使用df -h, 自己觀察一下NTFS使用的是硬碟的哪一個partition

我自己是/dev/sda5

接著, 輸入ll /dev/disk/by-uuid

就可以看到每個partition對應到哪個uuid了

赫然發現

原來我的NTFS在/media下面掛載的名稱就是用uuid!

我還以為是亂數咧~

這時又突然想到

其實我直接用/dev/sda5掛載到我想要的資料夾不就可以了嗎……

不過在此之前我要先知道要用什麼type掛載NTFS

使用mount指令看一下

答案是fuseblk

Good!

ps: 這次嘗試同時驗證了, 一個partition可以同時掛載到多個資料夾上

在Linux安裝Matlab所需的library

給未來的裕翔

其實我真的不想裝Matlab

礙於研究需要

加上學校有提供幾乎沒toolbox的正版

來第二次嘗試一下吧(第一次是我幾乎不會Linux的情況下裝的)

不過這次重點不是如何安裝

而是描述我安裝過程所遇到的一個問題

安裝時顯示缺少libXp.so

過去的我

應該就直接嘗試yum -y install libXp.so吧

結果會失敗

但是 現在的我進步了!

首先

yum whatprovides libXp.so 失敗

依照建議, 再來:

yum whatprovides /libXp.so 失敗

依照建議, 再來:

yum whatprovides */libXp.so 找到套件了^^

yum -y install libXp-devel 成功!

爽阿~

後記: 裝完後還是不能用, 把selinux關掉就可以用了

後記2: 本來想先掛載NTFS硬碟, 再把Matlab安裝在裡面,

結果變成, Matlab安裝在掛載資料夾, 但是NTFS卸載了……奇怪~

traceroute的進化版: mtr

給未來的裕翔

當我使用traceroute tw.yahoo.com時

照理講會顯示所有經過的路徑

可是因為某些原因

有些會顯示星星

此時, 如果改成mtr tw.yahoo.com

都秀出來了!

而且速度超快!

parted怪怪

給未來的裕翔

parted的優點印象中是

可以切割的數量可達幾十個

fdisk好像只能十幾個(也夠了)

另一個我比較重視的優點是

切割完後不需要執行partprobe

來讓系統認識新切割的partition

可用cat /proc/partitions來檢視

不過呢, 不知是我電腦怎

就是無法展現這項優點, 總是說我的什麼在忙碌中

我也不了

因此對我而言, 其實fdisk和parted差不多

就在剛剛

我發現parted致命的缺點^^

不能在切partition的同時製作ext4檔案系統, 甚至ext3也不行

似乎必須另外搭配mkfs之類的來製作檔案系統

嘖嘖~

block size的大小是?

給未來的裕翔

1 kilo bytes

quota用完可能會讓使用者無法登入圖形介面

給未來的裕翔

如果root對home做quota限制

當使用者達到quota硬性上限時

之後會讓使用者無法登入圖介面

因為每當使用者登入圖形介面時

會在其home下面產生一些暫時檔

quota滿了就產生不了

產生不了就無法登入

by 我的Linux老師

WaveLab安裝

給未來的裕翔

在Linux裝完Matlab之後

去MCALab下載WAVELAB850.ZIP

然後解壓縮

把資料夾Wavelab850放到

where-I-install-Matlab/toolbox/之下

變成where-I-install-Matlab/toolbox/Wavelab850

把Wavelab850裡面的WavePath.m複製到(用剪下貼上之後會有錯誤)

where-I-install-Matlab/toolbox/local裡

並改名為startup.m

這樣開Matlab就會自動啟動WaveLab了

接著測試mex有沒compile成功

雖然沒成功也沒關係

但能成功幹嘛不成功?

在Matlab裡面輸入which FWT_PO

如果秀出where-I-install-Matlab/toolbox/Wavelab850/Orthogonal/FWT_PO.mexglx

就是成功!

當然 一開始是會秀出m檔而非mexglx檔的

因為我安裝WaveLab失敗多次

中間做了什麼關鍵步驟我也不是很確定

不過的確有某一次開啟matlab時

它問我要不要compile mex檔

回答yes以後就會編譯出mexglx檔

如果一直沒遇到matlab如此提問

可以嘗試以root開啟matlab試試看

/usr/local/bin/matlab matlab &

改天有機會重裝WaveLab我再仔細研究看哪些是關鍵步驟

現在學業研究進度落後, 暫不考慮

桌面水波特效按法

給未來的裕翔

之前裝了一堆有的沒的compiz相關套件後

有開啟水波特效

不過這是之前做的

詳細步驟全忘了

要講的是

當初不知道為什麼啟動水波特效後沒有任何動靜

就沒去管它

後來發現偶爾會不小心出現水波特效

原來是要用按的

剛上網查了一下按法

Ctrl + Win + 滑鼠任意移動

爽阿^^

快捷鍵(有些要開compiz)

在此紀錄我還不熟練但很喜歡的桌面快捷鍵:

Ctrl + Alt + d: 其它壓住不放, 按一下d把所有視窗放大, 再一次縮小所有視窗

(如果目標是縮小所有視窗, 滑鼠移到最右上, 點桌面任一點也可達到同功能)

Ctrl + l(L小寫): 在console裡等同於是clear指令, 但更方便

(在firefox裡就是跳到網址列)

Ctrl + q: 可以關掉大部分程式, 不過關不掉console

Ctrl + d: 可以關掉console^^

Alt + 滑鼠滾輪上下: 調整游標所在位置下的第一個視窗的透明度

Alt + Tab: 在目前桌面的所有工作中切換
Ctrl + Alt + Tab: 在所有桌面的所有工作中切換

Ctrl + Alt + 鍵盤下: 樸素式切換桌面
Ctrl + Alt + 鍵盤左右: 炫麗式切換桌面
Ctrl + Shift + Alt + 鍵盤左右: 把正在工作的視窗移到左或右桌面

Ctrl + Win + 滑鼠隨意操作: 水波
Shift + F9: 到處是水波, 像下雨時的地面一樣, 再按一次才會停

Win + 滑鼠左鍵拖曳: 左鍵放開就會把剛框選的區域便圖檔放桌面
Win + 滑鼠右鍵拖曳: 右鍵放開就會局部放大, Esc離開

MCALab安裝

給未來的裕翔

當初裝Matlab就是為了裝WaveLab

而裝WaveLab就是為了裝MCALab

終於讓我走到這一步了 嗚嗚~

這次我直接仿照WaveLab的安裝方式

把解壓縮的資料夾放到where-I-install-Matlab/toobox/下

把裡面的MCAPath.m複製到where-I-install-Matlab/toobox/local/裡

就在我想用root開gedit編輯where-I-install-Matlab/toobox/local/starup.m的同時

錯誤! 說什麼我在唯讀的硬碟上!

明明就不是阿~!

後來我使用echo MCAPath >> startup.m卻可以

怪咧~

而開啟Matlab後也有warning, 說什麼無法寫入

即便我重新以sudo開啟Matlab也是一樣

後來

我把MCALabWithUtilities和Wavelab850的user和group換成root.root

chwon -R root.root MCALabWithUtilities

chwon -R root.root Wavelab850

重開Matlab, 成功!

為什麼成功還是想不透~

原來odt轉pdf可以上密碼阿

給未來的裕翔

File -> Export as PDF -> Security -> Set open password

MCALab安裝

給未來的裕翔

當初裝Matlab就是為了裝WaveLab

而裝WaveLab就是為了裝MCALab

終於讓我走到這一步了 嗚嗚~

這次我直接仿照WaveLab的安裝方式

把解壓縮的資料夾放到where-I-install-Matlab/toobox/下

把裡面的MCAPath.m複製到where-I-install-Matlab/toobox/local/裡

就在我想用root開gedit編輯where-I-install-Matlab/toobox/local/starup.m的同時

錯誤! 說什麼我在唯讀的硬碟上!

明明就不是阿~!

後來我使用echo MCAPath >> startup.m卻可以

怪咧~

而開啟Matlab後也有warning, 說什麼無法寫入

即便我重新以sudo開啟Matlab也是一樣

後來

我把MCALabWithUtilities和Wavelab850的user和group換成root.root

chwon -R root.root MCALabWithUtilities

chwon -R root.root Wavelab850

重開Matlab, 成功!

為什麼成功還是想不透~

MCLab使用

給未來的裕翔

好奇:

當我把WaveLab和MCALab工具放在where-I-install-Matlab/toolbox裡

是不是不管資料夾第幾層的m檔都可以直接在Matlab呼叫?

答案是: 是!

不過呢~

version libmx.INTERNAL not defined in file libmx.so with link time reference

幾乎不管執行哪個指令都會出現類似上面的error

google結果是, 建議可以看是否缺少所需的library

於是對有問題的mexglx檔使用ldd

ldd xxx.mexglx

發現有三個dynamic lib我沒有

libmx.so

libmat.so

libmex.so

這時老招重套

yum whatprovides libmx

yum whatprovides */libmx

yum whatprovides *bin/libmx

都不行

甚至出現新警告

說什麼database deform

再次google

建議先執行yum clean all

再yum whatprovides libmx

就可以了!!!!!!

不過呢

ldd xxx.mexglx依舊失敗

於是自製連結檔

cd /usr/lib

ln -s libmx-1.0.so.0 libmx.so

此時ldd xxx.mexglx抓到libmx.so了^^

但剩下的libmat.so和libmex.so無論怎麼yum whatprovides就是找不到

突然靈光一閃

locate libmex.so

locate libmat.so

原來matlab自己有提供阿, 連libmx.so都有… 嗚嗚……

繞一大圈……

突然腦中想起剛剛google眾多建議中

有一位建議修改LD_LIBRARY_PATH

於是我正在參考網路文章

筆記先紀錄到此

真是慢長的戰鬥阿……

MCALab的mexglx

給未來的裕翔

昨天嘗試修改LD_LIBRARY_PATH之後

開matlab整個視窗亂掉了

原本以為是因為我亂修改LD_LIBRARY_PATH

可是剛剛登出登入後

以root身份開第一次matlab還是會這樣

重開一次matlab就沒事了

所以應該不是LD_LIBRARY_PATH直接影響

昨天新心得:

即使我以locate找出libmx.so libmex.so libmat.so所在

把所在路徑加入到LD_LIBRARY_PATH

echo “LD_LIBRARY_PATH=/path-I-want:$LD_LIBRARY_PATH”

依然無效!

因為我忘記export LD_LIBRARY_PATH

export好之後, ldd xxx.mexglx都找到了

但是

matlab裡面執行依然失敗~

mrdwt.mexglx: symbol mxCreateDoubleMatrix, version libmx.INTERNAL not defined in file libmx.so with link time reference.

剛剛使出下策

把locate libmx.so所在資料夾整個複製到 /usr/lib底下

修改/etc/ld.so.conf.d/matlab.conf

matlab依然失敗~

直接把libmx.so複製到/usr/lib

matlab依然失敗~

甚至當我ldd xxx.mexglx時

not found的library變更多了

之前一度都找到了說

現在可能原因那麼多

我也不知道是哪個造成的

真想放棄……

現在朝向把mexglx檔移掉

讓matlab執行m檔

結果還是依然失敗

直接顯示找不到mexglx檔

快不知道還能怎麼辦了

又不是我把所有方法都試過

就可以跟理直氣壯跟教授說: “該試的都試了 我無可奈何”

我哪那麼有種~

MCALab的mex錯誤嘗試

給未來的裕翔

我一直不確定

mrdwt.mexglx: symbol mxCreateDoubleMatrix, version libmx.INTERNAL not defined in file libmx.so with link time reference

這錯誤訊息的原因為何

一直以為是libmx.so抓不到

現在要來驗證一下

是否真的沒抓到

為了達到所謂的沒抓到

我很乾脆的把所有我因嘗試而複製的和原本的libmx.so砍掉

重開matlab

看之後在matlab輸入MCALab指令所產生的錯誤訊息會不會不一樣

結果

光是重開matlab就失敗了, 爽!

以下為重開matlab的錯誤訊息

where-I-install-matlab/bin/glnx86/MATLAB: error while loading shared libraries: libmx.so: cannot open shared object file: No such file or directory

表示之前都有抓到

之前失敗幾乎可以篤定是我matlab太新和MCALab的所提供的 mexglx不合

確定一件事情真讓人爽快^^

美中不足的是我還是沒解決問題

後記:

我真該為libmx.so備份的……

debug到賭氣刪檔真的很不應該~

看來要重灌matlab了……

nmap

給未來的裕翔

想要測試某主機listen哪些service

nmap ###.###.###.###

想要測試某網段哪些主機會回應ping

nmap -sP ###.###.###.*

選項sP就是scan ping

pidgin清螢幕

給未來的裕翔

剛用pidgin跟水哥聊天的同時

赫然發現

Ctrl + l(L小寫)

可以清對話內容耶!

雖然沒什麼幫助

ps 被清掉的對話內容, 依舊會紀錄到log裡, 如果此功能有開的話~

Matlab的libmx.so被砍掉怎辦?

給未來的裕翔

昨天一時衝動把這砍了

雖然驗證了一些事情

但其實我不需要完全砍掉的…

問題一: touch一個同名檔可以嗎?

不行!錯誤訊息如下:

error while loading shared libraries: /win-data/matlab-linux/bin/glnx86/../../bin/glnx86/libmx.so: file too short

問題二: 也許是matlab有檢查格式, 把libmat.so複製一份成libmx.so可以嗎?

不行!錯誤訊息如下:

symbol lookup error: /where-I-install-matlab/bin/glnx86/../../bin/glnx86/../../bin/glnx86/../../bin/glnx86/../../bin/glnx86/libmwmathcore.so: undefined symbol: mxReallocEx

所以, Matlab的libmx.so被砍掉怎辦?

不知道^^

/usr滿了似乎不影響重裝Matlab

給未來的裕翔

因為libmx.so被我砍了

苦無良策, 於是重裝matlab

不過昨天yum其他東西時

好像因為/usr滿了而失敗

(似乎還有空間, 我猜是inode用完, 可是inode又不容易用完~)

本來很擔心matlab也會裝失敗的

結果平安無事^^

改天再來研究怎麼處理/usr滿了的問題

總是mex而不是m

給未來的裕翔

關於處理mex無法執行的問題

最後我決定逃避^^

在xxx.mexglx所在資料夾裡新建一個資料夾

把xxx.mexglx移過去

結果matlab顯示找不到

可是同名的m file明明也在當下的資料夾

重開matlab後

又發生mex無法執行的訊息, 而不是找不到

馬上把資料夾移到matlab路徑之外的地方, 像是家目錄

matlab又發生找不到的訊息

重開matlab後

產生新錯誤訊息了!可以確定找到同名的m file了

我個人結論:

關於matlab執行mex和m file的順序

我不知道怎麼改

不過預設是mex優先於m file

也許是MCALab的MCAPath的關係(或是maltab特性)

就是, 即使我在MCALab產生新資料夾

在重開matlab後也會被新增到path變數

而matlab執行function的順序似乎是先以mex找所有path

找不到再以m找所有path, 這可以解釋為什麼總是找到mex而非m file

把mex移到家目錄後, 開啟matlab執行function

會顯示找不到, 可是, 此時再把mex移回原來在matlab的位置後

依舊找不到

關於這點, 我覺得是因為在matlab開啟後

對所有在它path裡的function有做一個類似snapshot的東西

一開始沒有, 那就是沒有, 即使之後添加也當沒有

一開始有, 要用到就到所在位置執行, 突然找不到就秀錯誤訊息

以上

高興歸高興

已經確定就算成功執行m檔

還是有新的錯誤息……

vim快速取代

給未來的裕翔

剛拿到一份列表:

name1,email
name2,email2
名稱,電子郵件列表
name3,email3
name4,email4
名稱,電子郵件列表
……

應要求把它換成

email1,email2,email3,……

首先以gvim開啟

在command模式

輸入 :%s/名.*\n/

接著 :%s/.*,/,/

接著 :%s/\n/

最後手動把第一行一開始的逗號去掉

大功告成!

好有成就感^^

log server架設成功!

給未來的裕翔

雖然這沒什麼了不起

不過也夠我爽一陣子了^^

趁印象清晰時趕快寫筆記

本來 以為syslog和rsyslog的教學可以互通的

居然不行!

至少在log server不行!

很多syslog的教學說要在log server的

/etc/sysconfig/syslog裡面增加一個選項, -r

在此鄭重強調

對應到rsyslog的/etc/sysconfig/rsyslog裡, 什麼也不需要更動

只需要在/etc/rsyslog.conf裡面



#$ModLoad imudp.so
#$UDPServerRun 514

註解註解掉, 就可以當log server了^^

當然, 必須先重新啟動一下

service rsyslog restart

而在client端

也是修改/etc/rsyslog.conf

把log要存的位置

從檔案改成@log-server即可

client改完應該也要重新啟動吧

這我倒是沒注意

總之, 爽阿^^

ps: 設好之後, 馬上以logger “log server test”來測試一下

應該會在/var/log/messages裡出現吧

mex function

這兩天想盡辦法讓matlab執行同檔名之m file

不料 m file裡面居然全是註解!

這樣最好可以執行啦!

沒辦法

於是只能從recompile方面著手

昨天寄信給MCALab作者後

今天他很客氣的叫我看清楚documentation^^”

所以我個別去下載CurvLab和RWT toolbox

因為裡面才有c source code

後來在matlab嘗試mex mrdwt.c

失敗, 它說MRDWT未定義

原本我以為是因為mex.h的檔案沒放在一起

後來威哥提醒我mex.h是matlab的檔案, 應該是有讀到

想想也是, 於是grep MRDWT * -l

得到mrdwt.c mrdwt_r.c

沒看到header檔, 我覺得怪怪

google許久, 嘗試許久, 突發奇想再看RWT的documentation

裡面提到compile.m

於是去看compile.m裡面的code

是類似mex mrdwt.c mrdwt_r.c

經嘗試可以成功!

原本我以為

兩個檔案已經沒有MRDWT這function

compile都不會過才是

卻沒想到

mrdwt_r.c就是在定義MRDWT阿!

之前明明看過類似的c編譯

居然沒想到matlab裡也是這樣 太糟糕了!

但又好爽!

看到曙光了!

ps: 編譯過程, matlab警告我gcc太新

原本想找舊的來試試

不過我也不會用

幸好先嘗試compile.m

結論: gcc太新沒關係的^^

ssh-copy-id的-i選項

給未來的裕翔

ssh-copy-id的功能

是把經過ssh-keygen -t dsa產生的~/.ssh/id_dsa.pub

append到ssh server的~/.ssh/authorized_keys裡

之所以要ssh-copy-id -i ~/.ssh/id_dsa.pub

是因為我的public key非它處理的預設檔名, identity.pub

所以需要使用-i選項來指明我的public key檔名

又一個mex問題

給未來的裕翔

昨天編譯RWT的tool box成功後

晚些遇到CurveLab的tool box的mex也需要編譯

想說應該差不多, 就留到今天來處理

今天看我下載的CurveLab(不是MCALab內帶的)

裡面雖然沒有compile.m

不過有makefile

make lib後失敗, 顯示找不到fftw.h

再次利用所學^^

yum whatprovides fftw.h

找到且安裝好後

make lib又顯示memcpy和memset未定義

可是我檢查一下我的/usr/include/string.h是有的

於是一個個去看說有問題的檔案

找它們inlcude的來源

利用C++所學^^

增添一行 #include

對每個有問題的都這樣做

就可以make lib成功^^

接著make matlab(make要接什麼, 我是看它說明手冊的)

又失敗!

它說找不到/usr/lib/fftw/.libs/libfftw.a

我locate libfftw.a

顯示/usr/lib/libfftw.a

於是做個連檔給它

ln -s /usr/lib/libfftw.a /usr/lib/fftw/.libs/libfftw.a

完全搞定~!

可以執行MCALab了!!!

嗚嗚, 為了走到這一步

我真是飽受折磨阿, 嗚嗚

不過呢, 要是它沒提供windows版的mex file

相信我們實驗室只有我有技術克服遇到的問題^^

因為那兩個博班是windows頭號大粉絲~

dump使用

給未來的裕翔

dump是備份工具

一次對一個partition作

第一次完整備份

dump 0uf /destination /source

後續 incremental備份

dump 1uf /destination /source

數字不一定要1, 只要大於0皆可

u選項是update, 完整備份時似乎不需要

f是file, 應該是指明後面的destination是file

報告完畢

dump之後的restore

給未來的裕翔

完全恢復到當下所在位置, 而非dump檔所在位置

restore rvf dump-name

部份恢復

restore xvf dump-name specific-file

檔案列表

restore tvf dump-name

互動模式

restore ivf dump-name

Software Raid建立

現在我要練習的是RAID 1, Mirror

首先parted兩個partition出來

假設我切出/dev/sda13, /dev/sda14

為它們設tag, 不然據說之後開機會失敗

因為系統不把它們視為Raid

設tag方式為

parted /dev/sda set 13 raid on

parted /dev/sda set 14 raid on

接著把它們合體

mdadm -C /dev/md0 -l 1 -n 2 /dev/sda13 /dev/sda14

接下來就可以把它當成一顆新的partition

製作file system後就可以mount了

RAID萬一壞掉

給未來的裕翔

情境:我的/dev/md0由/dev/sda12和/dev/sda13組成

先模擬壞掉一顆

mdadm /dev/md0 –fault /dev/sda12

可用mdadm /dev/md0 –detail檢視

假設我要換硬碟, 要先把壞掉的從 md0分離出來

mdadm /dev/md0 -r /dev/sda12

換好硬碟後, 切partition和設標籤

然後加回/dev/md0

mdadm /dev/md0 -a /dev/sda12

此時如果mdadm /dev/md0 –detail

可以看到兩個partition正在作re-sync動作

整體大概就是這樣

用iptables新增一個chain

給未來的裕翔

iptables -N CLASS-RULES

這樣就會在filter這個table新增一個chain, CLASS-RULES

iptables -A INPUT -j CLASS-RULES

這樣到INPUT的都會到CLASS-RULES

service iptables save

簡單講一下, filter是一個table, 同等級的還有nat和mangle

而filter有三個chain: input, output, forward

它們的關係就是這樣~

c++左值右值

給未來的裕翔

在c語言裡面沒有左值右值的觀念

c++才有左右值

1 = X+Y不能放在左邊是因為1是右值, 不能出現在左側

在c++裡

++x回傳左值, x++回傳右值

對 z += -x +++++ y來說

在c++裡面, 似乎是++y先做

回傳左值後再一次++y, 最後-x+y, ok~

在c裡面z += -x +++++ y, 應該也是++y先做

但是c沒有左右值觀念, 一律右值

所以++y再做一次, 就錯了, 不能對右值進行++x或是x++

就像不能對8做++8或是8++一樣

也許是因為它們沒有地方存?

其實我也不知道常數存哪

size_t的0減1

給未來的裕翔

size_t的變數如果為0

減1後不會是-1

~摘自 " 我又幫了賴雞一次^^ "

人生第一台無線耳機^^

給未來的裕翔

繼無線滑鼠之後, 無線耳機也來啦!

無線滑鼠沒什麼好記的, 隨插即用

不過無線耳機需要簡單設定一下

首先, 不是每台電腦都可以使用的

似乎是看電腦有無bluetooth adapter

(沒有bluetooth adapter可能也可用? 等我成功再說~)

學妹借我的電腦有

所以裝好後, GNOME桌面右上角一直有一個藍牙標誌

為了讓電腦抓到我的藍芽耳機, 在耳機關機時

壓住約八秒, 進入被尋找模式^^"(亂創名詞)

此時點一下GNOME的藍芽標誌

Set up new devices... -> Forward -> 選搜尋到的藍芽耳機裝置

-> PIN options -> '0000'

此時, 音樂還是會從電腦放出來, 需要設定一下

點一下藍芽標誌 -> SBH-2508 -> Open Sound Preferences

-> Output -> SBH-2508

Sunday, July 18, 2010

diff比較資料夾內容

給未來的裕翔

想比較資料夾的話

也可以用diff dir1 dir2

不過出來的資料很雜亂

因為對於commen file來說

diff還會把檔案不同的地方秀出來

如果只是想知道檔案一不一樣的話

可以加-q, 效果和--brief一樣

完整ex: diff -q dir1 dir2

這樣只會比較第一層

如果底層也要比

再加一個-r

完整ex: diff -qr dir1 dir2

重裝mcalab的心得

給未來的裕翔

首先到下面這頁下載

http://www-stat.stanford.edu/~wavelab/Wavelab_850/download.html

或是直接點下面這個連結

http://www-stat.stanford.edu/~wavelab/Wavelab_850/WAVELAB850.ZIP

對下載的檔案做

假設我下載到~/Download

cd ~/Download

unzip WaveLab850.zip

產生Wavelab850

sudo mv Wavelab850 /usr/share/matlab/toolbox/

進到Matlab的toolbox目錄

cd /usr/share/matlab/toolbox

sudo cp Wavelab850/WavePath.m local/

sudo vi /local/startup.m

WavePath

以root身份開啟matlab後

在matlab裡面輸入

InstallMEX

就可以產生一堆mexglx了

接著安裝MCALabWithUtilities

複製到/usr/share/matlab/toolbox/底下後

也是把MCAPath.m複製到/usr/share/matlab/toolbox/local/去

然後添加一行MCAPath到startup.m

MCAPath裡面要修改一行關於path的地方

接著

以一般身份開啟matlab時, 會顯示有個檔案沒有寫入權限

sudo chmod a+w mcalabmeta.mat

不過就算這樣裝好了

真的用matlab去執行

/usr/share/matlab/toolbox/MCALabWithUtilities/MCALab110/Two-D/Scripts/figMCAboytexture

會有error

??? Invalid MEX-file

'/usr/share/matlab/toolbox/MCALabWithUtilities/CurveletToolbox/CURVWRAP/MEXWrapping/fdct_wrapping_mex.mexglx':

/usr/share/matlab/toolbox/MCALabWithUtilities/CurveletToolbox/CURVWRAP/MEXWrapping/fdct_wrapping_mex.mexglx:

symbol mxCreateCellMatrix, version libmx.INTERNAL not defined in file libmx.so with link time

reference.

之前斷定是mexglx的問題(因為libmx.so是matlab內建)

所以我需要重新編譯mexglx

我使用的範例執行的是CurvLab的mex檔

照理說我應該要先處理這個

不過呢

既然跟作者要了GMCALab

先來處理GMCALab看看

查看opencv的include和library在哪

給未來的裕翔

寫makefile或是直接編譯時

pkg-config都是很方便的工具

pkg-config --cflags opencv
-I/usr/include/opencv

pkg-config --libs opencv
-lcxcore -lcv -lhighgui -lcvaux -lml

使用find+perm移除執行檔

給未來的裕翔

因為我想試試看opencv提供的sample裡面的3個makefile

所以每做完一個

就要把它們產生的binary移掉

想法是: 把至少具有執行的權限的檔案(目錄也可執行 但不是我要的), 全部移除

find -perm -111 -type f -exec sudo rm -f {} \;

貼心小提醒

最好是先用list, 免得牽連無辜

find -perm -111 -type f -exec sudo ls -l {} \;

ps: 先後試了GNUmakefile, makefile.gnu, makefile.ms

只有GNUmakefile可以work, 真出乎我意料

find的perm

給未來的裕翔

使用find時搭配perm選項時

我的記法是

find -perm 0744

找權限剛好和這個一樣的

find -perm -0744

找權限大於和這個一樣的. 減號可以想成下限, 至少要包含這些

find -perm +0744

找權限小於和這個一樣的. 加號可以想成上限, 最多別超過這些

再舉一個跟 suid和sgid有關的例子

鳥哥說

find / -perm +7000

只要含有s, s或t的就找出來

如果是find / -perm -7000

同時含有s, s和t的才會找出來

c語言指標問題2

給未來的裕翔
void getMem(char *ptr)
{
ptr = (char*)malloc(100);
}
main()
{
char *str = NULL;
getMem(str);
strcpy(str, "Hello C/C++ programming");
printf("%s\n", str);
}

這樣會錯, 因為str依舊指向NULL

平常的strcpy不會改變str的指向位置

而是把string複製到str指向的位置

c語言指標問題

給未來的裕翔
void *getMem()
{
char ptr[] = "Hello C/C++ programming";
return ptr;
}
main()
{
char *str = NULL;
str = getMem();
printf("%s\n", str);

}

因為ptr所指的對象是在function裡面被生成出來

所以所以對象的位址

隨著function結束後就消失了

回傳也不會是原本的東西

也不應該回傳

mex的兩個function簡介

給未來的裕翔
mxGetN

get number of columns in mxArray

mxGetM

get number of rows in mxArray

中文編碼轉換

給未來的裕翔

從windows轉linux的其中一個陣痛就是

我的中文都變亂碼啦~

一開始當然只能像丟棄嬰兒一樣

一個個難過的道別 嗚嗚~

後來知道, 每個檔案都有自己的編碼

就是常聽到的big5, utf8這種

而我在windows的檔案編碼是big5

linux預設是utf8

可以利用linux的iconv指令來轉碼

iconv -f big5 -t utf8 target-file

這樣就會秀在螢幕上

如果像要存回檔案裡

iconv -f big5 -t utf8 target-file -o target-file

Friday, July 16, 2010

筆電沒single user mode?

給未來的裕翔

一開始要進入single user mode

但一直沒遇到boot選單

之後才想到

也許筆電的grub.conf設定和桌機不一樣?

果然, 預設timeout=0

改成5就可以了

sed更完內容自動備份

給未來的裕翔

如果想要對檔案內容的某個字

做一致的更換

除了真的進去vim之外

可以考慮用sed

sed -i.bak 's/aaa/AAA/' targetFile

這樣就可以把targetFile裡面的aaa都換成AAA

-i.bak的意思是

換成AAA之後的檔案, 依然叫targetFile

但是換之前的, 存成targetFile.bak當備份

注意, -i和.bak中間不能有空白

而那個's/aaa/AAA/'的最後一個/不能省略

報告完畢

Thursday, July 15, 2010

md0自己改名



給未來的裕翔

當我做一個RAID 1取名為/dev/md0後

重開機後, 變/dev/md127了!!!

怎會麼這樣!!!

Monday, July 12, 2010

資料夾home和partition的關係

給未來的裕翔

當我們使用LiveCD開啟原來在硬碟上的home資料夾時

如果原來是有切分割掛到home上的話

此時開啟的home會是空的, 實體在另一顆硬碟上~

想想也是啦~

writer消除邊界和字元旋轉

給未來的裕翔

如果想把writer的寫作邊界變成看不見的話

View -> Text Boundaries

如果想把字旋轉的話

Format -> Character -> Position -> 90 degrees

vim刪除以xxx開頭的行

給未來的裕翔

%g/^xxx.*$/d

以xxx開頭的行, 整行刪掉

sshd更強化

給未來的裕翔

sshd安全姓可以更加強化

依舊感謝IT Ranger的教學

在/etc/ssh/sshd_config

除了原本就有在使用的PermitRootLogin no之外

也可以考慮新增

AllowUsers bob

這樣就只有bob可以使用ssh登入, 預設是誰都可以登入

再來就是改sshd的預設lister port

預設是Port 22

改成別的Port xxxx,

iptables要記得新增開放的port

注意, 號碼別選太小, 不然會有selinux的問題

據說這樣還是可以用port scan找出有在listen的port

不過我自己用nmap試是沒有找到的

設定好後, client要怎麼登入?

ssh bob@host -p xxxx

xxxx是我在server設定的登入port

怕麻煩的話

可以在client端的/etc/ssh/ssh_config新增Port xxxx

或是使用者自己新增Port xxxx到~/.ssh/config(預設不存在)

注意, 新建的config是664, 這樣無法使用, 不知為啥

要改成644, 就可以用了^^

不過我個人不建議修改/etc/ssh/ssh_config或是~/.ssh/config

怕哪天忘記

所以用命令參數吧

ssh 140.114.229.129 -p xxxx

比較1: sshd_config是設定ssh server

ssh_config是設定ssh client

比較2: ssh client要連到ssh server時

如果被防火牆擋住, 會顯示... No route to host

如果是被sshd_config設定擋住, 會顯示... Connection refused

再次感謝IT Ranger

文字辨識軟體

給未來的裕翔

sudo yum -y install gocr

沒有介面

似乎也不能辨識中文?

人家是用介面在demo辨識中文的

應該是可以才對, 只是我失敗就是了

dis教學網站

未來的裕翔

dia的教學看過一些了

不過, 似乎不得匯入OpenOffice的impress?

ref:

http://wiki.scribus.net/index.php/Export/Import_capabilities_of_Scribus,_OpenOffice.org,_Inkscape,_GIMP,_and_Krita

impress一次打好很多slide的標題


給未來的裕翔


如果想要一次打好很多slide的標題


可以先做一個空白頁


在右側的Layouts選Title, Text(這是一個, 不是兩個)


然後道上側的工具列選Insert -> Expand Slide


搞定^^

用gdb對java除錯

給未來的裕翔

gdb也可以用在java除錯

假設現在有兩個檔案a.java和b.java(a有main, 然後會用到b)

各含一個public class

經過javac a.java b.java後

會產生a.class和b.class

此時我們利用gcj這個指令

gcj -g --main=a -o aAndB a.class b.class

這樣就會產生執行檔aAndB

那就可以用gdb對它除錯了

gdb aAndB

我看的範例, 在gdb裡面有這兩行

handle SIGPWR nostop noprint

handle SIGXCPU nostop noprint

現在還不知道是在幹嘛的

設中斷點吧^^, break aAndB.main

然後就run吧~

Friday, July 9, 2010

yum暫時disable某個repo

給未來的裕翔

為了達到這個功能

當然是先google中文網站來看看阿^^

太失望了~ 太失望了!

都只講最基本的~

沒辦法, man yum, 哈哈, 早該這樣了^^"

回重點, 我現在情況是

想要yum provides */gcj

google-crome的那個repo似乎有問題?

然後就中斷了

想暫時取消該repo的話

yum --disablerepo=google-chrome provides */gcj

搞定!

怎不直接改google-chrome.repo?

我又不是永久不用, 暫時性略過而已~

Thursday, July 8, 2010

vnc server使用&權限問題

給未來的裕翔

想要在linux開放遠端桌面的話

想架server的那台

安裝tigervnc和tigervnc-server

然後輸入vncserver

和密碼, 似乎第二次連線不需要密碼?

然後會開啟port 5901

在client端, 安裝tigervnc, 這樣就有vncviewer可以用

不過不知道為啥

直接vncviewer host:port會失敗

不過也不建議直接連啦

因為除了一開始passphrase部份, 似乎都是明碼傳送

所以最好見一個ssh tunnel

ssh -L 9901:remote-host:5901 remote-host

這樣只要我在client端只要從9901出去, 就會連到remote-host的5901

ssh tunnel建立完成

接下來client端輸入vncviewer localhost:9901

連到遠端後, 如果要結束vnc連線

在遠端輸入vncserver -kill :1

如果沒這樣做的話, 單純只有關掉視窗

那還可以再重連一次^^

也表示別人可以連我的remote-host囉? =.=

注意到一件事

System -> Preferences -> Remote Desktop

可以設定遠端連線, 但我們剛剛都沒有碰到喔~

也就是真要達成遠端連線的話, 可以完全不管那個

最後, 剛才過程發現一件詭異的事, normal user連到remote-host後

變root!? 我再多試幾次看看=.=

如果不希望開兩個terminal

一個建ssh tunnel, 一個vncviewer的話

ssh -Nf -L 9901:remote-host:5901 remote-host

-N: do not execute a remote command

-f: background

Wednesday, July 7, 2010

eval的功能

給未來的裕翔

因為先入為主

之前一直以為bash的eval跟matlab的eval一樣

但這樣又很奇怪~

剛看一下man(早該看了)

發現, eval只是把數行command一起執行而已......

在vim裡面呼叫man

給未來的裕翔

講過 * 和 # 的用法

還有個 K

它是對游標所在的字去man

太酷了

vim的剪貼簿

給未來的裕翔

感覺剪貼簿沒有很好用

還是講一下好了

因為vim有很多剪貼簿, 每個剪貼簿稱為一個register

如果要看每個register內容

:reg

暫存器建議用小寫字母

因為LINUXTOY說大寫字母都被vim自己用掉了

怎麼用呢~

如果我要把某行yy, 存在我指定的register, ex: k

"kyy

那之後如果要貼上, 從register k貼上的話

"kp

vim不用外掛就有的自動完成

給未來的裕翔

當我曾經輸入一些又臭又長的字時

如果之後要再輸入

只需要輸入部份

然後搭配Ctrl + p或Ctrl + n來選完整字

酷吧!

再次感謝LINUXTOY

vim的大範圍移動&標記&搜索

給未來的裕翔

vim有一些功能是我很早就看過但一直不熟練的

H, M, L分別到目前畫面的上, 中, 下

選個喜歡的地方做定位點

m + 任一小寫字母

之後如果我在其他地方

突然好想看我剛標記的地方

` + 剛才設定的字母

看完後如果想回到我來的地方

` + .

vim在字元間快速移動

給未來的裕翔

如果現在有一行如下:

abcdefgabcdefg

如果我按f + 任一字母

游標就會往右移到該字母上

再一次f + 同一字母的話, 可用 ; 取代

如果是t + 任一字母

則是移到該字母的前一個字母上

不過似乎只能一次, 也無法以 ; 取代

F + 任一字母

T + 任一字母

上面兩個類似小寫的f, t, 不過是反向

y和c d可以搭配上面講的來用

ex: dte   ->   刪到下一個e之前

剛赫然發現一件事

我一直以為d是刪除, c是剪下說

錯!!! d是剪下, c是剪下並進入編輯模式

而x和s的關係就像d和c的關係一樣

另外, 除了

0到行首, $到行尾

其實還有個^, 到有該行最前面的字首

感謝網友LINUXTOY的

高效率编辑器 Vim

vim在很長得一行裡上下移動

給未來的裕翔

在vim裡面

如果某一行特別長

看起來像是兩三行的話

按方向鍵只經過那個長長的行一次

如果想要看起來多行的同時

移動也彷彿是多行的話

上下移動前請先按g

這樣就可以在長長一行的斷行上下移動了

不過每次移動前都要按g

因為效果只有一次

Tuesday, July 6, 2010

查看別人基本資訊和登入狀況

給未來的裕翔

finger user

可以看到很基本的資訊

和登入的狀況

whoami v.s. who am i

給未來的裕翔

whoami是看自己當下是誰

看PS1不行嗎......

有點不是很懂這指令存在的意義

中間如果一直su來su去

忘記自己當初是以哪個身份登入的話

who am i

就可以知道啦^^

也可以打who mom likes

其實這還蠻好笑的^^

查看當下有誰在哪登入&作什麼

給未來的裕翔

如果要查看當下有誰在哪登入

可以使用w
 12:51:06 up  3:15,  5 users,  load average: 0.28, 0.40, 0.38
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
ada tty2 - 12:33 16:11 0.08s 0.09s login -- ada
ada tty7 :0 09:36 3:15m 7:00 0.13s pam: gdm-passwo
ada pts/0 :0.0 12:35 0.00s 0.05s 0.03s w
ada pts/1 :0.0 12:50 2.00s 0.03s 0.02s ssh nvlab187.ee
ada pts/2 nvl05.ee.nthu.ed 12:51 2.00s 0.02s 0.02s -bash

那個TTY欄位, 如果是Ctrl + Alt + F#切換的

就會顯示tty2~tty5, 根據#的數字決定

ttr1呢? 不知道耶~ 我換不過去

tty7就是GUI桌面

在桌面叫出來的terminal屬於pts/#

遠端連過來的也是這個範疇

使用who指令也是類似功能

簡單比較:

who -> 看有誰登入

w -> 看有誰登入&作啥

簡單看開機到目前的狀況

給未來的裕翔

uptime

grep去資料夾裡搜尋字串

給未來的裕翔

想對某資料夾底下的所有檔案搜尋patttern

範圍包括子資料夾的話

可以使用grep -r pattern dir

用cat建檔

給未來的裕翔

使用cat > file建檔時

以Ctrl + d作輸入結束

如果以cat > file << sentinal-word

sentinal-word可以自訂

可以改以sentinal-word作輸入結束

即使是這樣, 硬要 Ctrl + d結束一樣可以行得通啦

那~結論是

當然以cat > file建檔比較方便阿

named.conf語法檢查

給未來的裕翔

修改/etc/named.conf後

可以先以

named-checkconf /etc/named.conf

來檢查語法

也可以直接service named restart啦

因為

兩個的錯誤訊息居然一樣,   哈哈

但多會用一個named-checkconf感覺比較酷一些^^

host v.s. gethostip v.s. ping

給未來的裕翔

gethostip和ping會看/etc/host

但是host不會

dig的+trace

給未來的裕翔

dig可以拿來從name查ip

ex:

dig redhat.com

不過這樣的話, 單純只秀最後一段

如果想要列出從root nameserver開始的所有查詢

要加+trace

ex:

dig +trace redhat.com

會依序output一堆資訊, 一塊一塊分開

以其中一段來看
com.			172800	IN	NS	a.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
;; Received 499 bytes from 192.203.230.10#53(E.ROOT-SERVERS.NET) in 201 ms

前面查詢的結果回傳E.ROOT-SERVERS.NET, 而它說

"我知道哪幾台DNS server是負責com domain的"

"你可以去問看看它們誰知道yahoo.com是由哪台DNS server負責的"

目前感覺是這樣, 有錯請更正^^(根本不會有人看我的這個筆記部落格......)

Monday, July 5, 2010

named的forward only

給未來的裕翔

一開始以為/etc/named.conf
裡面的forward only是把query一律丟給forwarders

所以自己設定的就會找不到

但似乎不是這樣?

它代表的意思好像是

"總是向DNS server作查詢"

(包括自己設定的和外部的)

"而不管cached answer"

後記: 不!!! 我似乎搞錯了!!!

forward only和forwarders是一組的

假設forward沒指明要only的話

它代表的意思是, 每當查詢時, 先向forwarders查詢

查不到再自己去跟root dns查詢(有cache的話當然就直接用)

所以把forward想成forward first應該是ok的

但如果指明要forward only, 那就是只會向forwarders查詢

糾正自己的感覺真爽^^

ref: http://www.akadia.com/services/howto_forward_dns.html

Sunday, July 4, 2010

selinux不准httpd去碰/tmp

給未來的裕翔

access我實在不知道該怎麼翻

暫且稱之為'碰'吧

多簡單明瞭阿^^

翻的太漂亮也只會是失敗的教學~

後記: 不准碰的似乎不只/tmp

至少/var/www/virt1/cgi-bin也不行

Saturday, July 3, 2010

fedora 13架samba

給未來的裕翔

首先安裝samba, samba-common, samba-client套件

當然, 我目前還不確定每個套件的必要性

裝好之後, 設定/etc/samba/smb.conf

依照需要設定好

特別注意那個writable和read list

如果要檔案mask

它的directive是create mask = 0660, 類似這樣設定

順便講一下, 原來public就是guest ok阿~

設定好之後, 要分享出去的資料夾要

chcon -t public_content_rw_t shared-dir

應該也可以chcon -t samba_shared_t shared-dir

然後setsebool -P allow_samba_anon_write 1

如果是要開放家目錄的話, 還有一個setsebool要作

setsebool -P samba_enable_home_dirs 1

不過不知道為什麼, 我分享的資料夾

如果路徑上的每個資料夾保持原來的context就會失敗

都要改

最後, 如果samba client是要mount的話, 那這樣就可以了

如果是要用ftp是使用samba

防火牆要加開445/tcp

Friday, July 2, 2010

postfix架設在fedora 13

給未來的裕翔

雖然知道每個distribution都大同小異

可是每當我自己用fedora練習時

總是會遇到幾個'小異'

都是些用redhat不會碰到的

'小異'說多不多, 個個搞死我

因此邊操作邊寫筆記

首先, 如果想要架一個可以收信的MTA by postfix

請先記得把剛剛修改過得/etc/aliases復原

以我的例子, root:   xxxxx

這樣就算我把postfix設定到可以收信

在mail server的root一輩子也收不到信......

改完之後, 也別隨手newaliases, 請先到/etc之下再用

接著, 設定一個fedora 12似乎不需要的步驟?

setsebool -P allow_postfix_local_write_mail_spool 1

不過有時似乎還是會失敗?

看/var/log/maillog的訊息

把/var/mail/root.lock刪除或改名就可以了

當然, 如果一開始就不存在那就更好啦^^

以上是雜七雜八的設定

接著設定/etc/postfix/main.cf
myhostname = nvlab179.ee.nthu

(只寫nvlab179會失敗)

mydomain = ee.nthu
myorigin = $myhostname
inet_interfaces = all

以上是可以收信的設定

讓我驚訝的是, postfix預設幫任何人relay?

除非我反註解/etc/postfix/main.cf的

mynetworks_style = host

如果有設定mynetworks, 那上一行的設定就會被忽略

建議直接利用mynetworks作存取控管

mta只幫有紀錄的對象作relay

ex:

networks = 140.114.0.0/16

那~ /etc/postfix/access就不需要它啦~(我使用它也沒成功過)

至於postfix底下的alias, 使用跟sendmail一樣的操作即可

不需要特地變成講義上的postalias hash:/etc/aliases

大概就是這樣吧^^

Thursday, July 1, 2010

yum的reinstall

給未來的裕翔

如果想要恢復某些套件的config初始設定

可以笨笨的把它移除再重新安裝

不過萬一有一堆套件相依舊慘了

所以這裡建議

直接笨笨的把它重新安裝吧^^

yum reinstall xxx

要注意的是

如果檔案原本已存在, 不會覆蓋

所以要把config砍掉或是改名當備份

然後才執行yum reinstall xxx

dovecot架設&自己發行憑證

給未來的裕翔

dovecot的安裝架設非常簡單

sudo yum -y install dovecot

然後去sudo vim /etc/dovecot.conf

把protocols那行反註解

照理說到這邊就可以用了

偏偏接下來還要多增加一個設定才可以使用
mail_location = /var/spool/mail/%u

那如果要自行發行憑證的話

make -C /etc/pki/tls/certs dovecot.pem

-C是change directory, 好像因為發行憑證需要的makefile在那裡

那接下來就是一般資訊填寫

填好之後就產生在/etc/pki/tls/certs

要使用它的話要修改/etc/dovecot.conf
ssl_cert_file = /etc/pki/tls/certs/dovecot.pem
ssl_key_file = /etc/pki/tls/certs/dovecot.pem

架sendmail收信

給未來的裕翔

似乎是第一次成功用sendmail當mta

筆記記一下

首先, 安裝sendmail和sendmail-cf套件

說實在的, 我不確定sendmail-cf實質功能

改天再來測試是否必要

假設現在我有兩台電腦

一台是mail server: nvlab179.ee.nthu

一台是mail client: nvlab187.ee.nthu

先在sendmail.mc做基本設定

cd /etc/mail

vi sendmail.mc
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

把上行用dnl註解掉

然後m4 sendmail.mc > sendmail.cf

service sendmail restart

光是這樣的話, mail client寄信會被退件

"Relaying denied"

新增一個relay-domains檔

裡面寫.ee.nthu這樣會改變錯誤訊息

而且發生在mail server端

所以還需要修改local-host-names

後來發現, 直接修改local-host-names即可!!!

vi local-host-names
nvlab179.ee.nthu

使用telnet nvlab179.ee.nthu 25

mail client寄信給自己的話

自己的防火牆記得要開port 25

要設定RELAY的話

vi access

140.114.28 RELAY


然後make access.db

不需重啟sendmail

不知為啥, 如果要寫domain的話

要寫在relay-domains(預設不存在0)

vi relay-domains


.ee.nthu


然後service sendmail restart

萬一我希望, 寄給root的信都寄給使用者garbage

vi /etc/aliases


root: garbage


然後newaliases就好

注意, root不會留底 直接寄給garbage