linux su -sh,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下)的方法有本质区别
linux su -sh,Linux学习-- su -和 su的区别深入解析相关推荐
- linux su -sh,linux下使用su切换到其他用户下只能看到sh-4.2$解决
这两天在研究gitlab,在安装gitlab的时候,系统会自动创建一个git用户,当我使用su git切换到git用户的时候发现,无法使用shell命名并且只能看到sh-4.2$,原因是因为git用户 ...
- linux 编译.sh,Linux内核编译步骤
linux系统内核编译步骤: 1,启动系统,引导linux系统,并以root用户名登录到linux系统. 2,准备内核源码,下载源码压缩包,并复制到目录/usr/src下. 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 ...
- linux切换用户时 su-,Linux切换用户(su)
Linux切换用户(su)教程 普通用户之间切换以及普通用户切换至 root 用户,都需要知晓对方的密码,只有正确输入密码,才能实现切换:从 root 用户切换至其他用户,无需知晓对方密码,直接可切换 ...
- linux 切换su - u,Linux怎么切换用户之su命令使用指引
1. su命令详解 本文主要讲解Linux怎么使用su命令切换用户,该命令用于切换当前用户到其他用户,如果由非root切换到其他账号时须输入目标帐号密码,root用户切换到其他用户,无须用户密码. 2 ...
- Linux基础——系统安全及应用(su切换用户PAM认证,sudo提权,grub加密,账号密码破解,端口扫描)(十)
系统安全及应用 一. 账号安全控制 1.系统账号清理 2.密码安全控制 3.命令历史.自动销毁 二. 用户切换与提权 2.1 su命令 2.1 sudo命令--提升权限 2.1.1 su命令的缺点 2 ...
- linux修改用户名、组名、su密码
我的linux 下有俩用户名,name1 和name2, 我想把name1修改了,然后看网上说必须进入name2下进行修改,而且要用root 权限.我进入到name2之后,发现,name2 下使用su ...
- linux sudo -i 参数,Linux系统中su、sudo、sudo su、sudo -i命令的用法和区别小结
在Linux系统软件中,因为root的权限过大,一般状况也不应用它.只能在一些独特状况下能选用登陆root实行管理方法每日任务,一般状况下临时性应用root权限多选用su和sudo命令. su命令就是 ...
- linux 普通用户登陆系统su - root的时候报错su: Authentication failure
今天登陆服务器的时候,需要提权做一些操作,普通用户su - root的时候提示密码错误 [xtwh@jmw8a2003 ~]$ su Password: su: Authentication fail ...
最新文章
- PYTHON字典dictionary用法laurentluce技术博客
- 收藏 | Linux常用156个命令汇总!
- Coding Interview Guide--打印两个有序链表的公共部分
- Linux 文件查找命令
- [转]MyBatis中resultType与resultMap区别
- oracle回滚事务的关键字,Oracle ROLLBACK语句(回滚事务)
- python2.7入门---内置函数
- 牛市买基金好还是股票好?买基金会翻倍吗?
- 如何检查计算机账号克隆
- 分布式事务控制解决方案
- linux开机启动 sogou输入法 xcompmgr .xprofile 黑块
- 使用Apache commons-pool2实现高效的FTPClient连接池的方法
- notepad html 自动格式化代码,notepad++格式化html代码
- 蓝桥杯嵌入式蜂鸣器程序
- Android Tool——Hierachy Viewer可视化调试
- python 角度变弧度_弧度制和角度值怎么转换?
- 批量添加authorized_keys
- 开发制作一个小程序需要多少钱
- IBM ITS中国区总经理鞠立老师讲女性的职业规划与发展
- ifup,ifdown命令详解
热门文章
- 数字图像与机器视觉基础补充(2)--颜色转换+分割车牌
- python 白噪声检验-Python中的白噪声时间训练
- 视频字幕文件 SSA、ASS 参数-攻略
- 毕业设计:基于汇编实现的欢乐QQ堂小游戏 附完整代码
- [记录]手机数据恢复
- 2022化工自动化控制仪表题库模拟考试平台操作
- Android Room提示 错误: Not sure how to convert a Cursor to this method's return type的原因及解决办法
- 推荐几本这个系列封面的编程书,涉及Python、计算机图形学、Linux
- python pdf删除图片_python-删除PDF空白页
- MOS管过大电流时关断为什么会出现尖峰电压