2013年12月19日 星期四

刪除目錄內所有tar檔案內的特定檔案

一年排程設備備份檔案, 年初不小心在目錄內誤放了幾個不相關 img, 結果年底要燒成光碟
結果總容量共22G, 沒辨法燒錄CD, 所以只好處理*.gz檔案, 刪除img後 剩下2xxM . O_O

原本想用人工一個一個檔案處理, 結果處理到第三個就放棄, 因為有3xx多個檔案


簡單迴圈顯示目錄下所有檔案
for f in `ls`; do
  echo "File -> $f"
done
簡單迴圈顯示目錄下所有.gz檔案
for f in `ls *.gz`; do
  echo "File -> $f"
done

#看一下gz檔案內的檔案列表
tar --list --file=device.config.20131219.tar.gz


#用gunzip 將.gz 解回.tar, 刪除掉檔案, 在將檔案用 gzip 壓縮
  (zip 的檔案好像無法直接刪除檔)

for f in `ls *.gz`; do
  echo "gzip File -> $f"
  gunzip $f
  fn=`echo $f|awk -F.gz '{print $1}'`
  echo "tar File -> $fn"
  tar --delete --file=$fn tftpboot/RFS7000-5.4.4.0-007R.img
  gzip $fn
done





2013年11月8日 星期五

將整個記錄檔依指定開頭合併成為一行



將整個記錄檔依指定開頭合併成為一行
awk ' { if( $1 ~ /^Access|^Rquest|^Status/) 
            { print "\n"; printf "%s",$0 } 
            else 
            { printf "%s",$0 }
      }' analyzer.log

$1 該行的第一個字
$0 整行

依 Access 或 Request 或 Status 為開頭, 其它行接續至該末端
所以合併之後開頭只會有Access 或 Request 或 Status

print  直接印出
printf 格式化字串印出, 但會將末端換行符號刪除




常見去空白行方法
tr -s '\n' < abc.txt
grep -v "^$" abc.txt
sed '/^$/d' abc.txt
sed '/./!d' abc.txt
awk '/./' abc.txt


去除同行連續相同字
echo "abc1 abc1 abcd2 abcd3 abcd4 abcd1" |sed -e 's/\b\([a-z0-9]\+\)[ ,\n]\1/\1/g'
abc1 abcd2 abcd3 abcd4 abcd1

2013年8月5日 星期一

Fortinet Fortigate won’t save changes – CFG_CMDBAPI_ERR

 GUI出現錯誤訊息 CFG_CMDBAPI_ERR, 無法寫入或存檔 (Bug ?)

 restarts the ipsmonitor 
#diagnose test application ipsmonitor 99

檢查 forticron 的 PID, 刪除

#diag sys top 1

#diag sys kill 11 <pid>

2013年6月6日 星期四

FreeRadius Debugging Mode除錯, 自訂PHP 抓參數值

設定FreeRadius 除錯,可能依auth 或 realm 多寡不同, 連結外部OpenLDAP, MySQL等等, 而增加錯誤率, 或造成一些非遇期的動作。以下幾常見除錯方式。

1. 使用radiusd -X
開起FreeRadius Debug , 直接輸出至螢幕或至檔案。
Debug 可以看到所有流程順序, 可以各模組執行狀態, 執行在那個SECTION。

# radiusd -X
# radiusd -X > debug.txt
# radiusd -X  |  tee  debug.txt
# radiusd -X  2>&1 |  tee  debug.txt



2. 使用radsniff -X, 存看連線動作及實際回應的資訊

#radsniff -X -p 1812
-p 1812 是Radius Listen Port
可以看到連線過AVP傳輸資料,
    Access-Request
    Access-Accept
    Accounting-Request
    Accounting-Response



3. 使用tcpdump

最通用的工具, 可以查到非常細項的參數, 值, ID, Code ID,
在查RFC's, 就可以很簡單的對應Attribute list, Packet Type
匯出至檔案 由wireshark 更方便

# tcpdump udp port 1812 -vv -ttttnn

 
 


4. 使用 PHP 抓參數或值
利用FreeRadius exec 模組, 呼叫外部程式, 做一個適合自己簡單除錯程式
sites-available/default 放在設定檔的適當位置, 可以確認是否被執行到及參數是否正確
又不會一大堆不必要的訊息

增加一個模組debugtest, 捕抓使用者名稱及裝置實體位置

#vim /etc/raddb/modules/exec

exec debugtest {
wait = yes
input_pairs = request
program = "/etc/raddb/debugtest.php %{request:User-Name} %{request:Calling-Station-Id}"
shell_escape = yes
output = none

編緝一個可執行PHP SCRIPT, 捕抓帶入的Radius AVP值

# vim /etc/raddb/debugtest.php

#!/usr/bin/php
<?php
$a='' ;
for ($i=1; $i<count($argv);$i++)
{
    $a=$a.$argv[$i].' ';
}
$now=date("Y-m-d H:i:s",time());
@error_log($now." ".$a."\n", 3, "/etc/raddb/debugtest.log");
?>

編緝設定檔,

#vim sites-available/default
preacct {
             ..
             debugtest   
}

啟用Radius ,放在所需的section, 就可觀查 debugtest.log
除了不用一直盯著它, 又不會有太多不必要的資訊,

2013年4月1日 星期一

upgrade to CentOS 6.4 from CentOS 6.3/6.2/6.1/6.0

升級失敗

跳版本或升級部份套件, 有時候會有無法升級? , 可以先清除cache

# yum clean all
# yum update glibc* yum* rpm* python*
# yum update

# reboot

確認目前版本
# cat /etc/redhat-release
CentOS release 6.4 (Final)

# lsb_release -a
LSB Version:    :base-4.0-ia32:base-4.0-noarch:core-4.0-ia32:core-4.0-noarch:graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-ia32:printing-4.0-noarch
Distributor ID: CentOS
Description:    CentOS release 6.4 (Final)
Release:        6.4
Codename:       Final

加快更新速度 (限制在特定 mirror site)

安裝yum外掛套件 yum-plugin-fastestmirror
編緝         /etc/yum/pluginconf.d/fastestmirror.conf
限制在 tw範圍
include_only= .hinet.net, .twaren.net, .tw

2013年3月8日 星期五

linux 刪除超大量檔案目錄

rm on a directory with millions of files
小心使用, 注意權限 





最常用的方法, 刪除整個目錄, 用 ls 無法顯示
rm -rf (dir)

檔案數超過一定數量
find <dir> -type f -exec rm {} \;

刪除超量(用find刪不掉), 目錄大小超過數百M, 甚至數十G, 一般是主機被駭才有機會 >_<
while [ true ]; do ls -Uf | head -n 10000 | xargs rm -f 2>/dev/null; done )

export i=0;
time ( while [ true ]; do
            ls -Uf | head -n 3 | grep -qF '.png' || break;
            ls -Uf | head -n 10000 | xargs rm -f 2>/dev/null;
            export i=$(($i+10000)); echo "$i...";
       done )




命令模式, 自動化將特定網頁轉換為PDF


wkhtmltopdf  http://code.google.com/p/wkhtmltopdf/
 簡單的命令工具, 將HTML轉換為 PDF
 適合將網管上HTML報表轉出


寫個Scripts加入排程, 在固定將資料轉出來(用EMAIL也不錯), 這樣就不用每天做苦工
儲存至 /var/www/html/ntop/Report', 依月份存放至各目錄


[root@cacti ~]# cat /var/www/html/ntop/html2pdf.sh
#!/bin/bash
fileName="ntop-`date +\%Y\%m\%d-\%H`.pdf"
dirName="Report-`date +\%Y\%m`"
savePath='/var/www/html/ntop/Report'
html2pdf='/var/www/html/ntop/wkhtmltopdf-amd64'

if [ ! -d "$savePath/$dirName" ]; then
/bin/mkdir -p "$savePath/$dirName"
fi

$html2pdf "http://ntop.host.ip:3000/sortDataIP.html" "$savePath/$dirName/$fileName"




CACTI 簡單增加一個自行開發頁面, 並加入一個頁簽連結

在PHP 程式碼增加
    include("../cacti/include/global.php");

判斷session 是否存在即可
  $_SESSION["sess_user_id"]
 
安裝 Superlinks 外掛套件, 主要功能快速增加頁簽的超連結
 
 

 在Console > External Links 增加一個頁簽 Session, 連結指向你的PHP程式
 


 按Session , 測試看看
 
 
 

Extreme XOS run pyton scripts

XOS run python scripts v15.7 or high 將交換器上的 IP & MAC 往syslog 丟, 簡單將IP資料保留下 ## 編緝Scripts # vi ip2syslog.py #!/usr/bin/python # ...