分类 技术 下的文章

Vagrant 可以帮助你在你的电脑上运行其他操作系统,这意味着你可以构建、测试、疯狂折腾而不毁坏你的系统。

 title=

我使用 Vagrant 已经很长时间了。我使用几种 DevOps 工具,把它们全安装在一个系统上会搞得很乱。Vagrant 可以让你在不破坏系统的情况下随意折腾,因为你根本不需要在生产系统上做实验。

如果你熟悉 VirtualBoxGNOME Boxes,那么学习 Vagrant 很容易。Vagrant 有一个简单而干净的界面用于管理虚拟机。一个名为 Vagrantfile 的配置文件,允许你定制你的虚拟机(称为 “Vagrant 盒子 box ”)。一个简单的命令行界面让你启动、停止、暂停或销毁你的“盒子”。

考虑一下这个简单的例子。

假设你想写 Ansible 或 shell 脚本,在一个新的服务器上安装 Nginx。你不能在你自己的系统上这样做,因为你运行的可能不是你想测试的操作系统,或者没有所有的依赖项。启动新的云服务器进行测试可能会很费时和昂贵。这就是 Vagrant 派上用处的地方。你可以用它来启动一个虚拟机,用你的脚本来 配备 provision 它,并证明一切按预期工作。然后,你可以删除这个“盒子”,重新配备它,并重新运行你的脚本来验证它。你可以多次重复这个过程,直到你确信你的脚本在所有条件下都能工作。你可以将你的 Vagrantfile 提交给 Git,以确保你的团队正在测试完全相同的环境(因为他们将使用完全相同的测试机)。不会再有“但它在我的机器上运行良好!”这事了。

开始使用

首先,在你的系统上安装 Vagrant,然后创建一个新的文件夹进行实验。在这个新文件夹中,创建一个名为 Vagrantfile 的新文件,内容如下:

Vagrant.configure("2") do |config|

 config.vm.box = "ubuntu/hirsute64"

end

你也可以运行 vagrant init ubuntu/hirsute64,它将为你生成一个新的 Vagrant 文件。现在运行 vagrant up。这个命令将从 Vagrant 仓库中下载 ubuntu/hirsuite64 镜像。

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu/hirsute64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/hirsute64' version '20210820.0.0' is up to date...
==> default: Setting the name of the VM: a_default_1630204214778_76885
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Remote connection disconnect. Retrying...
    default: Warning: Connection reset. Retrying...
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!

此时,如果你打开你的 Vagrant 后端(如 VirtualBox 或 virt-manager),你会看到你的“盒子”已经有了。接下来,运行 vagrant ssh 登录到“盒子”。如果你能看到 Vagrant 的提示符,那么你就进入了!

~ vagrant ssh
Welcome to Ubuntu 21.04 (GNU/Linux 5.11.0-31-generic x86_64)

* Documentation: <https://help.ubuntu.com>
* Management:   <https://landscape.canonical.com>
* Support:    <https://ubuntu.com/advantage>

 System information as of Sun Aug 29 02:33:51 UTC 2021

 System load: 0.01       Processes:        110
 Usage of /:  4.1% of 38.71GB  Users logged in:     0
 Memory usage: 17%        IPv4 address for enp0s3: 10.0.2.15
 Swap usage:  0%        IPv4 address for enp0s8: 192.168.1.20

0 updates can be applied immediately.

vagrant@ubuntu-hirsute:~$

Vagrant 使用“基础盒子”来建立你的本地机器。在我们的例子中,Vagrant 从 Hashicorp 的 Vagrant 目录下载 ubuntu/hirsuite64 镜像,并插入 VirtualBox 来创建实际的“盒子”。

共享文件夹

Vagrant 将你的当前文件夹映射到 Vagrant “盒子”中的 /vagrant。这允许你在你的系统和“盒子”里保持文件同步。这很适合测试 Nginx 网站,通过将你的文件根目录指向 /vagrant。你可以使用 IDE 进行修改,“盒子”里的 Nginx 会提供这些修改。

Vagrant 命令

有几个 Vagrant 命令,你可以用它们来控制你的“盒子”。

其中一些重要的命令是:

  • vagrant up:启动一个“盒子”。
  • vagrant status:显示当前“盒子”的状态。
  • vagrant suspend:暂停当前的“盒子”。
  • vagrant resume:恢复当前的“盒子”。
  • vagrant halt:关闭当前的“盒子”。
  • vagrant destroy:销毁当前的“盒子”。通过运行此命令,你将失去存储在“盒子”上的任何数据。
  • vagrant snapshot:对当前的“盒子”进行快照。

试试 Vagrant

Vagrant 是一个使用 DevOps 原则进行虚拟机管理的工具,久经时间考验。配置你的测试机,与你的团队分享配置,并在一个可预测和可重复的环境中测试你的项目。如果你正在开发软件,那么通过使用 Vagrant 进行测试,你将为你的用户提供良好的服务。如果你不开发软件,但你喜欢尝试新版本的操作系统,那么没有比这更简单的方法了。今天就试试 Vagrant 吧!

这篇文章最初发表在 作者的个人博客 上,经许可后被改编。


via: https://opensource.com/article/21/9/test-vagrant

作者:Ayush Sharma 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Lima 可以帮助克服在 Mac 上运行容器的挑战。

 title=

在你的 Mac 上运行容器可能是一个挑战。毕竟,容器是基于 Linux 特有的技术,如控制组和命名空间。

幸运的是,macOS 拥有一个内置的 虚拟机监控程序 hypervisor ,允许在 Mac 上运行虚拟机(VM)。虚拟机监控程序是一个底层的内核功能,而不是一个面向用户的功能。

hyperkit 是一个可以使用 macOS 虚拟机监控程序运行虚拟机的 开源项目。hyperkit 被设计成一个“极简化”的虚拟机运行器。与 VirtualBox 不同,它没有花哨的 UI 功能来管理虚拟机。

你可以获取 hyperkit,这是一个运行容器管理器的极简 Linux 发行版,并将所有部分组合在一起。但这将有很多变动组件,且听起来像有很多工作。特别是如果你想通过使用 vpnkit (一个开源项目,用于创建感觉更像是主机网络一部分的虚拟机网络)使网络连接更加无缝。

Lima

lima 项目 已经解决了这些细节问题时,就没有理由再去做这些努力了。让 lima 运行的最简单方法之一是使用 Homebrew。你可以用这个命令安装 lima

$ brew install lima

安装后,可能需要一些时间,就享受一些乐趣了。为了让 lima 知道你已经准备好了,你需要启动它。下面是命令:

$ limactl start

如果这是你第一次运行,你会被问到是否喜欢默认值,或者是否要改变其中的任何一项。默认值是非常安全的,但我喜欢生活在疯狂的一面。这就是为什么我跳进一个编辑器,从以下地方进行修改:

- location: "~"
  # CAUTION: `writable` SHOULD be false for the home directory.
  # Setting `writable` to true is possible but untested and dangerous.
  writable: false

变成:

 - location: "~"
  # I *also* like to live dangerously -- Austin Powers
  writable: true

正如评论中所说,这可能是危险的。可悲的是,许多现有的工作流程都依赖于挂载是可读写的。

默认情况下,lima 运行 containerd 来管理容器。containerd 管理器也是一个非常简洁的管理器。虽然使用一个包装的守护程序,如 dockerd,来增加这些漂亮的工效是很常见的,但也有另一种方法。

nerdctl 工具

nerdctl 工具是 Docker 客户端的直接替换,它将这些功能放在客户端,而不是服务器上。lima 工具允许无需在本地安装就可以直接从虚拟机内部运行 nerdctl

做完这些后,可以运行一个容器了!这个容器将运行一个 HTTP 服务器。你可以在你的 Mac 上创建这些文件:

$ ls
index.html
$ cat index.html
hello

现在,挂载并转发端口:

$ lima nerdctl run --rm -it -p 8000:8000 -v $(pwd):/html --entrypoint bash python
root@9486145449ab:/#

在容器内,运行一个简单的 Web 服务器:

$ lima nerdctl run --rm -it -p 8000:8000 -v $(pwd):/html --entrypoint bash python
root@9486145449ab:/# cd /html/
root@9486145449ab:/html# python -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (<http://0.0.0.0:8000/>) ...

在另一个终端,你可以检查一切看起来都很好:

$ curl localhost:8000
hello

回到容器上,有一条记录 HTTP 客户端连接的日志信息:

10.4.0.1 - - [09/Sep/2021 14:59:08] "GET / HTTP/1.1" 200 -

一个文件是不够的,所以还要做些优化。 在服务器上执行 CTRL-C,并添加另一个文件:

^C
Keyboard interrupt received, exiting.
root@9486145449ab:/html# echo goodbye &gt; foo.html
root@9486145449ab:/html# python -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

检查你是否能看到新的文件:

$ curl localhost:8000/foo.html
goodbye

总结

总结一下,安装 lima 需要一些时间,但完成后,你可以做以下事情:

  • 运行容器。
  • 将你的主目录中的任意子目录挂载到容器中。
  • 编辑这些目录中的文件。
  • 运行网络服务器,在 Mac 程序看来,它们是在 localhost 上运行的。

这些都是通过 lima nerdctl 实现的。


via: https://opensource.com/article/21/9/run-containers-mac-lima

作者:Moshe Zadka 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

nvme-cli 命令拥有诸多实用的选项,且它是控制和管理数据一种很好的方式。

 title=

NVMe 是指 非易失性内存规范 Non-Volatile Memory Express ,它规范了软件和存储通过 PCIe 和其他协议(包括 TCP)进行通信的方式。它是由非营利组织领导的 开放规范,并定义了几种形式的固态存储。

我的笔记本电脑有一个 NVMe 驱动器,我的台式机也有。而且它们的速度很快。我喜欢我的电脑启动的速度,以及它们读写数据的速度。几乎没有延迟。

没过多久,我就对驱动这种超高速存储的技术产生了好奇,所以我做了一些调查。我了解到,NVMe 驱动器消耗的电力更少,而提供的数据访问速度甚至比 SATA 的 SSD 驱动器快得多。这很有趣,但我想知道更多关于我的特定 NVMe 驱动器的信息,我想知道它们与其他驱动器有何区别。我可以安全地擦除驱动器吗?我怎样才能检查它的完整性?

带着这些问题我在互联网上搜索,发现了一个开源项目,其中有一系列管理 NVMe 驱动器的工具。它被称为 nvme-cli

安装 nvme-cli

你可以从你的发行版的包管理器中安装 nvme-cli。例如,在 Fedora、CentOS 或类似系统上:

$ sudo dnf install nvme-cli

在 Debian、Mint、Elementary 和类似系统上:

$ sudo apt install nvme-cli

探索 NVMe 驱动器

在安装 nvme-cli 后,我想探索我的驱动器。nvme-cli 没有手册页,但你可以通过输入 nvme help 获得很多帮助:

$ nvme help
nvme-1.14
usage: nvme <command> [<device>] [<args>]

The '<device>' may be either an NVMe character device (ex: /dev/nvme0) or an
nvme block device (ex: /dev/nvme0n1).

The following are all implemented sub-commands:
 list List all NVMe devices and namespaces on machine
 list-subsys List nvme subsystems
 id-ctrl Send NVMe Identify Controller
 id-ns Send NVMe Identify Namespace, display structure
 id-ns-granularity Send NVMe Identify Namespace Granularity List, display structure
 list-ns Send NVMe Identify List, display structure
 list-ctrl Send NVMe Identify Controller List, display structure
 nvm-id-ctrl Send NVMe Identify Controller NVM Command Set, display structure
 primary-ctrl-caps Send NVMe Identify Primary Controller Capabilities
[...]

列出所有的 NVMe 驱动器

sudo nvme list 命令列出你机器上所有的 NVMe 设备和命名空间。我用它在 /dev/nvme0n1 找到了一个 NVMe 驱动器。下面是命令输出结果:

$ sudo nvme list

Node SN Model Namespace Usage Format FW Rev

--------------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------

/dev/nvme0n1    S42GMY9M141281 SAMSUNG MZVLB256HAHQ-000L7 1

214.68 GB / 256.06 GB 512  B + 0 B 0L2QEXD7

我有一个名为 nvme0n1 的驱动器。它列出了序列号、品牌、容量、固件版本等等。

通过使用 id-ctrl 子命令,你可以得到更多关于该硬盘和它所支持的特性的信息:

$ sudo nvme id-ctrl /dev/nvme0n1
NVME Identify Controller:
vid : 0x144d
ssvid : 0x144d
sn : S42GMY9M141281
mn : SAMSUNG MZVLB256HAHQ-000L7
fr : 0L2QEXD7
rab : 2
ieee : 002538
cmic : 0
mdts : 9
cntlid : 0x4
ver : 0x10200
rtd3r : 0x186a0
rtd3e : 0x7a1200
[...]

驱动器健康

你可以通过 smart-log 子命令来了解硬盘的整体健康状况:

$ sudo nvme smart-log /dev/nvme0n1
Smart Log for NVME device:nvme0n1 namespace-id:ffffffff
critical_warning : 0
temperature : 21 C
available_spare : 100%
available_spare_threshold : 10%
percentage_used : 2%
endurance group critical warning summary: 0
data_units_read : 5,749,452
data_units_written : 10,602,948
host_read_commands : 77,809,121
host_write_commands : 153,405,213
controller_busy_time : 756
power_cycles : 1,719
power_on_hours : 1,311
unsafe_shutdowns : 129
media_errors : 0
num_err_log_entries : 1,243
Warning Temperature Time : 0
Critical Composite Temperature Time : 0
Temperature Sensor 1 : 21 C
Temperature Sensor 2 : 22 C
Thermal Management T1 Trans Count : 0
Thermal Management T2 Trans Count : 0
Thermal Management T1 Total Time : 0
Thermal Management T2 Total Time : 0

这为你提供了硬盘的当前温度、到目前为止的使用时间、不安全的关机次数等等。

格式化一个 NVMe 驱动器

你可以用 nvme-cli 格式化一个 NVMe 驱动器,但要注意。这将删除驱动器上的所有数据!如果你的硬盘上有重要的数据,你必须在这样做之前将其备份,否则你将会丢失数据。子命令是 format

$ sudo nvme format /dev/nvme0nX

(为了安全起见,我用 X 替换了驱动器的实际位置,以防止复制粘贴的错误。将 X 改为 1nvme list 结果中列出的实际位置。)

安全地擦除 NVMe 驱动器

当你准备出售或处理你的 NVMe 电脑时,你可能想安全地擦除驱动器。这里的警告与格式化过程中的警告相同。首先要备份重要的数据,因为这个命令会删除这些数据!

$ sudo nvme sanitize /dev/nvme0nX

尝试 nvme-cli

nvme-cli 命令是在 GPLv2 许可下发布的。它是一个强大的命令,有很多有用的选项,用来有效地控制和管理数据。


via: https://opensource.com/article/21/9/nvme-cli

作者:Don Watkins 选题:lujun9972 译者:geekpi 校对:turbokernel

本文由 LCTT 原创编译,Linux中国 荣誉推出

本教程将详细告诉你在树莓派 4 设备上如何安装 Ubuntu 桌面。

革命性的 树莓派 Raspberry Pi 是最受欢迎的单板计算机。它拥有基于 Debian 的操作系统,叫做 树莓派操作系统 Raspberry Pi OS (原名 Raspbian)。

还有其他几个 可用于树莓派的操作系统,但几乎所有的都是轻量级的,适合于树莓派设备的小尺寸和低端硬件。

随着标榜 8GB 内存和支持 4K 显示的树莓派 4B 的推出,情况发生了变化。其目的是将树莓派作为常规桌面使用,并在更大程度上成功地做到了这一点。

在 4B 型号之前,你可以 在树莓派上安装 Ubuntu 服务器,但桌面版本却无法使用。然而,Ubuntu 现在为树莓派 4 提供了官方的桌面镜像

在本教程中,我将展示在树莓派 4 上安装 Ubuntu 桌面的步骤。

首先,快速了解一下运行要求。

在树莓派 4 上运行 Ubuntu 的要求

以下是你需要的东西:

  1. 一个能够联网的 Linux 或 Windows 系统。
  2. 树莓派镜像工具 :树莓派的官方开源工具,可以在你的 SD 卡上写入发行版镜像。
  3. Micro SD 卡:最低使用 16GB 的存储卡,推荐使用 32GB 的版本。
  4. 一个基于 USB 的 Micro SD 卡读卡器(如果你的电脑没有读卡器)。
  5. 树莓派 4 必备配件,如 HDMI 兼容显示器、Micro HDMI 连接到标准 HDMI(A/M) 接口的电缆电源(建议使用官方适配器)、USB 的有线/无线键盘和鼠标/触摸板。

最好能够提前 详细阅读树莓派的要求

现在,闲话少叙,让我快速带领你完成 SD 卡的镜像准备。

为树莓派准备 Ubuntu 桌面镜像

树莓派提供了一个 GUI 应用程序,用于将 ISO 镜像写入 SD 卡中。这个工具还可以自动下载兼容的操作系统,如 Ubuntu、树莓派操作系统等

下载并将操作系统放入 SD 卡的官方工具

你可以从官方网站上下载这个工具的 Ubuntu、Windows 和 macOS 版本:

在 Ubuntu 和其他 Linux 发行版上,你也可以使用 Snap 安装它:

sudo snap install rpi-imager

安装完毕后,运行该工具。当你看到下面的界面时,选择 “ 选择操作系统 CHOOSE OS ”:

镜像工具:选择首选操作系统

在“ 操作系统 Operating System ”下,选择 “ 其它通用的操作系统 Other general purpose OS ”:

镜像工具: 其他通用的操作系统

现在,选择 “Ubuntu”:

镜像工具:发行版 - Ubuntu

接下来,选择 “Ubuntu Desktop 21.04(RPI 4/400)”,如下图所示。

镜像工具:发行版 - Ubuntu 21.04

注意:

如果你没有一个稳定的网络连接,你可以 从 Ubuntu 的网站上单独下载 Ubuntu 的树莓派镜像。在镜像工具中,在选择操作系统时,从底部选择“ 使用自定义 Use custom ”选项。你也可以使用 Etcher 将镜像写入到 SD 卡上。

将 Micro SD 卡插入读卡器中,等待它挂载。选择“ 存储设备 Storage ”下的 “ 选择存储设备 CHOOSE STORAGE ”:

镜像工具:选择存储设备(SD 卡)

你应该可以根据存储空间大小,识别你的 Micro SD 卡。这里,我使用的是 32GB 的卡:

镜像工具:选择 SD 卡

现在点击“ 写入 WRITE ”:

镜像工具:镜像写入

如果你已经备份了 SD 卡上的内容或是一张新卡,你可以直接进行:

镜像工具:镜像写入确认

由于这需要 sudo 的权限,你必须输入密码。如果你从终端运行 sudo rpi-imager,就不会出现这种情况:

镜像工具:镜像写入授权需要密码

如果你的 SD 卡有点旧,这将需要一些时间。如果它是一个新的高速 SD 卡,就无需很长时间:

镜像工具:写入镜像

为确保镜像写入成功,我不建议跳过验证:

镜像工具:验证写入

写入结束后,会有以下确认提示:

镜像工具:写入成功

现在,从你的系统中安全移除 SD 卡。

在树莓派上使用装有 Ubuntu 的 MicroSD 卡

已经成功了一半了。与常规的 Ubuntu 安装不同,无需创建一个临场安装环境。Ubuntu 已经安装在 SD 卡上了,而且几乎可以直接使用了。让我们来看看这里还剩下什么。

第 1 步:将 SD 卡插入树莓派中

对于第一次使用的用户来说,有时会有点困惑,不知道那个卡槽到底在哪里?不用担心。它位于电路板背面的左手边。下面是一个插入卡后的倒置视图。

树莓派 4B 板倒置,插入 Micro SD 卡

按照这个方向将卡慢慢插入板子下面的卡槽,轻轻地插,直到它不再往前移动。你可能还会听到一点咔嚓声来确认。这意味着它已经完美地插入了。

树莓派 SD 插槽在板子背面的左侧

当你把它插进去的时候,你可能会注意到在插槽中有两个小针脚调整了自己的位置(如上图所示),但这没关系。一旦插入,卡看起来会有一点突出。这就是它应该有的样子。

树莓派 SD 卡插入时有一小部分可见

第 2 步:设置树莓派

我无需在这里详细介绍。

保证电源线接头、微型 HDMI 线接头、键盘和鼠标接头(有线/无线)都牢固地连接到树莓派板的相关端口。

确保显示器和电源插头也已正确连接,然后再去打开电源插座。我不建议把适配器插到带电的插座上。参考 电弧

确认了以上两个步骤后,你就可以 打开树莓派设备的电源

第 3 步:在树莓派上 Ubuntu 桌面的首次运行

当你打开树莓派的电源,你需要在初次运行时进行一些基本配置。你只需按照屏幕上的指示操作即可。

选择你的语言、键盘布局、连接到 WiFi 等:

选择语言

选择键盘布局

选择 WiFi

你可以根据需求选择时区:

选择时区

然后创建用户和密码:

输入所需的用户名和密码

之后的步骤将配置一些东西,这个过程需要一些时间:

完成 Ubuntu 设置

完成 Ubuntu 设置

系统会重新启动之前需要一些时间,最终,你将会来到 Ubuntu 的登录界面:

Ubuntu 的登录界面

现在,你可以开始享受树莓派上的 Ubuntu 桌面了:

树莓派上的 Ubuntu 桌面

总结

我注意到一个暂时的异常情况。在进行安装时,我的显示器左侧有一个红色的闪烁边界。这种闪烁(也有不同的颜色)在屏幕的随机部分也能注意到。但在重启和第一次启动后,它就消失了。

很高兴能够看到它在树莓派上运行,我非常需要 Ubuntu 开始为树莓派等流行的 ARM 设备提供支持。

希望这个教程对你有所帮助。如果你有问题或建议,请在评论中告诉我。


via: https://itsfoss.com/install-ubuntu-desktop-raspberry-pi/

作者:Avimanyu Bandyopadhyay 选题:lujun9972 译者:wxy 校对:turbokernel

本文由 LCTT 原创编译,Linux中国 荣誉推出

当你刚接触 Linux 时,你会经常遇到这样的建议:永远不要运行 sudo rm -rf /。在 Linux 世界里,更是围绕着 sudo rm -rf 有很多梗。

但似乎对于它也有一些混乱的认识。在 清理 Ubuntu 以腾出空间 的教程中,我建议运行一些涉及 sudorm -rf 的命令。一位读者问我,如果 sudo rm -rf 是一个不应该运行的危险的 Linux 命令,我为什么要建议这样做。

因此,我想到了写一篇 Linux 黑话解释,以消除误解。

sudo rm -rf 在做什么?

让我们按步骤来学习。

rm 命令用于 在 Linux 命令行中删除文件和目录

$ rm agatha
$

但是因为有只读的 文件权限,有些文件不会被立即删除。它们必须用选项 -f 强制删除。

$ rm books
rm: remove write-protected regular file 'books'? y
$ rm -f christie
$

另外,rm 命令不能被用来直接删除目录(文件夹)。你必须在 rm 命令中使用递归选项 -r

$ rm new_dir
rm: cannot remove 'new_dir': Is a directory

因此最终,rm -rf 命令意味着递归地、强制删除指定的目录。

$ rm -r new_dir
rm: remove write-protected regular file 'new_dir/books'? ^C
$ rm -rf new_dir
$

下面是上述所有命令的截图。

解释 rm 命令的例子

如果你在 rm -rf 命令前加入 sudo,你就是在删除具有 root 权限的文件。这意味着你可以删除由 root 用户 拥有的系统文件。

所以,sudo rm -rf 是一个危险的 Linux 命令?

嗯,任何删除东西的命令都可能是危险的,如果你不确定你正在删除什么。

rm -rf 命令看作一把刀。刀是一个危险的东西吗?有可能。如果你用刀切蔬菜,那是好事。如果你用刀切手指,那当然是不好的。

rm -rf 命令也是如此。它本身并不危险。它只是用来删除文件的。但是,如果你在不知情的情况下用它来删除重要文件,那就有问题了。

现在来看看 sudo rm -rf /

你知道,使用 sudo,你是以 root 身份运行一个命令,这允许你对系统进行任何改变。

/ 是根目录的符号。/var 表示根目录下的 var 目录。/var/log/apt 指的是根目录的 log 目录下的 apt 目录。

Linux 目录层次表示法

按照 Linux 目录层次结构,Linux 文件系统中的一切都从根目录开始。如果你删除了根目录,你基本上就是删除了系统中的所有文件。

这就是为什么建议不要运行 sudo rm -rf / 命令,因为你会抹去你的整个 Linux 系统。

请注意,在某些情况下,你可能正在运行像 sudo rm -rf /var/log/apt 这样的命令,这可能是没问题的。同样,你必须注意你正在删除的东西,就像你必须注意你正在用刀切割的东西一样。

我在玩火:如果我运行 sudo rm -rf /,看看会发生什么呢?

大多数 Linux 发行版都提供了一个故障安全保护,防止意外删除根目录。

$ sudo rm -rf /
[sudo] password for abhishek:
rm: it is dangerous to operate recursively on '/'
rm: use --no-preserve-root to override this failsafe

我的意思是,人是会打错字的,如果你不小心打了 / var/log/apt,而不是 /var/log/apt/var 之间的空格意味着你给出了 /var 目录来删除),你将会删除根目录。(LCTT 译注:我真干过,键盘敲的飞起,结果多敲了一个空格,然后就丢了半个文件系统 —— 那时候 Linux 还没这种故障安全保护。)

使用 sudo rm -rf 时要注意

别担心。你的 Linux 系统会照顾到这种意外。

现在,如果你一心想用 sudo rm -rf / 来破坏你的系统呢?你将必须使用它将要求你使用的 -no-preserve-root 选项与之配合。

不,请不要自己这样做。让我做给你看看。

所以,我在一个虚拟机中运行基本的操作系统。我运行 sudo rm -rf / --no-preserve-root,你可以在下面的视频中看到灯光熄灭(大约 1 分钟)。

清楚了么?

Linux 有一个活跃的社区,大多数人都会帮助新用户。 之所以说是大多数,是是因为有一些的邪恶坏人潜伏着捣乱新用户。他们经常会建议对初学者所面临的最简单的问题运行 rm -rf /。我认为这些白痴在这种邪恶行为中得到了某种至上主义的满足。我会立即将他们从我管理的论坛和群组中踢出去。

我希望这篇文章能让你更清楚地了解这些情况。你有可能仍然有一些困惑,特别是因为它涉及到根目录、文件权限和其他新用户可能不熟悉的东西。如果是这样的话,请在评论区告诉我你的疑惑,我会尽力去解决。

最后,请记住。 不要喝酒胡搞 Don’t drink and root 。在运行你的 Linux 系统时要安全驾驶。


via: https://itsfoss.com/sudo-rm-rf/

作者:Abhishek Prakash 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

什么是 YAML,为什么我们现在应该开始使用它?

 title=

YAML YAML 不是标记语言 YAML Ain't Markup Language )是一种适宜阅读理解的数据序列化语言。它的语法简单而易于阅读。它不包含引号、打开和关闭的标签或大括号。它不包含任何可能使人类难以解析嵌套规则的东西。你可以看一下你的 YAML 文档就知道它在什么。

YAML 特性

YAML 有一些超级特性,使其优于其他序列化格式:

  • 易于略读。
  • 易于使用。
  • 可在编程语言之间移植。
  • 敏捷语言的原生数据结构。
  • 支持通用工具的一致模型。
  • 支持一次性处理。
  • 表现力和可扩展性。

我将通过一些例子进一步向你展示 YAML 的强大。

你能弄清楚下面发生了什么吗?

-------
# My grocery list
groceries:
    - Milk
    - Eggs
    - Bread
    - Butter
...

上面的例子包含了一个简单的杂货购物清单,它是一个完全格式化的 YAML 文档。在 YAML 中,字符串不加引号,而列表需要简单的连字符和空格。一个 YAML 文档以 --- 开始,以 ... 结束,但它们是可选的。YAML中的注释以 # 开始。

缩进是 YAML 的关键。缩进必须包含空格,而不是制表符。虽然所需的空格数量是灵活的,但保持一致是个好主意。

基本元素

集合

YAML 有两种类型的集合。列表(用于序列)和字典(用于映射)。列表是键值对,每个值都在一个新的行中,以连字符和空格开始。字典也是键值对,每个值都是一个映射,包含一个键、一个冒号和空格以及一个值。

例如:

# My List
groceries:
    - Milk
    - Eggs
    - Bread
    - Butter

# My dictionary
contact:
    name: Ayush Sharma
    email: [email protected]

列表和字典经常被结合起来,以提供更复杂的数据结构。列表可以包含字典,而字典可以包含列表。

字符串

YAML 中的字符串不需要加引号。多行字符串可以用 |> 来定义。前者保留了换行符,而后者则没有。

例如:

my_string: |
    This is my string.
    It can contain many lines.
    Newlines are preserved.
my_string_2: >
    This is my string.
    This can also contain many lines.
    Newlines aren't preserved and all lines are folded.

锚点

YAML 可以通过节点锚点来获得可重复的数据块。& 字符定义了一个数据块,以后可以用 * 来引用。例如:

billing_address: &add1
    house: B1
    street: My Street

shipping_address: *add1

至止你对 YAML 的了解就足以让你开始工作了。你可以使用在线 YAML 解析器来测试。如果你每天都与 YAML 打交道,那么 这个方便的备忘单 会对你有所帮助。

这篇文章最初发表在作者的个人博客上,并经授权改编。


via: https://opensource.com/article/21/9/intro-yaml

作者:Ayush Sharma 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出