Perl

zfs snapshot 管理

[華語, cmn-Hant-TW] 目前 zfs 對我來說主要就是備份用,使用的方式大致上就是逐日備份,然後定期清掉舊的備份,試過一些工具不過都覺得不是很理想,所以就自己動手弄了,備份的方式不限定,只要把檔案塞進目錄即可,目前的話大致上是 windows 用 windows 的機制,mac 用 time machine,其他 linux 或 freebsd 用 rsync,對備份主機來說只要各別開適當的分享出去即可。備份跟清理備份的時間也可以錯開,我是習慣晚上11點左右打 snapshot 跟清舊備份,其他機器有一整天的時間可以丟資料到備份主機上去,對 snapshot 的管理,主要的需求是: 用日期當 snapshot 的名字,例如 backup@2012-07-30 可以分別針對年,月,日設定保存個數,例如30天內的每日備份,6個月內的每月保留一備份,3年內每年保留一備份。 年、月原則上優先保留該年或該月之第一天,如果當天剛好沒備份,就往次日找,直到找到有備份為止。 用 perl 寫了一個 snapshot.pl 來配合這樣的需求,使用方法也很簡單,比如說要處理 backup/pighead,那就 # ./snapshot.pl backup/pighead# ./snapshot.pl backup/pighead 即可,預設是保留32天內的逐日備份,12個月內每月保留一份,一年內保留一份,如果不想照預設的話,後面可以加參數 D-M-Y (日-月-年),這個數字包含當日/月/年,例如要保留三天內、一月內、二年內:…

去掉字串中非數字的部份

[華語, cmn-Hant-TW] 主要是用在去掉電話號碼上那堆括號或是連字號之類的東西。用正規表示式來處理並不困難,其中 ‘\D’ 代表非數字(注意大小寫),把非數字的字元通通取代成空字串即可。 Perl $string =~ s/\D//g;$string =~ s/\D//g; PHP $string = preg_replace( ‘/\D/’, ”, $string );$string = preg_replace( ‘/\D/’, ”, $string );

在 perl script 底肚用 open 拿到系統執行的結果

[客家話, hak-Hant-TW] Perl script 可以用 system(); 來執行外部的程式,偷懶時當好用。 毋過 system(); 有一隻麻煩: 執行結果會直接丟到 stdout,script 自家拿不到結果,是講 script 會拿到執行結果做下一步動作,就要用其他方法了,用 open 加 pipe 就可以做到,像要用 find 尋到全部的 .txt 檔,一隻一隻撈拒打開來,就可以按仔寫: open FILES, "/usr/bin/find *.txt |" while (<FILES>) { open(FILE, $_); }open FILES, "/usr/bin/find *.txt |" while (<FILES>)…

dotMac

[華語, cmn-Hant-TW] 很久之前有看過的 notMac,因為要配合作者的 ftp 伺服器軟體,然後又不支援 Leopard,後來就等於是沒在動了。 不過用類似方式,在  apache + mod_perl 上實作的 dotMac,可是一直在發展著呢,之前只能用 svn 抓 source code 回來安裝,現在有包好的 package 可以下載了。 一直沒有時間去試 dotMac,之後有空的話應該要來試看看的,如果說他們可以直接支援 ldap auth 的話會更好 (不能的話就自己動手寫了,啊就perl 啊……)。