Hiểu các định dạng thực thi của Linux và các gói phân phối phần mềm


8

Tôi gặp khó khăn trong việc hiểu các định dạng và gói phân phối phần mềm thực thi của Linux. Có rất nhiều bản phân phối Linux khác nhau và dường như mọi gói phần mềm đã được biên dịch riêng cho từng bản phân phối. Tại sao lại thế này? Tôi hiểu rằng một số "gói" được tạo để cài đặt trên các bản phát hành khác nhau, nhưng định dạng thực thi cho phần mềm có khác nhau không?

Ngoài ra, tại sao nhiều người dùng Linux thích phiên bản nhắc lệnh của ứng dụng so với phiên bản GUI? Tôi có thể hiểu sự cần thiết của dấu chân nhỏ, nhưng ngay cả các ứng dụng GUI cũng có thể có dấu chân nhỏ nếu chúng được mã hóa đúng.

Câu trả lời:


13

Quản lý gói & phụ thuộc

Hầu hết các bản phân phối Linux sử dụng trình quản lý gói để cài đặt và gỡ bỏ phần mềm. Trình quản lý gói cung cấp một số lợi ích như khả năng sử dụng kho lưu trữ trung tâm mà từ đó (hầu hết) mọi phần mềm có thể được tải xuống, tổ chức các phần mềm thành các gói có thể được cài đặt thành một nhóm gắn kết và các lợi ích chính: tự động xử lý phụ thuộc và theo dõi những thay đổi mà các gói thực hiện để có thể gỡ cài đặt chúng.

Một số phần mềm nhất định có thể yêu cầu một số thư viện hoặc chương trình khác để thực hiện các nhiệm vụ sẽ là dư thừa nếu phần mềm này được triển khai lại trong phần mềm đó. Các gói cho phép biểu hiện của các phụ thuộc này.

Sự khác biệt: định dạng và chiến lược gói

Có tồn tại một số trình quản lý gói khác nhau. Mỗi cái được tạo ra bởi vì những cái hiện có không đáp ứng nhu cầu của một số người. Mỗi trình quản lý gói yêu cầu các gói theo định dạng riêng.

Hơn nữa, các bản phân phối khác nhau có các yêu cầu khác nhau của phần mềm được bao gồm. Có một số phần mềm có thể có các khả năng khác nhau tùy thuộc vào các tùy chọn được đưa ra khi phần mềm được biên dịch từ mã nguồn thành máy thực thi. Một số bản phân phối muốn cung cấp bộ tính năng đầy đủ và trải nghiệm phong phú trong khi những bản phân phối khác muốn cung cấp trải nghiệm gọn gàng và đơn giản nhất có thể, và có tất cả mọi thứ ở giữa. Ngoài ra, bản phân phối có thể quyết định định dạng cấu trúc thư mục khác nhau hoặc sử dụng một hệ thống init khác. Họ có thể quyết định gói phần mềm khác nhau: có thể có một gói được gọi là "dev-utils" trong hai bản phân phối khác nhau, nhưng một phiên bản bao gồmyacctrong khi người kia thì không. Do những nhu cầu khác nhau này, các bản phân phối chọn biên dịch phần mềm theo những cách khác nhau.

Đây là lý do tại sao ngay cả khi bạn có một gói ở định dạng chính xác cho trình quản lý gói của mình, nó có thể không hoạt động nếu gói được dành cho phân phối khác. Chẳng hạn, gói đó có thể dựa vào yaccviệc được cài đặt và nó thể hiện sự phụ thuộc đó thông qua việc yêu cầu gói "dev-utils", nhưng "dev-utils" của bạn không bao gồm yacc. Bây giờ có một gói được cài đặt với một phụ thuộc chưa được đáp ứng.

Nó không thực sự là một vấn đề.

Một phần lớn của việc phân phối Linux là duy trì một kho phần mềm trung tâm. Việc phân phối chăm sóc duy trì tất cả điều này cho bạn. Điều này thực sự làm cho nó rất dễ dàng để cài đặt phần mềm. Bạn thường sử dụng trình quản lý gói để tìm kiếm và chọn một số gói, sau đó bảo nó cài đặt chúng; nó sẽ chăm sóc phần còn lại cho bạn. Quá trình cài đặt phần mềm Windows bao gồm săn tìm phần mềm trên các trang web của bên thứ 3, cố gắng xác định vị trí liên kết tải xuống, tải xuống, kiểm tra vi rút và chạy chương trình cài đặt, sau đó hỏi bạn một loạt các câu hỏi không liên quan. Toàn bộ mớ hỗn độn đó không phải là tiêu chuẩn trên Linux.

Các kho lưu trữ không thể bao gồm tất cả mọi thứ

Bây giờ, có thể có trường hợp một phần mềm bạn yêu cầu không có trong kho lưu trữ phân phối của bạn. Các gói được cung cấp bởi một kho lưu trữ phần mềm là một trong những tính năng khác biệt của phân phối. Khi bạn không thể tìm thấy phần mềm bạn cần trong kho lưu trữ phân phối của mình, có ba cách có thể (thực sự, hai cộng với một cách để thực sự làm hỏng mọi thứ).

Kho cộng đồng

Nhiều bản phân phối có kho lưu trữ không chính thức được duy trì bởi những người không liên quan đến phân phối. Ubuntu gọi chúng là PPA, Fedora gọi chúng là Kho lưu trữ nhân dân Fedora. Arch Linux không có tên cụ thể cho kho lưu trữ của bên thứ ba , nhưng nó có AUR, đó là một bộ "công thức" cho các gói (lưu ý: chỉ có một AUR). Trước tiên, bạn có thể thử cài đặt gói từ một trong những nguồn này vì dễ dàng hủy cài đặt chúng nếu chúng không hoạt động.

Biên dịch từ nguồn

Nếu bạn không thể tìm thấy một kho lưu trữ không chính thức với những gì bạn cần, việc biên dịch từ nguồn không khó. Bạn cần cài đặt gói phát triển phân phối của mình; bao gồm những thứ cơ bản như trình biên dịch, trình liên kết, trình phân tích cú pháp và các công cụ khác thường cần để biên dịch phần mềm. Sau đó, bạn tìm thấy mã nguồn của dự án (hầu như luôn được đóng gói trong một .tgzhoặc .tbz(được gọi là "tarball"). Tải xuống vào thư mục riêng của nó ở đâu đó, giải nén nó (sử dụng tar -xf filename.tgzvà thường đi vào một thư mục mà nó đã tạo. thư mục đó có thể là một tệp được gọi là READMEhoặc INSTALL. Nếu nó tồn tại, hãy tiếp tục và đọc nó, hầu hết chúng đều bảo bạn làm điều tương tự. Một vài bước tiếp theo được thực hiện tại một dòng lệnh. Chạy lsvà tìm một tệp thực thi được gọi làconfigure. Nếu nó tồn tại, chạy nó bằng cách làm ./configure; đôi khi có thể mất vài phút Điều đó thường chạy một số thử nghiệm để tìm ra cách phân phối của bạn có thiết lập mọi thứ và nó đảm bảo bạn có các công cụ cần thiết để biên dịch phần mềm này. Bước tiếp theo là chạy make. Điều này thực sự biên dịch phần mềm và có thể sẽ mất một chút thời gian - bất cứ nơi nào từ vài phút đến vài giờ tùy thuộc vào kích thước của phần mềm bạn đang biên dịch. Khi đã xong, bạn chạy make install. Điều này cài đặt phần mềm, bao gồm sao chép các sản phẩm biên dịch vào các vị trí thích hợp trong hệ thống tệp của bạn. Sau đó, phần mềm có sẵn để sử dụng.

Đây là một phần dài, nhưng nó được tóm tắt là "README, ./mình, tạo, thực hiện cài đặt" . Đó là thói quen cần nhớ.

Cài đặt gói từ phân phối khác (không làm điều này)

Tôi liệt kê điều này chỉ bởi vì nó và thay thế, nhưng nó gần như chắc chắn sẽ không kết thúc tốt. Có thể cài đặt các gói cho các bản phân phối khác và bạn có thể thấy mình muốn làm điều đó. Chà, đừng. Đừng làm điều đó cho đến khi bạn hiểu hệ thống của bạn rất tốt. Trên thực tế, tôi sẽ không đặt bất kỳ lệnh nào ở đây chỉ ra cách thực hiện mặc dù điều đó là có thể. Nếu bạn đến điểm đó có vẻ như đây là tùy chọn duy nhất, đừng cài đặt gói bằng trình quản lý gói; thay vào đó, hãy rút mọi thứ ra khỏi gói và đặt chúng vào hệ thống của bạn một cách thủ công, cùng với các ghi chú về những gì bạn đã làm để bạn có thể hoàn tác nó nếu cần thiết.

Bit dòng lệnh

Một số người thích dòng lệnh vì những lợi thế mà nó mang lại cho họ. Chúng có thể được tóm tắt thành ba điều:

  • Dễ tự động hóa
  • Tốc độ (so với nhấp chuột khắp nơi trong gui)
  • Biểu cảm

Lớn nhất trong số này là tính biểu cảm; có những thứ có thể được thực hiện tại một dòng lệnh không thể có trong giao diện đồ họa.

Cuối cùng, các hướng dẫn dòng lệnh thường được đưa ra trong các diễn đàn hữu ích như diễn đàn này bởi vì việc truyền đạt thông tin chính xác sẽ dễ dàng hơn nhiều so với việc đưa ra các hướng dẫn loại "nhấp-đây-sau-đó-sau-đó".


6

Xin lỗi vì câu trả lời dài. Nếu bạn muốn nhanh chóng và bẩn, chỉ cần đọc tóm tắt.

Tóm lược

  • Định dạng thực thi là như nhau.
  • Có các trình quản lý gói khác nhau không tương thích, ngay cả khi các chương trình được đóng gói. (Bạn có thể thấy một gói dưới dạng tệp cài đặt như .msitệp).
  • Về cơ bản các bản phân phối / phiên bản khác nhau có các phiên bản khác nhau của các thư viện cốt lõi, và vì lý do nhất quán và ổn định, các ứng dụng cần được xây dựng để chống lại các phiên bản đó. (Phiên bản Linux của địa ngục dll).
  • Các bản phân phối khác nhau thực hiện mọi thứ theo những cách hơi khác nhau và trong một số trường hợp có thể là một vấn đề tương thích.
  • Dòng lệnh có thể nhanh hơn và dòng lệnh unix tốt hơn rất nhiều so với dòng lệnh Windows.

Quản lý gói

Trước hết, quản lý gói. Mục đích chính của trình quản lý gói là duy trì cơ sở dữ liệu của các gói đã cài đặt và các tệp tạo thành gói đó.

Trình quản lý gói cho phép dễ dàng cài đặt các gói và nói chung cũng dễ dàng gỡ bỏ. Chúng cũng cho phép các gói chỉ định các tập lệnh khác nhau có thể cần được chạy khi cài đặt / gỡ bỏ để duy trì tính nhất quán của hệ thống (chẳng hạn như đăng ký gói với một số cơ sở dữ liệu liên quan đến hệ thống con).

Quản lý gói khác nhau

Có nhiều trình quản lý gói khác nhau với các điểm mạnh và điểm yếu khác nhau. Ví dụ là vòng / phút và trình quản lý gói debian (tệp .deb), nhưng có những thứ khác. Các trình quản lý gói này rõ ràng cần các định dạng khác nhau và do đó không tương thích.

Các bản phân phối hoặc phiên bản khác nhau

Vì phần lớn phân phối Linux là nguồn mở nên có nhiều lần sử dụng lại mã hơn so với trên các hệ thống Windows. Một ứng dụng có thể sử dụng một số thư viện cho các phần khác nhau của chức năng. Những thư viện đó cũng thường làm như vậy, đôi khi cùng một thư viện.

Thật không may, các thư viện tồn tại trong các phiên bản khác nhau và một số trong số đó không tương thích (đặc biệt là khả năng tương thích nhị phân cho các tệp thực thi được biên dịch trước). Nhiều phiên bản có thể cùng tồn tại trên các hệ thống Unix (ít hơn so với quan điểm đó), nhưng trong hầu hết các trường hợp sử dụng hai phiên bản khác nhau của thư viện trong một chương trình đang chạy sẽ yêu cầu sự cố.

Do đó, các bản phân phối nhị phân thường nâng cấp phiên bản của riêng họ để chuyển sang các phiên bản mới của các gói cốt lõi khác nhau (trong các trường hợp khác bạn cần cập nhật lớn).

Các tập tin khác

Phân phối cũng khác nhau về cách đặt các tệp cụ thể và cách quản lý cấu hình. Tùy thuộc vào gói có thể có tác động đến gói đó.

Dòng lệnh

Unix chủ yếu là một máy trạm và hệ điều hành máy chủ. Điều này có nghĩa là nó được thiết kế dành cho các quản trị viên hệ thống chuyên nghiệp. Tự động hóa là một phần quan trọng của hộp công cụ quản trị hệ thống và các kịch bản shell là cách để thực hiện. Cố gắng thêm 0 đến 1000 tên tệp hàng đầu trong trình quản lý tệp đồ họa.

Vì các quản trị viên thường quản trị nhiều máy, họ cần thực hiện những điều tương tự trên một số hệ thống. Sử dụng các công cụ như ssh, cực kỳ dễ dàng để thực hiện tác vụ trên một số hệ thống trong một lần và chỉ cần chờ để máy tính thực hiện công việc.

Đặc tả chính xác, tự động hóa và độ lặp lại làm cho dòng lệnh có tiềm năng tốt hơn nhiều so với các công cụ đồ họa cho các tác vụ quản trị. Unix cũng có sẵn một số shell khác nhau và sự cạnh tranh này đã tạo ra các shell cực kỳ mạnh mẽ gần như không thể so sánh được với dấu nhắc lệnh của windows.

Microsoft thực sự đã hiểu rõ điều này và cung cấp powershell như một sự thay thế dòng lệnh, cũng như phiên bản mới nhất của máy chủ windows chủ yếu là dòng lệnh được quản lý.


3

Các định dạng thực thi đều giống nhau trên các bản phân phối, nhưng các tệp thực thi có thể yêu cầu phần mềm cơ bản bổ sung để hoạt động chính xác. Nếu bạn xem các bản phân phối dựa trên Redhat, sản phẩm cài đặt là một vòng / phút, sẽ bao gồm tất cả các yêu cầu cho một phần mềm nhất định và sẽ không cài đặt mặc định phần mềm đó trừ khi các yêu cầu được đáp ứng. ( yumlà một thay thế chorpmvà nó được sử dụng bởi một số phiên bản dựa trên Redhat). Theo định nghĩa, GUI phải có dấu chân lớn hơn nhiều so với giao diện nhắc lệnh. Triết lý cơ bản của UNIX là đơn giản hóa mọi thứ để một tác vụ nhất định sẽ hoạt động hiệu quả nhất có thể. Đó là lý do tại sao có rất nhiều tiện ích sẽ thực hiện một nhiệm vụ duy nhất với đầu ra của nhiệm vụ đó có thể xâu chuỗi vào đầu vào của một nhiệm vụ khác để làm việc khác.


Để chính xác, yum không phải là thay thế, nó hoạt động trên vòng / phút cung cấp giao diện đẹp hơn và các tính năng như kho lưu trữ.
rvs

1

Các bản phân phối khác nhau có các điều kiện tiên quyết cài đặt khác nhau. Tuy nhiên, có RPM hoặc DEB (hoặc các gói khác cho các hệ thống quản lý gói khác), hoạt động cho nhiều hơn một bản phân phối. Triết lý của Linux làm cho mã nguồn có sẵn. Khi biên dịch phần mềm của riêng bạn, nó có khá nhiều thói quen giống nhau trên tất cả các bản phát hành và nó luôn là cùng một .tar.gzkho lưu trữ mà bạn sử dụng.

RPM được biên dịch giống như một phần của hệ thống; một ứng dụng, như một thực thể độc lập, có nghĩa là được phân phối và biên dịch trên mọi mục tiêu.

Câu hỏi thứ hai của bạn là một cái gì đó hoàn toàn khác ... Chà, "rất nhiều người dùng Linux" thích các ứng dụng CLI vì nhiều lý do khác nhau, dấu chân bộ nhớ nhỏ chỉ là một lý do. Khi sử dụng SSH, các ứng dụng CLI có ý nghĩa hơn, đặc biệt là khi làm việc ngoài trang web trên máy chủ. Thường xuyên hơn không, những máy chủ đó không được cài đặt môi trường đồ họa. Khi chạy các chương trình không được trình bày, chúng rất dễ bị hủy bỏ. Ctrl- c, và chương trình đã biến mất. Ngoài ra, nhiều chương trình đăng nhập vào bàn điều khiển, do đó dễ gỡ lỗi hơn. Khi lập trình, bạn đang thực hiện hầu hết việc biên dịch trong bảng điều khiển. Nó chỉ có ý nghĩa hơn cho việc biên dịch nhanh chóng gỡ lỗi. Đôi khi, hoặc đọc tệp nhật ký, đôi khi, đọc bảng điều khiển nhanh hơn.


0

Arch. Hoặc FreeBSD, được phát triển toàn bộ. (RHEL, SLES và tương tự là $ upported nói chung.)

Sử dụng máy tính xách tay: Mint

Khả năng hack có thể sử dụng: Arch.

Khả năng tấn công tàn bạo: Genoo.

Khả năng hack thú vị: LFS.

Khả năng hỗ trợ (máy chủ): RHEL, Ubuntu LTS, FreeBSD (khác với Linux).


Bạn có thể muốn chỉnh sửa câu trả lời của mình để làm cho những gì bạn đang cố gắng nói rõ ràng hơn và sửa một vài lỗi chính tả / ngữ pháp.
haziz
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.