当前位置:  技术问答>linux和unix

郁闷:关于Solaris上su的n多疑惑

    来源: 互联网  发布时间:2015-08-02

    本文导语:  一般来说,su命令有两种用法 su 用户名(默认root) 切换到新用户的权限,同时保持本用户的环境变量 su - 用户名(默认root) 相当于用新用户登陆了一次 以下是我在Solaris 9上测试的结果: (注:su表示Solaris自带的su命...

一般来说,su命令有两种用法
su 用户名(默认root) 切换到新用户的权限,同时保持本用户的环境变量
su - 用户名(默认root) 相当于用新用户登陆了一次

以下是我在Solaris 9上测试的结果:
(注:su表示Solaris自带的su命令,su.bak表示GNU su)

1、普通用户的环境变量
david@billdavid>env
_=/usr/local/bin/env
LANG=zh_CN.GB18030
HZ=100
PATH=/usr/local/tinyq/bin:/usr/local/bin:/usr/ccs/bin:/usr/bin:
LOGNAME=david
MAIL=/var/mail/david
HOSTNAME=billdavid
PS1=$PWD
$LOGNAME@$HOSTNAME>
SHELL=/bin/ksh
HOME=/export/home/david
LD_LIBRARY_PATH=/usr/local/tinyq/lib::/usr/local/lib
TERM=vt100
QTDIR=/usr/local/tinyq
PWD=/export/home/david
TZ=PRC
MQCONFIGFILE=/export/home/david/config/msq.cfg

2、用su切换到root用户
david@billdavid>su
Password:
此时的环境变量
# env
HOME=/export/home/david ---------> 未变
HOSTNAME=billdavid
HZ=100
LANG=zh_CN.GB18030
LOGNAME=david
MAIL=/var/mail/david
MQCONFIGFILE=/export/home/david/config/msq.cfg
PATH=/usr/sbin:/usr/bin ---------->有问题
PS1=#
PWD=/export/home/david
QTDIR=/usr/local/tinyq
SHELL=/bin/ksh --------->未变
TERM=vt100
TZ=PRC
_=/usr/local/bin/su
但PATH发生了变化,变成了默认初始值,而且少了一个LD_LIBRARY_PATH,这说明Solaris自带的su并不满足上面的规则。而且试验发现环境PWD在切换到root后会一直保持切换前的值,不会随目录变换。

3、用su -切换到root用户,一切OK
david@billdavid>su -
Password:
Sun Microsystems Inc.   SunOS 5.9       Generic_112234-03       November 2002
# env
HOME=/
HZ=100
LD_LIBRARY_PATH=/usr/local/tinyq/lib::/usr/local/lib ------>OK
LOGNAME=root
PATH=/usr/local/tinyq/bin:/usr/local/bin:/usr/ccs/bin:/usr/sbin:/usr/bin ------->该PATH信息是在/etc/profile中设置的,在这里生效了,说明所有用户登陆Solaris时均执行了/etc/profile,但su切换时仅进行权限的切换,不执行该profile文件,但怎么会丢环境变量呢?
QTDIR=/usr/local/tinyq
SHELL=/sbin/sh
TERM=vt100
TZ=PRC

4、用GNU的su切换到root用户,保持了原来用户的环境变量。但是遇到了些更麻烦的问题。
david@billdavid>su.bak
Password:
$PWD
$LOGNAME@$HOSTNAME>env
HOME=/
HOSTNAME=billdavid
HZ=100
LANG=zh_CN.GB18030
LD_LIBRARY_PATH=/usr/local/tinyq/lib::/usr/local/lib
LOGNAME=david
MAIL=/var/mail/david
MQCONFIGFILE=/export/home/david/config/msq.cfg
PATH=/usr/local/tinyq/bin:/usr/local/bin:/usr/ccs/bin:/usr/bin:
PS1=$PWD
$LOGNAME@$HOSTNAME> -------->这个问题很麻烦,下面详细说明
PWD=/export/home/david
QTDIR=/usr/local/tinyq
SHELL=/sbin/sh
TERM=vt100
TZ=PRC
_=/usr/local/bin/su.bak
在用户david的.profile文件中,我添加了如下内容,以将PS1更改为自己所希望的内容:
HOSTNAME=`hostname`
PS1='$PWD
$LOGNAME@$HOSTNAME>'
export HOSTNAME PS1

当用su.bak进行切换时,继承了上述环境变量,但由于使用的时单引号,不进行$的解析,从而出现了上述问题,提示符始终不变,但是为什么普通变量时可以让PS1随目录变化呢?

5、用GNU的su -切换到root用户,没有什么问题,执行了/etc/profile,但是在执行/etc/profile之前的还会执行其它的脚本吗?之后呢?希望有,这样我就可以在其中添加一些自己的东西了。
david@billdavid>su.bak -
Password:
Sun Microsystems Inc.   SunOS 5.9       Generic_112234-03       November 2002
# env
HOME=/
LD_LIBRARY_PATH=/usr/local/tinyq/lib::/usr/local/lib
LOGNAME=root
PATH=/usr/local/tinyq/bin:/usr/local/bin:/usr/ccs/bin:/usr/ucb:/bin:/usr/bin:/etc
QTDIR=/usr/local/tinyq
SHELL=/sbin/sh
TERM=vt100
USER=root
#

此外,Solaris的sh好像也有点问题,好像不支持alias,root使用/sbin/sh时好像也不支持PWD环境变量,以至于在进行程序编译时总是出现目录错误。

|
这个问题是对Shell环境的概念不清晰导致的,su的执行是会重新启动一个子Shell,环境变量取决于那个Shell的环境设置,一般情况下:单执行su是不会重新读/etc/profile的,而su -就会读profile,把环境变量按profile中的设定设置。这个情况在linux下同样存在。

|
大部分问题我也不会,但是在PWD环境变量上,我一般的使用方法是PS1='$PWD:>' 在ksh和bash时使用良好,在sh下使用从未成功过。alias我在bash下使用也很正常,估计还是sh的问题。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • solaris 8上能用gcc for solaris7 或 solaris9的版本吗?
  • Solaris菜鸟!!!请问Solaris SPARC和Solaris x86这两个版本之间有什么具体的差异吗?
  • 请问Solaris现在最高的版本是多少?Solaris8.0价格如何?Solaris8.0和Red Hat Enterprise Linux AS 3.0有何区别?
  • 请教solaris高手一个solaris安装问题
  • solaris 10下的多线程和solaris 5.8下多线程编译有什么区别??
  • 听说在solaris上运行java飞快,solaris有多大,如果不大,我想下载,哪有下载?
  • 请问:SOLARIS(for intel)如何装d-link网卡。哪儿下Solaris电子文档。
  • Solaris for X86 和Solaris for Sparc主要区别在哪?
  • 请问Solaris的优势?Solaris下开发相关及系统管理相关资料是否有提供?谢谢
  • telnet 进去的时候我看写着SUN OS5.8,这个是不是Solaris?我找不到Solaris5.8的软件?
  • 没有光碟,怎样从solaris8升级到solaris9?
  • solaris 10能不能远程桌面连接Solaris 10(或 Linux) ,不要安装其他软件
  • 请问高手,在Solaris 8 gcc3.1编译的 *.o 和库文件 *.a ,可以提供在Solaris 7,9下使用吗?
  • 我装了Solaris后,98和2000都找不到了,启动时直接进入Solaris,该怎么办,请高手指点!
  • solaris开发一窍不通,如何开发Solaris下的c程序?
  • java/j2ee iis7站长之家
  • 怎么修改IP(SOLARIS),怎么在WIN上用EXTRX!X连上SOLARIS
  • solaris 10 下怎么安装jdk-6u5-solaris-i586.sh? ftp上传大文件中断怎么解决?
  • 专门为难solaris高手,之solaris10的修改最大TCP连接数问题
  • solaris root 的shell搞错了,提示 no shell root 进不了!(solaris 8 for x86)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3