原文地址:这里

  

  在linux中我们知道当你输入一条命令的时候,命令的查找是根据环境变量PATH来查找的,如果想知道一个命令的源文件存放在什么地方可以用which或whereis指令。那么PATH变量是在什么时候初始化呢?还有其他的许许多多的环境变量都是在什么时候初始化呢?看完下边介绍的login shellnon-login shell想必你会明白的, login shell和non-login shell取得的环境变量是不一致的。

一、login shell

  login shell是说在取得bash时需要完整的登陆流程。什么时候取得bash呢?当然就是用户登陆的时候。当你在tty1~tty6登陆,需要输入账号和密码,此时取得的bash就是login shell。

那这个login shell具体会读那些配置文件呢

1. 、etc/profile: 这是系统的整体设置, 如果你修改了这个文件,任何用户登陆时候都会按照你的修改改变,建议不要修改这个文件。每个用户登陆取得bash的时候都会读取这个文件,可以用vi来打开这个script读一下。根据你的UID读取PATH, MAIL, USER,LOGNAME, HOSTNAME, HISTSIZE等设置。然后设置你的umask的值,然后是读取/etc/profile.d/*.sh中的一系列文件。这个目录下主要规定了语系,颜色,vi的命令别名等,具体可以查看这个文件夹。这个是我的/etc/profile做的事情,咱们的可不一定一样哦。

有的说还会读取/etc/inputrc,/etc/sysconfig/i18n等,当然不同的系统配置当然不一样了,如果想深入学习的话可以读一下这个文件的shell,看一下具体都做了哪些问题。

2、 ~/.bash_profile 或 ~/.bash_login 或~/.profile

其实上边的这个三个文件只会读取一个的,如果存在~/.bash_profile就不会读取后两个; 如果不存在, 则读取~/.bash_login, 如果~/.bash_login存在的话就不会读取~/.profile; 如果~/.bash_login不存在则读取~/.profile。不同的系统,这三个文件的存在情况不一样。这三个文件属于用户个人偏好设置,如果你要配置个人的环境,就修改这里边就可以了。

我们可以去读一下这三个文件看看帮我们干了些什么事情,我们用vi打开对应的shellscript, 发现其实只帮我们做了一下判断~/.bashrc这个文件是不是存在,如果存在的话,读取这个文件。我们用vi打开~/.bashrc, 在~/.bashrc中,也只帮我们做了一件事情就是判断/etc/bashrc是否存在,存在的话读取/etc/bashrc。然后我们去读一下/etc/bashrc中的shell源码,发现在/etc/bashrc中帮我们做了几件事情,设置umask,设置PS1(就是命令提示符前边的一部分字符的格式),读取/etc/profile.d/*.sh等。是不是和/etc/profile做的事情差不多。

二、non-login shell

  non-login shell就是取得bash不需要重复登录,就像你在桌面视图中用ctrl+alt+T启动的shell输入窗口就是non-login shell。还有就是你在shell窗口直接su切换的用户,都属于non-login shell。

non-login shell只会读取~/.bashrc这个文件,具体步骤和上边一样。

如果我们修改了我们的~/.bashrc如果想让配置立即生效,我们只需要用source命令。例如:$ source ~/.bashrc

三、su和sudo命令

  平常我们切换root的时候一般直接su, 这样是不对的,因为我们如果直接su的话,有上边我们的分析是不会读取/etc/profile的,所以你的环境变量PATH,MAIL等是不会改变的,此时是non-login shell, 如果想读取/etc/profile的话我们需要用

 # su -

  我们切换其他用户的时候,加入切换到wukong,我们一般直接su wukong,这都是不对的,切换到一般用户我们需要用

 # su -l wukong

(注:命令 “su - ” 和 “su -l” 同义,都是切换用户时使用login shell模式,不同的是,使用option “-”时,“-”必须是su命令的last option。)

才会读取~/.bash_profile等文件。现在知道怎么使用su命令了吧。

  sudo命令的配置在/etc/sudoers中, 我们可以用visudo命令直接打开这个文件,或者用vi /etc/sudoers命令打开进行配置。此命令是让我们暂时取得root权限,当然还有需要权限可以增加,在此我们就不一一介绍了。还有当你添加一个用户,但是不想让其取得可登陆shell的时候可以在/etc/passwd中把其shell设置成/sbin/nologin,或者用chsh命令。

[转载] login shell和non-login shell的更多相关文章

  1. linux shell except tcl login ssh Automatic interaction

    /*************************************************************************************** * linux she ...

  2. [转载]--类unix系统如何初始化shell

    Shell的配置文件 当我们在linux中打开一个shell的时候,系统会读取相关的配置文件来初始化shell(其他unix-like OS也一样).配置文件包括以下这些: 1. 全局配置(对所有用户 ...

  3. 交互式shell和非交互式shell、登录shell和非登录shell的区别

    交互式shell和非交互式shell.登录shell和非登录shell的区别.首先,这是两个不同的维度来划分的,一个是是否交互式,另一个是是否登录. 交互式shell和非交互式shell(intera ...

  4. Shell学习——Shell分类:登录shell和非登陆shell 交互shell和非交互shell

    1.从两个不同维度来划分,是否交互式,是否登录 2.交互式shell和非交互式shell 交互式模式:在终端上执行,shell等待你的输入,并且立即执行你提交的命令.这种模式被称作交互式是因为shel ...

  5. shell 编程 && bash 简介(shell 变量、shell操作环境、数据流重导向、管线命令、shell script)

    如何学习一门编程语言 数据类型 运算符 关键字 1 认识BASH 这个shell linux是操作系统核心,用户通过shell与核心进行沟通,达到我们想要的目的.硬件.核心.用户之间的关系: 原理:所 ...

  6. [shell]shell 中| && || () {} 用法以及shell的逻辑与或非

    转自:https://www.jianshu.com/p/617c1ee1e46e | 运算符 管道符号,是unix一个很强大的功能,符号为一条竖线:"|".用法: command ...

  7. shell脚本实现监控shell脚本的执行流程及变量的值

    这篇文章主要介绍了shell脚本实现监控shell脚本的执行流程及变量的值本文使用shell完成对执行过程中条件语句中的变量的变化的监控和整个程序的执行流程的观察功能,需要的朋友可以参考下 很多时候, ...

  8. shell脚本就是由Shell命令组成的执行文件,将一些命令整合到一个文件中,进行处理业务逻辑,脚本不用编译即可运行。它通过解释器解释运行,所以速度相对来说比较慢。

    shell脚本?在说什么是shell脚本之前,先说说什么是shell. shell是外壳的意思,就是操作系统的外壳.我们可以通过shell命令来操作和控制操作系统,比如Linux中的Shell命令就包 ...

  9. linux中的shell脚本编程---初识shell

    Shell是用户与Linux或Unix内核通信的工具,shell编程指的并不是编写这个工具,而是指利用现有的shell工具进行编程,写出来的程序是轻量级的脚本,我们叫做shell脚本. Shell的语 ...

  10. Ubuntu下把缺省的dash shell修改为bash shell

    Ubuntu下缺省使用的是shell是dash,而不是bash.从/bin/sh软连接的指向可以看出这点. dash shell 虽然比bash shell更轻便,但是它并不支持所有的语法,运行she ...

随机推荐

  1. redis中如何对 key 进行分类

    因为redis中的 hash是不支持设置过期时间的,如果我们要 设置过期时间,还要分类存储,可以用下面折中的方法 其实就是我们把 key 定义的有规律一些,通过在key的字符串内部 分类,上图只是因为 ...

  2. 复习java数据库操作的总结

    以前学习java数据库操作,学得那叫糊里糊涂,各种JDBC常用的类和接口根本是傻傻分不清啥是干嘛的.只是套着用用吧. 不过这次好歹清楚些了,呜呜,学习有阶段性,多次重复才有好效果,多么痛的领悟. 工程 ...

  3. c++模板类编译错误

    最近想写一个c++模板类,实现一个有向图.依据惯例,类在头文件中声明,类的实现写在源文件中.可是编译的时候出现了如下错误: undefined reference to 通过谷歌发现,这是一个很常见的 ...

  4. [LeetCode] 2. Add Two Numbers ☆☆

    You are given two non-empty linked lists representing two non-negative integers. The digits are stor ...

  5. NOIP2006 数列

    codevs 1141 数列 http://codevs.cn/problem/1141/ 2006年NOIP全国联赛普及组  时间限制: 1 s  空间限制: 128000 KB     题目描述  ...

  6. Flash Sort

    FlashSort依然类似桶排,主要改进了对要使用的桶的预测,或者说,减少了无用桶的数量从而节省了空间,例如 待排数字[ 6 2 4 1 5 9 100 ]桶排需要100个桶,而flash sort则 ...

  7. B. Complete the Word(Codeforces Round #372 (Div. 2)) 尺取大法

    B. Complete the Word time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  8. poj 2104 可持久化线段树

    我们先离散化,然后根据权值建立线段树,假设我们现在有一颗权值线段树,表示在区间1-n中每个数出现了几次,那么我们可以二分的求出来这个区间的k大值,类似sbt的select操作,那么因为点的权值插入是无 ...

  9. bzoj 1034 贪心

    首先如果我们想取得分最高的话,肯定尽量赢,实在赢不了的话就耗掉对方最高的,那么就有了贪心策略,先排序,我方最弱的马和敌方最弱的相比,高的话赢掉,否则耗掉敌方最高的马. 对于一场比赛,总分是一定的,所以 ...

  10. AGC025简要题解

    AGC025简要题解 B RGB Coloring 一道简单题,枚举即可. C Interval Game 考虑可以进行的操作只有两种,即左拉和右拉,连续进行两次相同的操作是没有用的. 左拉时肯定会选 ...