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 命令

时间: 2024-10-10 16:57:42

Bash shell用户环境的相关文章

Bash shell使用环境的终端的环境设置:stty

Bash shell使用环境的终端的环境设置:stty stty -a 将当前所有的stty参数列出来 intr:给正在运行的程序发送中断信号 quit:给正在运行的程序发送退出信号 erase:向前删除字符 kill:删除命令行上的文字 eof:文件结束,输入结束 start:重启暂停的输出 stop:停止当前的输出 susp:给正在运行的程序发送一个终端停止信号 rprnt:输入命令时提示使用过的历史命令 werase:删除命令行的最后一个字 ^可以理解为Ctrl键,所以intr的快捷键就是

bash shell中的环境变量

环境变量--bash shell使用环境变量来存储系统相关数据,并允许将数据存储在内存中. 环境变量分为:全局环境变量 本地环境变量 目录 全局环境变量 本地环境变量 设置全局环境变量 删除环境变量 PATH全局环境变量 设置系统环境变量的相关文件(登录.非登录.交互.非交互shell) 一.全局环境变量 在当前shell和子shell都可见 可以用printenv命令查看全局环境变量,大写表示是系统环境变量,小写表示是普通用户的环境变量 这是bash shell的一个标准约定,不是必须的,因此

Bash shell基本操作命令和环境变量命令(笔记)

一.Bash Shell 的基本操作命令 1.type:查看命令是否是bash shell 的内置命令 type cd 2.echo :变量的显示 echo $变量 echo name 3.unset :取消刚才设置的变量 unset name 4.env 或者set 命令查看环境变量 5.export 自定义变量转成环境变量 export 变量名 6.read 变量键盘读取 read [-pt] variable 7.declare/typeset 声明变量的类型 declare [-aixr

Linux 学习作业:认识bash shell

本次记录bash shell基础知识及bash变量功能,bash操作环境的配置内容,涉及解释什么是shell?.bash变量的定义和引用.怎样读入与设定bash的环境配置文件等. ? Shell的基本概念 1. Shell是什么? Linux系统由3个重要部分组成: w 内核(kernel) w Shell w 应用程序 内核真正在控制着计算机系统上的各种硬件与软件.功能包括进程管理.内存管理.设备管理.文件系统管理等等. 内核相当抽象,使用者不易和它直接通信,因此需要一个良好的接口,使得操作时

Linux中bash shell入门

▲初探shell Shell分为图形界面shell(如win中的explorer,linux中的kDE和GNOME)和命令行shell.Shell是一个命令解释器,又分为交互式和非交互式.也可分为登陆式shell(需输入用户名和密码)和非登陆式shell Linux中支持的shell在/etc/shells文件中 Linux使用的默认shell为bash(Bourne Again Shell) ? type [-at] name????显示name是外部命令还是bash内置命令 ????参数-t

鸟0哥的Linux私房菜——第十四章:Bash Shell

视频链接 土豆: B站: 本章目录: 1. Bash shell1.1 什么是 shell ? (我们通过shell与Kernel核心沟通,使Kernel操控硬件)1.2 系统的 shell 与 /etc/shells 功能 (cat /etc/shells一下,可以看到当前电脑的shell)1.3 Bash shell 的功能  (1.命令编修能力,就是记忆你写的命令按上下键切换.2.命令与档案补全功能,就是tab键补全.3.命令别名(alias)设定功能alias命令.下面还有一些介绍)1.

bash shell环境变量

$* 将所有命令行参数当做单个文本值包含 [email protected] 将所有命令行参数当做独立的文本值包含 $# 命令行参数数目 $? 最近使用的前端进程的退出状态码 $- 当前命令选项标记 $$ 当前shell的进程ID(PID) $! 最近执行的后台进程PID $0 来自命令行的命令名称 $_ shell的绝对路径名 BASH 用来调用shell的全文件名 BASH_ARGC 当前子函数中的参数数目 BASH_ARGV 含有所有指定命令行参数的数组 BASH_COMMAND 当前正在

linux基础——bash shell环境配置

想要用好bash shell,首先得搞清楚bash shell环境的配置,只有配置好了,我们用起来才会得心应手,要想配置好,必须了解清楚bash配置文件的类型,再根据实际需求做一些相应的添加或修改就可以了.一.bash的配置文件(一)按生效范围划分:全局配置.个人配置 1.全局配置:  /etc/profile  /etc/profile.d/*.sh  /etc/bashrc 2.个人配置:  ~/.bash_profile  ~/.bashrc (二)按功能划分:profiile类.bash

《学习bash》笔记--定制用户环境

1. .bash_profile..bash_logout和.bashrc文件 当用户和退出一个新的shell时,文件.bash_profile..bash_logout和.bashrc文件被bash所读取.在用户每次登陆到系统时, .bash_profile文件被读取,可以对.bash_profile文件进行编辑,但是知道退出并在此登录后,该文件才会被重新读取,你编辑 的新内容才会生效,或者使用source命令: source ./bash_profile bash允许有.bash_profi