Tại sao nhiều chương trình sống trong PATH?


10

Một điều làm tôi bối rối về Linux máy tính để bàn, ít nhất, đó là tất cả mọi thứ đều nằm trong PATH của tôi. Theo tất cả mọi thứ, tôi có nghĩa là mọi ứng dụng máy tính để bàn, bao gồm cả những thứ như bản đồ gnome-character-glchess. Chúng không có giao diện dòng lệnh để nói, vì vậy tôi không thể nghĩ đến trường hợp tôi sẽ thường xuyên khởi chạy chúng từ thiết bị đầu cuối - và, trong trường hợp không chắc đó, tôi không thể tưởng tượng được sự bất tiện bằng cách cần phải nhập đầy đủ đường dẫn. Nó chỉ có vẻ lộn xộn, nhưng có lẽ có một lý do tốt.

Vì vậy, tại sao không điều này xảy ra? Có bất kỳ tác động đáng chú ý đến hiệu suất hoặc bảo trì?

Câu trả lời:


14

Tất cả các lệnh mà người dùng có thể muốn chạy đều nằm trong PATH. Đó là những gì nó làm. Điều này bao gồm các lệnh mà bạn chạy trực tiếp, các lệnh mà người khác chạy trực tiếp và các lệnh mà bạn hoặc người khác chạy gián tiếp vì chúng được gọi bởi các lệnh khác. Điều này không giới hạn đối với các lệnh chạy từ thiết bị đầu cuối: các lệnh chạy từ GUI cũng được tìm kiếm trong đường dẫn tìm kiếm lệnh (một lần nữa, đó là mục đích của nó).

Cần nhập đường dẫn đầy đủ sẽ rất tệ: bạn cần tìm hiểu đường dẫn đầy đủ là gì! Bạn cần theo dõi xem nó có /usr/bin(chứa hầu hết các chương trình được vận chuyển cùng với hệ điều hành) hay trong /usr/local/bin(có chứa các chương trình được quản trị viên cài đặt thủ công, cũng như các chương trình không phải là một phần của HĐH lõi trên một số các biến thể unix) hoặc trong một số thư mục dành riêng cho hệ thống khác hoặc ở đâu đó trong thư mục chính của người dùng.

Thật khó để trả lời về tác động của nhóm đối với hiệu suất hoặc khả năng bảo trì, vì bạn không nói bạn đang so sánh nó với cái gì. Nếu bạn đang so sánh với việc phải nhập đường dẫn đầy đủ ở mọi nơi, thì đó là một cơn ác mộng về khả năng bảo trì: nếu bạn từng di chuyển chương trình hoặc nếu bạn muốn cài đặt phiên bản mới hơn so với phiên bản đi kèm với HĐH hoặc được quản trị viên hệ thống cài đặt, bạn phải thay thế con đường đầy đủ đó ở mọi nơi Tác động hiệu suất của việc tìm kiếm tên trong một vài thư mục là không đáng kể.

Nếu bạn đang so sánh với Windows, điều đó thậm chí còn tệ hơn: một số chương trình không chỉ bổ sung cho thực thi mà còn tất cả các loại tào lao cho PATH và bạn kết thúc với một PATHbiến dài cả dặm mà vẫn không bao gồm tất cả các chương trình, bởi vì nhiều chương trình không tự thêm vào hệ thống khi bạn cài đặt chúng.


Điều đó có vẻ như lý do khá hợp lý. Cám ơn vì đã giải thích! Một chút về việc thay thế một chương trình có rất nhiều ý nghĩa. Tôi hoàn toàn không nghĩ về điều đó :) Phần gây ấn tượng với tôi là tôi thích có các không gian tên mô tả và nhỏ khi tôi nghĩ về lập trình, trong khi ở đây mọi thứ đều nằm trong cùng một không gian tên toàn cầu (và, khi chúng ta làm nhìn vào các đường dẫn đầy đủ, ở những nơi không đặc biệt như * / bin). Tôi đoán rằng họ là những thứ khá khác nhau, mặc dù.
Dylan McCall

4

Biến PATH chứa danh sách các đường dẫn thư mục. Khi người dùng gõ một lệnh mà không cung cấp đường dẫn đầy đủ, danh sách này được kiểm tra nếu nó chứa một đường dẫn đến lệnh. Không có gì vốn là thiết bị đầu cuối hoặc dòng lệnh cụ thể về nó.

Hơn nữa, Linux cũng không có gì cụ thể về nó cả. PATH từ hệ thống XP của tôi chứa % SystemRoot% \ system32;% SystemRoot%;% SystemRoot% \ System32 \ Wbem có thể bao gồm hầu hết các nhị phân của Windows.

Các thư mục trong PATH được tìm kiếm theo thứ tự được chỉ định và dừng ngay khi tìm thấy kết quả khớp. Các thư mục hệ thống thường ở đầu để ưu tiên cao nhất cho chúng. Người dùng nên nối các đường dẫn tìm kiếm tùy chỉnh ở cuối.

Về hiệu năng: Hầu hết các trình bao hiện đại đều lưu trữ nội dung của PATH để chúng không phải quét đĩa mỗi khi người dùng nhập lệnh.


Windows PATH bao gồm hầu hết các tệp nhị phân đi kèm với Windows, nhưng các ứng dụng thông thường bạn cài đặt thường không được tìm thấy trong PATH. (Chà, các ứng dụng có thành phần dòng lệnh sẽ tự thêm vào PATH, nhưng các ứng dụng chỉ có GUI thường không có.)
cjm

Thật tuyệt, tôi luôn suy ngẫm về thứ tự và ý nghĩa của nó. Làm thế nào về một quy tắc của ngón tay cái? Tôi có (hầu như) tất cả các kết hợp của usr, local, bin, và sbin(trừ thư mục chính người dùng của tôi).
Emanuel Berg
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.