ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux Shell文件环境配置和文件加载顺序

2021-01-17 11:30:22  阅读:217  来源: 互联网

标签:profile 文件 shell 读取 etc Shell Linux bash


Bash

对于程序员来说,bash都不陌生;官方定义的bash是Linux Shell的一种,作用于用户态,为其提供操作内核态指令的一些接口。

目的

写这篇文章的主要目的是:在Linux或者类Linux系统搭建环境的时候,需要配置环境变量,而环境变量主要是通过几个bash or profile 文件配置的,在写这篇文章之前,我几乎是按照blog上的教程,里面写着使用哪个配置文件,我就选择哪个,但是这样带来的影响就是:维护十分困难,程序员也不知所以然,故:在这篇文章中进行一下总结。

几个常见的bash文件以及描述

这也是我们常用的几个shell文件

etc/profile

The systemwide initialization file, executed for login shells



~/.bash_profile

The personal initialization file, executed for login shells



~/.bashrc

The individual per-interactive-shell startup file

问题一:profile和rc有什么区别

  • 使用场景

两者使用的场景不同,shell的运行涉及“交互”和“登陆”两种场景,从原理上讲,“交互式登陆shell”启动时会加载“profile”系列的startup文件,而“交互式非登陆shell”启动时会加载“rc”系列的startup文件。

  • 文件内容

一般来说,profile类文件的内容用来定义环境变量、运行命令、或者脚本。

bashrc类文件用来定义本地变量、函数、命令别名。

问题二:几个文件的加载顺序

对于交互式登陆shell的场景,CentOS规定了StartUP文件的启动方式:

登陆过程:

  1. 读取并执行/etc/profile文件

  2. 读取并执行~/.bash_profile文件

    1. 若文件不存在,则读取并执行~/.bash_login文件
    2. 若文件不存在,则读取并执行~/.profile文件

登出过程:

  1. 读取并执行~/.bash_logout文件

  2. 读取并执行/etc/bash.bash_logout文件

对于交互式非登陆的shell场景,CentOS规定了StartUP文件的启动方式:

  1. 读取并执行/etc/profile文件

  2. 读取并执行~/.bash_profile文件

    1. 若文件不存在,则读取并执行~/.bash_login文件
    2. 若文件不存在,则读取并执行~/.profile文件

两者的区别在于:“交互式登陆”比“交互式非登陆”多了一个登出的过程。

问题三:.rc文件的作用

When an interactive shell that is not a login shell is started, bash reads and executes commands from ~/.bashrc, if that file exists. This may be inhibited by using the --norc option. The --rcfile file option will force bash to read and execute commands from file instead of ~/.bashrc.

—— 《The art of Unix programming 》Unix编程艺术

  • rc文件应该是:run command的缩写,在shell启动的时候被加载执行,我理解应该是用户可以自定义的一些启动命令,然后放在这里面,Linux shell启动的时候会自动加载这些rc文件。

Show me the code.

etc/profile:这是第一个系统自动必须加载的文件。

遍历/etc/profile.d这个目录下所有.sh文件,然后source一下,使其生效。
在这里插入图片描述

~/.bash_profile:环境变量的设置是在这个文件夹下。
在这里插入图片描述

总结:知道startup文件何时被执行并不是关键,关键是要理解自己的情况应该去修改哪个startup文件。

  • bashrc类的文件不一定存在,这个应该是需要用户自行定义的。

  • 如果想对bash的功能进行设置或者是定义一些别名,推荐修改~/.bashrc文件,这样无论你以何种方式打开shell,你的配置都会生效。而如果你要更改一些环境变量,推荐你修改/.bash_profile文件,因为考虑到shell的继承特性,这些更改确实只应该被执行一次(而不是多次)。针对所有用户进行全局设置,推荐你在/etc/profile.d目录下添加以.sh结尾的文件,而不是去修改全局startup文件。

标签:profile,文件,shell,读取,etc,Shell,Linux,bash
来源: https://blog.csdn.net/gky_1111/article/details/112733680

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有