当前位置: 技术问答>linux和unix
linux中c编程
来源: 互联网 发布时间:2016-11-26
本文导语: 刚学linux,有一个问题:我在ubuntu中用先:gcc main.c 然后当前目录下就会出现个 a.out 的文件, 但是直接用输入a.out,他说command not found! 然后我就./a.out,没想到好了,出现了Hellow world! 这是怎么回事呀,明明是...
刚学linux,有一个问题:我在ubuntu中用先:gcc main.c
然后当前目录下就会出现个 a.out 的文件,
但是直接用输入a.out,他说command not found!
然后我就./a.out,没想到好了,出现了Hellow world!
这是怎么回事呀,明明是当前目录,为什么不能直接执行a.out呢?
还有,编译后怎么多了一个nohup.out的文件呢?
然后当前目录下就会出现个 a.out 的文件,
但是直接用输入a.out,他说command not found!
然后我就./a.out,没想到好了,出现了Hellow world!
这是怎么回事呀,明明是当前目录,为什么不能直接执行a.out呢?
还有,编译后怎么多了一个nohup.out的文件呢?
|
直接a.out是在环境变量里找可执行文件,./a.out是在当前目录下
如果想直接a.out需要把当前目录.,加入到环境变量path中
如果想直接a.out需要把当前目录.,加入到环境变量path中
|
查看path目录: echo $PATH
修改path目录:PATH=“$PATH”:a.out所在目录绝对路径,例如:PATH=“$PATH”:/home/cc/testdir
修改path目录:PATH=“$PATH”:a.out所在目录绝对路径,例如:PATH=“$PATH”:/home/cc/testdir
|
你不要从一个用户的角度考虑这些,其实linux下的文件、目录、设备等等都是一个文件来着,而目录这个文件比较特殊,它的内容是是一个项目列表,该列表的各个元素包含(本目录文件信息、父目录文件信息、各个普通文件信息),这三种文件的文件名分别为("." , ".." , "文件名"),所以你要是想使用本目录的文件,你就必须用"."来通知系统要操作的文件在本目录中,如:“./a.out”就是说“本目录/文件名”
|
记得看过一本书上讲过为什么要这么做。
其实原本Unix/Linux也完全可以像LZ希望的那样输入a.out直接就执行a.out,但是这是有安全上的漏洞的。
一个黑客可以在一个目录下放一个自己写的程序,这个程序被命名为“ls”。
然后一个root用户在这个目录下输入ls(当然这个用户希望执行系统的那个ls命令),但是该root用户实际上执行的却是黑客写的名为“ls”的程序。如果这是个恶意程序,比如木马什么的,麻烦就大了……
所以现在Unix/Linux就要求你执行当前目录的程序的时候在前边加上“./”了……
其实原本Unix/Linux也完全可以像LZ希望的那样输入a.out直接就执行a.out,但是这是有安全上的漏洞的。
一个黑客可以在一个目录下放一个自己写的程序,这个程序被命名为“ls”。
然后一个root用户在这个目录下输入ls(当然这个用户希望执行系统的那个ls命令),但是该root用户实际上执行的却是黑客写的名为“ls”的程序。如果这是个恶意程序,比如木马什么的,麻烦就大了……
所以现在Unix/Linux就要求你执行当前目录的程序的时候在前边加上“./”了……