在搭建oracle的Linux平台服务器时,在某一时刻切换到了root用户,看了下history当时用的是su - ,完成操作后切换回来用的是#su oracle 。此时在终端输入sqlplus时报错:sqlplus:command not found。查阅资料后才发现是su 和su - 命令的区别。
在Linux的manpage中,su命令的描述是:
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
大概意思是:让shell终端重新登录
shell重新登录会执行~/.bash_profile ~/.bashrc 等文件来设置环境变量。
(linux启动时加载的配置文件详见:http://www.cnblogs.com/ifaithu/archive/2013/02/05/2893067.html)
此时会切换用户,并读取相应配置,完成当前用户的环境设置。
而使用su仅仅只会变更用户,并不加载相应配置文件,只是单单的权限变更。所以前文中提到command not found错误会出现,是因为root用户并未含有功能。
由此,解决了问题,也深入理解了命令的区别。