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

Extreme XOS run pyton scripts

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