Đặt biến PATH trong / etc / môi trường so với .profile


58

Đâu là nơi ưa thích để đặt PATHenvvar?

~/.profilehay /etc/environment?

Trường hợp nào PATHđược đặt ở cả hai nơi? Là kết quả cuối cùng là sự kết hợp của cả hai giá trị được đặt ở hai vị trí đó?


Tất nhiên, nhiệm vụ cuối cùng cho PATH chiếm ưu thế. Hầu hết các tập lệnh đặt nó rõ ràng ở phần đầu của tập lệnh.
AlexP

Câu trả lời:


71

Tóm lược:

  • Nếu bạn muốn thêm một đường dẫn (ví dụ /your/additional/path) vào PATHbiến của mình cho người dùng hiện tại của bạn chứ không phải cho tất cả người dùng máy tính của bạn, bạn thường đặt nó ở cuối của ~/.profilemột trong hai ví dụ sau:

    PATH="/your/additional/path:$PATH"
    PATH="$PATH:/your/additional/path"
    

    Lưu ý rằng các ưu tiên đường dẫn giảm dần từ trái sang phải, vì vậy đường dẫn đầu tiên có mức ưu tiên cao nhất. Nếu bạn thêm đường dẫn của mình ở bên trái $PATH, nó sẽ có mức ưu tiên cao nhất và các tệp thực thi trong vị trí đó sẽ ghi đè tất cả các đường dẫn khác. Nếu bạn thêm đường dẫn của mình ở bên phải, nó sẽ có mức ưu tiên thấp nhất và các tệp thực thi từ các vị trí khác sẽ được ưu tiên.

  • Tuy nhiên, nếu bạn cần đặt biến môi trường đó cho tất cả người dùng, tôi vẫn không khuyên bạn nên chạm vào /etc/environmentmà tạo một tệp có tên tệp kết thúc .shbằng /etc/profile.d/. Tập /etc/profilelệnh và tất cả các tập lệnh trong /etc/profile.dtương đương toàn cầu của mỗi cá nhân người dùng ~/.profilevà được thực thi dưới dạng tập lệnh shell thông thường bởi tất cả các trình bao trong quá trình khởi tạo.


Chi tiết hơn:

  • /etc/environmentlà một tệp cấu hình toàn hệ thống, có nghĩa là nó được sử dụng bởi tất cả người dùng. Nó được sở hữu bởi rootmặc dù, vì vậy bạn cần phải là người dùng quản trị và sử dụng sudođể sửa đổi nó.

  • ~/.profilelà một trong những tập lệnh khởi tạo shell cá nhân của người dùng của bạn. Mỗi người dùng có một và có thể chỉnh sửa tệp của họ mà không ảnh hưởng đến người khác.

  • /etc/profile/etc/profile.d/*.shlà các tập lệnh khởi tạo toàn cầu tương đương ~/.profilevới mỗi người dùng. Các tập lệnh toàn cầu được thực thi trước các tập lệnh cụ thể của người dùng; và chính /etc/profilethực thi tất cả các *.shtập lệnh /etc/profile.d/ngay trước khi nó thoát.


  • Các /etc/environmenttập tin thường chỉ chứa dòng này:

    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
    

    Nó đặt PATHbiến cho tất cả người dùng trên hệ thống thành giá trị mặc định này, không nên thay đổi theo cách chính. Ít nhất bạn không nên loại bỏ bất kỳ của những con đường quan trọng như /bin, /sbin, /usr/bin/usr/sbintừ nó.

    Tệp này được đọc là một trong những tệp cấu hình đầu tiên bởi mọi shell của mọi người dùng. Lưu ý rằng nó không phải là một kịch bản shell . Nó chỉ là một tệp cấu hình được phân tích cú pháp bằng cách nào đó và chỉ có thể chứa các bài tập biến môi trường!

  • Các ~/.profiletập tin có thể chứa nhiều yếu tố, theo mặc định nó có chứa giữa những thứ khác một tấm séc liệu một ~/binthư mục tồn tại và bổ sung thêm rằng để tồn tại của người dùng PATHthay đổi, như thế này (trên Ubuntu phát hành cũ trước khi 16,04 - đó thêm nó vô điều kiện - và trên 18,04 , cũng thêm "~ / .local / bin"):

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

    Bạn thấy rằng giá trị cũ của việc PATHđược sử dụng lại ở đây và đường dẫn mới chỉ được thêm vào đầu thay vì ghi đè lên mọi thứ. Khi bạn muốn thêm đường dẫn mới theo cách thủ công, bạn cũng nên luôn giữ $PATHgiá trị cũ ở đâu đó trong chuỗi mới.

    Kịch bản khởi tạo này chỉ được đọc bởi các shell của người dùng mà nó thuộc về, nhưng có một điều kiện khác:

    # ~/.profile: executed by the command interpreter for login shells.
    # This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
    # exists.
    

    Vì vậy, nếu bạn sử dụng shell Bash mặc định, bạn nên đảm bảo rằng bạn không có ~/.bash_profilehoặc ~/.bash_loginnếu bạn muốn các thay đổi ~/.profilecó ảnh hưởng đến người dùng của bạn.


Để hiểu đầy đủ về Biến môi trường, hãy xem: https://help.ubfox.com/community/En MôiVariables


Câu hỏi liên quan: sự khác biệt giữa tập tin bash.bashrc và / etc / môi trường


2
Ngày nay ~/.profilekhông kiểm tra sự tồn tại của ~/binnó, nhưng nó chỉ đơn giản là có dòng:PATH="$HOME/bin:$HOME/.local/bin:$PATH"
Gunnar Hjalmarsson

1
@GunnarHjalmarsson Xác định "ngày nay", làm ơn? Tôi đang chạy 16.04 và nó trông như thế ở đó.
Chỉ huy Byte

2
/etc/skel/.profiletrong 16.04 có dòng tôi đã đề cập. Bạn rõ ràng đã tạo người dùng của bạn trong một phiên bản trước.
Gunnar Hjalmarsson

1
@GunnarHjalmarsson Cảm ơn thông tin - cho đến khoảng năm phút trước , tôi nghĩ mặc định ~/.profilevẫn có cái này, nhưng bạn nói đúng - /etc/skel/.profilekhông có nó trên hệ thống 16.04 được nâng cấp của tôi (và tài khoản người dùng được tạo khi cài đặt 16.04 vào một máy khác không có nó trong của họ .profile).
Eliah Kagan

2
"... được thực thi như các tập lệnh shell thông thường bởi tất cả các shell trong quá trình khởi tạo của chúng." Tôi nghĩ rằng điều này là sai lệch. Có thể đề xuất (với một số) rằng chỉ cần mở một vỏ thiết bị đầu cuối không đăng nhập từ màn hình GUI sẽ thực thi / etc / profile, điều này sẽ không xảy ra. Askubfox.com/questions/155865/ Mạnh
Hawkeye Parker

22

Câu trả lời này chủ yếu là về thứ tự các biến môi trường như PATHđược gán khi được chỉ định trong các tệp cấu hình khác nhau. Tôi cũng bao gồm nơi bạn thường nên đặt chúng, nhưng danh sách dưới đây không liệt kê các tệp theo thứ tự mà bạn nên xem xét sử dụng chúng. Để biết thông tin chung về cài đặt PATHvà các biến môi trường khác trong Ubuntu, tôi cũng khuyên bạn nên đọc Biến môi trường và các câu trả lời khác cho câu hỏi này.

Vị trí ưa thích để đặt PATHtùy thuộc vào người dùng bạn cần đặt và thời điểm và cách bạn muốn đặt. Một phần quyết định của bạn sẽ là liệu bạn muốn đặt biến môi trường cho tất cả người dùng hay trên cơ sở mỗi người dùng. Nếu bạn không chắc chắn, thì tôi khuyên bạn nên đặt nó cho chỉ một người dùng (ví dụ: tài khoản của bạn) thay vì toàn hệ thống.

Như AlexP nói , PATHbiến môi trường sẽ có giá trị được gán gần đây nhất . Trong thực tế, hầu hết thời gian bạn đặt PATH, bạn bao gồm giá trị PATH trong giá trị mới, để các mục trước đó được giữ lại.

Vì vậy, trong thực tế, khi PATHđược đặt từ nhiều tệp, nó thường chứa các mục được đưa ra trong tất cả các tệp. Nhưng điều đó chỉ xảy ra bởi vì tất cả các tệp đặt nó, ngoại trừ tệp đầu tiên, thường tham chiếu PATHchính biến đó, khiến giá trị cũ của nó được bao gồm giá trị mới.

Do đó, bạn đang có hiệu lực yêu cầu thứ tự PATHcài đặt trong các tệp khác nhau có hiệu lực.

Các vị trí phổ biến, mục đích chung để đặt PATHđược liệt kê bên dưới theo thứ tự chúng có hiệu lực khi người dùng đăng nhập, không theo thứ tự bạn thường nên xem xét sử dụng chúng . Mỗi địa điểm được liệt kê dưới đây là một lựa chọn hợp lý để thiết lập PATH trong một số tình huống , nhưng chỉ có một số ít là lựa chọn tốt trong hầu hết thời gian.

Trong danh sách dưới đây, bạn sẽ thấy một số tên thư mục như thế nào ~/.profile. Trong trường hợp bạn không quen với việc mở rộng dấu ngã , hãy ~/tham khảo thư mục chính của người dùng hiện tại. Tôi chủ yếu sử dụng cú pháp này cho sự gọn nhẹ. Nó được hỗ trợ trong các kịch bản shell, nhưng không phải trong các tệp cấu hình PAM.

1. Đối với tất cả người dùng: /etc/environment

PAM trên Ubuntu khiến các biến môi trường được liệt kê /etc/environmentđược đặt, nếu tệp đó tồn tại, theo mặc định nó có. Đó là cách các biến môi trường cho tất cả người dùng được đặt phổ biến nhất.

$ cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

Nếu bạn phải đặt các biến môi trường cho tất cả các tài khoản người dùng, thay vì chỉ tài khoản người dùng của bạn, thì việc sửa đổi tệp đó có thể là lựa chọn tốt nhất của bạn. Tôi khuyên bạn nên sao lưu nó trước. Một cách để sao lưu tệp này là chạy:

sudo cp /etc/environment /etc/environment.orig

Các .origphần mở rộng không được yêu cầu cụ thể - bạn có thể cảm thấy tốt về đặt tên cho các tập tin sao lưu bất cứ điều gì đó là không gây nhầm lẫn hoặc đã được sử dụng. (Bên cạnh đó .orig, .old, .backup.bakrất phổ biến.)

Bạn có thể chỉnh sửa tập tin này trong bất kỳ cách nào bạn có thể sửa đổi bất kỳ tập tin khác như là người dùng root ( sudoedit /etc/enviromnment, sudo nano -w /etc/environment, gksudo gedit /etc/environment, vv)

/etc/environmentkhông hỗ trợ bao gồm giá trị cũ của một biến tự động. Nhưng điều này thường không cần thiết, vì hầu hết thời gian bạn sẽ đặt biến môi trường cho tất cả người dùng bằng cách chỉnh sửa /etc/environment, dù sao bạn cũng muốn đó là giá trị ban đầu khi người dùng đăng nhập. Người dùng sau đó có thể thay đổi nó theo ý muốn. Thông thường nó là tốt cho người dùng để có thể làm điều này.

2. Đối với tất cả người dùng: /etc/security/pam_env.conf

PAM đọc các biến môi trường cho tất cả người dùng từ /etc/security/pam_env.conf, được chỉ định với cùng một cú pháp như được sử dụng trong ~/.pam_environmentcác tệp cho mỗi người dùng (xem bên dưới).

Khi cùng một biến môi trường được đặt ở cả hai /etc/environment/etc/security/pam_env.conf, giá trị trong pam_env.confđược sử dụng - ngay cả khi giá trị đó được chỉ định DEFAULTthay vì OVERRIDE.

Tuy nhiên, khi bạn thay thế một dòng environmentbằng một trong pam_env.conf, bạn có thể bao gồm nội dung của giá trị thay thế. Xem phần bên dưới .pam_environmentđể biết chi tiết (vì nó sử dụng cùng một cú pháp).

Thông thường không cần thiết phải chỉnh sửa pam_env.confbạn nên rất cẩn thận nếu có , vì một dòng không đúng định dạng thường sẽ ngăn tất cả các tài khoản người dùng bình thường đăng nhập! Ví dụ: mặc định pam_env.confchứa các dòng:

#PATH           DEFAULT=${HOME}/bin:/usr/local/bin:/bin\
#:/usr/bin:/usr/local/bin/X11:/usr/bin/X11

Điều này được trình bày như một trong một số ví dụ. Một trong những điều nó minh họa là làm thế nào để phân chia một bài tập trên nhiều dòng \. Giả sử bạn đã bỏ ghi chú chỉ dòng đầu tiên, nhưng quên bỏ ghi chú dòng thứ hai:

PATH           DEFAULT=${HOME}/bin:/usr/local/bin:/bin\
#:/usr/bin:/usr/local/bin/X11:/usr/bin/X11

Đừng làm điều này!

Tôi chỉ tự mình kiểm tra một cách tình cờ và nó đã ngăn bất kỳ người dùng nào đăng nhập thành công. Để khắc phục, tôi phải khởi động ở chế độ recovery và thay đổi lại. (May mắn là tôi đã làm điều này trên một máy ảo mà tôi chỉ sử dụng để thử nghiệm mọi thứ, vì vậy nó không gây rắc rối cho tôi.)

3. Đối với một người dùng: .pam_environmenttrong thư mục nhà của người dùng

Một trong những cách để đặt biến môi trường cho một người dùng là cho người dùng đó chỉnh sửa (hoặc tạo) .pam_environmenttrong thư mục chính của họ. Các giá trị được đặt trong tệp này thay thế các giá trị được đặt trong /etc/environmenttệp chung.

.pam_environmentkhông phải là một phần của bộ tệp được sao chép vào thư mục nhà của người dùng khi tài khoản người dùng được tạo ban đầu. Tuy nhiên, nếu bạn tạo tệp đó trong thư mục chính của mình, bạn có thể sử dụng tệp đó để đặt các biến môi trường như thế nào PATH. Không giống như /etc/environment(nhưng giống như /etc/security/pam_env.conf), các .pam_environmenttệp trên mỗi người dùng hỗ trợ mở rộng giá trị cũ của biến môi trường thành một biến mới. Tuy nhiên, chúng không phải là các tập lệnh shell và bạn phải sử dụng một cú pháp đặc biệt để đạt được điều này, khác với cú pháp bạn sẽ sử dụng trong một tệp như thế nào .profile.

Ví dụ: nếu bạn có một bin2thư mục trong thư mục chính mà bạn muốn thêm vào cuối PATH, bạn có thể làm điều đó bằng cách thêm dòng này vào .pam_environment:

PATH DEFAULT=${PATH}:/home/@{PAM_USER}/bin2

Xem các ~/.pam_environmenttiểu mục của EnvironmentVariables (mà từ đó các ví dụ trên được điều chỉnh chặt chẽ), man pam_envman pam_env.confđể biết thêm chi tiết.

Mặc dù điều này đã từng được quảng cáo là cách ưa thích để người dùng Ubuntu thay đổi hoặc thêm các biến môi trường và vẫn được coi là lựa chọn hợp lý và có thể chấp nhận được, bạn nên cẩn thận khi chỉnh sửa.pam_environment . Giống như chỉnh sửa trên toàn hệ thống /etc/security/pam_env.conf(xem ở trên), một dòng không đúng trong .pam_environmenttệp của người dùng sẽ ngăn đăng nhập thành công. (Tôi đã thử nghiệm điều này - về mục đích lần này.) Để biết thông tin về cách các khuyến nghị đã phát triển , hãy xem ý kiến của Gunnar Hjalmarsson bên dướicuộc thảo luận này . ubuntu-devel

Nói chung , một lỗi như vậy ít nghiêm trọng hơn nhiều so với một dòng không đúng định dạng pam_env.conf, bởi vì nó chỉ ảnh hưởng đến một người dùng. Tuy nhiên, trong trường hợp hệ thống Ubuntu trên máy tính để bàn chỉ có một tài khoản người dùng cho phép đăng nhập, một lỗi như vậy trong khi chỉnh sửa .pam_environmentsẽ tệ như chỉnh sửa lỗi pam_env.conf- nếu bạn chưa đăng nhập, bạn sẽ không thể để sửa lỗi mà không cần khởi động trong chế độ khôi phục (hoặc từ USB trực tiếp, v.v.).

(Nếu bạn có tài khoản người dùng khác, thì bạn có thể đăng nhập với tư cách người dùng khác và khắc phục sự cố. Ngay cả khi họ không phải là quản trị viên và không sudothể root, họ vẫn có thể chạy và được nhắc nhập mật khẩu (không phải của họ) . các khách tài khoản, tuy nhiên, không thể làm được điều này, vì nó là bị cấm sử dụng để đưa vào danh tính của người dùng khác.)su your-accountsu

4. Đối với tất cả người dùng: /etc/profilevà các tệp bên trong/etc/profile.d/

Các shell tương thích Bourne (bao gồm cả bashshell người dùng mặc định trong Ubuntu) chạy các lệnh /etc/profilekhi được gọi làm shell đăng nhập.

Ubuntu /etc/profile.dkết thúc bằng:

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

Điều này gây ra các lệnh trong bất kỳ tệp nào trong /etc/profile.d/thư mục có tên kết thúc cũng .shđược chạy.

Hầu hết các trình quản lý hiển thị khiến các lệnh trong /etc/profile(và do đó các tệp trong /etc/profile.d) cũng được chạy để đăng nhập đồ họa. Tuy nhiên, không phải tất cả đều như vậy, và đó là một đối số đáng kể ủng hộ việc sử dụng các phương tiện do PAM cung cấp thay vào đó (xem ở trên) - trừ khi sẽ không bao giờ có bất kỳ thông tin đăng nhập đồ họa nào cho hệ thống này, ví dụ, có thể là trường hợp đó một máy chủ không cài đặt GUI.

Đó là truyền thống để đặt các biến môi trường toàn hệ thống /etc/profile, nhưng đây thường không phải là lựa chọn tốt nhất nữa. Nếu bạn không thể đặt biến môi trường /etc/environmentvà bạn phải đặt biến cho tất cả người dùng, thì có lẽ tốt hơn là tạo một tệp mới /etc/profile.d/hơn là /etc/profiletự chỉnh sửa . Một lý do cho điều này là, khi Ubuntu được nâng cấp, có thể có một /etc/profiletệp mặc định mới . Tùy thuộc vào cách bạn thực hiện nâng cấp, tệp cũ (với các thay đổi của bạn) sẽ được giữ lại, từ bỏ tệp cấu hình được cập nhật cụ thể đó, hoặc bạn sẽ được nhắc xử lý tình huống.

Khi cùng một biến môi trường được đặt trong cả hai /etc/profilevà một hoặc nhiều tệp trong /etc/profile.dđó, được thực hiện sau cùng? Điều này phụ thuộc vào việc các lệnh trong /etc/profiletập hợp đó xuất hiện trước hay sau khi các tệp trong đó profile.dcó nguồn gốc (theo mã tôi đã trích dẫn ở trên). Các lệnh trong /etc/profileđược thực hiện theo thứ tự chúng xuất hiện.

/etc/profilelà một tập lệnh shell và cú pháp của nó không giống với tập lệnh cấu hình PAM đã thảo luận ở trên . Cú pháp của nó giống như cú pháp của ~/.profiletệp theo người dùng (xem bên dưới).

Nếu bạn cần viết mã quyết định có thêm thư mục cụ thể vào PATH(và làm như vậy cho tất cả người dùng) hay không, bạn sẽ không thể sử dụng /etc/environmenthoặc /etc/security/pam_env.confthực hiện điều đó. Đây có lẽ là tình huống chính mà tốt hơn là sử dụng /etc/profilehoặc /etc/profile.d/thay vào đó.

5. Đối với một người dùng: .bash_profiletrong thư mục nhà của người dùng

Nếu người dùng có ~/.bash_profile, bash sử dụng nó thay vì ~/.profilehoặc ~/.bash_login(xem bên dưới). Bạn thường không nên có một .bash_profiletrong thư mục nhà của bạn.

Nếu bạn làm như vậy, nó thường phải chứa một lệnh tới nguồn ~/.profile(ví dụ . "$HOME/.profile":). Mặt khác, nội dung của .profiletệp trên mỗi người dùng hoàn toàn không chạy.

6. Đối với một người dùng: .bash_logintrong thư mục nhà của người dùng

Nếu người dùng có ~/.bash_login, bash sử dụng nó thay vì ~/.profile(xem bên dưới), trừ khi ~/.bash_profiletồn tại, trong trường hợp đó, cả hai người khác sẽ không được sử dụng trừ khi có nguồn gốc từ `~ / .bash_login.

Như với .bash_profile, bạn thường không nên có một .bash_logintập tin trong thư mục nhà của bạn.

7. Đối với một người dùng: .profiletrong thư mục nhà của người dùng.

Khi shell kiểu Bourne được chạy dưới dạng shell đăng nhập, nó sẽ chạy các lệnh trong /etc/profile(thường bao gồm các lệnh khiến các lệnh trong tệp /etc/profile.d/được chạy - xem ở trên). Sau đó, nó chạy các lệnh trong .profilethư mục nhà của người dùng. Tập tin này là riêng biệt cho mọi người dùng. (Bash thực sự chạy .bash_profilehoặc .bash_loginthay vào đó nếu chúng tồn tại - nhưng, đối với người dùng trên hệ thống Ubuntu, những tệp đó hiếm khi nên hoặc tồn tại. Để biết chi tiết, xem ở trên và 6.2 Bash Startup Files trong hướng dẫn Bash .)

~/.profiledo đó, là nơi chính để người dùng đặt các lệnh chạy khi họ đăng nhập. Đây là nơi truyền thống để bạn thiết lập PATH, nhưng vì Ubuntu có mô-đun pam_env và hỗ trợ ~/.pam_environment, bạn nên cân nhắc sử dụng nó.

Như với /etc/profile, không phải tất cả các trình quản lý hiển thị đều chạy tệp này để đăng nhập đồ họa, mặc dù hầu hết đều làm như vậy. Đây là một lý do để thích ~/.pam_environmentcho việc thiết lập các biến môi trường (giống như người ta có thể thích /etc/environmentđể /etc/profile).

Bạn có thể mở rộng các biến môi trường, bao gồm PATHchính nó, khi bạn đặt PATHvào .pam_environment(xem bên trên). Tuy nhiên, nếu bạn cần thiết lập PATHmột cách tinh vi hơn, bạn có thể phải sử dụng .profilethay thế. Cụ thể, nếu bạn muốn kiểm tra xem một thư mục có tồn tại mỗi khi người dùng đăng nhập và chỉ thêm nó vào PATHnếu có, thì bạn sẽ không thể sử dụng .pam_environmenttệp của mình để thêm thư mục đó vào PATH.

Ví dụ: .profiletệp theo người dùng mặc định trên Ubuntu được sử dụng để kết thúc bằng:

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

Xem bình luận của Gunnar Hjalmarsson về câu trả lời của Byte Commander để biết chi tiết.

Điều này kiểm tra nếu bạn có một binthư mục con của thư mục nhà của bạn. Nếu vậy, nó thêm thư mục con đó vào đầu của bạn PATH.

Danh sách đó bỏ qua một số khả năng.

Có nhiều cách khác để biến môi trường được đặt khi người dùng đăng nhập phụ thuộc nhiều vào loại đăng nhập. Ví dụ: đôi khi bạn có thể có các biến môi trường được đặt chỉ để đăng nhập đồ họa hoặc chỉ cho đăng nhập từ xa dựa trên SSH. Danh sách trên không bao gồm các trường hợp như vậy.

Tôi đã bỏ qua một vài tệp trong đó mọi người đôi khi xác định các biến môi trường, như ~/.bashrc/etc/bash.bashrc, vì chúng thường không được đề xuất để đặt PATHvà rất hiếm khi bạn thực sự nên sử dụng chúng cho mục đích này. Nếu bạn sử dụng các tệp này để thêm thư mục vào PATHthì đôi khi chúng sẽ được thêm nhiều lần và rất khó hiểu khi bạn kiểm tra $PATH. (Trong trường hợp cực đoan, điều này có thể làm mọi thứ chậm lại, nhưng thường thì đó chỉ là vấn đề giữ mọi thứ sạch sẽ và dễ hiểu.)

bashshell đăng nhập mặc định của Ubuntu cho người dùng và hầu hết người dùng sử dụng nó hoặc một số shell tương thích POSIX khác, tôi đã bỏ qua thông tin về cách các biến môi trường được đặt trong các shell khác, không phải kiểu Bourne, chẳng hạn như tcsh.


1
[bình luận số 1 trên 2] Cảm ơn vì mô tả mở rộng này! (Tôi đã thực hiện một chỉnh sửa nhỏ.) Tuy nhiên, tôi có nghi ngờ về cách (các) đề xuất. Một vài năm trước, môi trường đã đề cập /etc/environment/ ~/.pam_environmentnhư các tệp được đề xuất. Sau khi tham khảo ý kiến ​​của các nhà phát triển, tôi đã thay đổi nó thành trung lập giữa PAM và /etc/profile.d/*.sh/ ~/.profile, và tôi vẫn có xu hướng nhìn nó theo cách đó.
Gunnar Hjalmarsson

1
[bình luận # 2 trên 2] Bạn đã đề cập đến một vài lập luận ủng hộ PAM. Các đối số quan trọng có lợi cho /etc/profile.d/*.sh/ ~/.profilelà cú pháp đơn giản hơn và lightdm / gdm đang tha thứ trong trường hợp có lỗi (thậm chí không có lỗi cú pháp ngăn bạn đăng nhập, nhưng chỉ dẫn đến các thông báo cảnh báo).
Gunnar Hjalmarsson

Khi bạn nói pam_env.so, ý của bạn là pam_env.confgì?
Johan Boulé

@ JohanBoulé Vâng, ý tôi là vậy pam_env.conf. Cảm ơn! Tôi đã chỉnh sửa để sửa nó.
Eliah Kagan

3

/ etc / tệp môi trường không phải là tệp tập lệnh mà bạn không thể sử dụng xuất ở đó và nó không hỗ trợ mở rộng biến loại $ HOME, chỉ đơn giản là các cặp giá trị. Vì vậy, để sử dụng tệp đó, bạn chỉ cần nối thêm đường dẫn của mình vào định nghĩa hiện có, đặc biệt dành cho cài đặt biến môi trường toàn hệ thống. Một trên mỗi dòng. Cụ thể, tệp này lưu trữ cài đặt đường dẫn và miền địa phương trên toàn hệ thống.

~ / .profile - Tập tin này được thực hiện bất cứ khi nào một vỏ bash được thực thi, thường được khuyên dùng cho các biến môi trường, tuy nhiên nó có nhược điểm là chỉ được gọi bởi vỏ đăng nhập, vì vậy để làm cho nó có hiệu lực, bạn sẽ cần để đăng xuất và đăng nhập lại - hoặc ít nhất, hãy bắt đầu một vỏ đăng nhập mới.


1

Vị trí ưa thích để đặt các biến môi trường phụ thuộc vào một số điều:

  1. Bạn có phải là người duy nhất sử dụng máy tính:
    • Trong trường hợp này, nơi tốt nhất để đặt nó sẽ là /etc/environmentvì không có nguy cơ truy cập _unauthorized.
  2. Nếu hệ thống được sử dụng bởi nhiều người
    • Nếu tất cả các biến nên được truy cập thì vị trí sẽ là /etc/environment, nhưng
    • nếu người dùng cá nhân nên chọn quyền truy cập vào họ thì mỗi ~/.profilengười dùng nên đặt quyền truy cập cho từng người dùng của hệ thống vì nó nằm trong mỗi thư mục nhà của người dùng.

Hệ thống sẽ đọc /etc/environmenttrước khi đọc ~/.profile. Không có sự kết hợp nào xảy ra và như Alex P cho biết nhiệm vụ cuối cùng cho con đường chiếm ưu thế.

Để xem chi tiết hơn về các yếu tố xác định cách thức ~/.profile/etc/environmentgiải quyết với các vị trí khác như vậy hãy đến đâyđây , vì các yếu tố này sẽ ảnh hưởng đến cách bạn sử dụng các vị trí này.

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.