Как получить серийный номер привода от точки монтирования?

Если lsblk -o NAME,SERIAL,MOUNTPOINT включает в свой вывод следующее:

 sdb X55MM4827123 └─sdb1 └─luks-4d0dc651-9aa6-452d-9442-7b33d95f8427 /run/media/main/mydrive 

Что такое простая консоль / команда CLI, которую я могу использовать для получения серийного номера ( X55MM4827123 в этом случае), когда я предоставляю точку монтирования ( /run/media/main/mydrive в этом случае)?

Ответ не обязательно должен использовать lsblk , но он должен, надеюсь, быть кратким и идеально использовать просто простые скрипты bash.

  • Какой язык сценариев или платформа использовать для загрузки веб-страниц и взаимодействия с экраном?
  • Что значит иметь в скрипте строку $ msign-prefixed?
  • Выберите последний обновленный файл из каталога и отправьте его по электронной почте.
  • Завершение записи, когда обнаружено молчание
  • Запустить демон при запуске в Fedora 13 после того, как беспроводной интерфейс вставлен
  • Есть ли графическая оболочка или среда сценариев для Linux?
  • bash scripting - wget или curl-файл с действием на основе состояния 200 или нет
  • exec <filename - что это делает?
  • 2 Solutions collect form web for “Как получить серийный номер привода от точки монтирования?”

    Эти параметры будут печатать ваш серийный диск без заголовков: lsblk -n -o SERIAL /dev/sda

    Варианты объяснены, и это можно найти на страницах man:

     -n, --noheadings Do not print a header line. 

    Эта опция удалит заголовки, такие как Serial: из выходного файла команды.

     -o, --output list Specify which output columns to print. Use --help to get a list of all supported columns. 

    Выберите информацию для печати о дисках.

    Этого будет достаточно, чтобы привести только серийный номер. К сожалению, lsblk не работает с lsblk монтирования, поскольку serial является атрибутом диска, а не раздела. Взглянув на synopsis :

     Synopsis lsblk [options] lsblk [options] device... 

    Вам нужно будет сделать огромные усилия, чтобы извлечь из точки монтирования раздел, обрезать информацию о диске и затем lsblk его в качестве параметра в lsblk . Это, вероятно, сделает трюк:

     mount| grep /run/media/main/mydrive | awk 'NR==1{print $1}'|sed 's/[0-9]*//g' 

    mount отобразит все точки монтирования, grep получит строку вашей точки монтирования, awk получит столбец раздела, а sed удалит числа, представляющие собой разделы разделов. Суммируя все:

     lsblk -n -o SERIAL `mount| grep /run/media/main/mydrive | awk 'NR==1{print $1}'|sed 's/[0-9]*//g'` 

    Насколько я понимаю, цель состоит в том, чтобы дать команду ввода в качестве точки монтирования и вывода серийного номера. Ну, это возможно с помощью небольшого скрипта, который использует немного магии awk и пакета smartmontools .

    Демо-версия:

     $ ./mount2serial.sh / [sudo] password for xieerqi: Serial Number: A22MD061520000172 $ ./mount2serial.sh /mnt/HDD [sudo] password for xieerqi: Serial Number: Z4GRCSXAT 

    И вот сам скрипт:

     #!/usr/bin/env bash if [ "$1" = "/" ] then dev=$(awk -v mount="$1" '$2 == mount{print $1}' /proc/self/mounts) else dev=$(awk -v mount="$1" '$0 ~ mount{print $1}' /proc/self/mounts) fi sudo smartctl -i "$dev" | grep 'Serial Number:' 
    Linux и Unix - лучшая ОС в мире.