利用 FUSE/SSHFS 真是可以作些好棒的壞事。

Windows network (SMB/CIFS) 再怎麼效率不彰,對區域網路中的 Windows 工作站來說還是很方便的系統,可惜 Linux 與其它 Unix-like 系統過去都沒有可與之抗衡的網路磁碟分享機制。NFS 的認證與權限設定太僵化、SMBFS 得用明碼儲存網路分享帳號與密碼。而且最重要的是,無論是 NFS 或 SMBFS,都很難由低權限的一般使用者進行管理操作;如果沒有 root 或 sudo 權限,幾乎沒辦法進行掛載,那便不必談網路磁碟使用了。

FUSE/SSH 可以解決 Linux 所遇到的這個困境。FUSE 是一組 kernel module 與程式庫的集合,把它看成是允許一般使用者直接進行檔案系統掛載操作的機制就可以了。SSHFS 是建基於 FUSE 之上,利用 SSH 協定作為傳輸手段的網路檔案系統。因為 SSHFS 是基於 FUSE 設計的,所以不需特別的權限,便可以直接呼叫使用!

要使用 FUSE/SSH,kernel 的版本要夠新。目前 Debian etch 的 kernel 已經到了 2.6.18,用這個版本最方便。

寫了這麼多,本篇的重點在於使用 FUSE/SSHFS 是常常會遇到問題的。剛剛在 SSHFS 掛載的遠端系統上 svn up 便出現了 svn: Can't move ... : Operation not permitted 的錯誤。解決方法是加上 workaround=rename 的選項 (以 -o 指定)。

以後再遇到這種或其它錯誤時,可以先查詢一下 FAQ

另外,通常我們利用 SSHFS 連線後使用的遠端目錄,UID 不太可能和本機一樣。此時請使用 idmap=user 選項 (以 -o 指定)。

配合上面的 workaround,我現在連到某台電腦上的 sshfs 指令變成:

$ sshfs username@host: mount/point -o idmap=user,workaround=rename

sshfs(1) 對這些選項都有很詳細的說明。

Posted by yungyuc at 22:04, 1 comments, 0 trackback.

VI Improved (vim) 有個很方便很好用的功能叫作 modeline。在檔案裡面,可以用該檔案標準的註解形式向 vim 下指令。譬如一個 reStructuredText 格式的文字檔,你可以加上以下的 modeline,讓 vim 在讀它的時候自動把檔案解釋為 rst (以取得正確的語法高亮):

某些文字。

.. vim: set ft=rst:

modeline 裡可以放的指令不限一個,所以我大部分的 .py 檔案在檔尾都有這麼一行的 modeline:

# vim: set ai et nu sw=4 ts=4 tw=79:

我喜歡這樣格式化過的 .py 檔案。

只有自己會看的檔案這麼作當然沒什麼問題,但如果有別人會看的話,這位別人用的又也是 vim,我們設的 modeline 或許會有點擾人。不過,vim 這麼強大的軟體,難道不能設定為根據檔案型態決定統一的設定嗎?當然可以,只是我一直懶得把這個功能找出來...

vim 可以針對指定的條件,在軟體發生指定事件的時候執行指令。這個功能叫作 autocmd。假設我希望在開啟每一個 .py 檔的時候都執行上面 modeline 的那些指令,可以設定一個以下的 autocmd (寫在你的 .vimrc 或 Windows 下的 _vimrc 裡):

au BufRead *.py set ai et nu sw=4 ts=4 tw=79

如果我們寫的程式要給別人看,希望留給別人的 vim 一點設定的空間,可以使用 autocmd 取代 modeline。

Posted by yungyuc at 15:39, 0 comment, 0 trackback.
Change to page (10 entries in each page): 1
© hover year to navigate month: powered by django