■  变量与环境变量

  shell环境通常存在很多变量,变量可以通过echo $VAR或${VAR}的方式查看。set命令可以查看当前环境中的所有变量(包括一般的自定义变量和环境变量)

  变量的设置通过简单的赋值命令进行。比如TESTVAR=abc,就是设置了TESTVAR的值为abc(注意等号两边都没有空格,值也不能有空格,有空格就要用引号引起来)。

  取消变量的设置可以通过unset命令,如unset TESTVAR。

  变量中有一些特殊的变量被称为环境变量。环境变量的意义在于它可以被子进程继承,继而被多个进程共用。由于linux的子进程生成机制是fork-and-exec,所以子进程的环境变量其实是父进程的一个副本,子进程开始运行后就与父进程互相独立了。通过export命令可以将一般的自定义变量转化为环境变量用于进程间通讯。env命令可以查看所有环境变量。

■  shell配置文件与环境变量

  通过SSH连接centos是一个常见的场景。登录时,由sshd进程打开一个虚拟终端的子进程,再由虚拟终端进程打开一个bash子进程,这个bash进程就是我们通过这个连接运行所有指令的原点。

  顺带一提,打开bash时会有欢迎信息,这些信息配置在/etc/issue(通过终端登录时)和/etc/motd(通过模拟终端登录时)。

  在正式看bash的配置文件之前,有必要先了解一下login-shell和non-login-shell。从最表象的层面来说,打开bash时需要输入账号密码的shell就是login-shell,反之则不是。前者例子有通过终端登录linux系统或者SSH远程登录模拟终端时,后者的例子有通过图形化界面打开终端,或者在终端中运行bash再开一个子进程的shell等情况。

  在cenots下打开一个bash的shell时,会读取一些配置文件,加载一些基本的,常用的变量到shell中来。通常会涉及到的配置文件主要有四个:

  A. /etc/profile

  B. ~/.bash_profile

  C. ~/.bashrc

  D. /etc/bashrc

  通常,打开的是一个login-shell的时候会加载的配置文件是A和B。(说B是只有一个.bash_profile其实也是不太严谨的。如果home中.bash_profile不存在则会寻找.bash_login,若它也不存在则寻找.profile。三者按照优先级顺序找到一个就加载,其他的就不管了)但是通常,B的具体执行内容中有加载C的步骤,而C的执行内容中又有加载D的步骤,所以一般而言四个都会被加载。由于B和C是每个用户home目录下自身的文件,可能有所不同,这点也需要注意。相对的A是所有用户共用的文件。

  若打开的是一个non-login-shell的话,那么只会加载C和D。值得一提的是,D这个文件是redhat系统特有的文件,在其中做出了redhat标志性的一些配置(比如PS1的样式)。C这个文件在/etc/skel中有备份,如果不小心删除了可以去那里拿一份回来。

  除了上面四个外,还有一些配置文件也和bash的运行息息相关。

  ~/.bash_history  记录了当前bash的命令执行历史,其大小和环境变量HISTSIZE相关。history命令就是读取这个文件的。历史命令并不会随着我们操作同步写入,我们可以想象是这样的:登录时读取这个文件把HISTSIZE条命令加载到内存中,由于HISTSIZE通常是1000,以1000举例。然后随着我们不断输入命令,内存中这1000条不断被更新,总量始终维持在1000。当我们注销登录时将这更新后的1000条再次写入此文件。由于命令记录和bash进程相关联,但是.bash_history一个用户只有一个,所以当同一个用户用不同bash进程做了不同操作的时候,更新的信息以最后一个注销的用户为准。

  ~/.bash_logout  注销登录时留给用户做一些事的接口。我们可以在里面写上一些注销登录时要机器自动帮你做的事情,比如记录登出的时间等等。

■  几种运行可执行程序(包括运行sh脚本)的区别

  对于可执行文件,Linux提供了多种执行方法,按照分类主要有:

  1. 通过路径执行如相对or绝对路径:./test.sh 、/tmp/test.sh

  这种执行方法需要当前用户对被执行的文件有执行的权限,且如果是一个shell脚本的话在脚本头应该声明相应的解释器如#!/bin/bash。从执行程序的角度而言通过相对或绝对路径执行没有区别。

  由于一般命令的执行本质也是先找到环境变量PATH中的相关路径再执行,所以可以视为这一类执行方式。因此,一般命令的执行也都是开了一个子进程的shell来执行的。

  2. shell命令执行

  通过shell程序的指令执行如: bash test.sh、sh test.sh

  通过这种方法执行的程序本身无需有执行权限,只要有读权限即可。被执行程序作为一个shell程序的参数运行。

  3. 以读取环境变量的方式执行

  如: source test.sh 、 . test.sh

  这种方式和前两种最大的区别在于,前两种都是在现有shell中开启一个子进程的shell,然后把程序放到子进程的shell环境中执行,执行完成后即关闭子进程shell。而这种方式直接在当前shell环境中执行。所以如果被执行程序中含有对环境变量的增改,且希望保留结果到当前shell环境中的,则需要使用这种方法执行。

【Linux】 环境变量与shell配置&执行的更多相关文章

  1. linux环境变量设置和默认执行语句设置

    环境变量设置 1.export export ORACLE_HOME=/usr/local/instantclient_12_2export PATH=$ORACLE_HOME:$PATHexport ...

  2. Linux环境变量从用户配置改为系统配置

    部署了一个新的tomcat到一个新的用户下,发下启动失败了 /home/personal/apache-tomcat/bin/catalina.sh: line 434: /usr/lib/jvm/j ...

  3. Linux中环境变量文件及配置

    Linux中环境变量文件及配置   一.环境变量文件介绍 转自:http://blog.csdn.net/cscmaker/article/details/7261921 Linux中环境变量包括系统 ...

  4. Linux中环境变量文件及配置(转载)

    一.环境变量文件介绍 转自:http://blog.csdn.net/cscmaker/article/details/7261921 Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登 ...

  5. Linux环境变量配置全攻略

    Linux环境变量配置 在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量的配置方法. 下面所有例子的环境说明如下: 系统:Ubuntu 14.0 用户名:uusama 需要配置M ...

  6. Linux环境变量配置方法

    Linux上环境变量配置分为设置永久变量和临时变量两种.环境变量设置方法同时要考虑环境Shell类型,不同类型的SHELL设置临时变量方法和设置永久变量对应的配置文件不同.Linux环境变量本身配置过 ...

  7. linux 环境变量配置方式

    linux 环境变量可以在多个文件中配置 说明: linux bash 运行模式分为两种: login shell 和non-login shell, 两种登录模式启动是加载的配置文件不一样. 1. ...

  8. Linux 环境变量配置的 6 种方法,建议收藏

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ Linux环境变量配置 在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量 ...

  9. 超详干货!Linux 环境变量配置全攻略

    点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! Linux环境变量配置 在自定义安装软件的时候,经常需要 ...

随机推荐

  1. alsa声卡分析alsa-utils调用过程

    如何分析tinyplay 播放音频和tinymix的过程?需要相应的工具来支持追查: 一.利用strace工具分析tinyplay和tinymix: strace -o tinyplay.log ti ...

  2. 3.3.2 PCI设备对不可Cache的存储器空间进行DMA读写

    在x86处理器和PowerPC处理器中,PCI设备对"不可Cache的存储器空间"进行DMA读写的过程并不相同.其中PowerPC处理器对"不可Cache的存储器空间&q ...

  3. Error:dojo.data.ItemFileWriteStore:Invalid item argument

    1.错误描述 dijit.form.ComboBox TypeError:_4e is undefined                                            Sea ...

  4. hihocoder Challenge 29 B.快速乘法

    这题的题解和我写的有一拼,异常简洁,爆炸. 这题思路dp 表示的是讨论到第位,并比原数的前n位多了 显然j只能取0,1,毕竟2进制嘛 之后转移就好了,注意下面两个重要状态 #include <c ...

  5. 二叉树与AVL树

    二叉树 什么是二叉树? 父节点至多只有两个子树的树形结构成为二叉树.如下图所示,图1不是二叉树,图2是一棵二叉树. 图1 普通的树                                    ...

  6. 下拉框的change事件

    6.1,获取下拉框的值(html标签中没有onchange事件的) <script language="javascript"> $(document).ready(f ...

  7. Bzoj4916: 神犇和蒟蒻

    题面 传送门 Sol 第一问puts("1") 第二问,\(\varphi(i^2)=i\varphi(i)\) 设\(\phi(n)=\sum_{i=1}^{n}i\varphi ...

  8. luogu 访问”美术馆“ && 偷天换日

    把这两个题放在一起,是因为这两个题差不多,难度递进其实是懒得写两个博客所以一起分享一下 访问“美术馆” 题目描述 经过数月的精心准备,Peer Brelstet,一个出了名的盗画者,准备开始他的下一个 ...

  9. 索信达携手8Manage,打造项目管理系统信息化体系

    [导语]金融大数据已逐渐成为行业潮流,作为金融大数据应用提供商,深圳索信达企业为了实现业务和研发项目的多重管理需求,决定引入8Manage项目管理系统,提高项目管控能力和工作效率,从而提高企业的核心竞 ...

  10. Servlet和Filter生命周期

    1. 生命周期 1.1. Servlet生命周期 servlet是一个基于java技术的WEB组件,运行在服务器端,我们利用 sevlet可以很轻松的扩展WEB服务器的功能,使它满足特定的应用需要.s ...