проверить sha1sum и распечатать каталог и имя поврежденного файла

Начиная с RHEL6, они используют Upstart для запуска процессов при загрузке. Чтобы запустить два разных X-сервера, создайте 2 отдельных сценария для запуска вашего X-сервера на :0 и :1.

start_colon_0.sh:

#!/bin/sh
su - sit -c "startx -- :0 vt4 -layout Layout0 -seat seat0 -sharevts" &

start_colon_1.sh:

#!/bin/sh
su - sit -c "startx -- :1 vt4 -layout Layout1 -seat seat1 -sharevts" &

В /etc/initсоздайте 2 файла конфигурации следующим образом:

x_server_0.conf:

start on stopped rc RUNLEVEL=5
stop on starting rc RUNLEVEL=[!5]
console output
respawn
exec start_colon_0.sh

x_server_1.conf:

start on stopped rc RUNLEVEL=5
stop on starting rc RUNLEVEL=[!5]
console output
respawn
exec start_colon_1.sh

Это запустит ваши скрипты при запуске при переходе на уровень запуска 5.

См. руководство Upstart

0
14.10.2020, 20:08
3 ответа
find. -name SHA1SUMS -exec sh -c '
  cd "${1%/*}" &&
  sha1sum --check --quiet "${1##*/}" 2>/dev/null |
    while IFS= read -r file
    do
      printf "%s\n" "${1%/*}/$file"
    done' sh {} \;

Его вывод должен соответствовать образцу, показанному в вашем вопросе, и он должен работать с произвольными путями.

В качестве альтернативы, использование awkвместо функций оболочки для добавления SHA1SUMSотносительного пути к каждому имени файла:

find. -name SHA1SUMS -exec sh -c '
  cd "${1%/*}" &&
  sha1sum --check --quiet "${1##*/}" 2>/dev/null |
    awk -v pre="${1%/*}" "{ print pre \"/\" \$0 }"' sh {} \;

Обратите внимание, что в зависимости от реализации sha1sumможет печатать измененные имена файлов. В частности, утилиты GNU *sumэкранируют некоторые символы 1 и в режиме проверки добавляют \к именам файлов, которые необходимо экранировать, делая полученный путь конкатенацией относительного пути вашего SHA1SUMSфайла. и имя файла, напечатанное sha1sum, непригодно для повторного использования.

1Руководство(sha1sumссылается на руководство md5sum), в общем говоря, "каждый проблемный символ".

4
18.03.2021, 22:57
#! /bin/bash
here=$(pwd)

find. -name SHA1SUMS | while read -r fname; do
    cd "$here" || exit
    dirn=$(dirname "$fname")
    cd "$dirn" || continue
    sha1sum --quiet --check SHA1SUMS 2>&1 | grep " FAILED" | ( echo -n "$dirn/"; cat )
done > logfile

Это сломается, если у вас есть каталоги, содержащие \n, но это крайне маловероятно.

0
18.03.2021, 22:57

Попробуйте это:

find. -name SHA1SUMS -execdir \
  sh -c 'sha1sum --quiet -c "$@" | sed "s|^|$PWD/|"' - {} +

Если каталоги действительно содержат |, вы можете использовать какой-либо другой символ в замене sed или использовать вместо него awk -v p="$PWD/" "{print p\$0}".

Если ваши пути действительно содержат новые строки , вам нужно что-то поумнее этого ;-)

-2
18.03.2021, 22:57

Теги

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