我在 SE 和其他教程上收到了很多关于此的相互矛盾的信息。大多数人似乎认为so版本是语义版本。然后其他人纠正他们,说它必须符合libtools 约定,并继续隐式假设或暗示传递-version-info C:R:A给 libtools 的数字创建名为 的文件libfoo.so.C.R.A。但我在 libtools 手册中没有看到任何地方明确说明文件的命名方式,这与我所看到的行为不匹配。
我正在构建一个第三方包(gdal),在构建过程中,它调用libtool --mode=link -version-info 25:4:5 <many other arguments>,但是构建后留在 .libs 中的 so 文件具有版本 libgdal.20.5.4。
我尝试了同一库的几个其他版本,它们似乎都遵循相同的模式。当您调用 libtools 时,您传入 current:revision:age,它会生成libfoo.so.current-age.age.revision. 这导致 sonamelibfoo.so.current-age始终是库兼容的最小版本,而不是其他帖子建议的最大版本。
我在 RHEL 7 和 Debian 10 上进行了此测试。
这是事情应该如何进行的吗?这个图书馆在做什么奇怪的事情吗?是否有任何地方可以权威地或至少正确地记录这一点?
GNU 是一个类 Unix 操作系统。这意味着它是许多程序的集合:应用程序、库、开发工具,甚至游戏。
GNU 的开发始于 1984 年 1 月,被称为 GNU 项目。GNU 中的许多程序都是在 GNU 项目的支持下发布的。那些我们称之为 GNU 包的包。
但是 GNU 一词从何而来?
-n在 SmartOS(我假设是 Solaris)中找到的 xargs 上的选项似乎与我遇到的任何其他版本的 xargs 不同。
拿这个例子:
内置 /usr/bin/xargs(奇怪的行为):
# printf 'one\0two\0three' | xargs -0 -I{} -n 1 echo "- {}"
- {} one
- {} two
- {} three
Run Code Online (Sandbox Code Playgroud)
GNU Findutils /opt/local/bin/xargs(预期行为):
# printf 'one\0two\0three' | /opt/local/bin/xargs -0 -I{} -n 1 echo "- {}"
- one
- two
- three
Run Code Online (Sandbox Code Playgroud)
来自 MacOS、NetBSD 和 CentOS 的 Xargs 的行为都与上一个示例相同。SmartOS xargs 有什么不同?
来自 SmartOS xargs 联机帮助页:
-n number
Invokes utility using as many standard input arguments
as possible, up to …Run Code Online (Sandbox Code Playgroud) 我正在阅读https://lwn.net/Articles/773342/,其中当前将大量文件系统从 /usr/$something 迁移到简单的 /usr 。一些评论一次又一次地评论 /usr/bin 是因为 /bin 变满而创建的事实,但它没有详细说明为什么 /bin 曾经变满?那么 /bin 在哪里有任何实际或人为的限制?此外,我无法关联或找出这些事件以某种时间顺序发生的时间。我能做的唯一假设是我们的硬盘或磁带太小(运行和维护过去和现在仍然很昂贵)。如果有人能阐明这段晦涩的历史。
在当今世界,我通常建议新手使用 /boot 之类的东西 - 比如说 200 mbish, / 用于 15-20% 的硬盘,其余用于 /home 并在 1:1 左右进行交换。拥有这种新结构应该至少在理论上简化了维护,尽管从安全角度来看没有任何线索。
无论如何,如果有人可以分享一些历史,它可能会让像我这样的人更多地了解事情的现状,他们的方式。
macOS 自带bash(它是一个 GNU 工具),macOS 还带有像ls和chmod这样的工具(它们是 BSD 工具,尽管我不知道它们来自哪种 BSD 风格)。
现在 macOS 附带的 GNU 和 BSD 工具是否被 Apple 修改(例如:Apple 是否从中删除了某些功能或向其中添加了一些功能),还是 Apple 没有修改它们?
我最近阅读了--help文本mktemp(man页面不可用)并发现了这个:
-u, --dry-run do not create anything; merely print a name (unsafe)
Run Code Online (Sandbox Code Playgroud)
为什么这是“不安全”?是否有任何具体原因将其标记为这样?
在寻找简单的真相时,echo我发现了这个页面:
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
它通常是此站点上的 HTML 框架https://pubs.opengroup.org/onlinepubs/9699919799/(您可以在其中搜索“echo”)。
这声称是 POSIX,但我看不到,而是-n看到了\c!
我发现了什么?
GracefulRestart指出的是/bin/echo承认\c,但它不这样做,默认情况下:我必须做echo -e的\c得到认可。
以前 mktemp 用于在/tmp. 今天我注意到 mktemp 正在创建文件而 $PWD不是在/tmp?
笔记:
我能够做到:ls /tmp
$ mktemp --version
mktemp (GNU coreutils) 8.30
Run Code Online (Sandbox Code Playgroud)
$ echo $TMPDIR
$
Run Code Online (Sandbox Code Playgroud) 考虑一些常见的 *nix 系统(比如 Debian、CentOS、Arch 和 Kali)。
我一直用find; 我不记得使用过 GNU find,但从我看到的一个例子中,我认为 GNU find 的语法可能更简单(尽管可能允许更少的操作)。
我有两个问题:
是find通用系统中的默认“查找或操作”实用程序还是系统会同时提供 find和GNU find?
是GNU find为了更简单find?
当我跑
user@hostname:~$ su -- root -z
Run Code Online (Sandbox Code Playgroud)
我得到
bash: -z: invalid option
Usage: bash [GNU long option] [option] ...
...
Run Code Online (Sandbox Code Playgroud)
以上是我期望的行为。
当我跑
user@hostname:~$ su -l -- root -z
Run Code Online (Sandbox Code Playgroud)
我得到
-su: -z: invalid option
Usage: -su [GNU long option] [option] ...
...
Run Code Online (Sandbox Code Playgroud)
我使用 invalid 选项-z只是为了演示哪个命令正在解析该选项。
这种行为让我感到厌烦。su在我宣布选项结束后继续寻找选项。我错过了什么,这是一个错误还是可怕的设计?