分类 技术 下的文章

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

 title=

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

如果你熟悉 VirtualBox 或 GNOME 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 改为 1 或 nvme 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 以腾出空间 的教程中,我建议运行一些涉及 sudo 和 rm -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中国 荣誉推出