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的更多相关文章

  1. 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 ...

  2. profile bashrc bash_profile之间的区别和联系

    profile bashrc bash_profile之间的区别和联系 博客分类: Linux   执行顺序为:/etc/profile -> (~/.bash_profile | ~/.bas ...

  3. profile bashrc bash_profile 之间的区别和联系

    /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置. /etc/bashrc:为每一个 ...

  4. linux下系统启动时,几个配置文件 /etc/profile、~/.bash_profile 等几个文件的执行过程,先后顺序

    1. 在登录Linux时要执行文件的过程如下: 在刚登录Linux时, 首先启动 /etc/profile 文件, 然后再启动用户目录下的 ~/.bash_profile. ~/.bash_login ...

  5. 【转】Linux 之 /etc/profile、~/.bash_profile 等几个文件的执行过程

    原文网址:http://blog.csdn.net/ithomer/article/details/6322892 在登录Linux时要执行文件的过程如下:在刚登录Linux时,首先启动 /etc/p ...

  6. Linux 中/etc/profile、~/.bash_profile 等几个环境配置文件的执行过程

    环境变量是和Shell紧密相关的,用户登录系统后就启动了一个Shell.对于Linux来说一般是bash,但也可以重新设定或切换到其它的 Shell.对于UNIX,可能是CShelll.环境变量是通过 ...

  7. linux下 /etc/profile、~/.bash_profile ~/.profile的执行过程

    关于登录linux时,/etc/profile.~/.bash_profile等几个文件的执行过程. 在登录Linux时要执行文件的过程如下: 在刚登录Linux时,首先启动 /etc/profile ...

  8. [转] linux下 /etc/profile、~/.bash_profile ~/.profile的执行过程

    分类: linux 2015-03-13 16:24 1572人阅读 评论(0) 收藏 举报linuxprofile关于登录linux时,/etc/profile.~/.bash_profile等几个 ...

  9. /etc/profile、~/.bash_profile等几个文件的执行过程

    /etc/profile.~/.bash_profile等几个文件的执行过程  摘自:http://blog.chinaunix.net/uid-14735472-id-3190130.html 分类 ...

随机推荐

  1. redhat_6.5下载地址

    redhat官方下载(需要注册帐号+订阅/申请试用方可下载) https://access.redhat.com/downloads/ 网络资源:附RHEL 6.5安装文件MD5及SHA-256:一. ...

  2. vue2打包时内存溢出解决方案

    vue项目完成时,若项目过大,就会出现内存溢出的问题,导致vue打包不成功 错误截图 解决方案 在依赖package.json中修改build为 "build":"nod ...

  3. 在Ubuntu Server上安装Postgresql

    首先更新一下源: sudo apt-get update 如果你不知道Postgresql具体的包的名称,可以使用一下语句进行查找: apt-cache search ^Postgresql 使用上述 ...

  4. [转]网页实时聊天之js和jQuery实现ajax长轮询 PHP

    网页实时聊天之js和jQuery实现ajax长轮询 众所周知,HTTP协议是无状态的,所以一次的请求都是一个单独的事件,和前后都没有联系.所以我们在解决网页实时聊天时就遇到一个问题,如何保证与服务器的 ...

  5. 读书笔记(03) - 性能 - JavaScript高级程序设计

    作用域链查找 作用域链的查找是逐层向上查找.查找的层次越多,速度越慢.随着硬件性能的提升和浏览器引擎的优化,这个慢我们基本可以忽略. 除了层级查找损耗的问题,变量的修改应只在局部环境进行,尽量避免在局 ...

  6. wordpress添加文章阅读数量

    将下面代码添加到functions.php //取得文章的阅读次数 function post_views($before = '点击 ', $after = ' 次', $echo = 1) { g ...

  7. SQL 语句语法简介(一)

    语句分类 SQL 命令一般分为三类:DQL.DML.DDL. 一.DDL语句. 1.1建表语句 CREATE TABLE table_name( col01_name data_type, col02 ...

  8. TDSQL“相似查询工具MSQL+”入选VLDB论文

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云数据库 TencentDB发表于云+社区专栏 作者介绍:王晓宇,腾讯数据库TDSQL团队成员,目前参与TDSQL数据库内核研发工 ...

  9. 压测:celey backend为rabbitmq pk redis

    使用celery的backend异步获取结果,本文使用rabbitmq 和 redis分别作为backend,代码对比如下 from celery import Celery, platforms i ...

  10. 微信公众号开发笔记1-获取Access Token

    获取你的Access Token a)可以采用网址的形式: 用appid和appsecert获得access token,接口为https://api.weixin.qq.com/cgi-bin/to ...