蚊章汇 - SK
type: channel
link: https://linuxcn.bwsl.wang/author/38/
description: SK
items: 如何在 Linux 中监控用户活动
items: 如何在 Linux 系统中使用 Ventoy 创建多重引导的 U 盘
items: 如何在 Linux 中使用 SCP 安全地传输文件
items: 通过 SSH 在远程 Linux 系统上执行命令
items: 在 Linux 中如何从命令行查找默认网关的 IP 地址
items: 如何在 sudo 运行的命令中防止使用参数
items: 如何在 Linux 中更改 GRUB 主题
items: 将 Docker 命令转化为 Docker Compose 文件
items: 如何使用 Watchtower 自动更新正在运行的 Docker 容器
items: 如何使用 Dockerfile 创建自定义 Docker 镜像

如何在 Linux 中监控用户活动
type: item
date: 2023-10-19T18:59:47+08:00
description: 作为一位 Linux 管理员，你需要跟踪所有用户的活动。当服务器发生故障时，你可以分析和查看用户活动，以便寻找问题的根源。监控 Linux 用户有多种方式。本指南将专门讨论 GNU 记账工具，这是一项用于监视 Linux 用户活动的实用工具。什么是记账工具？记账工具可以提供诸如 Linux 系统中的连接、已执行的程序以及系统资源的使用等有底系统使用信息。这些记账工具可以通过 psacct 或 acct 软件包安装。psacct 和 acct 实际上是相同的。在基于 RPM 的系统中，它以 psacct 的形式存在；而在基于 DEB 的系统中，它作为 acct 提供。你可能想知道 psacct 或 acct 工具的作用。通常，用户在命令行的历史记录会保存在他们的 $HOME 目录下的 .bash_history 文件中。有些用户可能会尝试编辑、修改或删除这些历史记录。然而，即使他们完全 清除了命令行历史，记账工具依然能够获取用户活动信息。这是因为，所有进程记账文件都由 root 用户拥有，而普通用户则无法进行编辑。Linux 中如何安装 psacct 或 acctpsacct/acct 被打包在多种流行的 Linux 发行版本中。如果要在 Alpine Linux 中安装 psacct，请运行以下命令：$ sudo apk add psacct 如果在 Arch Linux 及其变体版本（如 EndeavourOS 和 Manjaro Linux）中安装 acct，请运行以下命令：$ sudo pacman -S acct 在 Fedora、RHEL 及其衍生版本（如 CentOS、AlmaLinux 和 Rocky Linux）中安装 psacct，请运行以下命令：$ sudo dnf install psacct 在 RHEL 6 以及更早版本中，你应当使用 yum 命令而非 dnf 来安装 psacct。$ sudo yum install psacct 在 Debian、Ubuntu 以及 Linux Mint 中，通过如下命令来安装 acct：$ sudo apt install acct 若在 openSUSE 中安装 acct，则运行：$ sudo zypper install acct 启动 psacct/acct 服务要启用并开启 psacct 服务，请执行以下命令：$ sudo systemctl enable psacct 接着启动 psacct 服务：$ sudo systemctl start psacct 如果你需要检查 psacct 服务是否已加载和激活，可以运行：$ sudo systemctl status psacct 在基于 DEB 的系统中，安装完成之后，acct 服务会自动启动。如果你想验证 acct 服务是否已经启动，可以执行以下命令：$ sudo systemctl status acct ● acct.service - Kernel process accounting Loaded: loaded (/lib/systemd/system/acct.service; enabled; vendor preset: enabled) Active: active (exited) since Thu 2022-10-13 16:06:35 IST; 28s ago Docs: man:accton(8) Process: 3241 ExecStart=/usr/sbin/accton /var/log/account/pacct (code=exited, status=0/SUCCESS) Main PID: 3241 (code=exited, status=0/SUCCESS) CPU: 879us Oct 13 16:06:35 ubuntu2204 systemd[1]: Starting Kernel process accounting... Oct 13 16:06:35 ubuntu2204 accton[3241]: Turning on process accounting, file set to '/var/log/account/pacct'. Oct 13 16:06:35 ubuntu2204 systemd[1]: Finished Kernel process accounting. 利用 psacct 或 acct 来监测 Linux 中的用户活动psacct（进程记账）软件包包含以下用来监测用户和进程活动的工具：ac - 提供用户登录时间的统计信息。lastcomm - 展示先前执行过的命令的信息。accton - 开启或关闭进程记账。du…

如何在 Linux 系统中使用 Ventoy 创建多重引导的 U 盘
type: item
date: 2023-04-14T17:12:00+08:00
description: Ventoy 是一个自由开源和跨平台的程序，可以在 Linux、macOS 和微软的 Windows 中创建多重引导的 U 盘。你不必周而复始地格式化你的 USB 设备，只需创建一次可引导的 U 盘即可，如有需要可在将来添加你想要的 ISO。你甚至可以创建子文件夹，例如 Linux ISO、Windows ISO，并把各自的 ISO 文件放在相应的文件夹里。Ventoy 会自动为新添加的 ISO 生成菜单条目，并将它们添加到启动菜单中。一旦你创建完多重引导的 U 盘，使用它启动你的系统，选择你想加载的 ISO，马上就可以使用它。就是如此简单！功能Ventoy 有很多有用的功能，如：非常容易安装和使用。快速（仅受限于复制 ISO 文件的速度）。你不需要解压缩 ISO 文件。直接从 ISO 文件启动即可。可被安装在 U 盘／本地硬盘／SSD 盘／NVMe 盘／SD 卡中。它支持 传统 Legacy BIOS、IA32 UEFI、x86\_64 UEFI、ARM64 UEFI、MIPS64EL UEFI 等（LCTT 译注：这些英文缩写都是代表了不同的 CPU 架构。如 IA32 是指英特尔 32 位体系架构，x86\_64 指基于 x86 架构的 64 位扩展架构，ARM64 则是 ARM 体系结构的 64 位扩展、MIPS64EL 是指 64 位小端序的 MIPS 架构）。支持 IA32／x86\_64 UEFI 的安全启动。支持主分区使用 FAT32/exFAT/NTFS/UDF/XFS/Ext2/Ext3/Ext4 格式。默认使用 exFAT。支持在物理机中使用 Linux 发行版启动 vhd、vdi、raw 等格式的虚拟磁盘文件。持久化的存储支持。支持 MBR 和 GPT 两种分区格式都。默认使用 MBR。你可以用大于 4 GB 的 ISO 文件创建引导盘。几乎所有类型的操作系统都支持。开发者声称 Ventoy 已经测试过了超过 900 多个 ISO 文件。支持 Linux 自动安装。意味着你可以添加你的模板或脚本来进行无人值守的部署。例如，Redhat/CentOS 的 kickstart 脚本，SUSE 的 autoYast xml，Debian 的 preseed 脚本。把脚本或模板放在 U 盘里，让 ventoy 使用它进行无人值守安装。你也可以在任何时候更新这些脚本。不需要创建新的 ISO 文件，只要使用原来的 ISO 即可。支持 Windows 系统的自动安装。在启动期间对 USB 盘写保护。不影响 USB 启动盘的正常使用。这意味着你可以将 U 盘用于文件复制等其他用途。当有新的 Ventoy 版本时可供升级时，无须重新创建 USB 启动盘。在版本升级过程中，数据不会被破坏。当一个新的发行版发布时，不需要更新 Ventoy。将 ISO 文件复制/粘贴到 U 盘中，即可添加一个新的操作系统，没有必要从头开始。支持 内存盘 Memdisk 模式。在某些机器上，可能无法加载 ISO。在这种情况下，你可以使用 内存盘 Memdisk 模式。Ventoy 将把整个 ISO 文件加载到内存中，然后启动它。插件框架。 传统 Legacy 和 UEFI 的本地启动菜单风格。有命令行界面、本地图形化界面和基于 Web 的图形化界面的版本可用。支持主题和菜单风格的定制。跨平台。它支持 Linux、manOS 和 Windows 等操作系统。自由开源！在 Linux 中用 Ventoy 创建多重启动的 U 盘正如我之前提到的，Ventoy 有命令行界面、本地图形化界面和基于 Web 的图形化界面的版本可用。1. 使用 Ventoy 命令行创建多重启动的 U 盘首先，你需要找到你的 U 盘名称。可以通过下面的指南，来了解在 Linux 中寻找磁盘驱动器细节的不同方法。如何在 Linux 中 寻找硬盘驱动器细节我将使用 fdisk 命令来查找我的 U 盘的详细信息：$ sudo fdisk -l 样例输出：[...] Disk /dev/sdb: 14.54 GiB, 15597568000 bytes, 30464000 sectors Disk model: Cruzer Blade Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x4d924612 如你所见，我的 U 盘的名称是 /dev/sdb。接下来，从 发布页 下载…

如何在 Linux 中使用 SCP 安全地传输文件
type: item
date: 2022-12-24T23:22:00+08:00
description: 在网络上文件传输可以通过各种不同的方式和协议来完成。远程复制文件最常用的协议是 Rsync、SCP 和 SFTP。在本文中，我们将了解什么是 SCP 以及如何在 Linux 和类 Unix 操作系统中使用 SCP 在本地和远程计算机之间安全地传输文件。什么是 SCP？SCP，代表 安全复制 Secure Copy ，它是一个命令行程序，在 Linux 和类 Unix 操作系统中以安全的方式在本地和远程系统之间，或在两个远程系统之间复制文件和目录。使用 scp 命令，你可以安全地复制文件或目录：从本地到远程系统从远程系统到本地在两个远程系统之间使用 scp 命令传输数据时，文件和目录都是加密的。因此，即使网络被破坏，作恶者也无法获得任何有意义的数据。SCP 是 openSSH 程序的一个组件，它使用 SSH 协议安全地传输文件。几乎所有现代 Linux 和 Unix 发行版都预装了 OpenSSH，所以不必费心安装它。提醒一句：根据 openSSH 开发人员的官方公告：scp 协议已经过时了，它不灵活且不易修复。我们建议使用更现代的协议，如 sftp 和 rsync 来代替。参考 - https://lists.mindrot.org/pipermail/openssh-unix-dev/2019-March/037672.html但是，大多数用户仍然更喜欢 SCP 协议。因为，SCP 处理远程文件传输比同行 SFTP 和 Rsync 更快。另外，SCP 的工作原理与 cp 命令完全相同，而 rsync 则会判断源目录是否有结尾斜杠而出现不同的行为。看一看下面的命令：rsync source destination/ - 将 source 目录复制到 destination 文件夹内。rsync source/ destination/ - 将 source 目录的内容复制到 destination 文件夹中。所以，你必须反复检查是否在路径中添加了斜杠。我个人使用 Rsync 在两台主机之间复制大文件，使用 SCP 在网络上复制单个文件。SCP 命令语法SCP 的通用语法如下：scp [-346ABCpqrTv] [-c cipher] [-F ssh_config] [-i identity_file] [-J destination] [-l limit] [-o ssh_option] [-P port] [-S program] source ... target 根据文件传输路径的不同，语法也会有所不同。这里我罗列了一些语法格式示例。从本地复制一个文件到远程系统：scp <options> SourceFile User@RemoteHost:RemotePath 类似的，从本地系统复制一个目录到远程系统，使用 -r 参数：scp -r SourceDirectory User@RemoteHost:RemotePath 复制多个文件到远程系统：scp <options> SourceFile1 SourceFile2 User@RemoteHost:RemotePath 远程系统复制文件到本地：scp <options> User@RemoteHost:RemoteFilePath DestinationFile 远程系统复制目录到本地：scp -r User@RemoteHost:RemoteDirectoryPath DestinationDirectory 在本地将文件在两个远程系统之间复制：scp <options> User@RemoteHost1:RemoteFile1 User@RemoteHost2:RemotePath 注意，当你在两个远程系统之间复制文件时，流量不会通过本地系统。操作直接在两个远程系统之间进行。但是，你可以使用 -3 参数让流量经过你运行 scp 命令的系统。从你的本地系统将一个远程系统的目录复制到另一个远程系统：scp -r User@RemoteHost1:RemoteDirectory User@RemoteHost2:DestinationPath SCP 命令参数SCP 命令最常用的参数有：-C：启用压缩。C 代表 压缩 Compression 。使用此参数时，数据传输速度会更快，因为数据是压缩的。SCP 将自动在源系统上压缩，并在目标系统上解压缩。-c <cipher>：c 代表 加密 Cipher 。默认情况下，SCP 使用 AES-128 加密方法对数据进行加密。你可以使用 -c 参数更改加密方法。-i <identity_file>：i 代表 身份 Identity 文件或私钥。如你所知，SSH 中使用基于密码或密钥的身份验证。如果希望在传输文件时使用基于密钥的身…

通过 SSH 在远程 Linux 系统上执行命令
type: item
date: 2022-11-18T00:39:12+08:00
description: 通过安全的网络连接在远程计算机上调用命令或程序。有一天，我正在测试如何在 将文件或目录复制到多个位置和系统时保持完整的文件权限。当我想检查远程系统上的文件权限时，我必须通过 SSH 登录它并检查属性。从远程系统多次登录和注销的过程让我有点烦，我想，如果我可以在远程 Linux 系统上通过 SSH 执行命令就好了。幸运的是，在浏览了 ssh 命令的手册页后，我找到了一个解决办法。如果你想知道如何本地运行远程系统上运行命令或脚本，而不登录到远程系统，下面的内容会告诉你如何做。1、通过 SSH 在远程 Linux 系统上执行命令从本地系统通过 SSH 在远程系统上运行命令或脚本的典型方法是：$ ssh <username@IP_Address-or-Doman_name> <Command-or-Script> 允许我给你们举几个例子：1.1、通过 SSH 在远程系统上运行单个命令假设你想要 查找远程 Linux 系统的内核详细信息。为此，只需运行：$ ssh sk@192.168.225.22 uname -a 这里，sk 是远程系统的用户名，192.168.225.22 是远程系统的 IP 地址，uname -a 是我想在远程系统上运行的命令。示例输出：看到没？我并没有实际登录到远程系统，但通过 SSH 在远程系统上执行了 uname 命令，并在本地系统的终端上显示了输出。你还可以像下面这样用引号指定命令。$ ssh sk@192.168.225.22 "uname -a" 或者，$ ssh sk@192.168.225.22 'uname -a' 如果你已经 更改了 SSH 协议的默认端口，只需使用 -p 参数指定它。$ ssh -p 2200 sk@192.168.225.22 uname -a 1.2、通过 SSH 在远程主机上执行多个命令你还可以在远程主机上运行多个命令，方法是将它们放在引号中。$ ssh sk@192.168.225.22 "uname -r && lsb_release -a" 或者：$ ssh sk@192.168.225.22 "uname -r ; lsb_release -a" 上面的命令将显示我的 Ubuntu 服务器的内核版本和发行版详细信息。示例输出：正如一位读者在下面的评论部分提到的那样，你应该用引号指定多个命令。如果不使用引号，第一个命令将在远程系统上执行，第二个命令将仅在本地计算机上执行。整个带引号的命令将按预期在远程计算机上运行。提示： 了解 && 和 ; 在命令中的区别：&& 操作符只有在第一个命令成功时才执行第二个命令。示例：sudo apt-get update && sudo apt-get upgrade 在上述示例中，如果第一个命令成功，才会执行 sudo apt-get upgrade。否则，它将不会运行。; 操作符会执行第二个命令，无论第一个命令是成功还是失败。示例：sudo apt-get update ; sudo apt-get upgrade 在上述示例中，即使第一个命令失败，sudo apt-get upgrade 也会执行。1.3、通过 SSH 在远程机器上调用有 sudo 权限的命令有些命令需要 sudo 权限才能运行。例如，以下命令将在我的远程系统上安装 apache2。$ ssh -t sk@192.168.225.22 sudo apt install apache2 示例输出：注意到了吗？我在上面的命令中使用了 -t 标志，我们需要使用它来强制进行伪终端分配。它用于在远程机器上执行任意基于屏幕的程序，这非常有用。例如，在实现菜单服务时。另外，我输入了两次密码。第一次是远程用户的密码，以便从本地系统通过 SSH 访问远程系统，第二次是为了向远程用户赋予 sudo 权限，以便安装应用程序（在本例中为 apache2）。让我们用以下命令检查 Apache 服务是否正在运行：$ ssh -t sk@192.168.225.22 sudo systemctl status apache2 sk@192.168.225.22's password: [sudo] password for sk: ● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Thu…

在 Linux 中如何从命令行查找默认网关的 IP 地址
type: item
date: 2022-10-21T00:16:10+08:00
description: Linux 下查找网关或路由器 IP 地址的 5 种方法。网关 是一个节点或一个路由器，当连接到同一路由器时，它允许两个或多个 IP 地址不同的主机相互通信。如果没有网关，它们将无法相互通信。换句话说，网关充当接入点，将网络数据从本地网络传输到远程网络。在本指南中，我们将看到在 Linux 和 Unix 中从命令行找到默认网关的所有可能方法。在 Linux 中查找默认网关Linux 中有各种各样的命令行工具可用于查看网关 IP 地址。最常用的工具是：ip、ss 和 netcat。我们将通过示例了解如何使用每种工具查看默认网关。1、使用 ip 命令查找默认网关ip 命令用于显示和操作 Linux 中的路由、网络设备、接口和隧道。要查找默认网关或路由器 IP 地址，只需运行：$ ip route 或者：$ ip r 或者：$ ip route show 示例输出：default via 192.168.1.101 dev eth0 proto static metric 100 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.20 metric 100 你从输出中看到了 default via 192.168.1.101 这一行吗？它就是默认网关。我的默认网关是 192.168.1.101。你可以使用 -4 参数只显示 IPv4 网关：$ ip -4 route 或者，使用 -6 参数只显示 IPv6 网关：$ ip -6 route 如你所见，IP 地址和子网详细信息也一并显示了。如果你想只显示默认网关，排除所有其他细节，可以使用 ip route 搭配 awk 命令，如下所示。使用 ip route 和 awk 命令打印网关地址，执行命令：$ ip route | awk '/^default/{print $3}' （LCTT 译注：wsl1 上无输出结果，正常 Linux 发行版无问题）或者：$ ip route show default | awk '{print $3}' 这将只列出网关 IP：示例输出：192.168.1.101 你也可以使用 grep 命令配合 ip route 对默认网关进行过滤。使用 ip route 和 grep 查找默认网关 IP 地址，执行命令：$ ip route | grep default default via 192.168.1.101 dev eth0 proto static metric 100 在最新的 Linux 发行版中，ip route 是查找默认网关 IP 地址的推荐命令。然而，你们中的一些人可能仍然在使用传统的工具，如 route 和 netstat。旧习难改，对吧？下面的部分将介绍如何在 Linux 中使用 route 和 netstat 命令确定网关。2、使用 route 命令显示默认网关 IP 地址route 命令用于在较老的 Linux 发行版中显示和操作路由表，如 RHEL 6、CentOS 6 等。如果你正在使用较老的 Linux 发行版，你可以使用 route 命令来显示默认网关。请注意，在最新的 Linux 发行版中，route 工具已被弃用，ip route 命令取而代之。如果你因为某些原因仍然想使用 route，你需要安装它。首先，我们需要检查哪个包提供了 route 命令。为此，在基于 RHEL 的系统上运行以下命令：$ dnf provides route 示例输出：net-tools-2.0-0.52.20160912git.el8.x86_64 : Basic networking tools Repo : @System Matched from: Filename : /usr/sbin/route net-tools-2.0-0.52.20160912git.el8.x86_64 : Basic networking tools Repo : baseos Matched from: Filename : /usr/sbin/route 如你所见，net-tools 包提供了 route 命令。所以，让我们使用以下命令来安装它：$ sudo dnf install net-tools 现在，运行带有 -n 参数的 route 命令来显示 Linux 系统中的网关或路由器 IP 地址：$ route -n 示例输出：Kernel IP routing table Destination Gateway Genm…

如何在 sudo 运行的命令中防止使用参数
type: item
date: 2022-10-05T06:41:20+08:00
description: 允许用户使用 sudo 运行命令，但不带命令行参数。在之前的文章，我们学习了如何 通过 sudo 以 root 身份运行目录中的命令。在这篇指南中，我们将学习如何在 Linux 中 防止 sudo 运行的命令使用参数。即我们允许一个用户使用 sudo 运行特权级命令，但是 不带命令行参数。背景介绍你已经知道了，每个命令执行一个特定操作有不同的选项。让我们以 ls 命令为例。ls 命令会罗列文件夹中的内容，对吗？没错。ls 命令附带了一些命令行选项和标志。例如，你可以用 ls 命令的 -a 标志罗列文件夹中的所有内容（包括隐藏文件）。在这份简要指南中，我们将明白如何允许用户通过 sudo 运行 ls 命令，但是不能使用命令行选项或者标志。我讲清楚了吗？接下来让我来展示一下如何做到这点。防止使用 sudo 参数以 root 用户身份编辑 /etc/sudoers 文件：[root@Almalinux8CT ~]# visudo 添加下面一行：user1 ALL=(root) /usr/bin/ls "" 要注意这里 ls 之后的 双引号。双引号会屏蔽用户在给定命令之后输入的参数（比如 ls 命令）。在上面的命令中，user1 能够以 root 身份运行 ls 命令，但是不能使用 ls 命令的选项以及标志。你可以选择其他的指令进行尝试。保存该文件并关闭。现在，以 user1 的身份登录系统，并尝试以管理员身份运行 ls 命令，不要添加任何选项：[user1@Almalinux8CT ~]$ sudo -u root ls -a 或许你会遇到下面的报错：Sorry, user user1 is not allowed to execute '/bin/ls -a' as root on Almalinux8CT. 不过你可以不添加参数来运行 ls 命令：[user1@Almalinux8CT ~]$ sudo -u root ls 防止所有用户使用命令参数上述例子像你展示了如何阻止用户以管理员身份运行带有参数的命令。你是否想要对所有用户应用该规则呢？很简单！只需要在 /etc/sudoers 文件中添加一行：ALL ALL=(root) /usr/bin/ls "" 现在，系统中的所有用户都可以运行不带参数的 ls 命令。想要恢复默认设置，只需要删除最后的双引号，或者删除整行。查看帮助手册，了解更多。$ man sudoers 结论在这份指南中，我们学习了如何允许用户以管理员身份运行命令，但是不能添加任何命令参数。这样可以限制用户误用一些命令行参数。via: https://ostechnix.com/prevent-command-arguments-with-sudo/作者：sk 选题：lkxed 译者：Donkey-Hao 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出

如何在 Linux 中更改 GRUB 主题
type: item
date: 2022-08-29T19:47:26+08:00
description: 在 Linux 中安装和应用现代的漂亮的 GRUB 主题。GRUB ，意即 大统一引导程序 GRand Unified Bootloader ，它是大多数 Linux 操作系统的默认引导加载程序。GRUB 引导加载程序是计算机启动时运行的第一个程序。正如你可能注意到的，GRUB 菜单的默认主题是朴素的。它只有一个黑色的背景和一些白色的字符。你们中的一些人可能不喜欢默认的 GRUB 主题。在这篇教程中，我将演示如何 更改 GRUB 主题 或应用华丽的主题，以使你的 GRUB 菜单在 Linux 中更加精美。数年前，我们发布了一篇指南，阐释了如何在 Ubuntu 中 配置 GRUB2 引导加载程序设置 。在这篇文章中，我们将向你展示如何更改 GRUB 背景。但是，只更改背景不是真正的自定义。在这篇指南中，我们不仅会更改壁纸，也会更改 GRUB 的字体、主题和整体的设计。免责声明： 安装 GRUB 主题可能会破坏你的系统。我强烈建议你在一个虚拟机中尝试和测试一个主题来查看它是否没有正常工作。然后再在实际的系统上安装主题。介绍在互联网上可以找到很多社区开发的 GRUB 主题。然而，它们却散落在不同的网站上。因此，找到一个好的 GRUB 主题可能会事倍功半。GRUB 主题的一个重要的贡献者是 Pling 网站。但是，Pling 中的大部分主题是非常简单的或过时的。幸运的是，我遇到一个名称为 Gorgeous GRUB 的项目，它是一个可以找到各种精美的 GRUB 主题的地方。相信我，作者付出了巨大的努力来收集这些主题，肯定会你喜欢的主题。Gorgeous GRUB：一个可以找到很棒的 GRUB 主题的地方Gorgeous GRUB 是一个由不同用户所创建的质量上乘的 GRUB 社区主题的收藏集合。这个项目的开发者从 Pling 、/r/unixporn 和其它很多的论坛中手工挑选漂亮的 GRUB 主题，并将它们放置到一起，以便用户可以很容易的浏览它们。如上所述，在 Pling 中的很多主题都是粗糙和过时的。Gorgeous GRUB 的作者翻遍了 Pling 和其它一些论坛的整个 GRUB 部分，并将所有令人满意的 GRUB 主题放置到一个地方。它们不是一些粗制滥造的主题。他们付出了大量的努力来将定制的背景、字体和颜色等融合在一起。请注意，Gorgeous GRUB 并不是一个安装你最喜欢的 GRUB 主题的应用程序。它只是一个良好工作的 GRUB 主题的展览列表。这个项目托管在 GitHub 中。如果你有一些很酷的 GRUB 主题，你也可以将其添加到 Gorgeous GRUB 主题列表之中。如何更改 GRUB 主题应用或更改 GRUB 主题并不难。转到 Gorgeous GRUB 的 GitHub 网页 ，单击任意你想要应用的主题的标题。接下来，你将会被带到该主题的实际主页。一些主题托管在 Pling 之中，一些主题托管在 GitHub 之中。我将会看看如何安装来自 Pling 或 GitHub 的 GRUB 主题。首先，让我们看看如何应用 “Descent” 主题，它托管在 Pling 中。1、从 Pling 安装 GRUB 主题如果主题托管在 Pling 网站，遵循这些操作说明。在主题主页，单击 文件 Files 标签页。你将会在图像预览的下方找到这个标签页。单击文件链接来下载它。转到下载位置并提取存档文件：$ tar xzf 173860-20150926\ descent.tar.gz 存档文件的内容将被提取到当前工作目录中一个名称为 descent 目录中。使用下面的命令复制 descent 目录到 /boot/grub/themes/ 目录：$ sudo cp -r descent/ /boot/grub/themes/ 如果 themes 目录不存在，只需要创建它：$ sudo mkdir /boot/grub/themes 并给 themes 目录分配适当的权限：$ sudo chown $USER /boot/grub/themes/ 接下来，如上所述复制 descent 目录中内容到 themes 目录。现在，你应该在 themes 目录中有一个以主题名称命名的文件夹：$ ls /boot/grub/themes/ descent 并且，这个主题文件夹（例如 descent）应该包含 theme.txt 和该主题附带的其它一些相关的文件（例如，背景图像、自定义文件）。$ ls /boot/grub/themes/descent/ background1280x800.png descent_score_14.pf2 menu_ne.png menu_s.png progresshigh_c.png scrollf…

将 Docker 命令转化为 Docker Compose 文件
type: item
date: 2022-08-27T23:06:10+08:00
description: 使用 Composerize 从 docker run 命令创建 Docker Compose 文件如果你每天在正式或个人系统中使用 Docker，你应该知道有一个有用的应用叫 Composerize。在这个简短的指南中，我们将了解什么是 Composerize，以及如何使用 Composerize 在 Linux 中将 docker run 命令转换为 Docker Compose 文件格式。什么是 Composerize？Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。Docker Compose 只是一个 YAML 文件，我们在其中为 Docker 应用定义服务、网络和卷。不是每个人都擅长写高效的 Docker Compose 文件。你们中的一些人可能会发现，甚至写一个简单的 Docker Compose 文件都很困难。不用担心! 看下 Composerize，它可以帮助你从 docker run 命令中创建 Docker Compose 文件。Composerize 是一个命令行和基于网络的工具，可以将 docker run 命令转换成 Docker Compose 文件。无论 docker run 命令是简单、简短还是冗长、复杂，都没有关系。你所要做的就是把命令传给 Conposerize。Composerize 会立即将 docker run 命令变成 Docker Compose 文件！在 Linux 中安装 ComposerizeComposerize 是作为一个网络服务提供的。所以你不需要在你的系统上安装它。如果你因为任何原因想在本地安装它，请继续阅读。Composerize 可以用 npm 安装。确保你的系统中已经安装了 Nodejs。如果没有安装，请按照下面的链接来安装 Nodejs。如何在 Linux 上安装 NodeJS安装完 Nodejs 后，运行以下命令来安装 Composerize：$ npm install composerize 该命令将只为当前用户安装 Composerize。如果你想在全局（全系统）安装它，请运行上述命令并加上 -g 选项，如下所示。$ npm install composerize -g 用 Composerize 将 Docker 命令转换为 Docker Compose 文件要将 docker run 命令转换为 Docker Compose 格式，只需用 Composerize 运行它，如下所示：$ composerize docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer 它将以 Docker Compose 文件格式生成内容。示例输出：version: '3.3' services: portainer: ports: - '9000:9000' volumes: - '/var/run/docker.sock:/var/run/docker.sock' image: portainer/portainer 现在在你的 docker-compose.yml 文件中复制上面几行。就这么简单！正如我所说，你也可以使用 Composerize 网络服务将 docker run 命令转换成 Docker Compose 格式。进入 https://www.composerize.com/，将 docker run 命令粘贴到框中，你就会立即得到 docker-compose.yml 文件！将命令转换为 Docker Compose 文件后，到你保存 docker-compose.yml 文件的位置，运行以下命令来启动 Docker 应用：$ docker-compose up Composerize 是对 Docker 用户有用的工具之一。你现在可以安全地告别漫无边际的 Docker 命令了。资源：Composerize GitHub 仓库via: https://ostechnix.com/convert-docker-run-commands-into-docker-compose-files/作者：sk 选题：lkxed 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出

如何使用 Watchtower 自动更新正在运行的 Docker 容器
type: item
date: 2022-08-14T01:17:15+08:00
description: 使用 Watchtower 自动更新 Docker 容器基础镜像对开发运维人员来说，保持 Docker 容器为最新版本是重要工作之一。手动更新 Docker 容器是一项耗时的工作。这篇文章解释了 Watchtower 是什么，如何安装它，以及在 Linux 中如何 使用 Watchtower 自动更新正在运行的 Docker 容器 。Watchtower 是什么？Watchtower 是一款自由开源的应用，用来监控运行中的 Docker 容器，并且当它发现基础镜像被更改后，可以自动的更新容器。若 Watchtower 发现一个运行中的容器需要更新，它会以发送 SIGTERM 信号的方式，优雅的结束运行中容器的运行。它会下载新镜像，然后以最初部署时使用的方式，重启容器。所有文件会在后台自动下载，因此不需要用户的介入。在这份指南中，我们将会明白如何在类 Unix 系统中使用 Watchtower 自动更新正在运行的 Docker 容器。我已经在 CentOS 和 Ubuntu 中测试了这份指南，所有的 Linux 发行版中操作过程都一样。在 Linux 中安装 Watchtower可以通过 Docker 镜像的方式下载 Watchtower 。因此，部署它是小事一桩。在你的 Linux 中安装 Docker 镜像，然后运行 Watchtower 立即开始监控 Docker 容器。参考下方指导在基于 PRM 和 DEB 包管理系统中安装 Docker如何在 CentOS 中安装 Docker如何在 Ubuntu 中安装 Docker适用于 Linux 的 Docker 桌面初学者手册安装 Docker 后，你可以使用以下命令以 root 用户身份部署 Watchtower 容器：# docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower 如果你已经安装了 Docker 桌面版，以普通用户运行 Watchtower 容器。$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower 该命令会拉取最新版的 watchtower 镜像，并运行 watchtower 容器。输出样例：Unable to find image 'containrrr/watchtower:latest' locally latest: Pulling from containrrr/watchtower 1045b2f97fda: Pull complete 35a104a262d3: Pull complete 1a0671483169: Pull complete Digest: sha256:bbf9794a691b59ed2ed3089fec53844f14ada249ee5e372ff0e595b73f4e9ab3 Status: Downloaded newer image for containrrr/watchtower:latest 91c104ef0e9896e8cd5ff30d9f13e728dbfad66443830ec2ac85dde6d7d37564 使用 Watchtower 自动更新 Docker 容器在你的系统上，Watchtower 正在和其他容器一起运行。你可以使用一下命令查看运行中的 Docker 容器列表：$ docker ps 输出样例：CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 91c104ef0e98 containrrr/watchtower "/watchtower" 14 minutes ago Up 14 minutes 8080/tcp watchtower f90b462b0712 bitnami/wordpress-nginx:6 "/opt/bitnami/script…" 19 minutes ago Up 19 minutes 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp ostechnix-wordpress-1 正如上方输出所示，watchtower 容器正在和名为 ostechnix-wordpress-1 的容器一起运行。从现在开始，watchtower 会每隔几分钟会检查该容器。如果 Watchtower 发现该容器的基础镜像的任何变化，它会优雅的关闭 ostechnix-wordpress-1 容器，…

如何使用 Dockerfile 创建自定义 Docker 镜像
type: item
date: 2022-08-05T01:20:07+08:00
description: 在这份指南中，我们将看到 Dockerfile 的简要介绍以及如何在 Linux 中使用 Dockerfile 来自动的 创建自定义 Docker 镜像 。什么是 Dockerfile ？Dockerfile 是附有构建 Docker 镜像说明的易于理解的文本文件。它囊括了用户在创建镜像时可以调用的所有命令。我们可以使用 Dockerfile 创建自定义的镜像。可以通过 Docker Hub 分享的自定义 Docker 镜像。如果你还不知道，Docker Hub 是 Docker 提供的托管存储库服务，用于团队查找和共享容器镜像，当然世界上任何人也都可以访问。想象一下，早期如果我们想用 Nginx，我们要通过很多步骤，才能安装和配置好 Nginx 。得益于 Docker Hub ，现在我们可以在几分钟内，下载并运行 Nginx 的预置容器镜像。运行如下命令从 Docker Hub 上拉取 Nginx 镜像：# docker pull nginx 一旦我们拉取了 Docker 镜像，可以运行如下命令使用它：# docker run -it -d -p 8080:8080 nginx 就这样，十分简单！参考下方链接，了解更多使用 Docker 的方式：开始使用 DockerDocker Hub 上有超过十万个来自软件供应商、开源项目以及社区的容器镜像。你可以从 Docker Hub 上下载你选择的镜像，并且使用上面的命令开始使用它。理解 Dockerfile 格式Docker 可以读取 Dockerfile 中的 指令 来自动的创建镜像。典型的 Dockerfile 包含如下指令：1、FROM —— 这会设置容器的基础镜像。例如：FROM ubuntu:22.04 这会将容器的基础镜像设置为 Ubuntu 。如果 ‘22.04’ 这个标志没有特别指明，则会设为最新版本（latest）。2、LABEL —— 这是用来明确镜像的元数据信息的键值对。例如：LABEL ENV=“DEVELOPMENT” 3、RUN —— 这会在基础镜像中执行指令并创建一个新层。例如：RUN apt-get update RUN apt-get install tomcat 4、CMD —— 这用来设置容器启动后先执行的命令。例如：CMD ["java", "-jar", "app.jar"] 5、EXPOSE —— 设置用于访问容器的端口。容器将会监听该端口。我们可以用来获得输出。例如：EXPOSE 8080 6、`MAINTAINER —— 显示创建镜像作者的信息。例如：MAINTAINER info@ostechnix.com 7、ENV —— 用来设置环境变量的键值对。这些变量在镜像创建的时候设置，并在容器创建好后可以使用。例如：ENV DB_NAME=”MySQL” ENV DB_VERSION=”8.0” 8、COPY —— 用来拷贝本地文件至容器中。例如：COPY /target/devops.jar devops.jar 9、ADD —— 具有与拷贝相同的功能，不过更进一步还可以提取本地的 tar 文件或者从 URL 拷贝文件。例如：ADD devops.tar.xz / . ADD http://example.com/abc.git /usr/local/devops/ 10、ENTRYPOINT —— 用来设置镜像的主要命令。与 CMD 指令功能相同。不同的是 ENTRYPOINT 中的指令不会被重写。例如：ENTRYPOINT ["java", "-jar", "app.jar"] 11、VOLUME —— 该指令用来创建指定位置的挂载点。例如：VOLUME /app/devops 12、USER —— 将设置运行镜像并使用的用户名称以及用户组。例如：USER dhruv USER admin 13、WORKDIR —— 这会设置工作目录。如果目录不存在，则会创建。例如：WORKDIR /var/lib/ 这是一个 Dockerfile 的样本，可以参考一下：FROM ubuntu:latest MAINTAINER Senthilkumar Palani "info@ostechnix.com" RUN apt-get install -y software-properties-common python RUN add-apt-repository ppa:chris-lea/node.js RUN echo "deb http://us.archive.ubuntu.com/ubuntu/ jammy universe" >> /etc/apt/sources.list RUN apt-get update RUN apt-…