Linux友人帐之环境变量

news2024/11/19 18:31:33

一、环境变量

1.1 环境变量的概念

1. 什么是环境变量?

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

2. 为什么会有环境变量?

在Linux系统中,我们发现我们在执行一些指令时,比如ll等指令,直接就可以输入ll指令获得结果,而对于我们自己编译的程序,比如make之后的文件,就需要./文件才能执行。对于执行一个命令来说,我们知道,命令事实上也是一种文件,对于执行这个文件,我们就需要先找到这个文件,在将这个文件执行。而对于ll来说,其对应的文件事实上已经是Linux系统分配到全局的,也就是在默认路径(根目录),因此不需要指定路径搜索这个指令对应的文件,直接ll就代表从根目录查找从而执行。而对于make生成的程序,我们知道这个可执行程序是在当前路径下,并不在根目录中,因此我们也就无法直接输入文件名从而执行,而是需要找到这个文件对应的路径再去执行,因此./就代表着当前路径,而./此文件就代表找到这个文件的路径并且去执行它!

 command not found就意味着并没有从根目录找到这个命令对应的文件。

经过上面的描述,我们知道,如果我们将可执行程序也复制到根目录,那么就也可以直接输入文件名就可以执行该程序了

但是这么做是不好的,因为我们在根目录下拷贝就相当于下载了一个文件,这样不经过测试的指令程序事实上会污染系统的指令池的,因此为了改善这种方式,就有了环境变量的方式去处理这种问题!

1.2 环境变量PATH

env 命令

Linux env 命令是用于显示和定义环境变量的一个工具。环境变量是一些存储在系统中的特殊变量,它们可以影响系统的行为和用户的工作环境。例如,PATH 环境变量指定了系统在执行命令时要搜索的目录列表,LANG 环境变量指定了系统使用的语言和字符编码等。

使用 env 命令,你可以查看当前系统中已存在的环境变量,也可以在指定的环境中执行其他命令。env 命令有以下常用的参数:

  • -i:创建一个新的空白环境,不继承当前的环境变量。
  • -u:从当前环境中删除指定的变量。
  • –help:显示帮助信息。
  • –version:显示版本信息。

以下是一些 env 命令的使用示例:

  • 显示当前系统的全部环境变量信息:

    env

  • 删除当前系统中的指定环境变量,例如 LOGNAME:

    env -u LOGNAME

  • 定义当前系统中的指定环境变量值,例如 PWD:

    env PWD=/Dir

  • 在一个修改后的环境下执行命令,例如在 PATH 中添加一个新的目录并执行 perl 命令:

    env PATH=$PATH:/new/dir perl --version

$符号

PATH

为什么能够在系统中找到对应的指令呢?事实上系统中存在一个环境变量PATH,它能够去检索对应的指令,找到了就会去执行,找不到就会像上面一样提示not found,因此我们如果想用另一种方式去直接执行文件,就可以将这个文件路径添加到环境变量PATH中。

当我们查看PATH变量时,每一个:所间隔的就是一个检索的路径,因此只要把想直接执行的文件的路径也添加到这个里面,就能够检索到从而执行。 

自行设置环境变量(export 命令)

Linux export 命令是用于设置或显示环境变量的一个常用命令。环境变量是一些在 shell 中执行程序时,shell 会提供给程序的一组变量。环境变量可以影响程序的运行行为,例如 PATH 环境变量可以指定程序的搜索路径,LANG 环境变量可以指定程序的语言设置等。使用 export 命令,你可以新增,修改或删除环境变量,供后续执行的程序使用。export 的效力仅限于该次登录操作,如果你想永久地修改环境变量,你需要修改相关的配置文件,例如 ~/.bashrc 或 /etc/profile 等。

export 命令的基本语法是:

export [选项] [变量名]=[变量值]

其中,选项可以是以下之一:

  • -f 代表变量名中为函数名称。
  • -n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
  • -p 列出所有的 shell 赋予程序的环境变量。

如果没有指定选项和参数,export 命令会列出当前所有的环境变量及其值。

例如,如果你想设置一个名为 MYENV 的环境变量,值为 7,你可以输入:

export MYENV=7

如果你想查看当前所有的环境变量,你可以输入:

export -p

如果你想删除一个名为 MYENV 的环境变量,你可以输入:

export -n MYENV

注:对于export定义的本地变量,实际上是字符串类型,并且可以加双引号,也可以不加双引号,但是对于字符串来说,建议加上双引号,因为字符串可能会有空格这种字符。  

source 命令

Linux source 命令是一个用于在当前 shell 环境中读取和执行文件中的命令的内置命令。source 命令通常用于保留或更改当前 shell 中的环境变量,例如刷新配置文件,导入函数,或者执行脚本。source 命令的基本语法是:

source 文件名 [参数]

或者

. 文件名 [参数]

其中,. 是 source 命令的另一种写法,作用相同。文件名是要执行的文件的路径,参数是要传递给文件中的命令的参数。如果不指定文件名和参数,source 命令会列出当前 shell 的环境变量。

source 命令有以下几种常见的用法:

  • 刷新当前 shell 环境。如果在当前 shell 中修改了一些环境变量,例如别名,路径,语言等,可以使用 source 命令重新加载配置文件,使修改立即生效,而不需要注销或重启。例如,如果修改了 ~/.bashrc 文件中的别名,可以使用 source ~/.bashrc 或 . ~/.bashrc 来刷新当前 shell 环境。
  • 在当前环境下执行 shell 脚本。如果在一个 shell 脚本中使用了一些在当前 shell 中定义的变量,可以使用 source 命令在当前 shell 中执行该脚本,而不是启动一个新的子 shell。这样可以保证脚本中的变量能够被正确识别和使用。例如,如果在一个脚本 test.sh 中使用了一个在当前 shell 中定义的变量 website,可以使用 source test.sh 或 . test.sh 来执行该脚本。
  • 从脚本中导入 shell 函数到当前环境。如果在一个脚本中定义了一个或多个 shell 函数,并且想在当前 shell 中使用这些函数,可以使用 source 命令将这些函数导入到当前环境中。这样就可以在当前 shell 中直接调用这些函数,而不需要每次都运行脚本。例如,如果在一个脚本 func.sh 中定义了一个函数 foo,可以使用 source func.sh 或 . func.sh 来导入该函数到当前环境中,并且可以直接使用 foo 来调用该函数。

 自定义环境变量

通过指令 :export PATH=$PATH:/home/cfy/sbl/lesson13就可以将这个指令追加到PATH环境变量中。

1.3 其他常见环境变量 

  • HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
  • HOSTNAME:主机名
  • USER:当前用户名
  • PWD:当前系统路径
  • HISTSIZE:shell 能记忆的最多历史命令的条数
  • uname:

uname命令 

uname命令是一个Linux/Unix命令,用于显示操作系统的信息。它的语法如下:

```
uname [options]
```

常用的选项包括:

- `-a`:显示所有信息(默认选项)
- `-s`:显示操作系统的名称
- `-n`:显示主机名
- `-r`:显示内核版本号
- `-v`:显示操作系统的版本号
- `-m`:显示机器类型
- `-p`:显示处理器类型

例如,运行`uname -a`命令会显示所有信息,包括操作系统名称、主机名、内核版本号、操作系统版本号、机器类型和处理器类型。

 id命令

  •  Linux id命令是一个用于显示用户的ID,以及所属群组的ID的shell内建指令,它可以显示用户的UID(User ID)、GID(Group ID)以及附属于用户的所有组 ID
  • Linux id命令的基本语法是:

id [选项] [用户名称]

其中,[用户名称]是指定要显示的用户的名称,如果不指定,则默认为当前用户。[选项]是用来控制id命令的行为的参数,例如:

  • -g 或 --group:显示用户所属群组的ID。

  • -G 或 --groups:显示用户所属附加群组的ID。

  • -n 或 --name:显示用户,所属群组或附加群组的名称。

  • -r 或 --real:显示实际ID。

  • -u 或 --user:显示用户ID。

 1.4其他相关命令

set命令

Linux set命令是一个非常强大的命令,它可以让你控制shell的行为和环境。Linux set命令有两种用法,一种是不带任何参数,另一种是带有一个或多个参数。下面我将分别介绍这两种用法。

  • 不带任何参数的set命令:当你在shell中输入set命令后,它会显示当前shell的所有变量和函数,包括系统变量、用户变量和自定义函数。这些变量和函数的值可以用来配置shell的环境或者在脚本中使用。例如,你可以输入set | grep PATH来查看当前shell的PATH变量的值,或者输入set | grep hello来查看是否定义了名为hello的函数。
  • 带有一个或多个参数的set命令:当你在shell中输入set命令后,加上一个或多个参数,它会根据这些参数来改变shell的执行方式。这些参数可以分为两类,一类是以-开头的选项,另一类是以+开头的选项。以-开头的选项表示启用某种功能,以+开头的选项表示禁用某种功能。例如,你可以输入set -e来启用错误检测功能,或者输入set +e来禁用错误检测功能。

注意,我们所创建的本地变量(局部变量)不能被env找到,但是却可以被set找到,这也就说明了set能够找到shell本地的变量和环境变量,也就是局部变量和全局变量。

而对于set本身,因为里面既有环境变量又有本地变量,因此其内容远多于env,对于类似于续行符 \这样的符号,其内部也存在。

unset命令

  •  Linux unset命令是一个用于删除变量或函数的shell内建指令,它可以清除已定义的shell变量(包括环境变量)和shell函数,释放它们占用的内存空间
  • Linux unset命令的基本语法是:
  • unset [-fv] [变量或函数名称]

    其中,[变量或函数名称]是指定要删除的变量或函数的名称,可以是一个或多个。[-fv]是用来控制unset命令的行为的参数,例如:

  • -f:仅删除函数。

  • -v:仅删除变量。

  • Linux unset命令的使用示例如下:

    • 删除环境变量mylove及其对应的值,输入如下命令:

    unset -v mylove

    • 删除函数myfunc及其定义,输入如下命令:

    unset -f myfunc

    • 同时删除变量myvar和函数myfunc,输入如下命令:

    unset myvar myfunc

1.5 环境变量的意义

我们拿ls 指令举例:

我们发现,ls 后的指令为什么不需要./,而是直接输入文件名就行了呢?也就是为什么ls就知道这个文件的当前路径在哪里呢?

实际上,这是因为我们有一个环境变量PWD,通过PWD就能够找到对应的路径:

我们发现,当我们cd ..到什么路径,PWD就会变成什么路径。因此,ls 就是通过这个环境变量找到了这个文件。

既然环境变量中有PWD,那我们也可以自己实现PWD指令:

因此,环境变量的意义就在于其可以找到指定文件的路径。环境变量就相当于系统启动时加载到内部的全局变量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1088798.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

10个打工人必备AI神器,升职加薪靠AI

HI,同学们,我是赤辰,本期是第18篇AI工具类教程,文章底部准备了粉丝福利,看完后可领取!1. Runway(文字转视频AI工具) 只需要一句提示词就能精确生成你所想象的视频场景,还…

natapp内网穿透-将本地运行的程序/服务器通过公网IP供其它人访问

文章目录 1.几个基本概念1.1 局域网1.2 内网1.3 内网穿透1.4 Natapp 2.搭建内网穿透环境3.本地服务测试 1.几个基本概念 1.1 局域网 LAN(Local Area Network,局域网)是一个可连接住宅,学校,实验室,大学校…

百乐钢笔维修(官方售后,全流程)

文章目录 1 背景2 方法3 结果 1 背景 在给钢笔上墨的途中,不小心总成掉地上了,把笔尖摔弯了(虽然还可以写字,但是非常的挂纸),笔身没有什么问题,就想着维修一下笔尖或者替换一下总成。 一般维…

Vulnhub系列靶机---Raven: 2

文章目录 信息收集主机发现端口扫描目录扫描用户枚举 漏洞发现漏洞利用UDF脚本MySQL提权SUID提权 靶机文档:Raven: 2 下载地址:Download (Mirror) 信息收集 靶机MAC地址:00:0C:29:15:7F:17 主机发现 sudo nmap -sn 192.168.8.0/24sudo arp…

操作系统中的(进程,线程)

操作系统是一个搞管理的软件,它对上给各个应用程序提供稳定的运行环境;对下管理各种硬件设备。 进程 一个操作系统由内核和配套的应用程序组成。而进程就是操作系统内核中众多关键概念中的一个。进程通俗一点来讲就是一个已经跑起来的程序。 每个进程…

【数据结构与算法】二叉树的镜像实现

需求分析: 将所有节点的左子树与右子树交换,以达到交换前与交换后成为镜像的效果。 如图: 实现代码: 先准备一个二叉树具有节点类,添加左右子节点的方法和层序遍历方法。 /*** author CC* version 1.0* since2023/10…

数学术语之源——“齐次(homogeneity)”的含义

1. “homogeneous”的词源 “homogeneous”源自1640年代,来自中古拉丁词“homogeneus”,这个词又源自古希腊词“homogenes”,词义为“of the same kind(关于同一种类的)”,由“homos”(词义“same(相同的)”,参见“ho…

msvcr110dll是干嘛的,win系统提示缺少msvcr110.dll解决步骤分享

今天,要和大家探讨一个非常重要的话题——由于找不到msvcr110.dll无法执行代码的五种解决方案。首先,请允许我为大家简要介绍一下msvcr110.dll这个文件。 msvcr110.dll是Visual Studio 2012的一个动态链接库文件,它是Microsoft Visual C 2012…

如何报考产品总监认证(UCPD)?

从产品经理到产品总监,是我们职业生涯中锦鲤化龙的一次历程。中、高级管理人员所需要的知识和能力常常会泾渭分明,甚至大相迳庭。所以,当我们走向高级管理岗位前,尤其是有机会应聘大厂总监岗位时,我们需要一张产品总监…

ESP32网络开发实例-从SPIFFS加载Web页面文件

从SPIFFS加载Web页面文件 文章目录 从SPIFFS加载Web页面文件1、应用介绍2、软件准备3、硬件准备4、Web页面代码与SPIFFS文件系统上传4.1 Web页面代码实现4.2 Web页面代码上传5、Web服务器代码实现在文中,将展示如何构建一个 Web 服务器,为存储在 ESP32 的SPIFFS文件系统中的 …

sklearn处理离散变量的问题——以决策树为例

最近做项目遇到的数据集中,有许多高维类别特征。catboost是可以直接指定categorical_columns的【直接进行ordered TS编码】,但是XGboost和随机森林甚至决策树都没有这个接口。但是在学习决策树的时候(无论是ID3、C4.5还是CART)&am…

使用 GitHub Action 自动更新 Sealos 集群的应用镜像

在 IT 领域,自动化无疑已成为提高工作效率和减少人为错误的关键。Sealos 作为一个强大的云操作系统,已经为许多企业和开发者提供了稳定可靠的服务。与此同时,随着技术不断发展,集成更多的功能和服务变得尤为重要。考虑到这一点&am…

【学习笔记】项目进行过程中遇到有关composer的问题

composer.json内容详解 以项目中的composer.json为例,参考文档。 name:composer包名type:包的类型,project和library两种keywords:关键词,方便别人在安装时通过关键词检索(没试过,好…

成为一个黑客要多久?

一个暑假能成为黑客吗?资深白帽黑客告诉你答案,如果你想的是能到阿里五角大楼内网四处溜达,但是不可能的,但是成为一个初级黑客还是绰绰有余,你只需要掌握好渗透测试、外攻防、数据库等基本内容,搞懂外部安…

探索云原生技术之容器编排引擎-Kubernetes/K8S详解(9)

❤️作者简介:2022新星计划第三季云原生与云计算赛道Top5🏅、华为云享专家🏅、云原生领域潜力新星🏅 💛博客首页:C站个人主页🌞 💗作者目的:如有错误请指正,将…

volatile为什么无法保证原子性

假设定义 volatile int i 0; 现在2个线程同时 i,为什么数据还可能会出错?一起来看下图,虽然volatile的机制是:如果volatile修饰的变量有修改,那么会将变更内容写回主内存,同时让其他线程工作内存的该变量缓…

5、使用 pgAdmin4 图形化创建和连接 PostgreSQL 数据库

通过上几篇文章我们讲解了如何安装 PostgreSQL 数据库软件和 pgAdmin4 图形化管理工具。 接下来几篇文章我们将继续学习如何通过 pgAdmin4 管理工具图形化创建和连接 PostgreSQL 数据库。 今天这篇文章首先让我们来了解下什么数据库和数据库管理系统,对数据库和数…

nnunetv2训练报错 ValueError: mmap length is greater than file size

目录 报错解决办法 报错 笔者在使用 nnunetv2 进行 KiTS19肾脏肿瘤分割实验的训练步骤中 使用 2d 和3d_lowres 训练都没有问题 nnUNetv2_train 40 2d 0nnUNetv2_train 40 3d_lowres 0但是使用 3d_cascade_fullres 和 3d_fullres 训练 nnUNetv2_train 40 3d_cascade_fullres …

【C语言】atoi函数的模拟

atoi对于初学者来说大概率是一个陌生的函数 但不要害怕,我们可以通过各种网站去查询 例如: cplusplus就是一个很好的查询网站 目录 函数介绍模拟实现需要注意的点 函数介绍 我们发现这是一个将字符串转换为整形数字的函数 例如: int main()…

由论文写作到知识教育传承,智者善用,扶AIGC踏新程!

在学术领域中,诚信是不可动摇的基石。但是,令人震惊的事件发生了,竟有学术论文作者将ChatGPT上操作按钮的短语「Regenerate Response」毫无保留地援引到自己的论文中,更令人惊讶的是,审稿编辑竟然未能察觉这一事实&…