Linux学习-- su -和 su的区别深入解析

su - 和su 的区别--也即交互式登录和非交互式登录



一、简单介绍

交互式: 直接通过终端输入账号密码登录等

变量,别名等不会继承上一级shell,都会重新读取

非交互式:图形化界面下打开的终端,执行脚本,任何其它的bash实例等

变量,别名等会继承上一级shell,然后读取文件



二、相关文件

我们先看下这五个文件主要内容

/etc/profile :存放着系统中已经存在的环境变量,如PATH,USER

/etc/profile.d/*.sh :存放着许多颜色的设置,vim的设置等

~/.bash_profile :文件中的内容表示指向~/.bashrc

~/.bashrc :文件中的内容表示指向/etc/bashrc

/etc/bashrc :设置变量的相关内容

          profile类          交互式登录的shell提供配置
           bashrc类      非交互式和交互式登录的shell提供配置

用户登录时文件读取顺序:

交互式:/etc/profile --> /etc/profile.d/*.sh  --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

非交互: ~/.bashrc --> --> /etc/bashrc --> /etc/profile.d/*.sh



三、结合案例剖析

①在/etc/profile添加export A=A1

在/etc/profile.d/下vim mage.sh,添加内容export B=B2

在~lisi/.bash_profile添加export C=C3(确保lisi这个用户存在)

在~lisi/.bashrc下添加export D=D4

在/etc/bashrc下添加export E=E5

注:所有变量都添加在第一行,不包括注释行

②重新登录 su - root

echo $A;echo $B;echo $C;echo $D;echo $E(当前是登录root用户,按照文件读取顺序,所以会跳过~lisi/.bash_profile和~lisi/.bashrc)

结果显示:A1 B2 E5

③/etc/profile下A1改成A6

再次echo $A;echo $B;echo $C;echo $D;echo $E(由于A保存的还是上次登录的变量,不会显示A6)

结果显示:A1 B2 E5

④su root

echo $A;echo $B;echo $C;echo $D;echo $E(非交互式登录root,按照非交互式读取文件顺序,同样会跳过~lisi/.bashrc,当前非交互式(子shell)会继承上        一级登录shell,所以A的值还是A1)

结果显示:A1 B2 E5

⑤exit(退出子shell,回到上级shell,就是su root是进入了一个子shell)

echo $A;echo $B;echo $C;echo $D;echo $E

结果显示:A1 B2 E5

⑥vim /etc/profile.d/mage.sh 将B2改为B7

su root(按照非交互式顺序,会读取/etc/profile.d/mage.sh)

结果显示:A1 B7 E5

⑦exit

echo $A;echo $B;echo $C;echo $D;echo $E

结果显示:A1 B2 E5

⑧su lisi

echo $A;echo $B;echo $C;echo $D;echo $E

结果显示:A1 B7 D4 E5

⑨exit

su - lisi

echo $A;echo $B;echo $C;echo $D;echo $E(按照交互式读取顺序,而且交互式不会继承上一级登录shell的变量,)

结果显示:A6 B7 C3 D4 E5



小tip:执行脚本也是在子shell下运行的,子shell会继承父shell的变量(非交互式)

父shell继承不了子shell的文件

上面已经说了:执行脚本也是非交互式登录,在脚本中定义的变量在脚本外(父shell下)不会生效

但是source+脚本 或者 .+脚本 就是在当前shell(父shell下)下运行和bash+脚本(子shell下)的方法有本质区别

原文地址:http://blog.51cto.com/13570193/2064854

时间: 2024-11-25 14:47:05

Linux学习-- su -和 su的区别深入解析的相关文章

Linux 的sudo 和 su

Linux学习笔记之--su.sudo命令使用及区别 摘要:主要对su.sudo命令的功能进行介绍和两者之间的区别.以及使用方式 一:两者之间的区别 su用于用户之间的切换. sudo用于普通用户可以使用root权限来执行指定命令. 二:su.sudo命令介绍 1.su a) su简介 su用于用户之间的切换.但是前面的用户依然保持在登录状态.这种切换如果超级权限用户root向普通或虚拟用户切换不需要密码,而普通用户切换到其它任何用户都需要密码验证. b) su用法 su在不加任何参数,默认为切

Linux用户切换:su和su - 区别

大部分Linux发行版的默认账户是普通用户,而更改系统文件或者执行某些命令,需要root身份才能进行,这就需要从当前用户切换到root用户,Linux中切换用户的命令是su或su -,下面就su命令和su -命令最大的本质区别给大家详解一下: 前者只是切换了root身份,但Shell环境仍然是普通用户的Shell:而后者连用户和Shell环境一起切换成root身份了.只有切换了Shell环境才不会出现PATH环境变量错误.su切换成root用户以后,pwd一下,发现工作目录仍然是普通用户的工作目

(总结)Linux下su与su -命令的本质区别

本人以前一直习惯直接使用root,很少使用su,前几天才发现su与su -命令是有着本质区别的! 大部分Linux发行版的默认账户是普通用户,而更改系统文件或者执行某些命令,需要root身份才能进行,这就需要从当前用户切换到root用户.Linux中切换用户的命令是su或su -.前天我在使用useradd这个命令时,才体会到这两者的本质区别.如图: 我首先是用su命令切换到root身份的,但是运行useradd时,出现错误:bash: useradd: command not found.go

Linux实际操作中命令 su 与 sudo 的区别

------------------------------------------------------------------------------------------------ 首先我先做了一些更改操作: 换到root用户的操作=>sudo su输入当前用户的密码: ****** 修改root密码的操作=>passwd 123456 /* root密码已改为123456 */ [email protected] chenwei <www.chenwei.ws>---

linux shell 的变量问题 &amp;&amp;export 语句作用 &amp;&amp;su 与 su - 的区别

首先来看看变量的问题 [[email protected] ~]# dhh=1 [[email protected] ~]# echo $dhh 1 开一个子shell测试 [[email protected] ~]# bash [[email protected] ~]# echo $dhh 没有值 使用export方法 [[email protected] ~]# exit      ----------退出子shell exit [email protected] ~]# export d

【转】(总结)Linux下su与su -命令的本质区别

原文网址:http://www.ha97.com/4001.html 本人以前一直习惯直接使用root,很少使用su,前几天才发现su与su -命令是有着本质区别的! 大部分Linux发行版的默认账户是普通用户,而更改系统文件或者执行某些命令,需要root身份才能进行,这就需要从当前用户切换到root用户.Linux中切换用户的命令是su或su -.前天我在使用useradd这个命令时,才体会到这两者的本质区别.如图: 我首先是用su命令切换到root身份的,但是运行useradd时,出现错误:

Linux下su与su -命令的区别

在启动服务器ntpd服务时遇到一个问题 使用 su root 切换到root用户后,不可以使用service命令: 使用 su - 后,就可以使用service命令了. 原因: su命令和su -命令区别就是: su只是切换了root身份,但Shell环境仍然是普通用户的Shell:而su -连用户和Shell环境一起切换成root身份了.只有切换了Shell环境才不会出现PATH环境变量错误,报command not found的错误. su切换成root用户以后,pwd一下,发现工作目录仍然

linux下su 与su -的区别

Linux下su与su -命令的区别在启动服务器ntpd服务时遇到一个问题 使用 su root 切换到root用户后,不可以使用service命令: 使用 su - 后,就可以使用service命令了. 原因: su命令和su -命令区别就是: su只是切换了root身份,但Shell环境仍然是普通用户的Shell:而su -连用户和Shell环境一起切换成root身份了.只有切换了Shell环境才不会出现PATH环境变量错误,报command not found的错误. su切换成root用

Linux 下 su 和 su - 的区别和实际中遇到的问题

从普通用户切换成root用户: 可以用su 或者 su -   : su命令和su -命令最大的本质区别就是:前者只是切换了root身份,但Shell环境仍然是普通用户的Shell: 而后者连用户和Shell环境一起切换成root身份了.只有切换了Shell环境才不会出现PATH环境变量错误.su切换成root用户以后,pwd 一下,发现工作目录仍然是普通用户的工作目录:而用su -命令切换以后,工作目录变成root的工作目录了.用echo $PATH命令看一下su和su -以后的环境变量有何不