我是一名电气和计算机工程师,最近开始使用 Ubuntu 16.04 修改基于 Android 的计算机模块 (COM),以满足我所在公司正在开发的新产品的需求。
当然,我所从事的级别的 Android 开发(HAL、内核等……目前还没有太多的“应用程序”)似乎并不适合我最喜欢的平台(Windows),因此迁移到 Ubuntu 是最有意义的,因为 Ubuntu 是一个在 Android 开发方面得到很好支持的平台。
现在讨论更相关的部分。
我可以毫无问题地“使用” Ubuntu(安装和配置都很轻松),并且对终端等命令行界面也不陌生,我非常喜欢使用和“掌握”它。
然而,我在“掌握”终端时最大的障碍不是语法,甚至不是各种二进制文件/包本身,而是发现那些二进制文件/包!
我一直在广泛使用 man 和 info,但是这些命令只有当您提前知道要查找的命令/功能时才会有所帮助,尽管 man 和 info 的搜索能力都很棒,但我仍然觉得我缺少可用内容的索引。
总结并清楚地列举我的问题:
是否有一个“列表”,列出我可以在终端调用的所有内容,它是动态的,并且适应当前安装的软件包/二进制文件/函数集?
各种已安装的软件包究竟存储在哪里?我查看了 /bin/,但似乎只有一小部分可供我使用。/bin/ 似乎有很多核心二进制文件,但其他看似核心的二进制文件(如 info 和 whatis)似乎不存在。同样,我通过 apt 获得的已安装软件包以及 apt 本身都不存在。
额外积分Linux 环境与 Windows 环境相比,思维过程应该有什么不同?例如,哪里有路径环境变量来指定系统将在哪里查找二进制文件?是否有相当于“Program Files”或“Add and Remove Programs”(仅用于列举已安装的内容!)的程序?对于精通 Windows 的用户/开发人员,还有其他“专业提示”吗?完全的对 Linux 陌生?
这是我在 Stack Exchange 网站上的第一篇文章,所以如果我违反了任何规则或公认的礼仪,请原谅我。我通读了指南,并不认为我违反了其中任何一条!无论如何,任何帮助都将不胜感激!
谢谢。
答案1
是否有一个“列表”,列出我可以在终端调用的所有内容,它是动态的,并且适应当前安装的软件包/二进制文件/函数集?
是的!如果您使用的bash
是 shell(我假设它是标准 shell),您可以按TAB
两次,这将为您提供可运行的完整命令列表(请注意,它可能很长)。
编辑:我了解到,仅当 bash 使用其默认配置(而不是 Ubuntu 的配置)时,按两次不带任何字符的 tab 键才有效。因此,您可能需要运行bash --norc
。TAB
然后按两次应该可以正常工作。
另一种选择是安装和配置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/[