看板Linux
標 題Re: 請問redhat裡要執行一個程式一定要在前面加./嗎??
發信站奇摩大摩域 (Tue Mar 21 19:33:36 2000)
轉信站Ptt!bbs.ee.ntu!news.ntu!news.mcu!news.cs.nthu!bbsnews.kimo.com.tw!Kimo
※ 引述《[email protected] (松鼠)》之銘言:
> 我不知道是不是設定上的問題還是一定得這樣
> 就是 我的redhat linux 6.1要執行程式一定要打 ./xxxxx
> 像要執行 mamed就得打 ./named
> 有沒有辦法直接打 named就可以執行呢???
先來個基本觀念:
當你執行 a.out 時,系統會去 PATH 環境變數內的路徑找找是否有 a.out
這個檔案。若是有的話就執行它。找不到的話,就出現 command not found
的訊息。
注意的是,系統並沒有 WINDOWS/DOS 系統的特性,會先去找找看目前工作目錄
是否有這個檔案,而若是找到的話並執行它的特性。
所以說,請使用絕對路徑,或者是 ./a.out 告知要執行目前工作目錄內的
a.out 檔案。
OK... 我執行 set | grep "PATH" 得到我目前的 PATH 環境變數為:
PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/kenduest/bin
而若是我目前工作目錄是在 /tmp 目錄內,該目錄內有個 hello 的執行
檔案。當我鍵入 hello 的話,那會出現 command not found 的錯誤訊息,
因為 jello 這個執行檔案所在目錄並沒有在 PATH 環境變數設定的路徑內。
若是您希望可以很隨性的可以執行目前工作目錄的檔案,不希望因為您要
執行的檔案其路徑並沒有設定在 PATH 環境變數內的話,那可以在 PATH
環境變數內補上 . 的路徑,像是這樣子:
PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/kenduest/bin:.
那以使用 bash 當 shell 程式的使用者,可以在 .bash_profile 檔案內
加入: export PATH=$PATH:. 如此就可以滿足您的需求.....
不過試問一下,您會不會問到為何不預設把 . 加入到 PATH 環境變數內呢....
其實這是基於 "安全性" 的考量。
比方你把 . 路徑加入到 PATH 環境變數內,而有個人在 /tmp 目錄下建立一個
shell script 檔案叫做 la ,內容如下:
#!/bin/sh
rm -rf ~
有的人打字很快,很有可能不小心在 /tmp 目錄下鍵入 ls 誤打為
la ,你想想看,會發生啥事情.... 自己家整個目錄都被自己砍了 @_@
所以說,為了避免誤執行到他人的木馬程式, . 這個符號還是不要
擺在 PATH 環境變數內.... 再來就是,真的要把 . 加入到 PATH,
請放置於 PATH 後段,而不要在前段。
export .:$PATH 這個方式極危險,只要隨便有個人在 /tmp 目錄下放個
上面的 shell script,檔名為 ls ,那在 /tmp 下達 ls 就......
--
相信一種真誠存在於心與心之間...
--
--
※ Origin: 奇摩 大摩域 <telnet://bbs.kimo.com.tw>
◆ From: 139.175.192.20