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下)的方法有本质区别

linux su -sh,Linux学习-- su -和 su的区别深入解析相关推荐

  1. linux su -sh,linux下使用su切换到其他用户下只能看到sh-4.2$解决

    这两天在研究gitlab,在安装gitlab的时候,系统会自动创建一个git用户,当我使用su git切换到git用户的时候发现,无法使用shell命名并且只能看到sh-4.2$,原因是因为git用户 ...

  2. linux 编译.sh,Linux内核编译步骤

    linux系统内核编译步骤: 1,启动系统,引导linux系统,并以root用户名登录到linux系统. 2,准备内核源码,下载源码压缩包,并复制到目录/usr/src下. 3,建立编译链接,首先新内 ...

  3. linux bash sh,linux bash shell.sh编程实例

    1.输出 #!/bin/bash echo "Please type your number:" read a for ((i=1;i<=a;i++)) do for ((p ...

  4. linux切换用户时 su-,Linux切换用户(su)

    Linux切换用户(su)教程 普通用户之间切换以及普通用户切换至 root 用户,都需要知晓对方的密码,只有正确输入密码,才能实现切换:从 root 用户切换至其他用户,无需知晓对方密码,直接可切换 ...

  5. linux 切换su - u,Linux怎么切换用户之su命令使用指引

    1. su命令详解 本文主要讲解Linux怎么使用su命令切换用户,该命令用于切换当前用户到其他用户,如果由非root切换到其他账号时须输入目标帐号密码,root用户切换到其他用户,无须用户密码. 2 ...

  6. Linux基础——系统安全及应用(su切换用户PAM认证,sudo提权,grub加密,账号密码破解,端口扫描)(十)

    系统安全及应用 一. 账号安全控制 1.系统账号清理 2.密码安全控制 3.命令历史.自动销毁 二. 用户切换与提权 2.1 su命令 2.1 sudo命令--提升权限 2.1.1 su命令的缺点 2 ...

  7. linux修改用户名、组名、su密码

    我的linux 下有俩用户名,name1 和name2, 我想把name1修改了,然后看网上说必须进入name2下进行修改,而且要用root 权限.我进入到name2之后,发现,name2 下使用su ...

  8. linux sudo -i 参数,Linux系统中su、sudo、sudo su、sudo -i命令的用法和区别小结

    在Linux系统软件中,因为root的权限过大,一般状况也不应用它.只能在一些独特状况下能选用登陆root实行管理方法每日任务,一般状况下临时性应用root权限多选用su和sudo命令. su命令就是 ...

  9. linux 普通用户登陆系统su - root的时候报错su: Authentication failure

    今天登陆服务器的时候,需要提权做一些操作,普通用户su - root的时候提示密码错误 [xtwh@jmw8a2003 ~]$ su Password: su: Authentication fail ...

最新文章

  1. PYTHON字典dictionary用法laurentluce技术博客
  2. 收藏 | Linux常用156个命令汇总!
  3. Coding Interview Guide--打印两个有序链表的公共部分
  4. Linux 文件查找命令
  5. [转]MyBatis中resultType与resultMap区别
  6. oracle回滚事务的关键字,Oracle ROLLBACK语句(回滚事务)
  7. python2.7入门---内置函数
  8. 牛市买基金好还是股票好?买基金会翻倍吗?
  9. 如何检查计算机账号克隆
  10. 分布式事务控制解决方案
  11. linux开机启动 sogou输入法 xcompmgr .xprofile 黑块
  12. 使用Apache commons-pool2实现高效的FTPClient连接池的方法
  13. notepad html 自动格式化代码,notepad++格式化html代码
  14. 蓝桥杯嵌入式蜂鸣器程序
  15. Android Tool——Hierachy Viewer可视化调试
  16. python 角度变弧度_弧度制和角度值怎么转换?
  17. 批量添加authorized_keys
  18. 开发制作一个小程序需要多少钱
  19. IBM ITS中国区总经理鞠立老师讲女性的职业规划与发展
  20. ifup,ifdown命令详解

热门文章

  1. 数字图像与机器视觉基础补充(2)--颜色转换+分割车牌
  2. python 白噪声检验-Python中的白噪声时间训练
  3. 视频字幕文件 SSA、ASS 参数-攻略
  4. 毕业设计:基于汇编实现的欢乐QQ堂小游戏 附完整代码
  5. [记录]手机数据恢复
  6. 2022化工自动化控制仪表题库模拟考试平台操作
  7. Android Room提示 错误: Not sure how to convert a Cursor to this method's return type的原因及解决办法
  8. 推荐几本这个系列封面的编程书,涉及Python、计算机图形学、Linux
  9. python pdf删除图片_python-删除PDF空白页
  10. MOS管过大电流时关断为什么会出现尖峰电压