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

B-T*_*one 8 package-management command-line apt bash android

我是一名电气和计算机工程师,最近开始使用 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 环境相比,哪些思维过程应该有所不同?比如,在哪里/是否有路径环境变量指定系统将在哪里查找二进制文件?是否有等效于“程序文件”或“添加和删除程序”的内容(只是为了枚举已安装的内容!)?对于精通 Windows 的人/开发人员,但对 Linux完全陌生,还有其他“专业提示”吗?

这是我在任何 Stack Exchange 网站上的第一篇文章,所以如果我违反了任何规则或接受了礼仪,请原谅我。我通读了指导方针,并认为我没有违反任何指导方针!无论如何,任何帮助将不胜感激!

谢谢你。

Ytv*_*wlD 2

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

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

编辑:我了解到,在没有任何字符的情况下按两次 Tab 键仅在 bash 使用其默认配置时有效 - 而不是 Ubuntu 的配置。所以你可能想跑bash --norc。按TAB两次应该就可以了。

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

各种安装的包到底存放在哪里呢?我查看了 /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
Run Code Online (Sandbox Code Playgroud)

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

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

如果您想知道某个特定程序的位置,请使用which

$ which apt
/usr/bin/apt
Run Code Online (Sandbox Code Playgroud)

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

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