2020年12月

使用别名为你最常用或复杂的 Git 命令创建快捷方式。

这篇出色的文章《改变我使用 Git 工作方式的七个技巧》启发了我写下另一个对我在命令行上使用 Git 的经验有重大影响的 Git 特性:别名。

定义 Git 的别名来替代命令有两大好处。

  • 它简化了有许多选项的长命令,使它们更短,更容易记住。
  • 缩短了经常使用的命令,使你的工作更有效率。

如何定义和使用别名

要定义 Git 的别名,请使用 git config 命令,加上别名和要替换的命令。例如,要为 git push 创建别名 p

$ git config --global alias.p 'push'

你可以通过将别名作为 git 的参数来使用别名,就像其他命令一样:

$ git p

要查看所有的别名,用 git config 列出你的配置:

$ git config --global -l
user.name=ricardo
[email protected]
alias.p=push

你也可以用你喜欢的 shell 来定义别名,比如 Bash 或 Zsh。不过,用 Git 定义别名有几个功能是用 shell 无法实现的。首先,它允许你在不同的 shell 中使用别名,而无需额外配置。此外,它还集成了 Git 的自动更正功能,所以当你输入错误的命令时,Git 可以建议你正确的别名。最后,Git 还会将别名保存在用户配置文件中,你可以通过复制一个文件将别名转移到其他机器上。

无论使用哪种方法,定义别名都能改善你使用 Git 的整体体验。更多关于定义 Git 别名的信息,请看《Git Book》。

8 个有用的 Git 别名

现在你知道如何创建和使用别名了,来看看一些有用的别名。

1、Git 状态

Git 命令行用户经常使用 status 命令来查看已更改或未跟踪的文件。默认情况下,这个命令提供了很多行的冗长输出,你可能不想要或不需要。你可以使用一个别名来处理这两个组件。定义别名 st 来缩短命令,并使用选项 -sb 来输出一个不那么啰嗦的状态和分支信息。

$ git config --global alias.st 'status -sb'

如果你在一个干净的分支上使用这个别名,你的输出就像这样:

$  git st
## master

在一个带有已更改和未跟踪文件的分支上使用它,会产生这样的输出:

$ git st
## master
 M test2
?? test3

2、Git 单行日志

创建一个别名,以单行方式显示你的提交,使输出更紧凑:

$ git config --global alias.ll 'log --oneline'

使用这个别名可以提供所有提交的简短列表:

$ git ll
33559c5 (HEAD -> master) Another commit
17646c1 test1

3、Git 的最近一次提交

这将显示你最近一次提交的详细信息。这是扩展了《Git Book》中 别名 一章的例子:

$ git config --global alias.last 'log -1 HEAD --stat'

用它来查看最后的提交:

$ git last
commit f3dddcbaabb928f84f45131ea5be88dcf0692783 (HEAD -> branch1)
Author: ricardo <[email protected]>
Date:   Tue Nov 3 00:19:52 2020 +0000

    Commit to branch1

 test2 | 1 +
 test3 | 0
 2 files changed, 1 insertion(+)

4、Git 提交

当你对 Git 仓库进行修改时,你会经常使用 git commit。使用 cm 别名使 git commit -m 命令更有效率:

$ git config --global alias.cm 'commit -m'

因为 Git 别名扩展了命令,所以你可以在执行过程中提供额外的参数:

$ git cm "A nice commit message"
[branch1 0baa729] A nice commit message
 1 file changed, 2 insertions(+)

5、Git 远程仓库

git remote -v 命令列出了所有配置的远程仓库。用别名 rv 将其缩短:

$ git config --global alias.rv 'remote -v'

6、Git 差异

git diff 命令可以显示不同提交的文件之间的差异,或者提交和工作树之间的差异。用 d 别名来简化它:

$ git config --global alias.d 'diff'

标准的 git diff 命令对小的改动很好用,但对于比较复杂的改动,外部工具如 vimdiff 就更有用。创建别名 dv 来使用 vimdiff 显示差异,并使用 y 参数跳过确认提示:

$ git config --global alias.dv 'difftool -t vimdiff -y'

使用这个别名来显示两个提交之间的 file1 差异:

$ git dv 33559c5 ca1494d file1

 title=

7、Git 配置列表

gl 别名可以更方便地列出所有用户配置:

$ git config --global alias.gl 'config --global -l'

现在你可以看到所有定义的别名(和其他配置选项):

$ git gl
user.name=ricardo
[email protected]
alias.p=push
alias.st=status -sb
alias.ll=log --oneline
alias.last=log -1 HEAD --stat
alias.cm=commit -m
alias.rv=remote -v
alias.d=diff
alias.dv=difftool -t vimdiff -y
alias.gl=config --global -l
alias.se=!git rev-list --all | xargs git grep -F

8、搜索提交

Git 别名允许你定义更复杂的别名,比如执行外部 shell 命令,可以在别名前加上 ! 字符。你可以用它来执行自定义脚本或更复杂的命令,包括 shell 管道。

例如,定义 se 别名来搜索你的提交:

$ git config --global alias.se '!git rev-list --all | xargs git grep -F'

使用这个别名来搜索提交中的特定字符串:

$ git se test2
0baa729c1d683201d0500b0e2f9c408df8f9a366:file1:test2
ca1494dd06633f08519ec43b57e25c30b1c78b32:file1:test2

自动更正你的别名

使用 Git 别名的一个很酷的好处是它与自动更正功能的原生集成。如果你犯了错误,默认情况下,Git 会建议使用与你输入的命令相似的命令,包括别名。例如,如果你把 status 打成了 ts,而不是 st,Git 会推荐正确的别名:

$ git ts
git: 'ts' is not a git command. See 'git --help'.

The most similar command is
        st

如果你启用了自动更正功能,Git 会自动执行正确的命令:

$ git config --global help.autocorrect 20
$ git ts
WARNING: You called a Git command named 'ts', which does not exist.
Continuing in 2.0 seconds, assuming that you meant 'st'.
## branch1
?? test4

优化 Git 命令

Git 别名是一个很有用的功能,它可以优化常见的重复性命令的执行,从而提高你的效率。Git 允许你定义任意数量的别名,有些用户会定义很多别名。我更喜欢只为最常用的命令定义别名 —— 定义太多别名会让人难以记忆,而且可能需要查找才能使用。

更多关于别名的内容,包括其他有用的内容,请参见 Git 维基的别名页面


via: https://opensource.com/article/20/11/git-aliases

作者:Ricardo Gerardi 选题:lujun9972 译者:wxy 校对:wxy

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

12 月 8 日,CentOS 项目宣布,CentOS 8 将于 2021 年底结束,而 CentOS 7 将在其生命周期结束后停止维护。

换言之,“免费”的 RHEL 以后没有了。

一直以来,CentOS 就是以“免费的 RHEL 版本”而深得开源社区和运维工程师们的喜爱。RHEL 红帽企业 Linux Red Hat Enterprise Linux )是红帽公司推出的企业版 Linux ,向以稳定、可靠和高性能著称。但是,RHEL 是红帽公司的商业产品,用户需订阅红帽公司的商业支持服务才可以使用。而 CentOS 是基于红帽按照开源许可证发布的 RHEL 源代码,并去除了商标等商业信息后重构的版本。从产品特性和使用上来说,CentOS 和 RHEL 几无二致,当然,CentOS 的用户得不到红帽公司的商业支持。

除此以外,CentOS 的发行也比 RHEL 的发行晚得多。除了 CentOS 之外,还有一些也是基于 RHEL 衍生的 Linux 发行版,如 Oracle Linux。

可以说,在中国有大量的 CentOS 用户和装机量,这和 CentOS 的免费不无关系。

CentOS 项目本来是一个社区项目,但是后来红帽公司收购了 CentOS 之后,其地位就有些尴尬。红帽公司旗下有着三个主要的 Linux 发行版产品线:一个是 Fedora,作为先行实验版本,会在快速迭代的同时实验各种新的 Linux 功能和特性,稳定成熟后,这些特性会发布到 RHEL 上;另一个是红帽 Linux ,即 RHEL,它是红帽公司的主要 Linux 发行版,相对来说,在特性和新软件包的添加和更新方面更加保守;最后就是 CentOS,就是 RHEL 的自由开源构建版本,但是在 CentOS 被纳入红帽怀抱之后,其只是作为 RHEL 的一个“免费”版本发布,似乎在红帽公司内的定位也一直模糊。

而在去年,CentOS 团队宣布和红帽合作推出了一个新的滚动版 Linux:CentOS Stream。是的,你没看错,是滚动版。按照红帽的说法,这是一个“中游”的发行版,位于 Fedora 和 RHEL 之间。主要的目标是为了形成一个可循环的“彭罗斯三角”,以使社群对 CentOS 的改进可以流回到 RHEL 当中。

或许,从那一刻开始,就注定了 CentOS Linux 终将落幕吧。

在本次公告中,CentOS 项目宣布,“在接下来的一年里,我们将把重点从 CentOS Linux 转移到 CentOS Stream 上。CentOS Linux 8 作为 RHEL 8 的重构版,将在 2021 年底结束。”而尚在计划维护期的 CentOS 7 系列,也将在 2024 年维护期限到达之后停止维护。所以,还在使用 CentOS 作为生产服务环境的运维工程师们,要么考虑购买 RHEL 商业订阅;要么考虑自行根据 RHEL 源代码构建吧——或许也会有一群人重新接过这个重构的工作,发行新的 Linux 发行版吧。

目前使用 CentOS 的服务器,还可以继续在 RHEL 的计划维护期得到支持,见下表:

Red Hat Enterprise Linux Life Cycle

而 “CentOS Stream 将在该日期之后继续,作为 RHEL 的上游(开发)分支。”也就是说,以后,Fedora 依然是第一个上游,但是在 RHEL 发布新版本之后,CentOS Stream 会在它的基础上滚动更新,并将成熟的更新反哺到 RHEL 当中。

此外,CentOS Stream 也将成为 CentOS 特别兴趣小组(SIG)之间合作的核心,这可以让 CentOS 贡献者社区对 RHEL 的未来有很大的影响力。红帽认为,“将我们的全部投资转移到 CentOS Stream 是进一步推动 Linux 创新的最佳方式。”

当然,在 CentOS Linux 8 结束时,你可以考虑迁移到 CentOS Stream 8,它会像传统的 CentOS Linux 版本一样定期更新。但是,切记,这是一个作为 RHEL 中游的滚动发行版,并不太建议你在生产环境中使用。关于这个变化,你还可以参考这个 FAQ

不过,像 Facebook 这样的有足够技术力量的大型 IT 公司,已经将其运行着的数百万台服务器迁移(或正在迁移)到一个他们从 CentOS Stream 衍生而出的操作系统上了。红帽也鼓励所有合作伙伴和开发人员不仅仅参与 CentOS Stream,而是开始建立自己的分支。

此外,除了 CentOS Stream 之外,红帽也提供了一系列平台来支持不同的需求:

  • Fedora 项目:是 Fedora 操作系统的基础,用于那些希望贡献操作系统创新前沿的人。
  • Red Hat Universal Base Image:是一个免费的、可再发行的、面向开发人员的镜像,用于创建容器化的、云原生企业应用。有了它,开发人员可以更轻松地在 RHEL 上和红帽的开放混合云产品组合(包括红帽 OpenShift)中创建经认证的应用。
  • RHEL 开发者订阅:是一个免费的、自助支持的开发者订阅,它为应用的开发提供了一个开发/测试环境,在 RHEL 的稳定、更安全和高性能的基础上部署到生产中。

好了,你对这件事怎么看?

Jed 方便的下拉菜单,让新用户可以轻松地使用终端文本编辑器。

你可能听说过 Emacs、Vim 和 Nano 这些典型的 Linux 文本编辑器,但 Linux 有大量的开源文本编辑器,我的目标是在 12 月份对其中的 31 个文本编辑器进行一次公平的测试。

在这篇文章中,我将介绍 Jed,它是一个基于终端的编辑器,它的特点是有一个方便的下拉菜单,这让那些刚刚接触终端编辑器的用户,以及那些不喜欢记住每个功能的组合键的用户而言变得特别容易。

安装 Jed

在 Linux 上,你的发行版软件仓库可能会让 Jed 通过你的软件包管理器安装:

$ sudo dnf install jed

并不是所有发行版都是如此,但它是一个很容易从源码编译的应用。首先,下载 S 语言(Jed 的编写语言)并安装(其中 x.y.z 请替换为对应的版本号):

$ wget https://www.jedsoft.org/releases/slang/slang-x.y.z.tar.bz2
$ tar xvf slang*bz2
$ cd slang-x.y.z
$ ./configure ; make
$ sudo make install

安装好后,对 Jed 源码也同样操作(其中 x.y.z 请替换为对应的版本号):

$ wget https://www.jedsoft.org/releases/jed/jed-x.y.z.tar.bz2
$ tar xvf jed*bz2
$ cd jed-x.y.z
$ ./configure ; make
$ sudo make install

启动 Jed

Jed 在终端中运行,所以要启动它,只需打开终端,输入 jed

F10 key ==> File   Edit   Search   Buffers   Windows   System   Help


     This is a scratch buffer.  It is NOT saved when you exit.

     To access the menus, press F10 or ESC-m and the use the arrow
     keys to navigate.

     Latest version information is available on the web from
     <http://www.jedsoft.org/jed/>.  Other sources of JED
     information include the usenet newsgroups comp.editors and
     alt.lang.s-lang.  To subscribe to the jed-users mailing list, see
     <http://www.jedsoft.org/jed/mailinglists.html>.

     Copyright (C) 1994, 2000-2009  John E. Davis
     Email comments or suggestions to <[email protected]>.

[ (Jed 0.99.19U) Emacs: *scratch*    ()  1/16   8:49am ]

如何使用 Jed

Jed 自动加载的说明很清晰且很有帮助。你可以按 F10 键或 Esc 键,然后按字母 M 进入顶部菜单。这将使你的光标进入 Jed 顶部的菜单栏,但它不会打开菜单。要打开菜单,请按键盘上的回车键。使用方向键来浏览每个菜单。

屏幕上的菜单不仅对初次使用的用户很有帮助,对有经验的用户来说,它还提供了很好的键盘快捷键提醒。例如,你大概能猜到如何保存正在处理的文件。进入 File 菜单,选择 Save。如果你想加快这个过程,你可以记住 Ctrl+X,然后 Ctrl+S 的组合键(是的,这是连续的两个组合键)。

探索 Jed 的功能

对于一个简单的编辑器来说,Jed 拥有一系列令人惊讶的实用功能。它有一个内置的多路复用器,允许你同时打开多个文件,但它会“叠”在另一个文件之上,所以你可以在它们之间切换。你可以分割你的 Jed 窗口,让多个文件同时出现在屏幕上,改变你的颜色主题,或者打开一个 shell。

对于任何有 Emacs 使用经验的人来说,Jed 的许多“没有宣传”的功能,例如用于导航和控制的组合键,都是一目了然的。然而,当一个组合键与你所期望的大相径庭时,就会有一个轻微的学习(或者说没有学习)曲线。例如,GNU Emacs 中的 Alt+B 可以将光标向后移动一个字,但在 Jed 中,默认情况下,它是 Buffers 菜单的快捷键。这让我措手不及,大约本文每句话都遇到一次。

 title=

Jed 也有模式,允许你加载模块或插件来帮助你编写特定种类的文本。例如,我使用默认的 text 模式写了这篇文章,但当我在编写 Lua 时,我能够切换到 lua 模式。这些模式提供语法高亮,并帮助匹配括号和其他分隔符。你可以在 /usr/share/jed/lib 中查看 Jed 捆绑了哪些模式,而且因为它们是用 S 语言编写的,你可以浏览代码,并可能学习一种新的语言。

尝试 Jed

Jed 是一个令人愉快且清新的 Linux 终端文本编辑器。它轻量级,易于使用,设计相对简单。作为 Vi 的替代方案,你可以在你的 ~/.bashrc 文件中(如果你是 root 用户,在 root 用户的 ~/.bashrc 文件中)将 Jed 设置为 EDITORVISUAL 变量。今天就试试 Jed 吧。


via: https://opensource.com/article/20/12/jed

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

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

序列化用于将数据转换为方便存储或传输的格式,然后将其重新构建以供使用。DRF 是最具有知名的序列化器。

序列化是将数据转换为可以存储或传输的格式,然后对其进行重新构建的过程。在开发应用程序或将数据存储在数据库、内存或将其转换为文件时,一直会用到它。

我最近帮助 Labcodes 的两名初级开发人员理解序列化器,我想也可以与诸位读者分享一下我的方法。

假设你正在编写一个电子商务网站,你有一个订单,该订单记录了某人在某个日期以某种价格购买了一个产品:

class Order:
    def __init__(self, product, customer, price, date):
        self.product = product
        self.customer = customer
        self.price = price
        self.date = date

现在,假设你想从一个键值数据库中存储和检索订单数据。幸运的是,它的接口可以接受和返回字典,因此你需要将对象转换成字典:

def serialize_order(order):
    return {
        'product': order.product,
        'customer': order.customer,
        'price': order.price,
        'date': order.date
    }

如果你想从数据库中获取一些数据,你可以获取字典数据并将其转换为订单对象(Order):

def deserialize_order(order_data):
    return Order(
        product=order_data['product'],
        customer=order_data['customer'],
        price=order_data['price'],
        date=order_data['date'],
    )

这对于简单的数据非常直接了当,但是当你需要处理一些由复杂属性构成的复杂对象时,这种方法就无法很好地扩展。你还需要处理不同类型字段的验证,这需要手工完成大量工作。

此时框架的序列化可以很方便的派上用场。它们使你可以创建带有少量模板的序列化器,这将适用于复杂的情况。

Django 提供了一个序列化模块,允许你将模型“转换”为其它格式:

from django.core import serializers

serializers.serialize('json', Order.objects.all())

它涵盖了 Web 应用程序最常用的种类,例如 JSON、YAML 和 XML。但是你也可以使用第三方序列化器或创建自己的序列化器。你只需要在 settings.py 文件中注册它:

# settings.py
SERIALIZATION_MODULES = {
    'my_format': appname.serializers.MyFormatSerializer,
}

要创建自己的 MyFormatSerializer,你需要实现 .serialize() 方法并接受一个查询集和其它选项作为参数:

class MyFormatSerializer:
    def serialize(self, queryset, **options):
        # serious serialization happening

现在,你可以将查询集序列化为新格式:

from django.core import serializers

serializers.serialize('my_format', Order.objects.all())

你可以使用选项参数来定义序列化程序的行为。例如,如果要定义在处理 ForeignKeys 时要使用嵌套序列化,或者只希望数据返回其主键,你可以传递一个 flat=True 参数作为选项,并在方法中处理:

class MyFormatSerializer:
    def serializer(self, queryset, **options):
        if options.get('flat', False):
            # don't recursively serialize relationships
        # recursively serialize relationships

使用 Django 序列化的一种方法是使用 loaddatadumpdata 管理命令。

DRF 序列化器

在 Django 社区中,Django REST 框架(DRF)提供了最著名的序列化器。尽管你可以使用 Django 的序列化器来构建将在 API 中响应的 JSON,但 REST 框架中的序列化器提供了更出色的功能,可以帮助你处理并轻松验证复杂的数据。

在订单的例子中,你可以像这样创建一个序列化器:

from restframework import serializers

class OrderSerializer(serializers.Serializer):
    product = serializers.CharField(max_length=255)
    customer = serializers.CharField(max_lenght=255)
    price = serializers.DecimalField(max_digits=5, decimal_places=2)
    date = serializers.DateField()

轻松序列化其数据:

order = Order('pen', 'renato', 10.50, date.today())
serializer = OrderSerializer(order)

serializer.data
# {'product': 'pen', 'customer': 'renato', 'price': '10.50', 'date': '2020-08-16'}

为了能够从数据返回实例,你需要实现两个方法:createupdate

from rest_framework import serializers

class OrderSerializer(serializers.Serializer):
    product = serializers.CharField(max_length=255)
    customer = serializers.CharField(max_length=255)
    price = serializers.DecimalField(max_digits=5, decimal_places=2)
    date = serializers.DateField()

    def create(self, validated_data):
        # 执行订单创建
        return order

    def update(self, instance, validated_data):
       # 执行实例更新
       return instance

之后,你可以通过调用 is_valid() 来验证数据,并通过调用 save() 来创建或更新实例:

serializer = OrderSerializer(**data)
## 若要验证数据,在调用 save 之前必须执行
serializer.is_valid()
serializer.save()

模型序列化器

序列化数据时,通常需要从数据库(即你创建的模型)进行数据处理。ModelSerializerModelForm 一样,提供了一个 API,用于从模型创建序列化器。假设你有一个订单模型:

from django.db import models

class Order(models.Model):
    product = models.CharField(max_length=255)
    customer = models.CharField(max_length=255)
    price = models.DecimalField(max_digits=5, decimal_places=2)
    date = models.DateField()    

你可以像这样为它创建一个序列化器:

from rest_framework import serializers

class OrderSerializer(serializers.ModelSerializer):
    class Meta:
        model = Order
        fields = '__all__'

Django 会自动在序列化器中包含所有模型字段,并创建 createudpate 方法。

在基于类的视图(CBV)中使用序列化器

像 Django CBV 中的 Forms 一样,序列化器可以很好地与 DRF 集成。你可以设置 serializer_class 属性,方便序列化器用于视图:

from rest_framework import generics

class OrderListCreateAPIView(generics.ListCreateAPIView):
    queryset = Order.objects.all()
    serializer_class = OrderSerializer

你也可以定义 get_serializer_class() 方法:

from rest_framework import generics

class OrderListCreateAPIView(generics.ListCreateAPIView):
    queryset = Order.objects.all()
   
    def get_serializer_class(self):
        if is_free_order():
            return FreeOrderSerializer
        return OrderSerializer

在 CBV 中还有其它与序列化器交互的方法。例如,get\_serializer() 返回一个已经实例化的序列化器,get\_serializer\_context() 返回创建实例时传递给序列化器的参数。对于创建或更新数据的视图,有 createupdate,它们使用 is_valid 方法验证数据,还有 perform\_createperform\_update 调用序列化器的 save 方法。

了解更多

要了解更多资源,参考我朋友 André Ericson 的经典 Django REST 框架网站。它是一个基于类的经典视图的 REST 框架版本,可让你深入查看组成 DRF 的类。当然,官方文档也是一个很棒的资源。


via: https://opensource.com/article/20/11/django-rest-framework-serializers

作者:Renato Oliveira 选题:lujun9972 译者:MjSeven 校对:wxy

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

在你安装 Fedora 后。你可能会发现你想要安装和使用的一些软件在软件商店中找不到。出于一些原因,这些软件包不能出现在 Fedora 存储库中。

不用担心,我将告诉你如何为 Fedora 添加第三方存储库来使这些软件包可使用。

在 Fedora 中的第三方存储库是什么?

操作系统开发人员通常会决定哪些软件包可以在其存储库中使用,哪些软件包不可以在其存储库中使用。Fedora 也是如此。依据 Fedora 文档 ,第三方存储库包含有 “拥有更为宽松的许可政策,并提供 Fedora 因各种原因所排除软件包” 的软件包。

Fedora 强制执行下面的 准则 ,当它打包软件包时:

  • 如果它是专有的,它就不能包含在 Fedora 中
  • 如果它在法律上被限制,它就不能包含在 Fedora 中
  • 如果它违反美国法律(特别是联邦政府或适用于州政府的法律),它就不能包含在 Fedora 中

因此,有一些可以由用户自行添加的存储库。这使得用户能够访问附加的软件包。

在 Fedora 中启用 RPM Fusion 存储库

RPM Fusion 是 Fedora 的第三方应用程序的主要来源。RPM Fusion 是由三个项目(Dribble、Freshrpms 和 Livna)合并而成的。RPM Fusion 提供两种不同的软件存储库。

  • free 存储库:包含开源软件。
  • nonfree 存储库:包含没有开源协议的软件,但是它们的源文件代码却是可以自由使用的。

这里有两种方法来启动 RPM Fusion:从终端启用,或通过点击几个按钮来启用。我们将逐一查看。

方法 1:命令行方法

这是启用 RPM Fusion 存储库的最简单的方法。只需要输入下面的命令即可启用两个存储库:

sudo dnf install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm

会要求你输入密码、确认是否你想要安装这些存储库。在你确认后,安装过程将在几秒钟或几分钟内完成。

通过命令行安装 RPM Fusion

方法 2:图形用户界面方法

使用这个方法来启用 RPM Fusion 存储库,你需要访问 RPM Fusion 网站 。你将看到针对不同 Fedora 版本的两个存储库的链接。

RPM Fusion 建议先安装 free 存储库。因此,单击针对你 Fedora 版本的 free 存储库的链接。然后会打开一个窗口来询问你是否想安装该存储库。单击安装。

通过图形用户界面安装 RPM Fusion

在安装过程完成后,返回并使用相同的步骤安装 nonfree 存储库。

启用 Fedora 的第三方存储库

Fedora 最近开始提供它自己的 第三方应用程序存储库 。在这个存储库中 可使用的应用程序的数量 是非常少的。你可以 使用它来在 Fedora 上安装 Chrome 浏览器 。除 Chrome 外,它也包含 Adobe Brackets、Atom、Steam、Vivaldi、Opera 等应用程序。

就像 RPM Fusion 一样,你可以通过终端或图形用户界面的方法来启用这个存储库。

方法 1:命令行方法

为启用 Fedora 的第三方存储库,输入下面的命令到你的终端中:

sudo dnf install fedora-workstation-repositories

当被提示时,确保输入你的密码并输入 Y 来确认安装。

方法 2:图形用户界面方法

如果你不习惯使用终端,你可以使用图形用户界面方法。

首先,你需要打开 Gnome “软件”。接下来,你需要单击右上角的汉堡菜单,并从菜单中选择“软件存储库”。

Gnome 软件的菜单

在软件存储库窗口中,你将在其顶部看到写着 “第三方存储库” 字样的部分。单击“安装”按钮。当你被提示时,输入你的密码。

Fedora 第三方存储库安装

随着这些附加存储库的启用,你可以安装软件到你的系统当中。你可以从软件中心管理器或使用 DNF 软件包管理器来轻松地安装它们。

如果你发现这篇文章很有趣,请花费一些时间来在社交媒体上分享它。


via: https://itsfoss.com/fedora-third-party-repos/

作者:John Paul 选题:lujun9972 译者:robsean 校对:wxy

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

对 CrowdSec 的配置更改,在不到一分钟的时间内阻止了一个 7000 台机器的僵尸网络的攻击。

2020 年,我们的生活和工作方式在短短几天内被彻底颠覆。随着 COVID-19 开始在全球范围内蔓延,我们将工作带回家,与同事、朋友和家人保持在线联系成为关键的必需品。这为黑客造成破坏打开了大门。例如,根据 Neustar 的数据,今年上半年全球的分布式拒绝服务(DDOS) 攻击增长了 151%

CrowdSec 是一个开源的安全引擎,它可以分析访问者的行为,并提供适应各种攻击的响应。它能解析来自各种来源的日志,并应用启发式方案来识别攻击性行为,并防范大多数攻击类别。并且,它与其它安装的 CrowdSec 系统共享该情报。每次 IP 地址被阻止时,它都会通知整个用户社区。这就创建了一个实时、协作的 IP 信誉数据库,利用人群的力量使互联网更加安全。

CrowdSec 如何工作:案例研究

Sorf Networks 是一家总部位于土耳其的技术公司,为客户提供高配置的托管服务器和 DDoS 防护解决方案,它提供了一个 CrowdSec 工作的例子。Sorf 的一个客户每天都会遇到来自 1 万多台机器僵尸网络的 DDoS 攻击,并努力寻找一种能够满足技术要求的解决方案来及时处理这些攻击。

虽然客户采取了一般的预防措施来缓解这些攻击,比如引入 JavaScript(JS) 挑战 challenges 、限速等,但这些措施在整个攻击面并不可行。一些 URL 需要被非常基本的软件使用,而这些软件不支持 JS 挑战。黑客就是黑客,这正是他们每天的目标:链条上最薄弱的环节。

Sorf Networks 首先使用 Fail2ban(这启发了 CrowdSec)为其客户建立了一个 DDoS 缓解策略。它在一定程度上帮助了客户,但它太慢了。它需要 50 分钟来处理日志和处理 7000 到 10000 台机器的 DDoS 攻击。这使得它在这种情况下没有效果。另外,因为它没有禁止 IP,日志会持续堆积,它需要每秒处理几千条日志,这是不可能的。

在使用租用的僵尸网络进行的 DDoS 测试中,一次攻击可以高达每秒 6700 个左右的请求,这些请求来自 8600 个独立 IP。这是对一台服务器流量的捕捉:

 title=

虽然 CrowdSec 技术可以应对巨大的攻击,但其默认设置每秒只能处理约 1000 个端点。Sorf 需要一个量身定做的配置来处理单台机器上这么多的流量。

Sorf 的团队对 CrowdSec 的配置进行了修改,以显著提高其吞吐量来处理日志。首先,它去掉了高消耗且非关键的 富集 enrichment 解析器,例如 GeoIP 富集。它还将允许的 goroutine 的默认数量从一个增加到五个。之后,团队又用 8000 到 9000 台主机做了一次实测,平均每秒 6000 到 7000 个请求。这个方案是有代价的,因为 CrowdSec 在运行过程中吃掉了 600% 的 CPU,但其内存消耗却保持在 270MB 左右。

然而,结果却显示出明显的成功:

  • 在一分钟内,CrowdSec 能够处理所有的日志
  • 95% 的僵尸网络被禁止,攻击得到有效缓解
  • 15 个域现在受到保护,不受 DDoS 攻击

根据 Sorf Networks 的总监 Cagdas Aydogdu 的说法,CrowdSec 的平台使团队“能够在令人难以置信的短时间内提供一个世界级的高效防御系统”。


本文改编自如何用 CrowdSec 在 1 分钟内阻止 7000 台机器的僵尸网络,原载于 CrowdSec 网站。


via: https://opensource.com/article/20/12/open-source-vs-ddos-attacks

作者:Philippe Humeau 选题:lujun9972 译者:geekpi 校对:wxy

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