給未來的裕翔
其實我也有點忘光光了
不過至少在全忘掉之前多少寫一點
這就是累積阿!
首先下載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的東西耶! 還是說是一樣的? 本來就有這功能? 還是哪時跑進去的? )
到此, 環境算是設定好了, 應該吧
Saturday, July 31, 2010
Eclipse安裝ADT遇到問題
給未來的裕翔
我這次要提供的不是解法
而是禱告感謝神蹟
幾天前無法裝ADT
我真的不知道遇到什麼問題
幾天後, 就可以動了!!!!!! 該死!!!
到底是我重開Eclipse所以可以動?
還是我重開機?
還是因為我玩小遊戲贏了?
我做了一堆有的沒的
但Eclipse一直開在那沒管它
重開機後卻可以動, 這叫我怎麼知道哪步是關鍵步驟!
我這次要提供的不是解法
而是禱告感謝神蹟
幾天前無法裝ADT
我真的不知道遇到什麼問題
幾天後, 就可以動了!!!!!! 該死!!!
到底是我重開Eclipse所以可以動?
還是我重開機?
還是因為我玩小遊戲贏了?
我做了一堆有的沒的
但Eclipse一直開在那沒管它
重開機後卻可以動, 這叫我怎麼知道哪步是關鍵步驟!
快速得知process id
給未來的裕翔
平常如果想查某process的pid的話, ex: pidgin
都是ps aux | grep pidgin
剛又進不了^^
在知道process是pidgin的情況下
我可以pidof pidgin
就直接回傳數字了
帥吧^^
平常如果想查某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
是不是跟我直接關機或是直接充電有關?
充電算不算關機?
還是關掉時間長短?
先紀錄一下
--------------------------------------------------
我關機一個晚上, 隔天要進入"被找模式"才可以比較快連線
--------------------------------------------------
昨天晚上充電, 剛直接開啟好像就接通了
--------------------------------------------------
吃飯去先關掉, 回來開機就自動接上了
如果現在藍牙手機沒電了
充完電後
把藍牙耳機調到"被找模式" ^^ <- 這是錯的, 開啟耳機就可以了
然後在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台也有的套件從名單濾掉
先不管指令的回傳值, 上面那個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
也是無所謂阿, 已經裝過的會自動略過嘛!
這是一個我很喜歡的實作題
首先, 在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這麼多選項可以用阿!
如果想知道我裝哪些套件
用rpm的話, rpm -qa就好
不過這是有版本編號和architecture的
如果只想要套件名稱就好呢?
rpm -qa --queryformat "%{NAME}\n"
帥吧!
列出套件安裝順序
給未來的裕翔
原來可以列出套件順序阿!
rpm -qa --last
這樣就會列出從最新到最舊的順序
很久以前裝的套件更新後, 就是當下最新
但是因為套件很多
如果想要順序顛倒, 新的在最下面的話
rpm -qa --last | tac
原來可以列出套件順序阿!
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*'
也是都可以
不過後者快多了!
如果想知道裝了哪些含有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
以上: 我小小的大腦的結論
為什麼需要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出來
真是帥呆了!
剛看到一個指令
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
以套件mlocate為例
想看它每個小版本之間的差異的話
rpm -q --changelog mlocate
想知道它在安裝或移除時會額外作啥
rpm -q --scripts mlocate
Thursday, July 29, 2010
grep的正規表示式
給未來的裕翔
如果要在grep裡面用正規表示, ex:
grep '^\[.*\]' file 單引號可以
grep "^\[.*\]" file 雙引號可以
grep ^\[.*\] file 不加不可以
如果要在grep裡面用正規表示, ex:
grep '^\[.*\]' file 單引號可以
grep "^\[.*\]" file 雙引號可以
grep ^\[.*\] file 不加不可以
Tuesday, July 27, 2010
pts和virtual console
給未來的裕翔
渾渾噩噩過了24載
對於pts和virtual console的差別, 不想再無所謂了^^
pts是pseudo terminal slave, 也就是在桌面環境開啟的terminal
而virtual console就是Ctrl + Alt + F1~F6的那個東西
至於名稱來源我就不知道啦~
渾渾噩噩過了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
也可以耶!!!
當忘記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"的目的
不過記得要改回來阿
不然我也不知道會發生什麼事
/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資訊
(至少展示長度是濃縮的)
如果想要查看cpu數量
可以/ecc /proc/cpuinfo
不過這樣顯示的資訊落落長
可以安裝套件x86info
然後輸入指令x86info
可以看到濃縮的cpu資訊
(至少展示長度是濃縮的)
bash的`
給未來的裕翔
剛發現, 在同一行可以用兩次以上的``耶!
ex: mkinitrd --with=raid1 initramfs-raid1-`uname -r`.img `uname -r`
這樣可以製作還有raid1.ko的RAN disk file
剛發現, 在同一行可以用兩次以上的``耶!
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耶, 哈哈
幫不上忙, 歹勢^^
如果你說的連線是只有桌面環境的
從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的子程式
就一起關掉啦~
雖然在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
System -> Preferences -> Input Method -> Input Method Preferences
-> Input Method -> Select an input method -> Chinese -> Chewing -> Add
Thursday, July 22, 2010
Wednesday, July 21, 2010
java編譯多個檔案
給未來的裕翔
如果現在有兩個檔案
design.java和designTest.java
書上說, 編譯時要javac design.java designTest.java
然後java designTest來執行
我也都照做, 後來又多了extends
我的疑問是, 被extends的那個也需要放進來一起編譯嗎?
還是我依舊編譯那兩個, 它會自己去找?
似乎會自己去找?
那我如果一開始就只編譯那個designTest.java
它也會自己去找會用到的東西嗎?
實驗結果: 會耶! 會自己去找!
所以以後只編譯那個designTest.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
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 ^[^#]
以/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
搞定~
首先
把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……
為了編譯 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
就產生與資料夾同名的執行擋了^^
真爽~
本來是不想用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來驗證
又進步了~耶
利用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
搞定~
寫一個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看看, 以嚴肅嚴謹的科學探討精神~
這是從網路上看到的
(我很需要……)
已經成功做出映像檔
不過還不確定做出來的映像檔可否使用
在此先把指令記錄下來
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可以同時掛載到多個資料夾上
我是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卸載了……奇怪~
其實我真的不想裝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
都秀出來了!
而且速度超快!
當我使用traceroute tw.yahoo.com時
照理講會顯示所有經過的路徑
可是因為某些原因
有些會顯示星星
此時, 如果改成mtr tw.yahoo.com
都秀出來了!
而且速度超快!
parted怪怪
給未來的裕翔
parted的優點印象中是
可以切割的數量可達幾十個
fdisk好像只能十幾個(也夠了)
另一個我比較重視的優點是
切割完後不需要執行partprobe
來讓系統認識新切割的partition
可用cat /proc/partitions來檢視
不過呢, 不知是我電腦怎
就是無法展現這項優點, 總是說我的什麼在忙碌中
我也不了
因此對我而言, 其實fdisk和parted差不多
就在剛剛
我發現parted致命的缺點^^
不能在切partition的同時製作ext4檔案系統, 甚至ext3也不行
似乎必須另外搭配mkfs之類的來製作檔案系統
嘖嘖~
parted的優點印象中是
可以切割的數量可達幾十個
fdisk好像只能十幾個(也夠了)
另一個我比較重視的優點是
切割完後不需要執行partprobe
來讓系統認識新切割的partition
可用cat /proc/partitions來檢視
不過呢, 不知是我電腦怎
就是無法展現這項優點, 總是說我的什麼在忙碌中
我也不了
因此對我而言, 其實fdisk和parted差不多
就在剛剛
我發現parted致命的缺點^^
不能在切partition的同時製作ext4檔案系統, 甚至ext3也不行
似乎必須另外搭配mkfs之類的來製作檔案系統
嘖嘖~
quota用完可能會讓使用者無法登入圖形介面
給未來的裕翔
如果root對home做quota限制
當使用者達到quota硬性上限時
之後會讓使用者無法登入圖介面
因為每當使用者登入圖形介面時
會在其home下面產生一些暫時檔
quota滿了就產生不了
產生不了就無法登入
by 我的Linux老師
如果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我再仔細研究看哪些是關鍵步驟
現在學業研究進度落後, 暫不考慮
在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 + 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離開
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, 成功!
為什麼成功還是想不透~
當初裝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, 成功!
為什麼成功還是想不透~
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, 成功!
為什麼成功還是想不透~
當初裝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
於是我正在參考網路文章
筆記先紀錄到此
真是慢長的戰鬥阿……
好奇:
當我把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檔
快不知道還能怎麼辦了
又不是我把所有方法都試過
就可以跟理直氣壯跟教授說: “該試的都試了 我無可奈何”
我哪那麼有種~
昨天嘗試修改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了……
我一直不確定
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
想要測試某主機listen哪些service
nmap ###.###.###.###
想要測試某網段哪些主機會回應ping
nmap -sP ###.###.###.*
選項sP就是scan ping
pidgin清螢幕
給未來的裕翔
剛用pidgin跟水哥聊天的同時
赫然發現
Ctrl + l(L小寫)
可以清對話內容耶!
雖然沒什麼幫助
ps 被清掉的對話內容, 依舊會紀錄到log裡, 如果此功能有開的話~
剛用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被砍掉怎辦?
不知道^^
昨天一時衝動把這砍了
雖然驗證了一些事情
但其實我不需要完全砍掉的…
問題一: 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滿了的問題
因為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檔
還是有新的錯誤息……
關於處理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/
最後手動把第一行一開始的逗號去掉
大功告成!
好有成就感^^
剛拿到一份列表:
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裡出現吧
雖然這沒什麼了不起
不過也夠我爽一陣子了^^
趁印象清晰時趕快寫筆記
本來 以為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太新沒關係的^^
不料 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檔名
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頭號大粉絲~
昨天編譯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是備份工具
一次對一個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
完全恢復到當下所在位置, 而非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了
首先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動作
整體大概就是這樣
情境:我的/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
它們的關係就是這樣~
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++一樣
也許是因為它們沒有地方存?
其實我也不知道常數存哪
在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++一樣
也許是因為它們沒有地方存?
其實我也不知道常數存哪
人生第一台無線耳機^^
給未來的裕翔
繼無線滑鼠之後, 無線耳機也來啦!
無線滑鼠沒什麼好記的, 隨插即用
不過無線耳機需要簡單設定一下
首先, 不是每台電腦都可以使用的
似乎是看電腦有無bluetooth adapter
(沒有bluetooth adapter可能也可用? 等我成功再說~)
學妹借我的電腦有
所以裝好後, GNOME桌面右上角一直有一個藍牙標誌
為了讓電腦抓到我的藍芽耳機, 在耳機關機時
壓住約八秒, 進入被尋找模式^^"(亂創名詞)
此時點一下GNOME的藍芽標誌
Set up new devices... -> Forward -> 選搜尋到的藍芽耳機裝置
-> PIN options -> '0000'
此時, 音樂還是會從電腦放出來, 需要設定一下
點一下藍芽標誌 -> SBH-2508 -> Open Sound Preferences
-> Output -> SBH-2508
繼無線滑鼠之後, 無線耳機也來啦!
無線滑鼠沒什麼好記的, 隨插即用
不過無線耳機需要簡單設定一下
首先, 不是每台電腦都可以使用的
似乎是看電腦有無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
想比較資料夾的話
也可以用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看看
首先到下面這頁下載
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
寫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, 真出乎我意料
因為我想試試看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的才會找出來
使用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
給未來的裕翔
這樣會錯, 因為str依舊指向NULL
平常的strcpy不會改變str的指向位置
而是把string複製到str指向的位置
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語言指標問題
給未來的裕翔
因為ptr所指的對象是在function裡面被生成出來
所以所以對象的位址
隨著function結束後就消失了
回傳也不會是原本的東西
也不應該回傳
void *getMem()
{
char ptr[] = "Hello C/C++ programming";
return ptr;
}
main()
{
char *str = NULL;
str = getMem();
printf("%s\n", str);
}
因為ptr所指的對象是在function裡面被生成出來
所以所以對象的位址
隨著function結束後就消失了
回傳也不會是原本的東西
也不應該回傳
中文編碼轉換
給未來的裕翔
從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
從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就可以了
一開始要進入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/'的最後一個/不能省略
報告完畢
如果想要對檔案內容的某個字
做一致的更換
除了真的進去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
Monday, July 12, 2010
資料夾home和partition的關係
給未來的裕翔
當我們使用LiveCD開啟原來在硬碟上的home資料夾時
如果原來是有切分割掛到home上的話
此時開啟的home會是空的, 實體在另一顆硬碟上~
想想也是啦~
當我們使用LiveCD開啟原來在硬碟上的home資料夾時
如果原來是有切分割掛到home上的話
此時開啟的home會是空的, 實體在另一顆硬碟上~
想想也是啦~
writer消除邊界和字元旋轉
給未來的裕翔
如果想把writer的寫作邊界變成看不見的話
View -> Text Boundaries
如果想把字旋轉的話
Format -> Character -> Position -> 90 degrees
如果想把writer的寫作邊界變成看不見的話
View -> Text Boundaries
如果想把字旋轉的話
Format -> Character -> Position -> 90 degrees
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
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
dis教學網站
未來的裕翔
dia的教學看過一些了
不過, 似乎不得匯入OpenOffice的impress?
ref:
http://wiki.scribus.net/index.php/Export/Import_capabilities_of_Scribus,_OpenOffice.org,_Inkscape,_GIMP,_and_Krita
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吧~
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?
我又不是永久不用, 暫時性略過而已~
為了達到這個功能
當然是先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
想要在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一起執行而已......
因為先入為主
之前一直以為bash的eval跟matlab的eval一樣
但這樣又很奇怪~
剛看一下man(早該看了)
發現, eval只是把數行command一起執行而已......
vim的剪貼簿
給未來的裕翔
感覺剪貼簿沒有很好用
還是講一下好了
因為vim有很多剪貼簿, 每個剪貼簿稱為一個register
如果要看每個register內容
:reg
暫存器建議用小寫字母
因為LINUXTOY說大寫字母都被vim自己用掉了
怎麼用呢~
如果我要把某行yy, 存在我指定的register, ex: k
"kyy
那之後如果要貼上, 從register k貼上的話
"kp
感覺剪貼簿沒有很好用
還是講一下好了
因為vim有很多剪貼簿, 每個剪貼簿稱為一個register
如果要看每個register內容
:reg
暫存器建議用小寫字母
因為LINUXTOY說大寫字母都被vim自己用掉了
怎麼用呢~
如果我要把某行yy, 存在我指定的register, ex: k
"kyy
那之後如果要貼上, 從register k貼上的話
"kp
vim的大範圍移動&標記&搜索
給未來的裕翔
vim有一些功能是我很早就看過但一直不熟練的
H, M, L分別到目前畫面的上, 中, 下
選個喜歡的地方做定位點
m + 任一小寫字母
之後如果我在其他地方
突然好想看我剛標記的地方
` + 剛才設定的字母
看完後如果想回到我來的地方
` + .
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
如果現在有一行如下:
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
因為效果只有一次
在vim裡面
如果某一行特別長
看起來像是兩三行的話
按方向鍵只經過那個長長的行一次
如果想要看起來多行的同時
移動也彷彿是多行的話
上下移動前請先按g
這樣就可以在長長一行的斷行上下移動了
不過每次移動前都要按g
因為效果只有一次
Tuesday, July 6, 2010
whoami v.s. who am i
給未來的裕翔
whoami是看自己當下是誰
看PS1不行嗎......
有點不是很懂這指令存在的意義
中間如果一直su來su去
忘記自己當初是以哪個身份登入的話
who am i
就可以知道啦^^
也可以打who mom likes
其實這還蠻好笑的^^
whoami是看自己當下是誰
看PS1不行嗎......
有點不是很懂這指令存在的意義
中間如果一直su來su去
忘記自己當初是以哪個身份登入的話
who am i
就可以知道啦^^
也可以打who mom likes
其實這還蠻好笑的^^
查看當下有誰在哪登入&作什麼
給未來的裕翔
如果要查看當下有誰在哪登入
可以使用w
那個TTY欄位, 如果是Ctrl + Alt + F#切換的
就會顯示tty2~tty5, 根據#的數字決定
ttr1呢? 不知道耶~ 我換不過去
tty7就是GUI桌面
在桌面叫出來的terminal屬於pts/#
遠端連過來的也是這個範疇
使用who指令也是類似功能
簡單比較:
who -> 看有誰登入
w -> 看有誰登入&作啥
如果要查看當下有誰在哪登入
可以使用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 -> 看有誰登入&作啥
用cat建檔
給未來的裕翔
使用cat > file建檔時
以Ctrl + d作輸入結束
如果以cat > file << sentinal-word
sentinal-word可以自訂
可以改以sentinal-word作輸入結束
即使是這樣, 硬要 Ctrl + d結束一樣可以行得通啦
那~結論是
當然以cat > file建檔比較方便阿
使用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感覺比較酷一些^^
修改/etc/named.conf後
可以先以
named-checkconf /etc/named.conf
來檢查語法
也可以直接service named restart啦
因為
兩個的錯誤訊息居然一樣, 哈哈
但多會用一個named-checkconf感覺比較酷一些^^
dig的+trace
給未來的裕翔
dig可以拿來從name查ip
ex:
dig redhat.com
不過這樣的話, 單純只秀最後一段
如果想要列出從root nameserver開始的所有查詢
要加+trace
ex:
dig +trace redhat.com
會依序output一堆資訊, 一塊一塊分開
以其中一段來看
前面查詢的結果回傳E.ROOT-SERVERS.NET, 而它說
"我知道哪幾台DNS server是負責com domain的"
"你可以去問看看它們誰知道yahoo.com是由哪台DNS server負責的"
目前感覺是這樣, 有錯請更正^^(根本不會有人看我的這個筆記部落格......)
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
一開始以為/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也不行
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
首先安裝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
以上是可以收信的設定
讓我驚訝的是, 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
大概就是這樣吧^^
雖然知道每個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
如果想要恢復某些套件的config初始設定
可以笨笨的把它移除再重新安裝
不過萬一有一堆套件相依舊慘了
所以這裡建議
直接笨笨的把它重新安裝吧^^
yum reinstall xxx
要注意的是
如果檔案原本已存在, 不會覆蓋
所以要把config砍掉或是改名當備份
然後才執行yum reinstall xxx
dovecot架設&自己發行憑證
給未來的裕翔
dovecot的安裝架設非常簡單
sudo yum -y install dovecot
然後去sudo vim /etc/dovecot.conf
把protocols那行反註解
照理說到這邊就可以用了
偏偏接下來還要多增加一個設定才可以使用
那如果要自行發行憑證的話
make -C /etc/pki/tls/certs dovecot.pem
-C是change directory, 好像因為發行憑證需要的makefile在那裡
那接下來就是一般資訊填寫
填好之後就產生在/etc/pki/tls/certs
要使用它的話要修改/etc/dovecot.conf
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
把上行用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
使用telnet nvlab179.ee.nthu 25
mail client寄信給自己的話
自己的防火牆記得要開port 25
要設定RELAY的話
vi access
然後make access.db
不需重啟sendmail
不知為啥, 如果要寫domain的話
要寫在relay-domains(預設不存在0)
vi relay-domains
然後service sendmail restart
萬一我希望, 寄給root的信都寄給使用者garbage
vi /etc/aliases
然後newaliases就好
注意, root不會留底 直接寄給garbage
似乎是第一次成功用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
Subscribe to:
Posts (Atom)