Cách đặt biến môi trường vĩnh viễn


227

Biến của tôi là

LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
ORACLE_HOME=/usr/lib/oracle/11.2/client64

Làm thế nào để lưu các biến này vĩnh viễn?


2
Các câu trả lời khác trên trang này là tuyệt vời. Một khuyến nghị nhỏ sẽ là thêm /usr/lib/oracle/11.2/client64/libvào một tệp mới theo /etc/ld.so.conf.d/đường dẫn. Sau đó, bạn không cần phải đặt LD_LIBRARY_PATH, xem thêm tại đây .
Elliott Frisch

1
Cẩn thận, có nhiều điều cho câu chuyện này hơn ban đầu xuất hiện. Tôi mời bạn kiểm tra câu trả lời của tôi.
jasonleonhard

Câu trả lời:


252

Bạn có thể thêm nó vào tệp .profilehoặc tệp hồ sơ vỏ đăng nhập của bạn (nằm trong thư mục chính của bạn).

Để thay đổi biến môi trường "vĩnh viễn", bạn cần xem xét ít nhất các tình huống sau:

  1. Đăng nhập / không đăng nhập shell
  2. Vỏ tương tác / không tương tác

bash

  1. Bash như vỏ đăng nhập sẽ được tải /etc/profile, ~/.bash_profile, ~/.bash_login, ~/.profiletheo thứ tự
  2. Bash như vỏ tương tác không đăng nhập sẽ tải ~/.bashrc
  3. Bash là shell không tương tác không đăng nhập sẽ tải cấu hình được chỉ định trong biến môi trường $BASH_ENV
$EDITOR ~/.profile
#add lines at the bottom of the file:  
     export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
     export ORACLE_HOME=/usr/lib/oracle/11.2/client64

zsh

$EDITOR ~/.zprofile
#add lines at the bottom of the file:  
     export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
     export ORACLE_HOME=/usr/lib/oracle/11.2/client64

ksh

$EDITOR ~/.profile
#add lines at the bottom of the file:  
     export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
     export ORACLE_HOME=/usr/lib/oracle/11.2/client64

bourne

$EDITOR ~/.profile
#add lines at the bottom of the file:  
     LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib     
     ORACLE_HOME=/usr/lib/oracle/11.2/client64
     export LD_LIBRARY_PATH ORACLE_HOME

csh hoặc tcsh

$EDITOR ~/.login
#add lines at the bottom of the file:  
     setenv LD_LIBRARY_PATH /usr/lib/oracle/11.2/client64/lib
     setenv ORACLE_HOME /usr/lib/oracle/11.2/client64

Nếu bạn muốn làm cho nó vĩnh viễn cho tất cả người dùng, bạn có thể chỉnh sửa các tệp tương ứng bên dưới /etc/, ví dụ /etc/profilenhư các shell giống như Bourne, /etc/csh.logincho (t) csh /etc/zsh/zprofile/etc/zsh/zshrccho zsh.

Một tùy chọn khác là sử dụng /etc/environment, mà trên các hệ thống Linux được đọc bởi mô-đun PAM pam_envvà chỉ hỗ trợ các bài tập đơn giản, không mở rộng kiểu vỏ. (Xem hướng dẫn của Debian về điều này.)

Các tệp này có thể đã chứa một số bài tập, vì vậy hãy làm theo cú pháp bạn thấy đã có trong tệp của mình.

Đảm bảo khởi động lại shell và đăng nhập lại người dùng, để áp dụng các thay đổi.

Nếu bạn cần thêm biến môi trường toàn hệ thống, giờ đây có /etc/profile.dthư mục chứa tập lệnh sh để khởi tạo biến.
Bạn có thể đặt tập lệnh sh của bạn với tất cả các biến bạn đã xuất ở đây.
Hãy cẩn thận mặc dù điều này không nên được sử dụng như một cách chuẩn để thêm biến vào env trên Debian.


Điều này .profiletrong /etc/nhưng tôi không làm thế nào để thiết lập các biến trong này, .profilexin vui lòng cho tôi biết
user3021349

6
.profilecó trong thư mục nhà của bạn không/etc/
Kiwy

1
[Admin@localhost etc]$ cat ~/.profile cat: /home/Admin/.profile: No such file or directory [Admin@localhost etc]$
dùng3021349

4
@ user3021349 Tôi không có ý thô lỗ nhưng nếu bạn nghĩ một giây bạn cũng có thể sử dụng một trình soạn thảo khác mà bạn thành thạo. :wqlà lệnh ghi tập tin và thoát trong vi đừng quên gõ esctrước
Kiwy

3
Bạn sẽ cần xem xét các biến môi trường trong crontabcác tập lệnh. Không có vị trí nào trong số này sẽ được tra cứu khi crontabtập lệnh đang chạy.
yegle

71

Để làm nếu cho tất cả người dùng / shell, tùy thuộc vào distro bạn có thể sử dụng /etc/environmenthoặc /etc/profile. Tạo một tệp mới trong /etc/profile.dcó thể thích hợp hơn nếu nó tồn tại, vì nó sẽ ít có khả năng xung đột với các bản cập nhật được thực hiện bởi hệ thống đóng gói.

Trong /etc/environment, các biến thường được đặt với name=value, ví dụ:

ORACLE_HOME=/usr/lib/oracle/11.2/client64

Trong /etc/profile, bạn phải sử dụng exportvì đây là tập lệnh, ví dụ:

export ORACLE_HOME=/usr/lib/oracle/11.2/client64

Cũng vậy với một tập tin dưới /etc/profile.dhạn chế, cũng có thể được đặt tên mà phải được đáp ứng cho các tập tin để làm việc. Trên Debian, tệp phải có phần mở rộng .sh(mặc dù không cần dòng bang hoặc quyền thực thi vì nó có nguồn gốc). kiểm tra tài liệu phân phối của bạn hoặc xem /etc/profiletập lệnh để xem các tệp này được tải như thế nào.

Cũng lưu ý rằng cài đặt LD_LIBRARY_PATHvĩnh viễn có khả năng có vấn đề , bao gồm cả rủi ro bảo mật. Để thay thế, tôi sẽ đề nghị tìm một số cách để LD_LIBRARY_PATHbắt đầu dòng lệnh cho mỗi chương trình cần trước khi chạy. Ví dụ:

LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib myprog

Một cách để làm điều này là sử dụng tập lệnh bao bọc để chạy chương trình. Bạn có thể đặt cùng tên với chương trình của bạn và đặt nó vào /usr/local/binhoặc bất kỳ nơi nào xuất hiện trước vị trí của chương trình của bạn PATH. Đây là một kịch bản ví dụ (đừng quên chmod +xtập lệnh):

#!/bin/sh
LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib /real/location/of/myprog "$@"

vì vậy, nếu tôi đã thêm các cặp giá trị vào environmenttệp của mình , nguyên nhân nào khiến chúng tải lên? Ví dụ: sau khi thoát khỏi trình soạn thảo vi (các thay đổi được viết thành công), tôi hy vọng sẽ viết echo $MY_NEW_VARIABLEvà xem nó được in ra - EDIT: Tôi thấy chúng ở đó nếu tôi khởi chạy một shell lệnh mới
bkwdesign

Không chắc đây có phải là sự cố cá nhân hay không, nhưng tôi đã phải khởi động lại hệ điều hành của mình sau khi cài đặt hệ thống này /etc/environment, ngay cả khi tôi khởi động lại thiết bị đầu cuối bash hoặc gõ source /etc/environment. Vì vậy, nếu bạn gặp vấn đề trong đó biến môi trường không tồn tại lâu, hãy thử khởi động lại.
Blairg23

@bkwdesign @ Blairg23, /etc/environmentkhông phải là một tập lệnh, vì vậy nó không thể có nguồn gốc. Nó được PAM tải vào thời gian đăng nhập (và một số sự kiện hệ thống khác) bởi PAM, do đó bạn có thể đăng xuất / đăng nhập hoặc chạy phiên đăng nhập mới trong thiết bị đầu cuối bằng cách $ su <your username here>chọn các giá trị mới trong phiên bị cô lập đó. Các giá trị sẽ biến mất sau khi bạn thoát, do đó có lẽ ít bị lỗi hơn khi chỉ đăng xuất / đăng nhập đầy đủ.
AaronDanielson

2

Khi bạn cài đặt oracle, oracle yêu cầu bạn chạy một số tập lệnh trước khi nhấp vào ok. Kịch bản lệnh đó đặt một thiết lập giả trong .bash_profilethư mục nhà của người dùng oracle. Để xem tập tin, ls -alsẽ hiển thị tất cả các tập tin ẩn.

nano bash_profileđể mở tập tin. Thay đổi tệp để phản ánh tên máy chủ của bạn và tên sid phù hợp. kiểm tra bất kỳ cài đặt nào khác cần sửa đổi. nhấn control x để lưu và gõ y khi được hỏi nếu bạn muốn lưu. Nhấn phím quay lại để lưu. Khởi động lại máy tính. Đăng nhập như người dùng tiên tri. bắt đầu cơ sở dữ liệu bằng cách gõ

sqlplus / as sysdba

startup  

Làm thế nào để điều này khác với câu trả lời được chấp nhận ?
roaima
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.