Как использовать функцию обновления в 'rhash'
У меня проблемы с использованием 'rhash' для обновления существующего файла, содержащего контрольные суммы md5 на сервере Ubuntu 14.04.
Вот мой сценарий:
#!/bin/bash
sudo rhash -r -u --md5 /checksum/these/files --output=/checksum/these/files/checksum.md5
В руководстве по rhash говорится, что '-u' добавит любые новые контрольные суммы в конец файла, но когда я запускаю свой bash-скрипт, выходной файл становится полностью пустым / без содержимого (он даже удаляет ранее сохраненные контрольные суммы из списка).
Я что-то не так делаю в своем сценарии? Или я неправильно интерпретирую опцию -u? Любая помощь, которую вы, гении, можете мне оказать, была бы потрясающей =]
1 ответ
rhash
ручные состояния (выделение мое):
-у, - обновить
Обновите хеш-файлы, указанные в командной строке. Программа вычисляет и добавляет хэши в обновленный хеш-файл в формате, заданном опциями форматирования. Хэши рассчитываются для тех файлов из той же директории, что и хеш-файл, которых еще нет в нем.
Итак, вывод добавляется в /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
когда это не нужно. Если вам действительно нужен root-доступ для изменения /checksum/these/files
, удалить sudo
из скрипта и запустить сам скрипт с sudo
: sudo /path/to/script.sh
,