Tại sao apt-get yêu cầu sudo?


12

Đây có lẽ là một câu hỏi ngu ngốc, nhưng gần đây tôi nhận ra rằng tôi không biết tại sao không có chức năng một người dùng với apt-get.

Câu trả lời Tôi không tìm kiếm:

  • "Đó là bởi vì apt ghi vào các thư mục cấp hệ thống". Đây là cấp độ bề mặt tại sao, nhưng tôi đang tìm kiếm một cấp độ sâu hơn. Có điều gì đó về cơ bản chặn một môi trường người dùng đơn (a la pip + virtualenv) không?
  • "Bạn chỉ có thể xây dựng từ nguồn". Đây là một cách giải quyết, nhưng không giải quyết câu hỏi của tôi. Tôi không muốn khắc phục sự cố ngắn hạn và dù sao tôi cũng có quyền truy cập root trên tất cả các máy của mình.

Tôi hy vọng bạn biết bạn có thể xây dựng bất kỳ gói nào từ nguồn trong thư mục nhà của bạn.
việc

Đúng, nhưng tôi đang tìm kiếm lý do tại sao làm cơ sở cho giới hạn apt-get. Xây dựng từ nguồn không trả lời rằng.
PattimusPrime

1
Tôi nghĩ rằng câu hỏi bạn thực sự hỏi là "Tại sao phần lớn Linux không thể di chuyển được?". Hoàn toàn có thể cho phép apt-get cài đặt phần mềm vào các thư mục cục bộ của người dùng, nhưng vì hầu hết các phần mềm không hỗ trợ điều này nên sẽ có rất ít điểm trong việc này.

Câu trả lời:


10

Tại sao apt-get yêu cầu sudo?

Không phải lúc nào. Bạn hoàn toàn có thể sử dụng apt-getmà không cần sudo. Có những trường hợp bạn hoàn toàn không cần sudo, như sử dụng apt-get downloadgói tải xuống thư mục hiện tại của bạn , apt-get sourcetải tệp nguồn debian vào thư mục hiện tại của bạn, changelogtải xuống và in thay đổi của gói đã cho và bất kỳ lệnh nào có các --simulate/ --dry-run/ --no-act(trong trường hợp của installbạn cũng cần --no-download).

Điều này là do các hành động / lệnh này không yêu cầu ghi các thư mục hệ thống.

Bây giờ, tại sao apt-getcần sudo? Thật ra thì không. Bạn có thể bỏ apt-get, tải xuống một gói với wgetvà sử dụng dpkg --extractvà trích xuất gói trong bất kỳ thư mục nào bạn muốn. Ngoài ra còn --instdircó hoạt động cho gói chỉ nhị phân.

Bây giờ, tại sao điều này không phải là mặc định? Bởi vì đó là một nỗi đau. Để làm những gì bạn muốn, chúng tôi sẽ cần đóng gói lại mỗi gói hai lần, một gói cho đúng cách và một gói khác để làm những gì bạn muốn. Khi xây dựng, các tệp nhị phân thường cần biết các tệp và thư viện họ cần ở đâu (trong một số trường hợp, đây là mã hóa cứng khi biên dịch).

Bây giờ, những gì bạn có thể làm thay thế? Chỉ cần chroot một số môi trường a la virtualenv, nơi bạn có thể cài đặt các gói mà không cần root.

Tóm tắt, đây không phải là cách mà apt-get được sử dụng và tôi không biết một trình quản lý gói khác tương tự apt-get cho phép bạn làm điều đó. Vào cuối ngày, apt-getchỉ là một mặt trước cho dpkg có thể làm một số điều này.


3

Thông tin trong gói tự xác định nơi các tệp sẽ được cài đặt, vì vậy bạn cần sudocả hai để ghi /và thay đổi cơ sở dữ liệu gói.

Khi bạn đang cài đặt các gói, bạn đang cài đặt các tệp nhị phân dựng sẵn và cấu hình và các tệp meta và tập lệnh liên quan là các phần thiết yếu của gói. Các tập lệnh và tập tin cấu hình này được liên kết chặt chẽ với các phụ thuộc và phần còn lại của hệ thống. Bạn sẽ không muốn thay đổi những điều này một cách nhẹ nhàng trừ khi bạn biết chính xác những gì bạn đang làm.

Nếu bạn đang ở trên một hệ thống, giả sử tại nơi làm việc, nơi bạn không có sudoquyền truy cập, bạn có thể biên dịch từ nguồn và đặt thư mục cài đặt về nhà của bạn. Sau đó, không cần sudo. Khi bạn đang cài đặt từ nguồn, bạn thường không thay đổi cơ sở dữ liệu gói.


Cảm ơn đã trả lời! Tôi biết và sử dụng các cách giải quyết, nhưng điều tôi đang cố gắng tìm hiểu là tại sao tôi lại sử dụng chúng. Tôi tin rằng bạn đang nói rằng vấn đề là đường dẫn cài đặt được mã hóa cứng bởi các nhà bảo trì gói - tại sao điều này không thể thay đổi?
PattimusPrime

2

Đó không phải là một câu hỏi ngu ngốc.

Cấp đặc quyền trong một hệ điều hành

Ubuntu - và thực sự là bất kỳ hệ điều hành hiện đại nào - có khái niệm về các cấp đặc quyền khác nhau cho các phần mềm khác nhau. Phần mềm do người dùng khởi tạo thường chạy dưới cấp đặc quyền dựa trên người dùng, vì lý do bảo mật không có quyền truy cập cần thiết để sửa đổi hệ thống - nó chỉ có thể sửa đổi các tệp thuộc về người dùng đó.

Để thực hiện bất kỳ sửa đổi nào đối với hệ điều hành có thể ảnh hưởng đến toàn bộ hệ thống, thay vì chỉ các tệp của người dùng, cần có một mức đặc quyền cao hơn, trong Linux được gọi là đặc quyền "siêu người dùng" (hoặc thông thường gọi là "gốc"). Cấp đặc quyền này có quyền truy cập hoàn toàn vào toàn bộ hệ điều hành cho phép nó sửa đổi - hoặc hủy - tất cả các tệp cho tất cả người dùng.

Vai trò của apt-get

Khi bạn đang cài đặt phần mềm qua apt-get, bạn sẽ cài đặt phần mềm có sẵn trên toàn hệ thống . Đó là, phần mềm sẽ không được đặt vào thư mục chính của người dùng để chỉ chạy bởi người dùng đó, nhưng phần mềm sẽ được cài đặt trong thư mục ứng dụng toàn hệ thống (chẳng hạn như trong / usr, / etc, / var, v.v. ) để chạy bởi tất cả người dùng. Để sửa đổi các thư mục này, bạn cần có đặc quyền siêu người dùng. Không người dùng không có đặc quyền nào có thể sửa đổi các thư mục này, vì nếu không phần mềm không có đặc quyền có thể gây rối với hệ thống.

Nếu bạn cố gắng cài đặt một cái gì đó bằng cách sử dụng apt-get mà không cung cấp các đặc quyền siêu người dùng apt-get, trở ngại đầu tiên mà nó sẽ không vượt qua được là lấy một khóa để ghi vào danh mục phần mềm của chính nó. Là một tiện ích trên toàn hệ thống, apt-get duy trì một danh mục các phần mềm đã cài đặt, đòi hỏi phải có các đặc quyền siêu người dùng để chỉnh sửa để phần mềm không có đặc quyền không thể gây rối với nó. Nhưng ngay cả khi bạn có thể bằng cách nào đó vượt qua trở ngại này (ví dụ: bằng cách thay đổi quyền truy cập tệp), nhiều bước tiếp theo trong quá trình cài đặt phần mềm vẫn sẽ thất bại, vì thói quen cài đặt sẽ phụ thuộc vào việc ghi vào một số thư mục hệ thống.

Sử dụng Linux, có thể cài đặt phần mềm mà không có đặc quyền siêu người dùng, nhưng bạn cần phải tự viết nó (ví dụ: shell script) hoặc tự biên dịch phần mềm và chạy trực tiếp các tệp thực thi được biên dịch. Việc cài đặt nó trên toàn hệ thống sẽ dễ dàng hơn bằng cách sử dụng apt-get (và các tiện ích dựa trên APT khác như aptitude, synaptic hoặc trung tâm phần mềm Ubuntu) nếu bạn có quyền truy cập để làm như vậy.


Cảm ơn đã trả lời, và cảm ơn vì sự kỹ lưỡng. Tôi hiểu bản chất toàn hệ thống của apt-get, nhưng điều tôi đang cố gắng hiểu là tại sao nó phải như vậy.
PattimusPrime 28/03 '

1
Nó không phải theo cách đó. Nó chỉ là cách Ubuntu (và Debian) được thiết kế. Sẽ không có gì ngăn cản ai đó thiết kế một hệ điều hành trong đó cách cài đặt phần mềm thông thường là cho mỗi người dùng.
thomasrutter

1

Tại sao apt-get cài đặt vào thư mục / (hoặc tương tự) theo mặc định?

Lý do đơn giản cho việc này là apt-getkhông quyết định nơi cài đặt phần mềm. Nó được quyết định bởi các nhà phát triển và được mã hóa bên trong ứng dụng.

Tôi có thể cài đặt vào các thư mục khác không?

Có, bạn có thể cài đặt vào các thư mục khác. Đối với phần mềm nguồn mở, lấy nguồn, thay đổi thư mục cài đặt, biên dịch, xây dựng và cài đặt nó. Thường có một tùy chọn cho configuretập lệnh đi kèm cho phép bạn chỉ định nơi cài đặt. Điều này thường là --prefix.

Nhưng tôi khăng khăng sử dụng apt-get. Làm gì bây giờ?

ĐỒNG Ý. Vẫn còn một cách để làm điều này với apt-get, mặc dù nó sẽ là quá nhiều cho người dùng cuối. Thực hiện theo các bước.

  1. Lấy nguồn.
  2. Thay đổi thư mục cài đặt thành một cái gì đó như $HOME.
  3. Biên dịch và xây dựng.
  4. gói nó vào một tệp .deb .
  5. Tạo một tài khoản launchpad.
  6. Ký mã quy tắc ứng dụng Ubuntu (Tôi không chắc liệu cái này có cần thiết không).
  7. tạo một ppa cho chính mình .
  8. Tải gói deb lên ppa.
  9. thêm ppa vào nguồn của bạn.
  10. Chạy đi sudo apt-get update.
  11. Chạy đi apt-get install package.

Điều đó quá dễ / khó. Có thể chọn thư mục trong khi cài đặt không?

Có và không.

Có bởi vì có thể, một số phần mềm sử dụng phương pháp này, cách duy nhất mà tôi biết là Qt5. Nó có tệp .sl , khi được thực thi yêu cầu thư mục cài đặt giữa nhiều đầu vào khác.

Không vì phương pháp này không sử dụng apt-get.

Tôi có thể làm điều này một cách dễ dàng một ngày nào đó với apt-get?

Tôi không nghĩ các nhà phát triển apt-getvà / hoặc nhà phát triển phần mềm sẽ quan tâm đến việc này, nhưng một số phần mềm có thể được phát triển để thực hiện việc tạo nguồn, thay đổi, biên dịch, xây dựng, cài đặt các bước tự động bằng cách chỉ yêu cầu thư mục cài đặt.

Giác quan thứ 6 của tôi nói với tôi rằng lệnh sẽ là

apt-dont-get install pkg1 pkg2 ...

Cảm ơn câu trả lời - nó kỹ lưỡng và giải quyết câu hỏi của tôi. Tuy nhiên, tôi không hiểu tại sao sẽ không có hứng thú phát triển chức năng một người dùng thành apt-get. Có vẻ như chức năng đó sẽ rất hữu ích trong các trường hợp sử dụng nhất định.
PattimusPrime

Thông tin tốt, nhưng định dạng Hỏi và Đáp trong Hỏi & Đáp ...? :) Idk, có lẽ bạn nên chỉnh sửa thành một định dạng tiêu chuẩn? Chỉ là một ý nghĩ.
cuộc trò chuyện

@PattimusPrime Những trường hợp như vậy hầu hết rất hiếm, bởi vì trong hầu hết các trường hợp, quản trị viên cài đặt tất cả phần mềm cần thiết và những người khác không cần cài đặt phần mềm. Ngoài ra, sự thật rằng việc xây dựng từ nguồn rất dễ dàng và việc thực hiện chức năng như vậy sẽ vô ích miễn là các nhà phát triển phần mềm không triển khai nó trong đó phần mềm của riêng họ sẽ ngăn các apt-getnhà phát triển làm như vậy. Ngoài ra, nhiều chương trình hiện tại phụ thuộc vào các chương trình khác và họ tìm kiếm chúng trong thư mục / usr. Thực hiện chức năng như vậy sẽ yêu cầu thay đổi trong tất cả các phần mềm hiện có có phụ thuộc (điều này không có hàng ngàn).
Người dùng đã đăng ký

Là vi phạm chính sách Debian để cài đặt tệp trong $ HOME. Bạn không bao giờ nên làm điều đó. Nếu bất cứ điều gì, sử dụng /opt/packagevà chmod thư mục thay thế.
Braiam

@Braiam: Tôi đã thấy mọi người khuyên bạn nên cài đặt các gói trong $HOME/opt/nếu họ không có đặc quyền cần thiết để cài đặt các gói trong /opt/..
Aditya

-1

Nguyên nhân là do nó chỉnh sửa các tập tin được chỉnh sửa để bạn không thể sử dụng chúng. Bạn có thể có thể chmod chúng vì vậy bạn không thể khuyên bạn nên làm điều đó mặc dù


Cảm ơn đã trả lời. Tôi đang tìm kiếm lý do tại sao nó chỉ chỉnh sửa các tập tin chmodded. Đối với tôi, dường như chức năng một người dùng sẽ dễ thực hiện và cực kỳ hữu ích trong một số lĩnh vực (ví dụ: cụm siêu máy tính)
PattimusPrime 28/03 '
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.