zoukankan      html  css  js  c++  java
  • linux下的环境变量

    环境变量有时候要查找,但是经常忘记有哪些文件,现在做一个总结:

                                   

    /etc/profile                此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置
    /etc/bashrc为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取
    ~/.bash_profile                    每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件
    ~/.bashrc该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取.
    ~/.bash_logout当每次退出系统(退出bash shell)时,执行该文件


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


    一、交互式登陆shell

    /etc/profile——>(~.bash_profile(redhat)|~.profile(ubuntu)|~.bash_login)——>~.bashrc——>(/etc/bashrc(redhat)|/etc/bash.bashrc(ubuntu))——>~.bash_logout


    /etc/profile的内容:

    for i in /etc/profile.d/*.sh ; do
        if [ -r "$i" ]; then
            if [ "$PS1" ]; then
                . $i
            else
                . $i >/dev/null 2>&1
            fi
        fi
    done

    ~.bash_profile的内容:

    if [ -f ~/.bashrc ]; then
            . ~/.bashrc
    fi

    ~.profile的内容:

    if [ -f "$HOME/.bashrc" ]; then
            . "$HOME/.bashrc"
        fi

    ~.bashrc的内容:(redhat)

    if [ -f /etc/bashrc ]; then
            . /etc/bashrc
    fi


    二、交互式非登陆shell:

    ~/.bashrc——>/etc/bashrc



    三、交互式登陆shell

    交互式shell:是指用户在提示符下输命令的shell而非执行脚本的shell。
    登陆shell:是在输入用户名和密码登陆后得到的shell,比如从字符终端登陆或者用telnet/ssh从远程登陆。但是从图形界面的窗口管理器登陆之后会显示桌面而不会产生登陆shell(也不会执行启动脚本),在图形界面下打开终端窗口得到的shell也不是登陆shell。

    执行exit退出非登陆shell状态。
    执行logout退出登陆shell状态。


    四、交互式非登陆shell  

           比如在图形界面下,打开一个终端窗口,或者在登陆shell提示符下再输入bash命令,就得到一个交互式非登陆shell。

           为什么登陆shell和非登陆shell的启动脚本要区别开呢?
           最初的设计是这样考虑的,如果从字符终端或者远程登陆,那么登陆shell是该用户的所有其它进程的父进程,也是其他子shell的父进程,所以环境变量在登陆shell的启动脚本里设置一次就可以自动带到其它非登陆shell里,而shell的本地变量、函数、alias等设置没有办法带到子shell里,需要每次启动非登陆shell时设置一遍,所以就需要有非登陆shell的启动脚本,所以一般来说~/.bash_profile里设置环境变量,在~/.bashrc里设置本地变量、函数、alias等。如果你的linux带有图形系统则不能这样设置,由于从图形界面的窗口管理器登陆并不会产生登陆shell,所以环境变量也应该在~/.bashrc里面设置。


    五、非交互式启动shell

           为执行脚本而fork出来的子shell是非交互shell,启动时执行的脚本文件由环境变量BASH_ENV定义,相当于自动执行以下命令:
    if [ -n "$BASH_ENV" ];then ."$BASH_ENV";fi
    如果环境变量BASH_ENV的值不是空字符串,则把它的值当作启动脚本的文件名,source这个脚本。但是不会再次source以~/.bash开头的那些启动脚本。


    BASH_ENV现在为空,只执行了test.sh.



    BASH_ENV现在不是空,是pwd,所以在执行test.sh之前,会执行pwd。


    六、以sh命令启动

    如果以sh命令启动bash,bash将模拟sh的行为,将继承前面的环境变量,不会再次source以~/.bash开头的那些启动脚本。


    echo $CTT没有打印,说明不会再次source以~/.bash开头的那些启动脚本,继承的是前面的环境变量。


    七、交互式和非交互式以及登录与非登录

    也就是说左边有"login:"的就是登陆shell,否则就是非登陆shell

    交互式模式是:shell等待你的输入,并且立即执行你提交的命令。这种模式被被称为交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登陆、执行一些命令、签退。当你签退后shell也终止了。
    非交互模式是:shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它们读到文件的结尾,shell也就终止了。

                                  

     登陆shell  交互式shell
    从虚拟机控制台登陆shell       是       是
    通过网络shell到一台远程机器上时登陆shell       是        是
    X初始化shell        是       是
    X终端shell        否       是
    手动执行bash启动的子shell       否       是
    用在命令替换中的子shell        否       否
    被小括号分组的命令使用的子shell        否       否
    执行脚本时使用的子shell          否       否


    八、一些常用的环境变量

    PATH 决定了shell将到哪些目录中寻找命令或程序
    HOME当前用户主目录
    HISTSIZE历史记录数
    LOGNAME当前用户的登录名
    HOSTNAME指主机的名称
    SHELL当前用户Shell类型
    LANGUGE 语言相关的环境变量,多语言可以修改此环境变量
    MAIL当前用户的邮件存放目录
    PS1基本提示符,对于root用户是#,对于普通用户是$

    九、环境变量命令介绍

    1.echo 显示某个环境变量值 echo $PATH
    2.export 设置一个新的环境变量 export HELLO="hello" (可以无引号)
    3.env 显示所有环境变量
    4.set 显示本地定义的shell变量
    5.unset 清除环境变量 unset HELLO
    6.readonly 设置只读环境变量 readonly HELLO

  • 相关阅读:
    转:发一个自己用过的makefile .
    转:TCP/IP协议选项——TCP_KEEPALIVE .
    转:Socket常用选项
    转:sock_ev——linux平台socket事件框架(event loop) .
    Spring Boot logback
    Spring Boot 连接池
    Spring Boot AOP
    spring boot 配置 freemarker
    maven package install deploy
    idea下maven项目打包
  • 原文地址:https://www.cnblogs.com/wangfengju/p/6172461.html
Copyright © 2011-2022 走看看