уникальный идентификатор компьютера linux

Как узнать UUID в Linux

UUID (Universally Unique identifier) — это 128 битный уникальный номер, стандартизированный Open Software Foundation. UUID помогает идентифицировать разделы в системах Linux. Он генерируется с помощью библиотеки libuuid (используемой e2fsprogs), которая является частью util-linux. Доступна сразу после установки Linux начиная с версии ядра 2.15.1.

UUID создается в локальной системе и всегда уникален.

Если ваша система использует много хранилищ данных, таких как SAN, ISCSI и т. д., то у UUID появляется преимущество. Каждый раз, когда вы перемещаете хранилище, вам не нужно беспокоиться об обновлении /etc/fstab.

В этой статье вы узнаете, как найти UUID накопителей в системе Linux.

Формат UUID

UUID отображается в пяти группах, разделенных дефисами, в виде 8-4-4-4-12 в общей сложности 36 символов.

Как узнать (найти) UUID

В системах на базе Linux/Unix вы можете использовать некоторые утилиты командной строки для поиска UUID устройств. Вы можете найти UUID всех разделов диска системы Linux с помощью команды blkid. Чтобы найти UUID разделов диска, подключенных к вашей системе, выполните следующую команду.

Вы получите следующий результат:

Использование команды lsblk

Вы можете найти UUID разделов устройств с помощью команды lsblk. Например чтобы вывести список UUID разделов устройств, выполните следующую команду lsblk.

Ответ терминала будет следующим:

Kak uznat uuid v linux 2Вывод списка UUID с помощью команды lsblk

Использование команды ls

В системах Linux сделано так что ОС показывает все устройства как файлы. Таким образом, разделы UUID хранятся в виде файла.

Вы можете перечислить все UUID разделов с помощью команды ls. Для этого вам потребуется ввести:

Ответ в терминале вы увидите следующий.

Kak uznat uuid v linux 3Перечисление UUID с помощью команды ls

Заключение

Помните, что UUID будет не очень полезен при работе на ноутбуках или домашних компьютерах. Там где обычно не используются высококачественные устройства хранения данных.

Источник

Уникальные идентификаторы в GNU/Linux

Когда Вы пишете программу, которая должна взаимодействовать с приложениями, запущенными другим пользователем, в другой сессии или на другом компьютере, возникает необходимость в использовании уникальных идентификаторов. Они могут быть привязаны к различным аппаратным и программным объектам, либо присваиваться каждому процессу на время его выполнения. И зачастую, при выборе идентификатора, программист совершает ошибку.

Так начинается опубликованная на 0pointer.de короткая, но содержательная статья, посвящённая различным, уникальным и не очень, идентификаторам, которыми можно пользоваться в Линуксе. Также в статье рассмотрены их достоинства и недостатки, принципы работы и почему некоторые из них применять не стоит.

33341:190287848

46624:451269365

статья даже не на русском. о чём новость?

17874: 956385910

Нет пророка в своём отечестве.

Use /var/lib/dbus/machine-id! Use /proc/self/sessionid! Use /proc/sys/kernel/random/boot_id! Use getuid()! Use /dev/urandom! And forget about the rest

Не знаю, у кого как, а у меня /proc/self/sessionid совпало на всех машинах (4294967295). Очень уникальный номер.

Вроде бы на ссылку «Новости» нажимал, а тут такое вылезло.

Источник

Как узнать UUID диска в Linux

Но у этого метода есть и недостаток. UUID рассчитывается на основе метаданных раздела или диска, поэтому если вы измените его размер, UUID тоже изменится, что приведет к поломке системы и вы не сможете загрузится. Исправить ситуацию можно только указав правильный UUID.

Как узнать UUID диска в Linux

Давайте разберем как узнать UUID диска в Linux. Все диски и разделы перечислены в виртуальном каталоге /dev/. Здесь есть подкаталог /dev/disk/by-uuid/ в котором вы можете посмотреть UUID идентификаторы всех подключенных к системе дисков. Для этого выполните:

Snimok ekrana ot 2019 02 16 14 52 35

Строки состоящие из большого количества цифр и букв, подсвеченные бирюзовым цветом и есть UUID.

2. blkid

Ещё для просмотра UUID можно использовать утилиту blkid. Её необходимо запускать от имени суперпользователя, но она показывает информацию только по нужному вам разделу. Например, чтобы посмотреть UUID раздела /dev/sda6 выполните:

sudo blkid /dev/sda6

Snimok ekrana ot 2019 02 16 14 55 19

Здесь UUID выводится в таком формате:

Эту строчку уже можно целиком вставлять в /etc/fstab или настройки загрузчика grub. Утилита позволяет посмотреть информацию для нескольких устройств:

Snimok ekrana ot 2019 02 16 14 57 27

3. lsblk

Snimok ekrana ot 2019 02 16 14 58 00

4. Графический интерфейс

Если вы не хотите использовать терминал, то всегда можете посмотреть UUID в графическом интерфейсе. Для этого используйте утилиту Gnome Disks. Её можно найти в главном меню операционной системы:

Snimok ekrana ot 2019 02 16 15 06 06

Для просмотра UUID просто выберите нужный жесткий диск и кликните по разделу, для которого нужно посмотреть информацию:

Snimok ekrana ot 2019 02 16 14 59 59

Выводы

UUID довольно часто используется при работе с разделами в Linux несмотря на то, что обычные имена разделов намного удобнее и проще запоминаются. Надеюсь, эта информация была полезной для вас.

Источник

получить уникальный идентификатор машины

Постоянно использую один внешний hdd, загружая с него Linux систему на разных машинах. Хочу написать скрипт для автоматизации рутинных действий по индивидуальной настройке hardware с вызовом разных программ для разных машин.

Т.е. напр.
If (Home)
cp /etc/X11/xorg-home.conf. /etc/X11/xorg.conf

if (Notebook)
/etc/init.d/wpa_supplicant start
и т.п

Вот только как отличать друг от друга различные компьютеры в скрипте? Нужен уникальный идентификатор машины.
По смыслу подошел бы например серийный номер. мат. платы, процессора или что-то в этом духе, но как получить эту информацию в скрипте я не знаю.
Думал про легко доступные вещи типа MAС-адреса сетевых карточек и серийников hdd но это будет не очень надежно (сетевух может быть много, hdd может поменяться и тп.).
Есть ли ещё какие-то доступные из скрипта id, которые можно использовать в качестве уникального идентификатора машины?

21851:909326385

14423

Может подойдёт вывод dmidecode.

65199: 1211342542

Как насчет hostname?

p

Только не hostname, а hostid. Хотя это все равно что взять mac от первой сетевой карты в системе, вроде от него вычисляется. Главное чтобы /etc/hostid не сушествовал.

102595:767500747

Он же сам не меняется =/

99907:88260428

dmidecode | grep UUID — уникальный id мат платы.

$ cpuid | grep «Processor serial»
Processor serial: 0001-06CA-0000-0000-0000-0000

dmidecode | grep UUID — уникальный id мат платы.

Чтобы SPD прочитать нужен модуль.

От рута dmidecode возвращает искомый UUID безо всяких modprobe eeprom, но насколько я понял условие задачи, рута может и не быть. Не говоря уже о том, что modprobe сам по себе требует рута.

Может не eeprom, у меня он тоже не загружен, i2c может быть. Не важно, раз от рута работает.

p

The processor serial number was introduced on Intel Pentium III, but due to privacy concerns, this feature is no longer implemented on later models (PSN feature bit is always cleared).

dmidecode от юзера у меня «not found»

А у меня «/dev/mem: Permission denied» даже после добавления юзера в группу kmem и выдаче kmem прав на запись в /dev/mem (право на чтение у kmem и так есть).

Скопировал dmidecode /usr/sbin/ в /usr/bin/ и получил то же самое.

даже после добавления юзера в группу kmem и выдаче kmem прав

Похоже не в правах дело. Даже после chmod 777 на /dev/mem

# dmidecode 2.11
/dev/mem: Operation not permitted

95880: 586040509

ядро не дает напрямую читать, защита включена

Что за защита кроме прав? Уже интересно. Руту дает, юзеру не даёт, Как знает кто есть кто?
Куски стрейса, на /dev/mem 777. Рут:

p

Лол, и что это должно дать?

p

В ядре может быть что угодно. man capabilities

Вот тебе и уникальный идентификатор

Вместо lsusb выбрать что-то по стабильней lspci к примеру

78421:1600313348

dmidecode | grep UUID — уникальный id мат платы.

очень уникальный у моего десктопа 🙂

95880: 586040509

А не, походу ошибся, у меня даже руту не даёт.

14423

но насколько я понял условие задачи, рута может и не быть.

Это в какой системе можно писать в /etc/X11/ обычному пользователю?

29379:364440523

От рута dmidecode возвращает искомый UUID безо всяких modprobe eeprom, но насколько я понял условие задачи, рута может и не быть. Не говоря уже о том, что modprobe сам по себе требует рута.

А системные конфиги ты собрался от пользователя менять, а не от рута? И init-скрипты тоже запускать от пользователя будешь?

78421:1600313348

🙂 Там далее в простыне был вендор материнской платы ASRock. Я к тому, что на самосборных ПК этот UUID считать уникальным рискованно.

111506:869939704

Вот только как отличать друг от друга различные компьютеры в скрипте? Нужен уникальный идентификатор машины.

Они создаются при разметке устройства.

PS: важно: их можно клонировать командой dd.

111506:869939704

мамка тоже может поменяться. Как раз hdd удобнее, если ты его на другую мамку сунул или клонировал.

78421:1600313348

Поскольку с получением по-настоящему уникального железного идентификатора машины вылезают всякие проблемы, я бы разово создал через uuidgen и хранил где-нибудь на каждом хосте метку.

111506:869939704

тоже годное решение. Но я просто задаю hostname уникальный, и немного осмысленный.

Значит, я недопонял условие задачи, только и всего.

14703: 1516020329

да ты, похоже, вообще топ не читал, там же первой строкой идёт:

Постоянно использую один внешний hdd, загружая с него Linux систему на разных машинах.

и как тут без рута?

p

14423

А где хранить метку то? Ведь по условиям задачи речь идёт о загрузке разного железе с одно и того же внешнего винта. Нет никаких гарантий, что в системе есть другие диски, и что там есть место что-то хранить.

78421:1600313348

Тогда я бы взял MAC в качестве идентификатора. Вероятность обмена местами сетевых карт на двух хостах низка, а сложность других методов автоопределения снижает общую надёжность самого автоопределения.

В конце концов, если у скрипта возникают сомнения в достоверном определении, можно и у пользователя спросить, какой сценарий выполнять дальше.

Постоянно использую один внешний hdd, загружая с него Linux систему на разных машинах.

Для того, чтобы загрузить ту или иную ОС (в частности, Linux) с того или иного устройства, не нужен не то, что рут, но и вообще какая-либо учетка в этой ОС. Для дальнейшей работы в загруженном Linux рут вообще говоря не принципиален и даже вреден. Другое дело, что «скрипт для автоматизации рутинных действий по индивидуальной настройке hardware с вызовом разных программ для разных машин» без рута не обойдется, кто бы спорил.

21851:909326385

да, рут присутсвует, сетевых карточек а также, других hdd может и не быть.

За dmidecode спасибо, на retail системах это может быть решением.

hostid прямой связи с mac не имеет, определяется софтом и насколько я понимаю тупо может быть изменен в любой момент вызовом sethostid().

Но вообще как подсказал qbe
информация dmidecode не очень то и надежная и в ряде случаев производители на неё забивают.

Лучше и проще всего MAC адрес.

65199: 1211342542

Я предложил hostname потому что для меня это самый удобный способ идентификации машины. Зачем же привязываться к железу, если можно просто дать человекочитаемое название, для чтения которого не нужен root?

65199: 1211342542

Не понял, нужен динамический id? Если ты о том, чтобы ручками изменить hostname, то это делается за минуту.

34387: 474426391

да, рут присутсвует, сетевых карточек а также, других hdd может и не быть.

вообще я бы посоветовал не привзываться к идентификации «машины» как цельного объекта, а привязываться к тому, что ты в данный момент хочешь настроить.

например:
if(видеокарта hd8700)
cp /etc/X11/xorg.conf.hd8700 /etc/X11/xorg.conf

.
if(есть вай-фай карта с маком 00:ab:cd:ef )
service networkManager start

Идея хорошая, но например для моего «Intel(R) Core(TM) i7-2630QM» никаких serial в /proc/cpuinfo не наблюдается

14423

информация dmidecode не очень то и надежная

Там много строк, не обязательно привязываться к конкретному параметру, можно сразу к нескольким. И вы же пишите под себя, под конкретные компьютеры, зачем сразу же думать о плохом 🙂

А так, компьютерное железо позволяет сделать полные клоны, если прозводитель забъёт на id, ЕМНИП, как-то давно видел материнки у которых всё было по нулям, даже MAC-адреса встроенных сетёвок.

21851:909326385

вообще я бы посоветовал не привзываться к идентификации «машины» как цельного объекта, а привязываться к тому, что ты в данный момент хочешь настроить.

нет, udev для моих задач не удобен. При появлении каждого устройства надо будет добавлять его руками в udev.rules. Идентификация устройства в ряде случаев будет сложнее инициализации, каждый раз надо думать по какому id, шине и пр. опознавать устройстово, копировать серийники из /sys и т.п. Кроме того ну не делать же через udev вещи типа «поставить на разных машинах разные обои» 🙂

Для моих задач проще сначала опознать машину и сделать для неё скриптами доп. инициализацию всех устройств и настройку программ в зависимости от роли этой машины. А при появлении нового девайса не морочиться с его опознанием и добавить строчку инициализации в скрипт.

Вообщем как и ожидалось простого и универсального решения не существует, для себя попробую пока такой вариант

При появлении каждого устройства надо будет добавлять его руками в udev.rules

чем это отличается от

А при появлении нового девайса не морочиться с его опознанием и добавить строчку инициализации в скрипт.

по-моему абсолютно одно и та же последовательность действий при определенном навыке.

Источник

Получить уникальный идентификатор компьютера в Python для Windows и Linux

Есть идеи, как это сделать?

12 ответов

Как насчет использования MAC-адреса в качестве уникального идентификатора?

Обсуждение здесь Получение MAC-адреса от устройств с помощью Python показывает, как получить MAC-адрес

Для python3.6 и windows необходимо использовать декодирование

Для Windows вам потребуется DmiDecode для Windows (ссылка):

Я не думаю, что есть надежный кроссплатформенный способ сделать это. Я знаю одно сетевое устройство, которое меняет свой MAC-адрес как форму сообщения об аппаратных ошибках, и существует миллион других способов, которые могут привести к сбою.

Ответ 2019 (для Windows):

Использует Windows API для получения постоянного UUID компьютера, затем обрабатывает строку, чтобы убедиться, что это действительный UUID, и, наконец, возвращает объект Python (https://docs.python.org/3/library/uuid.html), который предоставляет удобные способы использования данных (например, 128-разрядное целое число, шестнадцатеричная строка, так далее).

Проблема с MAC-адресами заключается в том, что обычно вы можете легко изменить тему программно (по крайней мере, если вы запускаете ОС на ВМ)

В Windows вы можете использовать этот C API

Вызовите один из них в оболочке или через канал в Python, чтобы получить аппаратный серийный номер компьютеров Apple, работающих под управлением OS X> = 10.5:

Или, если вы не хотите использовать подпроцесс, (это медленно) используйте ctypes. Это для Linux без прав root.

Вы можете использовать это как:

Это должно работать на окнах:

Я нашел что-то еще, что я использую. Mac-адрес для Linux, MachineGuid для Windows, а также есть что-то для Mac.

Источник

Поделиться с друзьями
DOMA35.RU