2018年10月26日金曜日

【Linux】時刻を1分進める・1時間進める・1日進める【date】

●30秒進める

date -s "`date '+%Y/%m/%d %H:%M:%S' -d '30 second'`"

●1時間進める

date -s "`date '+%Y/%m/%d %H:%M:%S' -d '1 hour'`"

●59分進める

date -s "`date '+%Y/%m/%d %H:%M:%S' -d '59 minute'`"

●1日進める

date -s "`date '+%Y/%m/%d %H:%M:%S' -d '1 day'`"

●1カ月進める

date -s "`date '+%Y/%m/%d %H:%M:%S' -d '1 month'`"

●1年進める

date -s "`date '+%Y/%m/%d %H:%M:%S' -d '1 year'`"

●30秒戻す

date -s "`date '+%Y/%m/%d %H:%M:%S' -d '-30 second'`"

●1分戻す

date -s "`date '+%Y/%m/%d %H:%M:%S' -d '-1 minute'`"

●1時間戻す

date -s "`date '+%Y/%m/%d %H:%M:%S' -d '-1 hour'`"

●1年戻す

date -s "`date '+%Y/%m/%d %H:%M:%S' -d '-1 year'`"

●実行画面



【Linux】時計2【コマンド】

while : ; do sleep 1; clear ; date ;done

●実行前


●実行中


●停止方法
Ctrl+Cで停止する。

●解説
無限ループで以下を実行する。
・1秒待ち
・画面クリア
・現在日時表示

while ~ do doneはループ。
:(コロン)は何もしないコマンド。
;(セミコロン)はコマンドを連続して実行する(複数のコマンドをセットとして実行する)。

2018年10月25日木曜日

【tcpdump】TCP Retransmission発生【Linux】

本来はそこまで気にしなくていいかもしれないが、tcpdumpで取得したパケットキャプチャをWiresharkで見たら、パケットが黒だらけ。

TCPのSYNがTCP Retransmission(TCPレベルのリトライ)となっていた。初回のアクセスを0秒として
1秒後(前のパケットから1秒後)
3秒後(前のパケットから2秒後)
7秒後(前のパケットから4秒後)
15秒後(前のパケットから8秒後)
31秒後(前のパケットから16秒後)
とリトライをしていた。※1

クライアントがサーバに対してSYNを送信し、その応答としてサーバがクライアントにSYN ACKを返すはずだが、それが返されないため(ネットワークのどこかでパケットがドロップした※2)、クライアントの(OSが自動的に)SYNを再送していた。で、結局31秒後の再送でやっとSYN ACKが返されて通信は無事に終わった。

ネットワーク部門は別会社のため、聴くことはできず、原因が不明のまま…

※1 使用していたのはCentOSで、リトライの回数・間隔はOSによって変わる。
※2 原因不明。

【PowerShell】1ファイルずつzip圧縮【Compress-Archive】

●拡張子指定
dir *.txt | % { compress-archive $_ ($_.basename + ".zip")}

●全ファイル
dir | % { compress-archive $_ ($_.basename + ".zip")}

●パス指定
 dir c:\wk\tmp\ | % { compress-archive $_ ($_.basename + ".zip")}

●解説
%はforeachのエイリアス(別名)
compress-archiveは圧縮コマンド
$_はforeachで取り出される変数
basenameは拡張子を取り除いたファイル名

●拡張子指定した場合


●以下のようになる。



2018年10月15日月曜日

【Java】301 moved parmanently 【HttpClient】

ある日突然JavaのWebアプリ内のWebアクセスのログに、 301 moved parmanentlyが出た。該当のWebページがページを移転したようだ。
Webアプリでは、apache commons HttpClientを使用していて、このライブラリは自動でリダイレクトをしてくれるため、特に対処不要だった。
JavaのWebアクセスって3~4行で簡単に出来るから自分で実装してしまいがちだが、やっぱりライブラリ使った方が安全だった。

2018年10月11日木曜日

【tcpdump】週単位でファイル上書きローテーション【Linux】

sudo tcpdump -i eth0 -s 0 -Z user -G 3600 -w dmp_%a_%H.pcap -z ./gzf.sh
tcpdump -i eth0 -s 0 G 3600 -Z root -w dmp_%a_%H.pcap -z ./gzf.sh
など

●解説

  • -G:3600を指定しているため、1時間毎にファイルが生成される。ファイルのタイムスタンプとして、曜日(%a)と時間(%H)を指定するため、1週間毎にローテーションされる。%aの代わりに%uを指定しても良い。1月ローテーションにする場合は、%d_%Hまたは、%dなどにする。
  • -Z user:実行するユーザー。実在するユーザを指定する。
  • -z gzf.sh:圧縮&上書き時にプロンプトを表示しない。プロンプトが表示されてしまうと、tcpdumpが異常終了してしまうため、強制上書きオプションを指定する。

●gzf.sh

#!/bin/sh
/bin/gzip -f ${1}

●事前作業

ファイル名のタイムスタンプが必要なため、perl-DateTimeが必要。当然、tcpdumpも必要。
yum install perl-DateTime
yum install tcpdump

●手順

echo '#!/bin/sh' > gzf.sh
echo '/bin/gzip -f ${1}' >> gzf.sh
chmod 777 gzf.sh
tcpdump -i ens192 -s 0 -G 3600 -w dmp_%a_%H.pcap -z ./gzf.sh -Z root

●実行



●実行中画面

①取得開始直後(8時)


②1時間後(9時)


③2時間後(10時)


④次の日


⑤1週間以上経過



2018年10月4日木曜日

【tcpdump】Permission denied【Linux】

CentOSの話だが、-Gオプションを付けて定期的に別ファイルに書き込む事が出来る(簡易的なファイルローテーションで削除はされない)。
この際、-Zでユーザーを指定しないとローテーションする際にPermission deniedが出て異常終了してしまう。

2018年10月2日火曜日

【Linux】スクリプトファイル指定にすれば早い【sed】

約3.0GBのファイルを置換をした。
対象の置換前文字列は、数十行。
sedコマンドを一行ずつ並べて行ったが、
余りに時間が掛かるため、sedコマンドオプションの-fを使用した。それでもかなり時間掛かったが、-f付きの方が早かった。