Основная проблема состоит в том, что мы хотим взять md5sum той же самой информации, которая была на ISO первоначально. Когда Вы пишете ISO в CD, существует вероятный пробел на конце диска, который неизбежно изменяет md5sum. Таким образом, очень самый короткий путь:
md5sum /dev/cdrom
не работает. То, что действительно работает (и распространено в онлайн-документации), только читает точное число байтов от устройства и затем делает md5sum
. Если Вы знаете число байтов, можно сделать что-то как:
dd if=/dev/cdrom bs=1 count=xxxxxxxx | md5sum
где 'xxxxx' является размером ISO в байтах.
Если Вы не знаете число байтов от руки, но имеете ISO на Вашем диске все еще, можно получить их использующий ls путем выполнения чего-то как следующее (взятый отсюда):
dd if=/dev/cdrom | head -c `stat --format=%s file.iso` | md5sum
Существует много других коротких конструкций, которые должны работать. Заметьте, что в каждом случае мы используем dd
для чтения байтов из диска но мы не передаем их по каналу в файл, скорее мы вручаем им md5sum немедленно.
Возможные улучшения скорости могут быть сделаны путем выполнения некоторых вычислений для использования большего размера блока ( bs=
в dd
команда).
Существуют значения стандартной погрешности, определенные в errno.h
. Можно посмотреть на этот файл в системе для наблюдения численных значений. В большинстве систем они находятся в /usr/include/errno.h
или файл, который это включает. На Linux большинство находится в /usr/include/asm-generic/errno-base.h
или /usr/include/asm-generic/errno.h
, с еще некоторыми в /usr/include/bits/errno.h
.
Если у Вас есть численное значение, назовите стандартную библиотечную функцию strerror
или perror
получить соответствующее сообщение об ошибке (в Вашей текущей локали). Из командной строки быстрым способом видеть строку ошибки является один из
perl -MPOSIX -le 'print strerror 123'
python -c 'import os; print os.strerror(123)'
zmodload zsh/system; syserror 123 # in zsh
От оболочки можно работать perror
:
$ perror 123
OS error code 123: No medium found
Это идет с MySQL.
Если у Вас нет MySQL, можно использовать Perl или Python, например:
$ perl -MPOSIX -e 'print strerror(123)'
No medium found
$ python -c 'import os; print os.strerror(123)'
No medium found
В программе C можно использовать функцию с тем же именем:
void perror(const char *s);
Это печатает Ваше сообщение s
с причиной добавленной ошибки.
Или можно использовать:
char *strerror(int errnum);
возвратить описание ошибки как строка, таким образом, можно осмотреть его или распечатать его, как Вам нравится.
Посмотрите man 3 perror
и man 3 strerror
для деталей.
perror(1)
? Я никогда не знал это. О, это от MySQL, не у всех есть это.
– Gilles 'SO- stop being evil'
28.02.2011, 23:31
Это в конечном счете заканчивается в errno.h после нескольких #include
s, Что ошибка является ENOMEDIUM, найденным в /usr/include/asm-generic/errno.h
. Вы размонтировали его прежде, чем удалить его?
Можно изучить немного утилиты, названной errno. Это - по существу некоторое хакерство оболочки, которое использует sed
вытащить информацию из заголовочных файлов, упомянутых в других ответах. Вывод похож на следующее:
$ errno 123
ENOMEDIUM 123 /* No medium found */
$ errno 111
ECONNREFUSED 111 /* Connection refused */
$ errno 122
EDQUOT 122 /* Quota exceeded */
zmodload zsh/system; echo $errnos[123]
.
– Gilles 'SO- stop being evil'
01.03.2011, 00:45