如何在不更改系统任何内容的情况下干运行或模拟 Linux 命令

每个 Linux 命令都有一个或多个选项和标志来执行不同的操作。 今天,让我们了解一个有用且重要的选项,它允许我们模拟 Linux 命令,但不实际更改系统。

例如,我们可以模拟(或试运行)安装或删除软件包或程序的过程,但无需实际从 Linux 系统安装或删除预期的软件包。

如您所知,模拟只是模拟实际流程或系统的操作,以验证流程将如何实时工作。

模拟在许多领域被用于教学、测试、培训和解决问题。 现在让我们回过头来学习如何模拟 Linux 命令。

为什么要试运行或模拟 Linux 命令?

简单的。 我们甚至可以在运行 Linux 命令之前准确地找到它的作用。 为了 example,你可能想在你的 Linux 机器上安装 Vim 编辑器。 你不知道这个包带来了哪些额外的依赖。 通过模拟安装过程,您将知道将与软件包一起安装多少个依赖项。 拆包也一样。 卸载软件包后,您将知道不再需要哪些依赖项。 它还可以帮助您确保命令在运行之前是否正常工作。 还是不明白? 没问题。 请允许我向您展示一个 example.

模拟 Linux 命令

让我们说,你想安装 维姆 Ubuntu系统上的编辑器。

要在 Ubuntu 上模拟 Vim 的安装,只需运行:

$ sudo apt install vim --dry-run

或者,

$ sudo apt install vim --simulate

或者很快:

$ sudo apt install vim -s

上述命令的示例输出:

Reading package lists... Done
Building dependency tree 
Reading state information... Done
Suggested packages:
ctags vim-doc vim-scripts
The following NEW packages will be installed:
vim
0 upgraded, 1 newly installed, 0 to remove and 82 not upgraded.
Inst vim (2:8.0.1453-1ubuntu1.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64])
Conf vim (2:8.0.1453-1ubuntu1.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64])
模拟 Linux 命令

正如你在上面的输出中看到的,我们只是模拟了 Vim 的安装过程,并没有实际安装它。 系统没有任何变化,只是一个模拟。 通过查看模拟,我们可以发现哪些附加包(依赖项)将与实际包一起安装。

同样,我们可以模拟删除已安装程序,如下所示。

$ sudo apt remove vim --dry-run

或者,

$ sudo apt remove vim --simulate

或者很快:

$ sudo apt remove vim -s

样本输出:

Reading package lists... Done
Building dependency tree 
Reading state information... Done
The following packages will be REMOVED:
vim
0 upgraded, 0 newly installed, 1 to remove and 82 not upgraded.
Remv vim [2:8.0.1453-1ubuntu1.1]

同样,我们只模拟了删除过程,但没有从系统中删除任何内容。 如果您实时运行上述命令,您可以确定哪些程序将被删除。

我们甚至可以在 Ubuntu 上模拟整个升级过程,如下所示。

$ sudo apt dist-upgrade --dry-run
Reading package lists... Done
Building dependency tree 
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
apt apt-utils base-files bash bsdutils cloud-init console-setup console-setup-linux debconf debconf-i18n dmeventd dmsetup dpkg fdisk friendly-recovery grep
grub-common grub-pc grub-pc-bin grub2-common initramfs-tools initramfs-tools-bin initramfs-tools-core iputils-ping iputils-tracepath keyboard-configuration
landscape-common language-selector-common libapt-inst2.0 libapt-pkg5.0 libblkid1 libdevmapper-event1.02.1 libdevmapper1.02.1 libdrm-common libdrm2 libfdisk1
libldap-2.4-2 libldap-common liblvm2app2.2 liblvm2cmd2.02 libmount1 libnss-systemd libpam-systemd libprocps6 libpython3.6 libpython3.6-minimal libpython3.6-stdlib
libsmartcols1 libsystemd0 libudev1 libuuid1 linux-firmware lvm2 mdadm mount netplan.io nplan open-vm-tools procps python-apt-common python3-apt python3-debconf
python3-distupgrade python3-gdbm python3-software-properties python3.6 python3.6-minimal snapd software-properties-common sosreport systemd systemd-sysv thermald
ubuntu-minimal ubuntu-release-upgrader-core ubuntu-standard udev unattended-upgrades update-notifier-common util-linux uuid-runtime xkb-data
82 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Inst base-files [10.1ubuntu2.4] (10.1ubuntu2.7 Ubuntu:18.04/bionic-updates [amd64])
Conf base-files (10.1ubuntu2.7 Ubuntu:18.04/bionic-updates [amd64])
Inst bash [4.4.18-2ubuntu1] (4.4.18-2ubuntu1.2 Ubuntu:18.04/bionic-updates [amd64])
Conf bash (4.4.18-2ubuntu1.2 Ubuntu:18.04/bionic-updates [amd64])
Inst bsdutils [1:2.31.1-0.4ubuntu3.3] (1:2.31.1-0.4ubuntu3.4 Ubuntu:18.04/bionic-updates [amd64])
[..]
Conf thermald (1.7.0-5ubuntu5 Ubuntu:18.04/bionic-updates [amd64])
Conf unattended-upgrades (1.1ubuntu1.18.04.13 Ubuntu:18.04/bionic-updates [all])
Conf cloud-init (19.3-41-gc4735dd3-0ubuntu1~18.04.1 Ubuntu:18.04/bionic-updates [all])
Conf open-vm-tools (2:11.0.1-2ubuntu0.18.04.2 Ubuntu:18.04/bionic-updates [amd64])

通过模拟升级过程,您将清楚地了解哪些软件包将被升级。

请注意, 非root用户也可以进行模拟. 如果您在没有 sudo,您将看到如下所示的警告消息。

$ apt remove vim --dry-run
NOTE: This is only a simulation!
apt needs root privileges for real execution.
Keep also in mind that locking is deactivated,
so don't depend on the relevance to the real current situation!
Reading package lists... Done
Building dependency tree 
Reading state information... Done
The following packages will be REMOVED:
vim
0 upgraded, 0 newly installed, 1 to remove and 82 not upgraded.
Remv vim [2:8.0.1453-1ubuntu1.1]
在 Linux 中模拟软件包删除

如果“试运行”选项不可用怎么办?

据我所知,大多数 Linux 和 unix 命令都有空运行选项,但有些命令没有。 为了 example, 这 yum 命令没有空运行选项。 如果要模拟 Yum 安装或删除操作,请使用 "setopt" 选项如下。

$ yum install --setopt tsflags=test vim

如果要模拟安装 .rpm 包,做:

$ sudo rpm -ivh --test vim-enhanced-7.4.629-6.el7.x86_64.rpm

上面的命令不会安装 vim,但会显示如何 "yum install vim""rpm -ivh" 命令将实时执行。

也许你应该尝试“也许”

或者,您可以使用名为的命令行实用程序 “也许” 模拟 Linux 命令。 它允许您运行命令并查看它对文件的作用 没有实际做! 查看列出的输出后,您可以决定是否真的要运行它。 欲了解更多详情,请访问以下链接。

  • 如何在执行命令或程序之前知道它会做什么

希望这可以帮助。