Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 提取分区数的最佳方法?_Linux_Bash - Fatal编程技术网

Linux 提取分区数的最佳方法?

Linux 提取分区数的最佳方法?,linux,bash,Linux,Bash,假设磁盘上只有主分区,那么找到当前分区数的最佳方法是什么 有没有比以下更好的方法: fdisk -l > temp #Following returns first column of the last line of temp e.g. /dev/sda4 lastPart=$(tail -n 1 temp | awk '{print $1}') totalPartitions=$(echo ${lastPart:8}) $totalPartitions变量有时返回NULL。这就是为什

假设磁盘上只有主分区,那么找到当前分区数的最佳方法是什么

有没有比以下更好的方法:

fdisk -l > temp
#Following returns first column of the last line of temp e.g. /dev/sda4
lastPart=$(tail -n 1 temp | awk '{print $1}')
totalPartitions=$(echo ${lastPart:8})
$totalPartitions变量有时返回NULL。这就是为什么,我想知道是否有更可靠的方法来查找当前的分区数。

关于:

totalPartitions=$(grep -c 'sda[0-9]' /proc/partitions)
?


其中,sda是您感兴趣的磁盘的名称,请将其适当替换

我在编写脚本以安全擦除测试和重新配置存储(有时是存储卡)时发现了这个问题,因此mmcblk0p1通常是其分区的格式

以下是我的答案:

diskICareAbout="sda"
totalPartitions="$( ls  /sys/block/${diskICareAbout}/*/partition  | wc -l )"

/进程/分区是古老而扁平的。sys文件系统可以很好地沟通分区的继承人性质,因此不需要grep。

谢谢。这是一个更有效的解决方案。请注意,尽管大多数类UNIX操作系统支持procfs,但只有Linux afaik支持与进程无关的信息,如/proc/分区。换句话说,这可能会在FreeBSD上失败。出于某种原因,所以我刚刚告诉我,在我编辑上述文章时,此评论可能不再被编辑,因此我将添加此评论。傻的此外,特定于Linux的“sdX”也只能在相当现代的系统上工作,因为较旧的Linux内核区分使用PATA或SCSI的驱动器,正如您可能记得的那样,PATA驱动器传统上以“hdX”的形式出现。并非所有的块设备都是sdX格式的名称。想想旧的hd系列,不太旧的mmcblk存储卡,虚拟机和循环设备中的vdX磁盘,它们也可以有分区。@比利:是的,问题是关于计算单个磁盘上的分区,所以你大概知道你感兴趣的磁盘的名称。我已经更新了这个问题,希望能澄清这一点。