一、概述
这里的命令,是指终端命令。命令类似于ls、vim、gcc命令等。
命令的本质也就是可执行程序。
也就是说,控制台执行命令,也就是系统寻找到对应的可执行程序,加载并创建进程执行。关于终端命令的具体执行流程,这里不细说。本文重点放在如何自定义命令。
二、具体操作
1. 自定义可执行文件
// 源代码 hello.c
# include <stdio.h>
int main()
{
printf("Hello World");
return 0;
}
// --------------------------------
// 终端编译文件,生成hello的可执行文件
// gcc hello.c -o hello
打开终端,切换到 hello 的所在目录, 测试hello是否可运行;
./hello // ./不可少,不加./ ,系统不会在当前目录寻找hello,也就无法去执行hello的可执行文件
到现在,还有两个问题
- 那就是./hello只在当前有hello文件的目录可用,切换到其他目录就不行了。
- 必须加./才可用,不加出错。
2. 添加自定义指令
这一步,就解决上文提到的两个问题。
简单分析: 这两个问题的出现可以归于一点原因,系统找不到名为hello的可执行文件,所以解决问题的关键是让系统在任何目录都能通过hello找到hello文件,并加载运行。那么就要设置环境变量。
再细说设置环境变量之前,我们先简单看看环境变量长什么样。
终端输入命令:
env | grep PATH
bash:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:
发现输出了一长段字符,以":"分隔, 在细看,我们能找到我们熟悉的,可能有/bin、 /usr/bin等等,这些都是系统的环境变量。说白了也就是一串以“:”分隔的目录路径。
然后我们在说说,终端直接输入hello和输入.\hello的区别
./hello # 系统在当前文件夹下找名为hello的可执行文件。找到则运行,未找到则会给出错误信息。
hello # 系统不会在当前目录下寻找文件,而是直接到环境变量指明的目录下去找文件,找到则直接加载运行;否则会给出错误信息。
到这一步,你应该大概已经知道怎么做了吧?如果没有任何思路,建议在看一遍。
根据上文的分析,我们可以主要有两种方式使得我们自定义的命令(可执行文件)在任何目录下生效。
一、不改变环境变量
将可执行文件直接移至系统已经设置好的环境变量对应的目录下。
比如:
mv hello /usr/bin
or
mv hello /bin
…
注意: 这其中又涉及这几个目录存放的二进制文件的访问区别, 这里不细说。
二、添加环境变量
**将hello文件所在的目录路径加入到环境变量中。**这里就涉及到环境变量的修改。
具体修改,链接已给。
这里只说明一点,那就是,在用修改PATH:value修改环境变量时,是覆盖式的。新值覆盖旧值,切记要加上原来的环境变量。
三、文章总结
总的来说,文章主要是以文字为主,没有带着读者一步一步的做,截图每一步用来展示。希望你能彻底搞懂。其实,过程中涉及的知识点还是比较多的,列举几个:
- /bin 、 usr/bin、 usr/sbin …这些环境变量设置的目录有什么区别呢?
- 环境变量
什么是环境变量?有什么作用?如何设置环境变量?- linux的配置文件
比如/etc/profile、~/.bashrc 。。。等又有什么作用、联系和区别。