profile,bashrc,.bash_profile,.bash_login,.profile,.bashrc,.bash_logout浅析 Part 2
profile,bashrc,.bash_profile,.bash_login,.profile,.bashrc,.bash_logout浅析 Part 2
by:授客 QQ:1033553122
--------------------接Part 1-------------------
B.
当bash以interactive
shell方式启动时:
如果存在~/.bashrc,bash从~/.bashrc中读取命令并执行
注意:
1.通过--rcfile
file选项可强制bash从文件file中读取命令并执行,而不是从~/.bashrc中读取。
2.可通过使用--norc可禁止bash读取~/.bashrc中的内容
C.
当从login
shell中注销登录时:
如果存在~/.bash_logout,bash会从~/.bash_logout中读取命令并执行
注意:interactive
shell中执行退出是无法直接退出的,必须先退出到login
shell
例:采用interactive
shell中执行exit退出登录(因exit只会退到上次登录界面(如有的话))
[root@localhost ~]# echo $0
-bash #login shell
[root@localhost ~]# bash
[root@localhost ~]# echo $0
bash
#interactive shell
[root@localhost ~]# exit
exit
[root@localhost ~]# exit #需要再次执行该命令才可以退出
[root@localhost ~]# who
root
pts/0
2014-09-08 15:27 (172.25.75.2)
[root@localhost ~]# su -l
[root@localhost ~]# exit
logout
[root@localhost ~]# logout #需要再次执行才退出
D.
sh script_name.sh一般情况下,不会执行上面的文件
E.
被远程shell守护进程运行会去读~/.bashrc中的命令
bash会探测自己是不是被远程shell守护程序运行(通常是rshd)。如果是,它会读取并执行~/.bashrc中的命令。但是rshd一般不会用rc相关参数调用shell,也不会允许指定这些参数
5、
实践检验理论
这里我们通过小实验来验证上述的结论是否正确
步骤1、备份~用户主目录下的文件
[test@localhost ~]$ pwd
/home/test
[test@localhost ~]$ cp .bash_profile bak.bash_profile
[test@localhost ~]$ cp .bashrc bak.bashrc
[test@localhost ~]$ cp .bash_logout bak.bash_logout
步骤2、新建.profile,.bash_login文件
[test@localhost ~]$ touch .bash_login
[test@localhost ~]$ touch .profile
步骤3、修改上述文件的内容
修改.bash_profile文件内容如下
echo "shouke test from ~/.bash_profile"
修改.bash_login文件内容如下
echo "shouke test from ~/.bash_login"
修改.profile文件内容如下
echo "shouke test from ~/.profile"
修改.bashrc文件内容如下
echo "shouke test from ~/.bashrc"
修改.bash_logout文件内容如下
echo "shouke test from ~/.bash_logout"
步骤4、修改/etc/profile和/etc/bashrc文件的内容
修改/etc/profile,在文件最末尾添加如下内容
echo 'shouke test from /etc/profile'
修改/etc/bashrc,在文件最末尾添加如下内容
echo 'shouke test from /etc/bashrc'
步骤5、运行测试
测试1.
字符界面下,在终端tty1~tty6中任意一个tty界面下,输入帐号,密码登录


测试2.
通过xshell工具远程连接系统


测试3.
字符界面下,运行命令su
-、su
–l、su
–login
[root@localhost ~]# pwd
/root
#备份原来的配置文件并新建测试用配置文件
[root@localhost ~]# mv .bash_profile bak.bash_profile
[root@localhost ~]# mv .bashrc bak.bashrc
[root@localhost ~]# mv .bash_logout bak.bash_logout
[root@localhost ~]# cp /home/test/.bash_profile
.bash_profile
[root@localhost ~]# cp /home/test/.bashrc .bashrc
[root@localhost ~]# cp /home/test/.bash_logout
.bash_logout
[root@localhost ~]# cp /home/test/.profile .profile
[test@localhost ~]$ su -
Password:
shouke test from /etc/profile
shouke test from ~/.bash_profile
[test@localhost ~]$ su -l
shouke test from /etc/profile
shouke test from ~/.bash_profile
[test@localhost ~]$ su --login
Password:
shouke test from /etc/profile
shouke test from ~/.bash_profile
测试4.
可视桌面下,通过新建一个终端(Applications->System
Tools->Terminal)


测试5.
已登录的情况下,在字符界面下,运行命令bash
-bash-4.1# bash
shouke test from ~/.bashrc
bash-4.1#
测试6.
root用户身份登录,在字符界面下,运行命令su、su
username
-bash-4.1# su
shouke test from ~/.bashrc
bash-4.1# su test
shouke test from ~/.bashrc
普通用户身份登录,在字符界面下,运行命令su
-bash-4.1$ su
Password:
shouke test from ~/.bashrc
bash-4.1# echo $0
bash
测试6.
以root身份登录,登录后不做其它操作,直接注销登录
-bash-4.1# exit
logout
shouke test from ~/.bash_logout
以root身份登录,登录后运行bash命令,然后输入exit命令
-bash-4.1# bash
shouke test from ~/.bashrc
bash-4.1# exit
exit
以普通身份登录,登录后运行su
-命令,然后输入exit命令
-bash-4.1$ su -
Password:
shouke test from /etc/profile
shouke test from ~/.bash_profile
-bash-4.1# exit
logout
shouke test from ~/.bash_logout
这里验证了上文说的,仅在login
shell中,执行注销登录,才会读取~/.bash_logout
测试7.
新建test.sh文件,内容如下
#!/bin/bash
echo "shouke test from ~/test.sh"
login shell中
[test@localhost ~]$ sh test.sh
shouke test from ~/test.sh
interactive shell中
[test@localhost ~]$ bash
shouke test from ~/.bashrc
bash-4.1$ sh test.sh
shouke test from ~/test.sh
测试8.
以--rcfile参数跟随的方式启动bash
interactive shell
[test@localhost ~]$ bash --rcfile .bash_profile
shouke test from ~/.bash_profile
测试9.
以--norc参数跟随的方式启动bash
[root@localhost ~]# bash --norc
bash-4.1#
测试10.
去掉test用户的~/.bash_profile后,以test用户身份登录
[test@localhost ~]$ mv .bash_profile
bak.last.bash_profile
登录结果:
Last login: Mon Sep 8 15:48:12 2014 from
172.25.75.2
shouke test from /etc/profile
shouke test from ~/.bash_login
测试11.
去掉test用户的~/.bash_login后,以test用户身份登录
[test@localhost ~]$ mv .bash_login bak.last.bash_login
登录结果:
Last login: Mon Sep 8 16:16:12 2014 from
172.25.75.2
shouke test from /etc/profile
shouke test from ~/.profile
测试12.
去掉test用户的~/.profile后,以test用户身份登录
[test@localhost ~]$ mv .profile bak.last.profile
登录结果:
Last login: Mon Sep 8 16:16:45 2014 from
172.25.75.2
shouke test from /etc/profile
说明:不同终端登录,有的还没退出,所以前缀符号不一样,有的是[test@localhost
~]$这种的,有的是-bash-4.1$这种的,但是不影响测试
profile,bashrc,.bash_profile,.bash_login,.profile,.bashrc,.bash_logout浅析 Part 2的更多相关文章
- Linux profile1,bashrc,.bash_profile,.bash_login,.profile,.bashrc,.bash_logout浅析 Part1
profile,bashrc,.bash_profile,.bash_login,.profile,.bashrc,.bash_logout浅析 Part 1 by:授客 QQ:103355312 ...
- profile bashrc bash_profile之间的区别和联系
profile bashrc bash_profile之间的区别和联系 博客分类: Linux 执行顺序为:/etc/profile -> (~/.bash_profile | ~/.bas ...
- profile bashrc bash_profile 之间的区别和联系
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置. /etc/bashrc:为每一个 ...
- linux下系统启动时,几个配置文件 /etc/profile、~/.bash_profile 等几个文件的执行过程,先后顺序
1. 在登录Linux时要执行文件的过程如下: 在刚登录Linux时, 首先启动 /etc/profile 文件, 然后再启动用户目录下的 ~/.bash_profile. ~/.bash_login ...
- 【转】Linux 之 /etc/profile、~/.bash_profile 等几个文件的执行过程
原文网址:http://blog.csdn.net/ithomer/article/details/6322892 在登录Linux时要执行文件的过程如下:在刚登录Linux时,首先启动 /etc/p ...
- Linux 中/etc/profile、~/.bash_profile 等几个环境配置文件的执行过程
环境变量是和Shell紧密相关的,用户登录系统后就启动了一个Shell.对于Linux来说一般是bash,但也可以重新设定或切换到其它的 Shell.对于UNIX,可能是CShelll.环境变量是通过 ...
- linux下 /etc/profile、~/.bash_profile ~/.profile的执行过程
关于登录linux时,/etc/profile.~/.bash_profile等几个文件的执行过程. 在登录Linux时要执行文件的过程如下: 在刚登录Linux时,首先启动 /etc/profile ...
- [转] linux下 /etc/profile、~/.bash_profile ~/.profile的执行过程
分类: linux 2015-03-13 16:24 1572人阅读 评论(0) 收藏 举报linuxprofile关于登录linux时,/etc/profile.~/.bash_profile等几个 ...
- /etc/profile、~/.bash_profile等几个文件的执行过程
/etc/profile.~/.bash_profile等几个文件的执行过程 摘自:http://blog.chinaunix.net/uid-14735472-id-3190130.html 分类 ...
随机推荐
- GCC C语言 DLL范例,含源码
作者:小白救星 编译:gcc -c -DBUILDING_HZ_DLL1 hzdll1.c gcc -shared -o hzdll1.dll hzdll1.o -Wl,--kil ...
- freerdp服务器共享屏幕,skype lync终端显示黑屏的原因分析
问题描述:freerdp支持远程桌面共享协议rdp,使用freerdp与skype终端进行远程桌面共享时.发送1080p 视频数据时 skype终端显示黑屏 经过分析,发现rdp协商参数大于一定值时, ...
- Python Mock的入门学习
一.Mock是什么 Mock这个词在英语中有模拟的这个意思,因此我们可以猜测出这个库的主要功能是模拟一些东西.准确的说,Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象 ...
- CentOS 6.7 下 PostgreSQL 9.5 的安装与配置
#yum方式安装(不同的系统版本对应的版本也不同) yum install postgresql-server #安装指定版本 yum install https://download.postgre ...
- Silverlight中使用MVVM(4)—演练
本来打算用MVVM实现CRUD操作的,这方面例子网上资源还挺多的,毕竟CRUD算是基本功了,因为最近已经开始学习Cailburn框架了,感觉时间 挺紧的,这篇就实现其中的更新操作吧. ...
- Vue笔记:webpack项目vue启动流程
VUE启动流程 1. package.json 在执行npm run dev的时候,会在当前目录中寻找 package.json 文件, 有点类似 Maven 的 pom.xml 文件,包含项目的名称 ...
- Nginx限制访问次数和并发数
Nginx限制访问速率和最大并发连接数模块--limit (防止DDOS攻击) http: ##zone=one或allips 表示设置名为"one"或"allips&q ...
- JavaServer Faces生命周期概述
JavaServer Faces应用程序的生命周期在客户端为页面发出HTTP请求时开始,并在服务器响应该页面并转换为HTML时结束. 生命周期可以分为两个主要阶段:执行和渲染.执行阶段进一步分为子阶段 ...
- ActiveMQ——activemq的报错见解javax.jms.JMSException: Software caused connection abort: recv failed
activeMQ出现javax.jms.JMSException: Software caused connection abort: recv failed的问题解决 一直找不到原因,原来是在本地的 ...
- ELK批量删除索引 及 相关操作命令 - 运维小结
线上部署了ELK+Redis日志分析平台环境, 随着各类日志数据源源不断的收集, 发现过了一段时间之后, ELK查看会原来越慢, 重启elasticsearch服务器节点之前同步时间也会很长, 这是 ...