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


76

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 /binthư mục không?


5
không, bạn nên sử dụng biến PATH của shell.
msw

7
Tôi nghĩ sẽ ổn khi tạo ~/bin/thư mục cá nhân , thêm THAT vào đường dẫn của bạn và tạo liên kết tượng trưng trong thư mục đó vào bất cứ điều gì bạn muốn có thể thực thi được từ bất cứ đâu.
frabjous

1
Bạn cũng có thể đặt bí danh với đường dẫn đầy đủ đến tệp nhị phân bạn muốn thực thi.
datasmurf

Câu trả lời:


53

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


11
Cảm ơn nó hoạt động. Đối với những người mới như tôi, hãy nhớ bỏ qua các dấu ngoặc nhọn <>. Giống như vậy: $ PATH: / your / file / path
SAm

4
Cũng không bao gồm tên tệp chương trình trong đường dẫn.
Olli Niemitalo

23

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?

Nó hoàn toàn có khả năng sẽ có một 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 để đư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à một 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 trên máy tính.

Tạo một thư mục trong thư mục chính của bạn được gọi 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.


15

Đặt một liên kết đến tập tin trong /binthư 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 /binthư mục có nghĩa vụ phải được dành cho các chương trình được yêu cầu cho chạy hệ thống (những thứ như chmod, mkdir, vv).

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 đợi 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/vào PATHbiến môi trường. 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.


6

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

  1. ./footại dấu nhắc shell.

  2. Thêm .thư mục ( .là tên của "thư mục hiện tại") vào PATHbiến môi trường; Làm thế nào bạn làm điều này phụ thuộc vào vỏ 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à một 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 cdvào thư mục /tmpvà 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 lstrong đó ..


2
vâng, tôi nghĩ các tùy chọn cho bạn thấy rằng unix hãy để bạn làm mọi thứ, đó được coi là thực hành xấu. Thêm. đường dẫn của bạn cũng có thể tạo ra các tác dụng phụ khác nói chung là xấu.
Unix Janitor

1

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

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

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.