2010/11/12

在 Ubuntu 上解開 x.part1.rar 分割壓縮檔

在 Windows 上可以用 7-zipWinRAR 之類的程式來解開並組合 x.part1.rar 這類型的分割壓縮檔。在 Ubuntu 上當然也可以:
rar e x.part1.rar
當然,要先安裝 rar:
sudo apt-get install rar

2010/06/30

利用 dpkg 查出檔案是由哪個 package 來的

Ubuntu 是由各種 package 所組成的。也就是說,檔案系統上的檔案,大部分都可以追溯到某一個 package。例如:
dpkg -S `which wireshark`
dpkg -S /var/www
dpkg -S /etc/init.d/ssh

2010/05/19

Ubuntu 10.04 的 Window Controls

趁工作空檔,把 Ubuntu 從 9.10 更新到 10.04。雖然花了三個多小時才完成,但還蠻順利的。

更新完成之後,發現視窗右上角的縮小、放大、關閉等控制鈕竟然都不見了?原來跑到左上角去了。據說這是 Mac OS 的風格,雖然不錯看,但卻不太習慣。若你也有同感,可用以下方法改回來:
  1. 執行 gconf-editor
  2. 進入 apps / metacity / general / button_layout
  3. 將 "maximize,minimize,close:" 改成 "menu:minimize,maximize,close" 即可
參考資料:

2010/04/13

MIME HTML (.mht)

最近收過幾封朋友轉來的履歷表,看起來是直接從 104 人力銀行下載存檔的。檔名都叫 RESUME.doc,既然是 .doc,就直接用 OpenOffice 來開啟,結果卻都失敗。

查看檔案內容,不像是一般我所認知的 .doc 檔。仔細研究之後,才知道這叫做 MHTML 格式,或者 .mht。規格還定義成 RFC 2557。

雖然 OpenOffice 不支援此種格式,但 FireFox 加上 UnMHTMozilla Archive Format 外掛之後,就能夠讀取這種檔案。不過檔名要先改成 .mht。

2010/04/11

好康推薦:Rainlendar

五六年前,Windows XP 還是我主要使用的作業系統時,Rainlendar 就是我非常喜歡的一套桌面行事曆軟體。對整天掛在電腦前面的人來說,應該會非常喜歡這套輕巧方便的行事曆軟體。

將主要作業系統切換到 Ubuntu 時,Rainlendar Linux 版還在規劃當中,遂不得不放棄這套軟體。前一陣子才發現 Rainlendar Linux 版不但已經完成,而且一樣有免費的 Lite 版。

在 Ubuntu 上安裝,Rainlendar 被分類在「辦公」軟體,登入之後並不會自動啟動。請按以下方式將 Rainlendar 加入自動啟動的清單之中:
  • 主選單 -> 系統 -> 偏好設定 -> 啟動應用程式
  • 加入 新增一個項目:
  • 名稱:Rainlendar2
  • 指令:rainlendar2
  • 備註:Customizable desktop calendar
不知道是不是 Rainlendar2 的錯蟲:偶而登入之後會出現以下的錯誤訊息:
Do you want to start another instance?
雖然按 Yes 就可以繼續,但總是不方便。後來將啟動應用程式的指令改成「rainlendar2 -m」,問題好像就解決了。

2010/03/16

我的 alias 設定

我們可用 alias 這個指令來訂製常用的指令,非常方便。alias 設定通常是寫在 ~/.bashrc,以下是我目前的設定:
  • alias diff='colordiff -x .svn'
  • alias grep='grep --color=auto --exclude-dir=.svn'
  • alias ls='ls --color=auto'
  • alias svn='LANG=C /usr/bin/colorsvn'
其中:
  • diff 換成 colordiff,這樣顯示出來的結果比較容易判讀。另外,因為常有 Subversion 的專案,所以排除 .svn 這個不需比較的目錄。
  • grep 比較單純,預設就有顏色顯示。我只是加上排除 .svn 的設定。
  • ls 預設的就很好用了。
  • svn 換成 colorsvn,這樣顯示出來的結果比較容易判讀。

2010/03/04

用 ssh tunnel 建立分身

網路上可找到很多用 ssh tunnel 突破防火牆的 文章。此概念其實很簡單:若你能用 ssh 從 host L 連到 host R,那你就可以「人在 host L,但分身在 host R」或「人在 host R,但分身在 host L」。

舉例來說,公司的內部網站只能從公司內網的電腦連接 (如 host L);家中的內部網站只能從家庭網路的電腦連接 (如 host R)。若 host L 能 ssh 連到 host R,你在公司時就可以透過 host L 派遣分身到 host R,由 host R 去連接家中的網路;反之亦然 。

若要由 host L 派遣分身到 host R,就要在 host L 執行以下指令。這樣,連到 host L 的 port 5678 就相當於從 host R 連結到 host X 的 port 1234:
ssh -Nf -L 5678:host-X:1234 user@host-R
若要由 host R 派遣分身到 host L,就要在 host L 執行以下指令。這樣,連到 host R 的 port 5678 就相當於從 host L 連結到 host X 的 port 1234:
ssh -Nf -R 5678:host-X:1234 user@host-R
在實際的環境中,連結通常是單向的。當你人在 host R 時,並不一定能夠登入 host L 去建立通道。因此,你必須先在公司 (host L) 建好 ssh tunnel,然後回家時才能透過 host R 派遣分身。

在實際的環境中,連結通常也是脆弱的。你辛辛苦苦在 host L 建立的 ssh tunnel 可能因為各種原因斷掉而無法使用。要解此問題,可以利用 autossh。autossh 能夠偵測通道是否中斷,並在中斷時自動重建立。安裝方法:
apt-get install autossh
此時建立 ssh tunnel 的指令變成:
autossh -f -M 20000 \
-o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" \
-N -R 5678:host-X:1234 user@host-R
其中 -M 20000 以及後續的 -o 是 autossh 偵測 tunnel 是否斷掉的參數。

因為安全的考量,"-R 5678:host-X:1234" 這種設定只允許從 host R 連接到 localhost 的 5678,這代表你無法從其他機器透過 host R 來派遣分身。以下方法,可以關閉此限制。
  1. 修改 host R 的 /etc/ssh/sshd_config,在其中新增一行 "GatewayPorts clientspecified"
  2. 在 host R 執行 "sudo /etc/init.d/ssh reload"
  3. 在 host L 將 "-R 5678:host-X:1234" 改成 "-R *:5678:host-X:1234" 然後重新執行前述 ssh 或 autossh 指令
PS: 若重新開機後也要保持這個 tunnel 不斷,可將 authssh 指令放在 /etc/rc.local。

2010/03/01

指定授權金鑰,SSH 登入不用密碼

工作時,一定有幾部 server 是你經常用 ssh 登入的。每次都老老實實輸入密碼是個好習慣,但在安全無虞的情況下,若能跳過輸入密碼,的確非常方便。

假設你要從 host-C 以不用密碼的方式登入 host-S,可按以下步驟來進行:
  1. 在 host-C 執行 ssh-keygen。問 passphrase 時直接 Enter,執行完會產生幾個檔案:private key (~/.ssh/id_rsa) 和 public key (~/.ssh/id_rsa.pub)
  2. Private key 請保管好,不要外流。然後將 public key 的內容加在 host-S 的 ~/.ssh/authorized_keys 之中 (若原本沒有此檔,就自己建立空檔)
若該做的都做了,host-S 還是跟你要密碼,請在 host-C 執行以下指令後再試試看:
ssh-add
參考資料:

2010/02/07

Eclipse 有些 button 在 Ubuntu 底下不能按

Android 的熱潮無法擋,連我都想試試看。買了本書按圖索驥,開始 Android 的探索之旅。

首先要安裝的是 JDK,在 Ubuntu 上有 OpenJDK 和 Sun JDK 兩種選擇。上網查了一下,OpenJDK 有成功的案例,而且沒有人說不行。基於支持 OPEN 的理念,決定採用 OpenJDK,這也是 Ubuntu 官方支持的版本。

接下來要安裝 Eclipse 這套久仰大名的 IDE。說 "安裝" 不太恰當,其實只是解壓縮放到自己喜歡的目錄即可。一切都很順利,直到開始執行 Eclipse 之後。

我發現有些 button 沒有作用,特別是那些 Apply、OK 這類重要的 button (必須先將 focus 移到該 button 然後按鍵盤的 Enter 才能動作)。一開始懷疑是 OpenJDK 與 Eclipse 不相容,上網 google 之後,才發現以下解法:
export GDK_NATIVE_WINDOWS=true

2010/02/06

用 shell script 產生全是 0xFF 的檔案

要產生全是 0x00 的檔案很容易,借助 /dev/zero 或 /dev/full 即可。要產生全是 0xFF 的檔案就要借助其他工具。目前找到以下方法 (allone.dat 為輸出檔;1024 為檔案大小,可自行調整):
awk 'BEGIN { while (1) printf("%c", 255) }' \
| dd of=allone.dat bs=1 count=1024
PS: 你問我為什麼要產生這種檔案?是為了填補 flash ROM 的內容。Flash ROM 的空的狀態就是 0xFF。

2010/01/17

Bless -- Hex Editor for Gtk#

做軟體開發工作,難免會需要檢視或編輯一些二進位檔案 (binary file)。在 Ubuntu 底下,若只是單純檢視,用 hexdump 可能就足夠;若需要進行簡單的修改,那我推薦 hexer (特別適合已習慣用 vi 的人)。上述兩隻程式都是文字模式,所以操作起來有不少限制。

GUI 版本的 binary editor 我推薦 Bless,雖然版本只是 0.6.0,但剪下、複製、貼上等功能都很齊全,而且能同時開啟很多個檔案,非常方便。

另有一個 GHex 也是 GUI 版的 binary editor。初步看來 Ubuntu 對此程式的支援好像比較多,但用起來不若 Bless 那麼好用。最致命的缺點是無法調成每十六個位元組一行,這使得在對照一些資料格式的時候,非常不容易進行。

上述提到的程式所在的 package 如下:
  • hexdump: bsdmainutils
  • hexer: hexer
  • Bless: bless
  • GHex: ghex