之前安装 Linux的一些软件时,总要修改Linux的配置文件。当时也是一知半解。而且,网上有些安装教程,会说,修改配置文件后要重启Linux。但事实上是不需要重启的。

Linux安装时可能要修改的配置文件:/etc/profile、/etc/bashrc(ubuntu没有这个文件,对应地,其有/etc/bash.bashrc文件。我用的是ubuntu系统,所以下面将一律使用/etc/bash.bashrc来叙述)、~/.bash_profile、~/.bash_login、~/.profile、~/.bashrc。

我的ubuntu系统(版本为10.04)默认情况下,只有/etc/profile、/etc/bash.bahsrc、~/.profile、~/.bashrc这四个文件。其他文件可以创建。

现在来简单说一下这些配置文件。

1.这些文件的作用

这些文件的作用有很多,比如环境变量的设定、定制符合自己风格的shell、还可以设置缩写功能,那个ll命令是 ls –alF命令的缩写。

相信大家最关心这些文件在安装软件时候的作用。为什么要配置这些文件?配置后,要不要重启Linux才能使得生效。

要弄清这些问题。首先要知道打开一个终端或者打开一个新shell时(注意,两者是不同的。比如在终端里输入bash,会进入一个新shell。此时并没有打开新终端),会读取到哪些文件。

之所以是要配置这些文件,是因为这些软件要在环境变量中添加属于自己的信息,或者新建一个属于自己的环境变量(如安装JDK时要新建一个JAVA_HOME环境变量)。系统会根据环境变量里的值,找到软件的一些文件的路径。

2.这些文件的访问顺序

2.1测试

如果对测试过程没兴趣的,直接跳过这一步,到结论部分看结论。

分别在这个四个文件的最后,加入一个新的环境变量TESTBASH。每一个文件都为这个环境变量加入不同的值。如下图所示:

/etc/profile  

/etc/bash.bashrc 

~/.profile 

~/.bashrc 

都保存后,在原来这个终端输入$export(这个命令可以用来导入和查看环境变量),并没有在输出中看到这个TESTBASH。现在输入$bash ,打开一个新的shell。再输入$export 可以看到输出已经有这个环境变量了(如果在一大串输出中没有找到这个TESTBASH,那么就用命令$echo $TESTBASH)。并且,该环境变量的值为: /etc/bash.bashrc:/home/luotuo/.bashrc。

现在打开一个新的终端。输入$export 可以看到其结果和输入$bash命令,再输入$export 一样。只有其中两项。

现在输入$su root 切换到root用户。再输入$export 其结果是在原来的基础上加上了 /home/luotuo/.bashrc:/etc/bash.bashrc。

输入$exit 退出root。然后再输入$su –l root 切换到root用户,此时输入$export 看到其结果仅仅为 /etc/bash.bashrc:/etc/profile。

(这两种方式是不同的。分别叫做nonlogin shell和login shell。另外,在终端输入bash打开一个新的shell也是non login )

        现在是时候重启Linux了。

重启之后,在终端输入 $export ,其结果为:   

已经有/etc/profile和/etc/bash.bashrc了。

此时,输入$bash 打开一个新的shell 。再输入$export .可以看到:

是在原来的基础上加入了 /etc/bash.bashrc:/home/luotuo/.bashrc

输入$exit 退出这个shell(注意,此时这个终端是没有被关闭了。因为在这个终端打开了两个shell。一个exit只能退出一个).

此时,输入$su root 切换到root用户。然后再输入$export 。可以看到输出为:

在原来的基础上加入了/etc/bash.bashrc。

现在输入$pwd ,可以看到其路径为:

现在输入$exit 退出这个root。然后输入$su –l root 切换到root用户。此时再输入$export 其结果为:

现在输入$pwd,可以看到其路径为:

两者有不同的路径。后者是转到了root用户的用户目录下,而前者还是在之前所在的目录。

2.2、结论

从测试过程可以看到。打开一个新的shell(包括打开一个新终端和在终端上输入bash),都会重新读取/etc/bash.bashrc 和 ~/.bashrc文件里面的内容。

而Linux启动登录时会读取/etc/profile和~/.profile文件的内容。所以,在测试的时候,重启登录时会读取/etc/profile和~/.profile文件的内容(此时并不读取/etc/bash.bashrc和~/.bashrc文件)。然后再打开终端时,会去读取/etc/bash.bashrc和 ~/.bashrc文件。这就出现了那种结果。

使用login和non login术语来说,就是使用login 方式是会读取/etc/profile 和 ~/.profile文件。使用non login方式的话,会读取/etc/bash.bashrc 和 ~/.bashrc文件的内容。

也就是说/etc/profile 和 ~/.profile文件是在login时才会读取。所以,在不使用su命令的情况下,只有在Linux启动登录的时候才会被读取(这也就导致了有些软件安装后,要重启才能生效)。

因为我的ubuntu没有~/.bash_profile和 ~/.bash_login文件。如果有这两个文件的话,那么用login方式登录,将只读取 ~/.bash_profile 、~/.bash_login、~/.profile三个中的一个。其读取顺序在上面的排序顺序。

说了这么多。到讲安装软件时的修改这些文件的配置信息 了。安装软件修改这个文件,一般是为了在这个文件中添加用于那些软件的环境变量。在这些配置文件中都可以添加环境变量。但由于,有些文件会被读取,有些文件却不会被读取(这个上面已经说了),所以在不同文件下的配置信息的有效性或者说生效日期就有所不同了。这也导致了在这些文件添加配置信息,要不要重启的问题。

如果是在/etc/bash.bashrc 和 ~/.bashrc文件中添加配置信息,那么打开一个新的shell,就生效了,可以用了(因为打开新的shell会读取这个两个文件)。也可以输入$source /etc/bash.bashrc或者$./etc/bash.bashrc命令( .和/之间还有一个空格)来使得在本shell中,也可以生效使用。

如果是在/etc/profile 和 ~/.profile 文件中添加配置信息。那么就只能重启了。因为这个两个文件只会在login 下才会读取。当然,也是可以使用$source /etc/profile 命令的。但也只能在使用过这个命令的shell才能使用。

3.总结

如果为了一完成配置信息就能使用,那么就不用在/etc/profile 和 ~/.profile文件中添加关于软件的配置信息。而是在/etc/bash.bashrc 或者 ~/.bashrc 中添加,这样就能马上使用了。

详解/etc/profile、/etc/bash.bahsrc、~/.profile、~/.bashrc的用途相关推荐

  1. mysql show profile详解_SQL 性能分析利器 show profile

    本文首发个人公众号<andyqian>, 期待你的关注- 前言 在之前的文章中,我们提到过一些慢SQL优化的步骤.其中就包括:使用 explain 关键字来查看执行计划,是否命中索引. 通 ...

  2. k8s的自定义资源代码生成详解

    为什么下这篇文章呢,在代码生成这一块跌了两次跟头,说白了只知道照抄,并不知道里面到底是干什么的,要做到知其然并知其所以然,也是为以后在自动生成代码的时候做一个参考. 生成的项目目录结构如下 . ├── ...

  3. HAProxy详解(二):HAProxy基础配置与应用实例

    一.HAProxy基础配置与应用实例: 1.快速安装HAProxy集群软件: HAProxy的官网: https://www.haproxy.org/#down下载HAProxy的源码包. 安装: [ ...

  4. ElasticSearch最全详细使用教程:入门、索引管理、映射详解、索引别名、分词器、文档管理、路由、搜索详解...

    墨墨导读:之前我们分享了ElasticSearch最全详细使用教程:入门.索引管理.映射详解,本文详细介绍ElasticSearch的索引别名.分词器.文档管理.路由.搜索详解. 一.索引别名 1. ...

  5. uml建模工具 支持php,【UML 建模】在线UML建模工具 ProcessOn 使用详解

    总结: -- 推荐理由 : 最近从 Windows 操作系统 转到 MAC 上, 正在看设计模式 和 重构, 找不到好用的 UML 工具, 因此在网上找了一款可以在线使用的 UML 工具, 用起来发现 ...

  6. ubuntu下环境变量详解 bashrc, profile, environment

    ubuntu下环境变量详解 bashrc, profile, environment 本博客转载自:http://blog.csdn.net/hipkai/article/details/415486 ...

  7. 【IoT】Android/TI 蓝牙 profile 详解

    1.TI BLE profile详解 BLE 协议栈的 GATT 层是设计用于应用程序在两个连接设备之间的数据通信. 从 GATT 层的角度看,当设备连接后,将充当一下两种角色中的一个: GATT C ...

  8. @Profile注解详解

    @Profile注解详解 @Profile: Spring为我们提供的可以根据当前环境,动态的激活和切换一系列组件的功能: 开发环境develop.测试环境test.生产环境master 数据源:(/ ...

  9. Spring注解——@Profile详解

    目录 一.Spring中的Profile 二.为什么要使用Profile 三.配置Profile示例 四.激活Profile的方式 一.Spring中的Profile Spring中的Profile功 ...

最新文章

  1. 如何理解HTTP协议是无状态的
  2. RGB图像重建非刚性物体三维形状(CVPR)
  3. 第一阶段:前端开发_Mysql——多表查询
  4. #27 回文数字 Palindrome Detector
  5. 1.深度好文:带缓冲I/O 和不带缓冲I/O的区别与联系
  6. 高并发来袭,面向Google编程的程序员要小心了!
  7. %3cphp和%3c php_phpcmsv9后台登录绕过
  8. Proteus ISIS仿真软件中英文元件名称对照
  9. Windows 下安装 MySQL 及使用可视化工具执行 SQL 脚本过程记录
  10. 运行Arcgis和SWAT模型遇到Error Number 91和Error Number -2147467259报错怎么办?
  11. python图书库存管理系统_基于Odoo的物流库存管理系统的设计(Python)
  12. 计算机系和清华大学,清华大学交叉信息研究院和计算机系区别
  13. 斯坦福大学公开课机器学习课程(Andrew Ng)六朴素贝叶斯算法
  14. 前端面试总结之长沙五
  15. ERROR: pip‘s dependency resolver does not currently take into account all the packages that are inst
  16. 如何使用腾讯云轻量服务器以及WooCommerce 应用镜像搭建跨境电商独立站!
  17. ThreadPoolExecutor(五)——线程池关闭相关操作
  18. 二维码插件qrcode生成二维码信息
  19. python实现克莱姆法则
  20. arcgis api 4.13 —— Layer详细介绍

热门文章

  1. java包和访问权限_Java包和访问权限—1
  2. openssl1.1.0 支持php,openssl升级到1.0.21以支持nginx http2 ssl
  3. Python-OpenCV 处理图像(六):对象识别
  4. error C2872: “IDocument”: 不明确的符号
  5. Activiti工作流引擎使用详解(一)
  6. Vue.js Prop
  7. Log4j详细介绍(七)----日志格式化器Layout
  8. isInfoEnabled究竟多有用?
  9. 【LaTeX】E喵的LaTeX新手入门教程(5)参考文献、文档组织
  10. 最大熵模型(Maximum Entropy Model)文献阅读指南