Що позначає символ @ на початку шляху роз'єму unix домену в Linux?


17

Коли я біжу netstat --protocol unixабо lsof -Uбачу, що деякі маршрути unix-сокету є попередженими символом @, наприклад, @ / tmp / dbus-qj8V39Yrpa . Тоді, коли я запускаю, ls -l /tmpя не бачу там файла з назвою dbus-qj8V39Yrpa .

Питання в тому, що позначає цей попереджений символ @? І друге пов'язане питання - де я можу знайти файл файлу unix ( @ / tmp / dbus-qj8V39Yrpa ) у файловій системі?


1
Для чого це варто, більш сучасна ssпрограма також показує кінцеві точки сокета на кшталт "@ / tmp / .X11-unix / X0"
Брюс Едігер

Відповіді:


33

@, Ймовірно , вказує на сокет утримується в abstract namespaceякому не належить до файлу в файлової системі.

Цитуючи The Linux Programming Interface по Майкл Керріск :

57.6 Простір імен абстрактних сокетів Linux

Так званий абстрактний простір імен - це особливість Linux, яка дозволяє нам прив’язувати сокет домену UNIX до імені, не створюючи це ім’я у файловій системі. Це забезпечує кілька потенційних переваг:

  • Нам не потрібно турбуватися про можливі зіткнення з існуючими іменами у файловій системі.
  • Не потрібно від’єднувати імена шляху сокета, коли ми закінчили використовувати сокет. Анотаційне ім’я автоматично видаляється, коли розетка закрита.
  • Нам не потрібно створювати ім'я файлової системи для сокета. Це може бути корисно в середовищі chroot або якщо у нас немає доступу для запису до файлової системи.

Для створення абстрактного прив’язки ми визначаємо перший байт поля sun_path як нульовий байт (\ 0). [...]

Відображення ведучого null byteдля позначення такого типу розетки може бути важким, тому, можливо, це є причиною провідного @знаку.


2
Примітно, що символ ASCII NUL вводиться у багатьох терміналах як ^ @ ([Ctrl] + [@]), і він може відображатися як ^ @, коли відображається різними командами Unix (наприклад, GNU cat -a).
Джим Денніс

7

Згідно man 7 unix

  • реферат: адреса абстрактного сокета відрізняється тим, що sun_path [0] є нульовим байтом ( \0). Усі решта байтів у sun_path визначають "ім'я" сокета. (Нульові байти в імені не мають особливого значення.) Ім'я не має зв'язку з іменами шляхів файлової системи. Адреса сокета в цьому просторі імен надається рештою байтів у sun_path. Коли адреса абстрактного сокета повертається за допомогою getsockname (2), getpeername (2) і приймає (2), його довжина є sizeof (struct sockaddr_un), а sun_path містить абстрактне ім'я. Простір імен абстрактних сокетів - це портативне розширення Linux.

Схоже, вони є "абстрактними", тому жодної реальної контури немає у файловій системі

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.