【问题标题】:When I run an executable binary, what's the command called?当我运行一个可执行的二进制文件时,命令叫什么?
【发布时间】:2013-10-04 01:52:57
【问题描述】:

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

./a.out

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

【问题讨论】:

  • a.out 是命令的名称。

标签: unix command


【解决方案1】:

已编译 C 程序的默认输出文件名是 a.out。每个程序都解析自己的参数,因此没有规范的参数列表。由于您拥有 a.out,因此您可能拥有该程序的源代码。找到名为“main”的函数并查找检查 argv 或调用 getopt 的代码,也许有人会提供一个显示简短程序帮助的函数(名为帮助或用法)。

另一种方法是使用“-q”或“?”运行程序论据。

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

strings a.out |less

手册页与代码分开编写,因此您的可执行文件可能没有手册页。

【讨论】:

  • "getopt" - 这就是我需要查找的内容。我是 C 新手,我不知道除了参数之外还可以自定义标志。我认为除了特定于不同命令的标志之外,还有一组普遍适用的“标准”标志。可能是因为我不断看到以相同方式应用的相同标志。
  • 一种(非愚蠢的)一致性是伟大思想的避难所,明智地不要在不需要的地方浪费时间。
  • 请注意,有两种 getopt,一种用于旧式 unix 参数(以免我们忘记 Linux 从哪里窃取了所有代码),另一种用于新式 GNU 选项,通常是--argument_name(注意snakecase),并使用不同的getoptions函数(拼写不同),这里是另一个:optionparser.sourceforge.net
【解决方案2】:

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

您通常使用这种显式调用方法,因为. 通常不是搜索路径的一部分。因此,如果您尝试在没有./ 前缀的情况下运行a.out,即使您在当前目录中,系统也无法找到它。这是一种安全措施(当您认为自己正在运行其他程序时,可以阻止您无意中运行恶意程序),并且是一件好事

【讨论】:

    【解决方案3】:

    a.out 是“c”程序的默认名称,该程序已被编译但未命名。通常程序是用 -ofilename 参数编译的

    Determining C executable name

    【讨论】:

    • 对,但是如果我想使用“man”查找命令行选项该怎么办?就像我想查找“ls”的命令行选项一样,我会做“man ls”。我在这里做什么?
    • @tyler 并非所有命令都有手册页。许多命令在不带参数调用时提供帮助,-h--help。但他们不必这样做。任何编译程序而不命名程序的人都不太可能正式发布该程序。
    【解决方案4】:

    该命令可能没有任何关于其选项的文档。如果它是一个预编译的二进制文件,你可能几乎没有办法找出它的选项是什么,如果有的话。您可以尝试 strace 查找线索,但不能保证该程序有联机帮助页或任何类型的 --help 输出。

    【讨论】:

      【解决方案5】:
      ./a.out
      

      本身就是一个命令。让我们试着了解一下。

      Command 基本上是一个可执行元素。它可以是二进制文件,也可以是 shell 脚本。 在您的情况下, a.out 是一个可执行的二进制元素。 a.out的命令行选项请参考编译链接源代码main()函数中的"argv""argc"参数出去。

      访问Program Arguments了解更多信息

      关于命令执行的奖励详情:

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

      方法一:


      明确提供可执行文件的路径以及命令的名称。

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

      ./a.out
      

      '.'[点] 表示当前目录。

      示例2:通过显式提供路径在任何地方执行命令

      /home/username/a.out
      

      方法二:


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

      类型:环境 | grep -i "PATH" 如果只提供了命令的名称,则可以知道当前查找要执行的命令的位置。

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

      a.out
      

      键入以下命令以更新 PATH shell 环境变量

      export PATH=$PATH:/path-to-executable
      

      您可能已经注意到这种风格。

      您只需要输入 "rm",shell 仍然能够执行该命令。原因是,命令路径是隐式的,可以通过读取“PATH”shell env 变量找到。

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

      【讨论】:

        猜你喜欢
        • 2014-01-05
        • 1970-01-01
        • 1970-01-01
        • 2020-08-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多