首页 > 系统相关 >Linux环境变量,知识点汇总

Linux环境变量,知识点汇总

时间:2024-01-25 19:00:26浏览次数:32  
标签:profile 知识点 用户 环境变量 etc Linux PATH 目录

一、什么是环境变量?

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。

环境变量本质就是一张表,保存在内存当中。

该表在用户登录系统的时候,给用户生成的特定的环境变量表。

环境变量的主要用途:

  1. 身份认证
  2. 动态库查找
  3. 保存工作路径(pwd)
  4. 特定路径查找
  5. 保存特定变量值

二、环境变量分类

按生命周期分:

  • 永久的:
    在环境变量脚本文件中配置,用户每次登录时会自动执行这些脚本,相当于永久生效。
  • 临时的:
    用户利用export命令,在当前终端下声明环境变量,关闭Shell终端失效。

按作用域分:

  • 系统环境变量:
    公共的,对全部的用户都生效。
  • 用户环境变量:
    用户私有的、自定义的个性化设置,只对该用户生效。

三、环境变量相关操作命令

1)echo

查看指定环境变量的值

2) env

查看当前用户全部的环境变量。

3) export

export: 设置一个新的环境变量


也可以显示当前系统定义的所有环境变量。

4) set

set: 显示本地定义的shell变量和环境变量

5) unset命令

unset: 取消本地变量和环境变量

6) printenv

printenv 环境变量名:查看指定环境变量的值。

四、常见的环境变量

HOME:指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)。
PWD:显示当前目录。
SHELL:当前用户用的是哪种Shell。
HISTSIZE:保存历史命令记录的条数。
HOSTNAME:主机的名称,应用程序如果要用到主机名的话,通常是从这个环境变量中取得。
LOGNAME:当前用户的登录名。
LANG/LANGUGE:和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。

1)PATH

  • 功能和作用

​ PATH表示可执行程序的搜索目录,可执行程序包括Linux系统命令和用户的应用程序。

我们都知道之所以要加上 ./ ,是因为在程序运行时,需要说明该可执行程序所处的路径,执行一个命令的前提是先找到它。

如果我们愿意,也可以使用绝对路径来说明。

接下来我们思考一下为什么同为可执行程序的 ls 、 pwd 等等诸多指令在使用时不需要加 ./ 来说明其所处路径呢?

这是因为在系统中存在一个环境变量帮助我们在特定路径下搜索这些默认指令,这个环境变量叫做 PATH 。

如果可执行程序的目录不在PATH指定的目录中,执行时需要指定目录,这就是执行不在PATH中的可执行程序时为什么要加./或者绝对路径的原因。

  • 书写格式

​ PATH环境变量存放的是目录列表,目录之间用冒号:分隔,最后的圆点.表示当前目录。

export PATH=目录1:目录2:目录3:......目录n:.

​ PATH缺省包含Linux系统命令所在目录(/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin),如果不包含这些目录,Linux的常用命令也无法执行(要输入绝对路径才能执行)。

  • 添加格式
export PATH=$PATH:$HOME/bin 或 export PATH=$HOME/bin:$PATH

2)LD_LIBRARY_PATH

功能和作用

​ C/C++语言动态链接库文件搜索的目录,它不是Linux缺省的环境变量,但对C/C++程序员来说非常重要。

​ LD_LIBRARY_PATH环境变量存放的也是目录列表,目录之间用冒号:分隔,最后的圆点.表示当前目录,与PATH的格式相同。

书写格式

export LD_LIBRARY_PATH=目录1:目录2:目录3:......目录n:.

3)C_INCLUDE_PATH、CPLUS_INCLUDE_PATH

功能和作用

​ C_INCLUDE_PATH 指明C头文件的搜索路径,CPLUS_INCLUDE_PATH指明C++头文件的搜索路径。

添加格式

推荐

​ 一般情况下Linux是不会设置这些环境变量的。

​ 所以在对某一个环境变量第一次设置时,应该直接将其赋值为所需的目录,在之后的设置中再使用递归式的赋值;或者直接一次性将所有目录用:分隔开,一起赋值;或者索性不使用这些环境变量,而是在编译时使用-I参数来添加包含目录。

4)CLASSPATH

​ JAVA语言库文件搜索的目录,它也不是Linux缺省的环境变量,但对JAVA程序员来说非常重要。

​ CLASSPATH环境变量存放的也是目录列表,目录之间用冒号:分隔,最后的圆点.表示当前目录,与PATH的格式相同。

五、环境变量文件

本小姐介绍Linux下几个与环境变量配置相关的配置文件。

1. /etc/profile 文件

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

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

如果你有对 /etc/profile 有修改的话必须得手动执行 source /etc/profile,修改才会生效,此修改对每个用户都生效。

2. /etc/profile.d 目录(推荐)

​ /etc/profile 在每次启动时会执行 /etc/profile.d 下全部的脚本文件。

3. /etc/bashrc 文件

​ 为每一个运行终端的用户执行此文件。当终端被打开时,该文件被读取。如果你想对所有的使用终端的用户修改某个配置并在以后打开的终端都生效的话可以修改这个文件,修改这个文件不用重启,重新打开一个终端即可生效。

​ Ubuntu没有此文件,与之对应的是 /etc/bash.bashrc

4. ~/.bash_profile 或 ~/.bash_login 或 ~/.profile 文件(推荐)

​ 每个用户都可使用该文件输入专用于自己使用的 shell 信息,当用户登录时,该文件仅仅执行一次!默认情况下,它设置一些环境变量,执行用户的 ~/ .bashrc 文件。 此文件类似于 /etc/profile,也是需要手动执行 source ~/.profile,修改才会生效,/etc/profile 对所有用户生效,~/.profile 只对当前用户生效。

​ ~/.bash_profile、 ~/.bash_login 和 ~/.profile 文件往往只存在一个,这与Linux的发行版本有关。centos中为 ~/.bash_profile,ubuntu则为 ~/.profile

执行的顺序为:~/.bash_profile > ~/.bash_login > ~/.profile

5. ~/.bashrc 文件

​ 当用户登录时以及每次打开新的Shell时该文件都将被读取。(每个用户都有一个 ~/.bashrc 文件,在用户目录下) 此文件类似于 /etc/bashrc,不需要重启就可以生效,重新打开一个 bash 即可生效,/etc/bashrc 对所有用户新打开的 bash 都生效,但 ~/.bashrc 只对当前用户新打开的 bash 生效。不推荐在里面配置用户专用的环境变量,因为每开一个Shell,该文件都会被读取一次,效率肯定受影响。

6. ~/.bash_logout 文件

​ 当每次退出系统(退出 bash shell)时,执行该文件。可把一些清理工作的命令放到这文件中。

7. 执行顺序

1. /etc/profile
2. /etc/bashrc
3. /etc/profile.d
4. ~/.bash_profile | ~/.bash_login | ~/.profile
5. ~/.bashrc

六、获取环境变量

1. 全局变量environ

environ 变量是一个char** 类型,存储着系统的环境变量

实例:

执行结果:

2. 命令行参数

也可以通过命令行参数传递环境变量

实例:

执行结果:

3. getenv

要想直接获取某个环境变量,也可以调用函数去获取,可以使用库函数getenv()获取环境变量。

举例:通过getenv获取环境变量PWD, 实现自己的PWD指令:

#include<stdio.h>
#include<stdlib.h>

int main()
{
    char*pwd=getenv("PWD");
    if(pwd==NULL)
        perror("getenv");
    else
        printf("%s\n", pwd);              
    return 0;                                
}                                            

标签:profile,知识点,用户,环境变量,etc,Linux,PATH,目录
From: https://www.cnblogs.com/yikoulinux/p/17987939

相关文章

  • Linux根目录下各文件目录的作用
    Linux根目录下各文件目录的作用bin用户二进制可执行文件boot系统启动引导文件dev[device]系统中使用的外部设备,但不是放的外部设备的驱动。一个访问这些外部设备端口如:/dev/cdrom可以看见光驱中的文件etc整个系统配置文件相当于C:\windwos\System32\drivers,用来存放......
  • Mysql在Linux运行时新增配置文件提示:World-wrirable config file '/etc/mysql/conf.d/
    场景docker-compose入门以及部署SpringBoot+Vue+Redis+Mysql(前后端分离项目)以若依前后端分离版为例:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/128372122在Centos服务器上使用docker-compose部署mysql后,未配置数据卷映射的my.cnf配置文件。再将服务全部dow......
  • Linux可以零基础学习吗?需要学什么?
    想要从事IT行业,但是有不想要学习编程该选择哪门技术合适呢?当然是Linux运维了。Linux是市场上非常受欢迎的技术,应用范围广泛,就业前景好,受到了很多人的喜欢。那么问题来了,Linux运维零基础可以学习吗?在服务器市场上,Linux系统因为稳定安全、免费开源和高效便捷等优点在市场占......
  • MySQL100题知识点
    https://testerhome.com/articles/349721、select*查询带来的不确定性2、SELECTemp_name,salary*12+COALESCE(bonus,0)FROMemployee;COALESCE函数用于将空值转换为03、SELECTemp_name,salary*12+COALESCE(bonus,0)AS"全年收入"FROMemployee;AS为......
  • 转载:Linux 问题故障定位的技巧大全
    转载:https://mp.weixin.qq.com/s/vzG9y7Uh1xGstGbopGBvjw 1、背景有时候会遇到一些疑难杂症,并且监控插件并不能一眼立马发现问题的根源。这时候就需要登录服务器进一步深入分析问题的根源。那么分析问题需要有一定的技术经验积累,并且有些问题涉及到的领域非常广,才能定位到问......
  • linux内核-1.Linux 内核顶层 Makefile 详解
    1kernel编译初体验编译内核之前需要先在ubuntu上安装lzop库:sudoapt-getinstalllzopmakeARCH=armCROSS_COMPILE=arm-linux-gnueabihf-distcleanmakeARCH=armCROSS_COMPILE=arm-linux-gnueabihf-imx_v7_defconfigmakeARCH=armCROSS_COMPILE=arm-linux-gnueabih......
  • Linux新手村必备!这些常用操作命令你掌握了吗?
    在计算机的世界里,Linux操作系统以其强大的功能和灵活性受到了广大程序员和IT爱好者的喜爱。然而,对于初学者来说,Linux的操作命令可能会显得有些复杂和难以理解。今天,我们就来一起探索一些Linux常用操作命令,让你的计算机操作更加流畅。一、目录操作首先带大家了解一下Linux系统目......
  • Linux命令:passwd 修改用户密码
    passwd命令详细使用passwd修改用户账户的密码。普通用户只能修改自己的密码,超级管理员可以修改其他用户账户的密码。passwd也会修改『账户』或者密码的有效期限。1.超级管理员修改其他用户密码$sudopasswduser1输入两次密码,两次需要相同。密码不能少于8个字符。2.普......
  • 转载——Linux/Macos环境下使用 steamcommunity 302 教程
    原博:https://www.dogfight360.com/blog/2319/steamcommunity302后端使用caddy,在生成所有配置文件后可直接迁移到Linux/Macos环境下使用1.首先要在Windows环境/Wine下运行steamcommunity302并在设置里打勾需要开启的功能,然后正常启动服务 2.前往caddy/release页下载......
  • Linux 下安装 Jenkins 和使用 配置
    安装:要在Linux上安装Jenkins并进行配置,您可以按照以下步骤进行操作:步骤1:安装JavaJenkins依赖于Java环境,因此首先需要在您的Linux系统上安装Java。可以使用以下命令检查是否已安装Java:java-version如果您看到Java的版本信息,则已经安装了Java。否则,您可以按照以下步骤安装Java:sudo......