Windows Defenderに人質にとられたNAS上のファイルをMicrosoft Security Essentialsで復元した話
この記事は所謂やっこれ(やってみた結果これができた)です。
他の環境で動く確証は全くありません。
背景
作者が公開をやめてしまった古いフリーソフトをNAS上に転がしておいたんですが、
ひょんなことからWindows10を突っ込んだ端末のWindows Defender (以下WD)によって検疫されてしまいました。
WDのGUIから許可、復元を試みたのですが、エラーコード0x80508014とか出て復元に失敗してしまいました。
セーフモードから、とか試したのですがどうしてもWindows10環境のWDではNAS上から隔離したファイルを復元出来ません。
転機
あれこれ試してもだめで、途方にくれていたのですが、
「MSの製品ならMSの製品でなんとかできるやろ」
と唐突に思いついて、
Windows 7を突っ込んだ別端末のMicrosoft Security Essentials(以下MSE)を利用して復元を試みました。
手順
- WDのQuarantineフォルダ以下をMSEのQuarantineフォルダに移植
- MSEのGUIから復元を試みた
- でけた
わかったこと
- MSEとWDとで検疫に使う処理は全く一緒
気になること
- Windows10のWDはNAS上のファイルを検疫しちゃうと復元できない場合があるんじゃないか
Cable Matters USB2.0 to 10/100 Fast Ethernet Adapter(202023-Black)を試してみる
今回試した製品
Cable Matters USB2.0 to 10/100 Fast Ethernet Adapter (202023-Black)
Amazon.co.jpだと1000円くらいで買える。
計測
例のごとくiperf使います。
計測は同じセグメントにおいてある2台のPC間で行いました。
ケーブルはCat5e、
スイッチングハブ(NETGEAR GS116E)を挟んでいます。
使ったコマンド*1(クライアント)は
iperf -c SERVADDR -t 50 -i 5
総時間50秒の計測を5秒単位でレポートさせます。
結果はこんな感じ。
------------------------------------------------------------ Client connecting to SERVADDR, TCP port 5001 TCP window size: 22.9 KByte (default) ------------------------------------------------------------ [ 3] local CLIENTADDR port 47696 connected with SERVADDR port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0- 5.0 sec 56.2 MBytes 94.4 Mbits/sec [ 3] 5.0-10.0 sec 54.4 MBytes 91.2 Mbits/sec [ 3] 10.0-15.0 sec 56.1 MBytes 94.2 Mbits/sec [ 3] 15.0-20.0 sec 56.1 MBytes 94.2 Mbits/sec [ 3] 20.0-25.0 sec 54.8 MBytes 91.9 Mbits/sec [ 3] 25.0-30.0 sec 55.8 MBytes 93.5 Mbits/sec [ 3] 30.0-35.0 sec 56.1 MBytes 94.2 Mbits/sec [ 3] 35.0-40.0 sec 56.0 MBytes 94.0 Mbits/sec [ 3] 40.0-45.0 sec 54.4 MBytes 91.2 Mbits/sec [ 3] 45.0-50.0 sec 56.1 MBytes 94.2 Mbits/sec [ 3] 0.0-50.0 sec 556 MBytes 93.3 Mbits/sec
上流が100Mbpsのネットワークに生やす口としては十分なスペックだと思います。
*1:サーバはiperf -sだけ叩いて放置
ミーティングのログ取り補助スクリプト
背景
ミーティングだとかゼミだとか云った場でログを取る時にお決まりの記述がある。
逐一入力するのが面倒だったので、
日付、時刻、何のログかと言った情報を加えたテンプレを作ってEDITORで開くという、
ログ取りの補助をしてくれるスクリプトをつくろうと思った。
簡単な設計
コマンドを叩いたら日付と簡単な記述の入ったtxtファイルを作成してEDITORで開く。
ファイル冒頭にはログ取り開始時刻を挿入し、
日付、場所、参加者、発表者、アジェンダ、ロガー、ロジなどお決まりの要素を挿入。
EDITORが閉じたあとファイル末尾にログ取り終了時刻を挿入する。
引数が与えられた場合、引数最初の1語をファイル名末尾に加え、
全ての引数を記述としてログ冒頭に挿入する。
エラー処理など
環境変数EDITORが設定されていない場合の終了処理、
引数に"-h"を与えた時の使用方法表示
スクリプト
#!/bin/sh ################################################################################ # # LOGGING ASSIST TOOL # # REQUIREMENTS: # ENVIRONMENTAL VALIABLE 'EDITOR' must be set. # ################################################################################ DATE=`date "+%Y%m%d-%H%M%S"` FNAME=${DATE}$1.txt LOGGER="YOURNAME" if [ -z "${EDITOR}" ]; then echo "ERROR: Environmental variable 'EDITOR' is NOT set." echo "Exit." exit 1 fi if [ $# -eq 1 ] && [ $1 = "-h" ]; then cat << __EOF__ LOGGING ASSIST TOOL USAGE: $0 <DESCRIPTION> This script creates a text file which is named as following sample. %Y%m%d-%H%M%S<DESCRIPTION>.txt %Y and other symbols are same as "date" command. i.e. %Y : year, %m : month ... <DESCRIPTION> is also to be inserted into first line of the header. <DESCRIPTION> can be plural words. But ONLY first word of <DESCRIPTION> is to be added into the tail of the file name. __EOF__ exit 0 fi case "$#" in 0) date "+/*%n * START LOGGING AT %H:%M%n */%n%n/*" >> ${FNAME} ;; *) date "+/*%n * START LOGGING AT %H:%M%n */%n%n/*" >> ${FNAME} echo " * "$@ >> ${FNAME} ;; esac date "+ * DATE: %Y-%m-%d%n * TIME: " >> ${FNAME} cat << __EOF__ >> ${FNAME} * PLACE: * ATTENDEES: * * SPEAKERS: * AGENDA: * * LOGGER: ${LOGGER} */ /* * LOGISTICS */ /* * SPEAKER: * SUBJECT: */ __EOF__ ${EDITOR} ${FNAME} date "+ %n/*%n * FINISH LOGGING AT %H:%M%n */" >> ${FNAME} exit 0
使い方と生成されるファイル
適当に実行権限を与えてPATHの通った所に置いて下さい。
次のコマンド*1で
実行した場合、
THISSCRIPT TEST DESCRIPTION
以下のようなファイルが出来ます。
%Y%m%d-%H%M%STEST.txt
*2
/* * START LOGGING AT %H:%M */ /* * TEST DESCRIPTION * DATE: %Y-%m-%d * TIME: * PLACE: * ATTENDEES: * * SPEAKERS: * AGENDA: * * LOGGER: YOURNAME */ /* * LOGISTICS */ /* * SPEAKER: * SUBJECT: */ /* * FINISH LOGGING AT %H:%M */
メモ取り用シェルスクリプト
簡単な設計
引数なしならyyyymmdd_HHMM.txt、引数ありならyyyymmdd_HHMM_hoge.txtってファイルをvimで開くだけ。*2
引数が2つ以上あった場合を考えるのが面倒だったので、引数が2つ以上あったらUSAGEをechoして終了。
スクリプト
#!/bin/sh DATE=`date "+%Y%m%d_%H%M"` FNAME1=${DATE} FNAME2=${DATE}_$1 if [ $# -eq 0 ]; then vim ${FNAME1}.txt elif [ $# -eq 1 ]; then vim ${FNAME2}.txt elif [ $# -gt 1 ]; then echo "USAGE(0): $0" echo "to make yyyymmdd_HHMM.txt" echo "USAGE(1): $0 <Description>" echo "to make yyyymmdd_HHMM_<Description>.txt" exit 1 fi exit 0
使い方
俺の場合は、このスクリプトを分かりやすい名前にして実行権限を与え、~/binに置いてある。
実行権限を与えてpathの通ってるディレクトリに転がしておくといいんじゃないかと。
某学会テンプレのスタイルファイルでBibTeXを使った時のトラブルと暫定的対処(無責任)
注意
暫定的に採った対処でしかありません。
これが正しい対応だという確信はありません。
本記事の内容を参考にして生じた如何なる事態にも責任は取りません。
問題の所在
某学会テンプレートのスタイルファイルを用いて論文執筆中に
いつものノリでplatex; platex; jbibtex; platex; platex; dvipdfmx;って感じでタイプセットしようとしたら
Undefined control sequence. l.hoge \newblock
と云うエラーメッセージが出てタイプセットが出来ない事態に陥った。
追記
以上の事を書いた後で少し落ち着いて奥村本を読んだ所、
\newblockを使う理由はthebibliography環境中ではピリオドとコンマの扱いが同じになる(フレンチスペーシング)ため、ピリオドの後にもう少し大きなアキを入れるために\newblockという命令を用いているとのこと。
そのため、適当にググって見つけた
Bibliography management - LaTeX Reference and Guides
を参考に
\def\newblock{\hskip .11em plus .33em minus .07em}
で\defし、上記sedの処理は現在使っていない。
Ubuntuサーバでdisk残量をチェックして警告メールを投げるシェルスクリプト
背景
先日、サーバのディスク残量が枯渇しているのに気付かず、
丸一日走らせてしまうという失態を犯して実に残念な気分になった。
こういった事態が二度と起こらないように、
ディスク容量を定期的にチェックして、利用率が閾値以上だった場合に
所定のメールアドレスに警告メールを送信するという
実に単純なスクリプトを書いた。
動作環境
HP ML110G7
Ubuntu Server 12.04 LTS
スクリプト
#!/bin/sh CAPACITY=`/bin/df / | /usr/bin/tail -1 | /bin/sed 's/^.* \([0-9]*\)%.*$/\1/'` if [ $CAPACITY -gt 80 ]; then cat << __EOF__ > /tmp/alertmail.txt From: hoge@huga.com To: foo@bar.com Subject: [ALERT] DISK CAPACITY SHORTAGE ========== ALERT ========== DISK CAPACITY IS INSUFFICIENT! __EOF__ df / >> /tmp/alertmail.txt /usr/sbin/sendmail -t < /tmp/alertmail.txt fi exit 0
そのままコピペをする前に
そのままコピペをする人なんて居ないと思うけど一応注意事項を書いておきます。
このスクリプトでは閾値を80%に設定しています。任意の数字に変更して下さい。
また、メールの送信元、宛先についても任意のアドレスを指定して下さい。
sedで何やってるかの概要
冒頭から任意の要素の繰り返し、
半角スペース、
\(0から9の数字の繰り返し\)%、
末尾まで任意の要素の繰り返し、
ってなる部分(要するに、パイプで渡したdf /の末尾1行)の
\(と\)で囲まれている部分(要するに、hoge%の数字の部分)を出力している。
cronを使って自動実行
このスクリプトに実行権限を与えてcron.hourlyにでも放り込んでおけば
1時間に1回、ディスク残量が閾値を超えていないかチェックしてくれる。
主に自分向けの注意事項
いつものシェルスクリプトのノリで*.shって名前にしてたんだけど、
run-partsコマンドで実行出来るファイル名制限に引っかかってた。
cron.hourlyの中身はrun-partsで実行するからファイル名にドットを使っていると実行されない。
その他
sendmailの設定は割愛。
Ubuntuにthe_silver_searcher(ag)をインストールする手抜きスクリプト
the_silver_searcherが何なのかは割愛。
普通にREADMEに書いてある通りなのであくまで自分用のメモ。
sudoなりrootで実行する。
俺の場合は~にgitってディレクトリを掘ってその下で以下の手順を実行する。
特に意味はないけどシェルスクリプトにしたった。
ぶっちゃけこのくらいならスクリプトにする理由もないのだがw
#!/bin/sh apt-get install automake pkg-config libpcre3-dev zlib1g-dev liblzma-dev git clone https://github.com/ggreer/the_silver_searcher.git cd the_silver_searcher ./build.sh install ag /usr/bin/ which ag exit 0
後はシェルを再起動したりreloadしたり。