linux 如何编写一个bash脚本来获取/dev/random的次要和主要设备号

2ic8powd  于 2023-10-16  发布在  Linux
关注(0)|答案(3)|浏览(162)

我试图在chroot环境中运行一个程序,它需要/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,我会很感激的。

bf1o4zei

bf1o4zei1#

您可以使用stat获取主设备和次设备编号:

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

然后,您可以使用以下命令创建设备节点:

mknod mydevice c "0x$MAJOR" "0x$MINOR"

另一种方法(不需要解析设备编号)是使用tar创建一个包含设备文件详细信息的归档文件:

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

然后

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

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

gj3fmq9x

gj3fmq9x2#

效率上的一个小改进是只执行一次调用(并使用小写变量名,这是shell中除内置变量和环境变量之外的所有变量的惯例):

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

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

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

dffbzjpn3#

试试这个.
主要= ls -l /dev/random | awk '{ print $5}'
次要= ls -l /dev/random | awk '{ print $6}'

相关问题