@ Sembolü Linux'ta bir unix etki alanı soket yolunun başlangıcında ne ifade eder?


17

Çalıştırdığımda netstat --protocol unixveya lsof -Ubazı unix soket yollarının @ simgesiyle eklendiğini gördüğümde , örneğin, @ / tmp / dbus-qj8V39Yrpa . Sonra çalıştırdığımda orada dbus-qj8V39Yrpals -l /tmp adlı bir dosya görmüyorum .

Soru, baştaki @ simgesinin neyi ifade ettiği? Ve ikinci ilgili soru, - aslında bu unix soket dosyasını ( @ / tmp / dbus-qj8V39Yrpa ) dosya sisteminde nerede bulabilirim?


1
ssDeğeri ne olursa olsun, daha modern program "@ / tmp / .X11-unix / X0" gibi soket uç noktalarını da gösterir
Bruce Ediger

Yanıtlar:


33

Büyük @olasılıkla abstract namespace, dosya sistemindeki bir dosyaya ait olmayan bir soketi gösterir .

Alıntı Linux Programlama Arabirimi tarafından Michael Kerrisk :

57.6 Linux Soyut Soket Ad Alanı

Özet ad alanı, UNIX etki alanı soketini, dosya sisteminde bu ad oluşturulmadan bir ada bağlayabilmemizi sağlayan Linux'a özgü bir özelliktir. Bu birkaç potansiyel avantaj sağlar:

  • Dosya sistemindeki mevcut adlarla olası çarpışmalar konusunda endişelenmemize gerek yoktur.
  • Soketi kullanmayı bitirdiğimizde soket yol adının bağlantısını kaldırmaya gerek yoktur. Soyut ad, soket kapatıldığında otomatik olarak kaldırılır.
  • Soket için bir dosya sistemi yol adı oluşturmamız gerekmez. Bu, bir chroot ortamında veya bir dosya sistemine yazma erişimimiz yoksa faydalı olabilir.

Soyut bir bağlayıcı oluşturmak için sun_path alanının ilk baytını boş bayt (\ 0) olarak belirtiriz . [...]

Lider bir görüntüleme null bytebelki lider nedeni böylece bir soket böyle türünü belirten, güç olabilir @işareti.


2
ASCII NUL karakterinin birçok terminale ^ @ ([Ctrl] + [@]) olarak girilmesi dikkat çekicidir ve çeşitli Unix komutları (GNU cat -a gibi) tarafından görüntülendiğinde ^ @ olarak görünebilir.
Jim Dennis

7

Başı man 7 unix

  • abstract: soyut bir soket adresi sun_path [0] 'ın bir boş byte ( \0) olması ile ayırt edilir . Sun_path içinde kalan tüm baytlar soketin "adını" tanımlar. (Addaki boş baytların özel bir önemi yoktur.) Adın dosya sistemi yol adları ile bağlantısı yoktur. Bu ad alanındaki soket adresi sun_path içindeki diğer baytlar tarafından verilir. Soyut bir soketin adresi getsockname (2), getpeername (2) ve kabul et (2) ile döndürüldüğünde, uzunluğu sizeof (struct sockaddr_un) olur ve sun_path soyut adı içerir. Soyut soket ad alanı taşınabilir olmayan bir Linux uzantısıdır.

Bunlar 'soyut' gibi görünüyor - bu yüzden dosya sisteminde gerçek bir yol yok

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.