it-swarm-vi.com

Làm thế nào tôi có thể làm cho một chương trình thực thi từ mọi nơi

Tôi nên làm gì nếu tôi muốn có thể chạy một chương trình nhất định bất kể thư mục hiện tại của tôi là gì? Tôi có nên tạo một liên kết tượng trưng đến chương trình trong /bin thư mục?

79
aneuryzm

Nếu bạn chỉ cần gõ export PATH=$PATH:</path/to/file> tại dòng lệnh, nó sẽ chỉ kéo dài trong suốt thời gian của phiên.

Nếu bạn muốn thay đổi nó vĩnh viễn, hãy thêm export PATH=$PATH:</path/to/file> vào tệp ~/.bashrc của bạn (chỉ cần ở cuối là ổn).

55
oadams

Câu trả lời ngắn gọn là để chạy chương trình, bất kể thư mục của bạn là gì, bạn cần phải có thư mục của chương trình trong đường dẫn tìm kiếm của bạn. Vấn đề có thể được giải quyết bằng cách đưa chương trình vào một thư mục đã có trong đường dẫn đó hoặc bằng cách thêm một thư mục mới vào đường dẫn - một trong hai sẽ hoạt động. Câu trả lời tốt nhất phụ thuộc vào:

Chương trình này có phải là chương trình đã tải xuống mà bạn đã tự biên dịch từ nguồn không?

Rất có khả năng nó sẽ có cơ chế cài đặt. Trong thư mục bạn đã biên dịch chương trình, với quyền root, hãy chạy 'make install'

Chương trình này có phải là chương trình đã tải xuống mà bạn muốn cung cấp như một phần của chương trình chuẩn trên máy tính không?

Có ý nghĩa khi đưa loại ứng dụng này vào một thư mục tiêu chuẩn. nó khá phổ biến để sử dụng các thư mục như/usr/local/bin cho các chương trình đó. Bạn sẽ cần quyền truy cập root để làm điều này.

Đây là chương trình mà bạn đã viết cho chính mình và/hoặc bạn không có quyền riêng tư đặc biệt nào trên máy tính.

Tạo thư mục trong thư mục chính của bạn có tên là 'bin' và đặt chương trình vào đó. Bạn có thể cần chỉnh sửa tập lệnh đăng nhập của mình để thêm đường dẫn đầy đủ vào thư mục này (ví dụ:/usr/home/jeremy/bin)

Trong khi bạn chỉ có thể thêm thư mục hiện tại của nó vào đường dẫn tìm kiếm, bạn sẽ phải tiếp tục làm điều này với mọi chương trình mới - và sẽ làm việc nhiều hơn trong dài hạn.

24
Michael Shaw

Đặt một liên kết đến tệp trong /bin thư mục không phải là điều tốt nhất để làm vì nhiều lý do.

  • Nếu tệp thực thi thực tế nằm ở vị trí mà một số người dùng không thể nhìn thấy hoặc thực thi, họ sẽ xem đó là một liên kết xấu hoặc chương trình rối loạn chức năng.
  • Các /bin thư mục được cho là dành riêng cho các chương trình được yêu cầu để chạy hệ thống (những thứ như chmod, mkdir, v.v.).

Bạn thực sự có thể đặt (cài đặt) tệp thực thi trong /usr/bin/ hoặc thậm chí /usr/local/bin/. Tất nhiên, bạn đã cài đặt chương trình theo cách thủ công vào thời điểm đó; bản phân phối của bạn sẽ không theo dõi nó theo cách mà phần còn lại của các chương trình của bạn - bạn sẽ phải nâng cấp thủ công khi cần thiết và xóa thủ công nếu bạn muốn nó biến mất. Ngoài ra, bạn sẽ phải biết nó phụ thuộc vào gói nào (có vẻ như bạn đã sử dụng chương trình, vì vậy điều đó được quan tâm, nhưng nói chung ...).

Trừ khi tôi đang thiết lập một chương trình mà tôi mong muốn người dùng khác sử dụng, đó không phải là điều tôi thường làm: Tôi tạo một thư mục bin chỉ cho tôi trong thư mục nhà của tôi và tôi chỉnh sửa hồ sơ Shell của mình để thêm ~/bin/ đến biến môi trường PATH của tôi. Tôi thấy việc theo dõi các chương trình tôi đã cài đặt theo cách đó dễ dàng hơn vì nó được tách biệt với phần còn lại của hệ thống.

17
Shawn J. Goff

Nếu bạn muốn chạy một lệnh foo trong thư mục Shell của bạn hiện đang ở, về cơ bản bạn có hai tùy chọn:

  1. Kiểu ./foo tại Dấu nhắc Shell.

  2. Thêm . danh mục (. là tên của "thư mục hiện tại") cho biến môi trường PATH; Cách bạn thực hiện việc này tùy thuộc vào Shell bạn đang sử dụng:

    • đối với shell kiểu Bourne (bash, zsh, ksh, v.v.) bạn viết (xem trang này để biết thêm thông tin):

      export PATH=$PATH:.
      
    • đối với hệ vỏ loại csh (tcsh, csh) bạn viết (xem trang này để biết thêm thông tin):

      set path = ( $path .)
      

Lưu ý rằng 2. là rủi ro bảo mật trên các hệ thống nhiều người dùng: hãy tưởng tượng bạn cd vào thư mục /tmp và một người dùng độc hại đã tạo ra một nhị phân phần mềm độc hại có tên ls trong đó ..

6
Riccardo Murri

Lộn xộn với PATH mở ra cho bạn chạy các chương trình độc hại do nhầm lẫn. Tiêu chuẩn là cài đặt công cụ "cục bộ" trong /usr/local (xem FHS , mã hóa việc sử dụng Unix: một chút ngày nhưng nó đưa ra lý do)., /usr/local/bin thường nằm trong PATH cho tất cả người dùng.

Các chương trình "cài đặt cục bộ" của tôi nằm trong $HOME/bin, được đặt trong điệu nhảy chuẩn bởi ./configure --prefix=$HOME ..., kết hợp với một vài bí danh (bash) để chọn ra, ví dụ: git tự xây dựng trên hệ thống một (những người không đụng độ được tìm thấy trong PATH ở cuối.

1
vonbrand