Linux基础(5)/环境变量与文件查找

这里写图片描述

  1. 环境变量

    1. 变量
      首先明确一下,我们在这里所说的变量是shell变量。 
      为了便于运算和处理,大部分的编程语言会区分变量的类型,用于分别记录数值、字符或者字符串等等数据类型。Shell 中的变量也基本如此,有不同数据类型(但不用专门指定类型名),以及针对不同数据类型有相应的运算,有不同的作用域。变量的作用域即变量的有效范围(比如一个函数中、一个源文件中或者全局范围),在该范围内只能有一个同名变量。

      • 如何定义赋值并引用一个变量?
        declare tmp    #用declare 声明一个变量
        tmp=loveyinjuan    #给变量tmp赋值
        echo $tmp      #引用变量tmp
        
    2. 环境变量 

      1. 一些概念:
        • 环境变量就是作用域比自定义变量要大,如Shell的环境变量作用于自身和它的子进程。
        • 在所有的 UNIX 和类 UNIX 系统中,每个进程都有其各自的环境变量设置,且默认情况下,当一个进程被创建时,处理创建过程中明确指定的话,它将继承其父进程的绝大部分环境设置。
        • Shell 程序也作为一个进程运行在操作系统之上,而我们在 Shell中运行的大部分命令都将以 Shell 的子进程的方式运行。
      2. 三种环境变量
        • 当前 Shell 进程私有用户自定义变量
        • Shell 本身内建的变量
        • 从自定义变量导出的环境变量
      3. 与上述三种环境变量相关的命令

        commandmean
        set显示当前 Shell 所有环境变量,包括其内建环境变量,用户自定义变量及导出的环境变量
        env显示与当前用户相关的环境变量,还可以让命令在指定环境中运行
        export显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量
        • set,env,export的包含关系
          set_env_export
        • 使用vim中vimdiff工具比较set,env,export的差别

          temp=loveyinjuan
          export temp_env=anranloveyinjuan
          export|sort > export.txt
          env|sort > env.txt
          set|sort > set.txt
          vimdiff export.txt env.txt set.txt

          如何理解以上命令:

          • 定义了两个变量。第一个变量temp不是环境变量,所以在export.txt和env.txt,set.txt中都没有;第二个变量为环境变量,所以在三个文件中都有。同时可以看到,set.txt文件中的环境变量数>env.txt中的>export.txt中的。
          • 以命令export|sort > export.txt为例子,用到了管道(pipe)和数据流重定向的知识。export|sort表示将export输出的内容排序。> export.txt表示,将输出的内容重定向到文本文件export.txt中,而不是在屏幕上显示。
    3. 命令的查找路径与顺序 
      • Shell 是怎么知道在哪去找到这个命令然后执行的呢?
        答案是通过环境变量PATH来进行搜索的。PATH里面就保存了Shell中执行的命令的搜索路径。通过命令 echo $PATH 可以查看。
    4. 添加自定义路径到“PATH”环境变量 
      PATH中用:分割路径。所以我们可以通过命令PATH=$PATH:/home将/home添加到路径中。但是这个方法再重新打开terminal的时候就失效了,也就是说,每打开一次terminal就要先执行一次上述命令才行。那有什么方法可以一劳永逸吗?
      我们知道,打开terminal时会自动运行shell程序,shell程序打开时会加载配置文件。这个配置文件名为.bashrc(在bash shell中是如此)。通过修改.bashrc便可达到目的。

      执行命令echo “PATH=$PATH:/home” >> .zshrc便可将目录/home添加到路径中。

    5. 修改和删除已有变量 

      1. 变量修改

        变量设置方式说明
        ${变量名#匹配字串}从头向后开始匹配,删除符合匹配字串的最短数据
        ${变量名##匹配字串}从头向后开始匹配,删除符合匹配字串的最长数据
        ${变量名%匹配字串}从尾向前开始匹配,删除符合匹配字串的最短数据
        ${变量名%%匹配字串}从尾向前开始匹配,删除符合匹配字串的最长数据
        ${变量名/旧的字串/新的字串}将符合旧字串的第一个字串替换为新的字串
        ${变量名//旧的字串/新的字串}将符合旧字串的全部字串替换为新的字串
      2. 变量删除
        unset命令
        unset

    6. 如何让环境变量立即生效 –> source命令或 . 命令
      在修改过.bashrc文件后,可能不能立即生效。那么我们应该执行什么命令呢?
      当然是source和 .

          source .bashrc
          #或者执行一下命令也可以达到更新shell配置的目的
          . ./.bashrc   #必须要有完整的绝对或者相对路径
  2. 文件查找

    • whereis
      • 没有从硬盘中依次查找,而是直接从数据库中查询。
      • whereis只能搜索二进制文件(-b),man帮助文件(-m)和源代码文件(-s)。如果想要获得更全面的搜索结果可以使用locate命令。
        whereis
    • locate
      • 通过”/var/lib/mlocate/mlocate.db”数据库查找,经常使用的一个命令。
      • 系统会每天自动执行updatedb命令更新一次,所以有时候刚添加的文件,可能会找不到,需要手动执行一次updatedb命令
        locate
    • which
      • Shell 内建的一个命令,常用来判断是否安装某软件
      • 只从PATH环境变量指定的路径中去搜索命令
        which
    • find
      • 功能强大,复杂

补充问题:

  1. 环境变量和非环境变量;全局变量和局部变量的区别?

    • 环境变量的判断标准是:是否在子进程中有效。
    • 有些人也将所有变量统称为环境变量,只是以全局环境变量和局部环境变量进行区分。
  2. 数据流重定向
    >>表示将标准输出以追加的方式重定向到一个文件中,注意前面用到的>是以覆盖的方式重定向到一个文件中,使用的时候一定要注意分辨。在指定文件不存在的情况下都会创建新的文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值