我想知道哪些命令是为 Linux 重写的,哪些是从 Unix 保留的?
在某些时候,在我遇到的一些关于 Linux 的教学材料(来自 Linux Foundation)中,提到了以下内容:
ip
command 比ifconfig
因为它使用netlink套接字而不是ioctl系统调用更通用和更有效。
任何人都可以详细说明这一点,因为我无法理解引擎盖下发生了什么?
PS 我知道关于这些工具的这个主题,但它没有解决它们如何操作的具体差异
/bin/sh
,Bourne shell创建于 1977 年,曾经是 Unix 系统的默认 shell。
现在这个文件仍然存在,但主要是作为系统上安装的默认 POSIX 兼容 shell 的符号链接:
/bin/bash
Bourne Again shell/bin/dash
Debian Almquist shell/bin/dash
(6.0 及更高版本;较旧的 Debian 版本有它指向/bin/bash
) 这让我很好奇:有没有一个Unix系统或Linux发行版,仍然提供了一个二进制的/bin/sh
?
该yash
外壳有一个printf
内置的,根据其说明书。
但是,这是我在yash
具有默认配置的shell 中看到的:
$ command -v printf
/usr/bin/printf
$ type printf
printf: a regular built-in at /usr/bin/printf
Run Code Online (Sandbox Code Playgroud)
printf
这个shell中是否内置了?结果与许多其他假定的内置实用程序类似,这些实用程序也可用作外部命令。
作为对比,在pdksh
(ksh
在OpenBSD,这里printf
是不是内置的):
$ command -v printf
/usr/bin/printf
$ type printf
printf is /usr/bin/printf
Run Code Online (Sandbox Code Playgroud)
并在bash
(其中printf
是内置的):
$ command -v printf
printf
$ type printf
printf is a shell builtin
Run Code Online (Sandbox Code Playgroud) $ su -
Password:
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# exit
logout
$ su
Password:
# echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Run Code Online (Sandbox Code Playgroud)
我不知道为什么 /bin 和 /sbin 没有添加到$PATH
,如果我做普通的 su 。过去就是这样。我怎样才能解决这个问题?我确实注意到:
-rw-r--r-- 1 root root 0 Jan 8 2018 /etc/environment
Run Code Online (Sandbox Code Playgroud)
但除此之外,我的系统似乎很正常。
编辑:我忘了强制性的 uname -a
Linux rpi3 4.17.0-1-arm64 #1 SMP Debian 4.17.8-1 (2018-07-20) aarch64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
编辑2:
$ cat /etc/issue
Debian GNU/Linux buster/sid \n \l
Run Code Online (Sandbox Code Playgroud)
所有的包都来自“测试”repo,因为“稳定”的包在 aarch64 上不能很好地工作。
我知道su
和之间应该有什么区别su -
,但例如在我的系统(Debian)中PATH
是相同的:
[root]# su
[root]# echo $PATH
/user_path/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[root]# exit
[root]$ su -
[root@debian ~]# echo $PATH
/user_path/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Run Code Online (Sandbox Code Playgroud)
所以我开始认为可以在配置文件中更改设置。
我有这个代码:
[[ "$1" =~ [/\\]$ ]]
Run Code Online (Sandbox Code Playgroud)
在 linux 上它工作得很好,但是当我在 FreeBSD 上测试它时发生了一个错误:./projekt2.sh: [[: not found
它......我有任何替代方法可以在两个系统上工作吗?谢谢
BASH 版本:4.3.30(1)-发布
macOS 自带bash
(它是一个 GNU 工具),macOS 还带有像ls
和chmod
这样的工具(它们是 BSD 工具,尽管我不知道它们来自哪种 BSD 风格)。
现在 macOS 附带的 GNU 和 BSD 工具是否被 Apple 修改(例如:Apple 是否从中删除了某些功能或向其中添加了一些功能),还是 Apple 没有修改它们?