Tại sao có sự kết hợp giữa symlink và hardlink trong / bin?


10

Tôi hiểu sự khác biệt kỹ thuật giữa symlink và hardlink, đây là câu hỏi về cách sử dụng chúng trong thực tế, đặc biệt tôi tò mò muốn biết tại sao cả hai đều được sử dụng trong các điều kiện có vẻ giống nhau: /binthư mục.

Đây là một đoạn danh sách của nó trên hệ thống của tôi:

~$ ls -lai /bin
total 10508
32770 drwxr-xr-x  2 root root    4096 Jun 14 11:47 .
    2 drwxr-xr-x 28 root root    4096 Sep  6 13:15 ..
  119 -rwxr-xr-x  1 root root  959120 Mar 28 22:02 bash
   2820 -rwxr-xr-x  3 root root   31112 Dec 15  2011 bunzip2
  127 -rwxr-xr-x  1 root root 1832016 Nov 16  2012 busybox
   2820 -rwxr-xr-x  3 root root   31112 Dec 15  2011 bzcat
 6191 lrwxrwxrwx  1 root root       6 Dec 15  2011 bzcmp -> bzdiff
 5640 -rwxr-xr-x  1 root root    2140 Dec 15  2011 bzdiff
 5872 lrwxrwxrwx  1 root root       6 Dec 15  2011 bzegrep -> bzgrep
 3520 -rwxr-xr-x  1 root root    4877 Dec 15  2011 bzexe
 6184 lrwxrwxrwx  1 root root       6 Dec 15  2011 bzfgrep -> bzgrep
 5397 -rwxr-xr-x  1 root root    3642 Dec 15  2011 bzgrep
   2820 -rwxr-xr-x  3 root root   31112 Dec 15  2011 bzip2
 2851 -rwxr-xr-x  1 root root   10336 Dec 15  2011 bzip2recover
 6189 lrwxrwxrwx  1 root root       6 Dec 15  2011 bzless -> bzmore
 5606 -rwxr-xr-x  1 root root    1297 Dec 15  2011 bzmore

Tôi thụt các liên kết cứng vào cùng một nút để nhìn rõ hơn. Vì vậy, những liên kết tượng trưng được sử dụng trong trường hợp bzcmp, bzegrep, bzfgrep, bzlessvà liên kết cứng trong trường hợp bzip2, bzcat, bunzip2?

Chúng là tất cả các tệp thông thường (không phải thư mục), nằm trong một hệ thống tệp, là các tiện ích hệ thống và thậm chí được tạo để làm việc với cùng một thứ: lưu trữ bzip. Là những lý do cho việc sử dụng các liên kết cứng / symlink trong trường hợp cụ thể này hoàn toàn là lịch sử hay tôi đang thiếu một cái gì đó?

Làm rõ câu hỏi của tôi:

Tôi không hỏi về:

  • Sự khác biệt kỹ thuật giữa symlink và hardlink
  • Những lợi thế và bất lợi về lý thuyết của mỗi người trong số họ

Những câu hỏi này đã được giải quyết trong các chủ đề khác về SO. Tôi đang cố gắng hiểu tại sao các quyết định khác nhau được đưa ra trong một trường hợp cụ thể: cho một nhóm các tiện ích hệ thống liên quan. Về mặt kỹ thuật, tất cả chúng đều có thể là liên kết tượng trưng hoặc tất cả đều có thể là liên kết cứng, cả hai tùy chọn đều hoạt động (và trong cả hai trường hợp, một chương trình vẫn có thể tìm ra cách nó được gọi thông qua argv[0]). Tôi muốn hiểu ý định ở đây nếu có.

Liên quan:


Tôi nghĩ rằng đó là tùy thuộc vào các nhà bảo trì gói để quyết định. Tôi chạy gentoo, và trong /bincột thứ ba của ls -laitôi luôn luôn 1vì vậy nó dường như chỉ sử dụng các liên kết mềm. Bạn sử dụng bản phân phối nào?
phát lại

Tôi sử dụng Ubuntu 12.04
Dmitry Pashkevich

1
Thoạt nhìn có vẻ như là một số quy tắc loại: "liên kết cứng cho nhị phân, liên kết tượng trưng cho tập lệnh / trình bao bọc" .
peterph

Câu trả lời:


5

Tại sao sử dụng liên kết cứng so với liên kết tượng trưng

Có 3 ưu điểm chính của việc sử dụng các liên kết cứng so với các liên kết tượng trưng trong kịch bản này.

Liên kết cứng

  1. Với một liên kết cứng, liên kết trỏ đến inode trực tiếp.
  2. Liên kết cứng giống như có nhiều bản sao thực thi nhưng chỉ sử dụng không gian đĩa của một.
  3. Bạn có thể đổi tên một trong hai nhánh của liên kết cứng mà không phá vỡ bất cứ điều gì.

Liên kết tượng trưng

  1. Liên kết trỏ đến đối tượng (sau đó lần lượt trỏ đến điểm inode).
  2. Chúng có thể mở rộng hệ thống tập tin, trong khi liên kết cứng không thể.

Ưu điểm của liên kết nói chung

Các liên kết này tồn tại bởi vì nhiều thực thi hành xử khác nhau dựa trên cách chúng được gọi. Ví dụ, 2 lệnh bzlessbzmorethực sự là một lệnh thực thi duy nhất , bzmore. Việc thực thi sẽ hành xử khác nhau tùy thuộc vào tên được sử dụng để gọi nó.

Điều này được thực hiện vì nhiều lý do. Dưới đây là một số trong những người rõ ràng hơn:

  1. Dễ dàng phát triển một tập tin thực thi hơn là nhiều
  2. Tiết kiệm dung lượng đĩa
  3. Dễ dàng triển khai hơn

Tại sao cả hai đang được sử dụng?

Sự lựa chọn của một trong hai ứng dụng cụ thể này là moot. Hoặc có thể tạo điều kiện cho tính năng hoạt động như một bí danh để một thực thi duy nhất có thể bị quá tải. Đó thực sự là tính năng chính đang được các nhà phát triển của các chương trình khác nhau khai thác ở đây.

Khi nhìn vào FHS (Tiêu chuẩn phân cấp hệ thống tập tin) thậm chí chỉ định nó theo cách này, rằng nó có thể là một trong hai.

đoạn trích

Nếu / bin / sh không phải là một vỏ Bourne thực sự, nó phải là một liên kết cứng hoặc tượng trưng cho lệnh shell thực sự.

Lý do đằng sau điều này là bởi vì sh và bash có thể không nhất thiết phải cư xử theo cùng một cách. Việc sử dụng một liên kết tượng trưng cũng cho phép người dùng dễ dàng thấy rằng / bin / sh không phải là một vỏ Bourne thực sự.

...

...

Nếu các chương trình gunzip và zcat tồn tại, chúng phải là các liên kết tượng trưng hoặc cứng đến gzip. / bin / csh có thể là một liên kết tượng trưng đến / bin / tcsh hoặc / usr / bin / tcsh.

Người giới thiệu


Vâng tôi hiểu điều đó, cảm ơn, nhưng tại sao đôi khi các liên kết tượng trưng được sử dụng, và đôi khi các liên kết cứng được sử dụng? Những gì bạn mô tả sẽ hoạt động theo cùng một cách trong cả hai trường hợp
Dmitry Pashkevich

@DmitryPashkevich - OK Tôi đã tái cấu trúc câu trả lời của mình, hãy cho tôi biết nếu điều đó tốt hơn.
slm

Có thể tôi đang hỏi một câu hỏi ngớ ngẩn nhưng tôi cảm thấy nó vẫn chưa được trả lời :) Có Tôi quen với sự khác biệt về kỹ thuật và ưu điểm / nhược điểm của hai loại liên kết. Tôi đang cố gắng để hiểu một trường hợp cụ thể: tại sao tôi lại thấy CẢ HAI liên kết cứng và liên kết tượng trưng trong /bin/thư mục của mình ? Tại sao các nhà phát triển của các tiện ích này không dính vào một loại liên kết?
Dmitry Pashkevich

Đã chỉnh sửa câu hỏi ban đầu của tôi để (hy vọng) làm rõ nó
Dmitry Pashkevich

@DmitryPashkevich - đã thêm một số nội dung bổ sung. Hãy cho tôi biết nếu nó giúp.
slm

5

Có vẻ như bạn đang cố gắng tìm ra, từ thực tiễn hiện có, liệu có một quy tắc phi kỹ thuật nào cho bạn biết nên sử dụng loại liên kết nào không. (Tôi nói không kỹ thuật vì bạn đã biết lý do kỹ thuật để sử dụng cái này hơn cái kia.)

Câu trả lời là, không có quy tắc nào khác. Ví dụ này bạn đã chỉ ra từ bzip2gói của Ubuntu chỉ cho thấy rằng rất nhiều nhà phát triển trộn chúng mà không có nhiều dự đoán trước. Điều này là do không có hướng dẫn mạnh mẽ nào ngoài những khác biệt về kỹ thuật và những khác biệt đó là nhỏ.

Cá nhân, tôi luôn thích sử dụng các liên kết tượng trưng, ​​bởi vì tôi sẵn sàng trả tiền cho chi phí nhỏ bé của họ để đổi lấy bản chất tự ghi chép của họ.

Các nhà phát triển khác sẽ chọn các liên kết cứng cho hiệu quả nhỏ mà họ cung cấp.

Vấn đề này rất giống với khoảng trắng so với tab hoặc động so với gõ tĩnh hoặc Emacs so với vi , lưu ý rằng nó không đủ thú vị để châm ngòi cho một cuộc chiến thần thánh . Giống như các trận chiến thú vị hơn, có nhiều lý do để chọn một trong hai tùy chọn, nhưng trừ khi bạn có ai đó cho bạn biết nên sử dụng cái nào, bạn sẽ chọn cái nào có ý nghĩa hơn với bạn.


1
Cảm ơn đã chia sẻ quan điểm của bạn! Tôi nghĩ rằng bản chất "tự ghi lại" của các liên kết tượng trưng là thứ thường bị bỏ qua
Dmitry Pashkevich
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.