Category: Python / Perl

[Perl Script] – 自动删除 Apache 旧记录档

上一篇文章 Apache Log Rotate 设定 讲述了 Apache 轮替记录档的方法, 但如果旧日志一直不理的话, 同样占据碟碟空间, 因为 Apache 不会删除旧记录档, 而且将新记录写入新建立的档案, 以下 Perl Script 可以自动删除旧记录档, 只要设定好记录档目录, 名称后, 放到 crontab 执行便可以了。 这个 Perl Script 会扫瞄记录档目录, 并查看档案名称为是 access …

[Perl Script] 统计记录档 IP

如果发现服务器有大量存取记录, 要检查是否 DDOS 攻击, 可以开启记录档检查, 但资料量大的话, 要人手检查也很困难, 所以我写了这个简单的 Perl Script, 用作检查记录档内出现次数最多的 IP, 锁定出现频率最高的 IP 作检查会容易得多。 编写时想到有多种记录档也有此需要, 只要记录档是一行一个记录, 而每行只有一个 IP 出现便可以用, 已经试过 apache access log 及 error log, /var/log/secure, /var/log/vsftpd.log …

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 与用户输入匹配的纪录, 有回传便可以登入, 没有回传便登入失败, 这个很容易理解。但如果用户的输入包括了一些特定的 …

Perl 复制/重新命名/删除档案

在 Perl Scripts 里面除了可以用系统指令进行档案处理外, 也可以用 Perl 直接实现, 做法是这样: 复制档案 Perl 没有内建函式可以复制档案, 但可以透过加载 File::Copy 实现: 上面的语句会将 $old_file 复制到 $new_file. 重新命名档案 虽然 Perl 内建有 rename 函式可以用, 但它在某些档案系统不能运作, 所以用 File::Copy 实现会更好: move …

Perl 检查档案存取及修改时间

Perl 有很多实用的的档案运算子, 要检查档案的最后存取及修改时间, 可以用 -M 及 -A 实现,在程式内可以便可以找出指定时间没有被取存或修改的档案, 以下是简单的例子检查档案是否在 30 日内没有修改过: 而除了以上两个外, Perl 还有很多实用的档案运算子: -e 档案存在 -z 档案是空档案 (大小为 0) -s 档案不是空档案 (回值档案大小) -f 档案是普通文件 -d 档案是目录 -l 档案是连结 …

还会继续用 Perl

在十多年前读书的时候学 C/C++, 后来因工作关系开始学习 PHP, 学习了 PHP 两年左右开始学 Perl, 主要是写一些系统管理的工具。其他的程式语没有认真学, 要用再找资料。直到目前为止, 当要写一些网页应用程式, 我会用 PHP, 而一些 Linux 系统管理工具会用 Perl。 近年用 Perl 的人越来越少, 我觉得主要原因是很多原本用 Perl 的系统管理员转用 Python, 因为 Python 在 OOP 方面做得比 …

CGI “Internal Server Error”

在安装 CGI 程式时如果设定错误,便会看到 “500 Internal Server Error” 讯息,一般常见的错误可以用以下方法解决: 1. CGI 程式的权限需要设定为 711 或 755。 2. 程式的最开端有一行类似 #!/usr/bin/perl,其中 #! 是必需要的,然后确定 /usr/bin/perl 是正确的路径,另外这行前不可以有空格或空行。 3. 如果程式本身会读写其他档案,要检查存取档案的绝对路径或相对路径是否正确,以及档案是否有权限存取。 4. 根据 HTTP 栛定,在输出内容前要先输出 HTTP Headers,否则便会遇上便会错误,在 …