Wednesday, March 31, 2010

vsftpd架設

給未來的裕翔

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的效力依舊是最大

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)指定用

第二部份因為會用到指令, 所以要 \= 開頭

指令和字串以 . 相接

字串都要 " " 括起來

Tuesday, March 30, 2010

sudo vi

給未來的裕翔

當以一般使用者身份編輯文字檔時

都會有語法的顏色標記在

因為vi被自動aliasvim去了, 可輸入alias指令查看

(我還不知道是哪個檔案設定這件事情的)

以root身份使用vi編輯文字檔卻不會有語法的顏色標記

因為它沒有被設定, 可輸入alias指令確認

此時如果去編輯~root/.bashrc

alias vi='vim'

之後sudo vi文字檔時

依舊 不會有顏色標記!

因為我只是以root身份編輯文件, ~root/.bashrc的設定並沒有被載入

所以, 必要時請安分的sudo vim

Matlab的存圖

給未來的裕翔

在Matlab裡面如果要存圖

一般都是用imwrite(im, filename)

如果是plotimagesc出來的

可用saveas(1, filename)saveas(gcf, filename)

1是Figure 1的意思

OpenOffice & 圖檔

給未來的裕翔

基於方便

對於想在writerimpress裡面放置的圖檔

當然是給它用拖曳~

要注意的是

拖到impress的圖檔

如果之後刪除或位置變更

impress重啟後, 圖檔會顯示不出來

所以千萬記住, 把圖拖曳到impress裡面後

趕快對圖按右鍵 => Convert => To Metafile

就樣就跟圖檔來源切割關係了^^

writer則是一開始就沒影響

ps: 想從lxterminalwriter, 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

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

真是有點小敬佩自己^^

shell script: 如何快速複製幾個我要的binary到.

給未來的裕翔


如果我要複製到 . 的是,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`底下

前提當然是這些目錄都在啦~


如何測試server有否開啟某個port

給未來的裕翔

nmap可以為一台電腦作完整的port scan

那如何只測某一個port呢?

ex: 我想知道140.114.229.129的port 80有沒開

telnet 140.114.229.129 80

搞定!

Matlab的next & step in注意

給未來的裕翔

關於Matlab除錯的nextstep in

我想應該都知道是什麼了

不過有個要注意的是

對一個函數按next

有種情況還是會step in

造成這發生的原因是:

斷點設在那函式裡!

Sunday, March 28, 2010

grep的or功能

給未來的裕翔

如果要對某個檔案搜尋某個字

ex: 對/etc/passwd搜尋bob

grep bob /etc/passwd

那如果要對/etc/passwd搜尋bobroot呢?

因為屬於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

此時如果在某個functionstep in

matlab editor開啟bbb.m

這時如果自己手癢又開啟ccc.m

F10會到哪?

bbb.m繼續^^

LInux下的Matlab突然不能輸入文字

給未來的裕翔

如果遇到這樣狀況

先把右下角的輸入法按右鍵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的sub2ind & ind2sub

給未來的裕翔

matllab裡面提供兩個函式方便做indexsubscript的轉換

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適用

Wednesday, March 24, 2010

du看每個資料夾大小

給未來的裕翔

如同ll -h可以看每個檔案大小

du -sh也可以看到每個資料夾內容所佔大小

-s是summarize

-h是human readable

vim: 把空格以後的中文去掉

給未來的裕翔

對以下的內容

我想把中文解釋去掉

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 重複最後一個指令

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

耶^^

gdb的reverse功能

給未來的裕翔

如果想要在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把編碼的數字換成字元

搞定^^

automount導致無法開機

給未來的裕翔

如果/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

可以用咧!

其它懷疑我也不用測了......

第一個就過了......

以上, 純為學術研究^^

快速知道哪些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

抓到啦 嘿嘿嘿

Sunday, March 21, 2010

nfs server架設問題&處理

給未來的裕翔

(以下假設rpcbind已設定好, 關於rpcbind設定可參考開放rpcbind的服務)


想在140.114.229.129nfs server讓遠端140.114.28.187使用

必須先處理iptables的問題

為了讓client可以使用

除了要開rpcbind的port 111

還必須開mountd的port 892nfs的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了!!!

被分享的/tmpserver端原本是被設定成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

iptables註解

給未來的裕翔

如果像要對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 &

成功^^

不過因為一口氣裝太多字型

我現在還不確定哪個是關鍵字型

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, 耶~!

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.solibcxcore.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.0vi開啟隨便新增一行

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的

如果還是不行

希望你搞定後跟我分享^^

Friday, March 19, 2010

configure & make小小筆記

給未來的裕翔

安裝OpenCV-2.0.0

./configuremake

然後就會失敗, 說什麼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/includestring.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怎辦?

~/.bashrcalias 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
(定義可能是typedefdefine, 所以我在最後加grep def)

注意: 上例如果沒有前面的\.

那所有檔案或路徑還有h的都會被找出來

因為p*是可不存在的

Thursday, March 18, 2010

service nfs start失敗

給未來的裕翔

ldd `which rpcbind` | grep libwrap是有output的

表示它可以透過hosts.allowhosts.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.sobinary

都可以用/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: 多檔案編輯和多視窗編輯不一樣

多視窗編輯才可以同時看到每個檔案

多檔案編輯需要切換才能看到另一檔案

Wednesday, March 17, 2010

gcc的include和library小筆記

ccpp

只要開頭的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裡, 但好像變慢了?

Octave直接執行script

給未來的裕翔

如同bash可以寫shell script

octave其實也可以寫script
(m file應該不能直接這樣用, 上面要加一行)


如同shell script在最上面有個#!/bin/bash

octave在最上面的是#!/usr/bin/octave

之後一切都如同shell script

假設我的octave scripttest.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*
編譯所有的ccppobject檔, 它們需要的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前有先把原本的資料夾移除

然後對OpenCVtarball解壓縮

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就可以執行了

被駭心得分享

給未來的裕翔

由於iptablesPOLICYACCEPT

由於hosts.allowhosts.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: 郁玲說routerswitch安全, 因為有防火牆

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的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

LVM的pvcreate

給未來的裕翔

當我對某個partitionpvcreate

上面原來的資料應該是可以視為報銷了……

已安裝套件詳細資訊

給未來的裕翔

如果只是想知道裝了哪些套件

單純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我猜就是"後刪除"的動作

以rpm安裝flash-plugin失敗

給未來的裕翔

請先確定自己是root權限……

yum相依性問題

給未來的裕翔

可先看過這篇"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      新增資料夾

SSH為什麼建議把PermitRootLogin設定為no

給未來的裕翔

對於鳥哥這樣建議(他沒說為什麼)

我最近突然有個想法

假紹我ssh server的IP是140.114.229.129

當我在client端以test-userssh連線到server端時
ssh 140.114.229.129


會自動變成

ssh test-user@140.114.229.129

然後prompt密碼等我輸入

由於server端根本沒有test-user這位使用者

輸什麼密碼都不會成功

(假設我知道serveruid=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









xscreensaver出問題

給未來的裕翔

如果哪天因為某些原因把perl套件移除

會造成一堆套件因為相依性問題跟著被移除

包括xscreensaver套件

移除歸移除

此時如果離開電腦一陣子

回來時還是會發現電腦被xscreensaver鎖住的

這時候Ctrl + Alt + F2

進入其它tty

重新安裝xscreensaver即可

DNS server架設失敗可能原因之一

給未來的裕翔

由於更早之前的成功筆記紀錄不完全

導致我這次又失敗......

現在情況是:


iptables也設定好了

selinux雖然有開啟但預設也沒擋才

我新增的named.dorm.nthunamed.ee.nthu

也都是依過去成功筆記照打的

此時還是失敗的可能原因

終於在我檢視/var/log/messages時發現了(早該檢視了...)

named.dorm.nthunamed.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

解壓縮後, 把rarunrar這兩個binary放到/bin理去

之後想對某RAR解壓縮的話, ex: abc.rar


rar x abc.rar

Sunday, March 14, 2010

開機後GUI桌面有問題

給未來的裕翔

請用df檢查一下/home的空間是不是用完了

不是的話我也沒輙了

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


讓sudo開啟的vi有顏色

給未來的裕翔

直接sudo vim

補充1:

分別以rootbob身份做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

照理說不用重開機, 不過它說了一串理由

叫我重開機@@

重開機後, 對剛切出來的logicalphysical 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已停止, 要不要重新啟動?"

以上~

MCALab安裝到可以使用

給未來的裕翔

MCALab toolbox是一套拿來做image decomposition的工具

不過它內附的mexglx檔我都無法使用

因此另外各自下載了CurveLabRWTtoolbox

以下(憑印象)講述如何重製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.hppoffvec.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重新安裝?

所以, 請照以下步驟, 有智慧的處理此問題

上面錯誤訊息說有問題的是nsprnss-util套件

網路上強者提供此方法:


yum update nspr --enablerepo=u*g
yum update nss-util --enablerepo=u*g
yum update



--enablerepo是暫時啟動/etc/yum.repos.d/*.repo

被設定enabled=0repository


u*gupdates-testing, 直接打updates-testing也是可以的

完整意思就是

暫時啟動原本enabled=0updates-testing

使用它來更新, done!


要這樣做的原因

似乎是有些被需要的套件還在測試

所以尚未放到一般的repository? 我猜~


ps: 這次處理問題的過程中

發現package-cleanup --dupes這指令不錯

可以把系統上重複安裝的package移除掉舊的那個

這樣可以節省空間^^

Thursday, March 11, 2010

cache-only DNS server設定

給未來的裕翔

如果想要架設cache-only DNS server

只需要修改/etc/named.conf就好

假設serverIP140.114.229.129, clientIP140.114.28.187

option欄位裡添加server IPclient 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

還好我有實際測試

不然, 說不定差點又要特地來實驗室重開一次網路......



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拆開則依然有效

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

我觀察發現

雖然這兩個檔案彼此不是對方的連結檔


但是, 當對其中一個作修改時

另一個會馬上同步

以上






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都假設是對或開啟的^^






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即可

Wednesday, March 10, 2010

FTP下載模式

給未來的裕翔

我不確定FTP有幾個下載模式

不過至少有asciibinary兩個模式

這是因為換行符號在不同作業系統下定義不相同

LInux底下, 換行是LF(Line Feed, \r)

而在Windows底下, 換行是LF(Line Feed, \r)CR(Carriage Return, \n)

如果在FTP client端以ascii模式下載檔案

則會自動作轉換, \r\n -> \r或是\r -> \r\n

如果不希望更動到原來的檔案

則可使用binary模式下載