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

相关推荐
云空8 分钟前
《DeepSeek 网页/API 性能异常(DeepSeek Web/API Degraded Performance):网络安全日志》
运维·人工智能·web安全·网络安全·开源·网络攻击模型·安全威胁分析
深度Linux12 分钟前
Linux网络编程中的零拷贝:提升性能的秘密武器
linux·linux内核·零拷贝技术
没有名字的小羊1 小时前
Cyber Security 101-Build Your Cyber Security Career-Security Principles(安全原则)
运维·网络·安全
m0_465215791 小时前
TCP & UDP Service Model
服务器·网络·tcp/ip
千夜啊1 小时前
Nginx 运维开发高频面试题详解
运维·nginx·运维开发
存储服务专家StorageExpert2 小时前
答疑解惑:如何监控EMC unity存储系统磁盘重构rebuild进度
运维·unity·存储维护·emc存储
chian-ocean4 小时前
从理论到实践:Linux 进程替换与 exec 系列函数
linux·运维·服务器
拎得清n4 小时前
UDP编程
linux
敖行客 Allthinker4 小时前
从 UTC 日期时间字符串获取 Unix 时间戳:C 和 C++ 中的挑战与解决方案
linux·运维·服务器·c++
JunLan~5 小时前
Docker 部署 GLPI(IT 资产管理软件系统)
运维·docker·容器