Unix 当我运行可执行二进制文件时,什么';命令叫什么?

Unix 当我运行可执行二进制文件时,什么';命令叫什么?,unix,command,Unix,Command,当我在终端中键入以下内容时 ./a.out 我正在使用的命令的名称是什么?我不知道如何查找这种情况下的命令行选项,因为我不知道实际要查找什么。a.out是编译后未命名的“c”程序的默认名称。通常使用-ofilename参数编译程序 请参见该命令可能没有关于其选项的任何文档。如果它是一个预编译的二进制文件,您可能没有多少资源来找出它的选项(如果有的话)。您可以尝试对其进行搜索以找到线索,但不能保证程序有一个手册页或任何类型的--help输出。/是一个位置,而不是命令。表示当前目录。/是目录分隔符

当我在终端中键入以下内容时

./a.out

我正在使用的命令的名称是什么?我不知道如何查找这种情况下的命令行选项,因为我不知道实际要查找什么。

a.out是编译后未命名的“c”程序的默认名称。通常使用-ofilename参数编译程序


请参见

该命令可能没有关于其选项的任何文档。如果它是一个预编译的二进制文件,您可能没有多少资源来找出它的选项(如果有的话)。您可以尝试对其进行搜索以找到线索,但不能保证程序有一个手册页或任何类型的
--help
输出。

/
是一个位置,而不是命令。
表示当前目录。
/
是目录分隔符
a.out
是当前目录中的一个(可能是可执行的)文件。这是由
gcc
生成的已编译可执行文件的默认名称


您通常使用这种显式调用方法,因为
通常不是搜索路径的一部分。因此,如果您尝试在没有前缀的情况下运行
a.out
,则即使您位于当前目录中,系统也无法找到它。这是一种安全措施(当您认为正在运行其他程序时,可以阻止您无意中运行恶意程序),并且是一件好事。每个程序都解析自己的参数,因此没有规范的参数列表。因为你有a.out,你可能有这个程序的源代码。找到名为“main”的函数,并查找检查argv或调用getopt的代码,也许有人会提供一个显示简短程序帮助的函数(名为help或usage)

另一种方法是使用'-q'或'?'参数运行程序

另一种方法是使用“字符串”在可执行文件中查找可打印字符串

strings a.out |less
手册页是与代码分开编写的,因此可能没有可执行文件的手册页

./a.out
它本身就是一个命令。让我们试着去理解这一点

命令基本上是一个可执行元素。它可以是二进制脚本,甚至可以是shell脚本。 在您的例子中,a.out是一个可执行的二进制元素。有关a.out的命令行选项,请参考编译并链接以获取a.out的源代码的main()函数中的参数

通过访问了解更多信息

有关命令执行的详细信息:

对于执行命令的shell,有两种众所周知的方法

方法1:


显式提供可执行文件的路径以及命令的名称

示例1:通过显式提供路径在当前工作目录中执行命令:

./a.out
”[dot]表示当前目录

示例2:通过显式提供路径在任意位置执行命令

/home/username/a.out
方法2:


更新PATH shell环境变量以包括要执行的命令的路径

键入:env | grep-i“PATH”,如果只提供了命令的名称,则知道当前为要执行的命令查找的位置

如果更新PATH shell env变量以包含a.out的位置,只需键入:

a.out
在下面键入命令以更新PATH shell env变量

export PATH=$PATH:/path-to-executable
你可能已经注意到了这种风格

您只需键入“rm”,shell仍然能够执行该命令。原因是,命令的路径是隐式的,并且在读取“path”shell env变量时发现


对于执行用户生成的命令,虽然方法1的示例2在大多数情况下已经足够了,但您仍然会发现方法2在日常广泛使用命令的地方非常有用。

对,但是如果我想使用“man”查找命令行选项,我该怎么办?比如,如果我想查找“ls”的命令行选项,我会选择“manls”。我在这里做什么?@tyler不是所有的命令都有手册页。如果调用时没有参数,
-h
-help
,许多命令都会提供帮助。但他们不必这么做。任何编译程序而不命名程序的人都不可能正式发布该程序。
a.out
是命令名。“getopt”-这是我需要查找的内容。我是C语言的新手,我不知道除了参数之外还可以自定义标志。我认为除了特定于不同命令的标志外,还有一组“标准”标志是普遍适用的。可能是因为我一直看到相同的标志以相同的方式应用。一致性(非愚蠢的)是伟大思想的庇护所,足够明智,不会在不需要的地方浪费时间。请注意,有两种getopt,一种用于旧式unix参数(以免我们忘记Linux从何处窃取其所有代码),另一个用于新样式的GNU选项,通常是--argument_name(注意snakecase),并使用不同的getoptions函数(拼写不同),下面是另一个: