Tag: Perl

防止 Shell Script 重複執行

Shell Script 對日常系統維護很實用,對於多用戶系統,Shell Script 經常面對一個問題是重複執行,即一個 Shell Script 正在執行時,避免另一個使用者執行。另一個情況是,當 Shell Script 變得複雜及龐大時,放到 crontab 定時執行時 (例如每分鐘執行一次),Shell Script 還未完成上次的執行,就重複自動執行一次。 要防止 Shell Script 重複執行,一般上會用 lock file 及 PID 的方法,不論是 lock file 還是 PID,除了用 Bash …

閏年計算公式

一般講法是每四年就有一年是閏年, 但這個講法只符合大部份的閏年, 有些年份還是不會每四年一閏的。 在求學時期學寫程式時, 就寫過這樣的程式, 很簡單檢查該年是否閏年, 而閏年的規則有 2 條: 1. 年份可以被 400 整除, 是閏年. 2. 年份不能被 100 整除, 但可以被 4 整除, 是閏年. 現在很多程式語言也不用測試上面的規則, 因為程式語言的開發者已經寫好, 例如 PHP 的 date() 函式, 這樣可以檢查是否閏年: …

RHEL / CentOS 安裝 ImageMagick 及 Imagick

ImageMagick 是一套開源的圖片編輯工具, 可以建立、編輯、轉換格式、建立縮圖等。在 PHP 或 Perl 使用 ImageMagick 編輯圖片十分好用, 而 PHP 的 Imagick 是透過 ImageMagick API 建立及編輯圖片的模組, 以下會示範在 RHEL 及 CentOS 安裝 ImageMagick, PHP 的 Imagick 模組以及 Perl 的 ImageMagick-perl. …

刪除 Postfix Queue 內郵件

Postfix 跟其他 MTA 一樣, 會將不能成功發送的郵件放到 Queue 裡面, 在特定的時間內重新嘗試發送, 超過指定的時間會自動刪除。但如果發送大量郵件, 例如有用戶發送大量垃圾電郵, 會在 Queue 內積壓大量的郵件, 這時可以手動刪除。 以下刪除 Postfix Queue 內郵件的方法: 列出 Postfix Queue 內所有郵件: # mailq 刪除 Postfix Queue 內所有郵件: # postsuper …

Perl 印出顏色文字

在寫 Perl Script 時通常我會將錯誤訊息用紅色顯示, Warning 用黃色, 執行正確用錄色, 看似沒什麼用, 但其實很方便, 不用細心看輸出內容就可以知道有沒有錯誤。在另一篇文章 Shell Script 輸出顏色文字 介紹了在 Shell Script 輸出顏色文字的方法, 但這個方法並不好記, 因為顏色碼是數字, 通常用過就會忘記。 Perl 要印出顏色文字同樣可以用上面提及的顏色碼, 但另一個更方便的做法是用內建的 ANSIColor 模組, 用 ANSIColor 的好處是不用記顏色碼, 直接用顏色的英文名稱即可, 例如 …

Perl 讀入管線 (pipe) 輸入

Linux 下的管線 (pipe) 很實用,可以將多個指令一同執行,如果在 Perl Script 想讀取 pipe 輸入,可以用 符號,這樣就可以將 Perl Script 寫到像 Linux 下的指令那樣運作,寫法也十分簡單,就這樣: testing.pl 以上程式碼會讀入 pipe 輸入,然後逐行印出,在指令模式這樣做: cat /etc/fstab | testing.pl 上面的指令將 cat /etc/fstab 的輸出導入到 testing.pl。

[Perl Script] — 自動備份 MySQL

這個 Perl Script 使用 mysqldump 備份 MySQL, 可以放到 crontab 自動執行。 程式需要按需要修改, 以下是需要修改的選項: $db_username: mysql 使用者名稱 $db_password: mysql 密碼 $db_host: mysql server 位置 $mysqldump: mysqldump 位置 $backup_dir: 儲存備份檔的目錄 $rotate: 保留備份數量 @backup_db: …

Perl 陣列排序

Perl 要對陣列進行排序, 可以用內建函式 sort 來做, 例如: 以上第 7 行用了 sort 對 @words 進行排序, 輸出結果會是: abc def mmm xyz 但這個 sort 函式是用字串排序的,如果陣列的值是數值,sort 也會根據字串的方式排序,即 123 會排在 23 前面,因為 “1” 是排在 “2” …

Perl DBI 防止 SQL Injection

現在很多地方都用上資料庫系統, 有一些是檢查用戶名稱及密碼的登入系統, 但如果沒有對用戶輸入進行過濾, 會有很多潛在危除, 例如以下程式碼: my $sth = $dbh->prepare(“select * from user where user=’$user’ and pass=’$pass'”); 以上這句 SQL 會檢索 user 資料表, 找出 user 及 pass 與用戶輸入匹配的紀錄, 有回傳便可以登入, 沒有回傳便登入失敗, 這個很容易理解。但如果用戶的輸入包括了一些特定的 sql …