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

Linux:login shell和non-login shell以及其配置文件

相关阅读

Linuxicon-default.png?t=O83Ahttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm=1001.2014.3001.5482 


        shell是Linux与外界交互的程序,登录shell有两种方式,login shell与non-login shell,它们的区别是读取的配置文件不同,本文将以Bash shell为例就此进行阐述,但这个概念适用于其他shell,如ch、csh、tcsh、zsh等。

login shell

        下面的这些情况下,登录的是login shell。

        1、通过GNOME等GUI界面输入用户名、密码后登录时(它不是命令行shell,但仍可看做是login shell)。

        2、通过GNOME等GUI界面,设置了Run command as login shell选项,右击选择Open Terminal登录bash shell时。

        3、利用Ctrl+Alt+F*快捷键或chvt命令启动的终端详见Linux:终端,输入用户名、密码登录bash shell时(包括ssh远程连接)。

        4、在shell中使用su命令,且使用-、-l、或--login选项时,详见Linux:用户切换指令su。

        5、在shell中使用bash命令,且使用-、-l、或--login选项时(无论是以交互式还是非交互式)。

        一个误区是输入了密码登录的就是login shell,否则是non-login shell,这是错误的。

non-login shell

        下面的这些情况下,登录的是non-login shell。

        1、通过GNOME等GUI界面,没有设置Run command as login shell选项,右击选择Open Terminal登录bash shell时。

        2、在shell中使用su命令,且不使用-、-l、或--login选项时,详见Linux:用户切换指令su。

        3、在shell中使用bash命令,且不使用-、-l、或--login选项时(无论是以交互式还是非交互式)。 

检验方法

        检验一个shell是否为login shell的方法有很多:

        1、有些login shell在登录时会提示上次登录状态和时间。

        2、可以检查$0特殊变量的值,如果其有前缀-,如-bash之类则代表其为login shell,如果其没有前缀-,如bash、/bin/bash之类则代表其为non-login shell,但这对于“通过GNOME等GUI界面输入用户名、密码后登录”和“在shell中使用bash命令”两种情况是失效的。

        3、使用下面的命令检查,如选项开启则表示为login shell,但这对于第1种情况是失效的。

shopt -q login_shell && echo "This is a login shell" || echo "This is a non-login shell"

        4、测试shell是否读取了配置文件/etc/profile(后面详细说明)。

       

配置文件

        首先说明,下面这些配置文件的读取和执行,是通过类似点命令source的效果自动完成的(但没有显式执行),关于该命令,见Linux:点命令source。

/etc/profile

  • 用途:/etc/profile是一个系统范围的login shell配置文件,即它会影响所有用户的shell环境设置。它用于定义系统范围的环境变量、启动程序和其他全局配置。

  • 执行时机/etc/profile会在login shell登录时执行,因此可以将一些测试语句加入其中/etc/profile用于检验一个shell是否为login shell(需要root权限),如下所示。

echo "This is from /etc/profile" >> /tmp/profile_test.log
  • 位置/etc/profile存在于系统的/etc目录中,这是一个全局文件,管理员可以在这里做一些对所有用户都有影响的配置。

  • 内容/etc/profile通常会包含对用户$PATH环境变量、历史记录设置、默认权限掩码(umask)等的定义。它还会执行/etc/profile.d目录下的其他脚本。

~/.bash_profile

  • 用途:~/.bash_profile是一个用户级别的login shell配置文件,它允许用户设置自己专属的环境变量、别名等。通常用于定义环境变量和其他只在登录时需要设置的内容。

  • 执行时机:~/.bash_profile会在Bash login shell登录时执行。

  • 内容:~/.bash_profile中经常包括对~/.bashrc的调用(通过source命令),这样Bash login shell不仅会执行login shell相关的配置,还可以执行non-login shell的配置。

~/.bash_login

  • 用途:~/.bash_login是另一个用户级别的login shell配置文件,与~/.bash_profile类似。Bash 在启动login shell时会先查找并执行~/.bash_profile,如果这个文件不存在,才会尝试执行 ~/.bash_login。

  • 执行时机:与~/.bash_profile类似,只在Bash login shell登录时执行。

  • 优先级:~/.bash_login通常较少使用,因为大多数用户更常用~/.bash_profile。只有当 ~/.bash_profile不存在时,Bash 才会尝试执行~/.bash_login。

  • 内容:内容上可以与~/.bash_profile类似,不过由于其优先级较低,它很少使用。

~/.profile

  • 用途:~/.profile是一个通用的login shell配置文件,它不只限于Bash shell,也会被其他shell(如sh)执行。这个文件用于设置用户的环境变量、启动应用等,并可以适用于任何Bourne shell派生的shell。

  • 执行时机:如果~/.bash_profile和~/.bash_login都不存在,Bash shell会执行~/.profile。因此,虽然它不是特定于Bash shell的配置文件,但仍然会在login shell中执行。

  • 内容:通常在~/.profile中设置用户环境变量和启动脚本。

~/.bashrc

  • 用途:~/.bashrc是一个用户级别的non-login shell配置文件。这个文件通常用于设置用户的别名、函数、命令提示符(PS1)和其他命令行的设置。

  • 执行时机:当Bash以交互式non-login shell启动时,会执行~/.bashrc。如果你希望login shell也执行其中的内容,如果在(通常如此) ~/.bash_profile或~/.profile中显式调用它(通过source命令,这会导致启动login shell时也执行~/.bashrc)。

  • 内容:~/.bashrc包含用户的别名、自定义函数、历史记录设置、命令提示符格式(PS1)等。它是交互式shell的主要配置文件。

相关文章:

Linux:login shell和non-login shell以及其配置文件

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 shell是Linux与外界交互的程序,登录shell有两种方式,login shell与non-login shell,它们的区别是读取的配置文件不同,本…...

面试速通宝典——1

1. 内存有哪几种类型? ‌‌‌‌  内存分为五个区,堆(malloc)、栈(如局部变量、函数参数)、程序代码区(存放二进制代码)、全局/静态存储区(全局变量、static变量&#…...

用uniapp 及socket.io做一个简单聊天 升级 9

比这之前优化了以下功能 上线通知 群聊里适时显示在线人数 约请好友 通过好友通过socket 相应端自动变化 PC端可以拉取摄象头拍照 PC端可以录音发送 拉起摄象头发送录象 <template><view class""><scroll-view scroll-y"true" class&…...

【Unity Shader】Special Effects(九)Vortex 旋涡(UI)

源码:[点我获取源码] 索引 Vortex 旋涡思路分析旋涡中心旋涡旋转旋涡强度旋涡动画Vortex 旋涡 旋涡效果可以将一张图像以指定点作为旋涡中心,呈顺时针旋涡动画效果,使用动画播放器: 思路分析 首先,旋涡特效的核心也即是旋转(特别是uv坐标的旋转); 在此基础上,旋涡中…...

01_两数之和

一、题目 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案&#xff0c;并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。…...

ChatGLM-6B-部署与使用

✨ Blog’s 主页: 白乐天_ξ( ✿&#xff1e;◡❛) &#x1f308; 个人Motto&#xff1a;他强任他强&#xff0c;清风拂山冈&#xff01; &#x1f4ab; 欢迎来到我的学习笔记&#xff01; 什么是ChatGLM-6B 一、简介 ChatGLM-6B 是由清华大学知识工程实验室&#xff08;KEG&…...

李宏毅结构化学习 03

文章目录 一、Sequence Labeling 问题概述二、Hidden Markov Model(HMM)三、Conditional Random Field(CRF)四、Structured Perceptron/SVM五、Towards Deep Learning 一、Sequence Labeling 问题概述 二、Hidden Markov Model(HMM) 上图 training data 中的黑色字为x&#xff…...

java重点学习-总结

十五 总结 https://kdocs.cn/l/crbMWc8xEZda &#xff08;总结全部的精华&#xff09; 1.面试准备 企业筛选简历规则简历编写注意事项(亮点)项目怎么找&#xff0c;学习到什么程度面试过程(表达结构、什么样的心态去找工作) 2.redis 缓存相关(缓存击穿、穿透、雪崩、缓存过期淘…...

文件操作

文件的由来&#xff1a;在程序中&#xff0c;之前每一个程序都是需要运行然后输入数据&#xff0c;当程序结束时输入的数据也随之消散&#xff0c;为了下一次运行时不再输入数据就有文件的由来&#xff0c;使用文件我们可以将数据直接存放在电脑的硬盘上&#xff0c;做到了数据…...

docker存储

docker分层结构 如图所示&#xff0c;容器是由最上面可读可写的容器层&#xff0c;以及若干个只读镜像层组成&#xff0c;创建容器时&#xff0c;容器中的 数据都来自镜像层。这样的分层机构最大的特点是写时复制&#xff1a; 1、容器中新生成的数据会直接存放在容器层&#xf…...

Ubuntu20.04.6 环境下docker设置proxy

问题背景&#xff1a; 在进行dokcer pull操作的时候&#xff0c;会失败且出现如下提示Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting h…...

如何给文件夹里面的文件批量添加前缀和编号(利用C#写的小工具)

运行结果 将上面的文件编号效果 下载过后启动这个程序即可&#xff08;这个程序灵感来源是上次给美术资源分类和编号的时候给我干吐了&#xff0c;所以写了这个工具&#xff09; 体验链接&#xff1a;laozhupeiqia/批处理 --- laozhupeiqia/批处理 (github.com) 如果对你有帮助…...

使用分布式调度框架时需要考虑的问题——详解

引言 随着企业系统的规模不断扩大&#xff0c;特别是在分布式计算和云计算环境下&#xff0c;如何协调多个节点或服务执行任务成为一个关键问题。分布式调度框架在这种背景下应运而生&#xff0c;它可以调度成千上万的任务&#xff0c;在多个节点上分配、执行和监控任务&#…...

C语言编译四大阶段

目录 一、引言 二、预处理阶段 三、编译阶段 四、汇编阶段 五、链接阶段 六、总结 本文将详细介绍C语言编译的四个阶段&#xff0c;包括预处理、编译、汇编和链接。通过学习这些阶段&#xff0c;读者可以更好地理解C语言程序的编译过程&#xff0c;提高编程效率。 一、引…...

C# 关于“您与该网站的连接不是私密连接...”的问题

目录 问题现象 范例运行环境 WebService 类 类介绍 增加参数 实现 小结 问题现象 最近在访问开发的微信支付功能时遇到了无法访问令牌的错误&#xff0c;这个错误是公司内部应用程序接口返回的访问错误。经过排查是访问 HTTPS 站点遇到的错误&#xff0c;提示证书风险…...

【超详细】基于YOLOv8训练无人机视角Visdrone2019数据集

主要内容如下&#xff1a; 1、Visdrone2019数据集介绍 2、下载、制作YOLO格式训练集 3、模型训练及预测 4、Onnxruntime推理 运行环境&#xff1a;Python3.8&#xff08;要求>3.8&#xff09;&#xff0c;torch1.12.0cu113&#xff08;要求>1.8&#xff09;&#xff0c…...

VUE项目在Linux子系统部署

1、导读 环境&#xff1a;Windows 11、python 3.12.3、Django 4.2.11、 APScheduler 3.10.4 vue 背景&#xff1a;换系统需要重新安装&#xff0c;避免后期忘记&#xff0c;此处记录一下啊 事件&#xff1a;20240922 说明&#xff1a;使用node启动&#xff0c;非nginx&…...

开源 | 如何在产品上扩展大储存?合宙LuatOS外挂SPI Flash库轻松搞定

我们都知道芯片的储存都是寸土寸金的&#xff0c;当你的产品需要存储照片、音频、文档等资源的时候&#xff0c;有没有眉头一紧&#xff1f;内部不够只能外扩&#xff0c;但是外扩要编写各种驱动&#xff0c;还有Flash替换&#xff0c;这都要消耗头发啊&#xff01; 但&#x…...

20 基于STM32的温度、电流、电压检测proteus仿真系统(OLED、DHT11、继电器、电机)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STM32F103C8T6 采用DHT11读取温度、滑动变阻器模拟读取电流、电压。 通过OLED屏幕显示&#xff0c;设置电流阈值为80&#xff0c;电流小阈值为50&#xff0c;电压阈值为60&#xff0c;温度阈值…...

spring自定义属性编辑器

文章目录 spring自定义属性编辑器步骤 spring自定义属性编辑器 属性编辑器是用来解析bean的配置文件中的属性标签的&#xff0c;spring的BeanWrapperImpl默认会注册CustomCollectionEditor(集合)、CustomMapEditor(Map)、CurrencyEditor(货币)、ByteArrayPropertyEditor等&…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上&#xff0c;对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者&#xff0c;高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法&#xff0c;分为两大系列&#xff1a; 一、getElementBy... 系列 传统方法&#xff0c;直接通过 DOM 接口访问&#xff0c;返回动态集合&#xff08;元素变化会实时更新&#xff09;。…...