今天在維護oracle資料庫時,查看監聽的狀態,執行#lsnrctl status報錯: -bash:lsnrctl:command not found。以前並不會這樣,仔細想了一下,問題找到了,我是以root遠程登錄到伺服器上,維護oracle時,直接 su oracle,這樣操作雖然用戶切換為o...
今天在維護oracle資料庫時,查看監聽的狀態,執行
#lsnrctl status
報錯: -bash:lsnrctl:command not found。以前並不會這樣,仔細想了一下,問題找到了,我是以root遠程登錄到伺服器上,維護oracle時,直接 su oracle,這樣操作雖然用戶切換為oracle,但是環境變數仍然是root的環境變數,所以會報環境變數錯誤,正確的命令是su - oracle,這樣環境變數也會切換為oracle的環境變數。
看一下 su 命令的 man page
NAME
su - run a shell with substitute user and group IDs
SYNOPSIS
su [OPTION]... [-] [USER [ARG]...]
DESCRIPTION
Change the effective user id and group id to that of
USER.
-, -l, --login
make the shell a login shell, clears all envvars
except for TERM, initializes HOME, SHELL, USER,
LOGNAME and PATH
...
A mere - implies -l. If USER not given, assume root.
可以看到,加了 - 選項後,會清空除term外的環境變數,重新初始化HOME、SHELL、USER、LOGNAME和PATH。
所以要多註意細節,尤其Linux下麵,一點點的不一樣,都有可能引起完全不同的結果。