天天看點

linux環境變量 shell變量 command not found解決方法

<b>linux環境變量 shell變量 command not found解決方法</b>

1、在用LINUX指令時為什麼别人的計算機能用自己的不能用呢,其實是自己的系統環境變量沒有添加,最笨的方法就是進入到相應的檔案夾下在執行這個指令,這樣指令就起效了

例如fdisk指令就需要在相應檔案夾/sbin/下輸入指令 ./fdisk   就出現你要看的東西了

再如ifconfig指令需要在檔案夾/sbin/下指執行./ifconfig就出現你要看的東西了

./bin: 

bin為binary的簡寫主要放置一些系統的必備執行檔例如:cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar等。 

/usr/bin: 

主要放置一些應用軟體工具的必備執行檔例如c++、g++、gcc、chdrv、diff、dig、du、eject、elm、free、gnome*、 gzip、htpasswd、kfm、ktop、last、less、locale、m4、make、man、mcopy、ncftp、 newaliases、nslookup passwd、quota、smb*、wget等。 

/sbin: 

主要放置一些系統管理的必備程式例如:cfdisk、dhcpcd、dump、e2fsck、fdisk、halt、ifconfig、ifup、 ifdown、init、insmod、lilo、lsmod、mke2fs、modprobe、quotacheck、reboot、rmmod、 runlevel、shutdown等。 

/usr/sbin: 

放置一些網路管理的必備程式例如:dhcpd、htpd、imap、in.*d、inetd、lpd、named、netconfig、nmbd、samba、sendmail、squid、swap、tcpd、tcpdump等。 

可以在家目錄下檢視.bash_profile裡的PATH。如果是:PATH=$PATH:$HOME/bin則需要添加成如下: 

PATH=$PATH:$HOME/bin:/sbin:/usr/bin:/usr/sbin 

[注]本人又添加了一條指令才能執行,不同情況不同分析哈: 

export PATH=$PATH:/sbin

2、常在/etc/profile檔案中修改環境變量,在這裡修改的内容是對所有使用者起作用的。 

以下主要操作将在該檔案中進行。

 3、如何添加環境變量。 

例如添加“NAME=liheng” 。 

在profile檔案的最後添加如下内容export NAME=liheng 

變量值liheng可以加引号也可以不加,效果一樣。 

4、在profile檔案添加或修改的内容需要登出系統才能生效。 

5、重複定義變量怎樣了解。 

經常出現的是對PATH變量的定義。 

例如:在peofile檔案預設對PATH變量都有設定PATH=¥¥¥¥¥¥¥,在以後可能在對PATH設定,一般都加在profile檔案的最後PATH=······(打個比方)。而系統之中認定的PATH=·······¥¥¥¥¥¥¥¥¥,也就是說相同名字的環境變量,後寫入的先起作用。大家一定要注意。 

6、特殊字元介紹。 

例如在profile中有如下内容,通過以下内容說明特殊符号的用法。 

export A=/q/jing:aaa/cc/ld 

export B=.:/liheng/wang 

export A=/cd/cdr:$A 

大家注意紅色的符号: 

: 表示并列含義,例如A變量值有多個,用:符号進行分離。 

. 表示你操作的目前目錄。例如pap指令會查找B環境變量。 

在/home鍵入pap指令,系統首先在/home目錄下(即目前路徑)查找關于 B 的内容,如果沒有在/liheng/wang目錄下查找關于B的内容。 

$ 表示該變量本次定義之前的值,例如$A代表/q/jing:aaa/cc/ld。也就是說 

A=/cd/cdr:/q/jing:aaa/cc/ld 

7、使用env指令顯示所有的環境變量 。在指令提示符下鍵入env就行了。 

set指令顯示所有本地定義的Shell變量。 

8、常見的環境變量 

PATH:決定了shell将到哪些目錄中尋找指令或程式 

HOME:目前使用者主目錄 

MAIL:是指目前使用者的郵件存放目錄。 

SHELL:是指目前使用者用的是哪種Shell。 

HISTSIZE:是指儲存曆史指令記錄的條數 

LOGNAME:是指目前使用者的登入名。 

HOSTNAME:是指主機的名稱,許多應用程式如果要用到主機名的話,通常是從這個環境變量中來取得的。 

LANG/LANGUGE:是和語言相關的環境變量,使用多種語言的使用者可以修改此環境變量。 

PS1:是基本提示符,對于root使用者是#,對于普通使用者是$。 

PS2:是附屬提示符,預設是“&gt;”。可以通過修改此環境變量來修改目前的指令符,比如下列指令會将提示符修改成字元串“Hello,My NewPrompt :) ”。 

# PS1=" Hello,My NewPrompt :) " 

9、使用修改.bashrc檔案進行環境變量的編輯,隻對目前使用者有用。 

使用修改 /etc/profile 檔案進行環境變量的編輯,是對所有使用者有用。大家一定要注意差別。 

10、profile檔案在系統啟動時将被運作。大家可以在裡面加入其他指令,但是一定要加正确,不然的話系統會啟動不起來的。

環境變量是和 Shell 緊密相關的,使用者登入系統後就啟動了一個 Shell 。對于 Linux 來說一般是 bash ,但也可以重新設定或切換到其它的 Shell 。根據發行版本的情況, bash 有兩個基本的系統級配置檔案: /etc/bashrc 和 /etc/profile 。這些配置檔案包含兩組不同的變量: shell 變量和環境變量。前者隻是在特定的 shell 中固定(如 bash ),後者在不同 shell 中固定。很明顯, shell 變量是局部的,而環境變量是全局的。環境變量是通過 Shell 指令來設定的,設定好的環境變量又可以被所有目前使用者所運作的程式所使用。對于 bash 這個 Shell 程式來說,可以通過變量名來通路相應的環境變量,通過 export 來設定環境變量。下面通過幾個執行個體來說明。

3.1 使用指令echo 顯示環境變量

#本例使用echo顯示常見的變量HOME

$ echo $HOME  

/home/lqm

3.2 設定一個新的環境變量

$ export HELLO=”Hello!”

$ echo $HELLO

Hello!

3.3 使用 env 指令顯示所有的環境變量

$ env

SSH_AGENT_PID=1875

HOSTNAME=lqm

SHELL=/bin/bash

TERM=xterm

HISTSIZE=1000

……

3.4使用 set 指令顯示所有本地定義的 Shell 變量

$ set

BASH=/bin/bash

3.5使用 unset 指令來清除環境變量

$ export TEST=”test”     # 增加一個環境變量 TEST

$ env | grep TEST          # 此指令有輸出,證明環境變量 TEST 已經存在了

TEST=test

$ unset $TEST                # 删除環境變量 TEST

$ env | grep TEST           # 此指令無輸出,證明環境變量 TEST 已經存在了

3.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

3.7用 C 程式來通路和設定環境變量

對于 C 程式的使用者來說,可以使用下列三個函數來設定或通路一個環境變量。

getenv() 通路一個環境變量。輸入參數是需要通路的變量名字,傳回值是一個字元串。如果所通路的環境變量不存在,則會傳回 NULL 。

setenv() 在程式裡面設定某個環境變量的函數。

unsetenv() 清除某個特定的環境變量的函數。

另外,還有一個指針變量 environ ,它指向的是包含所有的環境變量的一個清單。下面的程式可以列印出目前運作環境裡面的所有環境變量:

#include

extern char**environ;

int main ()

{

char**var;

for (var =environ;*var !=NULL;++var)

printf ("%s \n ",*var);

return 0;

}

3.8       通過修改環境變量定義檔案來修改環境變量。

需要注意的是,一般情況下,這僅僅對于普通使用者适用,避免修改根使用者的環境定義檔案,因為那樣可能會造成潛在的危險。

$cd                                   # 到使用者根目錄下

$ls -a                                  # 檢視所有檔案,包含隐藏的檔案

$vi .bash_profile                   # 修改環境變量定義檔案

然後編輯你的 PATH 聲明,其格式為:

PATH=$PATH: : : :------:

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

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

4總結

    通過以上的設定,你可以有一個比較友善有效的環境來提高你的工作效率了。

本文轉自holy2009 51CTO部落格,原文連結:http://blog.51cto.com/holy2010/368459