xargs で指定したコマンドに引数を渡す場合の工夫

xargsは標準入力を読み込み、それを引数として指定したコマンドを実行することができます。

例えば、以下のシェルスクリプトを実行すると指定したディレクトリにある更新日時が3日前のファイルを削除することができます。

$ find /tmp -mtime +3 -type f | xargs rm 

ところが find でファイルが見つからなかった場合、 rm のオペランドが不足ということになります。

rm: missing operand
Try `rm --help' for more information.

そこで、xargs に –no-run-if-empty というオプションを指定し実行することで、ファイルがない場合の対処ができます。

$ find /tmp -mtime +3 -type f | xargs --no-run-if-empty rm

以上です。

Windows NT System and Kernel がポート80を使用している?

Windows Server 2012 にXAMPP をインストールして Apache と MySQL を使用したかったのですが、Apache が起動できなかった。
[Apache] Problem detected!
[Apache] Port 80 in use by “Unable to open process” with PID 4!
[Apache] Apache WILL NOT start without the configured ports free!
[Apache] You need to uninstall/disable/reconfigure the blocking application
[Apache] or reconfigure Apache and the Control Panel to listen on a different port

PID 4がポート80を使用しているということなので、タスク マネージャで調べてみると PID 4 は NT System & Kernel でした。

しかし、IISもインストールしていなし、このプロセスを止めるわけにはいかなそう。

サービス一覧をみてIIS関連のサービスや他の起動中サービスを眺めていたところ “SQL Server Reporting Services” が気にかかり、ためしに停止したらポート80が未使用になりました。

sdelete – Windowsでファイルを完全に消去するコマンド

Windows でファイルを完全に消去するために sdelete というコマンドツールが無償でMicrosoft TechNetから提供されています。sdelete はWindows Sysinternalsのツール群のひとつです。

このコマンドで削除したファイルはディレクトリはファイルの復元ソフトなどで復元されることがなくなるため、安全に削除する場合には必要なツールです。

このコマンドを使った便利なライフハックがありましたのでご紹介します。

Windows Sysinternalsをダウンロードして C:\sysinternals へ展開しておきます。

まず、License Agreement に同意する必要があります。コマンドプロンプトから C:\sysinternals へ移動して sdelete.exe を実行します。

> cd sysinternals
> sdelete

License Agreement のダイアログが表示されますので、内容を確認の上、Agree ボタンをクリックします。
2回目以降はこのダイアログは表示されません。

次に、このコマンドを実行するバッチファイルを作成します。メモ帳を立ち上げて以下の内容を書き込みます。

@echo off
echo .* * *W A R N I N G * * *
echo .
echo .The File(s)/Folders(s) Will Be Permanently Deleted!
echo .
echo .Press CTRL-C to Abort and Terminate Batch Job Or...
echo .
pause
sdelete -p 4 -s %1
pause

これを C:\sysinternals\shred.bat という名前で保存します。そしてこのバッチコマンドのショットカット(例:shred.bat – ショートカット)をデスクトップへ配置します。例えば、ごみ箱のとなり。。。

削除したいファイルをエクスプローラから「shred.bat – ショートカット」へドラッグ&ドロップします。
コマンドプロンプトが表示され何かキーを押すと消去が実行されます。中止するには CTRL + C キーを押下します。

shred1

ファイル名に日本語が含まれていると ???? で表示されてしまいますが、消去は実行されます。

shred2

TotoiseSVN コミットされた日時でチェックアウト

TotoiseSVN Subversion でソースコード管理を行っています。

新たなソースをリポジトリからチェックアウトすると、デフォルトの設定ではファイルのタイムスタンプがチェックアウトの日時になってしまいます。

TotoiseSVN のチェックアウトで取得したファイルのタイムスタンプをコミットされた日時で行うためには、設定ファイルを編集します。

その方法は:
1) TotoiseSVN setting の General 設定から Subversion の Subversion configuration file: の Edit ボタンをクリックします。
2) メモ帳でコンフィグファイルが開かれます。その中で use-commit-times = yes の行を探してコメント(行頭の#)を外します。
3) 保存します。

CentOS 6.7 上で SETI@home を動かしてみる

ずいぶん前から自宅のPCから SETI@home プロジェクトに参加しています。 自宅サーバーをリプレースして CentOS 6.7 にしたら以前に投稿した記事 では動作しないので改めてインストールしてみました。

事前準備として、SETI@home のアカウントを持っていることを条件としています。

また、EPEL(Fedora Extra Packages for Enterprise Linux) レポジトリを先にインストールしておきます。

# yum install epel-release

サーバー上で稼働させるので、グラフィカルユーザーインターフェースであるBOINC マネージャを使用しないで、アカウントにコンピュータを接続します。

1. boinc クライアントのインストール

# yum install boinc-client

2. アカウントにコンピュータを接続

上記ステップでクライアントをインストールすると、/var/lib/boinc ディレクトリが作成されているはずです。
このディレクトリに account_setiathome.berkeley.edu.xml というファイル名で以下の内容を保存します。

<account>
    <master_url>http://setiathome.berkeley.edu/</master_url>
    <authenticator>自分のアカウント・キー</authenticator>
</account>

※アカウント・キーの確認方法:
1. ブラウザーから、https://setiathome.berkeley.edu/index.php を表示
2. 「YOUR ACCOUNT」をクリックして、自分のアカウント情報を表示
3. 「Account information」の「Account keys」を 「View」をクリックして表示
「You can access your account either by using your email address and password, or by using an assigned ‘account key’. Your account key is:」に表示されています。

次に、ファイルの所有者を boinc に変更します。

# chown boinc.boinc account_setiathome.berkeley.edu.xml

3. boinc-client の実行

以下のコマンドを実行して boinc-client を開始します。

# service boinc-client start

処理状況は以下のコマンドで確認できます。

# boinccmd --get_simple_gui_info

または、

# boinccmd --get_state