2010年6月23日 星期三

網芳開啟不能

偶爾會有網路芳鄰不能開啟的問題, 明明昨天可以, 今天就不行, 明明剛剛可以, 現在就不行, 重開機後也不行, 總是跳出要輸入密碼的視窗, 明明輸入是對的卻連不進去, 實在是有夠奇怪的


谷歌了一下也沒找到答案, 我還找到了微軟出的 tool, 可以顯示 kerberos tickets, 也沒甚麼幫助


結果竟然是對時的問題, 也就是與 windows domain controller 的時差不能夠超過 5 分鐘; 奇怪了windows domain 的環境不是都自動對時的嗎? 怪我勒?

對了一下時間還真的連進去了, 真是見鬼了; 還說甚麼"不明的使用者名稱或錯誤密碼", x軟的錯誤訊息盡然也是錯的, 搞屁啊! 那如果日期不一樣呢? 又見鬼了, 還是連的進去. 那如果"時"不一樣, 但是"分"一樣呢? 又見鬼了, 還是連的進去. 顯然它的判斷標準是以"分"為主, 奇怪了那樣的標準又有何意義? 真的會被x軟搞死, 今天看到太多鬼了, 該去收驚了.

2010年6月22日 星期二

openwebmail 安裝記

openwebmail 的安裝還真是簡單, perl 裝好後, 執行 /var/www/cgi-bin/openwebmail/openwebmail-tool.pl --init 就成了, 但我麼看到奇怪的錯誤訊息


阿哩, 是怎樣, 谷歌了老半天有人說是 perl 版本不對, 趕緊看一下版本, perl --version, 是 5.10.0, 難道是版本太新?

再來看一下 apache 2 的 log, /var/log/apache2/error.log, 會有這樣的錯誤訊息

YOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET!
FIX YOUR KERNEL, OR PUT A C WRAPPER AROUND THIS SCRIPT!
Premature end of script headers: openwebmail.pl

天啊, 這甚麼? 這跟 kernel 有甚麼關係? 有人說要重編 perl, 不會吧, 哪要這麼麻煩, 我以前有裝過 openwebmail, 不用啊. 再仔細檢視一下安裝過程, 都沒問題啊? 但其中有一個變更檔案權限的的步驟 chmod 4555 /usr/bin/suidperl , 為什麼會有個 4, 好奇看了一下, 這個檔案是連結到 /usr/bin/perl, 結果弄了老半天居然是這個步驟出問題, 趕緊改回來, chmod 555 /usr/bin/suidperl, 中獎了, openwebmail 的登入畫面就這麼的出來了, 真是感動, 可我是照著官網的步驟做的, 是怎樣, 有 4 沒 4 差這麼多.

OS : Debian 5.0
openwebmail : 2.53
perl : 5.10.0



郵件儲存格式

假若是個人郵件的備份那或許有很多種方式, 例如用 outlook 匯出就行, 但是我們也知道匯出後的檔案是微軟發明的 pst, 重點是它很容易壞掉, 連修復 pst 檔案的工具都有出, 不只如此, 連 outlook 本身也會掛, 救都救不回來; 這也沒甚麼, 程式都會掛, 但你掛掉我的郵件也要留著啊, 那難道沒有通用的郵件儲存格式嗎?

依稀記得在 linux, 當郵件收下來後是存成一個文字檔, 那這個文字檔是否就是一個通用的郵件儲存格式呢? 而且存成一個文字檔用文字編輯器就可以看了, 就算檔案壞掉一部分應該還是可以看到沒壞的部分吧?

谷歌了一下, 原來這個文字檔的檔案格式叫 mbox, 是一個公開的郵件儲存格式, 像 Thunderbird 就是把郵件存成 mbox 的檔案格式, 當然例如微軟的記事本也可以讀; 忽然想到, 那附件是怎麼存的?

試了一下在 Windows XP 安裝 Thunderbird 3, 把郵件抓回來之後, 果然是存成一個文字檔, 檔名為 Inbox, 而且連附件也可以存進去, 重點是郵件的內文用記事本就讀的到了; 當然附件是看不懂的, 除非你用眼睛就解的出來.

想要更進一步把這個 Inbox 餵給 openwebmail 來讀, 看看是否正常, 先複製貼上一封信, 用 vi 存檔 , ㄟ, 還真的可以讀; 那把 Inbox 用 ftp 傳上去應該也可以吧, 但結果有些奇怪, 怎麼還是只看到第一封信, 可是信件的大小卻是整個 Inbox 的大小, 這是哪裡出問題了? 難道只能讀到第一封信嗎? 但是這封信也打不開; 用眼睛看, 比對兩邊的檔案一樣啊, 那就不是 ftp 上傳的問題吧? 難道是我的眼睛有問題? 還是有隱藏關卡?

在困惑時, 忽然腦袋閃過, 有學過 DOS 與 linux 的文字檔案格式是不太一樣的, 好像是下一行的不同, 而且可以用工具來轉換, 在我殘存的記憶裡努力回想, 好像是叫做 dos 什麼的?

apt-cache search 一下果然有個轉換的工具叫 tofrodos, 趕緊裝起來試試, 奇怪怎麼沒 tofrodos 這個指令, 搞了半天原來裝好後就是要用 dos2unix, 原來我的記憶沒問題, 那為什麼要用 tofrodos 來混擾我?

啊哈, 果然有隱藏關卡, 不是我眼睛有問題, 用 dos2unix 轉換過後, 一切都正常了, openwebmail 都讀得到, 附件也沒問題, 打完收工.

2010年6月17日 星期四

linux 文字檔搜尋

好吧, 我知道怎麼搜尋某一個文字檔中的特定文字, 用 grep 就行, 我也知道怎麼從一堆檔案中搜尋某個檔案名, 用 find 加 grep 就行, 但是我怎麼從一堆檔案裡搜尋檔案內容中某個關鍵字呢? 像在 Windows 那樣的方便呢?

OS : Debian 5.0 (/var/log/installer/lsb-release)

好吧, 我知道可以先用 find 找出目錄下所有的檔案, 再用 file 這個指令判斷檔案類型, 再加上 grep 過濾出 text, 這樣我就找出所有的文字檔了

find / -type f -exec file {} \; | grep "text"

但是會出現一些錯誤訊息, 就把它丟到"空"裏面吧

find / -type f -exec file {} \; 2> /dev/null | grep "text"

然後我記得好像可以每一行取出第一個字串, 也就是我所需要的檔案名稱, 查了查用 awk 就可以了

find / -type f -exec file {} \; 2> /dev/null | grep "text" | awk -F":" '{print $1}'

此時, 我有了根目錄下所有文字檔的完整路徑與名稱, 但指令也夠長了, 而且故事還沒完啊, 我要怎麼把這些檔案"吐"給 grep 做搜尋呢? 直接"管線"好像不行, 但依稀記得有個 xargs 可以用, 於是指令又更長了

find / -type f -exec file {} \; 2> /dev/null | grep "text" | awk -F":" '{print $1}' | xargs grep 'keyword'

大功告成, 終於可以搜尋所有文字檔中某個關鍵字了, 但又有一些錯誤訊息, 再把它丟到"空"裏面

find / -type f -exec file {} \; 2> /dev/null | grep "text" | awk -F":" '{print $1}' | xargs grep 'keyword' 2> /dev/null

再來 awk 一次, 取出搜尋過後的檔案名稱

find / -type f -exec file {} \; 2> /dev/null | grep "text" | awk -F":" '{print $1}' | xargs grep 'keyword' 2> /dev/null | awk -F":" '{print $1}'

但是會有重複的檔案出現, 我只要出現一次就好了, 該怎麼辦才好, 忽然一眼瞥見有個 uniq 指令

find / -type f -exec file {} \; 2> /dev/null | grep "text" | awk -F":" '{print $1}' | xargs grep 'keyword' 2> /dev/null | awk -F":" '{print $1}' | uniq

耶, 終於得到我想要的結果了, 真是太高興了, 但這一串指令也未免太長了吧, 誰記得住啊, 應該有更好的方式吧...