web-dev-qa-db-ja.com

「rhash」で更新機能を使用する方法

Ubuntuサーバー14.04で「rhash」を使用してmd5チェックサムを含む既存のファイルを更新するのに問題があります。

これが私のスクリプトです:

#!/bin/bash

Sudo rhash -r -u --md5 /checksum/these/files --output=/checksum/these/files/checksum.md5

Rhashのマニュアルでは、「-u」はファイルの最後に新しいチェックサムを追加しますが、bashスクリプトを実行すると、出力ファイルは完全に空になり、内容はまったくなくなります(以前に保存したチェックサムもリストから削除されます)。

スクリプトで何か間違ったことをしていますか?または、「-u」オプションを誤って解釈していますか?あなたの天才が私に与えることができるどんな助けも素晴らしいだろう=]

3
Pete Duggan

rhash手動 状態(強調鉱山):

-u、-update

コマンドラインで指定されたハッシュファイルを更新します。プログラムは計算し、更新されたハッシュファイルにハッシュをフォーマットオプションで指定された形式で追加します。ハッシュは、ハッシュファイルと同じディレクトリにあるファイルに対して計算されますが、まだ存在していません。

したがって、出力は/checksum/these/filesではなく/checksum/these/files/checksum.md5に追加されます。 /checksum/these/files/checksum.md5ファイルは--outputオプションによって作成されますが、-uを使用しているため(「元のファイルを更新する」)、出力は出力されません。

例えば:

$ date > file1
$ date > file2

$ md5sum * > hashes
$ cat hashes 
909b1419ee961b556e0013929d8b667e  file1
a6de9f219de32fec651e62e3c457169e  file2

$ rhash -r -u --md5 hashes --output=new
Updated: hashes

$ cat hashes
909b1419ee961b556e0013929d8b667e  file1
a6de9f219de32fec651e62e3c457169e  file2
d41d8cd98f00b204e9800998ecf8427e  new
$ cat new
$

上記でわかるように、ファイルnewはコマンドの残りが実行される前に作成されたため、ハッシュチェックに含まれていました。 newにはhashesに関連付けられたハッシュがないため、hashesファイルに行が追加されました。


より一般的な注意事項として、不要な場合はSudoを使用しないでください。 /checksum/these/filesを変更するためにルートアクセスが本当に必要な場合は、スクリプトからSudoを削除し、SudoSudo /path/to/script.shを使用してスクリプト自体を実行します。

2
terdon