Ответ 1
Майкл, "изменил", вы спрашиваете, был ли затронут файл (т.е. datestamp новее), или вы спрашиваете, отличается ли контент?
Если первое, вы можете проверить это с помощью find
или test
. Например, в оболочке:
#!/bin/sh
touch file1
sleep 1
touch file2
if [ "file1" -nt "file2" ]; then
echo "This will never be seen."
else
echo "Sure enough, file1 is older."
fi
Если то, что вы ищете, является проверкой содержимого, ваша операционная система, вероятно, включает в себя что-то, что будет проверять хэш файла.
[[email protected] ~]$ date > testfile
[[email protected] ~]$ md5 testfile
MD5 (testfile) = 1b2faf8be02641f37e6d87b15444417d
[[email protected] ~]$ cksum testfile
3778116869 29 testfile
[[email protected] ~]$ sha1 testfile
SHA1 (testfile) = 5f4076a3828bc23a050be4867549996180c2a09a
[[email protected] ~]$ sha256 testfile
SHA256 (testfile) = f083afc28880319bc31417c08344d6160356d0f449f572e78b343772dcaa72aa
[[email protected] ~]$
Я во FreeBSD. Если вы находитесь в Linux, то у вас, вероятно, есть "md5sum" вместо "md5".
Чтобы поместить это в script, вам нужно будет просмотреть список файлов, сохранить их хэши, а затем создать механизм для проверки текущих файлов на их сохраненные хэши. Это достаточно легко для script:
[[email protected] ~]$ find /bin -type f -exec md5 {} \; > /tmp/md5list
[[email protected] ~]$ head -5 /tmp/md5list
MD5 (/bin/uuidgen) = 5aa7621056ee5e7f1fe26d8abb750e7a
MD5 (/bin/pax) = 7baf4514814f79c1ff6e5195daadc1fe
MD5 (/bin/cat) = f1401b32ed46802735769ec99963a322
MD5 (/bin/echo) = 5a06125f527c7896806fc3e1f6f9f334
MD5 (/bin/rcp) = 84d96f7e196c10692d5598a06968b0a5
Вы можете сохранить это (вместо/bin запустить его против любого важного, возможно, /
) в предсказуемом месте, а затем написать быстрый script, чтобы проверить файл на хэш:
#!/bin/sh
sumfile=/tmp/md5list
if [ -z "$1" -o ! -f "$1" ]; then
echo "I need a file."
exit 1
elif ! grep -q "($1)" $sumfile; then
echo "ERROR: Unknown file: $1."
exit 1
fi
newsum="`md5 $1`"
if grep -q "$newsum" $sumfile; then
echo "$1 matches"
else
echo "$1 IS MODIFIED"
fi
Этот вид script - это такие инструменты, как tripwire.