Trong một liên kết tượng trưng chỉ đến '127.0.1.1:+xxxxx', ký tự cộng để làm gì?


52

Trên hệ thống tập tin Linux của tôi, một liên kết tượng trưng trỏ đến 127.0.1.1:+xxxxx.

Tại sao dấu cộng? Cũng có thể có một điểm trừ? Tại sao không chỉ 127.0.1.1:xxxxx?


Đây có phải là liên kết tượng trưng dưới / Proc?
Joshua

4
@Joshua: Nhiều khả năng dưới ~ / .mozilla / hoặc tương tự. Firefox / Thunderbird và iirc Steam, sử dụng các liên kết tượng trưng như vậy để khóa.
grawity

2
Là xxxxx một số, hoặc các ký tự xxxxx?
Mawg

2
Có lẽ không liên quan nhưng chỉ để thông tin. Trong một số máy khách IRC, dấu cộng trước cổng có ở đó để cho biết máy chủ từ xa sử dụng SSL / TLS.
eKKiM

Câu trả lời:


93

Các liên kết tượng trưng không trỏ đến một tệp không có ý nghĩa chung nào cả. Trong trường hợp này, nó có thể là ID tiến trình hoặc một cổng với một số giao thức đặc biệt được nói qua nó hoặc một mã định danh khác. Tất cả phụ thuộc vào chương trình làm ra nó.

Phần mềm tạo ra các liên kết này chỉ đơn giản là lợi dụng sự thật rằng 1) mục tiêu của liên kết tượng trưng có thể không tồn tại hoặc thậm chí là vô nghĩa; 2) tạo một liên kết tượng trưng là một hoạt động nguyên tử hoàn toàn đơn lẻ (như đang đọc mục tiêu của nó), không giống như tạo một tệp thông thường, thực hiện ít nhất 3 lệnh gọi hệ thống riêng biệt.

Do đó, việc tạo liên kết tượng trưng có thể bị lạm dụng như một cách khóa (đảm bảo một thể hiện duy nhất của chương trình) ngay cả khi các cơ chế khác có thể không đáng tin cậy. Chương trình không cần symlink để thực sự phân giải thành một tệp thực: nó chỉ quan tâm đến việc tạo liên kết thành công hay không, hoặc nó có bị lỗi do nó đã tồn tại hay không.


5
"* không giống như tạo một tệp thông thường mất ít nhất 3 cuộc gọi hệ thống riêng biệt. *" - Bạn có thể làm rõ không? Bạn có nghĩa là fopen, fwritefclose?
Nic Hartley

11
@NicHartley: Các cuộc gọi hệ thống là open(hoặc có thể creattrong phần mềm cũ) write, và close, không phải là phiên bản f * mà stdio cung cấp. Nhưng, vâng, bạn cần phải làm ít nhất openwritetạo tệp và đặt một cái gì đó có ý nghĩa vào nó. Bây giờ nếu bạn muốn một số mã "cố gắng tạo nó, nếu thành công, hãy đưa một số thông tin vào nó, nếu không, hãy đọc một số thông tin từ nó", quy trình thứ hai có thể thử readtrước khi quy trình đầu tiên có cơ hội write. symlinktránh điều đó; hoặc thành công và tạo liên kết, hoặc thất bại và chắc chắn readlinkcó thông tin cho bạn.
Guntram Blohm

"... có thể bị lạm dụng như một cách ..." Đây có phải là lạm dụng như trong "được sử dụng theo cách không được sử dụng" hay "được sử dụng theo cách không nên sử dụng"?
Chàng trai với chiếc mũ

22

Theo như tôi biết thì "+" có nghĩa là số sau IP ("xxxxx") đề cập đến "ID tiến trình" (không phải là cổng thường sử dụng ký hiệu [địa chỉ IP]: [portnumber]).

Có thể là "ký hiệu" này (không chắc chắn tôi sẽ gọi nó là "ký hiệu" vì tôi không biết bất kỳ tài liệu "chính thức" nào) đề cập đến một cái gì đó khác nếu được sử dụng bởi một ứng dụng cụ thể - nhưng sau đó, luôn luôn là khả năng không chỉ với symlink. Các trường hợp duy nhất tôi biết (và có thể tìm thấy với một tìm kiếm không quá rộng), "+ XXXX" luôn được đề cập đến ID tiến trình.


1
Tôi chỉ kiểm tra nó. Trong trường hợp của tôi, nó thực sự làm.
myMethod

1
Có tài liệu về định dạng này ở đâu đó mà bạn có thể liên kết đến?
David Z

1
Không chắc chắn, tôi chỉ nhớ nó từ kinh nghiệm.
Albin

2
Có vẻ như bạn đang nói về một liên kết tượng trưng trong một thư mục đặc biệt, như /prochoặc /dev. Bạn có thể giải thích symlink này được sử dụng để làm gì không?
Barmar

4
Đây là lần đầu tiên tôi thấy ký hiệu này, vì vậy tôi rất ngạc nhiên khi nghe bạn nói rằng đó là một ký hiệu chung. Bạn đã thấy nó được sử dụng ở đâu để có nghĩa là một ID quá trình?
Barmar
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.