分类 技术 下的文章

在过去的一年中,你可能会遇到一些试图向你推销密码管理器的广告。比如 LastPass1PasswordDashlane。密码管理器消除了记住所有网站密码的负担。你不再需要使用重复或容易记住的密码。相反,你只需要记住一个可以解锁所有其他密码的密码。

通过使用一个强密码而​​不是许多弱密码,这可以使你更安全。如果你有基于云的密码管理器(例如 LastPass、1Password 或 Dashlane),你还可以跨设备同步密码。不幸的是,这些产品都不是开源的。幸运的是,还有其他开源替代品。

开源密码管理器

替代方案包括 Bitwarden、LessPassKeePass。Bitwarden 是一款开源密码管理器,它会将所有密码加密存储在服务器上,它的工作方式与 LastPass、1Password 或 Dashlane 相同。LessPass 有点不同,因为它专注于成为无状态密码管理器。这意味着它根据主密码、网站和用户名生成密码,而不是保存加密的密码。另一方面,KeePass 是一个基于文件的密码管理器,它的插件和应用具有很大的灵活性。

这三个应用中的每一个都有其自身的缺点。Bitwarden 将所有东西保存在一个地方,并通过其 API 和网站接口暴露给网络。LessPass 无法保存自定义密码,因为它是无状态的,因此你需要使用它生成的密码。KeePass 是一个基于文件的密码管理器,因此无法在设备之间轻松同步。你可以使用云存储和 WebDAV 来解决此问题,但是有许多客户端不支持它,如果设备无法正确同步,你可能会遇到文件冲突。

本文重点介绍 Bitwarden。

运行非官方的 Bitwarden 实现

有一个名为 bitwarden\_rs 的服务器及其 API 的社区实现。这个实现是完全开源的,因为它可以使用 SQLite 或 MariaDB/MySQL,而不是官方服务器使用的专有 Microsoft SQL Server。

有一点重要的是要认识到官方和非官方版本之间存在一些差异。例如,官方服务器已经由第三方审核,而非官方服务器还没有。在实现方面,非官方版本缺少电子邮件确认和采用 Duo 或邮件码的双因素身份验证

让我们在 SELinux 中运行服务器。根据 bitwarden\_rs 的文档,你可以如下构建一个 Podman 命令:

$ podman run -d \
 --userns=keep-id \
 --name bitwarden \
 -e SIGNUPS_ALLOWED=false \
 -e ROCKET_PORT=8080 \
 -v /home/egustavs/Bitwarden/bw-data/:/data/:Z \
 -p 8080:8080 \
 bitwardenrs/server:latest

这将下载 bitwarden\_rs 镜像并在用户命名空间下的用户容器中运行它。它使用 1024 以上的端口,以便非 root 用户可以绑定它。它还使用 :Z 更改卷的 SELinux 上下文,以防止在 /data 中的读写权限问题。

如果你在某个域下托管它,建议将此服务器放在 Apache 或 Nginx 的反向代理下。这样,你可以使用 80 和 443 端口指向容器的 8080 端口,而无需以 root 身份运行容器。

在 systemd 下运行

Bitwarden 现在运行了,你可能希望保持这种状态。接下来,创建一个使容器保持运行的单元文件,如果它没有响应则自动重新启动,并在系统重启后开始运行。创建文件 /etc/systemd/system/bitwarden.service

[Unit]
Description=Bitwarden Podman container
Wants=syslog.service

[Service]
User=egustavs
Group=egustavs
TimeoutStartSec=0
ExecStart=/usr/bin/podman run 'bitwarden'
ExecStop=-/usr/bin/podman stop -t 10 'bitwarden'
Restart=always
RestartSec=30s
KillMode=none

[Install]
WantedBy=multi-user.target

现在使用 sudo 启用并启动该服务:

$ sudo systemctl enable bitwarden.service && sudo systemctl start bitwarden.service
$ systemctl status bitwarden.service
bitwarden.service - Bitwarden Podman container
    Loaded: loaded (/etc/systemd/system/bitwarden.service; enabled; vendor preset: disabled)
    Active: active (running) since Tue 2019-07-09 20:23:16 UTC; 1 day 14h ago
  Main PID: 14861 (podman)
     Tasks: 44 (limit: 4696)
    Memory: 463.4M

成功了!Bitwarden 现在运行了并将继续运行。

添加 LetsEncrypt

如果你有域名,强烈建议你使用类似 LetsEncrypt 的加密证书运行你的 Bitwarden 实例。Certbot 是一个为我们创建 LetsEncrypt 证书的机器人,这里有个在 Fedora 中操作的指南

生成证书后,你可以按照 bitwarden\_rs 指南中关于 HTTPS 的部分来。只要记得将 :Z 附加到 LetsEncrypt 来处理权限,而不用更改端口。


照片由 CMDR Shane 拍摄,发表在 Unsplash 上。


via: https://fedoramagazine.org/manage-your-passwords-with-bitwarden-and-podman/

作者:Eric Gustavsson 选题:lujun9972 译者:geekpi 校对:wxy

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

厌倦了一遍又一遍地输入相同的长命令?你觉得在命令行上工作效率低吗?Bash 别名可以为你创造一个与众不同的世界。

Bash 别名是一种用新的命令补充或覆盖 Bash 命令的方法。Bash 别名使用户可以轻松地在 POSIX 终端中自定义其体验。它们通常定义在 $HOME/.bashrc$HOME/bash_aliases 中(它是由 $HOME/.bashrc 加载的)。

大多数发行版在新用户帐户的默认 .bashrc 文件中至少添加了一些流行的别名。这些可以用来简单演示 Bash 别名的语法:

alias ls='ls -F'
alias ll='ls -lh'

但并非所有发行版都附带预先添加好的别名。如果你想手动添加别名,则必须将它们加载到当前的 Bash 会话中:

$ source ~/.bashrc

否则,你可以关闭终端并重新打开它,以便重新加载其配置文件。

通过 Bash 初始化脚本中定义的那些别名,你可以键入 ll 而得到 ls -l 的结果,当你键入 ls 时,得到也不是原来的 ls 的普通输出。

那些别名很棒,但它们只是浅尝辄止。以下是十大 Bash 别名,一旦你试过它们,你会发现再也不能离开它们。

首先设置

在开始之前,创建一个名为 ~/.bash_aliases 的文件:

$ touch ~/.bash_aliases

然后,确认这些代码出现在你的 ~/.bashrc 文件当中:

if [ -e $HOME/.bash_aliases ]; then
    source $HOME/.bash_aliases
fi

如果你想亲自尝试本文中的任何别名,请将它们输入到 .bash_aliases 文件当中,然后使用 source ~/.bashrc 命令将它们加载到当前 Bash 会话中。

按文件大小排序

如果你一开始使用过 GNOME 中的 Nautilus、MacOS 中的 Finder 或 Windows 中的资源管理器等 GUI 文件管理器,那么你很可能习惯了按文件大小排序文件列表。你也可以在终端上做到这一点,但这条命令不是很简洁。

将此别名添加到 GNU 系统上的配置中:

alias lt='ls --human-readable --size -1 -S --classify'

此别名将 lt 替换为 ls 命令,该命令在单个列中显示每个项目的大小,然后按大小对其进行排序,并使用符号表示文件类型。加载新别名,然后试一下:

$ source ~/.bashrc
$ lt
total 344K
140K configure*
 44K aclocal.m4
 36K LICENSE
 32K config.status*
 24K Makefile
 24K Makefile.in
 12K config.log
8.0K README.md
4.0K info.slackermedia.Git-portal.json
4.0K git-portal.spec
4.0K flatpak.path.patch
4.0K Makefile.am*
4.0K dot-gitlab.ci.yml
4.0K configure.ac*
   0 autom4te.cache/
   0 share/
   0 bin/
   0 install-sh@
   0 compile@
   0 missing@
   0 COPYING@

在 MacOS 或 BSD 上,ls 命令没有相同的选项,因此这个别名可以改为:

alias lt='du -sh * | sort -h'

这个版本的结果稍有不同:

$ du -sh * | sort -h
0       compile
0       COPYING
0       install-sh
0       missing
4.0K    configure.ac
4.0K    dot-gitlab.ci.yml
4.0K    flatpak.path.patch
4.0K    git-portal.spec
4.0K    info.slackermedia.Git-portal.json
4.0K    Makefile.am
8.0K    README.md
12K     config.log
16K     bin
24K     Makefile
24K     Makefile.in
32K     config.status
36K     LICENSE
44K     aclocal.m4
60K     share
140K    configure
476K    autom4te.cache

实际上,即使在 Linux上,上面这个命令也很有用,因为使用 ls 列出的目录和符号链接的大小为 0,这可能不是你真正想要的信息。使用哪个看你自己的喜好。

感谢 Brad Alexander 提供的这个别名的思路。

只查看挂载的驱动器

mount 命令过去很简单。只需一个命令,你就可以获得计算机上所有已挂载的文件系统的列表,它经常用于概览连接到工作站有哪些驱动器。在过去看到超过三、四个条目就会令人印象深刻,因为大多数计算机没有那么多的 USB 端口,因此这个结果还是比较好查看的。

现在计算机有点复杂,有 LVM、物理驱动器、网络存储和虚拟文件系统,mount 的结果就很难一目了然:

sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=8131024k,nr_inodes=2032756,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
[...]
/dev/nvme0n1p2 on /boot type ext4 (rw,relatime,seclabel)
/dev/nvme0n1p1 on /boot/efi type vfat (rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=ascii,shortname=winnt,errors=remount-ro)
[...]
gvfsd-fuse on /run/user/100977/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=100977,group_id=100977)
/dev/sda1 on /run/media/seth/pocket type ext4 (rw,nosuid,nodev,relatime,seclabel,uhelper=udisks2)
/dev/sdc1 on /run/media/seth/trip type ext4 (rw,nosuid,nodev,relatime,seclabel,uhelper=udisks2)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)

要解决这个问题,试试这个别名:

alias mnt='mount | awk -F' ' '{ printf "%s\t%s\n",$1,$3; }' | column -t | egrep ^/dev/ | sort'

此别名使用 awk 按列解析 mount 的输出,将输出减少到你可能想要查找的内容(挂载了哪些硬盘驱动器,而不是文件系统):

$ mnt
/dev/mapper/fedora-root  /
/dev/nvme0n1p1           /boot/efi
/dev/nvme0n1p2           /boot
/dev/sda1                /run/media/seth/pocket
/dev/sdc1                /run/media/seth/trip

在 MacOS 上,mount 命令不提供非常详细的输出,因此这个别名可能过度精简了。但是,如果你更喜欢简洁的报告,请尝试以下方法:

alias mnt='mount | grep -E ^/dev | column -t'

结果:

$ mnt
/dev/disk1s1  on  /                (apfs,  local,  journaled)
/dev/disk1s4  on  /private/var/vm  (apfs,  local,  noexec,     journaled,  noatime,  nobrowse)

在你的 grep 历史中查找命令

有时你好不容易弄清楚了如何在终端完成某件事,并觉得自己永远不会忘记你刚学到的东西。然后,一个小时过去之后你就完全忘记了你做了什么。

搜索 Bash 历史记录是每个人不时要做的事情。如果你确切地知道要搜索的内容,可以使用 Ctrl + R 对历史记录进行反向搜索,但有时你无法记住要查找的确切命令。

这是使该任务更容易的别名:

alias gh='history|grep'

这是如何使用的例子:

$ gh bash
482 cat ~/.bashrc | grep _alias
498 emacs ~/.bashrc
530 emacs ~/.bash_aliases
531 source ~/.bashrc

按修改时间排序

每个星期一都会这样:你坐在你的电脑前开始工作,你打开一个终端,你发现你已经忘记了上周五你在做什么。你需要的是列出最近修改的文件的别名。

你可以使用 ls 命令创建别名,以帮助你找到上次离开的位置:

alias left='ls -t -1'

输出很简单,但如果你愿意,可以使用 --long 选项扩展它。这个别名列出的显示如下:

$ left
demo.jpeg
demo.xcf
design-proposal.md
rejects.txt
brainstorm.txt
query-letter.xml

文件计数

如果你需要知道目录中有多少文件,那么该解决方案是 UNIX 命令构造的最典型示例之一:使用 ls 命令列出文件,用-1 选项将其输出控制为只有一列,然后输出到 wc(单词计数)命令的管道,以计算有多少行。

这是 UNIX 理念如何允许用户使用小型的系统组件构建自己的解决方案的精彩演示。如果你碰巧每天都要做几次,这个命令组合也要输入很多字母,如果没有使用 -R 选项,它就不能用于目录,这会为输出引入新行并导致无用的结果。

而这个别名使这个过程变得简单:

alias count='find . -type f | wc -l'

这个别名会计算文件,忽略目录,但不会忽略目录的内容。如果你有一个包含两个目录的项目文件夹,每个目录包含两个文件,则该别名将返回 4,因为整个项目中有 4 个文件。

$ ls
foo   bar
$ count
4

创建 Python 虚拟环境

你用 Python 编程吗?

你用 Python 编写了很多程序吗?

如果是这样,那么你就知道创建 Python 虚拟环境至少需要 53 次击键。

这个数字里有 49 次是多余的,它很容易被两个名为 veva 的新别名所解决:

alias ve='python3 -m venv ./venv'
alias va='source ./venv/bin/activate'

运行 ve 会创建一个名为 venv 的新目录,其中包含 Python 3 的常用虚拟环境文件系统。va 别名在当前 shell 中的激活该环境:

$ cd my-project
$ ve
$ va
(venv) $

增加一个复制进度条

每个人都会吐槽进度条,因为它们似乎总是不合时宜。然而,在内心深处,我们似乎都想要它们。UNIX 的 cp 命令没有进度条,但它有一个 -v 选项用于显示详细信息,它回显了复制的每个文件名到终端。这是一个相当不错的技巧,但是当你复制一个大文件并且想要了解还有多少文件尚未传输时,它的作用就没那么大了。

pv 命令可以在复制期间提供进度条,但它并不常用。另一方面,rsync 命令包含在几乎所有的 POSIX 系统的默认安装中,并且它被普遍认为是远程和本地复制文件的最智能方法之一。

更好的是,它有一个内置的进度条。

alias cpv='rsync -ah --info=progress2'

像使用 cp 命令一样使用此别名:

$ cpv bigfile.flac /run/media/seth/audio/
          3.83M 6%  213.15MB/s    0:00:00 (xfr#4, to-chk=0/4)

使用此命令的一个有趣的副作用是 rsync 无需 -r 标志就可以复制文件和目录,而 cp 则需要。

避免意外删除

你不应该使用 rm 命令。rm 手册甚至这样说:

警告:如果使用 rm 删除文件,通常可以恢复该文件的内容。如果你想要更加确保内容真正无法恢复,请考虑使用 shred

如果要删除文件,则应将文件移动到“废纸篓”,就像使用桌面时一样。

POSIX 使这很简单,因为垃圾桶是文件系统中可访问的一个实际位置。该位置可能会发生变化,具体取决于你的平台:在 FreeDesktop 上,“垃圾桶”位于 ~/.local/share/Trash,而在 MacOS 上则是 ~/.Trash,但无论如何,它只是一个目录,你可以将文件藏在那个看不见的地方,直到你准备永久删除它们为止。

这个简单的别名提供了一种从终端将文件扔进垃圾桶的方法:

alias tcn='mv --force -t ~/.local/share/Trash '

该别名使用一个鲜为人知的 mv 标志(-t),使你能够提供作为最终移动目标的参数,而忽略了首先列出要移动的文件的通常要求。现在,你可以使用新命令将文件和文件夹移动到系统垃圾桶:

$ ls
foo  bar
$ tcn foo
$ ls
bar

现在文件已“消失”,只有在你一头冷汗的时候才意识到你还需要它。此时,你可以从系统垃圾桶中抢救该文件;这肯定可以给 Bash 和 mv 开发人员提供一些帮助。

注意:如果你需要一个具有更好的 FreeDesktop 兼容性的更强大的垃圾桶命令,请参阅 Trashy

简化 Git 工作流

每个人都有自己独特的工作流程,但无论如何,通常都会有重复的任务。如果你经常使用 Git,那么你可能会发现自己经常重复的一些操作序列。也许你会发现自己回到主分支并整天一遍又一遍地拉取最新的变化,或者你可能发现自己创建了标签然后将它们推到远端,抑或可能完全是其它的什么东西。

无论让你厌倦一遍遍输入的 Git 魔咒是什么,你都可以通过 Bash 别名减轻一些痛苦。很大程度上,由于它能够将参数传递给钩子,Git 拥有着丰富的内省命令,可以让你不必在 Bash 中执行那些丑陋冗长的命令。

例如,虽然你可能很难在 Bash 中找到项目的顶级目录(就 Bash 而言,它是一个完全随意的名称,因为计算机的绝对顶级是根目录),但 Git 可以通过简单的查询找到项目的顶级目录。如果你研究过 Git 钩子,你会发现自己能够找到 Bash 一无所知的各种信息,而你可以利用 Bash 别名来利用这些信息。

这是一个来查找 Git 项目的顶级目录的别名,无论你当前在哪个项目中工作,都可以将目录改变为顶级目录,切换到主分支,并执行 Git 拉取:

alias startgit='cd `git rev-parse --show-toplevel` && git checkout master && git pull'

这种别名绝不是一个普遍有用的别名,但它演示了一个相对简单的别名如何能够消除大量繁琐的导航、命令和等待提示。

一个更简单,可能更通用的别名将使你返回到 Git 项目的顶级目录。这个别名非常有用,因为当你在一个项目上工作时,该项目或多或少会成为你的“临时家目录”。它应该像回家一样简单,就像回你真正的家一样,这里有一个别名:

alias cg='cd `git rev-parse --show-toplevel`'

现在,命令 cg 将你带到 Git 项目的顶部,无论你下潜的目录结构有多深。

切换目录并同时查看目录内容

(据称)曾经一位著名科学家提出过,我们可以通过收集极客输入 cd 后跟 ls 消耗的能量来解决地球上的许多能量问题。

这是一种常见的用法,因为通常当你更改目录时,你都会有查看周围的内容的冲动或需要。

但是在你的计算机的目录树中移动并不一定是一个走走停停的过程。

这是一个作弊,因为它根本不是别名,但它是探索 Bash 功能的一个很好的借口。虽然别名非常适合快速替换一个命令,但 Bash 也允许你在 .bashrc 文件中添加本地函数(或者你加载到 .bashrc 中的单独函数文件,就像你的别名文件一样)。

为了保持模块化,创建一个名为 ~/.bash_functions 的新文件,然后让你的 .bashrc 加载它:

if [ -e $HOME/.bash_functions ]; then
    source $HOME/.bash_functions
fi

在该函数文件中,添加这些代码:

function cl() {
    DIR="$*";
    # if no DIR given, go home
    if [ $# -lt 1 ]; then 
        DIR=$HOME;
    fi;
    builtin cd "${DIR}" && \
    # use your preferred ls command
    ls -F --color=auto
}

将函数加载到 Bash 会话中,然后尝试:

$ source ~/.bash_functions
$ cl Documents
foo bar baz
$ pwd
/home/seth/Documents
$ cl ..
Desktop  Documents  Downloads
[...]
$ pwd
/home/seth

函数比别名更灵活,但有了这种灵活性,你就有责任确保代码有意义并达到你的期望。别名是简单的,所以要保持简单而有用。要正式修改 Bash 的行为,请使用保存到 PATH 环境变量中某个位置的函数或自定义的 shell 脚本。

附注,有一些巧妙的奇技淫巧来实现 cdls 序列作为别名,所以如果你足够耐心,那么即使是一个简单的别名也永无止限。

开始别名化和函数化吧

可以定制你的环境使得 Linux 变得如此有趣,提高效率使得 Linux 可以改变生活。开始使用简单的别名,进而使用函数,并在评论中发布你必须拥有的别名!


via: https://opensource.com/article/19/7/bash-aliases

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

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

Debian 10 的代号是 Buster,它是来自 Debian 家族的最新 LTS 发布版本,并包含大量的特色功能。因此,如果你已经在你的电脑上安装了 Debian 10,并在思考接下来该做什么,那么,请继续阅读这篇文章直到结尾,因为我们为你提供在安装 Debian 10 后要做的前 8 件事。对于还没有安装 Debian 10 的人们,请阅读这篇指南 图解 Debian 10 (Buster) 安装步骤。 让我们继续这篇文章。

1) 安装和配置 sudo

在设置完成 Debian 10 后,你需要做的第一件事是安装 sudo 软件包,因为它能够使你获得管理员权限来安装你需要的软件包。为安装和配置 sudo,请使用下面的命令:

变成 root 用户,然后使用下面的命令安装 sudo 软件包,

root@linuxtechi:~$ su -
Password:
root@linuxtechi:~# apt install sudo -y

添加你的本地用户到 sudo 组,使用下面的 usermod 命令,

root@linuxtechi:~# usermod -aG sudo pkumar
root@linuxtechi:~#

现在验证是否本地用户获得 sudo 权限:

root@linuxtechi:~$ id
uid=1000(pkumar) gid=1000(pkumar) groups=1000(pkumar),27(sudo)
root@linuxtechi:~$ sudo vi /etc/hosts
[sudo] password for pkumar:
root@linuxtechi:~$

2) 校正日期和时间

在你成功配置 sudo 软件包后,接下来,你需要根据你的位置来校正日期和时间。为了校正日期和时间,

转到系统 设置 –> 详细说明 –> 日期和时间 ,然后更改为适合你的位置的时区。

一旦时区被更改,你可以看到时钟中的时间自动更改。

3) 应用所有更新

在 Debian 10 安装后,建议安装所有 Debian 10 软件包存储库中可用的更新,执行下面的 apt 命令:

root@linuxtechi:~$ sudo apt update
root@linuxtechi:~$ sudo apt upgrade -y

注意: 如果你是 vi 编辑器的忠实粉丝,那么使用下面的 apt 命令安装 vim

root@linuxtechi:~$ sudo apt install vim -y

4) 安装 Flash 播放器插件

默认情况下,Debian 10(Buster)存储库不包含 Flash 插件,因此,用户需要遵循下面的介绍来在他们的系统中查找和安装 flash 播放器。

为 Flash 播放器配置存储库:

root@linuxtechi:~$ echo "deb http://ftp.de.debian.org/debian buster main contrib" | sudo tee -a  /etc/apt/sources.list
deb http://ftp.de.debian.org/debian buster main contrib
root@linuxtechi:~

现在使用下面的命令更新软件包索引:

root@linuxtechi:~$ sudo apt update

使用下面的 apt 命令安装 Flash 插件:

root@linuxtechi:~$ sudo apt install pepperflashplugin-nonfree -y

一旦软件包被成功安装,接下来,尝试播放 YouTube 中的视频:

5) 安装软件,如 VLC、Skype、FileZilla 和截图工具

如此,现在我们已经启用 Flash 播放器,是时候在我们的 Debian 10 系统中安装所有其它的软件,如 VLC、Skype,Filezilla 和截图工具(flameshot)。

安装 VLC 多媒体播放器

为在你的系统中安装 VLC 播放器,使用下面的 apt 命令:

root@linuxtechi:~$ sudo apt install vlc -y

在成功安装 VLC 播放器后,尝试播放你喜欢的视频。

安装 Skype

首先,下载最新的 Skype 软件包:

root@linuxtechi:~$ wget https://go.skype.com/skypeforlinux-64.deb

接下来,使用 apt 命令安装软件包:

root@linuxtechi:~$ sudo apt install ./skypeforlinux-64.deb

在成功安装 Skype 后,尝试访问它,并输入你的用户名和密码。

安装 Filezilla

为在你的系统中安装 Filezilla,使用下面的 apt 命令,

root@linuxtechi:~$ sudo apt install filezilla -y

一旦 FileZilla 软件包被成功安装,尝试访问它。

安装截图工具(flameshot)

使用下面的命令来安装截图工具:flameshot,

root@linuxtechi:~$ sudo apt install flameshot -y

注意: Shutter 工具在 Debian 10 中已被移除。

6) 启用和启动防火墙

总是建议启动防火墙来使你的网络安全。如果你希望在 Debian 10 中启用防火墙, UFW(简单的防火墙)是最好的控制防火墙的工具。UFW 在 Debian 存储库中可用,它非常容易安装,如下:

root@linuxtechi:~$ sudo apt install ufw

在你安装 UFW 后,接下来的步骤是设置防火墙。因此,设置防火墙,通过拒绝端口来禁用所有的传入流量,并且只允许需要的端口传出,像 ssh、http 和 https。

root@linuxtechi:~$ sudo ufw default deny incoming
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)
root@linuxtechi:~$ sudo ufw default allow outgoing
Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
root@linuxtechi:~$

允许 SSH 端口:

root@linuxtechi:~$ sudo ufw allow ssh
Rules updated
Rules updated (v6)
root@linuxtechi:~$

假使你在系统中已经安装 Web 服务器,那么使用下面的 ufw 命令来在防火墙中允许它们的端口:

root@linuxtechi:~$ sudo ufw allow 80
Rules updated
Rules updated (v6)
root@linuxtechi:~$ sudo ufw allow 443
Rules updated
Rules updated (v6)
root@linuxtechi:~$

最后,你可以使用下面的命令启用 UFW:

root@linuxtechi:~$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
root@linuxtechi:~$

假使你想检查你的防火墙的状态,你可以使用下面的命令检查它:

root@linuxtechi:~$ sudo ufw status

7) 安装虚拟化软件(VirtualBox)

安装 Virtualbox 的第一步是将 Oracle VirtualBox 存储库的公钥导入到你的 Debian 10 系统:

root@linuxtechi:~$ wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
OK
root@linuxtechi:~$ wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
OK
root@linuxtechi:~$

如果导入成功,你将看到一个 “OK” 显示信息。

接下来,你需要添加存储库到仓库列表:

root@linuxtechi:~$ sudo add-apt-repository "deb http://download.virtualbox.org/virtualbox/debian buster contrib"
root@linuxtechi:~$

最后,是时候在你的系统中安装 VirtualBox 6.0:

root@linuxtechi:~$ sudo apt update
root@linuxtechi:~$ sudo apt install virtualbox-6.0 -y

一旦 VirtualBox 软件包被成功安装,尝试访问它,并开始创建虚拟机。

8) 安装最新的 AMD 驱动程序

最后,你也可以安装需要的附加 AMD 显卡驱动程序(如 ATI 专有驱动)和 Nvidia 图形驱动程序。为安装最新的 AMD 驱动程序,首先,我们需要修改 /etc/apt/sources.list 文件,在包含 maincontrib 的行中添加 non-free 单词,示例如下显示:

root@linuxtechi:~$ sudo vi /etc/apt/sources.list
...
deb http://deb.debian.org/debian/ buster main non-free contrib
deb-src http://deb.debian.org/debian/ buster main non-free contrib

deb http://security.debian.org/debian-security buster/updates main contrib non-free
deb-src http://security.debian.org/debian-security buster/updates main contrib non-free

deb http://ftp.us.debian.org/debian/ buster-updates main contrib non-free
...

现在,使用下面的 apt 命令来在 Debian 10 系统中安装最新的 AMD 驱动程序。

root@linuxtechi:~$ sudo apt update
root@linuxtechi:~$ sudo apt install firmware-linux firmware-linux-nonfree libdrm-amdgpu1 xserver-xorg-video-amdgpu -y

这就是这篇文章的全部内容,我希望你了解在安装 Debian 10 后应该做什么。请在下面的评论区,分享你的反馈和评论。


via: https://www.linuxtechi.com/things-to-do-after-installing-debian-10/

作者:Pradeep Kumar 选题:lujun9972 译者:robsean 校对:wxy

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

CKI 团队是如何防止 bug 被合并到 Linux 内核中。

Linux 内核的每个发布版本包含了来自 1,700 个开发者产生的 14,000 个变更集,很显然,这使得 Linux 内核快速迭代的同时也产生了巨大的复杂性问题。内核上 Bug 有小麻烦也有大问题,有时是系统崩溃,有时是数据丢失。

随着越来越多的项目对于持续集成(CI)的呼声,内核持续集成(CKI)小组秉承着一个任务目标:防止 Bug 被合并到内核当中。

Linux 测试问题

许多 Linux 发行版只在需要的时候对 Linux 内核进行测试。而这种测试往往只在版本发布时或者用户发现错误时进行。

有时候,出现玄学问题时,维护人员需要在包含了数万个补丁的变更中匆忙地寻找哪个补丁导致这个新的玄学 Bug。诊断 Bug 需要专业的硬件设备、一系列的触发器以及内核相关的专业知识。

CI 和 Linux

许多现代软件代码库都采用某种自动化 CI 测试机制,能够在提交进入代码存储库之前对其进行测试。这种自动化测试使得维护人员可以通过查看 CI 测试报告来发现软件质量问题以及大多数的错误。一些简单的项目,比如某个 Python 库,附带的大量工具使得整个检查过程更简单。

在任何测试之前都需要配置和编译 Linux。而这么做将耗费大量的时间和计算资源。此外,Linux 内核必需在虚拟机或者裸机上启动才能进行测试。而访问某些硬件架构需要额外的开销或者非常慢的仿真。因此,人们必须确定一组能够触发错误或者验证修复的测试集。

CKI 团队如何运作?

Red Hat 公司的 CKI 团队当前正追踪来自数个内部内核分支和上游的稳定内核分支树等内核分支的更改。我们关注每个代码库的两类关键事件:

  1. 当维护人员合并 PR 或者补丁时,代码库变化后的最终结果。
  2. 当开发人员通过拼凑或者稳定补丁队列发起变更合并时。

当这些事件发生时,自动化工具开始执行,GitLab CI 管道开始进行测试。一旦管道开始执行 linting) 脚本、合并每一个补丁,并为多种硬件架构编译内核,真正的测试便开始了。我们会在六分钟内完成四种硬件架构的内核编译工作,并且通常会在两个小时或更短的时间内将反馈提交到稳定邮件列表中。(自 2019 年 1 月起)每月执行超过 100,000 次内核测试,并完成了超过 11,000 个 GitLab 管道。

每个内核都会在本地硬件架构上启动,其中包含:

这些内核上运行了包括 Linux 测试项目(LTP)在内的多个测试,其中包括使用常用测试工具的大量测试。我们 CKI 团队开源了超过 44 个测试并将继续开源更多测试。

参与其中

上游的内核测试工作日渐增多。包括 Google、Intel、LinaroSony 在内的许多公司为各种内核提供了测试输出。每一项工作都专注于为上游内核以及每个公司的客户群带来价值。

如果你或者你的公司想要参与这一工作,请参加在 9 月份在葡萄牙里斯本举办的 Linux Plumbers Conference 2019。在会议结束后的两天加入我们的 Kernel CI hackfest 活动,并推动快速内核测试的发展。

更多详细信息,请见我在 Texas Linux Fest 2019 上的演讲。


via: https://opensource.com/article/19/6/continuous-kernel-integration-linux

作者:Major Hayden 选题:lujun9972 译者:LazyWolfLin 校对:wxy

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

本教程介绍了在 Ubuntu 和基于 Ubuntu 的 Linux 发行版上安装 MongoDB 的两种方法。

MongoDB 是一个越来越流行的自由开源的 NoSQL 数据库,它将数据存储在类似 JSON 的灵活文档集中,这与 SQL 数据库中常见的表格形式形成对比。

你很可能发现在现代 Web 应用中使用 MongoDB。它的文档模型使得使用各种编程语言能非常直观地访问和处理它。

mongodb Ubuntu

在本文中,我将介绍两种在 Ubuntu 上安装 MongoDB 的方法。

在基于 Ubuntu 的发行版上安装 MongoDB

  1. 使用 Ubuntu 仓库安装 MongoDB。简单但不是最新版本的 MongoDB
  2. 使用其官方仓库安装 MongoDB。稍微复杂,但你能得到最新版本的 MongoDB。

第一种安装方法更容易,但如果你计划使用官方支持的最新版本,那么我建议使用第二种方法。

有些人可能更喜欢使用 snap 包。Ubuntu 软件中心提供了 snap,但我不建议使用它们,因为他们现在已经过期了,因此我这里不会提到。

方法 1:从 Ubuntu 仓库安装 MongoDB

这是在系统中安装 MongoDB 的简便方法,你只需输入一个命令即可。

安装 MongoDB

首先,确保你的包是最新的。打开终端并输入:

sudo apt update && sudo apt upgrade -y

继续安装 MongoDB:

sudo apt install mongodb

这就完成了!MongoDB 现在安装到你的计算机上了。

MongoDB 服务应该在安装时自动启动,但要检查服务状态:

sudo systemctl status mongodb

Check if the MongoDB service is running.

你可以看到该服务是活动的。

运行 MongoDB

MongoDB 目前是一个 systemd 服务,因此我们使用 systemctl 来检查和修改它的状态,使用以下命令:

sudo systemctl status mongodb
sudo systemctl stop mongodb
sudo systemctl start mongodb
sudo systemctl restart mongodb

你也可以修改 MongoDB 是否自动随系统启动(默认:启用):

sudo systemctl disable mongodb
sudo systemctl enable mongodb

要开始使用(创建和编辑)数据库,请输入:

mongo

这将启动 mongo shell。有关查询和选项的详细信息,请查看手册

注意:根据你计划使用 MongoDB 的方式,你可能需要调整防火墙。不过这超出了本篇的内容,并且取决于你的配置。

卸载 MongoDB

如果你从 Ubuntu 仓库安装 MongoDB 并想要卸载它(可能要使用官方支持的方式安装),请输入:

sudo systemctl stop mongodb
sudo apt purge mongodb
sudo apt autoremove

这应该会完全卸载 MongoDB。确保备份你可能想要保留的任何集合或文档,因为它们将被删除!

方法 2:在 Ubuntu 上安装 MongoDB 社区版

这是推荐的安装 MongoDB 的方法,它使用包管理器。你需要多打几条命令,对于 Linux 新手而言,这可能会感到害怕。

但没有什么可怕的!我们将一步步说明安装过程。

安装 MongoDB

由 MongoDB Inc. 维护的包称为 mongodb-org,而不是 mongodb(这是 Ubuntu 仓库中包的名称)。在开始之前,请确保系统上未安装 mongodb。因为包之间会发生冲突。让我们开始吧!

首先,我们必须导入公钥:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4

现在,你需要在源列表中添加一个新的仓库,以便你可以安装 MongoDB 社区版并获得自动更新:

echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu $(lsb_release -cs)/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list

要安装 mongodb-org,我们需要更新我们的包数据库,以便系统知道可用的新包:

sudo apt update

现在你可以安装最新稳定版的 MongoDB:

sudo apt install -y mongodb-org

或者某个特定版本(在 = 后面修改版本号)

sudo apt install -y mongodb-org=4.0.6 mongodb-org-server=4.0.6 mongodb-org-shell=4.0.6 mongodb-org-mongos=4.0.6 mongodb-org-tools=4.0.6

如果你选择安装特定版本,请确保在所有位置都修改了版本号。如果你修改了 mongodb-org=4.0.6,你将安装最新版本。

默认情况下,使用包管理器(apt-get)更新时,MongoDB 将更新为最新的版本。要阻止这种情况发生(并冻结为已安装的版本),请使用:

echo "mongodb-org hold" | sudo dpkg --set-selections
echo "mongodb-org-server hold" | sudo dpkg --set-selections
echo "mongodb-org-shell hold" | sudo dpkg --set-selections
echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
echo "mongodb-org-tools hold" | sudo dpkg --set-selections

你现在已经成功安装了 MongoDB!

配置 MongoDB

默认情况下,包管理器将创建 /var/lib/mongodb/var/log/mongodb,MongoDB 将使用 mongodb 用户帐户运行。

我不会去更改这些默认设置,因为这超出了本指南的范围。有关详细信息,请查看手册

/etc/mongod.conf 中的设置在启动/重新启动 mongodb 服务实例时生效。

运行 MongoDB

要启动 mongodb 的守护进程 mongod,请输入:

sudo service mongod start

现在你应该验证 mongod 进程是否已成功启动。此信息(默认情况下)保存在 /var/log/mongodb/mongod.log 中。我们来看看文件的内容:

sudo cat /var/log/mongodb/mongod.log

Check MongoDB logs to see if the process is running properly.

只要你在某处看到:[initandlisten] waiting for connections on port 27017,就说明进程正常运行。

注意:27017 是 mongod 的默认端口。

要停止/重启 mongod,请输入:

sudo service mongod stop
sudo service mongod restart

现在,你可以通过打开 mongo shell 来使用 MongoDB:

mongo

卸载 MongoDB

运行以下命令:

sudo service mongod stop
sudo apt purge mongodb-org*

要删除数据库日志文件(确保备份你要保留的内容!):

sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongodb

总结

MongoDB 是一个很棒的 NoSQL 数据库,它易于集成到现代项目中。我希望本教程能帮助你在 Ubuntu 上安装它!在下面的评论中告诉我们你计划如何使用 MongoDB。


via: https://itsfoss.com/install-mongodb-ubuntu

作者:Sergiu 选题:lujun9972 译者:geekpi 校对:wxy

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

我们已经在先前的文章中看到如何安装 Debian 10(Buster)。今天,我们将学习如何从 Debian 9 升级为 Debian 10,虽然我们已将看到 Debian 10 和它的特色,所以这里我们不会深入介绍。但是可能读者没有机会读到那篇文章,让我们快速了解一下 Debian 10 和它的新功能。

在差不多两年的开发后,Debian 团队最终发布一个稳定版本,Debian 10 的代码名称是 Buster。Buster 是一个 LTS (长期支持支持)版本,因此未来将由 Debian 支持 5 年。

Debian 10(Buster)新的特色

Debian 10(Buster)回报给大多数 Debian 爱好者大量的新特色。一些特色包括:

  • GNOME 桌面 3.30
  • 默认启用 AppArmor
  • 支持 Linux 内核 4.19.0-4
  • 支持 OpenJDk 11.0
  • 从 Nodejs 4 ~ 8 升级到 Nodejs 10.15.2
  • Iptables 替换为 NFTables

等等。

从 Debian 9 到 Debian 10 的逐步升级指南

在我们开始升级 Debian 10 前,让我们看看升级需要的必备条件:

步骤 1) Debian 升级必备条件

  • 一个良好的网络连接
  • root 用户权限
  • 数据备份

备份你所有的应用程序代码库、数据文件、用户账号详细信息、配置文件是极其重要的,以便在升级出错时,你可以总是可以还原到先前的版本。

步骤 2) 升级 Debian 9 现有的软件包

接下来的步骤是升级你所有现有的软件包,因为一些软件包被标志为保留不能升级,从 Debian 9 升级为 Debian 10 有失败或引发一些问题的可能性。所以,我们不冒任何风险,更好地升级软件包。使用下面的代码来升级软件包:

root@linuxtechi:~$ sudo apt update && sudo apt upgrade -y

步骤 3) 修改软件包存储库文件 /etc/sources.list

接下来的步骤是修改软件包存储库文件 /etc/sources.list,你需要用文本 Buster 替换 Stretch

但是,在你更改任何东西前,确保如下创建一个 sources.list 文件的备份:

root@linuxtechi:~$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

现在使用下面的 sed 命令来在软件包存储库文件中使用 buster 替换 stretch,示例如下显示:

root@linuxtechi:~$ sudo sed -i 's/stretch/buster/g' /etc/apt/sources.list
root@linuxtechi:~$ sudo sed -i 's/stretch/buster/g' /etc/apt/sources.list.d/*.list

更新后,你需要如下更新软件包存储库索引:

root@linuxtechi:~$ sudo apt update

在开始升级你现有的 Debian 操作系统前,让我们使用下面的命令验证当前版本,

root@linuxtechi:~$ cat /etc/*-release
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
root@linuxtechi:~$

步骤 4) 从 Debian 9 升级到 Debian 10

你做完所有的更改后,是时候从 Debian 9 升级到 Debian 10 了。但是在这之前,再次如下确保更新你的软件包:

root@linuxtechi:~$ sudo apt update && sudo apt upgrade -y

在软件包升级期间,你将被提示启动服务,所以选择你较喜欢的选项。

一旦你系统的所有软件包升级完成,就升级你的发行版的软件包。使用下面的代码来升级发行版:

root@linuxtechi:~$ sudo apt dist-upgrade -y

升级过程可能花费一些时间,取决于你的网络速度。记住在升级过程中,你将被询问一些问题,在软件包升级后是否需要重启服务、你是否需要保留现存的配置文件等。如果你不想进行一些自定义更改,简单地键入 “Y” ,来让升级过程继续。

步骤 5) 验证升级

一旦升级过程完成,重启你的机器,并使用下面的方法检测版本:

root@linuxtechi:~$ lsb_release -a

如果你获得如下输出:

Distributor ID: Debian
Description:    Debian GNU/Linux 10 (buster)
Release:        10
Codename:       buster
root@linuxtechi:~$

是的,你已经成功地从 Debian 9 升级到 Debian 10。

验证升级的备用方法:

root@linuxtechi:~$ cat /etc/*-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
root@linuxtechi:~$

结束

希望上面的逐步指南为你提供了从 Debian 9(Stretch)简单地升级为 Debian 10(Buster)的所有信息。在评论部分,请给予你使用 Debian 10 的反馈、建议、体验。


via: https://www.linuxtechi.com/upgrade-debian-9-to-debian-10-command-line/

作者:Pradeep Kumar 选题:lujun9972 译者:robsean 校对:wxy

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