カテゴリー「簡単スクリプト」の8件の記事

2014年12月 8日 (月)

ping が戻る機器を探す

ラズパイを img からのインストールした時の話
起動したラズパイの、IPアドレスが分らない。ディスプレイが付いていないので、ifconfig で見ることは出来ない。


普通MACアドレスが同じならルーターは同じアドレスを振るのだが、再インストルしたラズパイはアドレスが変わっていた。

色々試して見つけたのだけど、簡単なシェルスクリプトで見つけられる。
 
#!/bin/sh
rm /tmp/host
for i in `seq 1 3` 35 `seq 64 75` ; do
echo -n "$i "
ping -c2 -t2 "192.168.1.$i" | grep from >> /tmp/host
done
echo
cat /tmp/host

この例では、192.168.1.x のネットワークで、1~3・35・64~75 の範囲を探します。

pingの -t2 はタイムアウト :osによって適切に設定出来ると動作が速くなる。

くれぐれも、これは自分の管理できるローカルネットワーク内だけで使ってください。

| | コメント (0) | トラックバック (0)

2014年7月18日 (金)

IPアドレス

テキストファイルからIPアドレス(以下IPで省略)を取り出す。

\文字は除いて考えることにする。
また0から255の範囲は考慮していない。必要な場合は「IP 正規表現」で検索できる。
.
[0-9]             :[]の中は1文字で範囲は0から9の数字:
[0-9]{1,3}          :数字を1~3回繰り返す  :1~3桁の数字
[0-9]{1,3}.          :3桁の数字に.(ピリオド)を付加
([0-9]{1,3}.)         :数字とピリオドをまとめる
([0-9]{1,3}.){3}        :まとめてから3回繰り返す
(([0-9]{1,3}.){3}[0-9]{1,3}) :最後に3桁の数字を付けて、sedで使う場合はもう一回まとめる:grepの場合は""でまとめる

( ([0-9] {1,3 } . ) {3 }[0-9] {1,3 } ) : \が必要なところにスペースを入れてみた。
\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\)  :まとめの()と繰り返しの{}とピリオドの前に\を付ける。

これでIPを検出。
sed -e "s/\(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\)/=\1=/g"  最後のまとめ() を \1 で参照できる
上記では、IPの両端に=が付く。

だたこれでIPのみを取り出すにはひと工夫が必要。
特に1行に複数のIPが入っている場合、改行を挿入するとIPを取り出しやすい。

「sed 改行」で検索。

「sedip」を見る

| | コメント (0) | トラックバック (0)

2014年7月17日 (木)

間違ったスクリプト

スクリプトとして間違っているのだけど、自分の意図するように動作することがある。

すでに紹介したスクリプトで
if [ -e $1 ] ; then
  echo hoge
else
  echo $1
fi

のスタイルで、引数の有無によって処理を変えようと意図したものだが、例えば引数$1がaなら
aと言うファイルの有無で動作していた。aと言うファイルは無いので意図した動作をおこなうが、スクリプトとしては間違っている。

if [ $1 == ] とするか if [ $1: == : ]  ( : は任意文字)とすると良いようだ。

| | コメント (0) | トラックバック (0)

2014年7月 4日 (金)

迷惑メール対策

ipfw を使用して時間がたつと /var/log/security に記録が残ってくるが、そのまま見ても解り難い。

そこで 「secu」を見る

使い方は secu 2225 の様に ipfw で設定したフィルタの番号を入れる。

更に aかs と追加すると表示が変わる。  secu 2225 s

アクセスの多い「IPアドレス」が分ったら

secu 103.xx. の様にアドレスの一部を入れると同一ネットワークからのアクセス状態を知ることが出来る。

whois で調べて C国からのアクセスは、ipfw に追加」して全部遮断する。

少し改造して、「secub」を見る とすると、過去のものも見ることができる。

迷惑の実態が見えてくる。

| | コメント (0) | トラックバック (0)

2014年6月12日 (木)

ipfw で拒否

ipfw は簡単使えて便利だけど、書式が長くて間違え易いし、何番にセットするかで迷う。

ipdeny

.
#!/bin/sh
IP=`cat /etc/ipfw.deny.no`
IP=`expr $IP + 2`
if [ -e $1 ] ; then
  cat /etc/ipfw.deny
  echo next $IP
else
  echo $IP
  echo $IP > /etc/ipfw.deny.no
  ipfw add $IP deny log ip from $1 to any
  echo add $IP deny log ip from $1 to any >> /etc/ipfw.deny
fi

使用開始時にipをセットする有効空きエリアを調べて、
echo xxxx > /etc/ipfw.deny.no として書き込んでおく

ipdeny xx.xx.xx.xx/x で拒否アドレスをセットできる。

同時にファイルにも書き込むので、
/etc/rc.local に
ipfw /etc/ipfw.local と書いておくと、リブートで再セットできる。

番号は+2しているので、手動で間に入れることも可能。

少し変形して、ただのカウントとメールのみ拒否を作っておくと便利。

上限のチェックはしていない。


| | コメント (0) | トラックバック (0)

2014年5月28日 (水)

静止画・動画 記録スクリプト

抜粋
hoge=/home/hoge

PID=`ps ax | grep pwcv | grep video0 | sed -e "s/^ //g" | sed -e "s/^ //g" | cut -d" " -f1`
kill $PID
sleep 3
NA=`date +%d_%H%M`
/usr/local/bin/pwcsnap -d /dev/video0 -s vga -c 3 -o $hoge/$NA.jpg
/usr/local/bin/pwcview -d /dev/video0 -hkr -s sif -f 5 | /usr/local/bin/mencoder -demuxer rawvideo -rawvideo fps=5:w=320:h=240:i420 - -ovc lavc -lavcopts vcodec=mpeg4 -o $hoge/$NA.avi &
↑長いけど1行です。

.
1・cronで定時に動作。pidを取り出す。(初心者の方:"`"バッククォートに注意)
2・録画中のファイルを中断する。(killする)
3・スナップショットを撮る。 無くてもよい
4・録画を開始する。
繰り返す

sedの部分はもっとスマートなやり方があると思います。教えて。
目的はpidの先頭のスペースカット

実際にはかなり修飾しています。フォルダーを作ったり、画像の回転をいれたり。
sleep 3はおまじない。

↓実際のファイル。ややくどいやりかた。
「記録スクリプト」をダウンロード


| | コメント (0) | トラックバック (0)

2014年5月14日 (水)

お気に入りのスクリプト

複数台のサーバーを使っていると、目の前のキーボードとディスプレイが自宅のものを表示しているとは限らないわけで、考えたり休憩したりしているうちに遠くはなれたサーバーをrebootしたりすることが発生する。
rebootならまだ良くて、シャットダウンすると最悪である。

reboot とすると alias 設定で下のスクリプトに飛ばすことにした。

サーバ名を表示して yes/no/off の入力を求める。
Yでrebootだが3秒のカウントダウン中にコントロールCで中断できる。
offを選ぶと5秒のカウントダウン。
これでうっかりミスはかなり防げると思う。
.
#!/bin/sh
#
echo
echo -n "I am XXX! reboot ? (Y/n/off) "
read KEY
if [ $KEY == Y ] ; then
 echo reboot
 echo 3 ; sleep 1
 echo 2 ; sleep 1
 echo 1 ; sleep 1
 shutdown -r now
elif [ $KEY == off ] ; then
 echo -n "shutdown ? (Y/n) "
 read KEY
if [ $KEY == Y ] ; then
 echo 5 ; sleep 1
 echo 4 ; sleep 1
 echo 3 ; sleep 1
 echo 2 ; sleep 1
 echo 1 ; sleep 1
 shutdown -p now
fi
else
 echo "not reboot"
 echo
fi

| | コメント (0) | トラックバック (0)

2014年5月10日 (土)

スクリプトの薦め

FreeBSDでは基本的にCUI・文字での操作が主になります。
決まった処理で何度も同じ文字をタイプすることが多くなります。
文字数の長いものは、忘れ防止。簡単なものはより簡単に処理手順を記録しておきます。

まずは簡単だけど頻繁につかうもの。
ファイル名(例:eee eec)は自分の好みで。

eee:
#!/bin/sh
# /root/bin のスクリプトを編集する。
ee /root/bin/$1


eec:
#!/bin/sh
# /etc/ の.conf を編集する。
ee /etc/$1

ディレクトリをあまり気にせずに特定ファイルの編集ができます。
スクリプトとは呼べないかも。

少し進化させ、バックアップをとると便利です。

| | コメント (0) | トラックバック (0)