3

我正在尝试在 chrooted 环境中运行程序,它需要/dev/random作为资源。手动我可以ls -l对其进行操作,然后使用 再次创建文件mknod c xx yy,但我需要使其自动运行,而且我认为这些版本号从一个 linux 版本到另一个版本不是恒定的,所以这就是我有以下问题的原因:

我如何编写一个 bash 脚本来提取 mknod 的次要编号和主要编号/dev/random并将其与 mknod 一起使用?我可以使用ls -l,但我不知道如何提取它的子字符串...

的确切回报ls -l /dev/random是:

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

我要提取的两个数字是 MINOR 和 MAJOR。但是,如果有一种更简单的方法可以在没有 ls 和 mknod 的情况下创建节点,我将不胜感激。

4

3 回答 3

5

您可以通过以下方式获取主要和次要设备号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

后一种方法的优点是它不依赖于GNU 扩展的-c选项。stat

于 2015-03-30T13:32:53.630 回答
4

对效率的一个小小的改进是只进行一次调用(并使用小写的变量名,这对于除了 shell 中的内置变量和环境变量之外的所有变量都是常规的):

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

顺便说一句,在 GNU 系统上,我建议cp -a在设置期间使用将明确列入白名单的设备文件复制到 chroot 中:

cp -a /dev/random /your/chroot/dev/random
于 2015-03-30T13:35:16.273 回答
1

尝试这个。

专业=ls -l /dev/random | awk '{ print $5}'

次要=ls -l /dev/random | awk '{ print $6}'

于 2015-03-30T13:36:30.947 回答