Существует простой способ извлечь все блоки из a bar
к a foo
с sed:
sed -n '/bar/,/foo/p'
или с awk:
awk '/bar/, /foo/'
Если Вы хотите усечь блоки, это немного более сложно (в awk; в sed это намного более сложно). Вот решение:
awk -vmax_lines_per_chunk=100 '
/bar/ {n=max_lines_per_chunk}
/foo/ {if (n) print; n=0}
n {--n; print}
'
Если Вы интересуетесь только устройствами блочной системы хранения, можно использовать lsblk
от широко доступного пакета util-linux:
$ lsblk -o KNAME,TYPE,SIZE,MODEL
KNAME TYPE SIZE MODEL
sda disk 149.1G TOSHIBA MK1637GS
sda1 part 23.3G
sda2 part 28G
sda3 part 93.6G
sda4 part 4.3G
sr0 rom 1024M CD/DVDW TS-L632M
Это предоставляет себя хорошо сценариям со многими другими доступными столбцами.
Попробуйте эту команду
ls -l /dev /dev/mapper |grep '^b'
Это перечислит Вас всех блочные устройства в Вашей системе
Вы могли тралить через вывод lshw
и извлечение детализирует об устройствах в disk
или tape
класс (и возможно другие - storage
класс дает, Вы детализируете на контроллерах запоминающих устройств, scsi, sata, SAS, и т.д.).
например.
lshw -class disk -class tape
-short
опция дает хорошую компактную сводку. например, на моем доме zfsonlinux server/workstation/experiment-box (никакие накопители на магнитной ленте, к сожалению):
# lshw -class tape -class disk -class storage -short H/W path Device Class Description ========================================================= /0/100/4/0 storage JMB362 SATA Controller /0/100/5/0 scsi10 storage JMB362 SATA Controller /0/100/5/0/0.0.0 /dev/sdc disk 120GB Patriot Wildfire /0/100/b/0 scsi1 storage SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] /0/100/b/0/0.0.0 /dev/sdd disk 1TB WDC WD10EARS-00Y /0/100/b/0/0.1.0 /dev/sde disk 1TB WDC WD10EACS-00Z /0/100/b/0/0.2.0 /dev/sdf disk 1TB WDC WD10EACS-00Z /0/100/b/0/0.3.0 /dev/sdg disk 1TB ST31000528AS /0/100/b/0/0.4.0 /dev/sdh disk 1TB ST31000528AS /0/100/b/0/0.5.0 /dev/sdi disk 1TB ST31000528AS /0/100/b/0/0.6.0 /dev/sdj disk 1TB ST31000528AS /0/100/11 scsi2 storage SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode] /0/100/11/0 /dev/sda disk 128GB Patriot Torqx 2 /0/100/11/1 /dev/sdb disk 1TB ST31000528AS /0/1 scsi11 storage /0/1/0.0.0 /dev/sdk disk 1967MB SCSI Disk /0/1/0.0.1 /dev/sdl disk SCSI Disk /0/1/0.0.2 /dev/sdm disk SCSI Disk /0/1/0.0.3 /dev/sdn disk SCSI Disk /0/2 scsi66 storage /0/2/0.0.0 /dev/sdo disk SCSI Disk /0/3 scsi67 storage /0/3/0.0.0 /dev/sdp disk 4057MB SCSI Disk
/0/1 устройства являются на самом деле картридером USB (существует SD-карта на 2 ГБ, включенная к одному из слотов), и/0/2 устройство является моим телефоном на базе Android, включенным для зарядки только. 0/3 устройство является картой флэш-памяти с интерфейсом USB на 4 ГБ.
lshw
может произвести простой текст, HTML, xml, и вывод json. Это может также вывести аппаратные детали в sqlite формат базы данных.
Это упаковывается для debian и большинства других дистрибутивов. Домашняя страница и источник по http://ezix.org/project/wiki/HardwareLiSter
Можно попробовать следующую команду:
file /dev/disk/by-id/* | awk -F'/' 'NR>1{print "\047/dev/"$NF}' | sort | uniq
Согласно Вашему ответу на derobert, при поиске чего-то, что перечисляет ленточные накопители и принтеры, можно интересоваться lsdev
, lsusb
и lspci
.
Вы можете использовать lsblk
, чтобы перечислить все блокируемые устройства, а также указать, считывается ли только каждое устройство или нет.
Затем вы можете использовать grep
и awk
для печати имен блочных устройств, которые не только читаются:
lsblk -d -n -oNAME,RO | grep '0$' | awk {'print $1'}
lsblk
выведет список всех блочных устройств хранения данных.
fdisk -l
выведет список всех разделов на всех устройствах, перечисленных в /proc/partitions
lshw -short
даст вам информацию обо всем оборудовании (кроме, возможно, firewire) в системе.
Вы можете использовать hwinfo для вывода списка всех дисков ( документация ).
hwinfo --block --short
дает обзор:
disk:
/dev/sdb WDC WD3200AAKS-7
/dev/sda SAMSUNG HD103UJ
partition:
/dev/sdb1 Partition
/dev/sdb2 Partition
/dev/sda1 Partition
cdrom:
/dev/sr1 TSSTcorp DVD+-RW TS-H653B
/dev/sr0 HL-DT-ST DVD-ROM GDRH20N
hwinfo --disk
дает более подробную информацию для каждого диска.
К вашему сведению: в некоторых дистрибутивах Linux, таких как Ubuntus 14.04 и выше, hwinfo отсутствует в официальном репозитории .
Я обнаружил, что fdisk
и lsblk
недоступны в виртуальном терминале для установщика Debian. В этом случае я использую blkid
, который получает UUID для блочных устройств хранения.
Если вы имеете в виду устройства RAID, то вы не сможете получить правильный результат, используя hdparm smartctl и т. д., потому что такие инструменты ищут /dev, который является уровнем ОС, если вы хотите знать об аппаратном уровне, вам нужно иметь такой инструмент, как megacli, который я использовал для отладки с помощью megacli
[root@ns3539186 ~]# /opt/megaraid/megacli -LDPDInfo -aAll |grep "Virtual Disks\|RAID Level\|State"
Number of Virtual Disks: 2
RAID Level : Primary-1, Secondary-0, RAID Level Qualifier-0
State : Optimal
Foreign State: None
Media Type: Solid State Device
Foreign State: None
Media Type: Solid State Device
RAID Level : Primary-1, Secondary-0, RAID Level Qualifier-0
State : Optimal
Foreign State: None
Foreign State: None
Получить серийный номер диска
[root@ns3539186 ~]# /opt/megaraid/megacli -PDList -aAll | egrep 'Slot\ Number|Device\ Id|Inquiry\ Data|Raw|Firmware\ state' | sed 's/Slot/\nSlot/g' |grep "Da ta\|Slot\|Raw"
Slot Number: 0
Raw Size: 447.130 GB [0x37e436b0 Sectors]
Inquiry Data: PHYS733402Z0480BGN INTEL SSDSC2KB480G7 SCV10100
Slot Number: 1
Raw Size: 447.130 GB [0x37e436b0 Sectors]
Inquiry Data: PHYS733402YV480BGN INTEL SSDSC2KB480G7 SCV10100
Slot Number: 2
Raw Size: 3.638 TB [0x1d1c0beb0 Sectors]
Inquiry Data: K3GJTYMB HGST HUS726040ALA610 A5GNT920
Slot Number: 3
Raw Size: 3.638 TB [0x1d1c0beb0 Sectors]
Inquiry Data: K3GHW57B HGST HUS726040ALA610 A5GNT920
В приведенном выше выводе данных запроса содержится серийный номер
Вот несколько команд, которые я использовал для поиска локального и общего хранилища.
Для локального хранения
lsblk | grep -v '^loop'
Для общего хранилища
findmnt -D | grep -v '^tmpfs' | grep -v '^/'
OR
df -kh | grep -v '^tmpfs' | grep -v '^/'