Я просто попробовал nano
, и то, что я нашел самым удивительным, является этим, даже не предупреждает Вас, что файл только для чтения, когда Вы начинаете пытаться отредактировать файл. (ОБНОВЛЕНИЕ: По-видимому, нано 2.2 действительно предупреждает; 2.0 не делает.)
Вот (основной) сценарий, который делает это.
Это проверяет, можно ли отредактировать файл, и если Вы не можете, это выполнить "нано" как корень вместо этого.
/usr/local/bin/edit (или ~/bin/edit)
sudo= # empty is false, non-empty is true
editor=nano # XXX check $EDITOR and $VISUAL
if test -e "$1" && test ! -w "$1"; then
if test -t 0 && test -t 2; then
printf "%s is not writable. Edit with sudo? [y/n] " "$1" 1>&2
read -n 1
case $REPLY in
y|Y)
sudo=true
;;
n|N)
sudo=
;;
*)
printf "\nExpected y or n. Exiting.\n" 1>&2
exit 1
;;
esac
else
printf "%s is not writable. Fix the permissions or run \"view\" instead." "$1" 1>&2
exit 1
fi
fi
${sudo:+sudo} "$editor" "$1"
И команда я звонил view
так, чтобы можно было избежать подсказки, если Вы знаете, что не собираетесь вносить любые изменения.
/usr/local/bin/view (или ~/bin/view)
editor=nano
readonlyflag=-v
"$editor" $readonlyflag "$1"
Уже существует названная программа view
это - часть Vi/Vim, поэтому не стесняйтесь предлагать лучшее имя.
(Но я думаю, что полное внедрение этой программы сделало бы Vi view
избыточный.)
Полные версии
Нет, нет никаких общих решений. Единственный способ проверить, поврежден ли файл, состоит в том, чтобы попытаться считать его; только программное обеспечение, которое знает, как читать, что конкретный формат может сделать это.
То, что Вы могли сделать, использовать file
определить тип файла и затем использовать тип для выбора соответствующей программы для проверки файла. Вы могли записать сценарий как это:
# /bin/bash -eu
FILENAME=$1
FILETYPE="$(file -b $FILENAME | head -1 | cut -d , -f 1)"
case "$FILETYPE" in
"gzip compressed data") CHECKER="gunzip -t" ;;
# many, many more lines here
*) echo "Unknown type: $FILETYPE"; exit 1 ;;
esac
$CHECKER $FILENAME
Но у Вас была бы большая работа, чтобы сделать для заполнения оператора выбора.
Возможно, что кто-то уже записал такой сценарий (или программа), но я не знаю ни о ком.
Если Вы знаете в какой-то момент вовремя, что файл хорош, можно сделать контрольную сумму из него и использовать его для сравнения позже, чтобы удостовериться, что это все еще цело. Это полезно прежде, чем передать файлы между носителем или через сети.
Если Вы не знаете о хорошем состоянии файла, нет нет никакого универсального пути или проверяющий на повреждение. Только определенный формат файла в каждом случае определяет то, что повреждено или не поврежденные данные.
Если Вы, оказывается, используете ZFS, или можно считать файл, и он гарантируется, не будучи поврежденным, или Вы получили ошибку чтения, и это.
Редактирование После мудрых комментариев, вот разъяснение моего ответа:
ZFS может защитить и обнаружить против тихого повреждения данных. например: http://www.zdnet.com/blog/storage/data-corruption-is-worse-than-you-know/191, Конечно, если файл уже повреждается в то время, когда он первоначально записан, нет ничего, что файловая система может сделать.
Для защиты от повреждения, которое произошло бы во время передачи файла обычные методы общего назначения являются md5sum или подобными хешами.
grep
,cat
,tar
...). Ваше решение поэтому очень чрезмерно увеличено в размерах. – rozcietrzewiacz 15.08.2011, 15:03cat
, или любая другая программа, которая рассматривает файл просто как неструктурированный поток байтов, для проверки на повреждение. Я не полагаю, что мое решение чрезмерно увеличено в размере. – Tom Anderson 15.08.2011, 16:14