Đối với phần mềm chỉ bạn cần, sử dụng thư mục nhà của bạn thay vì /usr/local
.
Thay vì thay đổi quyền sở hữu /usr/local
hoặc phải chạy các lệnh dưới quyền root khi bạn không muốn, bạn chỉ nên định cấu hình các bản dựng để chúng cài đặt trong thư mục chính của bạn thay vì /usr/local
. Điều này giải quyết tất cả các vấn đề tiềm ẩn với việc thay đổi quyền sở hữu /usr/local
, bao gồm cả cách thức bin
và sbin
thư mục con của nó nằm trong root
đường dẫn của nó.
Nếu bạn cần cho phép người dùng khác chạy phần mềm của mình, bạn có thể cấp cho họ quyền truy cập. Trên thực tế, họ có thể sẽ có thể, vì theo mặc định, thư mục chính của bạn có quyền đọc và thực thi quyền truy cập . (Nếu bạn không muốn điều đó, bạn có thể thay đổi nó khá dễ dàng, chỉ bằng cách sử dụng chmod
trên bất kỳ tệp hoặc thư mục nào bạn muốn đặt ở chế độ riêng tư và cũng có thể thay đổi umask
.)
Với phần mềm được cài đặt trong thư mục nhà của bạn, các tệp nhị phân sẽ đi vào /usr/local/bin
thay vào đó sẽ đi vào . Bạn sẽ nhận được các thư mục con khác trong thư mục chính của bạn tương ứng với các thư mục con của phần mềm mà bạn cài đặt cần. Điều này thường sẽ tự động xảy ra khi bạn cài đặt phần mềm từ mã nguồn./home/username/bin
/usr/local
Cấu hình bản dựng của bạn
Hầu hết các phần mềm bạn xây dựng từ mã nguồn có một bước nơi bạn chạy:
./configure
Đối với phần lớn các phần mềm có configure
tập lệnh có thể chạy như vậy, nó mặc định cấu hình bản dựng để cài đặt bên trong /usr/local
khi cuối cùng bạn chạy sudo make install
để cài đặt nó. Lý do là nó hoàn toàn tương đương với việc chạy:
./configure --prefix=/usr/local
Để định cấu hình bản dựng để cài đặt trong thư mục chính của bạn, hãy sử dụng thay thế này:
./configure --prefix="$HOME"
Trong thực tế, trong Ubuntu, các đường dẫn thư mục chính không chứa khoảng trắng, khoảng trắng khác hoặc các ký tự khác sẽ được xử lý đặc biệt bởi shell như *
vậy, trừ khi bạn thiết lập tài khoản người dùng của mình khá kỳ lạ, bạn chỉ cần gõ:
./configure --prefix=$HOME
(Tuy nhiên, tôi không khuyên bạn nên tập thói quen viết tập lệnh . Ngoài ra, trên một số HĐH khác - chẳng hạn như macOS - việc các đường dẫn đến thư mục chính của người dùng có chứa khoảng trắng sẽ không phổ biến.)
Hoặc nếu bạn thích, bạn có thể gõ đường dẫn thư mục nhà đầy đủ của mình:
./configure --prefix=/home/username
(Tất nhiên, thay thế username
bằng tên người dùng thực tế của bạn. Nếu vì lý do nào đó, thư mục chính của bạn không có /home
thì bạn sẽ phải điều chỉnh cho phù hợp.)
Cài đặt bản dựng của bạn
Sau khi bạn chạy make
, bạn có thể quen với việc chạy sudo make install
, nhưng khi bạn cài đặt trong thư mục chính của mình, bạn không cần phải chạy nó dưới quyền root, vì vậy bạn có thể - và nên --omit sudo
. Chỉ cần chạy:
make install
Tương tự, đối với phần mềm hỗ trợ uninstall
mục tiêu:
make uninstall
Đây chính xác là những gì bạn đã yêu cầu ... chỉ trong thư mục nhà của bạn, không phải /usr/local
.
Chạy chương trình của bạn
Có lẽ các bin
thư mục con của thư mục chính của bạn là một trong hai:
- đã có trong
$PATH
, hoặc
- sẽ ở trong bạn
$PATH
nếu bạn chỉ cần đăng xuất và đăng nhập lại.
Lý do là .profile
tệp trong thư mục chính của bạn, chứa các lệnh chạy khi bạn đăng nhập, mặc định chứa tệp này cho các tài khoản người dùng được tạo trong hầu hết các phiên bản Ubuntu (bao gồm cả tài khoản quản trị viên ban đầu được tạo khi bạn cài đặt HĐH):
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Mã đó chạy khi bạn đăng nhập (vì nó vào .profile
) và đặt bin
thư mục cá nhân của bạn $PATH
chỉ khi nó tồn tại vào thời điểm đó. Đó là lý do tại sao bạn có thể cần phải đăng xuất và đăng nhập lại.
Các bản phát hành cũ hơn như Ubuntu 14.04, cũng như các bản phát hành mới hơn như Ubuntu 17.10, đi kèm với điều đó. Tuy nhiên, Ubuntu 16.04, có lẽ là bản phát hành phổ biến nhất kể từ bài viết này, thay vào đó:
# set PATH so it includes user's private bin directories
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
Điều đó chỉ đơn giản là thêm bin
thư mục con của thư mục chính của bạn --- cũng như .local/bin
thư mục con - vào thư mục của bạn $PATH
, mà không kiểm tra xem các thư mục đó có thực sự tồn tại không. Vì vậy, nếu bạn sử dụng 16.04 hoặc nếu bạn đã nâng cấp từ hệ thống 16.04 khi tài khoản người dùng của bạn được tạo, thì bin
thư mục con của thư mục chính của bạn có khả năng đã có trong của bạn $PATH
.
.profile
Tập tin của bạn được sao chép từ /etc/skel
thư mục khi tài khoản người dùng của bạn được tạo. Nếu tài khoản người dùng của bạn được tạo trên một bản phát hành Ubuntu cũ hơn, thì nó đã có phiên bản .profile
đó và nó không bị thay đổi - đối với tài khoản người dùng của bạn - bằng cách nâng cấp lên bản phát hành gần đây hơn.
Khi bin
thư mục con của thư mục chính của bạn nằm trong bạn $PATH
, bạn sẽ có thể chạy các chương trình có tệp thực thi được cài đặt ở đó chỉ bằng cách nhập tên của chúng, giống như bạn có thể làm với các chương trình được cài đặt bởi trình quản lý gói của Ubuntu hoặc được cài đặt bên trong /usr/local
.
các .local
Tùy chọn
Bạn có thể nhận thấy rằng .profile
tệp mặc định cho tài khoản người dùng được tạo trong một số bản phát hành Ubuntu, bao gồm cả 16.04 như được mô tả ở trên, không chỉ thêm $HOME/bin
vào đường dẫn của bạn mà còn $HOME/.local/bin
. Nếu bạn .profile
không thêm nó, nhưng bạn muốn nó, thì bạn chỉ cần chỉnh sửa nó.
Mặc dù thường được sử dụng để lưu trữ cài đặt và dữ liệu được lưu trong bộ nhớ cache , bạn cũng có thể cài đặt phần mềm bên trong .local
thư mục con của thư mục chính. Bạn nên cảm thấy không bị ràng buộc khi làm như vậy, vì từ quan điểm khả năng sử dụng và bảo mật, --prefix="$HOME/.local"
tương tự như --prefix="$HOME"
.
Hãy nhớ rằng các tệp và thư mục bắt đầu .
không được hiển thị theo mặc định trong các trình duyệt tệp đồ họa (sử dụng Ctrl+ Hđể bỏ ẩn và phục hồi chúng) hoặc bằng ls
lệnh (truyền -A
hoặc -a
cờ để hiển thị chúng). Đây có thể không phải là những gì bạn muốn, hoặc nó có thể là chính xác những gì bạn muốn. Đây là một vấn đề sở thích cá nhân.
Tuy nhiên, tôi đã quan sát thấy rằng một số trình quản lý gói dựa trên nguồn tự động xây dựng và cài đặt phần mềm trong thư mục chính của một người sử dụng $HOME/.local
. Tôi thực sự không biết mức độ phổ biến của nó - Tôi hy vọng sẽ điều tra thêm và cập nhật câu trả lời này - nhưng bạn có thể chỉ muốn sử dụng $HOME
cho những thứ bạn biên dịch thủ công. Bằng cách đó, nó sẽ rõ ràng nơi mọi thứ đến từ. Và nếu có va chạm, phần mềm vẫn có khả năng cùng tồn tại chấp nhận được.
Bạn cũng có thể cố tình cài đặt một số phần mềm trong $HOME/.local
và phần mềm khác $HOME
. Tuỳ bạn. Bất kỳ bin
thư mục nào xuất hiện đầu tiên trong $PATH
biến môi trường của bạn là một lệnh mà một lệnh sẽ chạy từ đó, trong trường hợp các lệnh cùng tên tồn tại trong cả hai.
Tín dụng đến Zanna và Videonauth vì đã chỉ ra lỗi trong phiên bản trước của câu trả lời này, liên quan đến bản phát hành Ubuntu nào có mã mặc định .profile
và giúp tôi sửa lỗi (xem thêm tại đây ).