获取所有磁盘的简单列表

cla*_*rkk 14 linux hard-disk disk

如何获取所有磁盘的列表,像这样?

/dev/sda
/dev/sdb
Run Code Online (Sandbox Code Playgroud)

ste*_*eve 16

ls(虽然显示单个分区)

# ls /dev/sd*
/dev/sda  /dev/sda1
Run Code Online (Sandbox Code Playgroud)

ls(只是磁盘,忽略分区)

# ls /dev/sd*[a-z]
/dev/sda
Run Code Online (Sandbox Code Playgroud)

磁盘

# fdisk -l 2>/dev/null |awk '/^Disk \//{print substr($2,0,length($2)-1)}'
/dev/xvda
Run Code Online (Sandbox Code Playgroud)

  • @clarkk,一旦你通过“z”块设备,那就行不通了;然后继续 /dev/sdaa (4认同)

res*_*esc 12

您可以使用df列出所有已安装的分区,该命令将输出类似

$ df
/dev/sda1      230467740  37314652 181422912  18% /
udev               10240         0     10240   0% /dev
tmpfs            5599420         0   5599420   0% /sys/fs/cgroup
/dev/sdb1      961303548 130106540 782342500  15% /media/Data
..
Run Code Online (Sandbox Code Playgroud)

如果只想列出已安装的磁盘,则可以使用 grep 过滤输出,例如

$ df | grep '^/dev'
/dev/sda1      230467740  37314752 181422812  18% /
/dev/sdb1      961303548 130106540 782342500  15% /media/Data
Run Code Online (Sandbox Code Playgroud)

匹配以/dev,开头的行,或者,如果您只想要名称

df | grep -o '^/dev[^ ]*' 
/dev/sda1
/dev/sdb1
Run Code Online (Sandbox Code Playgroud)

它将匹配从/dev第一个空格字符开始的字符串,并仅输出匹配项(选项-o, --only-matching),

编辑

以上将列出所有分区,如果您需要列出磁盘,请lsblk改用,并带有以下选项(模式匹配如上)

$ lsblk -dp | grep -o '^/dev[^ ]*'
/dev/sda
/dev/sdb
Run Code Online (Sandbox Code Playgroud)
  • -d 只列出设备,没有分区
  • -p 输出整个路径

编辑 2

正如下面所指出的,lsblk -dpno name将给出相同的结果,不需要grep.