当前位置: 首页 > news >正文

登录shell与非登录shell、交互式与非交互式shell的知识点详细总结

一、登录shell与非登录shell

1.登录shell定义:指的是当用户登录系统时所取的那个shell,登录shell属于交互式shell。

登陆shell通常指的是:用户通过输入用户名/密码(或证书认证)后启动的shell.例如:

当时候图形环境登录时启动X的看不见的shell、使用su-username、su -l username、通过bash --login、bash -l命令启动bash、通过网络登录一台远程机器上时登录的shell、虚拟控制台登录shell等。

而其他情况启动的shell基本上就都是“非登陆shell”了。

例如,从图形界面启动终端(在Gnome或KDE中打开一个“终端”(terminal)窗口程序)、使用su切换用户、通过bash命令启动bash在命令行替换中的子shell、被圆括号分组的命令使用的子shell、执行脚本时使用的shell等。

(一)登录与非登录shell的特点:

1.登录shell特点:

(1)登录shell属于交互式shell。用exit和logout皆可以退出。

2.非登录shell的特点:

例如:只能用exit退出,不能用logout退出。

注:用这个特证绝对可以区别登录和非登录shell。

(二)登陆与非登录shell的启动文件及其顺序(针对自己使用的rhel8)

1.登录shell启动文件顺序:

/etc/profile->/etc/profile.d/*.sh->~/.bash_profile->~/.bashrc->/etc/bashrc。

2.非登录shell启动文件顺序(读取配置文件顺序):

~/.bashrc ->/etc/bashrc

(三)登录shell与非登录shell的区别

1.含义:登录shell,指的是当用户登录系统时所取的那个shell,登录shell属于交互式shell。

登录shell将查找5个不同的启动文件来处理其中的命令,用户登录后,在终端上输入命令,shell立即执行用户提交的命令,当用户退出后,shell也终止了。

2.完整度不同:如果启动了一个bash shell而没有登入系统(如在CLI提示符中键入bash),则启动了一个交互式非登录shell。交互式非登录shell执行~/.bashrc文件中的命令。

3.使用情况不同:登录shell的初始化文件(比如.bash_profile)通常会运行这个文件。这样,登录shell和非登录shell都可以使用.bashrc中的命令。

4.登陆方式不同:登录 shell 需要用户名、密码登录后进入的shell,或者通过 --login 选项生成的 shell 。

非登录 shell 是指不需要输入用户名和密码即可打开的 shell,比如输入命令 bash或者sh 就能进入一个全新的非登录shell,在Gnome或KDE中打开一个 “terminal” 窗口,也是一个非登录 shell。

5.参数值不同:

查看$0的值,登录shell返回--bash,而非登录shell返回的是bash(bash --login或者bash -l进入的登录shell除外)。

注:shell --login 或者shell -l直接进入登录shell,但是echo $0的结果是bash。

需要注意的是:执行exit命令,退出的shell可以是登录或者非登录shell;执行logout命令,则只能退出登录shell,不能退出非登录shell。

注:

1.如果通过bash --login命令进入登录shell,尽管进入的登录shell,$0的值是bash,而不是-bash。

2.非登录模式表示用户在新的shell中没有登录,能执行logout的shell,一定是登录模式中。

3.`su - `相关的所有shell方式都无法继承父shell环境变量.`ssh 用户名@ip script.sh`无法继承父shell环境变量.

4.在最开始,一般情况下,用户要么通过ssh登录要么直接在本地登录,这种属于是登录式shell。

   随后,在命令行下执行`su - 用户名`、`su -l username`、`bash -l`都是打开登录一个新的shell。而执行 `su 用户名`、`bash`都是打开一个新的shell,自动执行的shell脚本(没人人为输入的),但是没有登录。其中在图形界面打开命令界面也是非登录模式。

注:本条中bash的名字可以换成其他的shell的名字也可以,比如tcsh -l进入的shell是一个登录shell。

5.环境变量继承:

非登录模式会继承父shell的环境变量,而登录模式中`su - username`新打开的shell和父shell没有继承关系,所以不可以继承环境变量,但是`bash -l`可以继承父shell的环境变量。交互非登录式shell(比如`su username`命令登录的shell)继承父shell的环境变量。(注:bash -l等同于bash --login)

6.非登录shell不会执行/etc/profile,如果想获得里面的环境变量,必须执行source /etc/profile,即手动获取。

7.~/.bashrc文件中有这样一句:if [-f /etc/bashrc ]; then ./etc/bashrc fi,意思是判断/etc/bashrc文件是否存在,如果存在,则执行这个文件。所以有的书中说,~/.bashrc会运行/etc/bashrc文件。

8.登录shell和非登录shell具体会读取什么配置文件,要根据具体的系统版本而定,如RHEL6.3中非登录shell仅执行了“~/.bashrc”文件(没有执行/etc/bashrc),而Ubuntu10.04中却依次执行了/etc/bash.bashrc和~/.bashrc 文件。rhel8非登录shell则执行了~/.bashrc和/etc/bashrc两个配置文件。对于这些规则,可以直接在相应的配置文件中加一些echo命令来验证其真实性。

9.识别登录shell和非登录shell,仅在当前shell中查看 $0 的值是不可以的,因为通过bash --login(或者bash -l)命令进入的是登录shell,$0的值是bash(尽管是个登录shell)。但是登录shell一共就2种情况,情况1是$0的值为-bash一定是登录shell,情况2是通过bash --login(或者bash -l)登录到的shell一定是登录shell。

10.使用将环境放在/etc/profile.d/*.sh的脚本中,更加的方便快捷一点,这个准则是不一定的,不是所有的系统的非登录shell都会读取这些文件,比如rhel8就是如此。这个准则成立的前提是所有交互式shell都会运行/etc/profile.d/*.sh才可以。

二、交互式shell与非交互式shell

1.交互式shell:shell与用户存在交互;非交互式:即shell与用户不存在交互。非交互式,是shell的另一种运行模式,它专门被用来执行预先设定的命令。在这种模式下,shell不与用户进行交互,而是读取存放在脚本文件中的命令并执行它们。当它读到文件的结尾,这个shell就终止了。
比如,Non Interactive Shell:你需要写一个bash script,用外部shell执行“bash script.sh”命令,它(bash)从可以第一条命令执行到最后一条然后退出,不与你进行任何交互,它就是非交互式shell。

交互式非登录shell,例如你在Gnome图形界面中打开“终端”出来的那种窗口程序,和登录shell相比,它是“非登录”的,你并不需要输入用户名和密码,和非交互式shell相比,这是“交互式”的,就像你说的那它“你输入什么,它就解释什么”。

注:

1.交互、非交互模式的本质区别在于,一批任务在执行过程中,是否需要人机互动。比如执行一批任务,需要手动一个一个敲入命令,这样就是交互模式,还有在命令执行过程中,需要人为为程序输入数据,这也是交互模式,不过如果提前准备好输入,例如:`order <input.txt`不需要人为输入数据,也就变成了非交互模式。将一批任务写为一个shell脚本,虽然过程中不需要人为再输入命令,但是可能程序执行过程中需要输入参数,所以执行shell脚本这即可能是交互模式,也可能是非交互模式。

2.交互式shell举例:

(1)交互式模式就是在终端上执行,shell等待你的输入,并且立即执行你提交的命令,然后将结果反馈给你。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、退出。当你退出后,shell也终止了。

3.非交互式shell举例:

(1)脚本执行shell(不需要人为输入的)。

4.交互式shell与非交互式shell区别:读取的配置文件不同,交互式bash必然读取~/.bashrc文件;非交互式bash读取的是环境变量BASH_ENV(通常情况下)所指定的配置文件。

5.交互式shell会启动如下文件:(1)~/.bashrc(2)/etc/bashrc(~/.bashrc文件会启动/etc/bashrc)

6.交互式shell指打开了一个shell进入了一个新的命令行界面。所有的交互式shell一般都会执行~/.bashrc文件和/etc/bashrc两个文件(e.g.rhel8系统)。

7.为了更直观,给大家配置2个表格

                                        表6-13 不同类型的bash Shell

上下文

登录Shell

交互式Shell

从虚拟控制台登录Shell

通过网络Shell到一台远程机器上时登录Shell

X初始化Shell

X终端Shell

手动运行bash启动的子Shell

用在命令替换中的子Shell

被圆括号分组的命令使用的子Shell

命令执行脚本时使用的子Shell

注:脚本执行有多种方式,用source或者.命令执行脚本的方式是在当前shell中获得脚本和执行脚本(即执行脚本和获得脚本是在当前shell中而非当前shell的子shell中),如果执行脚本用绝对路径、相对路径、bash命令、sh命令执行脚本,则是在当前shell的子shell中执行脚本的。下面以执行脚本,script.sh为例:

1.绝对路径执行脚本:
/home/alice/script.sh                  #这种方式是在子shell中执行脚本
2.相对路径执行脚本(即进入脚本所在目录,执行以下命令):
./script.sh                            #这种方式也是在子shell中执行脚本
3.用bash或者sh命令执行脚本
bash script.sh           #子shell中执行脚本
sh script.sh             #子shell中执行脚本4.source或者.执行脚本
source script.sh        #当前shell中执行脚本
.   script.sh           #当前shell中执行脚本

                                      

                                                        表 6-14 bash的启动配置文件

Shell类型

预期功能

/etc/profile

登录Shell

通用的有效环境变量

/etc/profile.d/*.sh

登录Shell

软件包特有的环境变量

~/.bash_profile

登录Shell

用户特有的环境变量

~/.bashrc

所有交互式Shell

用户特有的别名、Shell功能和Shell选项

/etc/bashrc

所有交互式Shell

通用别名、Shell功能和Shell选项

相关文章:

登录shell与非登录shell、交互式与非交互式shell的知识点详细总结

一、登录shell与非登录shell 1.登录shell定义&#xff1a;指的是当用户登录系统时所取的那个shell&#xff0c;登录shell属于交互式shell。 登陆shell通常指的是&#xff1a;用户通过输入用户名/密码&#xff08;或证书认证&#xff09;后启动的shell.例如&#xff1a; 当时…...

【教学类-42-02】20231224 X-Y 之间加法题判断题2.0(按2:8比例抽取正确题和错误题)

作品展示&#xff1a; 0-5&#xff1a; 21题&#xff0c;正确21题&#xff0c;错误21题42题 。小于44格子&#xff0c;都写上&#xff0c;哪怕输入2:8&#xff0c;实际也是5:5 0-10 66题&#xff0c;正确66题&#xff0c;错误66题132题 大于44格子&#xff0c;正确66题抽取44*…...

轻量Http客户端工具VSCode和IDEA

文章目录 前言Visual Studio Code 的插件 REST Client编写第一个案例进阶&#xff0c;设置变量进阶&#xff0c;设置Token IntelliJ IDEA 的 HTTP请求构建http脚本HTTP的环境配置结果值暂存 前言 作为一个WEB工程师&#xff0c;在日常的使用过程中&#xff0c;HTTP请求是必不可…...

机器学习或深度学习的数据读取工作(大数据处理)

机器学习或深度学习的数据读取工作&#xff08;大数据处理&#xff09;主要是.split和re.findall和glob.glob运用。 读取文件的路径&#xff08;为了获得文件内容&#xff09;和提取文件路径中感兴趣的东西(标签) 1&#xff0c;“glob.glob”用于读取文件路径 2&#xff0c;“.…...

Rust 生命周期

Rust 第17节 生命周期 先看一段错误代码 /* //一段错误的代码 // Rust 编译时会报错&#xff1b; */let r;{let x 5;r &x;}println!("{}",r);Rust 在编译时使用 借用检查器&#xff0c; 比较作用域来检查所有的借用是否合法&#xff1b; 很明显&#xff1b;r…...

【论文解读】CNN-Based Fast HEVC Quantization Parameter Mode Decision

时间&#xff1a;2019 年 级别&#xff1a;SCI 机构&#xff1a;南京信息工程大学 摘要 随着多媒体呈现技术、图像采集技术和互联网行业的发展&#xff0c;远程通信的方式已经从以前的书信、音频转变为现在的音频/视频。和 视频在工作、学习和娱乐中的比例不断提高&#xff0…...

在Linux上安装CLion

本教程将指导你如何在Linux系统上安装CLion&#xff0c;下载地址为&#xff1a;https://download.jetbrains.com.cn/cpp/CLion-2022.3.3.tar.gz。以下是详细的安装步骤&#xff1a; 步骤1&#xff1a;下载CLion 首先&#xff0c;你需要使用wget命令从提供的URL下载CLion的tar…...

R语言贝叶斯网络模型、INLA下的贝叶斯回归、R语言现代贝叶斯统计学方法、R语言混合效应(多水平/层次/嵌套)模型

目录 ㈠ 基于R语言的贝叶斯网络模型的实践技术应用 ㈡ R语言贝叶斯方法在生态环境领域中的高阶技术应用 ㈢ 基于R语言贝叶斯进阶:INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析 ㈣ 基于R语言的现代贝叶斯统计学方法&#xff08;贝叶斯参数估…...

多维时序 | Matlab实现PSO-GCNN粒子群优化分组卷积神经网络多变量时间序列预测

多维时序 | Matlab实现PSO-GCNN粒子群优化分组卷积神经网络多变量时间序列预测 目录 多维时序 | Matlab实现PSO-GCNN粒子群优化分组卷积神经网络多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 Matlab实现PSO-GCNN粒子群优化分组卷积神经网络多…...

Oracle 学习(1)

Oracle简介 Oracle是殷墟&#xff08;yīn Xu&#xff09;出土的甲骨文&#xff08;oracle bone inscriptions&#xff09;的英文翻译的第一个单词&#xff0c;在英语里是“神谕”的意思。Oracle公司成立于1977年&#xff0c;总部位于美国加州&#xff0c;是世界领先的信息管…...

华为HCIA认证H12-811题库新增

801、[单选题]178/832、在系统视图下键入什么命令可以切换到用户视图? A quit B souter C system-view D user-view 试题答案&#xff1a;A 试题解析&#xff1a;在系统视图下键入quit命令退出到用户视图。因此答案选A。 802、[单选题]“网络管理员在三层交换机上创建了V…...

Nginx Unit 1.27.0 发布

目录 介绍 更新内容 将 HTTP 请求重定向到 HTTPS 为纯路径 URI 提供可配置的文件名 完整的更新日志 其他 平台更新 介绍 Nginx Unit 是一个动态应用服务器&#xff0c;能够与 Nginx Plus 和 Nginx 开源版并行或独立运行。Nginx Unit 支持 RESTful JSON API&#xff0c;…...

【影像组学入门百问】#32—#34

#32-影像组学研究过程中&#xff0c;图像重采样参 数怎么选择&#xff1f; 在影像组学研究过程中&#xff0c;选择合适的图像重采样参数对于保证分析质量和准确性至关重要。以下是在选择图像重采样参数时需要考虑的一些建议&#xff1a; 1.目标分辨率&#xff1a;首先&#…...

YOLOv5代码解析——yolo.py

yolo.py的主要功能是构建模型。 1、最主要的函数是parse_model&#xff0c;用于解析yaml文件&#xff0c;并根据解析的结果搭建网络。这个函数的注释如下&#xff1a; def parse_model(d, ch): # model_dict, input_channels(3)"""解析模型文件&#xff0c;并…...

4种feature classification在代码的实现上是怎么样的?Linear / MLP / CNN / Attention-Based Heads

具体的分类效果可以看&#xff1a;【Arxiv 2023】Diffusion Models Beat GANs on Image Classification 1、线性分类器 (Linear, A) 使用一个简单的线性层&#xff0c;通常与一个激活函数结合使用。 import torch.nn as nnclass LinearClassifier(nn.Module):def __init__(se…...

最新Unity DOTS Physics物理引擎碰撞事件处理

最近DOTS发布了正式的版本,同时基于DOTS的理念实现了一套高性能的物理引擎&#xff0c;今天我们给大家分享和介绍一下这个物理引擎的碰撞事件处理以及核心相关概念。 Unity.Physics物理引擎的主要流程与Pipeline Unity.Physics物理引擎做仿真迭代计算的时候主要通过以下步骤来…...

springboot集成websocket全全全!!!

一、界面展示 二、前置了解 1.什么是websocket WebSocket是一种在单个TCP连接上进行全双工通信的持久化协议。 全双工协议就是客户端可以给我们服务器发数据 服务器也可以主动给客户端发数据。 2.为什么有了http协议 还要websocket 协议 http协议是一种无状态&#xff0c;非…...

SpringMVC:整合 SSM 中篇

文章目录 SpringMVC - 04整合 SSM 中篇一、优化二、总结三、说明注意&#xff1a; SpringMVC - 04 整合 SSM 中篇 一、优化 在 spring-dao.xml 中配置 dao 接口扫描&#xff0c;可以动态地实现 dao 接口注入到 Spring 容器中。 优化前&#xff1a;手动创建 SqlSessionTempl…...

oracle即时客户端(Instant Client)安装与配置

之前的文章记录了oracle客户端和服务端的下载与安装&#xff0c;内容参见&#xff1a; 在Windows中安装Oracle_windows安装oracle 如果不想安装oracle客户端&#xff08;或者是电脑因为某些原因无法安装oracle客户端&#xff09;&#xff0c;还想能够连接oracle远程服务&#…...

POP3协议详解

基本介绍 POP3是一种用于从邮件服务器获取电子邮件的协议。它允许邮件客户端连接到邮件服务器&#xff0c;检索服务器上存储的邮件&#xff0c;并将邮件下载到客户端设备上。POP3的工作原理如下&#xff1a; 连接和身份验证&#xff1a; 邮件客户端通过TCP/IP连接到邮件服务器…...

电子病历编辑器源码,提供电子病历在线制作、管理和使用的一体化电子病历解决方案

概述&#xff1a; 电子病历是指医务人员在医疗活动过程中,使用医疗机构信息系统生成的文字、符号、图表、图形、数据、影像等数字化信息,并能实现存储、管理、传输和重现的医疗记录,是病历的一种记录形式。 医院通过电子病历以电子化方式记录患者就诊的信息&#xff0c;包括&…...

WT2605C高品质音频蓝牙语音芯片:外接功放实现双声道DAC输出的优势

在音频处理领域&#xff0c;双声道DAC输出能够提供更为清晰、逼真的音效&#xff0c;增强用户的听觉体验。针对这一需求&#xff0c;唯创知音的WT2605C高品质音频蓝牙语音芯片&#xff0c;通过外接功放实现双声道DAC输出&#xff0c;展现出独特的应用优势。 一、高品质音频处理…...

IntelliJ IDEA 2023.3 最新版如何如何配置?IntelliJ IDEA 2023.3 最新版试用方法

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

如何查看内存卡使用记录-查看的设备有:U盘、移动硬盘、MP3、SD卡等-供大家学习研究参考

主要功能 USB Viewer&#xff08;USB移动存储设备使用记录查看器&#xff09;可用于查看本机的USB移动存储设备使用记录。可查看的设备有&#xff1a;U盘、移动硬盘、MP3、SD卡……等。   可用于兵器、航空、航天、政府、军队等对保密要求较高的单位&#xff0c;可在计算机保…...

九、W5100S/W5500+RP2040之MicroPython开发<HTTPOneNET示例>

文章目录 1. 前言2. 平台操作流程2.1 创建设备2.2 创建数据流模板 3. WIZnet以太网芯片4. 示例讲解以及使用4.1 程序流程图4.2 测试准备4.3 连接方式4.4 相关代码4.5 烧录验证 5. 注意事项6. 相关链接 1. 前言 在这个智能硬件和物联网时代&#xff0c;MicroPython和树莓派PICO正…...

在 Laravel 中,清空缓存大全

在 Laravel 中&#xff0c;清空缓存通常涉及到清除应用程序中的缓存文件和数据库查询缓存。以下是一些常用的清空缓存方法&#xff1a; 1. 清除路由缓存&#xff1a; Laravel 的路由缓存可以提高应用程序的性能&#xff0c;但在开发过程中&#xff0c;你可能需要频繁地更改路…...

【贪心】单源最短路径Python实现

文章目录 [toc]问题描述Dijkstra算法Dijkstra算法的正确性贪心选择性质最优子结构性质 Dijkstra算法应用示例时间复杂性Python实现 个人主页&#xff1a;丷从心 系列专栏&#xff1a;贪心算法 问题描述 给定一个带权有向图 G ( V , E ) G (V , E) G(V,E)&#xff0c;其中每…...

Spark Shell的简单使用

简介 Spark shell是一个特别适合快速开发Spark原型程序的工具&#xff0c;可以帮助我们熟悉Scala语言。即使你对Scala不熟悉&#xff0c;仍然可以使用这个工具。Spark shell使得用户可以和Spark集群交互&#xff0c;提交查询&#xff0c;这便于调试&#xff0c;也便于初学者使用…...

Springsecurty【2】认证连接MySQL

1.前期准备 基于Spring Initializr创建SpringBoot项目&#xff08;基于SpringBoot 2.7.12版本&#xff09;&#xff0c;实现与MyBatisPlus的项目整合。分别导入&#xff1a;CodeGenerator和MyBatisPlusConfig。 CodeGenerator&#xff1a;用于MybatisPlus代码生成&#xff1b;…...

.Net 访问电子邮箱-LumiSoft.Net,好用

序言&#xff1a; 网上找了很多关于.Net如何访问电子邮箱的方法&#xff0c;但是大多数都达不到想要的需求&#xff0c;只有一些 收发邮件。因此 花了很大功夫去看 LumiSoft.Net.dll 的源码&#xff0c;总算做出自己想要的结果了&#xff0c;果然学习诗人进步。 介绍&#xff…...