文章目录
问题介绍
在Linux下,为什么我们自己写的可执行文件需要指定路径才可以执行,而系统命令却不需要?
如何让我自己的命令在没有路径的情况下也能执行?
Linux环境变量的概念:
Linux 环境变量是存储在操作系统中的一个值,用于控制应用程序的行为。 环境变量可以在系统启动时设置,也可以在运行时动态设置。 环境变量常用于存储系统级的配置信息,如路径、语言、用户名等。在Linux系统中,环境变量以键值对的形式存在,键是变量的名称,该值是变量的内容。 可以使用 和 set 等命令行工具来设置和查看环境变量。 应用程序可以通过读取环境变量来获取配置信息来实现不同的行为。
容易明白:
类似于语言学习中的变量int a = 1; a 是一个变量,
1 是当前存储在变量中的值。 在操作系统的学习中,存在着很多变数。 变量的性质不同,作用也不同。 到处都有变数。 顾名思义,环境变量与程序执行的环境有关。 问题涉及到环境变量的问题。
常见/需要了解的环境变量:
PATH :指定命令的搜索路径
HOME:指定用户的主工作目录(即用户登录Linux系统时的默认目录)
SHELL :当前的Shell,其值通常为/bin/bash。
环境变量相关操作(附源码)
如何查看环境变量:
方法一、二、三:
运行结果:
方法4:echo $NAME //NAME:你的环境变量名称。
局部变量和环境变量
在Linux中,局部变量(local)和环境变量()是两种不同类型的变量,它们具有不同的作用域和生命周期。
行动范围:
生命周期:
设置和访问:
使用:
简而言之,局部变量和环境变量在作用域、生命周期、设置和访问方法、用途等方面有所不同。 局部变量仅在定义它们的代码块内有效,用于存储临时数据; 而环境变量在整个系统中都是可见的,用于存储系统级配置信息。
环境指令
在Linux中,env是一个命令行工具,用于显示当前进程的环境变量或在指定环境中执行给定的命令。
env 命令有两种常见用法:
显示当前进程的环境变量:
$ env
这列出了当前进程的所有环境变量及其对应的值。 输出格式为key=value格式。
在指定的环境中执行给定的命令:
$ env -i <key1>=<value1> <key2>=<value2> ... <command>
这将在指定的环境变量下执行给定的命令。 可以通过-i选项清除当前环境变量,然后可以通过=的形式设置新的环境变量。 最后,指示要执行的命令。
例如,要在清除环境变量的情况下执行 ls 命令,可以使用以下命令:
$ env -i ls
如果要执行指定环境变量的命令,可以使用以下命令:
$ env VAR1=value1 VAR2=value2 <command>
例如,要在设置PATH环境变量后执行ls命令,可以使用以下命令:
$ env PATH=/usr/local/bin ls
env命令的主要作用是在不同的环境变量下执行命令,或者查看当前进程的环境变量。 它经常用在脚本中来控制命令执行的环境,或者作为调试工具来检查环境变量的设置。
您可以通过 man env 命令查看 env 命令的更多详细信息和选项。
功能
在Linux中,()是一个C语言函数,用于获取指定环境变量的值。
()函数的原型如下:
#include
char *getenv(const char *name);
该函数接受一个字符串参数名称,表示要获取的环境变量的名称。 它返回一个指向环境变量值字符串的指针,如果找不到指定的环境变量,则返回 NULL。
下面是使用 () 函数的示例:
#include
#include
int main() {
char *path = getenv("PATH");
if (path != NULL) {
printf("PATH: %s\n", path);
} else {
printf("PATH environment variable not found\n");
}
return 0;
}
在本例中,我们使用 () 函数获取名为 PATH 的环境变量的值并将其存储在路径指针变量中。 然后,我们根据返回值判断环境变量是否已经成功获取,并打印出相应的结果。
需要注意的是,()函数返回的字符串指针指向环境变量的内部存储空间,所以不要尝试修改返回的字符串。 如果需要修改环境变量的值,应该使用相关函数,如()或()。
另外,()函数是标准C库提供的函数,定义在头文件中。 在使用()函数之前需要包含这个头文件。
临时环境变量创建(生命周期就是这次连接Linux)
变量名=变量值
局部变量创建(生命周期在此文件中)
变量名=变量值
命令行参数
argc的含义是指针数组argv中包含的字符串数量。
argv 是接受命令选项的指针数组
env 是接受环境变量的指针数组
argv和argc可以标准化命令的格式,并且可以支持命令的多个选项。
以上3个参数是bash辅助输入(第一阶段粗略理解)
问题解释
在Linux下,为什么我们自己写的可执行文件需要指定路径才可以执行,而系统命令却不需要?
1.默认情况下,子进程会继承父进程的环境变量。 十元的环境变量来自bash,bash的环境变量来自系统文件;
2、我们执行的命令都是在进程中执行的;
3、比如PATH HOME环境变量几乎存在于每个进程中;
4、系统自带的可执行文件可以通过PATH环境变量找到文件位置,不需要传入。
如何让我自己的命令在没有路径的情况下也能执行?
1 通过将我们自定义文件的路径添加到PATH环境变量中
2、PATH变量存储多个系统程序自带的路径,多个路径之间用“:”符号分隔。 如果要添加的话,需要按照这个格式。
3.使用set命令set PATH=PATH+:设置的路径;
(错误使用指令不会造成损失,只需重新连接Linux系统即可,需要在配置文件中操作永久更改,但不建议这样做)