#host #dns #drop-in #networking #file-manager

app drophost

一个简单的基于 /etc/hosts 的管理工具

9个版本

0.4.2 2023年4月27日
0.4.1 2023年4月22日
0.3.0 2023年4月4日
0.2.8 2023年1月24日

网络编程 中排名 1551

每月下载量 35

MIT 许可证 MIT

40KB
770

Drophost

Build & Test GitHub last commit

Drophost 是一个简单的用于维护您的 /etc/hosts 文件的工具。它允许您使用插入目录动态配置主机文件。

安装

使用 Cargo

crates.io

cargo install drophost

Arch Linux (AUR)

AUR maintainer

yay -S drophost

从源码安装

从 GitHub 下载源代码,并使用 cargo 构建。

git clone https://github.com/KodiCraft/drophost.git
cd drophost
cargo build --release

或者使用 cargo install

git clone https://github.com/KodiCraft/drophost.git
cd drophost
cargo install --path .

用法

备份当前系统 hosts 文件

drophost 具有将当前 /etc/hosts 文件保存为配置文件的功能。这样,当您运行 drophost 时,当前的主机文件将自动使用。

sudo drophost -b

此文件将命名为 10-old-config.conf,并将位于插入目录中。

添加您自己的文件

drophost 将从 /etc/hosts.d 目录中读取文件。目录中的任何文件都将被读取并解析。文件将按字母顺序读取,因此您可以使用数字来控制它们被读取的顺序。

如果您想测试文件,创建一个名为 output 的目录,并像对待 /etc/ 目录一样对待它(即在 output/hosts.d 中添加您的配置文件,并从 output/hosts 中读取结果)。然后使用 drophost-d 标志运行。

drophost -d

标志

Drophost 包含一些标志,可以用来自定义其行为。

  • -b--backup 将将当前 hosts 文件备份到插入目录。
  • -d--dry-run 将在没有修改您的 hosts 文件的情况下运行 drophost
  • -w--watch 会监视插入目录的更改,并在检测到更改时自动更新您的hosts文件。
  • -h--help 会显示帮助信息。

您还可以传递 -l--log-level 标志来设置日志级别。默认日志级别是 info。可用的日志级别有 tracedebuginfowarnerroroff

文件格式

drophost 的文件与 /etc/hosts 文件的语法完全兼容,但它们还增加了一些附加功能。

提醒一下,可以使用以下语法添加主机

ip.address hostname

注释可以使用 # 字符插入。

# This is a comment

大声注释

大声注释是在日志中遇到时会显示警告的注释。这允许您轻松地调试配置文件。

#=> This is a loud comment

变量

drophost 允许您在配置文件中定义变量,并在以后获取它们。您可以使用以下语法设置变量

set variable_name = value

然后可以使用以下语法获取变量的值

$variable_name

变量可以在配置文件中的任何地方使用。例如,您可以使用它们来定义一个主机名

set hostname = my-hostname
127.0.0.1 $hostname

或定义一个IP地址

set ip = 127.0.0.1
$ip my-hostname

您还可以使用以下语法取消设置变量

unset variable_name

变量在不同的配置文件之间保持。这意味着您可以在一个文件中定义一个变量并在另一个文件中使用它。

此外,所有通过 drophost 调用的环境变量都自动作为变量可用。例如,如果您将 HOSTNAME 环境变量设置为 my-hostname 并调用 drophost,您可以在配置文件中使用它

127.0.0.1 $env_HOSTNAME

条件语句

条件语句允许您在配置文件中包含分支逻辑。它们使用以下语法定义

if $value1 == $value2
    # Do something
else
    # Do something else
end

if 语句将评估条件,如果条件为真则执行代码块。如果条件为假,将执行 else 代码块。如果没有定义 else 代码块,则如果条件为真,将执行 if 代码块。

您可以在条件中使用变量或字面值。例如,您可以使用以下语法检查变量是否不等于 "hello world"

if $variable != hello world
    # Do something
end

注意,变量名和字面值中允许有空格,且没有引号。

由于所有变量都是字符串,您只有 ==!= 运算符可用。

外部条件

有时检查与 drophost 逻辑不相关的某些状态可能很有用。这就是 try 语法发挥作用的地方。

您可以使用以下任何条件进行 try

  • file <path>:检查在给定路径上是否存在文件。
  • var <name>:检查是否定义了变量。 变量可以是空字符串,并被认为是“已定义”
  • has <hostname>:检查主机名是否之前已定义。

此外,如果您使用带有ping功能的编译项目,您还可以尝试以下条件

  • ping <hostname>:检查主机名是否可达。

在Github Actions标签中的版本从未编译带有附加功能!

try语法的定义如下

try <condition> <argument>
    # Do something
else
    # Do something else
end

try语句将评估条件,如果条件为真,则执行代码块。如果条件为假,将执行else代码块。如果没有定义else代码块,则如果条件为真,将执行try代码块。

许可协议

本项目采用MIT许可协议。有关详细信息,请参阅LICENSE文件。

贡献

我们始终欢迎帮助!如果您发现了一个错误或对新的功能有想法,请打开一个问题。如果您想贡献代码,请打开一个拉取请求。

如果您的代码添加了任何新功能,请确保为您的代码编写新的测试!如果您不确定如何做,请随时寻求帮助。

依赖项

~8–19MB
~243K SLoC