zoukankan      html  css  js  c++  java
  • 10重要的环境变量

    1. 环境变量概述

    在Linux系统中,变量名称一般都是大写的,这是一种约定俗成的规范。我们可以直接通过变量名提取到对应的变量值。
    Linux系统中的环境变量是用来定义系统运行环境的一些参数,比如每个用户的home目录、邮件存放位置。要想让Linux系统能够正常运行并且为用户提供服务,需要数百个环境变量来协同工作。

    2. Linux命令执行的机制

    在Linux系统中一切都是文件,Linux命令也不例外。简单来说,命令在Linux中的执行分可分为4个步骤。
    第一步:判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是的话则直接执行。
    第二步:Linux系统检查用户输入的命令是否为“别名命令”,即用一个自定义的命令名称来替换原本的命令名称。可以用 alias 命令来创建一个属于自己的命令别名,格式为“alias 别名=命令”。若要取消一个命令别名,则用unalias命令,格式为“unalias 别名”。

    我们之前在使用 rm 命令删除文件时,Linux系统都会要求我们再确认是否执行删除操作,其实这就是Linux系统为了防止用户误删除文件而特意设置的 rm 别名命令。

    [root@localhost 0613]# ls
    aaa  bbb
    //系统默认将 ‘rm -i’(删除时询问)命令的别名设置成了 rm
    [root@localhost 0613]# rm aaa
    rm: remove regular empty file ‘aaa’? y
    [root@localhost 0613]# ls
    bbb
    [root@localhost 0613]# alias rm
    alias rm='rm -i'
    //删除别名,则不再询问
    [root@localhost 0613]# unalias rm
    [root@localhost 0613]# rm bbb
    
    第三步:Bash解释器判断用户输入的是内部命令还是外部命令。内部命令是解释器内部的指令,会被直接执行;而用户在绝大多数时间输入的都是外部命令,这些命令交由步骤四继续处理。

    可以使用“type 命令名称”来判断用户输入的命令是内部命令还是外部命令。

    //g++为外部命令
    [root@localhost 0613]# type g++
    g++ is hashed (/usr/bin/g++)
    //ls为内部命令
    [root@localhost 0613]# type ls
    ls is aliased to `ls --color=auto'
    [root@localhost 0613]#
    
    第四步:系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫做PATH,可以简单地把它理解成是“解释器的小助手”,作用是告诉Bash解释器待执行的命令可能存放的位置,然后Bash解释器就会乖乖地在这些位置中逐个查找。PATH是由多个路径值组成的变量,每个路径值之间用冒号间隔,对这些路径的增加或删除操作将影响到Bash解释器对Linux命令的查找。
    [root@localhost 0613]# echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    [root@localhost 0613]# PATH=$PATH:/root/sbin
    [root@localhost 0613]# echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/sbin
    

    这里有一个经典的问题:“为什么不能把当前目录(.)添加到PATH中呢?“原因是,尽管可以将当前目录(.)添加到PATH变量中,从而在某些情况下可以让用户免去输入命令所在路径的麻烦。但是,如果黑客在比较常用的公共目录/tmp中存放了一个与ls或cd命令同名的木马文件,而用户又恰巧在公共目录中执行了这些命令,那么就极有可能中招了。

    所以,作为一名态度谨慎、有经验的运维人员,在接收一台Linux系统后一定在执行命令前先检查PATH变量中是否有可疑的目录。

    3. 常用环境变量介绍

    HOME			用户的主目录(即家目录)
    SHELL			用户在使用的Shell解释器名称
    HISTSIZE		输出的历史记录条数
    HISTFILESIZE	保存的历史记录条数
    MALL			邮件保存路径
    LANG			系统语言、语系名称
    RANDOM	        生成一个随机数
    PS1				Bash解释器的提示符
    PATH			定义解释器搜索用户执行命令的路径
    EDITOR			用户默认的文本编辑器
    
    [root@localhost 0613]# echo $HOME
    /root
    [root@localhost 0613]# echo $SHELL
    /bin/bash
    [root@localhost 0613]# echo $HISTSIZE
    1000
    [root@localhost 0613]# echo $HISTFILESIZE
    1000
    [root@localhost 0613]# echo $MAIL
    /var/spool/mail/root
    [root@localhost 0613]# echo $LANG
    en_US.UTF-8
    [root@localhost 0613]# echo $RANDOM
    830
    [root@localhost 0613]# echo $PS1
    [u@h W]$
    [root@localhost 0613]# echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    [root@localhost 0613]# echo $EDITOR
    (空)
    
    Linux作为一个多用户多任务的操作系统,能够为每一个用户提供独立的、合适的工作环境,因此,一个相同的环境变量会因为用户身份的不同而具有不同的值。
    [root@localhost 0613]# echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    [root@localhost 0613]# echo $HOME
    /root
    [root@localhost 0613]# su - hk
    Last login: Wed Jun 13 13:48:03 CST 2018 on tty1
    [hk@localhost ~]$ echo $HOME
    /home/hk
    
    其实变量是由固定的变量名与用户或系统设置的变量值两部分组成的,我们完全可以自行创建变量,来满足工作需求。

    例如设置一个名称为 WORKDIR 的变量,方便用户更轻松地进入一个层次较深的目录。

    [root@localhost home]# WORKDIR=/home/workdir
    [root@localhost home]# cd $WORKDIR
    [root@localhost workdir]# pwd
    /home/workdir
    
    但是,这样的变量不具有全局性,作用范围也有限,默认情况下不能被其他用户使用。如果工作需要,可以使用 export 命令将其提升为全局变量,这样其他用户也就可以使用它了。
    [root@localhost workdir]# su hk
    [hk@localhost workdir]$ cd $WORKDIR
    [hk@localhost ~]$ pwd
    /home/hk
    [hk@localhost ~]$ exit
    exit
    [root@localhost workdir]# export WORKDIR
    [root@localhost workdir]# su hk
    [hk@localhost workdir]$ cd $WORKDIR
    [hk@localhost workdir]$ pwd
    /home/workdir
    
    道虽迩,不行不至;事虽小,不为不成。
  • 相关阅读:
    再探最大公约数
    非旋treap
    初赛毒瘤汇总(持续更新中)
    架构漫谈阅读笔记五--以豆瓣得基础架构为例
    架构设计小论文
    第一阶段
    架构漫谈阅读笔记六--以淘宝数据魔方技术架构解析为例
    学习进度第八周
    架构漫谈阅读笔记一
    软件架构之 Refined Architecture阶段
  • 原文地址:https://www.cnblogs.com/rock-cc/p/9179543.html
Copyright © 2011-2022 走看看