分类 技术 下的文章

在这个逐步的教程中学习如何在 Ubuntu 上安装 Budgie 桌面。

在所有各种 Ubuntu 版本中,Ubuntu Budgie 是最被低估的版本。它外观优雅,而且需要的资源也不多。

阅读这篇 《Ubuntu Budgie 点评》或观看下面的视频,了解 Ubuntu Budgie 18.04 的外观如何。

如果你喜欢 Budgie 桌面但你正在使用其他版本的 Ubuntu,例如默认 Ubuntu 带有 GNOME 桌面,我有个好消息。你可以在当前的 Ubuntu 系统上安装 Budgie 并切换桌面环境。

在这篇文章中,我将告诉你到底该怎么做。但首先,对那些不了解 Budgie 的人进行一点介绍。

Budgie 桌面环境主要由 Solus Linux 团队开发。它的设计注重优雅和现代使用。Budgie 适用于所有主流 Linux 发行版,可以让用户在其上尝试体验这种新的桌面环境。Budgie 现在非常成熟,并提供了出色的桌面体验。

警告

在同一系统上安装多个桌面可能会导致冲突,你可能会遇到一些问题,如面板中缺少图标或同一程序的多个图标。

你也许不会遇到任何问题。是否要尝试不同桌面由你决定。

在 Ubuntu 上安装 Budgie

此方法未在 Linux Mint 上进行测试,因此我建议你 Mint 上不要按照此指南进行操作。

对于正在使用 Ubuntu 的人,Budgie 现在默认是 Ubuntu 仓库的一部分。因此,我们不需要添加任何 PPA 来下载 Budgie。

要安装 Budgie,只需在终端中运行此命令即可。我们首先要确保系统已完全更新。

sudo apt update && sudo apt upgrade
sudo apt install ubuntu-budgie-desktop

下载完成后,你将看到选择显示管理器的提示。选择 “lightdm” 以获得完整的 Budgie 体验。

Select lightdm

安装完成后,重启计算机。然后,你会看到 Budgie 的登录页面。输入你的密码进入主屏幕。

Budgie Desktop Home

切换到其他桌面环境

Budgie login screen

你可以单击登录名旁边的 Budgie 图标获取登录选项。在那里,你可以在已安装的桌面环境(DE)之间进行选择。就我而言,我看到了 Budgie 和默认的 Ubuntu(GNOME)桌面。

Select your DE

因此,无论何时你想登录 GNOME,都可以使用此菜单执行此操作。

如何删除 Budgie

如果你不喜欢 Budgie 或只是想回到常规的以前的 Ubuntu,你可以如上节所述切换回常规桌面。

但是,如果你真的想要删除 Budgie 及其组件,你可以按照以下命令回到之前的状态。

在使用这些命令之前先切换到其他桌面环境:

sudo apt remove ubuntu-budgie-desktop ubuntu-budgie* lightdm
sudo apt autoremove
sudo apt install --reinstall gdm3

成功运行所有命令后,重启计算机。

现在,你将回到 GNOME 或其他你有的桌面。

你对 Budgie 有什么看法?

Budgie 是最佳 Linux 桌面环境之一。希望这个简短的指南帮助你在 Ubuntu 上安装了很棒的 Budgie 桌面。

如果你安装了 Budgie,你最喜欢它的什么?请在下面的评论中告诉我们。像往常一样,欢迎任何问题或建议。


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

作者:Atharva Lele 选题:lujun9972 译者:geekpi 校对:wxy

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

Linux shell 允许你将命令彼此链接在一起,一次触发执行复杂的操作,并且可以对此创建别名作为快捷方式。

让我们将继续我们的别名系列。到目前为止,你可能已经阅读了我们的关于别名的第一篇文章,并且应该非常清楚它们是如何为你省去很多麻烦的最简单方法。例如,你已经看到它们帮助我们减少了输入,让我们看看别名派上用场的其他几个案例。

别名即快捷方式

Linux shell 最美妙的事情之一是可以使用数以万计的选项和把命令连接在一起执行真正复杂的操作。好吧,也许这种美丽是在旁观者的眼中的,但是我们觉得这个功能很实用。

不利的一面是,你经常需要记得难以记忆或难以打字出来的命令组合。比如说硬盘上的空间非常宝贵,而你想要做一些清洁工作。你的第一步可能是寻找隐藏在你的家目录里的东西。你可以用来判断的一个标准是查找不再使用的内容。ls 可以帮助你:

ls -lct

上面的命令显示了每个文件和目录的详细信息(-l),并显示了每一项上次访问的时间(-c),然后它按从最近访问到最少访问的顺序排序这个列表(-t)。

这难以记住吗?你可能不会每天都使用 -c-t 选项,所以也许是吧。无论如何,定义一个别名,如:

alias lt='ls -lct'

会更容易一些。

然后,你也可能希望列表首先显示最旧的文件:

alias lo='lt -F | tac'

 title=

图 1:使用 lt 和 lo 别名。

这里有一些有趣的事情。首先,我们使用别名(lt)来创建另一个别名 —— 这是完全可以的。其次,我们将一个新参数传递给 lt(后者又通过 lt 别名的定义传递给了 ls)。

-F 选项会将特殊符号附加到项目的名称后,以便更好地区分常规文件(没有符号)和可执行文件(附加了 *)、目录文件(以 / 结尾),以及所有链接文件、符号链接文件(以 @ 符号结尾)等等。-F 选项是当你回归到单色终端的日子里,没有其他方法可以轻松看到列表项之间的差异时用的。在这里使用它是因为当你将输出从 lt 传递到 tac 时,你会丢失 ls 的颜色。

第三件我们需要注意的事情是我们使用了管道。管道用于你将一个命令的输出传递给另外一个命令时。第二个命令可以使用这些输出作为它的输入。在包括 Bash 在内的许多 shell 里,你可以使用管道符(|) 来做传递。

在这里,你将来自 lt -F 的输出导给 tactac 这个命令有点玩笑的意思,你或许听说过 cat 命令,它名义上用于将文件彼此连接(concat),而在实践中,它被用于将一个文件的内容打印到终端。tac 做的事情一样,但是它是以逆序将接收到的内容输出出来。明白了吗?cattac,技术人有时候也挺有趣的。

cattac 都能输出通过管道传递过来的内容,在这里,也就是一个按时间顺序排序的文件列表。

那么,在有些离题之后,最终我们得到的就是这个列表将当前目录中的文件和目录以新鲜度的逆序列出(即老的在前)。

最后你需要注意的是,当在当前目录或任何目录运行 lt 时:

# 这可以工作:
lt
# 这也可以:
lt /some/other/directory

……而 lo 只能在当前目录奏效:

# 这可工作:
lo
# 而这不行:
lo /some/other/directory

这是因为 Bash 会展开别名的组分。当你键入:

lt /some/other/directory

Bash 实际上运行的是:

ls -lct /some/other/directory

这是一个有效的 Bash 命令。

而当你键入:

lo /some/other/directory

Bash 试图运行:

ls -lct -F | tac /some/other/directory

这不是一个有效的命令,主要是因为 /some/other/directory 是个目录,而 cattac 不能用于目录。

更多的别名快捷方式

  • alias lll='ls -R' 会打印出目录的内容,并深入到子目录里面打印子目录的内容,以及子目录的子目录,等等。这是一个查看一个目录下所有内容的方式。
  • mkdir='mkdir -pv' 可以让你一次性创建目录下的目录。按照 mkdir 的基本形式,要创建一个包含子目录的目录,你必须这样:
mkdir newdir
mkdir newdir/subdir

或这样:

mkdir -p newdir/subdir

而用这个别名你将只需要这样就行:

mkdir newdir/subdir

你的新 mkdir 也会告诉你创建子目录时都做了什么。

别名也是一种保护

别名的另一个好处是它可以作为防止你意外地删除或覆写已有的文件的保护措施。你可能听说过这个 Linux 新用户的传言,当他们以 root 身份运行:

rm -rf /

整个系统就爆了。而决定输入如下命令的用户:

rm -rf /some/directory/ *

就很好地干掉了他们的家目录的全部内容。这里不小心键入的目录和 * 之间的那个空格有时候很容易就会被忽视掉。

这两种情况我们都可以通过 alias rm='rm -i' 别名来避免。-i 选项会使 rm 询问用户是否真的要做这个操作,在你对你的文件系统做出不可弥补的损失之前给你第二次机会。

对于 cp 也是一样,它能够覆盖一个文件而不会给你任何提示。创建一个类似 alias cp='cp -i' 来保持安全吧。

下一次

我们越来越深入到了脚本领域,下一次,我们将沿着这个方向,看看如何在命令行组合命令以给你真正的乐趣,并可靠地解决系统管理员每天面临的问题。


via: https://www.linux.com/blog/learn/2019/1/aliases-protect-and-serve

作者:Paul Brown 选题:lujun9972 译者:wxy 校对:wxy

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

Linux 用户环境变量可以帮助你找到你需要的命令,无须了解系统如何配置的细节而完成大量工作。而这些设置来自哪里和如何被修改它们是另一个话题。

IIP Photo Archive (CC BY 2.0)

在 Linux 系统上的用户账户配置以多种方法简化了系统的使用。你可以运行命令,而不需要知道它们的位置。你可以重新使用先前运行的命令,而不用发愁系统是如何追踪到它们的。你可以查看你的电子邮件,查看手册页,并容易地回到你的家目录,而不用管你在文件系统中身在何方。并且,当需要的时候,你可以调整你的账户设置,以便其更符合你喜欢的方式。

Linux 环境设置来自一系列的文件:一些是系统范围(意味着它们影响所有用户账户),一些是处于你的家目录中的配置文件里。系统范围的设置在你登录时生效,而本地设置在其后生效,所以,你在你账户中作出的更改将覆盖系统范围设置。对于 bash 用户,这些文件包含这些系统文件:

/etc/environment
/etc/bash.bashrc
/etc/profile

以及一些本地文件:

~/.bashrc
~/.profile # 如果有 ~/.bash_profile 或 ~/.bash_login 就不会读此文件
~/.bash_profile
~/.bash_login

你可以修改本地存在的四个文件的任何一个,因为它们处于你的家目录,并且它们是属于你的。

查看你的 Linux 环境设置

为查看你的环境设置,使用 env 命令。你的输出将可能与这相似:

$ env
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;
01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:
*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:
*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:
*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;
31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:
*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:
*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:
*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:
*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:
*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:
*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:
*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:
*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:
*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:
*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:
*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:
*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.spf=00;36:
SSH_CONNECTION=192.168.0.21 34975 192.168.0.11 22
LESSCLOSE=/usr/bin/lesspipe %s %s
LANG=en_US.UTF-8
OLDPWD=/home/shs
XDG_SESSION_ID=2253
USER=shs
PWD=/home/shs
HOME=/home/shs
SSH_CLIENT=192.168.0.21 34975 22
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
SSH_TTY=/dev/pts/0
MAIL=/var/mail/shs
TERM=xterm
SHELL=/bin/bash
SHLVL=1
LOGNAME=shs
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
XDG_RUNTIME_DIR=/run/user/1000
PATH=/home/shs/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
LESSOPEN=| /usr/bin/lesspipe %s
_=/usr/bin/env

虽然你可能会看到大量的输出,上面显示的第一大部分用于在命令行上使用颜色标识各种文件类型。当你看到类似 *.tar=01;31: 这样的东西,这告诉你 tar 文件将以红色显示在文件列表中,然而 *.jpg=01;35: 告诉你 jpg 文件将以紫色显现出来。这些颜色旨在使它易于从一个文件列表中分辨出某些文件。你可以在《在 Linux 命令行中自定义你的颜色》处学习更多关于这些颜色的定义,和如何自定义它们。

当你更喜欢一种不加装饰的显示时,一种关闭颜色显示的简单方法是使用如下命令:

$ ls -l --color=never

这个命令可以简单地转换到一个别名:

$ alias ll2='ls -l --color=never'

你也可以使用 echo 命令来单独地显现某个设置。在这个命令中,我们显示在历史缓存区中将被记忆命令的数量:

$ echo $HISTSIZE
1000

如果你已经移动到某个位置,你在文件系统中的最后位置会被记在这里:

PWD=/home/shs
OLDPWD=/tmp

作出更改

你可以使用一个像这样的命令更改环境设置,但是,如果你希望保持这个设置,在你的 ~/.bashrc 文件中添加一行代码,例如 HISTSIZE=1234

$ export HISTSIZE=1234

“export” 一个变量的本意是什么

导出一个环境变量可使设置用于你的 shell 和可能的子 shell。默认情况下,用户定义的变量是本地的,并不被导出到新的进程,例如,子 shell 和脚本。export 命令使得环境变量可用在子进程中发挥功用。

添加和移除变量

你可以很容易地在命令行和子 shell 上创建新的变量,并使它们可用。然而,当你登出并再次回来时这些变量将消失,除非你也将它们添加到 ~/.bashrc 或一个类似的文件中。

$ export MSG="Hello, World!"

如果你需要,你可以使用 unset 命令来消除一个变量:

$ unset MSG

如果变量是局部定义的,你可以通过加载你的启动文件来简单地将其设置回来。例如:

$ echo $MSG
Hello, World!
$ unset $MSG
$ echo $MSG

$ . ~/.bashrc
$ echo $MSG
Hello, World!

小结

用户账户是用一组恰当的启动文件设立的,创建了一个有用的用户环境,而个人用户和系统管理员都可以通过编辑他们的个人设置文件(对于用户)或很多来自设置起源的文件(对于系统管理员)来更改默认设置。


via: https://www.networkworld.com/article/3385516/how-to-manage-your-linux-environment.html

作者:Sandra Henry-Stocker 选题:lujun9972 译者:robsean 校对:wxy

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

在 Linux 中,Bash 技巧非常棒,它使 Linux 中的一切成为可能。

对于开发人员或系统管理员来说,它真的很管用,因为他们大部分时间都在使用终端。你知道他们为什么喜欢这种技巧吗?

因为这些技巧可以提高他们的工作效率,也能使他们工作更快。

什么是 ddgr

ddgr 是一个命令行实用程序,用于从终端搜索 DuckDuckGo。如果设置了 BROWSER 环境变量,ddgr 可以在几个基于文本的浏览器中开箱即用。

确保你的系统安装了任何一个基于文本的浏览器。你可能知道 googler,它允许用户从 Linux 命令行进行 Google 搜索。

它在命令行用户中非常受欢迎,他们期望对隐私敏感的 DuckDuckGo 也有类似的实用程序,这就是 ddgr 出现的原因。

与 Web 界面不同,你可以指定每页要查看的搜索结果数。

建议阅读:

什么是 DuckDuckGo

DDG 即 DuckDuckGo。DuckDuckGo(DDG)是一个真正保护用户搜索和隐私的互联网搜索引擎。它没有过滤用户的个性化搜索结果,对于给定的搜索词,它会向所有用户显示相同的搜索结果。

大多数用户更喜欢谷歌搜索引擎,但是如果你真的担心隐私,那么你可以放心地使用 DuckDuckGo。

ddgr 特性

  • 快速且干净(没有广告、多余的 URL 或杂物参数),自定义颜色
  • 旨在以最小的空间提供最高的可读性
  • 指定每页显示的搜索结果数
  • 可以在 omniprompt 中导航结果,在浏览器中打开 URL
  • 用于 Bash、Zsh 和 Fish 的搜索和选项补完脚本
  • 支持 DuckDuckGo Bang(带有自动补完)
  • 直接在浏览器中打开第一个结果(如同 “I’m Feeling Ducky”)
  • 不间断搜索:无需退出即可在 omniprompt 中触发新搜索
  • 关键字支持(例如:filetype:mime、site:somesite.com)
  • 按时间、指定区域搜索,禁用安全搜索
  • 支持 HTTPS 代理,支持 Do Not Track,可选择禁用用户代理字符串
  • 支持自定义 URL 处理程序脚本或命令行实用程序
  • 全面的文档,man 页面有方便的使用示例
  • 最小的依赖关系

需要条件

ddgr 需要 Python 3.4 或更高版本。因此,确保你的系统应具有 Python 3.4 或更高版本。

$ python3 --version
Python 3.6.3

如何在 Linux 中安装 ddgr

我们可以根据发行版使用以下命令轻松安装 ddgr

对于 Fedora ,使用 DNF 命令来安装 ddgr

# dnf install ddgr

或者我们可以使用 SNAP 命令来安装 ddgr

# snap install ddgr

对于 LinuxMint/Ubuntu,使用 APT-GET 命令APT 命令来安装 ddgr

$ sudo add-apt-repository ppa:twodopeshaggy/jarun
$ sudo apt-get update
$ sudo apt-get install ddgr

对于基于 Arch Linux 的系统,使用 Yaourt 命令Packer 命令从 AUR 仓库安装 ddgr

$ yaourt -S ddgr
或
$ packer -S ddgr

对于 Debian,使用 DPKG 命令 安装 ddgr

# wget https://github.com/jarun/ddgr/releases/download/v1.2/ddgr_1.2-1_debian9.amd64.deb
# dpkg -i ddgr_1.2-1_debian9.amd64.deb

对于 CentOS 7,使用 YUM 命令来安装 ddgr

# yum install https://github.com/jarun/ddgr/releases/download/v1.2/ddgr-1.2-1.el7.3.centos.x86_64.rpm

对于 opensuse,使用 zypper 命令来安装 ddgr

# zypper install https://github.com/jarun/ddgr/releases/download/v1.2/ddgr-1.2-1.opensuse42.3.x86_64.rpm

如何启动 ddgr

在终端上输入 ddgr 命令,不带任何选项来进行 DuckDuckGo 搜索。你将获得类似于下面的输出。

$ ddgr

如何使用 ddgr 进行搜索

我们可以通过两种方式启动搜索。从 omniprompt 或者直接从终端开始。你可以搜索任何你想要的短语。

直接从终端:

$ ddgr 2daygeek

从 omniprompt:

Omniprompt 快捷方式

输入 ? 以获得 omniprompt,它将显示关键字列表和进一步使用 ddgr 的快捷方式。

如何移动下一页、上一页和第一页

它允许用户移动下一页、上一页或第一页。

  • n: 移动到下一组搜索结果
  • p: 移动到上一组搜索结果
  • f: 跳转到第一页

如何启动新搜索

d 选项允许用户从 omniprompt 发起新的搜索。例如,我搜索了 “2daygeek website”,现在我将搜索 “Magesh Maruthamuthu” 这个新短语。

从 omniprompt:

ddgr (? for help) d magesh maruthmuthu

在搜索结果中显示完整的 URL

默认情况下,它仅显示文章标题,在搜索中添加 x 选项以在搜索结果中显示完整的文章网址。

$ ddgr -n 5 -x 2daygeek

限制搜索结果

默认情况下,搜索结果每页显示 10 个结果。如果你想为方便起见限制页面结果,可以使用 ddgr 带有 --num-n 参数。

$ ddgr -n 5 2daygeek

网站特定搜索

要搜索特定网站的特定页面,使用以下格式。这将从网站获取给定关键字的结果。例如,我们在 2daygeek 网站下搜索 “Package Manager”,查看结果。

$ ddgr -n 5 --site 2daygeek "package manager"


via: https://www.2daygeek.com/ddgr-duckduckgo-search-from-the-command-line-in-linux/

作者:Magesh Maruthamuthu 译者:MjSeven 校对:wxy 选题:lujun9972

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

区块链 2.0:“更”智能的房地产

在本系列的上一篇文章中我们探讨了区块链的特征,这些区块链将使机构能够将传统银行融资系统转换和交织在一起。这部分将探讨房地产区块链。房地产业正在走向革命。它是人类已知的交易最活跃、最重要的资产类别之一。然而,由于充满了监管障碍和欺诈、欺骗的无数可能性,它也是最难参与交易的之一。利用适当的共识算法的区块链的分布式分类账本功能被吹捧为这个行业的前进方向,而这个行业传统上被认为其面对变革是保守的。

就其无数的业务而言,房地产一直是一个非常保守的行业。这似乎也是理所当然的。2008 年金融危机或 20 世纪上半叶的大萧条等重大经济危机成功摧毁了该行业及其参与者。然而,与大多数具有经济价值的产品一样,房地产行业具有弹性,而这种弹性则源于其保守性。

全球房地产市场由价值 228 万亿 1 美元的资产类别组成,出入不大。其他投资资产,如股票、债券和股票合计价值仅为 170 万亿美元。显然,在这样一个行业中实施的交易在很大程度上都是精心策划和执行的。很多时候,房地产也因许多欺诈事件而臭名昭著,并且随之而来的是毁灭性的损失。由于其运营非常保守,该行业也难以驾驭。它受到了法律的严格监管,创造了一个交织在一起的细微差别网络,这对于普通人来说太难以完全理解,使得大多数人无法进入和参与。如果你曾参与过这样的交易,那么你就会知道纸质文件的重要性和长期性。

从一个微不足道的开始,虽然是一个重要的例子,以显示当前的记录管理实践在房地产行业有多糟糕,考虑一下产权保险业务 2 。产权保险用于对冲土地所有权和所有权记录不可接受且从而无法执行的可能性。诸如此类的保险产品也称为赔偿保险。在许多情况下,法律要求财产拥有产权保险,特别是在处理多年来多次易手的财产时。抵押贷款公司在支持房地产交易时也可能坚持同样的要求。事实上,这种产品自 19 世纪 50 年代就已存在,并且仅在美国每年至少有 1.5 万亿美元的商业价值这一事实证明了一开始的说法。在这种情况下,这些记录的维护方式必须进行改革,区块链提供了一个可持续解决方案。根据美国土地产权协会,平均每个案例的欺诈平均约为 10 万美元,并且涉及交易的所有产权中有 25% 的文件存在问题。区块链允许设置一个不可变的永久数据库,该数据库将跟踪资产本身,记录已经进入的每个交易或投资。这样的分类帐本系统将使包括一次性购房者在内的房地产行业的每个人的生活更加轻松,并使诸如产权保险等金融产品基本上无关紧要。将诸如房地产之类的实物资产转换为这样的数字资产是非常规的,并且目前仅在理论上存在。然而,这种变化迫在眉睫,而不是迟到 3

区块链在房地产中影响最大的领域如上所述,在维护透明和安全的产权管理系统方面。基于区块链的财产记录可以包含有关财产、其所在地、所有权历史以及相关的公共记录的信息。这将允许房地产交易快速完成,并且无需第三方监控和监督。房地产评估和税收计算等任务成为有形的、客观的参数问题,而不是主观测量和猜测,因为可靠的历史数据是可公开验证的。UBITQUITY 就是这样一个平台,为企业客户提供定制的基于区块链的解决方案。该平台允许客户跟踪所有房产细节、付款记录、抵押记录,甚至允许运行智能合约,自动处理税收和租赁。

这为我们带来了房地产区块链的第二大机遇和用例。由于该行业受到众多第三方的高度监管,除了参与交易的交易对手外,尽职调查和财务评估可能非常耗时。这些流程主要通过离线渠道进行,文书工作需要在最终评估报告出来之前进行数天。对于公司房地产交易尤其如此,这构成了顾问所收取的总计费时间的大部分。如果交易由抵押背书,则这些过程的重复是不可避免的。一旦与所涉及的人员和机构的数字身份相结合,就可以完全避免当前的低效率,并且可以在几秒钟内完成交易。租户、投资者、相关机构、顾问等可以单独验证数据并达成一致的共识,从而验证永久性的财产记录 4 。这提高了验证流程的准确性。房地产巨头 RE/MAX 最近宣布与服务提供商 XYO Network Partners 合作,建立墨西哥房上市地产国家数据库。他们希望有朝一日能够创建世界上最大的(截至目前)去中心化房地产登记中心之一。

然而,区块链可以带来的另一个重要且可以说是非常民主的变化是投资房地产。与其他投资资产类别不同,即使是小型家庭投资者也可能参与其中,房地产通常需要大量的手工付款才能参与。诸如 ATLANT 和 BitOfProperty 之类的公司将房产的账面价值代币化,并将其转换为加密货币的等价物。这些代币随后在交易所出售,类似于股票和股票的交易方式。房地产后续产生的任何现金流都会根据其在财产中的“份额”记入贷方或借记给代币所有者

然而,尽管如此,区块链技术仍处于房地产领域的早期采用阶段,目前的法规还没有明确定义它。诸如分布式应用程序、分布式匿名组织(DAO)、智能合约等概念在许多国家的法律领域是闻所未闻的。一旦所有利益相关者充分接受了区块链复杂性的良好教育,就会彻底改革现有的法规和指导方针,这是最务实的前进方式。 同样,这将是一个缓慢而渐进的变化,但是它是一个急需的变化。本系列的下一篇文章将介绍 “智能合约”,例如由 UBITQUITY 和 XYO 等公司实施的那些是如何在区块链中创建和执行的。


  1. HSBC, “Global Real Estate,” no. April, 2008
  2. D. B. Burke, Law of title insurance. Aspen Law & Business, 2000.
  3. M. Swan, O’Reilly – Blockchain. Blueprint for a New Economy – 2015.
  4. Deloite, “Blockchain in commercial real estate The future is here ! Table of contents.”

via: https://www.ostechnix.com/blockchain-2-0-blockchain-in-real-estate/

作者:ostechnix 选题:lujun9972 译者:wxy 校对:wxy

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

Fedora IoT 是一个即将发布的、面向物联网的 Fedora 版本。去年 Fedora Magazine 的《如何使用 Fedora IoT 点亮 LED 灯》一文第一次介绍了它。从那以后,它与 Fedora Silverblue 一起不断改进,以提供针对面向容器的工作流的不可变基础操作系统。

Kubernetes 是一个颇受欢迎的容器编排系统。它可能最常用在那些能够处理巨大负载的强劲硬件上。不过,它也能在像树莓派 3 这样轻量级的设备上运行。让我们继续阅读,来了解如何运行它。

为什么用 Kubernetes?

虽然 Kubernetes 在云计算领域风靡一时,但让它在小型单板机上运行可能并不是常见的。不过,我们有非常明确的理由来做这件事。首先,这是一个不需要昂贵硬件就可以学习并熟悉 Kubernetes 的好方法;其次,由于它的流行性,市面上有大量应用进行了预先打包,以用于在 Kubernetes 集群中运行。更不用说,当你遇到问题时,会有大规模的社区用户为你提供帮助。

最后但同样重要的是,即使是在家庭实验室这样的小规模环境中,容器编排也确实能够使事情变得更加简单。虽然在学习曲线方面,这一点并不明显,但这些技能在你将来与任何集群打交道的时候都会有帮助。不管你面对的是一个单节点树莓派集群,还是一个大规模的机器学习场,它们的操作方式都是类似的。

K3s - 轻量级的 Kubernetes

一个“正常”安装的 Kubernetes(如果有这么一说的话)对于物联网来说有点沉重。K8s 的推荐内存配置,是每台机器 2GB!不过,我们也有一些替代品,其中一个新人是 k3s —— 一个轻量级的 Kubernetes 发行版。

K3s 非常特殊,因为它将 etcd 替换成了 SQLite 以满足键值存储需求。还有一点,在于整个 k3s 将使用一个二进制文件分发,而不是每个组件一个。这减少了内存占用并简化了安装过程。基于上述原因,我们只需要 512MB 内存即可运行 k3s,极度适合小型单板电脑!

你需要的东西

  1. Fedora IoT 运行在虚拟机或实体设备中运行的。在这里可以看到优秀的入门指南。一台机器就足够了,不过两台可以用来测试向集群添加更多节点。
  2. 配置防火墙,允许 6443 和 8372 端口的通信。或者,你也可以简单地运行 systemctl stop firewalld 来为这次实验关闭防火墙。

安装 k3s

安装 k3s 非常简单。直接运行安装脚本:

curl -sfL https://get.k3s.io | sh -

它会下载、安装并启动 k3s。安装完成后,运行以下命令来从服务器获取节点列表:

kubectl get nodes

需要注意的是,有几个选项可以通过环境变量传递给安装脚本。这些选项可以在文档中找到。当然,你也完全可以直接下载二进制文件来手动安装 k3s。

对于实验和学习来说,这样已经很棒了,不过单节点的集群也不能算一个集群。幸运的是,添加另一个节点并不比设置第一个节点要难。只需要向安装脚本传递两个环境变量,它就可以找到第一个节点,而不用运行 k3s 的服务器部分。

curl -sfL https://get.k3s.io | K3S_URL=https://example-url:6443 \
  K3S_TOKEN=XXX sh -

上面的 example-url 应被替换为第一个节点的 IP 地址,或一个完全限定域名。在该节点中,(用 XXX 表示的)令牌可以在 /var/lib/rancher/k3s/server/node-token 文件中找到。

部署一些容器

现在我们有了一个 Kubernetes 集群,我们可以真正做些什么呢?让我们从部署一个简单的 Web 服务器开始吧。

kubectl create deployment my-server --image nginx

这会从名为 nginx 的容器镜像中创建出一个名叫 my-server部署(默认使用 docker hub 注册中心,以及 latest 标签)。

kubectl get pods

为了访问到 pod 中运行的 nginx 服务器,首先通过一个 服务 来暴露该部署。以下命令将创建一个与该部署同名的服务。

kubectl expose deployment my-server --port 80

服务将作为一种负载均衡器和 Pod 的 DNS 记录来工作。比如,当运行第二个 Pod 时,我们只需指定 my-server(服务名称)就可以通过 curl 访问 nginx 服务器。有关如何操作,可以看下面的实例。

# 启动一个 pod,在里面以交互方式运行 bash
kubectl run debug --generator=run-pod/v1 --image=fedora -it -- bash
# 等待 bash 提示符出现
curl my-server
# 你可以看到“Welcome to nginx!”的输出页面

Ingress 控制器及外部 IP

默认状态下,一个服务只能获得一个 ClusterIP(只能从集群内部访问),但你也可以通过把它的类型设置为 LoadBalancer 为该服务申请一个外部 IP。不过,并非所有应用都需要自己的 IP 地址。相反,通常可以通过基于 Host 请求头部或请求路径进行路由,从而使多个服务共享一个 IP 地址。你可以在 Kubernetes 使用 Ingress 完成此操作,而这也是我们要做的。Ingress 也提供了额外的功能,比如无需配置应用即可对流量进行 TLS 加密。

Kubernetes 需要 Ingress 控制器来使 Ingress 资源工作,k3s 包含 Traefik 正是出于此目的。它还包含了一个简单的服务负载均衡器,可以为集群中的服务提供外部 IP。这篇文档描述了这种服务:

k3s 包含一个使用可用主机端口的基础服务负载均衡器。比如,如果你尝试创建一个监听 80 端口的负载均衡器,它会尝试在集群中寻找一个 80 端口空闲的节点。如果没有可用端口,那么负载均衡器将保持在 Pending 状态。

k3s README

Ingress 控制器已经通过这个负载均衡器暴露在外。你可以使用以下命令找到它正在使用的 IP 地址。

$ kubectl get svc --all-namespaces
NAMESPACE     NAME         TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
 default       kubernetes   ClusterIP      10.43.0.1               443/TCP                      33d
 default       my-server    ClusterIP      10.43.174.38            80/TCP                       30m
 kube-system   kube-dns     ClusterIP      10.43.0.10              53/UDP,53/TCP,9153/TCP       33d
 kube-system   traefik      LoadBalancer   10.43.145.104   10.0.0.8      80:31596/TCP,443:31539/TCP   33d

找到名为 traefik 的服务。在上面的例子中,我们感兴趣的 IP 是 10.0.0.8。

路由传入的请求

让我们创建一个 Ingress,使它通过基于 Host 头部的路由规则将请求路由至我们的服务器。这个例子中我们使用 xip.io 来避免必要的 DNS 记录配置工作。它的工作原理是将 IP 地址作为子域包含,以使用 10.0.0.8.xip.io 的任何子域来达到 IP 10.0.0.8。换句话说,my-server.10.0.0.8.xip.io 被用于访问集群中的 Ingress 控制器。你现在就可以尝试(使用你自己的 IP,而不是 10.0.0.8)。如果没有 Ingress,你应该会访问到“默认后端”,只是一个写着“404 page not found”的页面。

我们可以使用以下 Ingress 让 Ingress 控制器将请求路由到我们的 Web 服务器的服务。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-server
spec:
  rules:
    - host: my-server.10.0.0.8.xip.io
      http:
        paths:
          - path: /
            backend:
              serviceName: my-server
              servicePort: 80

将以上片段保存到 my-ingress.yaml 文件中,然后运行以下命令将其加入集群:

kubectl apply -f my-ingress.yaml

你现在应该能够在你选择的完全限定域名中访问到 nginx 的默认欢迎页面了。在我的例子中,它是 my-server.10.0.0.8.xip.io。Ingress 控制器会通过 Ingress 中包含的信息来路由请求。对 my-server.10.0.0.8.xip.io 的请求将被路由到 Ingress 中定义为 backend 的服务和端口(在本例中为 my-server80)。

那么,物联网呢?

想象如下场景:你的家或农场周围有很多的设备。它是一个具有各种硬件功能、传感器和执行器的物联网设备的异构集合。也许某些设备拥有摄像头、天气或光线传感器。其它设备可能会被连接起来,用来控制通风、灯光、百叶窗或闪烁的 LED。

这种情况下,你想从所有传感器中收集数据,在最终使用它来制定决策和控制执行器之前,也可能会对其进行处理和分析。除此之外,你可能还想配置一个仪表盘来可视化那些正在发生的事情。那么 Kubernetes 如何帮助我们来管理这样的事情呢?我们怎么保证 Pod 在合适的设备上运行?

简单的答案就是“标签”。你可以根据功能来标记节点,如下所示:

kubectl label nodes <node-name> <label-key>=<label-value>
# 举例
kubectl label nodes node2 camera=available

一旦它们被打上标签,我们就可以轻松地使用 nodeSelector 为你的工作负载选择合适的节点。拼图的最后一块:如果你想在所有合适的节点上运行 Pod,那应该使用 DaemonSet 而不是部署。换句话说,应为每个使用唯一传感器的数据收集应用程序创建一个 DaemonSet,并使用 nodeSelector 确保它们仅在具有适当硬件的节点上运行。

服务发现功能允许 Pod 通过服务名称来寻找彼此,这项功能使得这类分布式系统的管理工作变得易如反掌。你不需要为应用配置 IP 地址或自定义端口,也不需要知道它们。相反,它们可以通过集群中的命名服务轻松找到彼此。

充分利用空闲资源

随着集群的启动并运行,收集数据并控制灯光和气候,可能使你觉得你已经把它完成了。不过,集群中还有大量的计算资源可以用于其它项目。这才是 Kubernetes 真正出彩的地方。

你不必担心这些资源的确切位置,或者去计算是否有足够的内存来容纳额外的应用程序。这正是编排系统所解决的问题!你可以轻松地在集群中部署更多的应用,让 Kubernetes 来找出适合运行它们的位置(或是否适合运行它们)。

为什么不运行一个你自己的 NextCloud 实例呢?或者运行 gitea?你还可以为你所有的物联网容器设置一套 CI/CD 流水线。毕竟,如果你可以在集群中进行本地构建,为什么还要在主计算机上构建并交叉编译它们呢?

这里的要点是,Kubernetes 可以更容易地利用那些你可能浪费掉的“隐藏”资源。Kubernetes 根据可用资源和容错处理规则来调度 Pod,因此你也无需手动完成这些工作。但是,为了帮助 Kubernetes 做出合理的决定,你绝对应该为你的工作负载添加资源请求配置。

总结

尽管 Kuberenetes 或一般的容器编排平台通常不会与物联网相关联,但在管理分布式系统时,使用一个编排系统肯定是有意义的。你不仅可以使用统一的方式来处理多样化和异构的设备,还可以简化它们的通信方式。此外,Kubernetes 还可以更好地对闲置资源加以利用。

容器技术使构建“随处运行”应用的想法成为可能。现在,Kubernetes 可以更轻松地来负责“随处”的部分。作为构建一切的不可变基础,我们使用 Fedora IoT。


via: https://fedoramagazine.org/kubernetes-on-fedora-iot-with-k3s/

作者:Lennart Jern 选题:lujun9972 译者:StdioA 校对:wxy

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