ラベル Linux の投稿を表示しています。 すべての投稿を表示
ラベル Linux の投稿を表示しています。 すべての投稿を表示

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月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付きの方が早かった。

2018年9月26日水曜日

【Linux】ファイルコピーで入力/出力エラー【cp】

●エラー
『cp: cannot stat `xxx': 入力/出力エラーです。』
(xxxには具体的な、ファイル名が入る)

ある日、ファイルコピーを実行したら、上記のエラーが発生してコピーに失敗した。
で、/var/log/messagesを見たら、以下のエラーが出力されていた。
『kernel: EXT-fs error (device dm-0) :  ext4_lookup: deleted inode referenced: yyy』
(yyyには数字が入る)

●fsckコマンドで復旧
【注意!!】以下のfsckはファイルが消失する可能性がある。
umount AAA
(AAAにはマウントポイントが入る)

fsck -y /dev/mapper/ZZZ
(ZZZにはボリューム名が入る。)

2018年9月23日日曜日

【Linux】【rm】 */*コマンドのオプションは-vI

rm -vI */*.txt #カレントの全ディレクトリ配下のtxtを削除。
rm -vI */*_????????.txt #カレントの全ディレクトリ配下の日付付きのtxt
rm -i */*.txt #カレントの全ディレクトリ配下のtxtを削除。
:

rmコマンドでワイルドカード指定する場合は危険なので、確認オプションをつけるようにする。

-iオプションの場合は全ファイルに対して確認が表示される。20ファイル以下なら-iオプションで良い。20以上なら-vIをつけて確認を表示する。

何の意味があるかと言うと、コマンド打ち込みの途中で誤ってEnterを押してしまい、更に* /*など途中にスペースが入ってしまった場合に即実行されないために入れる。-rをつけてないので大丈夫と思うが。

最近のLinuxでは、rm -rf /*は防止されているらしいが、念のためやっておく。
個人的には、オプション指定しなくても確認が出てくれるとありがたいのだが。

-vは削除したファイル名を表示してくれるオプション。誤って関係ないファイルを削除したかどうか確認する。

2018年9月22日土曜日

【Linux】【VirtualBox】【ネットワーク】MACアドレスの重複

過去にあった話2件程紹介します。
どちらも仮想マシンです。物理PCでMACアドレス重複はほぼ有り得ないでしょう。OS側でMACアドレス変更出来たりしますし、ROM焼きすれば物理MAC変えられますが、業務でこれらの事態に遭遇することは無いでしょう 。

■1件目
サーバーのセキュリティー点検とかで、お客さんのセキュリティー部門がデータセンターのサーバーを使用してたのですが、何故かサーバーに繋がらないって言われました。詳細は教えて貰ってないですが、SSH接続か、ブラウザで接続出来なかったのだと思います。

既に環境構築終えて、運用直前だったので報告を聞いて少し焦りましたが、何度も事前に接続していましたし、遠隔でも接続には問題無かったサーバーです。

結局、セキュリティー部門のミスで、仮想マシンのMACアドレスが重複してたせいで、接続出来なかったとのことです。
多分持ち込んだノートPC内の仮想マシン2つが重複したのだと思いきます。

これ以上の情報が届きませでしたので、詳細は不明です。

確かに仮想マシンならMACアドレス重複は可能です。仮想マシンの設定でMACアドレスを指定できます。しかし、どうしてそのような事態になったのでしょうか?

完全にカンで書きますが、セキュリティー部門は案件ごとに仮想マシンを使い分けてたのでは無いでしょうか?社内のルールで案件ごとに分けるよう決まってるという推測です。会社によっては、あるネットワークに接続したOSを別のネットワークに接続するのを、禁止しているとか有り得そうです。

その時私が携わった業務は、お客さんにとっては新規案件でした(お客さん側には沢山の既存案件が有ります)。上記の推測が正しいなら、ノートPC内で新しく仮想マシンをコピーしたと考えられます。VMWarePlayerなら当時はVMコピー後、起動時にコピーしたか、移動したか聞かれたはずです。で移動したと答えると確かMACアドレスを変更しなかったと思います(最近VMWarePlayer使ってませんので、最新版は分かりません) 。

更にコピー元のVMを何故か起動してしまってコピー元とコピー先のVM間でMACアドレス重複してしまったのかな?かなり強引なこじつけですね。

ん?

1人で作業してると思い込んでましたが、2人で作業してたなら、2人のPC間でVMコピーして、MACアドレス重複してた可能性もあるのか・・・。それなら二台同時にVM起動してるのも納得が行きます。サーバー系の作業で、1人作業は有り得ないです。此処まで書いて覆すようですが、そっちの方が可能性高い気がしてきました。

何時もそうですが、お客さん側のミスって、全然情報来ないので何が起こったか真相は不明ですよね。こちらがミスすると、細かいとこまで全部報告して、とてつもなく怒られるのに。

上記の推測が正しいか分かりませんが、VMのコピーは気をつけるようにしましょう。

■2件目
こちらは後輩の話です。

知識や技術は全然無い後輩でした。ある日、上司から後輩の進捗が悪いので、見てこいと言われました。後輩に聞いたらネットワーク接続出来ないとの事でした。

WindowsにVirtualBox入れて、その上にLinuxだったかな?を入れて更にその上に、業務特有の専用VM、専用OSを入れてました。以下のような構成です。

専用OS
専用VM
Linux
VirtualBox
Windows
ホストPC

一番下のWindowsから一番上の専用OSに通信(業務特有の通信)出来ませんでした。一応全てNATにはなってたので(後輩は何故NATが必要かも解って無かったと思います)、通信出来てもおかしくはなかったのですが、駄目でした。

最初に私が確認したのはpingです。

確かLinuxと専用OSの間は問題有りませんでした。(結構前の話なので、曖昧です。すみません。)

次にWindows、専用OS間のpingを試すと片方向のみpingが通りました。Windowsから専用OSはOKで、専用OSからWindowsが駄目でした。

じゃあ間違くWindows側のファイアウォールだろうとWindowsとセキュリティーソフトの設定見直ししましたが問題有りませんでした。

此処で行き詰まりました。

最初から試すべきでしたが、試行錯誤してる中で、WindowsとLinux間もpingを試して、WindowsからLinuxはOKで、LinuxからWindowsが駄目でした。ということで、専用VM側は関係無いと分かりました。

これでNGの範囲が大分限定されました。が、普段WindowsとVirtualBox上のLinux間の通信異常なんて有り得ないので、やはり苦戦しました。

何度か繰り返し設定見直ししていると、Windowsでipconfigを打った時にMACアドレスがふと目に留まりました。どこかで見たと思ったら、LinuxのMACアドレスだったのです。

後輩に聞いたら、要領を得ない何とも曖昧な回答でした。ごまかそうとしてたんだと思います。多分後輩がVirtualBoxの設定でMACアドレスを変更したのでしょう。それを何故かWindowsのものと一緒にしてしまったと。

正直最初から専用VMと専用OSを疑ってました。これらの実績は圧倒的に低かったためです。Windows、VirtualBox、Linuxの間で通信異常なんて有り得ないと思い込んでいました。

解析する時は思い込んでしまったら駄目ですね。全て怪しいと考えて作業しなければなりません。

2018年9月12日水曜日

【ESXi】ログ確認

/var/log/messages
#直接lessなどで見てもよいが/var/log配下をscpでlinuxに転送すれば各種コマンドが使える。
VMの調子が悪く、その直前の時間に↑のログにエラーが出てた。

2018年9月7日金曜日

【Linux】フォルダ容量確認(再帰無し)【コマンド】

du -sh *

●解説

  • 容量の大きいファイルやディレクトリの特定に使用できる。
  • -s:フォルダの合計のみ表示する。
  • -h:G(ギガ)、M(メガ)、K(キロ)で表示する。

●使い方

  1. 実行後に一番大きいディレクトリにcdコマンドで移動(下図ではusr※)
  2. 再度du -sh を実行し、手順1.に戻る。(最下層まで繰り返す。)

※ usr配下はWindowsのプログラムフォルダに該当するため、実際は削除してはいけない。

●実行画面



2018年9月5日水曜日

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

watch :
# ウォッチ スペース コロンと打つだけ

●実行前


●実行中(2秒ごとに時計が更新される。)

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

●解説
watchコマンドは一定周期にコマンドを実行するコマンドで、無限ループ+sleep+clear+任意のコマンドと同等の事ができる。

:(コロン)は何もしないコマンドなので、何もしないコマンドを無限に実行し続ける。上図では、2.0s: :の右側のコロンが該当する。

watchは一定周期でコマンドを実行すると共に現在時刻も表示するので時計の代わりになる。

クライアントPCは時刻がずれていたりするので、TeraTermでこのコマンドを実行・表示しながら試験すれば、エビデンス取得出来る。

【Linux】複数ファイル一括置換【コマンド】

sed -i "s/aaa/bbb/g" *.txt
#aaaをbbbに置換

2018年3月8日木曜日

【Linux】コマンドのプログレス表示(リアルタイム表示)を加工する

■CentOSの場合
./progress.sh | xargs -n 1 -d '¥x0D' | sed -u "s/copied/【copy progress report】/g" | awk -v ORS="¥r" '{print;}'

■Ubuntuの場合(CentOSでもできるかも)
./progress.sh | xargs -n 1 -d '\x0D' | sed -u "s/copied/【copy progress report】/g" | ruby -pe 'sub("\n", "\r")'

■加工内容の変更
sedの引数を変更すると加工内容を変更できる。 -eで正規表現使用可能。
上記では、copiedを【copy progress report】に変換している。

■補足
・sedだけいけると思いきや、プログレス表示は、CRしか来ないのでsedが実行されない。sedはLFを待ってから実行されるみたい。そのため、xargsでCRが来る度にパイプ先に渡すようにする。次にsedで加工。xargsでLN改行したので、最後にawkやrubyでCRに戻す。
・awkやrubyのバージョン、Linuxの種類によって、できたりできなかったりする。

◆例) 以下のようなprogress.sh(中身はかなりテキトー)があったとする。
#!/bin/bash

for i in `seq 1 100`; do
  complete=`expr ${i} \* 10`
  echo -en "copied $complete/1000KB (${i})%\r"
  sleepenh 0.1 > /dev/null
done
echo
※Ubuntuでしかもsudo apt install sleepenhが必要。CentOSの場合はusleepに読み替えること。

このprogress.shを実行すると、以下のように表示される。

加工コマンドをかますと、以下となる。