首页 > 系统相关 >[Linux]环境变量

[Linux]环境变量

时间:2024-11-19 23:07:36浏览次数:1  
标签:文件 shell 用户 char bashrc Linux 环境变量

环境变量

环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,是操作系统为了满足不同的应用场景预先在系统内预先设置的一大批全局变量。

常用的环境变量

  1. PATH:指定了操作系统在查找可执行文件时搜索的目录列表,目录之间用冒号:分隔。当在命令行中输入一个命令时,操作系统会在PATH中列出的目录中依次查找该命令的可执行文件。
  2. HOME:用户的主目录路径。
  3. USER:当前用户的用户名。
  4. PWD:显示当前目录。
  5. SHELL:当前用户用的是哪种Shell。
  6. HISTSIZE:保存历史命令记录的条数。
  7. HOSTNAME:主机的名称,应用程序如果要用到主机名的话,通常是从这个环境变量中取得。
  8. LOGNAME:当前用户的登录名。

查看环境变量

  1. echo:查看特定环境变量的值。

  2. env/printenv:列出所有的环境变量及其值。

  3. set:直接使用set列出当前 shell 中的所有变量和函数。这包括环境变量、局部变量、位置参数(命令行参数)以及 shell 函数。

    当直接在命令行定义变量时,就是临时变量,可以使用export将变量导入到全局变量中。

添加环境变量

在用户的家目录(~)下,有.bash_profile.bashrc两个文件,当用户登录时系统会自动加载。

.bash_profile:通常在用户登录时被读取,用于设置特定于用户的环境变量和启动程序。

.bashrc:它包含了用户定义的别名、函数、自定义环境变量等。每当一个新的 Bash shell 启动时(包括非登录 shell,如在终端中打开新的窗口或启动一个新的 shell 会话),.bashrc文件会被读取。用于设置通用的 shell 配置,这些配置适用于所有的 Bash shell 会话,无论是否是登录 shell。

添加临时环境变量

export:这种方式设置的环境变量只在当前 shell 会话中有效。一旦关闭该 shell 或启动新的 shell,这个环境变量将不再存在。

注意:在添加新的环境变量到PATH的时候要将原来的环境变量带上(在路径后加上$PATH),否则的话就会直接覆盖原来的环境变量(若是不小心没有带,重新登录即可恢复)。

添加永久环境变量

针对特定用户

  1. 修改 .bashrc 文件或 .profile 文件或 .bash_profile 文件:
    • 这些文件通常位于用户的主目录(~)下。可以使用文本编辑器打开其中一个文件(一般推荐修改 .bashrc 文件,因为它在每次启动新的 Bash shell 时都会被读取)。
    • 在文件中添加以下内容来设置环境变量:export VAR_NAME=value。例如,要设置一个名为 MYENV_VAR 的环境变量并赋值为 /usr/local/myapp,可以在文件中添加 export MYENV_VAR=/usr/local/myapp
    • 保存文件后,为了使更改生效,可以在当前终端中运行 source ~/.bashrc(如果修改的是 .bashrc 文件)或重新打开一个新的终端窗口。
  2. 注意事项:
    • 这种方法只对当前用户有效。如果需要为系统中的所有用户设置永久环境变量,则需要使用系统级别的配置方法。

针对所有用户

  1. 修改 /etc/profile 文件或 /etc/environment 文件:
    • /etc/profile 文件在系统启动和用户登录时被读取,可用于设置系统范围的环境变量。
    • /etc/environment 文件也可以用于设置系统范围的环境变量,但它的语法更加严格,只接受 “环境变量名 = 值” 的形式,不支持在其中执行命令。
    • 使用文本编辑器打开其中一个文件,添加环境变量的设置,例如在 /etc/profile 文件中添加 export GLOBAL_VAR=/opt/shared
    • 更改这些文件通常需要管理员权限。保存文件后,新的环境变量将在下次系统启动或用户登录时生效。
  2. 注意事项:
    • 修改系统级别的配置文件需要谨慎,确保对文件的更改是正确的,以免影响系统的稳定性。
    • 在进行任何更改之前,最好备份这些文件,以便在出现问题时可以恢复到原始状态。

删除环境变量

临时删除

  1. 在当前 shell 会话中使用 unset 命令:
    • 基本语法是 unset VAR_NAME,其中 VAR_NAME 是要删除的环境变量的名称。
    • 例如,要删除名为 MYVAR 的环境变量,可以在终端中输入 unset MYVAR
    • 之后使用 echo $MYVAR 命令将不会输出任何内容,表明该环境变量已被删除。
  2. 注意事项:
    • 这种方法仅在当前 shell 会话中删除环境变量。如果打开新的 shell 窗口或重新登录,该环境变量可能会再次出现(如果它是在其他配置文件中设置的)。

永久删除

  1. 针对特定用户:
    • 如果环境变量是在用户的 .bashrc.profile.bash_profile 文件中设置的,可以使用文本编辑器打开相应的文件,找到设置该环境变量的行并删除它。
    • 例如,如果在 .bashrc 文件中有 export MYENV_VAR=/usr/local/myapp,删除这一行后保存文件。然后在当前终端中运行 source ~/.bashrc 使更改生效,或者重新打开一个新的终端窗口。
  2. 针对所有用户(系统范围):
    • 如果环境变量是在系统级别的配置文件如 /etc/profile/etc/environment 中设置的,需要使用管理员权限打开这些文件进行编辑。
    • 找到设置该环境变量的行并删除它。保存文件后,新的环境变量将在下次系统启动或用户登录时不再生效。
  3. 注意事项:
    • 在编辑系统级别的配置文件时要格外小心,确保对文件的更改是正确的,以免影响系统的稳定性。
    • 在进行任何更改之前,最好备份这些文件,以便在出现问题时可以恢复到原始状态。

在进程上下文中获取环境变量的三种方式

  1. getenv()

    函数原型:char *getenv(const char *name);

    在C/C++中getenv()接受一个字符串参数,表示要获取的环境变量的名称,获取成功返回一个指向该环境变量值的字符串指针,失败返回NULL

    使用示例

    int main()
    {
        char *path = getenv("PATH");
        if (path != NULL)
        {
            printf("environment variable is : %s\n", path);
        }
        else 
        {
            printf("environment is not found !!!\n");
        }
        return 0;
    }
    
  2. char* env[]

    char *env[] 声明了一个字符指针数组,数组的最后一个元素是 NULL 指针。数组中的每个元素都是一个指向字符的指针,而这些指针可以指向表示环境变量及其值的字符串。当一个程序启动时,操作系统会将环境变量信息以这种字符指针数组的形式传递给程序的 main 函数(作为 main 函数的第三个参数,不过这个参数是可选的,形式通常为 int main(int argc, char *argv[], char *env[]))。

    使用示例

    #include <stdio.h>
    
    int main(int argc, char *argv[], char *env[])
    {
        for (int i = 0; env[i]; i++)
        {
           printf("env[%d] : %s\n", i, env[i]); 
        }
        return 0;
    }
    
    
  3. char **environ

    它是一个指向字符指针数组的指针,和使用char *env[]类似,遍历environ数组时,数组的结尾是NULL指针。

    注意:libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时 要用extern声明。

    使用示例

    #include <stdio.h>
    int main()
    {
        extern char **environ;
        for (int i = 0; environ[i]; i++)
        {
            printf("environ[%d] : %s\n", i, environ[i]);
        }
        return 0;
    }
    
    

标签:文件,shell,用户,char,bashrc,Linux,环境变量
From: https://www.cnblogs.com/wzhiheng/p/18555818

相关文章

  • Linux常用基础指令-ls指令
    1.ls指令ls用于列出目录内容。显示指定目录下的文件和子目录,可以通过不同的选项来显示文件的详细信息。1.1.基本语法ls[选项][文件或目录]1.2.常用选项ls列出当前目录下的文件和子目录,显示的内容按照字母顺序排列。lsls-l使用长格式列出目录内容。每个文件或目......
  • linux启动流程
    Linux启动流程笔记系统目录结构/boot目录内容[root@web01boot]#lsconfig-4.18.0-305.3.1.el8.x86_64initramfs-4.18.0-305.3.1.el8.x86_64kdump.imgefiloadergrub2......
  • Oracle Linux 9.5 正式版发布 - Oracle 提供支持 RHEL 兼容发行版
    OracleLinux9.5正式版发布-Oracle提供支持RHEL兼容发行版OracleLinuxwithUnbreakableEnterpriseKernel(UEK)&RedHatcompatiblekernel(RHCK)请访问原文链接:https://sysin.org/blog/oracle-linux-9/查看最新版。原创作品,转载请保留出处。作者主页:sysin.org......
  • Linux基础命令一
    一、基本命令1.1man手册基本使用man具体命令空格翻页,回车下一页q退出man内容分区1:可执行程序或shell命令2:系统调用3:库调用4:特殊文件5:文件格式与约定6:游戏7:概览、约定及杂项8:超级用户和系统管理员命令9:内核例程可以使用man7hostname,指定看对应分区的内......
  • 【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
    Linux学习笔记:https://blog.csdn.net/2301_80220607/category_12805278.html?spm=1001.2014.3001.5482前言:在多任务操作系统中,进程优先级是影响任务调度的重要因素之一。操作系统通过设置不同的优先级来控制进程对CPU的使用权,从而实现资源的高效利用和任务的公平分配。本文......
  • Linux线程退出、资源回收、资源清理的方法
    参考 Linux线程退出、资源回收、资源清理的方法_linux线程退出会释放哪些资源-CSDN博客 首先说明线程中要回收哪些资源,理解清楚了这点之后在思考资源回收的问题。1、子线程创建时从父线程copy出来的栈内存;线程退出有多种方式,如return,pthread_exit,pthread_cancel等;线......
  • conda linux 管理python 环境
    一、conda是什么?Conda是一个开源的软件包管理系统和环境管理系统,用于在不同的操作系统上安装、运行和管理多个软件包和环境。它可以用于管理Python软件包和其他编程语言的软件包,具有自动解决依赖关系、创建独立环境、轻松切换环境等功能。Conda提供了一个命令行界面和一个图形界......
  • Linux权限深入
    Linux是一个多用户、多任务的操作系统,其权限管理系统是保障系统安全性的重要组成部分。通过合理的权限设置,Linux能有效地控制用户对文件和目录的访问,防止恶意操作。 1.Linux权限基础1)文件权限概述Linux系统中每个文件或目录都与三组权限相关。所有者(Owner):文件的创建......
  • Linux系统学习笔记:第一天
    Linux:第一天笔记引言为什么选择LinuxLinux是一个操作系统,开源的,免费的,是一个基于文件的操作系统,所有的一切都是针对文件进行的。内部是基于一个控制器体积一般比较小(决定了嵌入式产品,它的硬件资源比较紧缺)对功耗的要求特定的应用越来越智能化Linux的指令起步......
  • 【搬运】Linux Command Syntax – Arguments & Options Explained
    本文摘自:https://thenerd.academy/linux-command-syntax-arguments-options-explained/ ThislessonisallabouttheLinuxcommandsyntax!We’regoingtoexplorehowtocustomizethebehaviorofourcommandsbyusingargumentsandoptions.So,fastenyour......