首页 > 系统相关 > Linux login_shell和non-login shell区别

Linux login_shell和non-login shell区别

时间:2023-11-10 16:48:14浏览次数:32  
标签:non shell 读取 配置文件 su login

转载地址:linux中的login shell和non-login shell重点解析-CSDN博客

我们使用linux的时候会发现,当我们进入系统一进入 bash ,就有一堆变量可以使用,这些东西都是从哪来的呢?这就要归功于linux系统里面的配置文件了。当我们的系统启动之后,它们就会开始读取我们的配置文件让我们后续可以正常的使用。

接下来,我们需要介绍两个重要概念,一个叫login shell,一个叫non-login shell。

1、login shell:

为什么要介绍 login, non-login shell 呢?这是因为这两个取得 bash 的情况中,读取的配置文件数据并不一样所致。 由于我们需要登陆系统,所以先谈谈 login shell 会读取哪些配置文件?

一般来说,login shell 其实只会读取这两个配置文件:

我们可以查看一下“~/.bash_profile”文件内容:

这个文件的内容比较有趣的地方在于 if ... then ... 那一段! 该段的内容指的是判断家目录下的 ~/.bashrc 存在否,若存在则读入 ~/.bashrc 的配置。

至于~/.bash_login 或 ~/.profile,我们前面提到过,bash 的 login shell 配置只会读取上面三个文件的其中一个, 而读取的顺序则是依照上面的顺序。即按照顺序,哪个文件存在就只读取哪个文件,而最后都是读取~/.bashrc 的配置。

我们再看看~/.bashrc文件的内容:

 

我们可以知道在该文件中,最后会读取/etc/bashrc文件的配置。

我们总结一下就是下面的这张图片:

 

 

 

 

实线的的方向是主线流程,虚线的方向则是被调用的配置文件!从上面我们也可以清楚的知道,在 login shell 环境下,最终被读取的配置文件是“~/.bashrc ”这个文件。所以,我们可以将自己的偏好配置写入该文件即可 。

2、non-login shell:
non-login shell则只会读取~/.bashrc这一个文件。

当然了,还有一些比如/etc/man.config、~/.bash_history、~/.bash_logout等文件也会影响bash的操作,有兴趣的朋友可以再扩展学习。这里我们主要介绍这部分的重点。

3、login shell与non-login shell的实例区别
我们很多朋友在使用linux的时候肯定会使用到su这个命令,但是很多朋友在使用的时候却常常误用。为什么说是误用?我们接下来就用su这个命令来介绍login shell与non-login shell究竟给我们会带来什么影响。

首先,我们介绍一下su命令:

这里我们重点强调一下 su和su -,su没有带用户名表示切换到root用户,但是是以non-login-shell的形式登陆;而su -则表示以login-shell切换root用户。我们看一下,他们有什么区别:

通过比较,我们可以明显发现,以不同的方式登陆后,它们的环境变量存在很大的区别,那么这是什么原因呢,大家应该可以猜到,就是因为他们分别以 non-login-shell和login-shell获取shell后,系统读取的配置文件不同导致的。所以为了我们正常的使用,我们应该使用su -、su - root或者su -l root以login shell方式切换至root用户,而不是su或者su root以non-login shell方式切换至root用户

 

标签:non,shell,读取,配置文件,su,login
From: https://www.cnblogs.com/yun88/p/17824436.html

相关文章

  • mysql 查询报错Expression #1 of SELECT list is not in GROUP BY clause and contain
    这个错误是由于MySQL的新版本中默认开启了ONLY_FULL_GROUP_BY模式,即在GROUPBY语句中的SELECT列表中,只能包含分组或聚合函数,不能包含其他列。而你的查询语句中出现了一个列senior_two.score.student_id,它既没有被分组也没有被聚合,因此MySQL报出了这个错误。5.7版本以下不......
  • Shell中的if与case选择结构语法格式
    1if单分支语法构成:if条件测试;then命令序列fi[root@localhostopt]#vimtest02.sh#!/bin/bashif[$UID-eq0];then echo"我是管理员"echookfi[root@localhostopt]#bashtest02.sh我是管理员ok2if双分支语法构成:if条件测试;then命令序列1else命令序列......
  • shell 命令的一些基本用法
    0背景在使用shell的时候,总是有些不习惯,记录一下常用的用法吧。一、符号1.1引号 Shell中有三种引号,分别为双引号("")、单引号('')以及反引号(``)含义:双引号(""):在双引号中,除了$,'',`和\以外所有的字符都解释成字符本身。单引号(''):在单引号中所有的字符包括特殊字符($,'',......
  • windows10 使用Xshell时出现丢失msvcr110.dll
    Xshell启动报错如下:无法启动此程序,因为计算机中丢失MSVCR110.dll。尝试重新安装该程序以解决此问题。解决步骤如下:(亲测有效)1.进入网址:https://www.microsoft.com/zh-CN/download/details.aspx?id=30679点击下载; 2.下载以下两个程序包; 3.下载完成后依次安装 安装后......
  • shell
    接上一部分#数字  -eq(equal)等于  -ne(notequal)不等于  -ge(Greaterthanorequalto)大于等于   -le(Lessthanorequalto)小于等于   -gt(greaterthan)大于  -lt(lessthan)小于 #文件test  -f存在且是正规文件   -......
  • The art of shellcode
    目录1-如何编写shellcode1-1纯手搓1-1-1纯汇编1-1-2内联汇编1-1-3使用tiny_libc1-2借助工具1-2-1pwntools的shellcraft1-2-2alpha31-2-3AE641-2-4shellcodeencoder1-2-5msf生成1-3在线网站2-突破沙箱规则2-1使用at/v/2系统调用2-2使用orw读取flag2-3切换指令模式2-......
  • Xshell通过SSH连接阿里云报错“服务器发送了一个意外的数据包” xshell连接ubuntu
     ubuntu连接旧版本就会显示报错1.登录到阿里云服务器上 2.解决方法命令: vim/etc/ssh/sshd_config加到最后一行打开sshd_config并且将下面的复制进去保存,然后重启reboot即可。[email protected],ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh......
  • 通过 MySQL Shell 8.2.0 工具进行数据复制/迁移
    一、通过sysbench创造测试数据1、创造测试数据[root@hankyoondb_tools]#sysbench--mysql-user=root--mysql-password='xxxxxx'--mysql-socket=/data/mysql/3307/mysql.sock/usr/share/sysbench/oltp_common.lua--tables=10--table_size=1000000preparesysbench1.0.1......
  • 【Linux上机实验】新实验五 shell编程
    【前言】愿,所有相遇,都恰逢其时!愿,此刻心头,正满怀欣喜!---你好,朋友,欢迎你! ---对此篇博客中有任何问题和不懂的可以咨询QQ:27595909051.编写脚本,从键盘输入10个数,并计算这些数的和(用数组存放20个数)。1.输入visum.sh,创建一个名为"sum.sh"的文件......
  • shell脚本基础题目
    1:批量的创建用户思路:1)批量就是循环,输入的是否为数字且不能以0开头的数字2)判断输入的用户是否为空这个就是循环的次数是固定read-p"请输入批量创建多少个用户;"numif[[$num=~^[0-9]+$&&!$num=~^[0]+]];thenread-p"请输入添加用户:"username......