Tôi nên đặt tập lệnh bash của mình ở đâu


15

Tôi có một vài kịch bản bash rất đơn giản mà tôi đã ghép lại với nhau cho những việc mà tôi làm thường xuyên. Một trong số đó là chạy trùng lặp để thực hiện các tác vụ sao lưu của tôi. Không có gì thông minh chỉ là một bó nếu .. sau đó tuyên bố thực sự. Vì điều này cần được chạy như sudo, cách tốt nhất là đặt tập lệnh của tôi vào / usr / bin (hoặc vị trí khác trong PATH), chown đến root.root và chmod đến 700?


Tôi muốn nói sử dụng gitđể kiểm soát phiên bản tập lệnh của bạn, đặt các bản sao cục bộ của repit git ở đâu đó bạn thích ~và sau đó liên kết các tập lệnh vào ~/bin.
edwinksl

Bạn có nghĩa gitgithubtrong những đám mây?
WinEunuuchs2Unix

2
@ WinEunuuchs2Unix Nếu bạn muốn tập lệnh của mình có sẵn cho người dùng khác, bạn nên đặt chúng vào /usr/local/bin. Nếu không, tôi sẽ nói chỉ cần đặt chúng vào ~/bin. Tập lệnh của riêng bạn trong cả hai thư mục sẽ an toàn khi bạn nâng cấp.
edwinksl

2
Như trên, đặt chúng trong / usr / local / bin. Chỉ cần đảm bảo tên tập lệnh của bạn là duy nhất và không phải là tên lệnh / nhị phân linux hiện có. Bản thân tôi chỉ cần thêm một số vào cuối bất kỳ tập lệnh nào tôi tạo vì tôi chưa thấy bất kỳ tên linux nào tồn tại trước đó kết thúc bằng một số. (không nói rằng một số người thực sự tối nghĩa có thể ...
doug

1
@edwinksl Gần một năm sau tôi phải nói ~/binlà nơi tốt nhất cho hầu hết các tập lệnh vì bạn không phải sử dụng sudođể chỉnh sửa chúng như bạn làm khi chúng được lưu trữ /usr/local/bin.
WinEunuuchs2Unix

Câu trả lời:


3

Tôi lưu các kịch bản của riêng tôi trong /opt/scripts.

Nếu tập lệnh của bạn sẽ được thực thi bởi mọi người dùng hệ thống, bạn có thể tạo một liên kết tượng trưng đến /usr/bin.

Nếu chỉ root nên thực thi tập lệnh, bạn có thể tạo một liên kết tượng trưng đến /usr/sbin.

Lệnh để thêm một liên kết tượng trưng trong /usr/bin/:

ln -s /opt/scripts/<script> /usr/bin/

Bạn có thể thực thi tập lệnh, bởi vì /usr/bin/trong PATH của bạn theo mặc định.


1
Tôi khuyên bạn thay vì sử dụng /usr/binlàm mục tiêu cho tập lệnh shell của người dùng / cục bộ - rằng nó phải /usr/local/bin(hoặc /opt/bin) theo Tiêu chuẩn phân cấp hệ thống tập tin - Debian Wiki để tránh xung đột (hầu hết thời gian, bạn muốn các tập lệnh được cung cấp của Ubuntu được ưu tiên).
shalomb

Trên hầu hết các hệ thống /usr/local/binghi đè /usr/bin, vì nó đến sau trong đường dẫn. Đây là mục đích, vì hệ thống không đặt các tệp ở đó, vì vậy bạn có thể đặt các tệp ở đó, NÊN ghi đè lên các hệ thống được cung cấp.
allo

Tôi đánh dấu đây là câu trả lời đúng, mặc dù cả hai câu trả lời đều có vẻ tốt. Lý do là, tôi đã bắt đầu xem xét các tài liệu của FHS và hiểu được rằng / opt có chính xác cho mục đích này. Tôi thích ý tưởng của chúng chỉ đơn giản là liên kết sym đến các tập lệnh của tôi trong / usr / local / bin. Cảm ơn tất cả các con trỏ.
hatterman

17

Nếu không có người dùng nào khác ngoài bạn sử dụng các tập lệnh này:

Sau đó, bạn có thể giữ chúng trong /home/$USER/bin. Tạo binthư mục nếu nó không ở đó và di chuyển các tập tin ở đó. Thư mục bin trong nhà bạn sẽ tự động được thêm vào biến môi trường PATH. Mã này nằm trong .profile:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Xem Cách thêm / home / tên người dùng / bin vào $ PATH?

Hoặc trong một số hệ thống, nó có thể nằm trong .bashrc:

export PATH=${HOME}/bin/:${HOME}/.local/bin:${PATH}

Cảm ơn Anh Cả

Nếu những đoạn script này được sử dụng bởi những người dùng khác:

Sau đó, hoặc là /usr/local/binhoặc /opt/binlà lựa chọn tốt. Xem Có nơi nào chuẩn để đặt các tập lệnh Linux tùy chỉnh không?

Hi vọng điêu nay co ich


3

Tôi có một thư mục mà tôi sử dụng để thu thập nhanh các công cụ cục bộ hoặc những thứ tôi triển khai trên nhiều máy tính khác nhau /usr/local/apollo. Có các nhánh tắt thư mục này cho flags, binlogs.

Đối với các ứng dụng tôi tải xuống và cài đặt bên ngoài apt-getkho lưu trữ mặc định được đặt trong /opt/và một thư mục theo tên của ứng dụng, với một thư mục con nữa cho phiên bản cụ thể của ứng dụng. Bằng cách này, phiên bản được biên dịch của tôi của một ứng dụng như vlchoặc eclipsesẽ không xung đột với phiên bản phân tán.

Cách sử dụng của tôi /optlà cách nó được thiết kế chính thức.

Bằng cách này, các thư mục /usr/local/bin, /usr/local/apollo/opttồn tại cài đặt phiên bản hệ điều hành mới ghi đè.


1
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/binTôi thích thực tế /usr/local/binđã có trong một con đường ít hơn để nhớ. Tôi thích phương pháp của /opt/program/versionbạn Tôi có thể sử dụng phương pháp đó cho công cụ Kernel tôi nhận được và biên dịch như EnhanceIO nơi họ thay đổi mọi thứ giữa các phiên bản kernel. Là /apollomột mặt trăng yêu thích cá nhân hoặc nó có ý nghĩa Ubuntu?
WinEunuuchs2Unix

Sự khác biệt giữa /usr/local/binusr/local/sbinnhư vậy mà sau này được nâng cấp trong quá trình nâng cấp là gì?
WinEunuuchs2Unix

Trình cài đặt Nukes các thư mục mà nó sử dụng. Nó thuận tiện tạo các /usr/localthư mục, nhưng nó không đặt bất cứ thứ gì vào chúng. Những thư mục được điền bởi người dùng. Nhiều chương trình nguồn bên ngoài kho lưu trữ cung cấp cho người dùng tùy chọn chọn nơi họ muốn cài đặt. Mặc định trong các tập tin cấu hình là /usr/local/bin. Vì vậy, do mức độ phổ biến của việc sử dụng các thư mục đó, chúng được bao gồm trong đường dẫn của người dùng theo mặc định. Theo mặc định, hệ thống sẽ kiểm tra ~/bin và thêm nó vào đường dẫn nếu nó tồn tại.
LD James

Bạn có nghĩa là hệ thống kiểm tra ~/bintrong quá trình cài đặt hoặc mỗi lần khởi động? Sự khác biệt giữa sbinvà là bingì? Chúng dường như cùng tồn tại phải có các quy tắc gần đúng mà bạn chọn dựa trên loại chương trình phải không?
WinEunuuchs2Unix

1
@ WinEunuuchs2Unix Trên ~/binđường dẫn ... nó không được thêm trong khi cài đặt. Hệ thống kiểm tra nó trên mỗi lần đăng nhập và thêm nó vào $ PATH nếu nó tồn tại trong quá trình đăng nhập. Nhìn vào hai dòng cuối cùng của ~/.profilecài đặt của bạn .
LD James
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.