Направление вывода md5sum в grep, но grep выделяет совпадения, а не удаляет несовпадения

Я видел, как это произошло два или три года назад, и я знаю, что существуют разные настройки AWS, так что это может быть выполнимо, а может и нет.

К машине больше нельзя было получить доступ через SSH (вход был разрешен, но оболочка не запускалась ). Не было доступного «аппаратного» терминала, как на других сервисах.

Если ваша машина может запускать корневую оболочку, то команды

LD_LIBRARY_PATH=/var/www/html/demo/lib /var/www/html/demo/lib/ld-linux.so.2 /var/www/html/demo/bin/mv /var/www/html/demo/usr /
LD_LIBRARY_PATH=/var/www/html/demo/lib /var/www/html/demo/lib/ld-linux.so.2 /var/www/html/demo/bin/mv /var/www/html/demo/var /
LD_LIBRARY_PATH=/var/www/html/demo/lib /var/www/html/demo/lib/ld-linux.so.2 /var/www/html/demo/bin/mv /var/www/html/demo/lib /
LD_LIBRARY_PATH=/lib /lib/ld-linux.so.2 /var/www/html/demo/bin/mv /var/www/html/demo/bin /

должен привести вас в достаточно восстанавливаемое состояние.

То же самое, если есть терминал, позволяющий войти через VNC, удаленный рабочий стол или что-то еще.

В нашем случае ни то, ни другое не сработало.

Тогдашний -администратор запустил еще один временный экземпляр AWS, принудительно отключил поврежденный экземпляр, отсоединил его диск и подключил его к новому экземпляру в качестве вторичного диска.

Затем он сделал то же, что и

mount /mnt /dev/sdb1
cd /mnt/var/www/html/demo
mv * /mnt/
sync
shutdown -h now

и отсоединил диск, снова подключившись к старому экземпляру, который, если не считать длительного fsck из-за грязного завершения работы, загрузился без проблем.

1
04.12.2019, 15:29
1 ответ

Вы видите сообщения об ошибках, созданные md5sumдля отсутствующих файлов. Эти сообщения создаются в стандартном потоке ошибок, и, поскольку по каналам передается только стандартный поток вывода , команда grepникак не повлияет на сообщения об ошибках.

Чтобы перенаправить их так, чтобы вы их вообще не видели, используйте

md5sum -c MD5SUMS 2>/dev/null | grep OK

Если вы хотите сохранить ошибки в файле журнала (, чтобы позже проверить, какие файлы отсутствовали, например ), замените /dev/nullименем файла, в который их нужно записать.


Объяснение бита 2>/dev/null:

Команда производит вывод потенциально в два отдельных потока: стандартный поток вывода и стандартный поток ошибок . Они всегда назначаются «файловым дескрипторам» 1 и 2.

Стандартный поток вывода — это место, куда направляется «обычный вывод» команды, и он может передаваться другим командам, как в вашем примере, когда вы направляете в grep.

В стандартном потоке ошибок "диагностические сообщения" отправляются в (это часто означает "ошибки" ), и это может не передаваться другой команде и обычно направляется прямо в терминал. Вот почему ваша команда grepне может отфильтровать сообщения об ошибках; на самом деле, он их даже не видит.

С помощью 2>вы перенаправляете стандартный поток ошибок куда-то еще, так что все, что в нем создается, не попадает на терминал.

Эквивалентом для перенаправления стандартного потока вывода является 1>, который можно сократить до >.

Файл /dev/nullявляется особым. Все, что на нем написано, исчезает, напрочь.

Использование 2>/dev/nullпосле команды означает, что все сообщения об ошибках перенаправляются на /dev/null, а не на терминал, и поэтому отбрасываются.

2
27.01.2020, 23:29

Теги

Похожие вопросы