PageRank



轉移公告

計劃把 http://blog.hoamon.info/ 文章全部轉移至 http://www.hoamon.info/blog/ 這裡,而本 Blogger 站台的文章近 500 篇,我預計在 2014-12-31 前移轉完畢,完成後 http://blog.hoamon.info/ 將只作代轉服務,一律把舊連結如 http://blog.hoamon.info/index.html 轉成 http://www.hoamon.info/blog/index.html ,敬請舊雨新知互相走告。

新文章只發佈在 http://www.hoamon.info/blog/ 。

何岳峰 敬上
顯示具有 shell script 標籤的文章。 顯示所有文章
顯示具有 shell script 標籤的文章。 顯示所有文章

2009年9月16日 星期三

自動更新 hg 儲存庫的 shell script

因為 hg 不同與 svn 可以資料夾結構來看待專案,在 hg 中,一個專案就是一個資料夾,其下不會有子專案,所以像我手頭有二十幾個 hg 專案時,如果要同時更新( pull -u )這些專案,我必須一個專案一個專案進去打 hg pull -u ,這實在太花時間了。但還好我用的是 Linux ,所以就把這些煩人且重複的指令寫成一個 shell script ,執行一次就更新全部。以下是我的程式碼:
#!/bin/bash
today=`date +%Y%m%d`
me=`whoami`
echo ${today}
original_dir=${PWD}
touch '/tmp/.'${today}

if [ "$1" != "" ];then
dest=`find $1 -regex ".*\/\.hg$"`
else
dest=`locate -r "\/home\/${me}\/.*\/\.hg$"`
fi

for dir in $dest;do
if [ ! ${dir/*mercurial_appengine*/} ];then
continue
fi
cd ${dir}/..
echo -ne "\t*** ${PWD} ***\n"
hg pull -u || exit
cd $original_dir
done

2009年4月6日 星期一

明碼的 password 實在是很傷惱筋耶

通常,我遇到的系統管理員如果是 Linux/Un*x 玩得比較久的也才會對這個明碼 password 有戒心。其他 Windows 或是 Linux 菜鳥就顯得無所謂了,甚至他們還會想要告訴我他們的密碼是什麼! 或許是我不容易遇到高級 Windows 系統管理員吧!

所以,當我在寫網頁程式或是系統管理程式時,這資料庫或是其他系統密碼是不會寫在程式碼中的,因為我們的程式都會放到版本控制器去,且在開發團隊中是不太會鎖權限的,所以如果我們成員有人笨笨地把帳密流出去,那上面的程式碼一定會被其他人看光光,當然,我絕對不介意別人看我的程式,怕的是他們發現我們系統上的其他帳密(雖然我的機器一律使用公私錀,但還是怕,因為我沒發覺的洞實在是很多)。

而我的作法是把帳密放到設定檔,並且把這個設定檔檔名加上 .example 來提醒其他人記得參照這個 example 檔來修改成適當的內容。

但是用在系統管理檔中,就覺得有點麻煩了,像是定時備份資料庫的 script ,不過就那麼 10 多行,如果還得另外讀個設定檔,就有給它多此一舉了。

還好 MySQL 提供一個在 Linux/Unix 下的用法,在執行備份 script 的帳號家目錄中,放置一個 .my.cnf 檔,其內容為

[client]
password=some_paSSwoRD

然後把 ~backupmysql/.my.cnf 的權限設為 600 。這樣你就可以在 /etc/crontab 寫入

/usr/bin/sudo -u backupmysql /some/path/backup_mysql_script

而 /some/path/backup_mysql_script 的內容,可以如下:

mysqldump -u root --database test > /home/backupmysql/test.sql

如此一來,將 backup_mysql_script 作版本控制後,也不會有人曉得你的 mysql root 密碼是什麼了!

2009年3月16日 星期一

設定 screen


UN*X 的使用者多半會是 screen 的愛好者,而我也不例外。

一個設定良好的 screen 是非常令人賞心悅目的。不過,我之前一直想要在不同的 window 上秀出它當下的資料夾位置,卻找不到如何設定 screen 的方法。

今天讓我發現原來可以在 .bashrc 中設定。只不過,在設定後,一直有一個小小的困惱,它會在 shell 提示符號前多輸出 134134 的字串。

以下是我的 .screenrc
startup_message off
hardstatus alwayslastline \
" %-Lw%{= BW}%n%f %{-}%+Lw %=| @%H %{-} %= %{= KR} %l %{-}%{= KG} %y-%m-%d %{-}%0c:%s"
maxwin 10


.bashrc
case $TERM in
xterm*|rxvt*)
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007"'
;;
screen*)
#若刪除 \134 ,則 screen window 就不會出現資料夾位置
#但保留 \134 ,則 shell 提示符號會多出現 134134 的字串
PROMPT_COMMAND='echo -ne "\033k\033\134\033k${PWD##/*/}\033\134"'
;;
*)
;;
esac

2007年1月22日 星期一

命令列比較好!!(範例篇)

早想寫一篇有關使用命令列及選單介面的效率、任務達成困難性比較。

如果我說使用命令列比較有效率、能達成更困難的工作(do more with less),但是不容易。你相信嗎?

應該是相信吧!畢竟,我都已經強調"不容易"了。只是你一定很難想像黑黑的螢幕加上難按的鍵盤如何工作?

這篇文章就是讓你有一個概念來想像"命令列文化"的博大精深。

在了解命令列及選單介面的差別前,我先來十個命令列技巧:

1.快速刪除層層資料夾中的特定檔案:
[amon@amon amon]$ rm -r `find .|grep "amon[^/]\+.jpg$"`


2.抓取螢幕快照:
三秒後,對整個螢幕拍照
[amon@amon amon]$ sleep 3;xwd -root|xwdtopnm|pnmtojpeg >test.jpg


3.抓取整個網站的內容:
[amon@amon amon]$ wget -c -r http://www.amon.idv.tw/


4.只想聽音樂:
[amon@amon amon]$ mpg123 */*.mp3
[amon@amon amon]$ ogg123 */*.ogg


5.影像處理:
將input.jpg圖檔插入一串文字"測試",然後順時針旋轉45度再轉存為output.png
[amon@amon amon]$ convert -font /mnt/BP/fonts/ngulim.ttf \
>-encoding Unicode \
>-fill black \
>-pointsize 48 \
>-draw 'text 100,200 "'`echo 測試|iconv -f Big5 -t UTF8`'"' \
>-rotate 45 \
>input.jpg output.png


6.Ping目前的區網中,那些電腦是開機的:
[amon@amon amon]$ nmap -sP 192.168.100.1-254|grep "Host"|cut --delimiter=" " -f2


7.抓取unicode.org的gif圖檔(六萬餘筆)
[amon@amon amon]$ perl -e \
>'print "wget -c http://www.unicode.org/cgi-bin/refglyph?24-",sprintf("%04X",$_), \
>" -O ",sprintf("%04X",$_),".gif\n" for (19968..20000)'>tt
[amon@amon amon]$ sh tt


8.分析apache的log檔,得到不同小時的使用人數:
[amon@amon httpd]$ perl -ne 'print $1, "\n" if /\[ [^:]+Sad\d\d).* \]/x' access_log* \
> |sort|uniq -c|perl -ne 'print $2, "\t", $1, "\n" if /(\d+)\s+(\d+)/' >~/x
[amon@amon httpd]$ gnuplot
gnuplot> plot "/home/amon/x"
gnuplot> set output "/home/amon/x.png"
gnuplot> set term png
gnuplot> replot
[amon@amon httpd]$ display /home/amon/x.png


9.快速大量更改檔名,將x-y.jpg改成00002306xxxxyyyy.jpg,例如1-1.jpg改為000023060010001.jpg:
工作上的需要,我得掃瞄大量的日治時期總督府檔案,而其圖檔的命名規則為 000 02306 001 0001 四個區塊,000表總督府檔案,02306表冊號,001表文件件號,0001表頁碼。因為在頁碼部份時常跳號,例如:0003-0009的檔案為大於 A3尺寸,並不用掃瞄,所以無法利用ACDSee之類的軟體幫我作批次改檔名。
一冊的圖檔多為350頁上下,如果在掃瞄時直接鍵入,那麼我得按15*350=5250次的數字鍵,想到就累。於是我在一開始鍵檔名時,只鍵了 1- 1.jpg、2.jpg、3.jpg、4-2.jpg、6.jpg…349-14.jpg、350.jpg等(頁碼在前、件號在後),然後用命令列來改檔名。
[amon@amon pic]$ ls >../t
[amon@amon pic]$ perl -ne '$a = $1 if /-(.*)\./;print $a, "\n"' ../t >../t_l
[amon@amon pic]$ perl -ne '$a = $1 if /^(\d+)[-\.]/;print $a, "\n"' ../t >../t_r
[amon@amon pic]$ paste -d. ../t_l ../t_r >../lr
[amon@amon pic]$ perl -ne 'printf("00002306%03d%04d.jpg\n", $1, $2) if/(.+)\.(.+)/' ../lr >../long_lr
[amon@amon pic]$ paste ../t ../long_lr > ../all
[amon@amon pic]$ perl -ne 'chop;system "mv $_"' ../all
如此一來,我後面的幾百冊都可以直接套用上面7行指令,豈不快哉。


10.終極必殺技-關機:
[root@amon root]$ shutdown -h 21:00
[root@amon root]$ shutdown -h +10
[root@amon root]$ shutdown -k time to maintain
[root@amon root]$ shutdown -r +10


有趣吧!指令列有沒有超乎你的想像呢!!本篇還未完成。畢竟題目說的是"比較好",所以總要寫個對照組吧! 下回我會把它和選單模式來作一個真正的比較。
Related Posts Plugin for WordPress, Blogger...