1. 程式人生 > >linux環境變數設定的三種方法

linux環境變數設定的三種方法

login shell 和 no-login shell

“login shell” 代表使用者登入, 比如使用 “su -“ 命令, 或者用 ssh 連線到某一個伺服器上, 都會使用該使用者預設 shell 啟動 login shell 模式.
該模式下的 shell 會去自動執行 /etc/profile 和 ~/.profile 檔案, 但不會執行任何的 bashrc 檔案, 所以一般再 /etc/profile 或者 ~/.profile 裡我們會手動去 source bashrc 檔案.
而 no-login shell 的情況是我們在終端下直接輸入 bash 或者 bash -c “CMD” 來啟動的 shell.
該模式下是不會自動去執行任何的 profile 檔案.

1.login shell與non-login shell的概念

(1)login shell

取得shell(如bash)時需要完整的登入流程,就稱為login shell。舉例來說,有tty1-tty6登入,輸入使用者的賬戶和密碼後,取得的shell就稱為“login shell”

(2)non-login shell

取得shell不需要賬戶登入的流程。比如說,在X window登入linux後,在桌面右擊獲取的命令列視窗,此時不需要用賬戶名和密碼進行登入,那這個bash的環境就稱為non-login shell。在比如,在bash中再次執行bash命令,獲取到的子bash程序,也沒有登入動作,這個子bash程序同樣是non-login shell。

2.login shell和non-login shell的區別

login shell和non-login shell的核心區別就是在獲取shell時,讀取的配置檔案不同。

(1)login shell讀取的配置檔案

  • /etc/profile     該檔案來設定系統的整體環境,通常是一些環境變數的配置。
  • ~/.bash_profile或~/.bash_login或~/.profile三者中的一個,該檔案是使用者個人設定

(2)non-login shell讀取的配置檔案

  • ~/.bashrc

首先,shell分為登入式shell和非登入時shell,兩者的讀取配置檔案的順序是不一樣的.

登入式shell讀取配置檔案的順序為 /etc/profile -> /etc/profile.d/*.sh -> ~/.bash.profile -> ~/.bashrc -> /etc/bashrc

非登入式shell讀取配置檔案的順序為 ~/.bashrc ->/etc/bashrc -> /etc/profile.d/*.sh

/etc/profile 檔案中設定的環境變數,執行的命令或指令碼,針對所有使用者有效

/etc/bashrc 檔案中設定的本地變數,定義的別名,針對所有啟動的shell程式的使用者有效

這兩個配置檔案是全域性的。

~/.bash_profile 作用跟/etc/profile是一樣的,只不過針對的是某一個使用者

~/.bashrc的作用跟/etc/bashrc也是一樣的,只不過針對的也是某一個使用者
/etc/profile
/etc/bashrc

~/.bashrc
~/.profile

/sbin/nologinlogin shell 和 no-login shell是不同的

特殊的shell——/sbin/nologin:

使用了這個 shell 的使用者即使有了密碼,你想要登入時他也無法登入,會出現如下的資訊:

This account is currently not available.

我們所謂『無法登入』指的僅是:『這個使用者無法使用 bash 其他 shell 登入系統』而已, 並不是說這個賬號就無法使用其他系統資源喔! 舉例來說,各個系統賬號,列印作業由 lp 這個賬號在管理, WWW 務由 apache 這個賬號在管理, 他們都可以行系統程式工作,但是『就是無法登入主機』而已啦!

 /etc/nologin.txt:可以代替上述內容顯示在螢幕上,而不是預設的!!

/etc/passwd中可以修改某個賬號的shell,預設是/bin/bash

補充:

$PATH:決定了shell將到哪些目錄中尋找命令或程式,PATH的值是一系列目錄,當您執行一個程式時,Linux在這些目錄下進行搜尋編譯連結

  編輯你的 PATH 宣告,其格式為:

  PATH=$PATH:<PATH 1>:<PATH 2>:<PATH 3>:------:<PATH N>

  你可以自己加上指定的路徑,中間用冒號隔開。環境變數更改後,在使用者下次登陸時生效,如果想立刻生效,則可執行下面的語句:$ source .bash_profile

  需要注意的是,最好不要把當前路徑 “./” 放到 PATH 裡,這樣可能會受到意想不到的攻擊。完成後,可以通過 $ echo $PATH 檢視當前的搜尋路徑。這樣定製後,就可以避免頻繁的啟動位於 shell 搜尋的路徑之外的程式了。

1. 可用 export 命令檢視PATH值

[[email protected] u-boot-sh4]# export
declare -x CVS_RSH="ssh"
declare -x DISPLAY=":0.0"
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="localhost"
declare -x INPUTRC="/etc/inputrc"
declare -x LANG="zh_CN.UTF-8"
declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x LS_COLORS="no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:"
declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD="/root"
declare -x PATH="/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"
declare -x PWD="/opt/STM/STLinux-2.3/devkit/sources/u-boot/u-boot-sh4"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
declare -x TERM="xterm"
declare -x USER="root"
declare -x XAUTHORITY="/root/.xauthkSzH7b"

2. 單獨檢視PATH環境變數,可用:

[[email protected] u-boot-sh4]#echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

3. 新增PATH環境變數(臨時),可用:

[[email protected] u-boot-sh4]#export PATH=/opt/STM/STLinux-2.3/devkit/sh4/bin:$PATH

再次檢視:

[[email protected] u-boot-sh4]# echo $PATH
/opt/STM/STLinux-2.3/devkit/sh4/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

說明新增PATH成功。

上述方法的PATH 在終端關閉 後就會消失。

4. 永久新增環境變數(影響當前使用者)

#vim ~/.bashrcexport PATH="/opt/STM/STLinux-2.3/devkit/sh4/bin:$PATH"5.永久新增環境變數(影響所有使用者)vim /etc/profile在文件最後,新增:export PATH="/opt/STM/STLinux-2.3/devkit/sh4/bin:$PATH"儲存,退出,然後執行:#source /etc/profile

不報錯則成功。

問題: 

1. 做了各實驗,在/etc/profile, ~/.profile, ~/.bashrc中加入新PATH,重啟都沒有效果,只有使用source才可以,ubunt12.04

 找到原因,~/.zshrc導致的,因為在zshrc中直接對PATH重新賦值,而沒有繼承之前的$PATH,導致啟動載入完/etc/profile後,PATH又被重新賦值。



相關推薦

linux如何設定環境變數方法:解決類似“ifconfig ;commond not found”問題辦法

linux如何設定環境變數的三種方法: 1.在/etc/profile的最下面新增:  export  PATH="$PATH:/NEW_PATH"2.在當前使用者的家目錄,如 root:  cd /

linux設定環境變數方法

PATH=$JAVA_HOME/bin:$PATH  CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar  export JAVA_HOME  export PATH  export CLASSPATH  (3)重新登入  註解:  a. 你要

linux下配置jdk環境變數方法總結

原文連結:http://www.jb51.net/article/93887.htm 一、修改/etc/profile檔案當本機僅僅作為開發使用時推薦使用這種方法,因為此種配置時所有使用者的shell都有權使用這些環境變數,可能會給系統帶來安全性問題。用文字編輯器開啟/etc/profi

linux下配置jdk環境變數方法

一、修改/etc/profile檔案當本機僅僅作為開發使用時推薦使用這種方法,因為此種配置時所有使用者的shell都有權使用這些環境變數,可能會給系統帶來安全性問題。用文字編輯器開啟/etc/profile,在profile檔案末尾加入:JAVA_HOME=/usr/sha

Linux作業系統下配置環境變數方法

如果你的計算機僅僅作為開發使用時推薦使用這種方法,因為所有使用者的shell都有權使用這些環境變數,可能會給系統帶來安全性問題。 (1)用文字編輯器開啟/etc/profile (2)在profile檔案末尾加入: JAVA_HOME=/usr/share/jdk1.5.0_05 PATH=$

Ubuntu16.04 配置環境變數方法

臨時設定 export PATH=/opt/android-studio/bin:$PATH 當前使用者的全域性設定 vim ~/.profile,新增行: export PATH=/opt

CentOS 新增環境變數方法

在 Linux CentOS 系統上安裝完 MATLAB 後,為了使用方便,需要將 matlab 命令加到系統命令中,如果在沒有新增到環境變數之前,執行“matlab”命令時,則會提示命令不存在的錯誤,如下所示: 下面我詳細介紹一下在 linux 下將 M

linux環境變數設定方法

login shell 和 no-login shell“login shell” 代表使用者登入, 比如使用 “su -“ 命令, 或者用 ssh 連線到某一個伺服器上, 都會使用該使用者預設 shell 啟動 login shell 模式.該模式下的 shell 會去自動

LINUX設定環境變數方式

現在使用linux的朋友越來越多了,在linux下做開發首先就是需要配置環境變數,下面以配置java環境變數為例介紹三種配置環境變數的方法。 1.修改/etc/profile檔案 如果你的計算機僅僅作為開發使用時推薦使用這種方法,因為所有使用者的shell都有權使用這些

python os 設定讀取環境變數的幾方法

專案中的跳板機是用的使用者公私鑰鑑權的,登入跳板機需要使用的每個人的name,因此如果將封裝的MySQL或者Redis方法中傳入USERNAME作為引數的話,感覺有點傻。因此,考慮將名字寫入環境變數。 兩種方法: 1、使用os.environ.setdefault方法寫入(或者直接

linux修改環境變數方式

1.#PATH=$PATH:/etc/apache/bin 使用這種方法,只對當前會話有效,也就是說每當登出或登出系統以後,PATH 設定就會失效 2.#vi /etc/profile 在適當位置新增 PATH=$PATH:/etc/apache/bin (注意:= 即等號兩邊不能有任何

linux 環境變數設定方法總結(PATH/LD_LIBRARY_PATH)【轉】

PATH和LD_LIBRARY_PATH本質都是變數,所謂變數的意思就是由別人賦值產生的,直覺往往會讓我們新增和減少這個變數本身的某些路徑,實際上這是不正確的。正確的做法是我們要去修改賦予這個變數數值的那些配置檔案,加一條路徑或者減一條。說到底變數只關乎顯示,不關乎其

linux 環境變數設定方法總結

1. 顯示環境變數HOME   $ echo $HOME   /home/redbooks   2. 設定一個新的環境變數hello   $ export HELLO="Hello!"   $ echo $HELLO   Hello!   3. 使用env命令顯示所有的環境

設定Java環境變數的幾方法

JAVA中常用需要設定的三個環境變數:JAVA_HOME、CLASSPATH、PATH(一)配置環境變數:(相對路徑)1.JAVA_HOME=x:\jdk1.6.0JAVA_HOME2.用%JAVA_HOME%就可以取代:x:\jdk1.6.0這一部分CLASSPATH=.:

linux 環境變數設定的幾方式

 在 Linux 裡設定環境變數的方法 ( export PATH ) 一般來說,配置交叉編譯工具鏈的時候需要指定編譯工具的路徑,此時就需要設定環境變數。例如我的mips-linux-gcc編譯器在“/opt/au1200_rm /build_tools/bin”目錄下,build_tools就是我

linux環境變數設定方法總結(PATH/LD_LIBRARY_PATH)

PATH:  可執行程式的查詢路徑檢視當前環境變數:echo $PATH設定: 方法一:export PATH=PATH:/XXX 但是登出後就失效方法二:修改~/.bashrc或~/.bash_profile或系統級別的/etc/profile        1. 在其中

從U盤運行Linux操作系統的方法

attach 損壞 seo 系統 alt ubunt 沒有 linux操作 ash 摘要: 從U盤運行Linux操作系統的三種方法 usb_linux_0 你或許聽說過在U盤上運行live Linux操作系統,但你知不知道可以永久的保存運行時的數據,或者直接將Linux安裝

LInux安裝jdk的方法

環境 Linux版本:CentOS 6.5、Ubuntu 12.04.5 JDK版本:JDK 1.7 目錄 方法一:手動解壓JDK的壓縮包,然後設定環境變數 方法二:用yum安裝JDK 方法三:用rpm安裝JDK 方法四:Ubuntu 上使用apt-get安裝J

mac配置環境變數的兩方法

2018年10月31日 17:42:30 ChenhonLi 閱讀數:4 個人分類: 程式設計師辦公

Linux環境變數設定/etc/profile、/etc/bashrc、~/.profile、~/.bashrc區別

轉載請註明作者和出處:http://blog.csdn.net/c406495762/article/details/62902871 登入系統讀取步驟: 當登入系統時候獲得一個shell程序時,其讀取環境設定檔有三步 : 1.首先讀入的是全域性環境變數設定檔/etc/