【Linux系统化学习】揭秘 命令行参数 | 环境变量

=========================================================================

个人主页点击直达:小白不是程序媛

Linux专栏:Linux系统化学习

代码仓库:Gitee

=========================================================================

目录

命令行参数

环境变量

PATH

查看PATH

[PWD](#PWD)

查看环境变量PWD

[HOME](#HOME)

查看系统支持的环境变量

获取环境变量


命令行参数

在C/C++编程语言中我们有一个main主函数,在刚开始接触C语言时我们会发现这个主函数其实是有参数的,我们不妨在Linux系统中将其中两个参数使用起来看看其运行结果。

复制代码
  1 #include<stdio.h>
  2 int main(int argc, char*argv[])
  3 {
  4     int i=0;
  5     for(i=0;i<argc;i++)
  6     {
  7         printf("%d %s\n",i,argv[i]);                                                                                                    
  8     }
  9     return 0;
 10 }

怎么会是这样的输出?我们再试试

好像有点眉头了,这里的第一个参数代表着shell命令行中我们以空格为间隔的字符串的个数,即为我们第二个字符串数组的参数,第二个字符数组参数代表我们以空格为间隔的每个字符串。

这样我么就可以联想到我们在Linux下执行的各种命令

自己的命令创建文件命令

复制代码
  1 #include<stdlib.h>
  2 #include<stdio.h>
  3 int main(int argc, char*argv[])
  4 {
  5     if(argc!=2)
  6     {
  7         printf("touch:miss file operand");
  8     }
  9     FILE* fp=fopen(argv[1],"w");                                                                                                                                                                        
 10     if(fp!=NULL)
 11         fclose(fp);
 12     return 0;
 13 }

命令行参数可以支持各种指令级别的命令行选项的设置


环境变量

  • 环境变量 (environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数
  • 如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。
  • 环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性

为什么我的命令要带 . / 呢?

执行一个命令先要找到一个对应的可执行程序, . / 代表当前路径。

PATH

在执行一些系统命令时候我们可以直接执行 ,也可以使用路径执行

可以直接执行系统命令是因为我们PATH环境变量记录着我们命令所在的路径,因此我们可以不用输入路径。

查看PATH

echo $PATH

在PATH追加自己命令的路径

PATH= $PATH:路径

我们也可以之间把自己可执行程序的路径拷贝到PATH的路径下,这就是安装程序;将自己程序的路径从PATH中删除就是程序的卸载。

注意:

自己误操作修改了PATH中的所有内容不要慌张重新登入服务器就好了。

$PWD

当你输入pwd 命令显示当前路径时,你当前所在路径是保存在PWD环境变量里的;

查看环境变量PWD

echo $PWD

$HOME

在我们的服务器中分普通用户和root用户,普通用户和root用户最大的区别就是权限和家目录的不同,在前面的文章我们已经介绍了权限的区别;今天我们来看看家目录的区别。

  • root用户的家目录为:/root
  • 普通用户的家目录为:/home/XXX

系统是如何做到区分root用户和普通用户的呢?

在我们登入我们的服务器时需要输入用户名和密码,服务器进行认证形成各种环境变量,此时根据用户名初始化环境变量HOME,登入上去服务器进入(cd $HOME)用户对应的家目录。


查看系统支持的环境变量

我们可以使用指令对Linux系统的环境变量进行查看。

env


获取环境变量

我们也可以使用函数对环境变量进行获取完成一些操作。

getenv("环境变量名称")

获取USER环境变量区别限制root用户和普通用户。

复制代码
    1 #include<stdlib.h>
    2 #include<stdio.h>
    3 #include<string.h>
    4 int main(int argc, char*argv[])                                                               
    5 {
    6     char * name = getenv("USER");
    7     if(strcmp(name,"root")==0)
    8     {
    9         printf("%s:合法用户\n",name);
   10         printf("I'm root!!!\n");
   11     }
   12     else
   13     {
   14         printf("%s:非法用户\n",name);
   15            exit(-1);
   16     }
   17        return 0;
   18 }

今天对Linux下进命令行参数和环境变量分享到这就结束了,希望大家读完后有很大的收获,也可以在评论区点评文章中的内容和分享自己的看法。您三连的支持就是我前进的动力,感谢大家的支持!!!

相关推荐
阿杰 AJie1 分钟前
如何将公司公网ip绑定到服务器和域名
服务器·网络·tcp/ip
米优2 分钟前
srs媒体流服务器二次开发-实现读取配置文件功能
服务器·后端·媒体
BJ_Bonree2 分钟前
数智先锋 | Bonree ONE助力温氏集团构建“零一五十”智能运维体系,夯实智慧养殖数字底座!
运维
m0_726965983 分钟前
【服务器二】下载拓展成功
运维·服务器
漉水浮沙5 分钟前
cat /proc/interrupts 验证nvme 中断聚合
服务器
元亓亓亓7 分钟前
LeetCode热题100--5. 最长回文子串--中等
linux·算法·leetcode
可爱又迷人的反派角色“yang”8 分钟前
k8s(二)
linux·运维·docker·云原生·容器·kubernetes·云计算
就叫飞六吧10 分钟前
Java “跨平台”指的是(.class 字节码)跨平台,而不是指 JVM 这个软件本身跨平台
服务器·笔记
硬核子牙14 分钟前
有人质疑我ebpf水平
linux
故事不长丨16 分钟前
C#File文件操作全解析:从基础用法到异常处理
服务器·开发语言·visualstudio·c#·文件操作·io流·file