Biểu tượng @ biểu thị điều gì khi bắt đầu đường dẫn ổ cắm tên miền unix trong Linux?


17

Khi tôi chạy netstat --protocol unixhoặc lsof -Utôi thấy rằng một số đường dẫn ổ cắm unix được thêm vào ký hiệu @, ví dụ: @ / tmp / dbus-qj8V39Yrpa . Sau đó, khi tôi chạy, ls -l /tmptôi không thấy tập tin có tên dbus-qj8V39Yrpa ở đó.

Câu hỏi đặt ra là biểu tượng @ được biểu thị đó là gì? Và câu hỏi thứ hai liên quan là - nơi tôi thực sự có thể tìm thấy tệp ổ cắm unix đó ( @ / tmp / dbus-qj8V39Yrpa ) trên hệ thống tệp?


1
Để biết giá trị của nó, sschương trình hiện đại hơn cũng hiển thị các điểm cuối của socket như "@ / tmp / .X11-unix / X0"
Bruce Ediger

Câu trả lời:


33

@lẽ chỉ ra một ổ cắm được giữ trong abstract namespaceđó không thuộc về một tệp trong hệ thống tệp.

Trích dẫn từ Giao diện lập trình Linux của Michael Kerrisk :

57.6 Không gian tên ổ cắm trừu tượng Linux

Cái gọi là không gian tên trừu tượng là một tính năng dành riêng cho Linux, cho phép chúng ta liên kết một ổ cắm tên miền UNIX với một tên mà không có tên đó được tạo trong hệ thống tệp. Điều này cung cấp một vài lợi thế tiềm năng:

  • Chúng ta không cần phải lo lắng về các xung đột có thể xảy ra với các tên hiện có trong hệ thống tệp.
  • Không cần thiết phải hủy liên kết tên đường dẫn ổ cắm khi chúng tôi đã sử dụng xong ổ cắm. Tên trừu tượng sẽ tự động bị xóa khi đóng ổ cắm.
  • Chúng ta không cần tạo tên đường dẫn hệ thống tệp cho ổ cắm. Điều này có thể hữu ích trong môi trường chroot hoặc nếu chúng ta không có quyền ghi vào hệ thống tệp.

Để tạo liên kết trừu tượng, chúng tôi chỉ định byte đầu tiên của trường sun_path là byte rỗng (\ 0). [...]

Hiển thị một đầu dẫn null byteđể biểu thị loại ổ cắm như vậy có thể khó khăn, vì vậy đó có thể là lý do cho @dấu hiệu hàng đầu .


2
Đáng chú ý là ký tự ASCII NUL được nhập vào nhiều thiết bị đầu cuối dưới dạng ^ @ ([Ctrl] + [@]) và nó có thể hiển thị dưới dạng ^ @ khi được hiển thị bởi các lệnh Unix khác nhau (như GNU cat -a).
Jim Dennis

7

Theo man 7 unix

  • trừu tượng: một địa chỉ ổ cắm trừu tượng được phân biệt bởi thực tế là sun_path [0] là một byte null ( \0). Tất cả các byte còn lại trong sun_path xác định "tên" của ổ cắm. (Null byte trong tên không có ý nghĩa đặc biệt.) Tên không có kết nối với tên đường dẫn hệ thống tệp. Địa chỉ của socket trong không gian tên này được cung cấp bởi phần còn lại của byte trong sun_path. Khi địa chỉ của một ổ cắm trừu tượng được trả về bởi getockname (2), tên người dùng (2) và chấp nhận (2), chiều dài của nó là sizeof (struct sockaddr_un) và sun_path chứa tên trừu tượng. Không gian tên ổ cắm trừu tượng là một phần mở rộng Linux không di động.

Có vẻ như đây là 'trừu tượng' - vì vậy không có đường dẫn thực sự hiện diện trên hệ thống tập tin

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.