如何模拟Linux命令而不更改系统中的任何内容

时间:2020-03-21 11:44:58  来源:igfitidea点击:

每个Linux命令都有一个或者多个选项和标志来执行不同的操作。
今天,让我们了解允许我们模拟Linux命令的有用和重要选项之一,但实际上不会更改系统。
例如,我们可以模拟安装或者删除包或者程序的过程,但不实际安装或者从Linux系统中删除预期的包。
如我们所知,模拟只是模仿实际过程或者系统的操作,以验证过程如何实时工作。
模拟在许多领域用于教学,测试,培训目的和解决问题。
现在让我们回到并学习如何模拟Linux命令。

为什么模拟Linux命令?

简单的。
我们可以完全找到Linux命令甚至在运行之前所做的操作。
例如,我们可能希望在Linux框中安装Vim编辑器。
我们不知道此包带来的其他依赖关系。
通过模拟安装过程,我们将知道将与包装一起安装多种依赖项。
包装拆卸也是如此。
我们将知道卸载包后不再需要依赖项是什么。
它还有助于我们确保甚至在运行之前均正常工作。
还是不明白?
没问题。
请允许我向我们展示一个例子。

模拟Linux命令,而不在系统中更改任何内容

让我们说,我们想在Ubuntu系统上安装Vim编辑器。

要模拟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])

正如我们在上面的输出中看到的那样,我们只模拟了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和UNIX命令都有干运行选项,但有些命令没有。
例如,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"命令。

可能是你应该尝试"可能"

或者,我们可以使用命名的命令行实用程序"may"来模拟Linux命令。
它允许我们运行命令,并查看文件对文件有什么作用而无需实际执行此操作!查看列出的输出后,我们可以决定是否真的想要运行它。