給未來的裕翔
vsftpd是一個ftp server套件
安裝開啟就馬上有anonymous download的功能了
當然, iptables要先對tcp的port 21開放, hosts.allow也要設定
如果現在想要新增anonymous upload功能
要先處理selinux的問題, 所謂的處理不是關閉它^^
getsebool -a | grep ftp
然後用大腦對適當的設定永久(-P)開啟
setsebool -P allow_ftpd_anon_write 1
去/var/ftp底下新增一個工上傳的資料夾, ex: upload
mkdir /var/ftp/upload
chown root.ftp upload
chmod g+w upload 做存取的動作是ftp這位user
記得要對它的context修改, selinux只允許'有資格的'資料夾供上傳
chcon -t public_content_rw_t upload
到此, 大環境已設定好, 剩最後一道關卡
/etc/vsftpd/vsftpd.conf
確定下行非註解
anon_upload_enable=YES
如果進一步不希望upload資料夾被有心人濫用
可以把upload資料夾的read權限對group, other拿掉
如果希望上傳的檔案馬上換owner
可以考慮對/etc/vsftpd/vsftpd.conf設定以下:
chown_uploads=YES
chown_username=root
anon_umask=077
其它小實驗:
ftp client端太久沒用會被踢開
ftp裡面沒有tab補齊檔名的功能
防火牆如果突然設定不開放21並重啟, 連線中的ftp不會被影響
即使是連線中, selinux的allow_ftpd_anon_write可以馬上生效
把vsftpd套件移除, 上傳或供下載的檔案都還在
裝好的vsftpd開啟就可以供下載檔案了
如果不能上傳單純因為權限, server改完權限client馬上就可以上傳了, 不需要重登
selinux的效力依舊是最大
Wednesday, March 31, 2010
vi對變數的搜尋取代
給未來的裕翔
標題名稱是我亂取的
因為我不知道正確的專有名詞是什麼
現在我要對以下的字串做代換
real(C{3}{1}) real(C{3}{2}) real(C{3}{3}) real(C{3}{4})
希望能夠換成
real(C{3}{9}) real(C{3}{10}) real(C{3}{11}) real(C{3}{12})
可藉由以下vim指令
:s/\([0-9]*\)})/\=submatch(1)+8."})"/g
第一部份的 \( 和 \) 是為了讓第二部份的submatch(1)指定用
第二部份因為會用到指令, 所以要 \= 開頭
指令和字串以 . 相接
字串都要 " " 括起來
標題名稱是我亂取的
因為我不知道正確的專有名詞是什麼
現在我要對以下的字串做代換
real(C{3}{1}) real(C{3}{2}) real(C{3}{3}) real(C{3}{4})
希望能夠換成
real(C{3}{9}) real(C{3}{10}) real(C{3}{11}) real(C{3}{12})
可藉由以下vim指令
:s/\([0-9]*\)})/\=submatch(1)+8."})"/g
第一部份的 \( 和 \) 是為了讓第二部份的submatch(1)指定用
第二部份因為會用到指令, 所以要 \= 開頭
指令和字串以 . 相接
字串都要 " " 括起來
Tuesday, March 30, 2010
sudo vi
給未來的裕翔
當以一般使用者身份編輯文字檔時
都會有語法的顏色標記在
因為vi被自動alias到vim去了, 可輸入alias指令查看
(我還不知道是哪個檔案設定這件事情的)
以root身份使用vi編輯文字檔卻不會有語法的顏色標記
因為它沒有被設定, 可輸入alias指令確認
此時如果去編輯~root/.bashrc
alias vi='vim'
之後sudo vi文字檔時
依舊 不會有顏色標記!
因為我只是以root身份編輯文件, ~root/.bashrc的設定並沒有被載入
所以, 必要時請安分的sudo vim吧
當以一般使用者身份編輯文字檔時
都會有語法的顏色標記在
因為vi被自動alias到vim去了, 可輸入alias指令查看
(我還不知道是哪個檔案設定這件事情的)
以root身份使用vi編輯文字檔卻不會有語法的顏色標記
因為它沒有被設定, 可輸入alias指令確認
此時如果去編輯~root/.bashrc
alias vi='vim'
之後sudo vi文字檔時
依舊 不會有顏色標記!
因為我只是以root身份編輯文件, ~root/.bashrc的設定並沒有被載入
所以, 必要時請安分的sudo vim吧
Matlab的存圖
給未來的裕翔
在Matlab裡面如果要存圖
一般都是用imwrite(im, filename)
如果是plot或imagesc出來的
可用saveas(1, filename)或saveas(gcf, filename)
1是Figure 1的意思
在Matlab裡面如果要存圖
一般都是用imwrite(im, filename)
如果是plot或imagesc出來的
可用saveas(1, filename)或saveas(gcf, filename)
1是Figure 1的意思
OpenOffice & 圖檔
給未來的裕翔
基於方便
對於想在writer和impress裡面放置的圖檔
當然是給它用拖曳~
要注意的是
拖到impress的圖檔
如果之後刪除或位置變更
則impress重啟後, 圖檔會顯示不出來
所以千萬記住, 把圖拖曳到impress裡面後
趕快對圖按右鍵 => Convert => To Metafile
就樣就跟圖檔來源切割關係了^^
writer則是一開始就沒影響
ps: 想從lxterminal叫writer, impress, 或calc的話
oowriter &
ooimpress &
oocalc &
基於方便
對於想在writer和impress裡面放置的圖檔
當然是給它用拖曳~
要注意的是
拖到impress的圖檔
如果之後刪除或位置變更
則impress重啟後, 圖檔會顯示不出來
所以千萬記住, 把圖拖曳到impress裡面後
趕快對圖按右鍵 => Convert => To Metafile
就樣就跟圖檔來源切割關係了^^
writer則是一開始就沒影響
ps: 想從lxterminal叫writer, impress, 或calc的話
oowriter &
ooimpress &
oocalc &
Monday, March 29, 2010
man -k & apropos
給未來的裕翔
每一個manul的上面
都有關鍵字的
NAME: 名稱和簡述
SYNOPSIS: 用法
DESCRIPTION: 描述
如果我想查名稱和簡述含有ftp的manual
man -k ftp
-k不知道是什麼的縮寫
man -k的效果, 跟apropos一模一樣
不過前者是六字, 後者是七字
結論, 以後一律使用man -k取代apropos
每一個manul的上面
都有關鍵字的
NAME: 名稱和簡述
SYNOPSIS: 用法
DESCRIPTION: 描述
如果我想查名稱和簡述含有ftp的manual
man -k ftp
-k不知道是什麼的縮寫
man -k的效果, 跟apropos一模一樣
不過前者是六字, 後者是七字
結論, 以後一律使用man -k取代apropos
shell script: 如何快速複製數個binary所需的shared library到.
給未來的裕翔
如果現在有aaa, bbb, ccc, ddd四個binary
它們有各自需要的shared library, 也許會重複
如果現在我想把它們需要的shared library複製到 .
可使用以下shell script
#!/bin/bash
for bin in aaa bbb ccc ddd
do
cp $(ldd $(which $bin) | cut -d\ -f3) .
done
真是有點小敬佩自己^^
如果現在有aaa, bbb, ccc, ddd四個binary
它們有各自需要的shared library, 也許會重複
如果現在我想把它們需要的shared library複製到 .
可使用以下shell script
#!/bin/bash
for bin in aaa bbb ccc ddd
do
cp $(ldd $(which $bin) | cut -d\ -f3) .
done
真是有點小敬佩自己^^
shell script: 如何快速複製幾個我要的binary到.
給未來的裕翔
如果我要複製到 . 的是,aaa, bbb, ccc, ddd
#!/bin/bash
for bin in aaa bbb ccc ddd
do
cp $(which $bin) .
done
如果我要複製到 . 的是,aaa, bbb, ccc, ddd
#!/bin/bash
for bin in aaa bbb ccc ddd
do
cp $(which $bin) .
done
如何為模擬的根目錄作modules.dep
給未來的裕翔
當我們modprobe某個module的時候
它會自動分析相依性, 把其它需要的module一起load進去
而它的依據是/lib/modules/`uname -r`/modules.dep
萬一這個檔案不見了
只要depmod -a即可
-a是all的意思
預設是去對/lib/modules/`uname -r`底下的module進行分析並建檔
如果要為某個模擬的根目錄進行這樣的動作, ex: /heyhey
depmod -b /heyhey -a
-b是basedir的意思
產生出來的modules.dep會放在/heyhey/lib/modules/`uname -r`底下
前提當然是這些目錄都在啦~
當我們modprobe某個module的時候
它會自動分析相依性, 把其它需要的module一起load進去
而它的依據是/lib/modules/`uname -r`/modules.dep
萬一這個檔案不見了
只要depmod -a即可
-a是all的意思
預設是去對/lib/modules/`uname -r`底下的module進行分析並建檔
如果要為某個模擬的根目錄進行這樣的動作, ex: /heyhey
depmod -b /heyhey -a
-b是basedir的意思
產生出來的modules.dep會放在/heyhey/lib/modules/`uname -r`底下
前提當然是這些目錄都在啦~
如何測試server有否開啟某個port
給未來的裕翔
nmap可以為一台電腦作完整的port scan
那如何只測某一個port呢?
ex: 我想知道140.114.229.129的port 80有沒開
telnet 140.114.229.129 80
搞定!
nmap可以為一台電腦作完整的port scan
那如何只測某一個port呢?
ex: 我想知道140.114.229.129的port 80有沒開
telnet 140.114.229.129 80
搞定!
Matlab的next & step in注意
給未來的裕翔
關於Matlab除錯的next和step in
我想應該都知道是什麼了
不過有個要注意的是
對一個函數按next
有種情況還是會step in
造成這發生的原因是:
有斷點設在那函式裡!
關於Matlab除錯的next和step in
我想應該都知道是什麼了
不過有個要注意的是
對一個函數按next
有種情況還是會step in
造成這發生的原因是:
有斷點設在那函式裡!
Sunday, March 28, 2010
grep的or功能
給未來的裕翔
如果要對某個檔案搜尋某個字
ex: 對/etc/passwd搜尋bob
grep bob /etc/passwd
那如果要對/etc/passwd搜尋bob或root呢?
因為或屬於extended-regexp
所以要用-E
grep -E 'bob|root' /etc/passwd
單引號務必要加, 否則會變成pipe
後記:
這樣也可以
給未來的裕翔
grep -e string1 -e string2 file
結論:
只有兩個字要搜尋的話
方法二會少一鍵
三個以上, 應該就是方法一比較少鍵了
超後記: 忘了上面的一切的 更未來的裕翔^^
egrep 'pattern1|pattern2' file
帥吧!
如果要對某個檔案搜尋某個字
ex: 對/etc/passwd搜尋bob
grep bob /etc/passwd
那如果要對/etc/passwd搜尋bob或root呢?
因為或屬於extended-regexp
所以要用-E
grep -E 'bob|root' /etc/passwd
單引號務必要加, 否則會變成pipe
後記:
這樣也可以
給未來的裕翔
grep -e string1 -e string2 file
結論:
只有兩個字要搜尋的話
方法二會少一鍵
三個以上, 應該就是方法一比較少鍵了
超後記: 忘了上面的一切的 更未來的裕翔^^
egrep 'pattern1|pattern2' file
帥吧!
Friday, March 26, 2010
Matlab除錯可在任意地方按F10
給未來的裕翔
在Matlab裡面
開啟任一script, ex: aaa.m
此時如果在某個function裡step in
在matlab editor開啟bbb.m
這時如果自己手癢又開啟ccc.m
按F10會到哪?
bbb.m繼續^^
在Matlab裡面
開啟任一script, ex: aaa.m
此時如果在某個function裡step in
在matlab editor開啟bbb.m
這時如果自己手癢又開啟ccc.m
按F10會到哪?
bbb.m繼續^^
LInux下的Matlab突然不能輸入文字
給未來的裕翔
如果遇到這樣狀況
先把右下角的輸入法按右鍵Quit
雖然它好像會自動重啟
不過此時就可以恢復在Matlab裡面的文字輸入了
2009/04/24:
發現一個快一點的方法, 隨便去點個工具列選項
再回來就可以輸入文字了
如果遇到這樣狀況
先把右下角的輸入法按右鍵Quit
雖然它好像會自動重啟
不過此時就可以恢復在Matlab裡面的文字輸入了
2009/04/24:
發現一個快一點的方法, 隨便去點個工具列選項
再回來就可以輸入文字了
Thursday, March 25, 2010
Matlab的debug模式下查看變數
給未來的裕翔
在Matlab的debug模式下
如果要查看變數
可以直接看workspace
或是在cmd line輸入變數名稱按Enter查看
最簡單的大概就是把滑鼠移到script裡面的變數上吧
自動顯現, 不過要注意的是
如果該變數名稱以字串形式存在在script裡, ex
var1 = 50;
var2 = 'var1';
此時滑鼠在第二行的'var'上是顯現不出值的
在Matlab的debug模式下
如果要查看變數
可以直接看workspace
或是在cmd line輸入變數名稱按Enter查看
最簡單的大概就是把滑鼠移到script裡面的變數上吧
自動顯現, 不過要注意的是
如果該變數名稱以字串形式存在在script裡, ex
var1 = 50;
var2 = 'var1';
此時滑鼠在第二行的'var'上是顯現不出值的
Matlab的sub2ind & ind2sub
給未來的裕翔
在 matllab裡面提供兩個函式方便做index和subscript的轉換
sub2ind
ind2sub
詳情請doc^^
ps: octave適用
在 matllab裡面提供兩個函式方便做index和subscript的轉換
sub2ind
ind2sub
詳情請doc^^
ps: octave適用
Matlab的exist & isempty
給未來的裕翔
對一個變數而言, ex: bobobob
還沒宣告前是不存在的
所以exist('bobobob', 'var')回傳0
一旦宣告成空矩陣後, bobobob = []
exist('bobobob', 'var')回傳1
不過因為是空的, isempty(bobobob)回傳1
那如果對一個不存在的變數做isempty呢? ex: bobobbb
會出現錯誤^^
ps: octave適用
對一個變數而言, ex: bobobob
還沒宣告前是不存在的
所以exist('bobobob', 'var')回傳0
一旦宣告成空矩陣後, bobobob = []
exist('bobobob', 'var')回傳1
不過因為是空的, isempty(bobobob)回傳1
那如果對一個不存在的變數做isempty呢? ex: bobobbb
會出現錯誤^^
ps: octave適用
Wednesday, March 24, 2010
vim: 把空格以後的中文去掉
給未來的裕翔
對以下的內容
我想把中文解釋去掉
info var 显示所有的全局和静态变量名称。
kill 终止正被调试的程序。
undisplay display命令的反命令,不要显示表达式
先:%s/ [^[:alpha:]].*/
對每個空格後面接一個非英文的任意字元+任意數量的任意字元到行尾, 砍掉
好死不死, 有個解釋的開頭也是英文,
undisplay display命令的反命令,不要显示表达式
所以再另外刪掉
:%s/ dis.*$/
對以下的內容
我想把中文解釋去掉
info var 显示所有的全局和静态变量名称。
kill 终止正被调试的程序。
undisplay display命令的反命令,不要显示表达式
先:%s/ [^[:alpha:]].*/
對每個空格後面接一個非英文的任意字元+任意數量的任意字元到行尾, 砍掉
好死不死, 有個解釋的開頭也是英文,
undisplay display命令的反命令,不要显示表达式
所以再另外刪掉
:%s/ dis.*$/
gdb常用指令
給未來的裕翔
比別人起步晚的話
就麻煩努力的比別人甘願點^^
以下是從某個IT blog貼過來的gdb常用指令
原來的部落格每個指令後面都有解釋
不過我想用自己的話重新敘述
所以就先用vim拿掉解說部份了
關於解釋我先寫我用過的, 逐步累積中^^
break NUM 對某行設斷點, 縮寫是b
b path/file:line 這樣可對還未讀進來的檔案設定中斷點
backtrace 可加數字列出目前所在到前幾個function, 縮寫是bt
clear 清除所在位置的breakpoint
continue 從某個中斷點繼續run, 縮寫是c
display EXPR
file FILE
help NAME 查詢, 光打help會出現一堆類別, help 類別就可以再細部去看
info breakpoints 查看breakpoint的資訊, 縮寫是info b
info files
info func
info local 看所在function裡面所有local變數值
info prog
info var
info threads 列出目前執行序的資訊
kill 終止目前的process, 通常就是結束debug啦
list 列出以當前位置為中心的數行程式碼
make
next 執行下一步, 遇到function也不跳進去, 縮寫是n
print 加變數名稱可以看值
breakpoint 設斷點, 目前只用過對行和對function名稱
cd
commands
continue 從斷點繼續執行
condition gdb的condition breakpoint
delete 加breakpoint的流水號來清除它, clear是接行號
display
down
frame
info
jump
pwd
pype
quit 從gdb離開
reverse-search
run 執行, 沒設斷點的話一步到底
search
set variable
signal
step 執行下一步, 遇到function會跳進去
undisplay
until 在for的位置輸入才有效? 離開for或while loop
up 接數字n, 表示往上走n個副程式
watch
whatis 查變數的型別
where 查詢從main到目前所在位置所經過的每個檔案
set args 接執行程式所需要的參數
Enter 重複最後一個指令
比別人起步晚的話
就麻煩努力的比別人甘願點^^
以下是從某個IT blog貼過來的gdb常用指令
原來的部落格每個指令後面都有解釋
不過我想用自己的話重新敘述
所以就先用vim拿掉解說部份了
關於解釋我先寫我用過的, 逐步累積中^^
break NUM 對某行設斷點, 縮寫是b
b path/file:line 這樣可對還未讀進來的檔案設定中斷點
backtrace 可加數字列出目前所在到前幾個function, 縮寫是bt
clear 清除所在位置的breakpoint
continue 從某個中斷點繼續run, 縮寫是c
display EXPR
file FILE
help NAME 查詢, 光打help會出現一堆類別, help 類別就可以再細部去看
info breakpoints 查看breakpoint的資訊, 縮寫是info b
info files
info func
info local 看所在function裡面所有local變數值
info prog
info var
info threads 列出目前執行序的資訊
kill 終止目前的process, 通常就是結束debug啦
list 列出以當前位置為中心的數行程式碼
make
next 執行下一步, 遇到function也不跳進去, 縮寫是n
print 加變數名稱可以看值
breakpoint 設斷點, 目前只用過對行和對function名稱
cd
commands
continue 從斷點繼續執行
condition gdb的condition breakpoint
delete 加breakpoint的流水號來清除它, clear是接行號
display
down
frame
info
jump
pwd
pype
quit 從gdb離開
reverse-search
run 執行, 沒設斷點的話一步到底
search
set variable
signal
step 執行下一步, 遇到function會跳進去
undisplay
until 在for的位置輸入才有效? 離開for或while loop
up 接數字n, 表示往上走n個副程式
watch
whatis 查變數的型別
where 查詢從main到目前所在位置所經過的每個檔案
set args 接執行程式所需要的參數
Enter 重複最後一個指令
Tuesday, March 23, 2010
nfs的automount
給未來的裕翔
如果想在client端做automount的動作
以下參考鳥哥伺服器架設篇第二版
先安裝autofs套件
假設我想把nfs server分享的資料夾/tmp
(nfs server: 140.114.229.129)
掛載在/home/nfs裡面的資料夾temp
/home/nfs要先建立, /home/nfs/temp不要, 不是不用, 是不要!
在/etc/auto.master裡面
/home/nfs /etc/auto.nfs
在/etc/auto.nfs裡面
temp -rw 140.114.229.129:/tmp
service autofs restart
耶^^
如果想在client端做automount的動作
以下參考鳥哥伺服器架設篇第二版
先安裝autofs套件
假設我想把nfs server分享的資料夾/tmp
(nfs server: 140.114.229.129)
掛載在/home/nfs裡面的資料夾temp
/home/nfs要先建立, /home/nfs/temp不要, 不是不用, 是不要!
在/etc/auto.master裡面
/home/nfs /etc/auto.nfs
在/etc/auto.nfs裡面
temp -rw 140.114.229.129:/tmp
service autofs restart
耶^^
gdb的reverse功能
給未來的裕翔
如果想要在gdb裡面使用reverse function
像是reverse-next
必須在gdb裡面先找個地方做target record
這樣next完才可以reverse-next
reverse-next似乎不能高於target record的地方
如果想要在gdb裡面使用reverse function
像是reverse-next
必須在gdb裡面先找個地方做target record
這樣next完才可以reverse-next
reverse-next似乎不能高於target record的地方
vim亂碼
給未來的裕翔
剛學到一個東西
如果以vim開啟某檔案時出現類似以下亂碼
忽然
在vim裡輸入
:set enc=utf8
:%s/&#\([0-9]\+\);/\=nr2char(submatch(1))/g
就可以把它轉回中文"突然"兩字
比起:%s/&#\([0-9]\+\);/\=nr2char(submatch(1))/g
也許:%s'&#\([0-9]\+\);'\=nr2char(submatch(1))'g更好閱讀
:%s'第一部份'第二部份'g
上面的意思是搜尋&#\([0-9]\+\);
注意, \(和\)不是要被搜尋字串的一部分, 而是有特殊意義, 讓後面的submatch用
[0-9]\+的\+
而我們這裡要用regexp, 因此是\+
接著是第二部份\=nr2char(submatch(1))
因為要做特殊處理, 所以一開始要\=
而submatch(1)是指第一部份括起來的內容
最後, nr2char把編碼的數字換成字元
搞定^^
剛學到一個東西
如果以vim開啟某檔案時出現類似以下亂碼
忽然
在vim裡輸入
:set enc=utf8
:%s/&#\([0-9]\+\);/\=nr2char(submatch(1))/g
就可以把它轉回中文"突然"兩字
比起:%s/&#\([0-9]\+\);/\=nr2char(submatch(1))/g
也許:%s'&#\([0-9]\+\);'\=nr2char(submatch(1))'g更好閱讀
:%s'第一部份'第二部份'g
上面的意思是搜尋&#\([0-9]\+\);
, 以
&#開頭的至少一個數字
注意, \(和\)不是要被搜尋字串的一部分, 而是有特殊意義, 讓後面的submatch用
[0-9]\+的\+
如果不加
\, 那就是當一般字元+
而我們這裡要用regexp, 因此是\+
接著是第二部份\=nr2char(submatch(1))
因為要做特殊處理, 所以一開始要\=
而submatch(1)是指第一部份括起來的內容
最後, nr2char把編碼的數字換成字元
搞定^^
automount導致無法開機
給未來的裕翔
如果/etc/auto.master編錯
會無法跑完開機流程
在plymouth的階段按Esc
可以看到的確卡在autofs那一步驟
這時候只好重開了
進入單人維護模式
把/etc/auto.master寫錯的那行砍掉
重開機即可
ps: 我不確定重開機是不是必要, 可否直接init 5?
改天想試再試~
如果/etc/auto.master編錯
會無法跑完開機流程
在plymouth的階段按Esc
可以看到的確卡在autofs那一步驟
這時候只好重開了
進入單人維護模式
把/etc/auto.master寫錯的那行砍掉
重開機即可
ps: 我不確定重開機是不是必要, 可否直接init 5?
改天想試再試~
Monday, March 22, 2010
學校matlab的toolbox檢驗方式
給未來的裕翔
由於學校matlab買的image toolbox數量為'壹'
所以只要全校有'壹'人在用
而且還不是我~
那我就不能用了
這時候發揮好奇的精神
如果當下位置有個同名的m檔, matlab會不讓我用嗎?
這樣不就限制我取檔名的自由?
再來, 如果檔名不能相同, 我從被限制的m檔
直接複製到當下資料夾, 改檔名, 可以用嗎?
如果還是被限制, 是因為matlab內建的每個m檔
前面的註解有所謂的"標記," 像shebang那樣嗎?
實際小測試:
我在使用phantom這function時被限制
在matlab裡以which phantom找出它實際位置在哪裡
接著在terminal輸指令, 把它複製到當下資料夾
cp /usr/share/matlab/toolbox/images/images/phantom.m .
再一次執行phantom
可以用咧!
其它懷疑我也不用測了......
第一個就過了......
以上, 純為學術研究^^
由於學校matlab買的image toolbox數量為'壹'
所以只要全校有'壹'人在用
而且還不是我~
那我就不能用了
這時候發揮好奇的精神
如果當下位置有個同名的m檔, matlab會不讓我用嗎?
這樣不就限制我取檔名的自由?
再來, 如果檔名不能相同, 我從被限制的m檔
直接複製到當下資料夾, 改檔名, 可以用嗎?
如果還是被限制, 是因為matlab內建的每個m檔
前面的註解有所謂的"標記," 像shebang那樣嗎?
實際小測試:
我在使用phantom這function時被限制
在matlab裡以which phantom找出它實際位置在哪裡
接著在terminal輸指令, 把它複製到當下資料夾
cp /usr/share/matlab/toolbox/images/images/phantom.m .
再一次執行phantom
可以用咧!
其它懷疑我也不用測了......
第一個就過了......
以上, 純為學術研究^^
快速知道哪些m檔非function
給未來的裕翔
剛下載了toolbox_sparsity.zip
裡面有個toolbox_sparsity資料夾
一堆m檔
大部分都是function
現在 我想知道"哪幾個m檔不是function"
我想到的方法是:
ls *.m > all-m-file.txt
grep function *.m > function-m-file.txt
diff all-m-file.txt function-m-file.txt
抓到啦 嘿嘿嘿
剛下載了toolbox_sparsity.zip
裡面有個toolbox_sparsity資料夾
一堆m檔
大部分都是function
現在 我想知道"哪幾個m檔不是function"
我想到的方法是:
ls *.m > all-m-file.txt
grep function *.m > function-m-file.txt
diff all-m-file.txt function-m-file.txt
抓到啦 嘿嘿嘿
Sunday, March 21, 2010
nfs server架設問題&處理
給未來的裕翔
(以下假設rpcbind已設定好, 關於rpcbind設定可參考開放rpcbind的服務)
想在140.114.229.129架nfs server讓遠端140.114.28.187使用
必須先處理iptables的問題
為了讓client可以使用
除了要開rpcbind的port 111
還必須開mountd的port 892和nfs的port 2049
不過mountd預設是隨機開一個
所以必須去/etc/sysconfig/nfs反註解#MOUNTD_PORT=892
接著在/etc/sysconfig/iptables新增四行
-A CLASS-RULES -p tcp --dport 892 -j ACCEPT
-A CLASS-RULES -p udp --dport 892 -j ACCEPT
-A CLASS-RULES -p tcp --dport 2049 -j ACCEPT
-A CLASS-RULES -p udp --dport 2049 -j ACCEPT
以上如果沒搞定的話
client端使用的showmount -e 140.114.229.129
會出現rpc mount export: RPC: Unable to receive; errno = Connection refused
搞定後, 還必須去/etc/hosts.allow新增一行
mountd: 140.114.28.187
注意, 雖然執行檔是rpc.mountd
寫成rpc.mountd: 140.114.28.187反而會錯, 不知為啥
以上如果沒搞定的話
client端使用的showmount -e 140.114.229.129
會出現rpc mount export: RPC: Authentication error; why = Failed (unspecified error)
到此, client端終於可以正常showmount -e 140.114.229.129
client端如果進一步把nfs server分享的/tmp掛載在/mount-test
mount -t nfs 140.114.229.129:/tmp /mount-test
會出現以下錯誤訊息
/usr/sbin/start-statd: line 8: /sbin/rpc.statd: Permission denied
/usr/sbin/start-statd: line 8: /sbin/rpc.statd: Success
mount.nfs: rpc.statd is not running but is required for remote locking.
mount.nfs: Either use '-o nolock' to keep locks local, or start statd.
mount.nfs: an incorrect mount option was specified
依照訊息建議
改成mount -t nfs 140.114.229.129:/tmp /mount-test -o nolock
就可以mount了!!!
被分享的/tmp在server端原本是被設定成ro
若改成rw, 重啟nfs
client端掛載中的/mount-test就會瞬間變成可寫入狀態, 什麼都不需要做
(以下假設rpcbind已設定好, 關於rpcbind設定可參考開放rpcbind的服務)
想在140.114.229.129架nfs server讓遠端140.114.28.187使用
必須先處理iptables的問題
為了讓client可以使用
除了要開rpcbind的port 111
還必須開mountd的port 892和nfs的port 2049
不過mountd預設是隨機開一個
所以必須去/etc/sysconfig/nfs反註解#MOUNTD_PORT=892
接著在/etc/sysconfig/iptables新增四行
-A CLASS-RULES -p tcp --dport 892 -j ACCEPT
-A CLASS-RULES -p udp --dport 892 -j ACCEPT
-A CLASS-RULES -p tcp --dport 2049 -j ACCEPT
-A CLASS-RULES -p udp --dport 2049 -j ACCEPT
以上如果沒搞定的話
client端使用的showmount -e 140.114.229.129
會出現rpc mount export: RPC: Unable to receive; errno = Connection refused
搞定後, 還必須去/etc/hosts.allow新增一行
mountd: 140.114.28.187
注意, 雖然執行檔是rpc.mountd
寫成rpc.mountd: 140.114.28.187反而會錯, 不知為啥
以上如果沒搞定的話
client端使用的showmount -e 140.114.229.129
會出現rpc mount export: RPC: Authentication error; why = Failed (unspecified error)
到此, client端終於可以正常showmount -e 140.114.229.129
client端如果進一步把nfs server分享的/tmp掛載在/mount-test
mount -t nfs 140.114.229.129:/tmp /mount-test
會出現以下錯誤訊息
/usr/sbin/start-statd: line 8: /sbin/rpc.statd: Permission denied
/usr/sbin/start-statd: line 8: /sbin/rpc.statd: Success
mount.nfs: rpc.statd is not running but is required for remote locking.
mount.nfs: Either use '-o nolock' to keep locks local, or start statd.
mount.nfs: an incorrect mount option was specified
依照訊息建議
改成mount -t nfs 140.114.229.129:/tmp /mount-test -o nolock
就可以mount了!!!
被分享的/tmp在server端原本是被設定成ro
若改成rw, 重啟nfs
client端掛載中的/mount-test就會瞬間變成可寫入狀態, 什麼都不需要做
Saturday, March 20, 2010
開放rpcbind的服務
給未來的裕翔
如果想要開放rpcbind服務(別名: portmap)
必須修改兩個地方
假設開放給140.114.28.187, ex:
/etc/hosts.allow
rpcbind: 127.0.0.1 140.114.28.176
127.0.0.1也必須開放, 不然自己不能showmount -e
/etc/sysconfig/iptables
-A CLASS-RULES -p tcp --dport 111 -j ACCEPT
-A CLASS-RULES -p udp --dport 111 -j ACCEPT
如果想要開放rpcbind服務(別名: portmap)
必須修改兩個地方
假設開放給140.114.28.187, ex:
/etc/hosts.allow
rpcbind: 127.0.0.1 140.114.28.176
127.0.0.1也必須開放, 不然自己不能showmount -e
/etc/sysconfig/iptables
-A CLASS-RULES -p tcp --dport 111 -j ACCEPT
-A CLASS-RULES -p udp --dport 111 -j ACCEPT
iptables註解
給未來的裕翔
如果像要對iptables進行註解
必須注意, 註解和設定不能同一行
以下是可以的
# ssh
-A CLASS-RULES -p tcp --dport 22 -j ACCEPT
以下是會錯誤的
-A CLASS-RULES -p tcp --dport 22 -j ACCEPT # ssh
如果像要對iptables進行註解
必須注意, 註解和設定不能同一行
以下是可以的
# ssh
-A CLASS-RULES -p tcp --dport 22 -j ACCEPT
以下是會錯誤的
-A CLASS-RULES -p tcp --dport 22 -j ACCEPT # ssh
ssh -X 工作站
給未來的裕翔
當想要以bob身份登入140.114.24.115工作站
並且執行GUI程式icfb時
ssh -X bob@140.114.24.115
icfb &
一開始會失敗
X Error of failed request: BadName (named color or font does not exist)
Major opcode of failed request: 45 (X_OpenFont)
Serial number of failed request: 15
Current serial number in output stream: 30
google到幾個處理方法
有人說xhost +140.114.24.115
有人說安裝75 dpi字型
因為軒哥一開始也有xhost +140.114.24.115
但還是沒成功
所以應該就是字型問題!
以GUI新增移除程式一口氣裝了所有的xorg-x11-fonts
重新ssh -X bob@140.114.24.115
icfb &
成功^^
不過因為一口氣裝太多字型
我現在還不確定哪個是關鍵字型
當想要以bob身份登入140.114.24.115工作站
並且執行GUI程式icfb時
ssh -X bob@140.114.24.115
icfb &
一開始會失敗
X Error of failed request: BadName (named color or font does not exist)
Major opcode of failed request: 45 (X_OpenFont)
Serial number of failed request: 15
Current serial number in output stream: 30
google到幾個處理方法
有人說xhost +140.114.24.115
有人說安裝75 dpi字型
因為軒哥一開始也有xhost +140.114.24.115
但還是沒成功
所以應該就是字型問題!
以GUI新增移除程式一口氣裝了所有的xorg-x11-fonts
重新ssh -X bob@140.114.24.115
icfb &
成功^^
不過因為一口氣裝太多字型
我現在還不確定哪個是關鍵字型
OpenCV的sample執行出問題
給未來的裕翔
把ldd問題處理掉之後
執行facedetect會出現類似以下的錯誤訊息
OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvNamedWindow, file /home/pison/programs/opencv/src/highgui/window.cpp, line 100
terminate called after throwing an instance of 'cv::Exception'
Aborted
依照建議安裝gtk2-devel套件
重新./configure, make, make install
重新執行facedetect, 耶~!
把ldd問題處理掉之後
執行facedetect會出現類似以下的錯誤訊息
OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvNamedWindow, file /home/pison/programs/opencv/src/highgui/window.cpp, line 100
terminate called after throwing an instance of 'cv::Exception'
Aborted
依照建議安裝gtk2-devel套件
重新./configure, make, make install
重新執行facedetect, 耶~!
shared library測試
給未來的裕翔
當我對 facedetect.cpp編譯後的object檔做連結時
g++ -o facedetect facedetect.o -L/usr/lib -lhighgui
ldd facedetect
linux-gate.so.1 => (0x00da3000)
libhighgui.so.4 => not found
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x07613000)
libm.so.6 => /lib/libm.so.6 (0x00a38000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x07442000)
libc.so.6 => /lib/libc.so.6 (0x0089e000)
libcv.so.4 => not found
libcxcore.so.4 => not found
libpthread.so.0 => /lib/libpthread.so.0 (0x00a1c000)
/lib/ld-linux.so.2 (0x0087c000)
我只決定一個libhighgui.so, 其它是誰決定的?
系統? 還是libhighgui.so? 因為除了libhighgui.so
libcv.so和libcxcore.so也都是opencv裡面的shared library
目前不知道是誰決定的
有些shared library的後面是接not found
既然沒找到, 為什麼可以編譯?
改成g++ -o facedetect facedetect.o -L/usr/lib -lhighgui -lcv
ldd查看依舊是十個, 只有顯示順序改變
後來發現, 其實我路徑也給錯了
應該是要-L/usr/local/lib
可是剛兩次連結也都通過了
要通過跟路徑沒關?
g++ -o facedetect facedetect.o -lhighgui -lcv
果然通過! 傻眼...... 那我現在該怎麼辦?
無可奈何, 只好先把某些shared library顯示not found的問題解決
vi /etc/ld.so.conf
新增/usr/local/lib
改完之後也不需要重新編譯或連結
直接ldd就可以發現每個shared library都找到了
結論: 這次真是幾乎毫無結論的測試......
當我對 facedetect.cpp編譯後的object檔做連結時
g++ -o facedetect facedetect.o -L/usr/lib -lhighgui
ldd facedetect
linux-gate.so.1 => (0x00da3000)
libhighgui.so.4 => not found
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x07613000)
libm.so.6 => /lib/libm.so.6 (0x00a38000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x07442000)
libc.so.6 => /lib/libc.so.6 (0x0089e000)
libcv.so.4 => not found
libcxcore.so.4 => not found
libpthread.so.0 => /lib/libpthread.so.0 (0x00a1c000)
/lib/ld-linux.so.2 (0x0087c000)
我只決定一個libhighgui.so, 其它是誰決定的?
系統? 還是libhighgui.so? 因為除了libhighgui.so
libcv.so和libcxcore.so也都是opencv裡面的shared library
目前不知道是誰決定的
有些shared library的後面是接not found
既然沒找到, 為什麼可以編譯?
改成g++ -o facedetect facedetect.o -L/usr/lib -lhighgui -lcv
ldd查看依舊是十個, 只有顯示順序改變
後來發現, 其實我路徑也給錯了
應該是要-L/usr/local/lib
可是剛兩次連結也都通過了
要通過跟路徑沒關?
g++ -o facedetect facedetect.o -lhighgui -lcv
果然通過! 傻眼...... 那我現在該怎麼辦?
無可奈何, 只好先把某些shared library顯示not found的問題解決
vi /etc/ld.so.conf
新增/usr/local/lib
改完之後也不需要重新編譯或連結
直接ldd就可以發現每個shared library都找到了
結論: 這次真是幾乎毫無結論的測試......
package的移除測試
給未來的裕翔
比起知識
最近更享受於一些小測試
如果我對一個套件的檔案進行編輯, 甚至移除後重建同名的空檔
當套件被移除時, 這些被我動過的檔案會如何?
ex: /usr/lib/libhighgui.so.2, /usr/lib/libhighgui.so.2.0.0
對lighighgui.so.2.0.0以vi開啟隨便新增一行
對libhighgui.so.2進行移除, 重新touch一個同名空檔
yum erase -y opencv
ll /usr/lib | grep highgui
兩個檔案都被移除掉了
結論: 移除是以檔名在做辨認的
而非檔案類型
note: 剛才對檔案修改後
移除前先rpm -V opencv的話
有些未修改的檔案會無法驗證
因為它們會用到libhighgui.so
表示驗證時有其它機制在, 詳情不甚了
比起知識
最近更享受於一些小測試
如果我對一個套件的檔案進行編輯, 甚至移除後重建同名的空檔
當套件被移除時, 這些被我動過的檔案會如何?
ex: /usr/lib/libhighgui.so.2, /usr/lib/libhighgui.so.2.0.0
對lighighgui.so.2.0.0以vi開啟隨便新增一行
對libhighgui.so.2進行移除, 重新touch一個同名空檔
yum erase -y opencv
ll /usr/lib | grep highgui
兩個檔案都被移除掉了
結論: 移除是以檔名在做辨認的
而非檔案類型
note: 剛才對檔案修改後
移除前先rpm -V opencv的話
有些未修改的檔案會無法驗證
因為它們會用到libhighgui.so
表示驗證時有其它機制在, 詳情不甚了
ssh遠端操作希望有程式介面
給現在的軒哥^^
假設現在想要以bob的身份連進工作站
假設工作站IP是: 123.321.123.567
ssh bob@123.321.123.567
如果希望能夠在ssh server開GUI程式, , ex: pidgin
pidgin &
馬上看到錯誤訊息
(Pidgin:1791): Gdk-CRITICAL **: gdk_display_get_name: assertion `GDK_IS_DISPLAY (display)' failed
Pidgin 2.6.6-2.fc12
** (Pidgin:1791): WARNING **: cannot open display: unset
到此, 是你已經遇到的情形
處理方式: 在一開始ssh的時候加-X選項
ssh -X bob@123.321.123.567
就我自己兩台電腦測試是ok的
如果還是不行
希望你搞定後跟我分享^^
假設現在想要以bob的身份連進工作站
假設工作站IP是: 123.321.123.567
ssh bob@123.321.123.567
如果希望能夠在ssh server開GUI程式, , ex: pidgin
pidgin &
馬上看到錯誤訊息
(Pidgin:1791): Gdk-CRITICAL **: gdk_display_get_name: assertion `GDK_IS_DISPLAY (display)' failed
Pidgin 2.6.6-2.fc12
** (Pidgin:1791): WARNING **: cannot open display: unset
到此, 是你已經遇到的情形
處理方式: 在一開始ssh的時候加-X選項
ssh -X bob@123.321.123.567
就我自己兩台電腦測試是ok的
如果還是不行
希望你搞定後跟我分享^^
Friday, March 19, 2010
configure & make小小筆記
給未來的裕翔
安裝OpenCV-2.0.0時
先./configure再make
然後就會失敗, 說什麼gzopen, gzrewind, gzeof這類的問題於是
依序裝建議的套件
每裝一個就updatedb一次
每updatedb一次就再make一次
能裝得都裝了卻還是顯示一樣的問題
把當下資料夾砍掉後, 重新解壓縮OpenCV-2.0.0.tar
重新./configure後重新make
成功, 表示裝套件直接影響的應該是./configure而不是make
所以不管重新make幾次都是沒用的
應該是要重新./configure
以上
安裝OpenCV-2.0.0時
先./configure再make
然後就會失敗, 說什麼gzopen, gzrewind, gzeof這類的問題於是
依序裝建議的套件
每裝一個就updatedb一次
每updatedb一次就再make一次
能裝得都裝了卻還是顯示一樣的問題
把當下資料夾砍掉後, 重新解壓縮OpenCV-2.0.0.tar
重新./configure後重新make
成功, 表示裝套件直接影響的應該是./configure而不是make
所以不管重新make幾次都是沒用的
應該是要重新./configure
以上
編譯器include優先順序
給未來的裕翔
寫一個簡單的main.c
#include <stdio.h>
#include <string.h>
int main(void)
{
printf("\n%d\n",strlen("12345"));
return 0;
}
因為有#include <string.h>
所以編譯器會自動去/usr/include找string.h
如果改成#include "string.h"
編譯器會include./string.h
由於不存在
所以編譯器會改成去/usr/include找
如果從/usr/include複製一個string.h到./
把./string.h裡面的strlen定義改成sstrlen
編譯馬上出錯
表示對#include "string.h"來說, ./優先於/usr/include
如果在./新增資料夾include
把有錯的./string.h移到./include裡面
再次編譯, 會過, 表示對#include "string.h"來說
./找不到的話, 依舊去/usr/include搜尋
那如果在main.c裡面寫成#include "include/string.h"
或是編譯時指明inlcude位置, ex: gcc main.c -Iinclude
編譯會錯, 得知確實有找到./include/string.h
以上
寫一個簡單的main.c
#include <stdio.h>
#include <string.h>
int main(void)
{
printf("\n%d\n",strlen("12345"));
return 0;
}
因為有#include <string.h>
所以編譯器會自動去/usr/include找string.h
如果改成#include "string.h"
編譯器會include./string.h
由於不存在
所以編譯器會改成去/usr/include找
如果從/usr/include複製一個string.h到./
把./string.h裡面的strlen定義改成sstrlen
編譯馬上出錯
表示對#include "string.h"來說, ./優先於/usr/include
如果在./新增資料夾include
把有錯的./string.h移到./include裡面
再次編譯, 會過, 表示對#include "string.h"來說
./找不到的話, 依舊去/usr/include搜尋
那如果在main.c裡面寫成#include "include/string.h"
或是編譯時指明inlcude位置, ex: gcc main.c -Iinclude
編譯會錯, 得知確實有找到./include/string.h
以上
臨時取消alias功能
給未來的裕翔
原本在~/.bashrc有另外設定alias df='df -h'
那如果我臨時想要使用原本的df怎辦?
去~/.bashrc把alias df='df -h'註解掉?
剛google一個更簡單的作法
(本來只知道方法的存在)
\df
快吧^^ 帥吧^^
原本在~/.bashrc有另外設定alias df='df -h'
那如果我臨時想要使用原本的df怎辦?
去~/.bashrc把alias df='df -h'註解掉?
剛google一個更簡單的作法
(本來只知道方法的存在)
\df
快吧^^ 帥吧^^
locate搭配regexp找header檔
給未來的裕翔
如果想要找header檔
locate .h一定會跑出很多不要的東西
建議搭配regexp, -r
locate -r \.h
這樣會有問題, 要加引號, 單引號雙引號皆可
問題的來源我猜是反斜線被shell用, 而不是regexp, 不過沒特地去驗證
locate -r '\h'
這樣會有問題, .html檔也會被找出來, 要加行尾符號, $
locate -r '\h$'
這樣會有問題, 副檔名hpp的也是header檔, 要標示p的存在可能
locate -r '\hp*$'
這樣應該就沒問題了^^
如果我只要找/home/bob/Downloads/OpenCV-2.0.0底下的header檔
locate -r '\.hp*$' | grep '/home/bob/Downloads/OpenCV-2.0.0'
如果我想看哪些header檔內容定義我要的關鍵字, ex: lrint
grep lrint $(locate -r '\.hp*$' | \grep '/home/bob/Downloads/OpenCV-2.0.0' ) | grep def
(定義可能是typedef或define, 所以我在最後加grep def)
注意: 上例如果沒有前面的\.
那所有檔案或路徑還有h的都會被找出來
因為p*是可不存在的
如果想要找header檔
locate .h一定會跑出很多不要的東西
建議搭配regexp, -r
locate -r \.h
這樣會有問題, 要加引號, 單引號雙引號皆可
問題的來源我猜是反斜線被shell用, 而不是regexp, 不過沒特地去驗證
locate -r '\h'
這樣會有問題, .html檔也會被找出來, 要加行尾符號, $
locate -r '\h$'
這樣會有問題, 副檔名hpp的也是header檔, 要標示p的存在可能
locate -r '\hp*$'
這樣應該就沒問題了^^
如果我只要找/home/bob/Downloads/OpenCV-2.0.0底下的header檔
locate -r '\.hp*$' | grep '/home/bob/Downloads/OpenCV-2.0.0'
如果我想看哪些header檔內容定義我要的關鍵字, ex: lrint
grep lrint $(locate -r '\.hp*$' | \grep '/home/bob/Downloads/OpenCV-2.0.0' ) | grep def
(定義可能是typedef或define, 所以我在最後加grep def)
注意: 上例如果沒有前面的\.
那所有檔案或路徑還有h的都會被找出來
因為p*是可不存在的
Thursday, March 18, 2010
service nfs start失敗
給未來的裕翔
ldd `which rpcbind` | grep libwrap是有output的
表示它可以透過hosts.allow和hosts.deny來加以控制
假設client端是140.114.28.187
我在hosts.allow新增rpcbind: 140.114.28.187
service nfs start 失敗!!!!!!
嘗試把iptables關掉後重啟nfs, 失敗!!!!!!
嘗試把selinux關掉後重啟nfs, 失敗!!!!!!
google了一下, 嘗試把hosts.allow原來新增那行的改成
rpcbind: 140.114.28.187 127.0.0.1, 成功!!!!!!
今天有進步, 可以睡覺去了^^
ldd `which rpcbind` | grep libwrap是有output的
表示它可以透過hosts.allow和hosts.deny來加以控制
假設client端是140.114.28.187
我在hosts.allow新增rpcbind: 140.114.28.187
service nfs start 失敗!!!!!!
嘗試把iptables關掉後重啟nfs, 失敗!!!!!!
嘗試把selinux關掉後重啟nfs, 失敗!!!!!!
google了一下, 嘗試把hosts.allow原來新增那行的改成
rpcbind: 140.114.28.187 127.0.0.1, 成功!!!!!!
今天有進步, 可以睡覺去了^^
hosts.allow和hosts.deny
給未來的裕翔
所有會用到libwrap.so的binary
都可以用/etc/hosts.allow和/etc/hosts.deny
來多製作一道防線
通常, hosts.deny裡面只會放一行ALL: ALL
這樣他它就可以對hosts.allow未決定的東東
給予完全的否決! (聽起來真酷!)
至於此兩檔的格式, 在冒號前後要不要空格都隨便
一存檔馬上生效
以上
所有會用到libwrap.so的binary
都可以用/etc/hosts.allow和/etc/hosts.deny
來多製作一道防線
通常, hosts.deny裡面只會放一行ALL: ALL
這樣他它就可以對hosts.allow未決定的東東
給予完全的否決! (聽起來真酷!)
至於此兩檔的格式, 在冒號前後要不要空格都隨便
一存檔馬上生效
以上
vim多視窗編輯
給未來的裕翔
當需要以vim多視窗編輯時
ex: 假設我想多視窗編輯/etc/passwd, /etc/issue
先以vi /etc/passwd開啟其中一個檔案
在vi裡面, 再:vnew /etc/issue開啟另一檔案
新開啟的檔案會出現在vi左邊
(所以想放右邊的要先用vi開啟)
這樣就可以同時看到左右兩邊^^
編輯的過程按Ctrl + w + 左右鍵來切換視窗
如果剛才的:vnew /etc/issue換成:new /etc/issue
則會變成上下兩編輯視窗
新開的檔案在上面視窗
note: 多檔案編輯和多視窗編輯不一樣
多視窗編輯才可以同時看到每個檔案
多檔案編輯需要切換才能看到另一檔案
當需要以vim多視窗編輯時
ex: 假設我想多視窗編輯/etc/passwd, /etc/issue
先以vi /etc/passwd開啟其中一個檔案
在vi裡面, 再:vnew /etc/issue開啟另一檔案
新開啟的檔案會出現在vi左邊
(所以想放右邊的要先用vi開啟)
這樣就可以同時看到左右兩邊^^
編輯的過程按Ctrl + w + 左右鍵來切換視窗
如果剛才的:vnew /etc/issue換成:new /etc/issue
則會變成上下兩編輯視窗
新開的檔案在上面視窗
note: 多檔案編輯和多視窗編輯不一樣
多視窗編輯才可以同時看到每個檔案
多檔案編輯需要切換才能看到另一檔案
Wednesday, March 17, 2010
gcc的include和library小筆記
在c或cpp裡
只要開頭的include是像
#include <stdlib.h>
編譯器都會自動到/usr/include/裡面去搜尋並使用
但如果改成這樣
#include "stdlib.h"
就算/usr/include/裡面有
在編譯的時候還是必須自己手動指定
g++ (中略) -I/usr/include
以上
只要開頭的include是像
#include <stdlib.h>
編譯器都會自動到/usr/include/裡面去搜尋並使用
但如果改成這樣
#include "stdlib.h"
就算/usr/include/裡面有
在編譯的時候還是必須自己手動指定
g++ (中略) -I/usr/include
以上
OpenCV需要librdf加速
給未來的裕翔
OpenCV的facedetect需要librdf加速
如果沒有安裝
會出現以下警告
Warning: Unable to create "trees" RDF storage.
Performance can be improved by upgrading librdf.
這個時候直接yum whatprovides librdf是找不到東西的
請別忘記, 平常講哪個library的時候, 是不會講後面的副檔名so的
所以真的要搜尋時
yum whatprovides */librdf.so
此時不只出現一個符合套件
不過只有一個套件所提供的librdf.so直接放在/usr/lib/下
redland-devel
就是它了!
後記: 裝是裝了, 也有把它加到makefile裡, 但好像變慢了?
OpenCV的facedetect需要librdf加速
如果沒有安裝
會出現以下警告
Warning: Unable to create "trees" RDF storage.
Performance can be improved by upgrading librdf.
這個時候直接yum whatprovides librdf是找不到東西的
請別忘記, 平常講哪個library的時候, 是不會講後面的副檔名so的
所以真的要搜尋時
yum whatprovides */librdf.so
此時不只出現一個符合套件
不過只有一個套件所提供的librdf.so直接放在/usr/lib/下
redland-devel
就是它了!
後記: 裝是裝了, 也有把它加到makefile裡, 但好像變慢了?
Octave直接執行script
給未來的裕翔
如同bash可以寫shell script
octave其實也可以寫script
(m file應該不能直接這樣用, 上面要加一行)
如同shell script在最上面有個#!/bin/bash
octave在最上面的是#!/usr/bin/octave
之後一切都如同shell script
假設我的octave script是test.oct
(副檔名不一定要oct, 甚至不需要副檔名, 隨我高興^^)
chmod u+x test.oct
./test.oct
不過如果script有出現要秀圖的部份
光剛那樣不夠
可以考慮另存圖檔, ex: output.png
在test.oct裡面加上print -dpng output.png
(-d是device的意思, png是圖檔格式)
或是在shell下執行完test.oct之後直接進入octave
octave --persist test.oct
這樣秀圖的視窗就會保留住了
如同bash可以寫shell script
octave其實也可以寫script
(m file應該不能直接這樣用, 上面要加一行)
如同shell script在最上面有個#!/bin/bash
octave在最上面的是#!/usr/bin/octave
之後一切都如同shell script
假設我的octave script是test.oct
(副檔名不一定要oct, 甚至不需要副檔名, 隨我高興^^)
chmod u+x test.oct
./test.oct
不過如果script有出現要秀圖的部份
光剛那樣不夠
可以考慮另存圖檔, ex: output.png
在test.oct裡面加上print -dpng output.png
(-d是device的意思, png是圖檔格式)
或是在shell下執行完test.oct之後直接進入octave
octave --persist test.oct
這樣秀圖的視窗就會保留住了
Tuesday, March 16, 2010
阿~哈哈哈哈哈! OpenCV移植大成功!
給未來的裕翔
阿~哈哈哈哈哈!
讓我紀錄一下g++使用筆記
阿~哈哈哈哈哈!
複製OpenCV中文網裡面的人臉檢測程式碼
(不知為啥, 直接使用Opencv-2.0.0裡面的sample編譯會有錯)
OpenCV中文網:
http://www.opencv.org.cn/index.php/%E9%A6%96%E9%A1%B5
人臉檢測程式碼:
http://www.opencv.org.cn/index.php/%E4%BA%BA%E8%84%B8%E6%A3%80%E6%B5%8B
把它複製貼到facedetect.cpp檔裡去
此facedetect.cpp和之前找的其它cpp程式碼放在一起
(為了不使用已編譯好的so檔)
g++ -c *.c*
編譯所有的c或cpp成object檔, 它們需要的header檔之前已放在當下資料夾
(現在的我會嘗試用g++ -I指定include資料夾)
g++ -o facedetect *.o -L/usr/lib -lhighgui
把所有的object連結在一起成為facedetect執行檔
指定/usr/lib/libhighgui.so作為此執行檔動態函式庫
這樣編譯出來的執行檔
終於不會再讓圖歪歪的了!
阿~哈哈哈哈哈!
ps: /usr/lib裡面的so檔都取名為像是libxxx.so, libzzz.so這樣的形式
想以-L使用libxxx.so時, ex:
g++ (中略) -L/usr/lib/ -lxxx
兩個都要使用時, ex:
g++ (中略) -L/usr/lib/ -lxxx -lzzz
阿~哈哈哈哈哈!
阿~哈哈哈哈哈!
讓我紀錄一下g++使用筆記
阿~哈哈哈哈哈!
複製OpenCV中文網裡面的人臉檢測程式碼
(不知為啥, 直接使用Opencv-2.0.0裡面的sample編譯會有錯)
OpenCV中文網:
http://www.opencv.org.cn/index.php/%E9%A6%96%E9%A1%B5
人臉檢測程式碼:
http://www.opencv.org.cn/index.php/%E4%BA%BA%E8%84%B8%E6%A3%80%E6%B5%8B
把它複製貼到facedetect.cpp檔裡去
此facedetect.cpp和之前找的其它cpp程式碼放在一起
(為了不使用已編譯好的so檔)
g++ -c *.c*
編譯所有的c或cpp成object檔, 它們需要的header檔之前已放在當下資料夾
(現在的我會嘗試用g++ -I指定include資料夾)
g++ -o facedetect *.o -L/usr/lib -lhighgui
把所有的object連結在一起成為facedetect執行檔
指定/usr/lib/libhighgui.so作為此執行檔動態函式庫
這樣編譯出來的執行檔
終於不會再讓圖歪歪的了!
阿~哈哈哈哈哈!
ps: /usr/lib裡面的so檔都取名為像是libxxx.so, libzzz.so這樣的形式
想以-L使用libxxx.so時, ex:
g++ (中略) -L/usr/lib/ -lxxx
兩個都要使用時, ex:
g++ (中略) -L/usr/lib/ -lxxx -lzzz
阿~哈哈哈哈哈!
OpenCV編譯成功!
給未來的裕翔
OpenCV-2.0.0編譯成功
當初失敗時的錯誤訊息是缺少 zopen, zclose這些東東
重新嘗試make前有先把原本的資料夾移除
然後對OpenCV的tarball解壓縮
tar -jxf OpenCV-2.0.0.tar.bz2
跟上次不同的是
這次有盡可能的安裝INSTALL檔案裡建議的"選擇性安裝"套件
像是: subversion, python, swig, ......
我推測, 成功的關鍵可能是因為這次有安裝zlib-devel
之前失敗的時候, 是在有zlib而沒zlib-devel的情況下
加上錯誤訊息和zopen, zclose有關
所以我如此推測
安裝好之後
以root權限make install, 因為要在/usr/lib裡面新增檔案
突然在想: 之前我亂嘗試放置的libhighgui.so
是被蓋過還是略過? 不知道 (好像獵人的推理)
所以我mv /usr/lib/libhighgui.so /usr/lib/libhighgui.so.bak
touch /usr/lib/libhighgui.so
原來的lighighgui.so是一個連結檔
而我製作的只是普通空檔案
再次make install之後
蓋過!
因此不用擔心之前的嘗試影響我的make install
OpenCV-2.0.0編譯成功
當初失敗時的錯誤訊息是缺少 zopen, zclose這些東東
重新嘗試make前有先把原本的資料夾移除
然後對OpenCV的tarball解壓縮
tar -jxf OpenCV-2.0.0.tar.bz2
跟上次不同的是
這次有盡可能的安裝INSTALL檔案裡建議的"選擇性安裝"套件
像是: subversion, python, swig, ......
我推測, 成功的關鍵可能是因為這次有安裝zlib-devel
之前失敗的時候, 是在有zlib而沒zlib-devel的情況下
加上錯誤訊息和zopen, zclose有關
所以我如此推測
安裝好之後
以root權限make install, 因為要在/usr/lib裡面新增檔案
突然在想: 之前我亂嘗試放置的libhighgui.so
是被蓋過還是略過? 不知道 (好像獵人的推理)
所以我mv /usr/lib/libhighgui.so /usr/lib/libhighgui.so.bak
touch /usr/lib/libhighgui.so
原來的lighighgui.so是一個連結檔
而我製作的只是普通空檔案
再次make install之後
蓋過!
因此不用擔心之前的嘗試影響我的make install
rkhunter簡易使用
給未來的裕翔
遲早會被駭的
提早接觸rkhunter吧!
------安裝rkhunter分隔線------
安裝好rkhunter套件後
rkhunter -c
(-c是check的意思)
馬上出現錯誤訊息
Invalid XINETD_CONF_PATH configuration option - non-existent pathname specified: /etc/xinetd.conf
實際去file /etc/xinetd.conf發現的確是不存在
難道被駭的時候被砍掉了?
因為對方希望我使用rkhunter失敗?
(假設駭客超級厲害, 就算沒權限砍他也有辦法!)
後來google一下, 看到其他人也有同樣問題
徹底確定我想太多~
事實上, rpm -ql filesystem | grep xinetd.conf也不會得到任何東西的
(xinet是由filesystem套件所提供)
於是照建議
把/etc/rkhunter.conf的
XINETD_CONF_PATH=/etc/xinetd.conf註解掉
然後再次rkhunter -c就可以執行了
遲早會被駭的
提早接觸rkhunter吧!
------安裝rkhunter分隔線------
安裝好rkhunter套件後
rkhunter -c
(-c是check的意思)
馬上出現錯誤訊息
Invalid XINETD_CONF_PATH configuration option - non-existent pathname specified: /etc/xinetd.conf
實際去file /etc/xinetd.conf發現的確是不存在
難道被駭的時候被砍掉了?
因為對方希望我使用rkhunter失敗?
(假設駭客超級厲害, 就算沒權限砍他也有辦法!)
後來google一下, 看到其他人也有同樣問題
徹底確定我想太多~
事實上, rpm -ql filesystem | grep xinetd.conf也不會得到任何東西的
(xinet是由filesystem套件所提供)
於是照建議
把/etc/rkhunter.conf的
XINETD_CONF_PATH=/etc/xinetd.conf註解掉
然後再次rkhunter -c就可以執行了
被駭心得分享
給未來的裕翔
由於iptables的POLICY是ACCEPT
由於hosts.allow和hosts.deny沒有設定
由於貪圖一時方便, 設一個密碼同帳號的暫時使用者
一切的一切
讓我電腦被駭了
------------回憶分隔線------------
一早開電腦時發現cpu用量異常高
以top查詢後, 看到高cpu用量的process都是使用者guest擁有
這不是我開給小冠冠的帳號嗎!
跑去看/var/log/secure
果不其然!
看到一堆人登入我電腦了! ex:
Mar 16 02:49:29 localhost sshd[20311]: Accepted password for guest from 88.26.195.196 port 58363 ssh2
趕快service network stop
又擔心他們早已對我電腦cron一個網路自動重啟
於是把網路線拔掉!
由於當下無法成功移除guest
只好先重開機再userdel -r guest
又去看了/var/log/messages
rtkit-daemon[1941]: Sucessfully made thread 2454 of process 2454 (/usr/bin/pulseaudio) owned by '500' high priority at nice level -11
的確用top也有看到pulseaudio不尋常的nice值
不過使用rpm -V pulseaudio卻沒異常
可是剛才的訊息裡有出現rtkit
rootkit!?
先yum erase -y pulseaudio再說!
馬上安裝rkhunter, 不過不能用
也來不及google了, 因為跟別人有約再先~
------------回憶結束線------------
過了一陣子
去google處理掉我的rkhunter使用問題
以rkhunter掃了一下
似乎無異狀^^
但還是對早上的rtkit耿耿於懷
rpm -qi rtkit
發現rt是real time縮寫!
也許早上緊張過頭了
不過還是好擔心
會不會其實是兩段式?
讓我自以為應該沒事而鬆懈的同時
有個真正的rootkit正在鑽洞?
不知道, 知道也無可奈何
我還太弱了~
由於iptables的POLICY是ACCEPT
由於hosts.allow和hosts.deny沒有設定
由於貪圖一時方便, 設一個密碼同帳號的暫時使用者
一切的一切
讓我電腦被駭了
------------回憶分隔線------------
一早開電腦時發現cpu用量異常高
以top查詢後, 看到高cpu用量的process都是使用者guest擁有
這不是我開給小冠冠的帳號嗎!
跑去看/var/log/secure
果不其然!
看到一堆人登入我電腦了! ex:
Mar 16 02:49:29 localhost sshd[20311]: Accepted password for guest from 88.26.195.196 port 58363 ssh2
趕快service network stop
又擔心他們早已對我電腦cron一個網路自動重啟
於是把網路線拔掉!
由於當下無法成功移除guest
只好先重開機再userdel -r guest
又去看了/var/log/messages
rtkit-daemon[1941]: Sucessfully made thread 2454 of process 2454 (/usr/bin/pulseaudio) owned by '500' high priority at nice level -11
的確用top也有看到pulseaudio不尋常的nice值
不過使用rpm -V pulseaudio卻沒異常
可是剛才的訊息裡有出現rtkit
rootkit!?
先yum erase -y pulseaudio再說!
馬上安裝rkhunter, 不過不能用
也來不及google了, 因為跟別人有約再先~
------------回憶結束線------------
過了一陣子
去google處理掉我的rkhunter使用問題
以rkhunter掃了一下
似乎無異狀^^
但還是對早上的rtkit耿耿於懷
rpm -qi rtkit
發現rt是real time縮寫!
也許早上緊張過頭了
不過還是好擔心
會不會其實是兩段式?
讓我自以為應該沒事而鬆懈的同時
有個真正的rootkit正在鑽洞?
不知道, 知道也無可奈何
我還太弱了~
實驗室switch
給未來的裕翔
當對事情不知道的時候
就要勇敢自豪的說不知道^^
如同我對實驗室switch一樣~ 不知道!
以下是我對那台switch的幼稚發現:
換孔插之後
如果不先service network restart
會ping不到外面
ps: 郁玲說router比switch安全, 因為有防火牆
當對事情不知道的時候
就要勇敢自豪的說不知道^^
如同我對實驗室switch一樣~ 不知道!
以下是我對那台switch的幼稚發現:
換孔插之後
如果不先service network restart
會ping不到外面
ps: 郁玲說router比switch安全, 因為有防火牆
Monday, March 15, 2010
DNS server反解
給未來的裕翔
DNS server的功能就是把人類認識的文字名稱
轉成電腦認識的數字名稱(IP)
這整個過程稱為正解
因此不難猜到
反解就是從IP去查它們對應的文字名稱
以下列出在/etc/named.conf對反解所需要的設定
zone "229.114.140.in-addr.arpa" IN {
type master;
file "named.140.114.229";
};
以下列出/var/named/named.140.114.229檔案裡面的內容
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ NS ru129.dorm.nthu.
129 PTR ru129.dorm.nthu.
重點依舊是最後那兩行
尤其注意那個PTR
還有就是, 兩行最右邊的host鳥哥建議附點
否則可能被自動append"229.114.140.in-addr.arpa"
像在正解裡一樣
DNS server的功能就是把人類認識的文字名稱
轉成電腦認識的數字名稱(IP)
這整個過程稱為正解
因此不難猜到
反解就是從IP去查它們對應的文字名稱
以下列出在/etc/named.conf對反解所需要的設定
zone "229.114.140.in-addr.arpa" IN {
type master;
file "named.140.114.229";
};
以下列出/var/named/named.140.114.229檔案裡面的內容
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ NS ru129.dorm.nthu.
129 PTR ru129.dorm.nthu.
重點依舊是最後那兩行
尤其注意那個PTR
還有就是, 兩行最右邊的host鳥哥建議附點
否則可能被自動append"229.114.140.in-addr.arpa"
像在正解裡一樣
DNS server的zone檔
給未來的裕翔
為了避免每次架設DNS server
都要擔心DNS server的失敗是不是因為zone寫錯
以下列出成功範例
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ NS ru129
ru129 A 140.114.229.129
由於我沒有要架設slave DNS
所以只有最後兩行重要
最後兩行的完整寫法是
dorm.nthu. NS ru129.dorm.nthu.
ru129.dorm.nthu. A 140.114.229.129
白話意思是:
dorm.nthu.這個domain的name server是ru129.dorm.nthu.
而ru129.dorm.nthu.這個name server的IP是140.114.229.129
為了避免每次架設DNS server
都要擔心DNS server的失敗是不是因為zone寫錯
以下列出成功範例
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ NS ru129
ru129 A 140.114.229.129
由於我沒有要架設slave DNS
所以只有最後兩行重要
最後兩行的完整寫法是
dorm.nthu. NS ru129.dorm.nthu.
ru129.dorm.nthu. A 140.114.229.129
白話意思是:
dorm.nthu.這個domain的name server是ru129.dorm.nthu.
而ru129.dorm.nthu.這個name server的IP是140.114.229.129
已安裝套件詳細資訊
給未來的裕翔
如果只是想知道裝了哪些套件
單純rpm -qa就好
如果想了解每個套件的詳細資訊
rpm -qi `rpm -qa` > installed-packages-info.txt
這樣就可以在installed-packages-info.txt看到每個套件的資訊
不過這樣的話, 所有訊息會都連在一起
以vi開啟後
:%s/Name/\rName/
這樣檔案裡的每個Name之前都會空一行
比較好閱讀
如果只是想知道裝了哪些套件
單純rpm -qa就好
如果想了解每個套件的詳細資訊
rpm -qi `rpm -qa` > installed-packages-info.txt
這樣就可以在installed-packages-info.txt看到每個套件的資訊
不過這樣的話, 所有訊息會都連在一起
以vi開啟後
:%s/Name/\rName/
這樣檔案裡的每個Name之前都會空一行
比較好閱讀
yum遇到未完成的transaction
給未來的裕翔
如果yum安裝到一半時, 不小心按了Ctrl + c
之後再使用yum就會遇到未完成的transaction問題
網路上建議
yum-complete-transaction
又建議這樣更好
yum-complete-transaction --clean-up
平常使用yum都可以看到先安裝, 後刪除的動作
--clean up我猜就是"後刪除"的動作
如果yum安裝到一半時, 不小心按了Ctrl + c
之後再使用yum就會遇到未完成的transaction問題
網路上建議
yum-complete-transaction
又建議這樣更好
yum-complete-transaction --clean-up
平常使用yum都可以看到先安裝, 後刪除的動作
--clean up我猜就是"後刪除"的動作
yum相依性問題
給未來的裕翔
可先看過這篇"yum update問題解決"
在那篇裡
我的方法是啟動updates-testing這個repo
不過最一開始
我的處理方法是置之不理^^
假設在安裝gnucash套件時遇到這樣的問題
我當初是使用--skip-broken
yum -y install gnucash –skip-broken
僅供參考
可先看過這篇"yum update問題解決"
在那篇裡
我的方法是啟動updates-testing這個repo
不過最一開始
我的處理方法是置之不理^^
假設在安裝gnucash套件時遇到這樣的問題
我當初是使用--skip-broken
yum -y install gnucash –skip-broken
僅供參考
GUI桌面常用快捷鍵
給未來的裕翔
Console Terminal的優點之一是什麼都可以靠鍵盤
GUI介面的優點是之一是什麼都很直覺
在GUI介面下靠鍵盤, 真是太偉大的組合了!
以下慢慢累積中
Ctrl + Alt + d: 縮小所有視窗
F11: 全螢幕, 要取消的話就再按一次, 跟Matlab的Step in衝到......
Ctrl + l(L小寫): 清terminal內容
Alt + Esc: 不像Alt + Tab會有預覽圖示, Alt + Esc直接切換
(Pidgin) Ctrl + w: 關掉子對話視窗
Ctrl + w: 在terminal裡面, 這表示往前刪一個word
Ctrl + Alt + s: 把視窗縮到剩標題欄, 可能要先開特效
Ctrl + Shift + n 新增資料夾
Console Terminal的優點之一是什麼都可以靠鍵盤
GUI介面的優點是之一是什麼都很直覺
在GUI介面下靠鍵盤, 真是太偉大的組合了!
以下慢慢累積中
Ctrl + Alt + d: 縮小所有視窗
F11: 全螢幕, 要取消的話就再按一次, 跟Matlab的Step in衝到......
Ctrl + l(L小寫): 清terminal內容
Alt + Esc: 不像Alt + Tab會有預覽圖示, Alt + Esc直接切換
(Pidgin) Ctrl + w: 關掉子對話視窗
Ctrl + w: 在terminal裡面, 這表示往前刪一個word
Ctrl + Alt + s: 把視窗縮到剩標題欄, 可能要先開特效
Ctrl + Shift + n 新增資料夾
SSH為什麼建議把PermitRootLogin設定為no
給未來的裕翔
對於鳥哥這樣建議(他沒說為什麼)
我最近突然有個想法
假紹我ssh server的IP是140.114.229.129
當我在client端以test-user做ssh連線到server端時
ssh 140.114.229.129
會自動變成
ssh test-user@140.114.229.129
然後prompt密碼等我輸入
由於server端根本沒有test-user這位使用者
輸什麼密碼都不會成功
(假設我知道server端uid=501的密碼, client端同uid不同user-name連線也是沒用)
基於這樣的理由, 我們可以知道
想駭入人家帳號, 帳號也是很重要的! 廢話...
重點來了
通常我們不知道任一ssh server的任一帳號
除了root...!
假設現在有個ssh server叫做welcome
ssh root@welcome總是能進到輸密碼畫面
這樣並不是說就可以保證駭入welcome
只是welcome被駭風險馬上大大提高
所以, 鳥哥建議在/etc/ssh/sshd_config設定PermitRootLogin no
也許是因為這樣(或許還有別的考量)
難怪wordpress都會建議新手把admin帳號改成別的
有些資料庫好像也是~
ps: 雖然不會知道任一帳號, 難道任一ssh server就可以知道?
請愛用nmap^^ 對每部電腦scan, 看哪些服務有開啟
雖然可能不是很有效率, 但我暫時也不知道別的方法了
對於鳥哥這樣建議(他沒說為什麼)
我最近突然有個想法
假紹我ssh server的IP是140.114.229.129
當我在client端以test-user做ssh連線到server端時
ssh 140.114.229.129
會自動變成
ssh test-user@140.114.229.129
然後prompt密碼等我輸入
由於server端根本沒有test-user這位使用者
輸什麼密碼都不會成功
(假設我知道server端uid=501的密碼, client端同uid不同user-name連線也是沒用)
基於這樣的理由, 我們可以知道
想駭入人家帳號, 帳號也是很重要的! 廢話...
重點來了
通常我們不知道任一ssh server的任一帳號
除了root...!
假設現在有個ssh server叫做welcome
ssh root@welcome總是能進到輸密碼畫面
這樣並不是說就可以保證駭入welcome
只是welcome被駭風險馬上大大提高
所以, 鳥哥建議在/etc/ssh/sshd_config設定PermitRootLogin no
也許是因為這樣(或許還有別的考量)
難怪wordpress都會建議新手把admin帳號改成別的
有些資料庫好像也是~
ps: 雖然不會知道任一帳號, 難道任一ssh server就可以知道?
請愛用nmap^^ 對每部電腦scan, 看哪些服務有開啟
雖然可能不是很有效率, 但我暫時也不知道別的方法了
iptables指令方式操作
給未來的裕翔
iptables雖然可以用指令操作
原則上還是建議直接編輯, 因為比較直覺
以下僅介紹兩個iptables指令操作
首先, 對iptables進行超簡介
iptables就是防火牆
由3個預設table組成(可自訂)
每個table含2~3個chain(也可自訂)
如何自訂一個chain? ex: CLASS-RULES
iptables -N CLASS-RULES
-N: new一個chain出來
如何把這個chain安插在INPUT(內建chain)之前?
iptables -I INPUT -j CLASS-RULES
-I: insert
-j: jump to
指令做出來的chain, 是不會存回/etc/sysconfig/iptables的
如果想要存回去
service iptables save
iptables雖然可以用指令操作
原則上還是建議直接編輯, 因為比較直覺
以下僅介紹兩個iptables指令操作
首先, 對iptables進行超簡介
iptables就是防火牆
由3個預設table組成(可自訂)
每個table含2~3個chain(也可自訂)
如何自訂一個chain? ex: CLASS-RULES
iptables -N CLASS-RULES
-N: new一個chain出來
如何把這個chain安插在INPUT(內建chain)之前?
iptables -I INPUT -j CLASS-RULES
-I: insert
-j: jump to
指令做出來的chain, 是不會存回/etc/sysconfig/iptables的
如果想要存回去
service iptables save
xscreensaver出問題
給未來的裕翔
如果哪天因為某些原因把perl套件移除
會造成一堆套件因為相依性問題跟著被移除
包括xscreensaver套件
移除歸移除
此時如果離開電腦一陣子
回來時還是會發現電腦被xscreensaver鎖住的
這時候Ctrl + Alt + F2
進入其它tty
重新安裝xscreensaver即可
如果哪天因為某些原因把perl套件移除
會造成一堆套件因為相依性問題跟著被移除
包括xscreensaver套件
移除歸移除
此時如果離開電腦一陣子
回來時還是會發現電腦被xscreensaver鎖住的
這時候Ctrl + Alt + F2
進入其它tty
重新安裝xscreensaver即可
DNS server架設失敗可能原因之一
給未來的裕翔
由於更早之前的成功筆記紀錄不完全
導致我這次又失敗......
現在情況是:
iptables也設定好了
selinux雖然有開啟但預設也沒擋才是
我新增的named.dorm.nthu和named.ee.nthu
也都是依過去成功筆記照打的
此時還是失敗的可能原因
終於在我檢視/var/log/messages時發現了(早該檢視了...)
named.dorm.nthu和named.ee.nthu這兩個檔案
owner.group麻煩從原來的root.root改成root.named
chown root.named named*
當初就是漏記這步驟才會造成二次失敗
由於更早之前的成功筆記紀錄不完全
導致我這次又失敗......
現在情況是:
iptables也設定好了
selinux雖然有開啟但預設也沒擋才是
我新增的named.dorm.nthu和named.ee.nthu
也都是依過去成功筆記照打的
此時還是失敗的可能原因
終於在我檢視/var/log/messages時發現了(早該檢視了...)
named.dorm.nthu和named.ee.nthu這兩個檔案
owner.group麻煩從原來的root.root改成root.named
chown root.named named*
當初就是漏記這步驟才會造成二次失敗
在Linux以下解RAR壓縮檔
給未來的裕翔
由於RAR似乎是商業軟體
所以Linux底下預設是不安裝的
使用yum list available | grep rar
可以發現, 就算想安裝也沒什麼可以裝的
經過Google之後, 找到
http://www.cyberciti.biz/faq/open-rar-file-or-extract-rar-files-under-linux-or-unix/
裡面提到, 可從底下URL下載可以解RAR的工具
http://www.rarlab.com/download.htm
不過網站裡寫此工具是Trial, 不知道可以用多久
(萬一用不久, 別妥協! 使用wine + win版的7zip吧!)
我當下是下載RAR 3.92 for Linux
解壓縮後, 把rar和unrar這兩個binary放到/bin理去
之後想對某RAR解壓縮的話, ex: abc.rar
rar x abc.rar
由於RAR似乎是商業軟體
所以Linux底下預設是不安裝的
使用yum list available | grep rar
可以發現, 就算想安裝也沒什麼可以裝的
經過Google之後, 找到
http://www.cyberciti.biz/faq/open-rar-file-or-extract-rar-files-under-linux-or-unix/
裡面提到, 可從底下URL下載可以解RAR的工具
http://www.rarlab.com/download.htm
不過網站裡寫此工具是Trial, 不知道可以用多久
(萬一用不久, 別妥協! 使用wine + win版的7zip吧!)
我當下是下載RAR 3.92 for Linux
解壓縮後, 把rar和unrar這兩個binary放到/bin理去
之後想對某RAR解壓縮的話, ex: abc.rar
rar x abc.rar
Sunday, March 14, 2010
Matlab的regexp
給未來的裕翔
剛在Matlab裡看到一個regexp的用法
對這樣的字串 變數
options.tvregparam='TV regularization parameter: 3.000000'
做regexp(options.tvregparam,'\d')
會回傳所有是數字的index(3和0中間的小數點的位置則不回傳)
30 32 33 34 35 36 37
options.tvregparam(regexp(options.tvregparam ,'\d'))
回傳由上面位置所組成的字串
3000000
最後再一個str2num就可以把字串3000000變數字3000000了
剛在Matlab裡看到一個regexp的用法
對這樣的字串 變數
options.tvregparam='TV regularization parameter: 3.000000'
做regexp(options.tvregparam,'\d')
會回傳所有是數字的index(3和0中間的小數點的位置則不回傳)
30 32 33 34 35 36 37
options.tvregparam(regexp(options.tvregparam ,'\d'))
回傳由上面位置所組成的字串
3000000
最後再一個str2num就可以把字串3000000變數字3000000了
讓sudo開啟的vi有顏色
給未來的裕翔
直接sudo vim吧
補充1:
分別以root和bob身份做alias
可以發現, 當root使用vi, 就真的是vi
不像bob使用vi時, 會改成是呼叫vim
補充2:
以sudo vim修改文字檔時
它依舊是讀~bob/.vimrc為初始設定
直接sudo vim吧
補充1:
分別以root和bob身份做alias
可以發現, 當root使用vi, 就真的是vi
不像bob使用vi時, 會改成是呼叫vim
補充2:
以sudo vim修改文字檔時
它依舊是讀~bob/.vimrc為初始設定
Saturday, March 13, 2010
LVM擴大
給未來的裕翔
當可以用的volume group(vg)用完時
架設我硬碟是/dev/sdb且三個primary已用完
先切割出extend
parted /dev/sdb
mkpart extend 23.2G 640.1G
(23.2G是接上一個partition的, 可從parted裡面的print查看)
(640.1G是我在shell底下以fsidk -l看的/dev/sdb上限)
接著切一塊logical, mkpart logical 23.2G 43.2G
離開parted後
照理說不用重開機, 不過它說了一串理由
叫我重開機@@
重開機後, 對剛切出來的logical做physical volume(pv)
pvcreate /dev/sdb5
把它拿來擴充原有的vg0
vgextend vg0 /dev/sdb5
再來就可以把vg0拿來擴充我用完的家目錄空間囉
lvextend -L +2G /dev/vg0/lv_home
resize2fs /dev/vg0/lv_home
當可以用的volume group(vg)用完時
架設我硬碟是/dev/sdb且三個primary已用完
先切割出extend
parted /dev/sdb
mkpart extend 23.2G 640.1G
(23.2G是接上一個partition的, 可從parted裡面的print查看)
(640.1G是我在shell底下以fsidk -l看的/dev/sdb上限)
接著切一塊logical, mkpart logical 23.2G 43.2G
離開parted後
照理說不用重開機, 不過它說了一串理由
叫我重開機@@
重開機後, 對剛切出來的logical做physical volume(pv)
pvcreate /dev/sdb5
把它拿來擴充原有的vg0
vgextend vg0 /dev/sdb5
再來就可以把vg0拿來擴充我用完的家目錄空間囉
lvextend -L +2G /dev/vg0/lv_home
resize2fs /dev/vg0/lv_home
ibus如果開機crash要如何重新啟動
給未來的裕翔
如果開機時ibus發生crash該如何解決?
登出登入? 我試過了, 似乎無效
重開機? 這樣不就一點長進也沒有嗎!?
我的靈魂不允許呀~
處理方法:
首先按左下角的f圖示
點Preferences
點Input Method
點Input Method Preferences ...
它就會說像是
"ibus已停止, 要不要重新啟動?"
以上~
如果開機時ibus發生crash該如何解決?
登出登入? 我試過了, 似乎無效
重開機? 這樣不就一點長進也沒有嗎!?
我的靈魂不允許呀~
處理方法:
首先按左下角的f圖示
點Preferences
點Input Method
點Input Method Preferences ...
它就會說像是
"ibus已停止, 要不要重新啟動?"
以上~
MCALab安裝到可以使用
給未來的裕翔
MCALab toolbox是一套拿來做image decomposition的工具
不過它內附的mexglx檔我都無法使用
因此另外各自下載了CurveLab和RWT的toolbox
以下(憑印象)講述如何重製mexglx
RWT比較簡單
下載經過解壓縮的資料夾名稱為rwt
開啟Matlab切換到rwt資料夾裡
執行compile即可, done!
CurveLab比較麻煩
下載經過解壓縮的資料夾名稱為CurveLab-2.1.2
首先, 安裝fftw2-devel的package
以terminal進入CurveLab-2.1.2後
make &> log.txt
去看log.txt訊息
可以看出似乎有些檔案需要添加#include <cstring>
像是CurveLab-2.1.2/fdct_wrapping_cpp/src底下的offmat.hpp和offvec.hpp
由於它們都有#include "fdct_wrapping_inc.hpp"
於是我決定把#include <cstring>添加加在fdct_wrapping_inc.hpp裡
接著執行make &> log2.txt
可以發現CurveLab-2.1.2/fdct_usfft_cpp/src也有類似問題
同上面的分析, 最後把#include <cstring>加在fdct_usfft_inc.hpp裡
以下都差不多, 所以都只列關鍵步驟
make &> log3.txt
CurveLab-2.1.2/fdct3d/src有問題
把#include <cstring>加在commoninc.hpp裡
make &> log4.txt
CurveLab-2.1.2/fdct3d_outcore/src有問題
把#include <cstring>加在commoninc.hpp裡
到此, 還剩兩個步驟
修改CurveLab-2.1.2/makefile.opt裡面的三個地方如下
FFTW_DIR = /usr/
INCLUDES = -I/usr/include
LIBS = -L/usr/lib -lfftw
由於分散在子資料夾的makefile都被寫死, 都要去複製
${FFTW_DIR}/fftw/.libs/libfftw.a
所以乾脆做個連結檔比較省事
mkdir -p /usr/fftw/.libs
(-p是如果目標目錄的上層目錄不存在, 會自動建立)
ln -s /usr/lib/libfftw.a /usr/fftw/.libs/libfftw.a
最後最後, make matlab, 搞定^^
接下來就是把MCALab自帶的mexglx全部取代掉
然後就可以順利執行裡面的script了
MCALab toolbox是一套拿來做image decomposition的工具
不過它內附的mexglx檔我都無法使用
因此另外各自下載了CurveLab和RWT的toolbox
以下(憑印象)講述如何重製mexglx
RWT比較簡單
下載經過解壓縮的資料夾名稱為rwt
開啟Matlab切換到rwt資料夾裡
執行compile即可, done!
CurveLab比較麻煩
下載經過解壓縮的資料夾名稱為CurveLab-2.1.2
首先, 安裝fftw2-devel的package
以terminal進入CurveLab-2.1.2後
make &> log.txt
去看log.txt訊息
可以看出似乎有些檔案需要添加#include <cstring>
像是CurveLab-2.1.2/fdct_wrapping_cpp/src底下的offmat.hpp和offvec.hpp
由於它們都有#include "fdct_wrapping_inc.hpp"
於是我決定把#include <cstring>添加加在fdct_wrapping_inc.hpp裡
接著執行make &> log2.txt
可以發現CurveLab-2.1.2/fdct_usfft_cpp/src也有類似問題
同上面的分析, 最後把#include <cstring>加在fdct_usfft_inc.hpp裡
以下都差不多, 所以都只列關鍵步驟
make &> log3.txt
CurveLab-2.1.2/fdct3d/src有問題
把#include <cstring>加在commoninc.hpp裡
make &> log4.txt
CurveLab-2.1.2/fdct3d_outcore/src有問題
把#include <cstring>加在commoninc.hpp裡
到此, 還剩兩個步驟
修改CurveLab-2.1.2/makefile.opt裡面的三個地方如下
FFTW_DIR = /usr/
INCLUDES = -I/usr/include
LIBS = -L/usr/lib -lfftw
由於分散在子資料夾的makefile都被寫死, 都要去複製
${FFTW_DIR}/fftw/.libs/libfftw.a
所以乾脆做個連結檔比較省事
mkdir -p /usr/fftw/.libs
(-p是如果目標目錄的上層目錄不存在, 會自動建立)
ln -s /usr/lib/libfftw.a /usr/fftw/.libs/libfftw.a
最後最後, make matlab, 搞定^^
接下來就是把MCALab自帶的mexglx全部取代掉
然後就可以順利執行裡面的script了
Friday, March 12, 2010
yum update問題解決
給未來的裕翔
如果在yum update時遇到類似底下的錯誤訊息
(每行太長的會以...截掉)
(上略)
--> Finished Dependency Resolution
nss-3.12.6-1.2.fc12.i686 from updates has depsolving problems
--> Missing Dependency: nspr >= 4.8.4 is needed by package nss...
nss-3.12.6-1.2.fc12.i686 from updates has depsolving problems
--> Missing Dependency: nss-util = 3.12.6 is needed by package nss...
Error: Missing Dependency: nspr >= 4.8.4 is needed by package nss...
Error: Missing Dependency: nss-util = 3.12.6 is needed by package nss...
You could try using --skip-broken to work around the problem
You could try running: package-cleanup --problems
package-cleanup --dupes
rpm -Va --nofiles --nodigest
請別傻傻的把有問題的package移除再安裝
因為dependency的關係
往往這樣做會一次移除幾十個甚至幾百個package
而在移除的過程, 可能就會陸續出現一些問題了
加上, 事後要如何記住那些package得重新安裝?
所以, 請照以下步驟, 有智慧的處理此問題
上面錯誤訊息說有問題的是nspr和nss-util套件
網路上強者提供此方法:
yum update nspr --enablerepo=u*g
yum update nss-util --enablerepo=u*g
yum update
--enablerepo是暫時啟動/etc/yum.repos.d/*.repo裡
被設定enabled=0的repository
u*g是updates-testing, 直接打updates-testing也是可以的
完整意思就是
暫時啟動原本enabled=0的updates-testing
使用它來更新, done!
要這樣做的原因
似乎是有些被需要的套件還在測試
所以尚未放到一般的repository? 我猜~
ps: 這次處理問題的過程中
發現package-cleanup --dupes這指令不錯
可以把系統上重複安裝的package移除掉舊的那個
這樣可以節省空間^^
如果在yum update時遇到類似底下的錯誤訊息
(每行太長的會以...截掉)
(上略)
--> Finished Dependency Resolution
nss-3.12.6-1.2.fc12.i686 from updates has depsolving problems
--> Missing Dependency: nspr >= 4.8.4 is needed by package nss...
nss-3.12.6-1.2.fc12.i686 from updates has depsolving problems
--> Missing Dependency: nss-util = 3.12.6 is needed by package nss...
Error: Missing Dependency: nspr >= 4.8.4 is needed by package nss...
Error: Missing Dependency: nss-util = 3.12.6 is needed by package nss...
You could try using --skip-broken to work around the problem
You could try running: package-cleanup --problems
package-cleanup --dupes
rpm -Va --nofiles --nodigest
請別傻傻的把有問題的package移除再安裝
因為dependency的關係
往往這樣做會一次移除幾十個甚至幾百個package
而在移除的過程, 可能就會陸續出現一些問題了
加上, 事後要如何記住那些package得重新安裝?
所以, 請照以下步驟, 有智慧的處理此問題
上面錯誤訊息說有問題的是nspr和nss-util套件
網路上強者提供此方法:
yum update nspr --enablerepo=u*g
yum update nss-util --enablerepo=u*g
yum update
--enablerepo是暫時啟動/etc/yum.repos.d/*.repo裡
被設定enabled=0的repository
u*g是updates-testing, 直接打updates-testing也是可以的
完整意思就是
暫時啟動原本enabled=0的updates-testing
使用它來更新, done!
要這樣做的原因
似乎是有些被需要的套件還在測試
所以尚未放到一般的repository? 我猜~
ps: 這次處理問題的過程中
發現package-cleanup --dupes這指令不錯
可以把系統上重複安裝的package移除掉舊的那個
這樣可以節省空間^^
Thursday, March 11, 2010
cache-only DNS server設定
給未來的裕翔
如果想要架設cache-only DNS server
只需要修改/etc/named.conf就好
假設server端IP是140.114.229.129, client端IP是140.114.28.187
在option欄位裡添加server IP和client IP和還有forwarders
並且註解掉dnssec-lookaside . trust-anchor dlv.isc.org.;
以下列出/etc/named.conf最小修改內容
options {
};
關於大括弧裡的格式(以ß代表空格)
listen-on port 53 {ß127.0.0.1;ß140.114.229.129;ß};
listen-on port 53 {ß127.0.0.1;140.114.229.129;ß};
listen-on port 53 {127.0.0.1;ß140.114.229.129;};
listen-on port 53 {127.0.0.1;140.114.229.129;};
都是可以的~
server端記得在iptables添加兩行
-A INPUT -p tcp --dport 53 -j ACCEPT
-A INPUT -p udp --dport 53 -j ACCEPT
client端在測試時
記得要把DNS改成140.114.229.129
建議改在/etc/sysconfig/network-scripts/ifcfg-eth0
然後service NetworkManager start
如果改在/etc/resolv.conf
下次網路重開就會被蓋掉了
如果想要架設cache-only DNS server
只需要修改/etc/named.conf就好
假設server端IP是140.114.229.129, client端IP是140.114.28.187
在option欄位裡添加server IP和client IP和還有forwarders
並且註解掉dnssec-lookaside . trust-anchor dlv.isc.org.;
以下列出/etc/named.conf最小修改內容
options {
listen-on port 53 { 127.0.0.1; 140.114.229.129; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { localhost; 140.114.28.187; };
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
//dnssec-lookaside . trust-anchor dlv.isc.org.;
forwarders { 168.95.1.1; };
};
關於大括弧裡的格式(以ß代表空格)
listen-on port 53 {ß127.0.0.1;ß140.114.229.129;ß};
listen-on port 53 {ß127.0.0.1;140.114.229.129;ß};
listen-on port 53 {127.0.0.1;ß140.114.229.129;};
listen-on port 53 {127.0.0.1;140.114.229.129;};
都是可以的~
server端記得在iptables添加兩行
-A INPUT -p tcp --dport 53 -j ACCEPT
-A INPUT -p udp --dport 53 -j ACCEPT
client端在測試時
記得要把DNS改成140.114.229.129
建議改在/etc/sysconfig/network-scripts/ifcfg-eth0
然後service NetworkManager start
如果改在/etc/resolv.conf
下次網路重開就會被蓋掉了
crontab讓網路自動restart
給未來的裕翔
算一在練習的時候不小心把遠端電腦網路關掉
不可能每次都特地跑到遠端去重開
因此, 我決定使用crontab
在不改變/etc/sysconfig/network-scripts/ifcfg-eth0的前提下
執行service network restart原則上都會讓網路恢復暢通
現在我希望, 至少每30分鐘執行一次這動作
crontab -e
-e是edit
進入編輯畫面後, 輸入下行
*/30 * * * * service network restart
存檔離開
這樣會失敗^^
請改成
*/30 * * * * /sbin/service network restart
還好我有實際測試
不然, 說不定差點又要特地來實驗室重開一次網路......
算一在練習的時候不小心把遠端電腦網路關掉
不可能每次都特地跑到遠端去重開
因此, 我決定使用crontab
在不改變/etc/sysconfig/network-scripts/ifcfg-eth0的前提下
執行service network restart原則上都會讓網路恢復暢通
現在我希望, 至少每30分鐘執行一次這動作
crontab -e
-e是edit
進入編輯畫面後, 輸入下行
*/30 * * * * service network restart
存檔離開
這樣會失敗^^
請改成
*/30 * * * * /sbin/service network restart
還好我有實際測試
不然, 說不定差點又要特地來實驗室重開一次網路......
NetworkManager實驗
給未來的裕翔
有些無關緊要的小事
做一次就好
例如這次的NetworkManager實驗^^
當我修改/etc/sysconfig/network-scripts/ifcfg-eth0的內容時
以DNS1的值為例
改完後並不會馬上影響/etc/resolv.conf
此時可以選擇
看是要service network restart
或是要service NetworkManager restart
都可以成功更新/etc/resolv.conf的內容
在網路通的情況下, 建議使用上述第二個(NetworkManager)
因為速度較快, 第一個(network)會有點卡卡
不過萬一網路沒通
那就只能第一個了
網路沒通的情況下
無論怎樣service NetworkManager restart都沒有用
以上
ps: 如果把service network restart拆成
service network stop
service network start
不知為啥會失敗, 不會更新/etc/resolv.conf
但是service NetworkManager restart拆開則依然有效
有些無關緊要的小事
做一次就好
例如這次的NetworkManager實驗^^
當我修改/etc/sysconfig/network-scripts/ifcfg-eth0的內容時
以DNS1的值為例
改完後並不會馬上影響/etc/resolv.conf
此時可以選擇
看是要service network restart
或是要service NetworkManager restart
都可以成功更新/etc/resolv.conf的內容
在網路通的情況下, 建議使用上述第二個(NetworkManager)
因為速度較快, 第一個(network)會有點卡卡
不過萬一網路沒通
那就只能第一個了
網路沒通的情況下
無論怎樣service NetworkManager restart都沒有用
以上
ps: 如果把service network restart拆成
service network stop
service network start
不知為啥會失敗, 不會更新/etc/resolv.conf
但是service NetworkManager restart拆開則依然有效
DNS server的chroot設定與觀察
給未來的裕翔
以下是我對DNS server的chroot的小小觀察
首先, 安裝套件bind-chroot
在/etc/sysconfig/named最底下
添加ROOTDIR=/var/named/chroot
到此, 環境已設定好
接著, 每當named的服務開啟時
它都會把/etc/named.conf複製一份成/var/named/chroot/etc/named.conf
我觀察發現
雖然這兩個檔案彼此不是對方的連結檔
但是, 當對其中一個作修改時
另一個會馬上同步
以上
以下是我對DNS server的chroot的小小觀察
首先, 安裝套件bind-chroot
在/etc/sysconfig/named最底下
添加ROOTDIR=/var/named/chroot
到此, 環境已設定好
接著, 每當named的服務開啟時
它都會把/etc/named.conf複製一份成/var/named/chroot/etc/named.conf
我觀察發現
雖然這兩個檔案彼此不是對方的連結檔
但是, 當對其中一個作修改時
另一個會馬上同步
以上
httpd多道防線之一
給未來的裕翔
如果想要開啟httpd服務
讓每個使用者都可以在自己家目錄底下架網頁
除了要把/etc/httpd/conf/httpd.conf裡的<IfModule mod_userdir.c>之內的
UserDir disabled註解, UserDir public_html反註解
還要記得設定SELinux
當然不是把它設定成permissive......
而是利用getsebool -a | grep http
找出最可能的設定
也就是httpd_enable_homedirs
執行 setsebool -P httpd_enable_homedirs 1 就可以了
-P, persistant, 經過開機也有效
當然, iptables, file permission, context, service都假設是對或開啟的^^
如果想要開啟httpd服務
讓每個使用者都可以在自己家目錄底下架網頁
除了要把/etc/httpd/conf/httpd.conf裡的<IfModule mod_userdir.c>之內的
UserDir disabled註解, UserDir public_html反註解
還要記得設定SELinux
當然不是把它設定成permissive......
而是利用getsebool -a | grep http
找出最可能的設定
也就是httpd_enable_homedirs
執行 setsebool -P httpd_enable_homedirs 1 就可以了
-P, persistant, 經過開機也有效
當然, iptables, file permission, context, service都假設是對或開啟的^^
alias
給未來的裕翔
強烈建議把以下alias列入你的~/.bashrc
alias df='df -h'
alias grep='grep -n --color=auto'
alias ll='ls -lh'
df的-h是把有關partition大小的單位以人類好懂的MB, GB表示
grep的-n是把找到關鍵字的那行額外標出行號
grep的--color=auto是把找到的關鍵字用特別顏色標出來
ls的-h是把有關檔案大小的單位以人類好懂的MB, GB表示
note 1: 不能alias ll='ll -h', 會失敗
note 2: 改完如果希望馬上生效不需要重開機...... 只需source ~/.bashrc即可
強烈建議把以下alias列入你的~/.bashrc
alias df='df -h'
alias grep='grep -n --color=auto'
alias ll='ls -lh'
df的-h是把有關partition大小的單位以人類好懂的MB, GB表示
grep的-n是把找到關鍵字的那行額外標出行號
grep的--color=auto是把找到的關鍵字用特別顏色標出來
ls的-h是把有關檔案大小的單位以人類好懂的MB, GB表示
note 1: 不能alias ll='ll -h', 會失敗
note 2: 改完如果希望馬上生效不需要重開機...... 只需source ~/.bashrc即可
Wednesday, March 10, 2010
FTP下載模式
給未來的裕翔
我不確定FTP有幾個下載模式
不過至少有ascii和binary兩個模式
這是因為換行符號在不同作業系統下定義不相同
在LInux底下, 換行是LF(Line Feed, \r)
而在Windows底下, 換行是LF(Line Feed, \r)加CR(Carriage Return, \n)
如果在FTP client端以ascii模式下載檔案
則會自動作轉換, \r\n -> \r或是\r -> \r\n
如果不希望更動到原來的檔案
則可使用binary模式下載
我不確定FTP有幾個下載模式
不過至少有ascii和binary兩個模式
這是因為換行符號在不同作業系統下定義不相同
在LInux底下, 換行是LF(Line Feed, \r)
而在Windows底下, 換行是LF(Line Feed, \r)加CR(Carriage Return, \n)
如果在FTP client端以ascii模式下載檔案
則會自動作轉換, \r\n -> \r或是\r -> \r\n
如果不希望更動到原來的檔案
則可使用binary模式下載
Subscribe to:
Posts (Atom)