linux中shell重要吗,Linux中的shell-程序员宅基地

技术标签: linux中shell重要吗  

登录shell_非登录shell

//

.bash_profile .bashrc profile

文件的作用的执行顺序

http://blog.csdn.net/robertaqi/archive/2010/04/04/5449763.aspx

登陆shell与交互式非登陆shell的区别

a4c26d1e5885305701be709a3d33442f.png

1.登录shell

所谓登录shell,指的是当用户登录系统时所取的那个  shell。登录shell属于交互式shell。

登录shell将查找4个不同的启动文件来处理其中的命令。 bash

shell处理文件的顺序如下:

1:

/etc/profile

2:/etc/profile.d等待配置文件

3:

$HOME/.bash_profile

4:

$HOME/.bash_login

5

$HOME/.profile

/etc

/profile是bash shell在系统上的主默认启动文 件,系统上 每一个用户在登陆时都将执行此文件。

通过设置这个文件,

超级用户可以为全系统内的所有bash用户建立默认特征。不同

Linux版本在此文件放置的命令不尽相同,

在redflag中,该文件设置了几个重要的变量,

如:PATH USER

LOGNAME MAIL HOSTNAME HISTSIZE

INPUTRC,详情可以查看具体的文件。

其余3个文件具备相同的功能——提供特定于用户的启动文件。大多

数Linux版本只使用其中之一。如:RedFlag使用.bash_profile  ubuntu使用.profile .

shell依次查找~/.bash_profile、

~/.bash_login、

~/.profile(~是用户主目录的速记符),

并执行它找到的首个文件中的命令。

可以将命令放置在这些文件中以覆盖掉/etc/profile文件中的默认设置。

也就是后面的文件可以覆盖或者修改前面的设置 。

2.

交互式非登录shell

如果启动了一个bash

shell而没有等录系统(如在CLI提示符中键入bash),

则启动了一个交互式非登录shell.

而登录shell的初始化文件(比如.bash_profile)通常会运行这个文件。这样,登录shell和非登录shell都可以使用.bashrc中的命令。

如以X

Window环境登录Linux时,在X环境所起动的终端,那些shell都是非登录shell.

在交互式非登录shell中并不执行前面提到的初始化文件中的命令。然而,交互式非登录shell从登录shell继承了由这些初始化文件设置的

shell变量。

(1)

$HOME/.bashrc

交互式非登录shell执行~/.bashrc文件中的命令.在每次执行shell脚本时,都会重新读取这个文件,所以是最完整的。

但是万事都不是一样的,debain系列的是不同的,如ubuntu

/etc/profile-->/etc/environment-->$HOME/.profile

要配置java等变量时,都/etc/environment中

bash again shell的启动文件

http://blog.csdn.net/chehlcy/archive/2010/03/03/5339739.aspx

1.登录设立shell

/etc/profile:shell

首先执行/etc/profile中的命令,超级用户可以为整个系统的用户建立默认配置

~/.bash_profile,~/.bash_login,~/.profile:然后社shell执行这三个文件中找到的第一个,可以在该文件中为具体用户建立配置。

~/.bash_logout:退出时执行

2.交互式非登录shell:该类社shell继承登录shell的所有配置并执行以下文件

/etc/bashrc:由~/.bashrc调用,可以在此建立全系统配置。

~/.bashrc:然后运行该文件,可以在此为具体shell建立配置。.bash_profile通常也会调用该文件

3.非交互式shell(运行shell脚本的shell)

不执行初始化文件,从登录shell处继承配置。

可以在/etc/profile或者

~/bash_profile中用ulimit -n 8192类似方法改变进程能打开的最大文件数

关于登录linux时,/etc/profile、~/.bash_profile等几个文件的执行过程

http://blog.csdn.net/lemon_fantasy/archive/2008/10/07/3023075.aspx

在登录Linux时要执行文件的过程如下:

在刚登录Linux时,首先启动 /etc/profile

文件,然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login或

~/.profile文件中的其中一个,执行的顺序为:~/.bash_profile、 ~/.bash_login、

~/.profile。如果 ~/.bash_profile文件存在的话,一般还会执行 ~/.bashrc文件。因为在

~/.bash_profile文件中一般会有下面的代码:

if [ -f ~/.bashrc ] ; then

. ./bashrc

fi

~/.bashrc中,一般还会有以下代码:

if [ -f /etc/bashrc ] ; then

. /bashrc

fi

所以,~/.bashrc会调用

/etc/bashrc文件。最后,在退出shell时,还会执行 ~/.bash_logout文件。

执行顺序为:/etc/profile ->

(~/.bash_profile | ~/.bash_login | ~/.profile) ->

~/.bashrc ->          /etc/bashrc ->

~/.bash_logout

关于各个文件的作用域,在网上找到了以下说明:

(1)/etc/profile:

此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.

并从/etc/profile.d目录的配置文件中搜集shell的设置。

(2)/etc/bashrc: 为每一个运行bash

shell的用户执行此文件.当bash shell被打开时,该文件被读取。

(3)~/.bash_profile:

每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。

(4)~/.bashrc: 该文件包含专用于你的bash

shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。

(5)~/.bash_logout:当每次退出系统(退出bash

shell)时,执行该文件.

另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系。

(6)~/.bash_profile 是交互式、login 方式进入

bash 运行的~/.bashrc 是交互式 non-login 方式进入 bash

运行的通常二者设置大致相同,所以通常前者会调用后者。

以下内容来自《Shell 設計入門》

/etc/profile 由 root 所控管,

用來設定適合全體使用者的shell環境

若使用者自己覺得 /etc/profile 的設定, 並不合意,

可以修改自家目錄中的.bash_profile

既然有了 .bash_profile, 為何要有

.bash_login 及 .profile ?這是因為有些人可能是從 Bourne shell移轉過來的, 那麼, 只要將

Bourne shell 主要的起動檔 .profile 移到自家目錄中, 放棄使用.bash_profile 及

.bash_login 即可繼續沿用以前的設定環境

bash_login 存在理由或許和 c shell 有關, 但因為

bash 和 c shell 二者語法並不完全相容, 因此, 並不建議將 c shell

的啟動檔直接移過

登录Linux时/etc/profile、~/.bash_profile等几个文件的执行过程

http://blog.csdn.net/lyw2698/archive/2007/12/11/1928747.aspx

在登录Linux时要执行文件的过程如下:

在刚登录Linux时,首先启动 /etc/profile

文件,然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login或

~/.profile文件中的其中一个,执行的顺序为:~/.bash_profile、 ~/.bash_login、

~/.profile。如果 ~/.bash_profile文件存在的话,一般还会执行 ~/.bashrc文件。因为在

~/.bash_profile文件中一般会有下面的代码:

if [ -f ~/.bashrc ] ; then

. ./bashrc

fi

~/.bashrc中,一般还会有以下代码:

if [ -f /etc/bashrc ] ; then

. /bashrc

fi

所以,~/.bashrc会调用

/etc/bashrc文件。最后,在退出shell时,还会执行 ~/.bash_logout文件。

执 行顺序为:/etc/profile

-> (~/.bash_profile | ~/.bash_login | ~/.profile)

-> ~/.bashrc ->          /etc/bashrc

-> ~/.bash_logout

关于各个文件的作用域,在网上找到了以下说明:

(1)/etc/profile:

此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.

并从/etc/profile.d目录的配置文件中搜集shell的设置。

(2)/etc/bashrc: 为每一个运行bash

shell的用户执行此文件.当bash shell被打开时,该文件被读取。

(3)~/.bash_profile:

每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。

(4)~/.bashrc: 该文件包含专用于你的bash

shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。

(5)~/.bash_logout: 当每次退出系统(退出bash

shell)时,执行该文件.

另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc

/profile中的变量,他们是"父子"关系。

(6)~/.bash_profile 是交互式、login 方式进入

bash 运行的~/.bashrc 是交互式 non-login 方式进入 bash

运行的通常二者设置大致相同,所以通常前者会调用后者。

linux环境变量文件

http://blog.csdn.net/Johnvikey/archive/2009/12/05/4941922.aspx

关于linux环境变量文件

第一内容:

etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.

并从/etc/profile.d目录的配置文件中搜集shell的设置.

/etc/bashrc:为每一个运行bash

shell的用户执行此文件.当bash shell被打开时,该文件被读取.

第二内容:

~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该

文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.

~/.bashrc:该文件包含专用于你的bash

shell的bash信息,当登录时以及每次打开新的shell时,该

该文件被读取.

~/.bash_profile 是交互式、login 方式进入 bash

运行的

~/.bashrc 是交互式 non-login 方式进入 bash

运行的

通常二者设置大致相同,所以通常前者会调用后者。

/etc/profile中设定的变量(全局)的可以作用于任何用户,而

~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.

第三内容:

~/.bash_logout:当每次退出系统(退出bash

shell)时,执行该文件.

执扫顺序总结:

/etc/profile------

~/.bash_profile( ~/.bash_login或

~/.profile(linux版本而定))-------~/.bashrc------/etc/bashrc------

~/.bash_logout

--------------------------------------------------------------------------------

具体

在登录Linux时要执行文件的过程如下:

在刚登录Linux时,首先启动 /etc/profile

文件,然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login或

~/.profile文件中的其中一个(根据不同的linux操作系统的不同,命名不一样),

执行的顺序为:~/.bash_profile、

~/.bash_login、 ~/.profile。

如果 ~/.bash_profile文件存在的话,一般还会执行

~/.bashrc文件。

~/.bash_profile文件中一般会有下面的代码:

if [ -f ~/.bashrc ] ; then

. ./bashrc

fi

~/.bashrc中,一般还会有以下代码:

if [ -f /etc/bashrc ] ; then

. /bashrc

fi

所以,~/.bashrc会调用

/etc/bashrc文件。最后,在退出shell时,还会执行 ~/.bash_logout文件。

执行顺序为:/etc/profile ->

(~/.bash_profile | ~/.bash_login | ~/.profile) ->

~/.bashrc -> /etc/bashrc ->

~/.bash_logout

关于各个文件的作用域,在网上找到了以下说明:

(1)/etc/profile:

此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.

并从/etc/profile.d目录的配置文件中搜集shell的设置。

(2)/etc/bashrc: 为每一个运行bash

shell的用户执行此文件.当bash shell被打开时,该文件被读取。

(3)~/.bash_profile:

每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。

(4)~/.bashrc: 该文件包含专用于你的bash

shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。

(5)

~/.bash_logout:当每次退出系统(退出bash

shell)时,执行该文件.

另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承

/etc/profile中的变量,他们是"父子"关系。

(6)~/.bash_profile 是交互式、login 方式进入

bash 运行的~/.bashrc 是交互式 non-login 方式进入 bash

运行的通常二者设置大致相同,所以通常前者会调用后者。

/etc/profile和/etc/environment等各种环境变量设置文件的用处

先将export LANG=zh_CN加入/etc/profile

,退出系统重新登录,登录提示显示英文。

将/etc/profile 中的export

LANG=zh_CN删除,将LNAG=zh_CN加入/etc/environment,退出系统重新登录,登录提示显示中文。

用户环境建立的过程中总是先执行/etc/profile然后在读取/etc/environment。为什么会有如上所叙的不同呢?

应该是先执行/etc/environment,后执行/etc/profile。

/etc/environment是设置整个系统的环境,而/etc/profile是设置所有用户的环境,前者与登录用户无关,后者与登录用户有关。

系统应用程序的执行与用户环境可以是无关的,但与系统环境是相关的,所以当你登录时,你看到的提示信息,象日期、时间信息的显示格式与系统环境的LANG是相关的,缺省LANG=en_US,如果系统环境LANG=zh_CN,则提示信息是中文的,否则是英文的。

对于用户的SHELL初始化而言是先执行/etc/profile,再读取文件/etc/environment.对整个系统而言是先执行/etc/environment。这样理解正确吗?

/etc/enviroment -->

/etc/profile --> $HOME/.profile

-->$HOME/.env (如果存在)

/etc/profile 是所有用户的环境变量

/etc/enviroment是系统的环境变量

登陆系统时shell读取的顺序应该是

/etc/profile

->/etc/enviroment -->$HOME/.profile

-->$HOME/.env

原因应该是jtw所说的用户环境和系统环境的区别了

如果同一个变量在用户环境(/etc/profile)和系统环境(/etc/environment)有不同的值那应该是以用户环境为准了。

Shell脚本和Shell的初始化

http://hi.baidu.com/��ireed/blog/item/f45b3a137b6172d8f6039e62.html

Shell脚本用source或者.来获得。

例:

假设文件ls.script在文件夹linux下,这个文件夹下还有个文件是example,

[ireed@redhat linux]$ ls

example ls.script

下面是ls.script的内容:

[ireed@redhat linux]$ cat

ls.script

ls

对,也就是说ls.script的内容就一行是ls。

开始实验:

[ireed@redhat linux]$ source

ls.script

example ls.script

[ireed@redhat linux]$ ls

example ls.script

[ireed@redhat linux]$ .

ls.script

example ls.script

[ireed@redhat

linux]$

我们看到获得ls.script与运行ls命令会得到同样的效果,都是显示linux文件夹下面的内容,如果你编辑其他的脚本文件,然后获得它,也是可以运行的。

登录Shell、非登录Shell、交互式Shell与非交互式Shell

登录Shell  交互式Shell

从虚拟控制台登录Shell  是

通过网络Shell到一台

远程机器上时登录Shell  是

X初始化Shell  是  是

X终端Shell  否

手动执行bash启动的子Shell  否  是

用在命令替换中的子Shell  否  否

被小括号分组的命令使用的子Shell

否  否

执行脚本时使用的子Shell  否  否

也就是说左边有"login:"的就是登录Shell否则就是非登录Shell;交互与非交互Shell也是很好区分的.

启动登录Shell时获得/etc/profile,/etc/profile.d/*.sh及~/.bash_profile;

每次Shell启动时获得/etc/bashrc和~/.bashrc;

每次Shell退出时获得~/.bash_logout

只有登录Shell可以获得/etc/profile和~/.bash_profile;而/etc/bashrc和~/.bashrc被所有Shell获得.前两个文件用来配置环境变量,只被初始化一次,后两个习惯上用于Shell的自定义,如别名和Shell选项.

注意对称,对于环境变量,有一个通用的启动文件(/etc/profile)和一个本地的启动文件(~/.bash_profile),前者可以被系统管理员用来配置系统范围,后者被个人用户自定义自己的环境;/etc/bashrc和~/.bashrc也类似.

交互

式shell和非交互式shell、登录shell和非登录shell的区别。

首先,这是两个不同的维度来划分的,一个是是否交互式,另

一个是是否登录。

交互式shell和非交互式shell

交互式模式就是shell等待你的输入,

并且立即执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签

退后,shell也终止了。

shell也可以运行在另外一种模式:非交互式模式,以shell

script(非交互)方式执行。在这种模式

下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。

chinaunix

论坛中关于登录shell与非登录shell、交互式shell与非交互式Shell的讨论:

Login Shell:当init3时,mingetty

spawn出登录提示符的时候,你输入帐号和密码进入了,出现了shell提示符,这个过程就是登录外壳;

Interactive

Shell:接下来你得到了一个像root@host

/>这样的提示符,你输入什么,它就解释出什么,这就是交互式外壳;你在当前Shell又fork了一个shell(bash),这个bash也是

交互式外壳。通常情况下interactive shell是login shell派生出来的。

Non Interactive Shell:你可能需要学习写一个bash

script,用外部shell执行:bash

script.sh,它(bash)从第一条命令执行到最后一条然后退出,不与你进行任何交互,它就是

非交互式外壳。

交互式非登录shell就是指你在Gnome图形界面中打开“终端”出来的那种窗口程序,

和登录shell

相比,它是“非登录”的,你并不需要输入用户名和密码,

和非交互式shell相比,这是“交互式”的,就像你说的那它:你输入什么,它就解释出什么

执行exit退出非登录shell状 态;

执行logout退出登录shell状态。

在登录shell里,确实只读取/etc/profile和~

/.bash_profile, ~/.bash_login, and ~/.profile按顺序最先的一个,并执行其中的命令。除非被

--noprofile选项禁止了;

在非登录shell里,确实只读取

/etc/bash.bashrc和~/.bashrc

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39939993/article/details/116894184

智能推荐

Win10离线安装.NET Framework 3.5的方法技巧(附离线安装包下载)_.net framework 3.5离线安装包-程序员宅基地

文章浏览阅读10w+次,点赞22次,收藏143次。PC系统为win10,在使用过程中,曾遇到提示说 “你的电脑上的应用需要使用以下Windows功能:.NET Framework 3.5(包括.NET 2.0和3.0)”。如图:因此,我在网上找了一下如何才能安装成功的方法。方法有,但可能有的会适用,有的却不一定成功。所以在这里稍微记录一下:大部分内容是转载自:https://www.windows10.pro/win10-_.net framework 3.5离线安装包

c语言程序总是从main函数开始执行,c语言程序总是从main函数开始执行吗?-程序员宅基地

文章浏览阅读7.1k次,点赞3次,收藏10次。是的,一个C程序总是从main函数开始执行,而不论其在程序中的位置。在main函数中可以调用程序中的其他函数,而其他函数却不可以调用main函数;程序最后再从main函数中结束。本教程操作环境:windows7系统、c99版本、Dell G3电脑。C程序的执行总是从main函数开始,在main函数结束。main函数,又称主函数,是程序执行的起点,main是相对来说的,如同音学理论之主调于泛音,泛音...

StopIteration: Caught StopIteration in replica 0 on device 0-程序员宅基地

文章浏览阅读4.8k次,点赞10次,收藏7次。在对调用pytorch_pretrained_bert时,如果用多个GPU出现StopIteration: Caught StopIteration in replica 0 on device 0.具体如下。File "/home/yuangen_yu/CLUE/baselines/models_pytorch/classifier_pytorch/run_classifier.py", line 569, inmain()File "/home/yuangen_yu/CLUE/baselines/_stopiteration: caught stopiteration in replica 0 on device 0.

VBS基本语法_vbs脚本语法-程序员宅基地

文章浏览阅读830次,点赞2次,收藏16次。 一、初识VBSVbs 是一种变量无关、解释性执行的脚本语言。vbs语言中不区分大小写。语句以换行结束。dim 声明变量;批量名称声明,多个变量之间用逗号分隔:set &..._vbs脚本语法

Vuex笔记(三)--- actions和mutations交互时候,传递的是一个包含数据的对象-程序员宅基地

文章浏览阅读565次。actions和mutations交互时候,传递的是一个包含数据的对象。这个对象包含不同数据。eg.state.js: 保存数据const state = { foods: [], shops: []}export default state问题就是mutations.js里面:1.第二个参数foods是用{}包住,foods传递的是一个包含数据的对象。2.第二个...

pytorch中的batch_norm, instance_norm, layer_norm, group_norm_f.batch_norm-程序员宅基地

文章浏览阅读1.3k次。1 BatchNorm1.1 实现Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shifthttp://d2l.ai/chapter_convolutional-modern/batch-norm.html?highlight=batchnorm2d import torch import torch.nn.functi..._f.batch_norm

随便推点

终止线程的三种方法_终止正在进行的线程任务-程序员宅基地

文章浏览阅读2.2k次。有三种方法可以使终止线程。1. 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。2. 使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果)。3. 使用interrupt方法中断线程。1. 使用退出标志终止线程当run方法执行完后,线程就会退出。但有时run方法是永远不会结束的。如在服务端程序中使用线程进行监_终止正在进行的线程任务

STM32F10X新建工程步骤_菲斯塔固件-程序员宅基地

文章浏览阅读473次,点赞2次,收藏5次。STM32创建新工程第一步下载固件包第二步创建工程第三步完成配置,修改main文件为空执行编译第一步下载固件包网址如下:1、Openedv:http://openedv.com/posts/list/6054.htm2、ST官网:https://www.stmcu.com.cn/Designresource/list/STM32F1/firmware_software/firmware_software固件库介绍:Libraries:CMSIS、STM32F10x_StdPeriph_Driv_菲斯塔固件

Ubuntu虚拟机连接开发板网络设置_ubuntu18 虚拟机连接开发板-程序员宅基地

文章浏览阅读1.4k次。1.VMware必须设置成桥接模式,且要在“编辑-》虚拟网络编辑器”里指定桥接到HOST主机的物理网卡 2.Ubuntu虚拟机、HOST主机和目标开发板的IP必须在同一个网段 3.将网线连接开发板并上电,否则Ubuntu虚拟机的ifconfig不会显示已配置的网络设置..._ubuntu18 虚拟机连接开发板

html5开发之ios屏幕适配,iOS开发屏幕尺寸以及屏幕适配等问题(转载内容)-程序员宅基地

文章浏览阅读377次。原帖地址:http://blog.csdn.net/phunxm/article/details/42174937/仅供我个人收藏学习,原博主如不同意请联系qq651263878进行删除,在此表示感谢以及歉意。1.iPhone尺寸规格后续上市的iPhone7以及iPhone7plus 与六代相同1 inch = 2.54cm = 25.4mm上表中的宽高(width/height)为手机的物理尺..._ios html注入屏幕尺寸适配

计算机制作贺卡教案,教案与学生成果:制作电子贺卡-程序员宅基地

文章浏览阅读719次。教案与学生成果:制作电子贺卡狮山镇松岗中心小学 朱蔼玲【教学目的与要求】(1)、通过利用计算机制作贺卡,让学生理解、掌握并熟练运用word这一章的各知识点。(2)通过练习掌握word提供的强大的编辑功能,并能进行综合运用,完成贺卡的制作。(3)进一步熟练掌握用绘图工具绘制图形、文本框及自选图形的制作与修饰、艺术字的插入等操作。(4)通过制作电子贺卡,培养学生动手实践和主动探究的兴趣。为学生创造现代..._计算机作业电子贺卡

html-1 圆角边框的常用写法_html圆角矩形边框-程序员宅基地

文章浏览阅读2.3k次,点赞3次,收藏15次。<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <tit_html圆角矩形边框

推荐文章

热门文章

相关标签