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换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Linux samba共享慢的原因及解决方案

《Linuxsamba共享慢的原因及解决方案》:本文主要介绍Linuxsamba共享慢的原因及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux samba共享慢原因及解决问题表现原因解决办法总结Linandroidux samba共享慢原因及解决

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

Linux安装MySQL的教程

《Linux安装MySQL的教程》:本文主要介绍Linux安装MySQL的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux安装mysql1.Mysql官网2.我的存放路径3.解压mysql文件到当前目录4.重命名一下5.创建mysql用户组和用户并修

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Linux系统之dns域名解析全过程

《Linux系统之dns域名解析全过程》:本文主要介绍Linux系统之dns域名解析全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、dns域名解析介绍1、DNS核心概念1.1 区域 zone1.2 记录 record二、DNS服务的配置1、正向解析的配置