Как написать bash-скрипт, который бы получал младшие и старшие номера устройств /dev/random

Я пытаюсь запустить программу в изолированной среде, и это необходимо /dev/random как ресурс. Вручную я могу сделать ls -l на нем, а затем создайте файл снова с mknod c xx yy, но мне нужно сделать это автоматически, и я не думаю, что эти номера версий постоянны от версии Linux к другой, поэтому у меня следующий вопрос:

Как я мог написать скрипт bash, который бы извлекал младшие и большие числа /dev/random и использовать его с mknod? я могу использовать ls -l но я не знаю, как извлечь его подстроку...

Точное возвращение ls -l /dev/random является:

crw-rw-rw- 1 root root MINOR, MAJOR mars  30 19:15 /dev/random

и два числа, которые я хочу извлечь, это МИНОР и ОСНОВНЫЕ. Однако, если есть более простой способ создать узел без ls и mknod, я был бы признателен.

3 ответа

Решение

Вы можете получить основные и вспомогательные номера устройств с stat:

MINOR=`stat -c %T /dev/random`
MAJOR=`stat -c %t /dev/random`

Затем вы можете создать узел устройства с помощью:

mknod mydevice c "$MAJOR" "$MINOR"

Другой подход (который не требует парсинга номеров устройств) заключается в использовании tar создать архив с подробной информацией о файлах устройства в:

cd /dev
tar cf /somewhere/devicefiles.tar random null [any other needed devices]

затем

cd /somewhere/chroot-location
tar xf /somewhere/devicefiles.tar

Этот последний метод имеет то преимущество, что он не опирается на -c возможность stat, который является расширением GNU.

Небольшое улучшение эффективности будет заключаться в том, чтобы сделать только один вызов (и использовать имена переменных в нижнем регистре, как это принято для всех переменных, кроме встроенных и переменных среды в оболочке):

read minor major < <(stat -c '%T %t' /dev/random)

Кстати, в системе GNU я бы предложил использовать cp -a чтобы скопировать ваши файлы устройств из белого списка в chroot во время установки:

cp -a /dev/random /your/chroot/dev/random

Попробуй это.

ГЛАВНЫЕ =ls -l /dev/random | awk '{ print $5}'

МАЛЫЕ =ls -l /dev/random | awk '{ print $6}'

Другие вопросы по тегам