打造舒適的家


一些便利的設定

許多指令裡面都會出現主機名稱, 打起來有點煩。 可以在 ~/.hosts 裡面放幾列如下的資料:

        210.71.4.237    ftp.pws.stu.edu.tw
        123.45.67.89    123.45.67.89

並且在 .bashrc 裡面加上一句: export HOSTFILE=~/.hosts 則下次再登入時, 命令列上任何地方, 只要打主機名稱的前幾個字元, 然後按 ESC 及 @, shell 就會自動把主機全名打出。 這叫 hostname completion。 詳見 bash(1)

在 vim 的 insert 模式裡面, backspace 鍵的倒退範圍很有限。 又, 搜尋字串 ("/" 或 "?" 鍵) 時, 找到的字串會變成黃色。 如果希望 backspace 鍵可以無限倒退, 又希望搜尋到的字串不要變色, 可以在 ~/.vimrc 裡面放兩列:

        set backspace=indent,eol,start
	set nohlsearch

詳見 /usr/share/doc/vim-*/doc/usr_05.txt (可能有好幾個 vim-... 的目錄, 要找一下)

我自己經常下的指令有: vim, less -firs, lynx -image_links 所以在 ~/.bashrc 檔案中, 加上這幾句:

        alias v=vim
        alias l='less -firs'
        alias x='lynx -image_links'

這樣下次再登入時, 可以用一個字母分別取代上述各指令。

怎麼讓不同的檔案顯示不同的顏色, 或是把既有的, 不喜歡的顏色設定改掉? 先看一下 ls 指令真正執行時的細節: type ls 它目前的顏色設定: echo $LS_COTAB 如果按 tab 鍵沒有反應, 就是這個 環境變數 environment variable 沒有定義。 最簡單的情況: 你的帳號的 ls 已經會顯示顏色, 這時只需要將 /etc/DIR_COLORS 拷貝回 ~/.dir_colors 並加以修改即可。 最自主的設定: 如上改好 ~/.dir_colors 並將這句話: eval $(dircolors ~/.dir_colors) 放入 ~/.bashrc 檔案中, 這樣下次再登入時, 就會生效了。 細節請見 dircolors(1) 及 ls(1), 還有 /etc/profile.d/alias.sh 裡面的指令。

備份習慣比備份工具更重要

養成經常備份的習慣, 比購買功能強大的備份軟體更重要。 仔細思考那些檔案是你花了很多心血製作出來的, 如果丟掉了會悔恨不已? 自己創作的文件/圖案/程式/聲音/... 等等都是; 至於下載回來的檔案, 就比較無所謂了。 ㄟ, 但是檔案下載點的網址也蠻重要的, 通常經過幾週以後, 會完全忘記自己當初是怎麼找到的。 還有, 上述各個 設定檔 configuration files 也都要花很多時間打造。 把這些檔案全部放在少數兩三個固定的目錄下; 不要 與其他下載自網路, 大型的檔案混在一起。 例如安排以下目錄:

設定好正確的權限, 並將自己修改過的設定檔搬進去, 再製作 symbolic link (相當於 Windows 下的捷徑) 以便從家目錄最上層也可以看得到這些設定檔:

        cd ~
        chmod 700 ws
        chmod 755 public_html
        ls -trla > modified.txt
        (編修 modified.txt, 留下最近修改的幾個設定檔名)
        mv $(cat modified.txt) ws/config
        ln -s ws/config/.[a-z]* .

再假設還有一個存放備份檔的目錄叫做 backup/ 那麼從此以後, 只要一兩個指令就可以把所有重要東西備份: cd ~; tar czf backup/save.tgz ws public_html

為什麼一般人會覺得備份是一件大工程, 難得做一次; 等到事情發生時, 才悔恨沒有及時備份? 很可能是因為平常 沒有將重要檔案與巨大檔案分開, 也可能因為重要檔案就是巨大檔案, 像是 .doc .ppt .pps ... 等等。 還可能因為重要檔案散在各處, 與系統檔案混在一起。 我近一年來的所有重要檔案, 壓縮之後不到 4MB, 每次離開一部電腦前, 電腦及隨身碟各產生一份新的備份, 一天備份兩三次, 如果有任何閃失, 最多只有半天工作量的損失。 每年一次將舊的資料及下載的檔案備份到光碟上, 這樣可以降低平日備份檔的逐年成長速度。

備份的備份

偶爾會後悔一些修改, 想把某個檔案幾天前的版本救回來。 有一個版本控管工具 cvs 專門處理這樣的事; 但是用起來有點複雜。 如果你的備份檔案只有幾 MB, 可以用另外一個較簡單的替代方案: logrotate。 這原本是給系統管理員用來備份 「記錄檔」 的工具; 但我發現用它來製作 「備份檔的備份」, 非常方便。 基本上只不過是將過去七天來的備份檔都留著, 取不一樣的名字。 隨著每天有新的備份檔產生, 它會幫你刪除最舊的備份檔, 並將其他備份檔的代號各自向後推一。 如果同一天內備份很多次呢? 它會檢查並發現不需要每次都做上述動作, 以確保舊檔案不因為你備份太頻繁而消失。

  1. 把以下內容剪貼到 ~/ws/config/logrotate.conf 裡面去:
            daily
            rotate 7
            missingok
            #copy
    
            /home/帳號/backup/save.tgz {
            }
    
  2. 先看一下 backup 目前的內容, 然後下: /usr/sbin/logrotate -s ~/backup/logrotate.status ~/ws/config/logrotate.conf 再看看 backup 的內容。 應該多出一個 「備份的備份」 save.tgz.1 及備份動作的記錄 logrotate.status
  3. 如果一切正確, 把備份動作寫成一個 shell script 放在 ~/ws/bin/ 底下, 叫做 savework 好了:
            #!/bin/bash
            cd ~
            tar czf backup/save.tgz ws public_html
            /usr/sbin/logrotate -s ~/backup/logrotate.status ~/ws/config/logrotate.conf
    
    並記得對自己開放執行權限。
  4. 未來可能還會自己寫更多的 shell script 一樣都放在 ~/ws/bin 裡面, 所以在 .bashrc 裡面加上一句: export PATH=~/ws/bin:$PATH 告訴 shell 多一個搜尋可執行檔的路徑。