如果我跑fdisk -l我得到的输出为:
Disk /dev/sda: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0003ad9d
Device Boot Start End Blocks Id System
/dev/sda1 1 1306 10490413+ 83 Linux
/dev/sda2 1307 2612 10490445 83 Linux
Disk /dev/sdb: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0003ad9d
Device Boot Start End Blocks Id System
/dev/sdb1 1 1306 10490413+ 83 Linux
/dev/sdb2 1307 2612 10490445 83 Linux
我怎样才能仅显示系统上可用的磁盘,使得它们之间可能有空格,如下所示:
/dev/sda /dev/sdb /dev/sdc
答案1
您可以使用管道来重定向输出
fdisk -l | grep ^Disk | awk -F: '{ print $1 }' | awk -F" " '{ print $2 }'
- fisk -l:获取完整磁盘输出
- grep Disk:过滤以 Disk 开头的行
- awk -F: '{ print $1 }': 获取分隔符为“:”的第一部分
- awk -F" " ‘{ print $2 }’: 获取分隔符为空格的第二部分
答案2
尝试:
cat /proc/partitions
或者
ls /dev/sd*
这将列出所有可用的分区!
答案3
这是一个 perl 版本:
fdisk -l | perl -n -e 'if (m{^Disk (\/.*):}) { print $1," "} END { print "\n"}'
印刷:
/dev/sda /dev/sdc
答案4
这里还有其他一些替代方案,如果您可以做出某些假设(我喜欢 /proc/partitions,只要您根据主要数字进行过滤,这样您就不会选择 LVM 卷等)
假设您的磁盘都是本地的(即不是 SAN):
user@host [/home/q0px]
$ ls -l /dev/disk/by-path/
total 0
lrwxrwxrwx 1 root root 9 Dec 5 01:27 pci-0000:00:1f.1-ide-0:0 -> ../../hda
如果您的分区都有 UUID(也适用于 SAN 设备)
user@host [/home/q0px]
$ ls -l /dev/disk/by-uuid
total 0
lrwxrwxrwx 1 root root 18 Dec 5 01:27 dc13d5cf-ba98-4339-99c5-0136177f7e22 -> ../../cciss/c0d0p1
如果您的分区都有标签(对于 SAN 设备也是如此):
user@host [/home/q0px]
$ ls -l /dev/disk/by-label/
total 0
lrwxrwxrwx 1 root root 18 Dec 5 01:27 boot -> ../../cciss/c0d0p1