login shell和nologin shell的区别以及su和su - 的区别

Login shellnologin shell的区别

说下定义,其实很好理解。Login shell就是你进入shell是需要输用户名密码的,比如你启动图形界面最后一步需要你输入用户名密码,只有你输入正确,才能进入桌面,这进入的就是一个login shell。另外比如你crtl + alt + F2等进入非图形界面的tty,都是需要你输入用户名密码之后才能继续操作,这种情况下你进入的就是login shell

nologin shell就是你不需要输入密码就能进入的shell。比如你进入图形界面之后,右键打开终端,就直接打开了一个承载shell的终端,在这个终端中你不用输入用户名密码就直接可以使用命令。明白了吧,这就是login shellnologin shell的区别。

这是表面上的区别,其实真正影响这两种shell使之不同的是打开两者所读取的环境变量文件不同。

Login shell 读取的文件和顺序:

/etc/profile     #这是系统的默认环境变量文件,所有用户都读取此文件

/etc/bashrc    

~/.bashrc

~/.bash_profile

Nologin shell 读取的文件和顺序为:

/etc/bashrc

~/.bashrc

这个结果是我通过实验测出来的,没有正式的文档参考。实验使用的rhel5.4,测试方法是在这些文件写入同一个变量,但给在不通文件中的变量赋不通的值,比如在/etc/profile文件中写入export  TEST=/etc/profile,在/etc/bashrc中写入export  TEST=/etc/bashrc,由于读取文件顺序的原因,后读取文件中的变量内容会覆盖之前读取文件中的变量内容,这样,登陆一个login shell,输出TEST变量echo $TEST。然后通过把当前生效的文件的改行注释掉,再次查看变量输出信息。这样就能得到读取文件的逆序。

我们知道系统的shell种类其实有许多的,除了bash之外还有kshcsh等。

/etc/profile是所有系统登录时要读取的变量文件,无论你要打开的是哪一种的shell

/etc/bashrc是当你登陆的用户使用bash登陆时读取的变量文件。

同时,/etc/profile/etc/bashrc中的设置对系统的所有用户具有同等效用。而~/.bashrc~/.bash_profile是为某一具体用户设置具体的环境变量参数的文件,只对特定的用户有效。

而我们知道nologin shell一定是在已经登录了login shell的前提下打开的,比如字符窗口startx启动图形界面,或者图形界面里打开新的终端。所以nologin shell算是login shell的一个子程序,根据shell中变量的继承法则,nologin shell会在继承原本login shell所有的环境变量的基础上读取~/.bashrc中的参数。

这就是这些个文件所有的关系了。所以有的时候,你设置的环境变量并没有生效,可以根据这个读取顺序查看一下是不是你的设置被覆盖掉了……

说两个命令:

Chsh  /bin/csh(某一种shell的路径)

可以改变某用户的默认shell。注意,每一个用户对应一个默认shell。并不是对系统所有用户都生效。

Source  /etc/profile

可以使/etc/profile文件中的更改内容及时生效。

具体使用

论坛上有人想让每次系统启动之后就自动打开bash

这个时候你就可以再/etc/profile文件中加入一下语句

Gnome-terminal &

如果你想每次打开一个nologin shell都显示当前目录,

就可以直接将pwd加入/etc/bashrc文件中。

如果你想每次打开一个nologin shell都自动进入/etc目录,

就可以直接将cd  /etc加入到/etc/bashrc文件中。

如果你想在某一个用户登入的时候才有这样的功能,则直接在该用户根目录更改/.bash_profile或者/.bashrc就可以实现了。

还有就是如果你的命令使打开一个程序,比如firefox,这样在你的firefox退出之前,就不能进行其他作业了,这种情况下,你最好使用firefox&让它在后台跑。

最后

我的环境是rhel5.4。这点一定要注意,当你的系统版本不同的时候,你也许发现我说的文件在你的系统中根本不存在,那么你可以按照我上文的思路去好好探索下你面对的操作系统中都有哪些个文件了。

Su su -的区别

对于su命令,只会更改当前用户,而不会更改当前的用户环境,比如你从oracle 用户suroot账户中,当前路径仍是你刚才的路径,环境变量仍是oracle用户的变量信息。

su -命令,则在更改当前用户信息的同事还会更改用户环境,如果你从oracle 用户su -root账户,你会发现你的当前路径已经变味/root/下了,环境变量也变了。这就是区别。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值