Linux友人帐之环境变量

2023-10-13 21:04
文章标签 linux 环境变量 友人

本文主要是介绍Linux友人帐之环境变量,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、环境变量

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指令:

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

这篇关于Linux友人帐之环境变量的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/205859

相关文章

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

[Linux]:进程(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 进程终止 1.1 进程退出的场景 进程退出只有以下三种情况: 代码运行完毕,结果正确。代码运行完毕,结果不正确。代码异常终止(进程崩溃)。 1.2 进程退出码 在编程中,我们通常认为main函数是代码的入口,但实际上它只是用户级

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

如何编写Linux PCIe设备驱动器 之二

如何编写Linux PCIe设备驱动器 之二 功能(capability)集功能(capability)APIs通过pci_bus_read_config完成功能存取功能APIs参数pos常量值PCI功能结构 PCI功能IDMSI功能电源功率管理功能 功能(capability)集 功能(capability)APIs int pcie_capability_read_wo