如何有效地浏览终端和已安装的包/命令?

如何有效地浏览终端和已安装的包/命令?

我是一名电气和计算机工程师,最近开始使用 Ubuntu 16.04 修改基于 Android 的计算机模块 (COM),以满足我所在公司正在开发的新产品的需求。

当然,我所从事的级别的 Android 开发(HAL、内核等……目前还没有太多的“应用程序”)似乎并不适合我最喜欢的平台(Windows),因此迁移到 Ubuntu 是最有意义的,因为 Ubuntu 是一个在 Android 开发方面得到很好支持的平台。

现在讨论更相关的部分。

我可以毫无问题地“使用” Ubuntu(安装和配置都很轻松),并且对终端等命令行界面也不陌生,我非常喜欢使用和“掌握”它。

然而,我在“掌握”终端时最大的障碍不是语法,甚至不是各种二进制文件/包本身,而是发现那些二进制文件/包!

我一直在广泛使用 man 和 info,但是这些命令只有当您提前知道要查找的命令/功能时才会有所帮助,尽管 man 和 info 的搜索能力都很棒,但我仍然觉得我缺少可用内容的索引。

总结并清楚地列举我的问题:

  1. 是否有一个“列表”,列出我可以在终端调用的所有内容,它是动态的,并且适应当前安装的软件包/二进制文件/函数集?

  2. 各种已安装的软件包究竟存储在哪里?我查看了 /bin/,但似乎只有一小部分可供我使用。/bin/ 似乎有很多核心二进制文件,但其他看似核心的二进制文件(如 info 和 whatis)似乎不存在。同样,我通过 apt 获得的已安装软件包以及 apt 本身都不存在。

  3. 额外积分Linux 环境与 Windows 环境相比,思维过程应该有什么不同?例如,哪里有路径环境变量来指定系统将在哪里查找二进制文件?是否有相当于“Program Files”或“Add and Remove Programs”(仅用于列举已安装的内容!)的程序?对于精通 Windows 的用户/开发人员,还有其他“专业提示”吗?完全的对 Linux 陌生?

这是我在 Stack Exchange 网站上的第一篇文章,所以如果我违反了任何规则或公认的礼仪,请原谅我。我通读了指南,并不认为我违反了其中任何一条!无论如何,任何帮助都将不胜感激!

谢谢。

答案1

是否有一个“列表”,列出我可以在终端调用的所有内容,它是动态的,并且适应当前安装的软件包/二进制文件/函数集?

是的!如果您使用的bash是 shell(我假设它是标准 shell),您可以按TAB两次,这将为您提供可运行的完整命令列表(请注意,它可能很长)。

编辑:我了解到,仅当 bash 使用其默认配置(而不是 Ubuntu 的配置)时,按两次不带任何字符的 tab 键才有效。因此,您可能需要运行bash --norcTAB然后按两次应该可以正常工作。

另一种选择是安装和配置zsh或,fish它们是 bash 的良好替代品,并提供更多功能。(我更喜欢因为它在您输入时提供了很好的自动完成功能。)

各种已安装的软件包究竟存储在哪里?我查看了 /bin/,但似乎只有一小部分可供我使用。/bin/ 似乎有很多核心二进制文件,但其他看似核心的二进制文件(如 info 和 whatis)似乎不存在。同样,我通过 apt 获得的已安装软件包以及 apt 本身都不存在。

您可以看到 shell 在哪里寻找已安装的程序:

$ echo $PATH
/home/niklas/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/niklas/.gopath/bin:/home/niklas/.gopath/bin

(请注意,这对您来说可能看起来有点不同。)

如今,大多数可执行文件都/usr/bin位于跳频

如果你想知道某个特定程序位于何处,请使用which

$ which apt
/usr/bin/apt

由于我对 Windows 没有很丰富的经验,所以我认为我无法回答问题的最后一部分,但是:

  • $PATH是“指定系统将在何处查找二进制文件的路径环境变量”。
  • 大多数程序都安装到/usr。(这分为可执行文件(/usr/bin)、库(/usr/lib)和共享文件(/usr/share)。文档位于/usr/share/doc。)

答案2

要列出所有函数,您可以使用compgen -A function,但其中许多是程序内部使用的自动完成函数,用户永远不会使用。它们都以下划线开头,因此要忽略它们,请执行以下操作:

compgen -A function | grep -v "^_"

要查看函数的定义,使用type $function_name.type还可以告诉您给定的二进制文件/脚本的存储位置,以及命令是二进制文件、脚本、别名、函数等。

同样有用:type -a将显示命令是否存在于不同位置或不同形式。例如,运行后type -a [您将得到以下内容:

[ is a shell builtin
[ is /usr/bin/[

相关内容