Bash shell用户环境

  • 介绍

      了解Linux的启动顺序,也有助于本内容的理解,加载用户环境是Linux启动的最后一步。不同的shell 会使用不同的配置文件: bash (.profile), ksh (.profile), csh (.login)

    bash shell 被设计成兼容sh, ksh,  它会在用户主目录依次检查.bash_profile,.bash_login,.profile是否存在,并加载找到的第一个文件。无论文件名字如何,加载用户环境的原理一样,只设定一个配置文件即可。但若有兼容bash,ksh的需要,只配置.profile即可。若在用户登录后,修改了bash的配置文件,用户可以手动加载文件生效,如 .  /etc/profile    .  ~/.bash_profile

    /etc/skel目录中有.bash_profile  .bashrc ,当建立新用户时, /etc/skel中的所有文件会被复制一份放在用户的家目录中,用来设定用户环境。



  • 概念

    shell 环境脚本:管理bash 环境的最佳方案,就是通过/etc/profile.d/*.sh , /etc/profile.d/ *.sh 文件是用来存储应用软件的profile, 用来配置相应软件的环境变量。而不是直接修改/etc/profile.


    子shell : 为什么让脚本或命令在子shell 中运行?因为启动子shell会创建一个全新的独立的执行环境,在子shell 中运行所发生的改变不会影响到父shell 环境

    加载文件:与编程上使用include同样的原理,即在定义的位置将指定的文件插入当前文件。bash shell 允许用户将多个命令集中在一个文件中,然后执行这些命令,与直接在提示符下键入执行效果相同,这个过程称为加载文件。加载文件的命令执行在当前shell 中,并可能修改当前shell 环境,获得文件的命令是shell 内置命令source (. source 命令的同义词)

    登录shell :以bash --login 方式启动的shell,登录到一台机器上看到的第一个shell ,登录到虚拟控制台,远程登录,启动X的看不见的shell等。用户登录时激活的shell, /etc/passwd 中设定

    非登录shell : bash方式启动的shell 除登录shell以外均是非登录shell, X图形下开启的新终端,子shell, ,括号命令分组,执行shell 脚本时创建的新的非登录shell.用户登录后手动执行的shell 程序


    交互式shell : 手动启动的子shell ,新开的X终端等

    非交互式shell :以shell脚本形式启动,命令替换而调用的shell等,为避免潜在的启动脚本副作用,非交互式shell不在启动时加载启动脚本






  • 不同方式使用shell时环境的加载


    交互式登录shell

    登录分为local login  和 remote login,bash在用户登录时从四个文件中读取环境设定:

    登录shell先加载/etc/profile(全局设定,此文件也可在执行时获得其它文件) , 然后在用户主目录按.bash_profile .bash_login  .profile的优先次序执行其中一个文件,登录shell logout时,若主目录中有.bash_logout,则执行.

    加载顺序:

    /etc/profile > /etc/profile.d/*.sh>~/.bash_profile (.bash_login, .profile) > ~/.bashrc > /etc/bashrc



全局设置文件:

     ① /etc/profile

     /etc/bashrc

当前用户设置文件: 

     ~/.bash_profile独立用户的配置文件

     ~/.bashrc   #如使永久生效的别名命令,即可将别名配置写入此文件,用户登录shell时,执行其中的命令(用户用于自定义shell)

 

 

 

交互式非login shell(执行新shell)

.bashrc使用户登录时的环境变量设置与子shell的环境变量设置相分离,有独立的执行环境。

加载~/.bashrc, 而此文件默认仅加载/etc/bashrc~/.bashrc>/etc/bashrc>/etc/profile.d/*.sh

 

非交互式非登录shell

先检查变量BASH_ENV, 若有定义 ,则先执行其所定义的启动文件的内容,然后再执行脚本。默认不加载任何启动文

 

 

以sh 文件名调用bash

仿照旧版的sh,尽量兼容于POSIX标准(bash特有功能将丧失)

loginshell 调用/bin/sh,bash 会读取/etc/profile和~/.profile

交互式shell:执行/bin/sh, fork 一个子shell ,检查并执行ENV变量中定义的内容.

执行shell script : 第一行为#!/bin/sh 里, bash 不执行任何配置文件.

 

以bash --posix 方式执行

bash 使用与POSIX标准兼容功能,检查并执行ENV变量中定义的内容.

 

执行 bash -r 或以rbash的名称调用

受限模式,bash功能受限,目的是让用户拥有少数功能,出于安全考虑. 此模式会执行~/.bashrc

 

 

 

 

相关档

/etc/profile:所有用户登录都会执行,设定的变量(全局)的可以作用于所有用户,由root统一维护

/etc/bashrc:针对所有交互式shell

/etc/skel: 目录中含有针对所有用户的初始化文件

用户可以自定义的一些文件:

~/.bash_profile: 当前用户环境配置。每个用户都可使用该文件输入专用于自己使用的shell环境,当用户登录时,该文件仅仅执行一次!是以交互式login文件运行bash

~/.bashrc :该文件包含专用于设定当前用户shell环境,当登录以及每次打开新的shell时,该文件被读取,是交互式non-login方式运行bash的。

~/.bash_logout用户登录时执行,默认仅执行clear 命令

 

本文出自 “Adelphos” 博客,请务必保留此出处http://adelphos.blog.51cto.com/2363901/1570938

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。