В дополнение к узлам устройств, объясненных в других ответах (созданных с помощью mknod (2) или предоставленных некоторыми devfs ), в Linux есть другие «волшебные» файлы, предоставляемые специальными виртуальными файловыми системами , в частности, в / proc /
(см. proc (5) , прочтите о procfs ) и в / sys /
(прочтите о sysfs ).
Эти псевдофайлы (которые появляются, например, в stat (2) - как обычные файлы, а не как устройства) представляют собой виртуальное представление, предоставляемое ядром; в частности, чтение из / proc /
(например, с помощью cat / proc / $$ / maps
или open (2) -ing / proc / self / status
в вашей программе) обычно не требует физического ввода-вывода с диска или сети, поэтому выполняется довольно быстро.
Чтобы создать дополнительный псевдофайл в / proc /
, вы обычно должны написать свой собственный модуль ядра и загрузить его (см., Например, this ).
Получить информацию (без разделов):
$ lsblk -a -d
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
sdb 8:16 0 40G 0 disk
sr0 11:0 1 55.3M 0 rom
-a print even empty devices (if disk is not loaded in CD/DVD device)
-d discard print slaves
Предполагая, что вы действительно хотите видеть физические устройства, а не только все блочные устройства:
Тогда моя рекомендация будет:
lsblk -a -d -e 230
Почему?
Давайте посмотрим, что делают эти параметры командной строки, на справочной странице:
-a, --all
Also list empty devices. (By default they are skipped.)
Как ни странно, lsblk
показывает DVD-рекордер моего ноутбука, даже когда он пуст, без -a
. Но, кажется, ничего не повредит, чтобы оставить его в наличии.
-d, --nodeps
Do not print holder devices or slaves. For example, lsblk
--nodeps /dev/sda prints information about the sda device only.
Это означает, что мы не видим разделов на устройстве, а только само устройство.
-e, --exclude list
Exclude the devices specified by the comma-separated list of
major device numbers. Note that RAM disks (major=1) are
excluded by default. The filter is applied to the top-level
devices only.
Наконец, я использую -e 230
, чтобы исключить zvols ZFS, которые используют этот старший номер. Это полностью логические блочные устройства, но драйвер ZFS заставляет их отображаться в lsblk
так же, как физические дисковые устройства. Если вы используете ZFS, вы можете исключить zvols из отображения с помощью -e 230
.
[root@dalaran ~]# lsblk -a -d -e 230
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 894.3G 0 disk
sr0 11:0 1 1024M 0 rom
nvme0n1 259:0 0 477G 0 disk
Я не рекомендую использовать параметр -S
, так как это приведет к тому, что устройства NVMe не будут отображаться.
На справочной странице lsblk
есть несколько других опций, которые позволяют сделать вывод более машиночитаемым, если вы хотите написать сценарий оболочки. Например, -n
и -o
или -P
.
ls -l /sys/block/ | awk '$11 != "" && $11 !~ "^../devices/virtual" { print $9; }