Linux 命令:使用现代替代品替换这些旧的实用程序

这些传统的 Linux 实用程序已经通过现代替代品进行了改进。
15 位读者喜欢这篇文章。
Command line prompt

Opensource.com

Linux 在软件支持方面有着良好的记录。 Unix 第 1 版的 man 第 1 节中有大约 60 个命令,其中大多数今天仍然有效。 不过,进步永不止步。 感谢全球对开源的广泛参与,新的命令经常被开发出来。 有时,一个新的命令会流行起来,通常是因为它提供了新的功能,或者提供相同的功能但具有持续的维护。 这里有十个最近被重新发明的旧命令。

1. 使用 cheat 或 tealdeer 替换 man

man 手册功能强大,并且可以很好地完成它的工作。 但是,man 手册在演示如何使用您想要引用的命令时,并不总是最简洁的。 如果您正在寻找更切中要点的东西,请尝试cheattealdeer

2. 使用 ip 替换 ifconfig

ifconfig 命令提供有关您的网络接口的信息,无论它们是物理的还是虚拟的。

$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
  inet 10.1.2.34  netmask 255.255.255.0  broadcast 10.0.1.255
  inet6 fe80::f452:f8e1:7f05:7514  prefixlen 64
  ether d8:5e:d3:2d:d5:68  txqueuelen 1000  (Ethernet)
  [...]

tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1360
  inet 10.2.3.45  netmask 255.255.254.0  destination 10.2.14.15
  inet6 2620:52:4:1109::100e  prefixlen 64  scopeid 0x0<global>
  unspec 00-00-00-00-00-00-00-00-[...]0-00  txqueuelen 500  (UNSPEC)
  [...]

较新的 ip 命令提供类似的信息

$ ip -4 address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 10.1.2.34/24 brd 10.0.1.255 scope global noprefixroute eth0
4: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1360 qdisc pfifo_fast state UNKNOWN group default qlen 500
    inet 10.2.3.45/23 brd 10.2.15.255 scope global noprefixroute tun0

3. 使用 dnf 替换 yum,使用 apt 替换 apt-get

软件包管理器往往变化缓慢,并且当它们这样做时,它们通常会努力保持向后兼容性。 yum 命令和 apt-get 命令最近都得到了改进。 这些更改通常被别名化或设计为以其旧的和新的语法工作

$ sudo yum install foo
$ sudo dnf install foo
$ sudo apt-get install foo
$ sudo apt install foo

4. 使用 dnf 替换 repoquery

dnf 出现之前,有各种各样的 yum 实用程序来帮助用户获取有关其软件包系统配置的报告。 大多数额外的功能都默认包含在 dnf 中。 例如,repoquerydnf 的子命令,它提供所有已安装软件包的列表

$ sudo dnf repoquery

5. 使用 pip 替换 pip

pip 命令是 Python 的软件包管理器。 它没有被替换,但首选的语法已更新。 旧的命令

$ pip install yamllint

新的语法

$ python3 -m pip install yamllint

6. 使用 exa 替换 ls

ls 命令没有被替换。

确切地说,它没有被再次替换。

ls 命令最初是它自己的二进制应用程序,并且仍然可以作为一个应用程序使用。 但是,最终,Bash shell 包含了它自己的 ls 内置命令,默认情况下,该命令会覆盖任何已安装的 ls 命令。

最近,exa 命令被开发出来,根据您的偏好,它可以是一个更好的 ls。 阅读 Sudeshna Sur 的 exa 命令 文章,然后亲自尝试一下。

7. 使用 dust 或 ncdu 替换 du

du 命令没有任何问题,它报告您的硬盘驱动器上使用了多少磁盘空间。 它很好地完成了它的工作,但公平地说,它非常简单。

如果您正在寻找一些变化,请尝试 ncdu 命令或 dust 命令。

8. 使用 bat 替换 cat

cat 命令,除了被我们大多数人过度使用之外,是一个简单而直接的命令。 它读取任意数量文件的内容,并将其输出到标准输入。

它的输出非常基本,所以如果您正在寻找具有语法高亮和灵活输出选项的东西,请尝试使用 bat 命令。

bat 是否也替换 tac 命令? 不,别担心,至少现在 tac 作为反向输出文件的命令是安全的。(除非,你算上 sed。)

9. 使用 ss 替换 netstat

netstat 命令在很大程度上已被 ss 命令取代,尽管在列表中的所有命令中,它可能是最具争议的。 ss 命令提供许多相同的功能,但正如 Jose Vicente Nunez 在他的 六个已弃用的命令 文章中所指出的那样,在功能上存在差距和差异。 在完全切换到 ss 之前,请尝试一下,并将其与您现在使用 netstat 的方式进行比较。

10. 使用 fd 替换 find

我使用 find 来定位文件,作为 GNU Parallel 的输入源等等。 我对它非常熟悉,但我必须承认它的语法有点笨拙。 fd 命令旨在改进这一点。 例如,假设您正在寻找一个名为 example 的文件,但您不记得使用什么文件扩展名。 使用 find,语法可能如下所示

$ find . -name "*example*"
/home/tux/example.adoc
/home/tux/example.sh

使用 fd,语法是

$ fd example
/home/tux/example.adoc
/home/tux/example.sh

假设您想要使用 grep 命令来搜索结果中包含“zombie apocalypse”的短语。 使用 find

$ find . -name "*example*" -exec grep "zombie apocalypse" {} \;
zombie apocalypse

改用 fd

$ fd txt -x grep zombie
zombie apocalypse

在 Sudeshna Sur 的 fd 文章中了解更多信息,然后亲自尝试一下。

要了解更多关于经典命令的更新,请下载我们的速查表。

立即下载
标签
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。 他曾在电影和计算机行业工作,并且经常同时从事这两项工作。

5 条评论

使用 dnf 代替 yum 的一个重要原因是 dnf 会自动查找并安装所有依赖项,即使您正在安装一些保存到驱动器上的软件包。 我也喜欢使用 dnf list(您不必使用 sudo)来查找一个或多个软件包。

“apt”和“apt-get”之间存在比语法更大的差异。

“apt”专为交互式会话而设计 - 就像在终端中键入命令一样。 它提供了美观的进度条和其他类似功能。 但它不利于脚本编写 - 所有这些花哨的东西都会妨碍。

另一方面,“apt-get”消除了其中的大部分内容。 它提供的输出更容易流入日志文件,因此更适合在批处理脚本和自动化中使用。

在 Debian 和 Ubuntu 中,fd 命令是 fdfind,可以使用以下命令安装
sudo apt install fd-find

如果您允许自己放弃标准软件包,请查看 nala(基于 deb 的 distrib 的 dnf/yum);)https://gitlab.com/volian/nala

我愿意花真金白银来建立一个软件包管理的标准化协议。 然后我建议我们将 coreutils 中的当前 `install` 命令重命名为 `ginstall`,并将 `install` 作为通用的软件包管理命令。 它可以符号链接到任何给定的后端,但功能上它将在任何地方以相同的方式工作。

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.