Как написать 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}'