如何编写一个bash脚本,它将获得/ dev / random的次要和主要设备号

时间:2015-03-30 13:26:47

标签: linux bash mknod

我正在尝试在chrooted环境中运行程序,它需要/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

我要提取的两个数字是MINOR和MAJOR。但是,如果有一种更简单的方法来创建没有ls和mknod的节点,我会很感激。

3 个答案:

答案 0 :(得分:4)

您可以使用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扩展。

答案 1 :(得分:4)

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

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

在GNU系统上,顺便提一下,我建议在安装过程中使用cp -a将明确列入白名单的设备文件复制到chroot中:

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

答案 2 :(得分:1)

试试这个。

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

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