什么是交互式shell和非交互式shell,什么是login shell 和non-login shell。

交互式模式:就是shell等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。

非交互式模式:在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。

login shell:就是需要输入用户名及密码登录的shell,如开机shell登陆、ssh登陆、su - username(从root切换到其他用户时无需密码)。

non-login shell:无需输入密码,如bash、su username、图形界面打开bash。

bashrc用于交互式non-login shell,而profile用于交互式login shell。系统中存在许多bashrc和profile文件

交互式登录(login)模式:主要用来设置一些系统变量

/etc/profile:(针对所有用户)此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行并从/etc/profile.d目录的配置文件中搜集shell的设置。

~/.profile:(针对个人)若bash是以login方式执行时,读取~/.bash_profile,若它不存在,则读取~/.bash_login,若前两者不存在,读取~/.profile.另外,图形模式登录时,此文件将被读取,即使存在~/.bash_profile和~/.bash_login。

~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。

~/.bash_login:若bash是以login方式执行时,读取~/.bash_profile,若它不存在,则读取~/.bash_login,若前两者不存在,读取~/.profile。

交互式非登录(non login)模式:主要用来保存一些bash的设置

/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。

 ~/.bashrc:该文件包含专用于个人的的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。

~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件。也就是说,在文本模式注销时,此文件会被读取,图形模式注销时,此文件不会被读。

下面是在本机的几个例子:

首先需要明确的是,读取~/.bash_profile,该文件便会去读取~/.bashrc,而~/.bashrc又会去读取/etc/bashrc。所以只要读取~/.bash_profile,便会同时读取~/.bashrc与/etc/bashrc。

1. 图形模式登录时,顺序读取:/etc/profile和~/.profile。

2. 图形模式登录后,打开终端时,顺序读取:~/.bashrc和/etc/bashrc。

3. 文本模式登录时,顺序读取:/etc/profile,~/.bash_profile,~/.bashrc和/etc/bashrc。

4. 从其它用户su到该用户,则分两种情况:

(1)如果带-l参数(或-参数,--login参数),如:su -l username,则bash是lonin的,它将顺序读取以下配置文件:/etc/profile,~/.bash_profile,~/.bashrc和/etc/bashrc。

(2)如果没有带-l参数,则bash是non-login的,它将顺序读取:~/.bashrc和/etc/bashrc并从父进程继承其环境变量。

5. 注销时,或退出su登录的用户,如果是longin方式,那么bash会读取:~/.bash_logout

6. 执行自定义的shell文件时,若使用“bash -l a.sh”的方式,则bash会读取行:/etc/profile,~/.bash_profile,~/.bashrc和/etc/bashrc,用sh -l a.sh调用bash,它将会执行/etc/profile以及 ~/.profile。若使用其它方式,如:bash a.sh, ./a.sh,sh a.sh,则不会读取上面的任何文件,只能从其父进程处继承环境变量,像alias等就无法继承使用了。

7. 上面的例子凡是读取到~/.bash_profile的,若该文件不存在,则读取~/.bash_login,若前两者不存在,读取~/.profile。

转至https://www.cnblogs.com/Monitor/p/4020223.html

etc/profile /etc/bashrc ~/.bash_profile ~/.bashrc等配置文件区别的更多相关文章

  1. /etc/rc.local ; /etc/init.d ;/etc/profile;/etc/bashrc;~/.bash_profile;~/.bashrc;~/.bash_logout

    1. /etc/rc.local 这是使用者自订开机启动程序,把需要开机自动运行的程序写在这个脚本里. 把脚本程序写在/etc/rc.d/init.d/目录下也可以  在完成 run level 3 ...

  2. /etc/profile /etc/bashrc ~/.bash_profile ~/.bashrc ~/.bash_logout 说明及区别

    /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置. /etc/bashrc:为每一 ...

  3. linux下/etc/profile /etc/bashrc /root/.bashrc /root/.bash_profile这四个配置文件的加载顺序

    目录 一.关于linux配置文件 二.验证四个配置文件的加载顺序 三.结论 一.关于linux配置文件 1.linux下主要有四个配置文件:/etc/profile ./etc/bashrc ./ro ...

  4. 【总结】/etc/rc.d/rc.local 与 /etc/profile .bash_profile .bashrc 文件执行顺序

    登陆shell与交互式非登陆shell的区别 登录shell 所谓登录shell,指的是当用户登录系统时所取的那个 shell.登录shell属于交互式shell. 登录shell将查找4个不同的启动 ...

  5. profile bashrc bash_profile之间的区别和联系

    profile bashrc bash_profile之间的区别和联系 博客分类: Linux   执行顺序为:/etc/profile -> (~/.bash_profile | ~/.bas ...

  6. profile,bashrc,.bash_profile,.bash_login,.profile,.bashrc,.bash_logout浅析 Part 2

    profile,bashrc,.bash_profile,.bash_login,.profile,.bashrc,.bash_logout浅析 Part 2   by:授客 QQ:103355312 ...

  7. profile bashrc bash_profile 之间的区别和联系

    /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置. /etc/bashrc:为每一个 ...

  8. bashrc,bash_profile和/etc/profile

    bashrc,bash_profile和/etc/profile 最近老出现在shell里面能跑的程序用鼠标双击app去不能跑.究其原因是因为环境变量的问题. 在类unix系统中一般有三个bash配置 ...

  9. Linux的环境变量.bash_profile .bashrc profile文件

    Shell变量有局部变量.环境变量之分.局部变量就是指在某个Shell中生效的变量,只在此次登录中有效.环境变量通常又称“全局变量”,虽然在Shell中变量默认就是全局的,但是为了让子Shall继承当 ...

随机推荐

  1. Java 13 即将发布,新特性必须抢先看!

    作者:h4cd 本文转载自开源中国(ID:oschina2013) 由于 Java 现在采取"半年发布一次新版本"的模式,所以 Java 12 的下一个版本 Java 13/JDK ...

  2. 硬RAID与软RAID的区别

    什么是RAID? RAID是英文Redundant Array of Independent Disks的缩写,翻译成中文即为独立磁盘冗余阵列,或简称磁盘阵列.简单的说,RAID是一种把多块独立的硬盘 ...

  3. __init__ 和__new__的区别

    __init__和__new__的区别 __init__是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值. __new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例, ...

  4. python_模块 hashlib ,configparser, logging

    hashlib模块 算法介绍 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长 ...

  5. 原生js星星评分源码

    html: <div id="fiveStars"> <div>到场时间:<img v-for="(star,index) in stars ...

  6. Java中super关键字的位置

    1.子类的构造函数如果要引用super的话,必须把super放在函数的首行. 例如: class Base  { Base()  {  System.out.println("Base&qu ...

  7. MATLAB中图像处理的函数

    表1 图像显示 函数名 功能说明 函数名 功能说明 colorbar 颜色条显示 montage 按矩形剪辑方式显示多帧图像 getimage 从坐标系中获取图像数据 immovie 从多帧索引图像中 ...

  8. ANdroid手机屏幕反横向等参数设定

    经过我一番百度和看Android文档,我才发现,Android对旋转屏,特别是只有横屏或者竖屏虽重力旋转的支持是到Android4.3.1才有完美支持的 unspecified - 默认值,由系统选择 ...

  9. 一只青蛙一次可以跳1阶或者2阶,n阶,有多少种到达终点的方式。

    前两天面试遇到的一个题,当时没有想清楚,今天想了一下,po出来: # -*-encoding:utf-8-*- import sys end = 0 # 终点 cnt = 0 # 统计组合方式 def ...

  10. Java 基础 -- BigInteger BigDecimai大数

    BigInteger 加减乘除 BigInteger bi1 = new BigInteger("123456789") ; // 声明BigInteger对象 BigIntege ...