程式員的自我修養——Linux下的環境變數原理與shell

來源:互聯網
上載者:User

程式員的自我修養——Linux下的環境變數原理與shell 概述:在linux下工作,經常會出現這樣的情況:1)運行某個命令,出現提示-bash:【commandname】:command not found2)執行某個ELF可執行檔:xyz@hnode02:~/Downloads/software/bean/workdir>./bean.exe./bean.exe:error while loading shared libraries: libTreePlayer.so: cannot openshared object file: No such file or directory    當出現cannotfound,nosuch file,cannotopen這類字眼的時候,往往是由於相關的環境變數沒有有效設定(也有可能是由於沒有安裝相關的庫或者程式)。本文針對這類問題,主要講解了環境變數的本質原理,設定方法,以及出現相關問題的解決方案。 1.什麼是環境變數 1.1知其所以然   環境變數就是系統或軟體佈建的一些參數,使用者環境變數就是使用者登入系統後,都有自已專用的運行環境。當你登入shell環境以後,shell會自動讀取/etc/profile ~/.profile ~/.bashrc /.bash_profile等檔案,這些檔案中往往有相關的環境變數的設定和初始化。環境表(指向實際name=value字串的指標數組)和環境字串通常存放在進程儲存空間的頂部(棧之上),因此子進程會繼承父進程的環境變數。相應的問題就是:為什麼我在命令列裡面設定了相關的環境變數之後,環境變數生效,但是重新啟動一個終端,這個環境變數缺失效了呢?linux下提供了三個系統調用,來修改環境變數:#include<stdlib.h>intputenv(char *str);int setenv(const char *name, const char*value, int rewrite);int unsetenv(const char *name);1.2常見的環境變數及其作用 PATH      決定了shell將到哪些目錄中尋找命令或程式HOME      目前使用者主目錄HISTSIZE    記錄數LOGNAME   目前使用者的登入HOSTNAME   指主機的名稱SHELL     前使用者Shell類型LANGUGE   語言相關的環境變數,多語言可以修改此環境變數MAIL      目前使用者的郵件存放目錄PS1      基本提示符,對於root使用者是#,對於普通使用者是$PS2      附屬提示符,預設是“>”LD_LIBRARY_PATH動態連結程式庫的路徑    以上這些都是系統內容變數,往往在非使用者相關的檔案中進行設定,一般都用大寫;使用者環境變數一般用小寫,放在使用者相關目錄之中。 2.如何設定與查看環境變數 2.1設定一個新的環境變數:$export HELLO="Hello!"$echo $HELLOHello! 2.2查看環境變數:顯示環境變數HOME$echo $HOME/home/redbooks 2.3.使用env命令顯示所有的環境變數  $env  HOSTNAME=redbooks.safe.org  PVM_RSH=/usr/bin/rsh  Shell=/bin/bash  TERM=xterm  HISTSIZE=1000 2.4.使用set命令顯示所有本地定義的Shell變數  $set  BASH=/bin/bash  BASH_VERSINFO=([0]="2"[1]="05b"[2]="0"[3]="1"[4]="release"[5]="i386-redhat-linux-gnu")  BASH_VERSION='2.05b.0(1)-release'  COLORS=/etc/DIR_COLORS.xterm  COLUMNS=80  DIRSTACK=()  DISPLAY=:0.0  ...  2.5.使用unset命令來清除環境變數  set可以設定某個環境變數的值。清除環境變數的值用unset命令。如果未指定值,則該變數值將被設為NULL。樣本如下:  $export TEST="Test..." #增加一個環境變數TEST  $env|grep TEST #此命令有輸入,證明環境變數TEST已經存在了  TEST=Test...  $unset $TEST #刪除環境變數TEST  $env|grep TEST #此命令沒有輸出,證明環境變數TEST已經存在了  2.6.使用readonly命令設定唯讀變數  如果使用了readonly命令的話,變數就不可以被修改或清除了。樣本如下:  $export TEST="Test..." #增加一個環境變數TEST  $readonly TEST #將環境變數TEST設為唯讀  $unset TEST #會發現此變數不能被刪除  -bash:unset: TEST: cannot unset: readonly variable  $TEST="New" #會發現此也變數不能被修改  -bash:TEST: readonly variable  環境變數的設定位於/etc/profile檔案  如果需要增加新的環境變數可以添加下屬行  exportpath=$path:/path1:/path2:/pahtN注意:以上這些命令只有在當前進程與子孫進程中有效,如果想要永久修改,需要修改相關設定檔,然後source這些設定檔,使得它們生效。 3.環境變數相關問題的解決方案 回到概述中提到的兩個問題,當出現-bash:【commandname】:command notfound,這種提示的時候,利用find命令找到相關的commandname可執行檔的位置,然後把路徑添加到PATH之中即可。對於第二個問題,處理方法類似,不過需要修改的環境變數變成了LD_LIBRARY_PATH. 4.參考關於設定檔的資訊和如何修改PAHT,可參考部落格:bash初探和PATH詳解http://www.bkjia.com/os/201304/203701.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.