2019年2月

PuTTY 是一个自由开源且支持包括 SSH、Telnet 和 Rlogin 在内的多种协议的 GUI 客户端。一般来说,Windows 管理员们会把 PuTTY 当成 SSH 或 Telnet 客户端来在本地 Windows 系统和远程 Linux 服务器之间建立连接。不过,PuTTY 可不是 Windows 的独占软件。它在 Linux 用户之中也是很流行的。本篇文章将会告诉你如何在 Linux 中安装并使用 PuTTY。

在 Linux 中安装 PuTTY

PuTTY 已经包含在了许多 Linux 发行版的官方源中。举个例子,在 Arch Linux 中,我们可以通过这个命令安装 PuTTY:

$ sudo pacman -S putty

在 Debian、Ubuntu 或是 Linux Mint 中安装它:

$ sudo apt install putty

使用 PuTTY 访问远程 Linux 服务器

在安装完 PuTTY 之后,你可以在菜单或启动器中打开它。如果你想用终端打开它,也是可以的:

$ putty

PuTTY 的默认界面长这个样子:

PuTTY 默认界面

如你所见,许多选项都配上了说明。在左侧面板中,你可以配置许多项目,比如:

  1. 修改 PuTTY 登录会话选项;
  2. 修改终端模拟器控制选项,控制各个按键的功能;
  3. 控制终端响铃的声音;
  4. 启用/禁用终端的高级功能;
  5. 设定 PuTTY 窗口大小;
  6. 控制命令回滚长度(默认是 2000 行);
  7. 修改 PuTTY 窗口或光标的外观;
  8. 调整窗口边缘;
  9. 调整字体;
  10. 保存登录信息;
  11. 设置代理;
  12. 修改各协议的控制选项;
  13. 以及更多。

所有选项基本都有注释,相信你理解起来不难。

使用 PuTTY 访问远程 Linux 服务器

请在左侧面板点击 “Session” 选项卡,输入远程主机名(或 IP 地址)。然后,请选择连接类型(比如 Telnet、Rlogin 以及 SSH 等)。根据你选择的连接类型,PuTTY 会自动选择对应连接类型的默认端口号(比如 SSH 是 22、Telnet 是 23),如果你修改了默认端口号,别忘了手动把它输入到 “Port” 里。在这里,我用 SSH 连接到远程主机。在输入所有信息后,请点击 “Open”。

通过 SSH 连接

如果这是你首次连接到这个远程主机,PuTTY 会显示一个安全警告,问你是否信任你连接到的远程主机。点击 “Accept” 即可将远程主机的密钥加入 PuTTY 的缓存当中:

PuTTY 安全警告

接下来,输入远程主机的用户名和密码。然后你就成功地连接上远程主机啦。

已连接上远程主机

使用密钥验证访问远程主机

一些 Linux 管理员可能在服务器上配置了密钥认证。举个例子,在用 PuTTY 访问 AMS 实例的时候,你需要指定密钥文件的位置。PuTTY 可以使用它自己的格式(.ppk 文件)来进行公钥验证。

首先输入主机名或 IP。之后,在 “Category” 选项卡中,展开 “Connection”,再展开 “SSH”,然后选择 “Auth”,之后便可选择 .ppk 密钥文件了。

点击 “Accept” 来关闭安全提示。然后,输入远程主机的密码(如果密钥被密码保护)来建立连接。

保存 PuTTY 会话

有些时候,你可能需要多次连接到同一个远程主机,你可以保存这些会话并在之后不输入信息访问他们。

请输入主机名(或 IP 地址),并提供一个会话名称,然后点击 “Save”。如果你有密钥文件,请确保你在点击 “Save” 按钮之前指定它们。

现在,你可以通过选择 “Saved sessions”,然后点击 “Load”,再点击 “Open” 来启动连接。

使用 PuTTY 安全复制客户端(pscp)来将文件传输到远程主机中

通常来说,Linux 用户和管理员会使用 scp 这个命令行工具来从本地往远程主机传输文件。不过 PuTTY 给我们提供了一个叫做 PuTTY 安全复制客户端 PuTTY Secure Copy Client (简写为 pscp)的工具来干这个事情。如果你的本地主机运行的是 Windows,你可能需要这个工具。PSCP 在 Windows 和 Linux 下都是可用的。

使用这个命令来将 file.txt 从本地的 Arch Linux 拷贝到远程的 Ubuntu 上:

pscp -i test.ppk file.txt [email protected]:/home/sk/

让我们来分析这个命令:

  • -i test.ppk:访问远程主机所用的密钥文件;
  • file.txt:要拷贝到远程主机的文件;
  • [email protected]:远程主机的用户名与 IP;
  • /home/sk/:目标路径。

要拷贝一个目录,请使用 -r 递归 Recursive )参数:

 pscp -i test.ppk -r dir/ [email protected]:/home/sk/

要使用 pscp 传输文件,请执行以下命令:

pscp -i test.ppk c:\documents\file.txt.txt [email protected]:/home/sk/

你现在应该了解了 PuTTY 是什么,知道了如何安装它和如何使用它。同时,你也学习到了如何使用 pscp 程序在本地和远程主机上传输文件。

以上便是所有了,希望这篇文章对你有帮助。

干杯!


via: https://www.ostechnix.com/how-to-install-and-use-putty-on-linux/

作者:SK 选题:lujun9972 译者:zhs852 校对:wxy

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

屏幕02 课程在屏幕01 的基础上构建,它教你如何绘制线和一个生成伪随机数的小特性。假设你已经有了 课程 6:屏幕01 的操作系统代码,我们将以它为基础来构建。

1、点

现在,我们的屏幕已经正常工作了,现在开始去创建一个更实用的图像,是水到渠成的事。如果我们能够绘制出更实用的图形那就更好了。如果我们能够在屏幕上的两点之间绘制一条线,那我们就能够组合这些线绘制出更复杂的图形了。

我们将尝试用汇编代码去实现它,但在开始时,我们确实需要使用一些其它的函数去辅助。我们需要一个这样的函数,我将调用 SetPixel 去修改指定像素的颜色,而在寄存器 r0r1 中提供输入。如果我们写出的代码可以在任意内存中而不仅仅是屏幕上绘制图形,这将在以后非常有用,因此,我们首先需要一些控制真实绘制位置的方法。我认为实现上述目标的最好方法是,能够有一个内存片段用于保存将要绘制的图形。我应该最终得到的是一个存储地址,它通常指向到自上次的帧缓存结构上。我们将一直在我们的代码中使用这个绘制方法。这样,如果我们想在我们的操作系统的另一部分绘制一个不同的图像,我们就可以生成一个不同结构的地址值,而使用的是完全相同的代码。为简单起见,我们将使用另一个数据片段去控制我们绘制的颜色。

为了绘制出更复杂的图形,一些方法使用一个着色函数而不是一个颜色去绘制。每个点都能够调用着色函数来确定在那里用什么颜色去绘制。

复制下列代码到一个名为 drawing.s 的新文件中。

.section .data
.align 1
foreColour:
.hword 0xFFFF

.align 2
graphicsAddress:
.int 0

.section .text
.globl SetForeColour
SetForeColour:
cmp r0,#0x10000
movhs pc,lr
ldr r1,=foreColour
strh r0,[r1]
mov pc,lr

.globl SetGraphicsAddress
SetGraphicsAddress:
ldr r1,=graphicsAddress
str r0,[r1]
mov pc,lr

这段代码就是我上面所说的一对函数以及它们的数据。我们将在 main.s 中使用它们,在绘制图像之前去控制在何处绘制什么内容。

我们的下一个任务是去实现一个 SetPixel 方法。它需要带两个参数,像素的 x 和 y 轴,并且它应该要使用 graphicsAddressforeColour,我们只定义精确控制在哪里绘制什么图像即可。如果你认为你能立即实现这些,那么去动手实现吧,如果不能,按照我们提供的步骤,按示例去实现它。

构建一个通用方法,比如 SetPixel,我们将在它之上构建另一个方法是一个很好的想法。但我们必须要确保这个方法很快,因为我们要经常使用它。
  1. 加载 graphicsAddress
  2. 检查像素的 x 和 y 轴是否小于宽度和高度。
  3. 计算要写入的像素地址(提示:frameBufferAddress +(x + y * 宽度)* 像素大小
  4. 加载 foreColour
  5. 保存到地址。

上述步骤实现如下:

1、加载 graphicsAddress

.globl DrawPixel
DrawPixel:
px .req r0
py .req r1
addr .req r2
ldr addr,=graphicsAddress
ldr addr,[addr]

2、记住,宽度和高度被各自保存在帧缓冲偏移量的 0 和 4 处。如有必要可以参考 frameBuffer.s

height .req r3
ldr height,[addr,#4]
sub height,#1
cmp py,height
movhi pc,lr
.unreq height

width .req r3
ldr width,[addr,#0]
sub width,#1
cmp px,width
movhi pc,lr

3、确实,这段代码是专用于高色值帧缓存的,因为我使用一个逻辑左移操作去计算地址。你可能希望去编写一个不需要专用的高色值帧缓冲的函数版本,记得去更新 SetForeColour 的代码。它实现起来可能更复杂一些。

ldr addr,[addr,#32]
add width,#1
mla px,py,width,px
.unreq width
.unreq py
add addr, px,lsl #1
.unreq px
mla dst,reg1,reg2,reg3 将寄存器 reg1reg2 中的值相乘,然后将结果与寄存器 reg3 中的值相加,并将结果的低 32 位保存到 dst 中。

4、这是专用于高色值的。

fore .req r3
ldr fore,=foreColour
ldrh fore,[fore]

5、这是专用于高色值的。

strh fore,[addr]
.unreq fore
.unreq addr
mov pc,lr

2、线

问题是,线的绘制并不是你所想像的那么简单。到目前为止,你必须认识到,编写一个操作系统时,几乎所有的事情都必须我们自己去做,绘制线条也不例外。我建议你们花点时间想想如何在任意两点之间绘制一条线。

我估计大多数的策略可能是去计算线的梯度,并沿着它来绘制。这看上去似乎很完美,但它事实上是个很糟糕的主意。主要问题是它涉及到除法,我们知道在汇编中,做除法很不容易,并且还要始终记录小数,这也很困难。事实上,在这里,有一个叫布鲁塞姆的算法,它非常适合汇编代码,因为它只使用加法、减法和位移运算。

在我们日常编程中,我们对像除法这样的运算通常懒得去优化。但是操作系统不同,它必须高效,因此我们要始终专注于如何让事情做的尽可能更好。

我们从定义一个简单的直线绘制算法开始,代码如下:

/* 我们希望从 (x0,y0) 到 (x1,y1) 去绘制一条线,只使用一个函数 setPixel(x,y),它的功能是在给定的 (x,y) 上绘制一个点。 */

if x1 > x0 then

set deltax to x1 - x0
set stepx to +1

otherwise

set deltax to x0 - x1
set stepx to -1

end if

if y1 > y0 then

set deltay to y1 - y0
set stepy to +1

otherwise

set deltay to y0 - y1
set stepy to -1

end if

if deltax > deltay then

set error to 0
until x0 = x1 + stepx

setPixel(x0, y0)
set error to error + deltax ÷ deltay
if error ≥ 0.5 then

set y0 to y0 + stepy
set error to error - 1

end if
set x0 to x0 + stepx

repeat

otherwise

end if

这个算法用来表示你可能想像到的那些东西。变量 error 用来记录你离实线的距离。沿着 x 轴每走一步,这个 error 的值都会增加,而沿着 y 轴每走一步,这个 error 值就会减 1 个单位。error 是用于测量距离 y 轴的距离。

虽然这个算法是有效的,但它存在一个重要的问题,很明显,我们使用了小数去保存 error,并且也使用了除法。所以,一个立即要做的优化将是去改变 error 的单位。这里并不需要用特定的单位去保存它,只要我们每次使用它时都按相同数量去伸缩即可。所以,我们可以重写这个算法,通过在所有涉及 error 的等式上都简单地乘以 deltay,从面让它简化。下面只展示主要的循环:

set error to 0 × deltay
until x0 = x1 + stepx

setPixel(x0, y0)
set error to error + deltax ÷ deltay × deltay
if error ≥ 0.5 × deltay then

set y0 to y0 + stepy
set error to error - 1 × deltay

end if
set x0 to x0 + stepx

repeat

它将简化为:

cset error to 0
until x0 = x1 + stepx

setPixel(x0, y0)
set error to error + deltax
if error × 2 ≥ deltay then

set y0 to y0 + stepy
set error to error - deltay

end if
set x0 to x0 + stepx

repeat

突然,我们有了一个更好的算法。现在,我们看一下如何完全去除所需要的除法运算。最好保留唯一的被 2 相乘的乘法运算,我们知道它可以通过左移 1 位来实现!现在,这是非常接近布鲁塞姆算法的,但还可以进一步优化它。现在,我们有一个 if 语句,它将导致产生两个代码块,其中一个用于 x 差异较大的线,另一个用于 y 差异较大的线。对于这两种类型的线,如果审查代码能够将它们转换成一个单语句,还是很值得去做的。

困难之处在于,在第一种情况下,error 是与 y 一起变化,而第二种情况下 error 是与 x 一起变化。解决方案是在一个变量中同时记录它们,使用负的 error 去表示 x 中的一个 error,而用正的 error 表示它是 y 中的。

set error to deltax - deltay
until x0 = x1 + stepx or y0 = y1 + stepy

setPixel(x0, y0)
if error × 2 > -deltay then

set x0 to x0 + stepx
set error to error - deltay

end if
if error × 2 < deltax then

set y0 to y0 + stepy
set error to error + deltax

end if

repeat

你可能需要一些时间来搞明白它。在每一步中,我们都认为它正确地在 x 和 y 中移动。我们通过检查来做到这一点,如果我们在 x 或 y 轴上移动,error 的数量会变低,那么我们就继续这样移动。

布鲁塞姆算法是在 1962 年由 Jack Elton Bresenham 开发,当时他 24 岁,正在攻读博士学位。

用于画线的布鲁塞姆算法可以通过以下的伪代码来描述。以下伪代码是文本,它只是看起来有点像是计算机指令而已,但它却能让程序员实实在在地理解算法,而不是为机器可读。

/* 我们希望从 (x0,y0) 到 (x1,y1) 去绘制一条线,只使用一个函数 setPixel(x,y),它的功能是在给定的 (x,y) 上绘制一个点。 */

if x1 > x0 then
    set deltax to x1 - x0
    set stepx to +1
otherwise
    set deltax to x0 - x1
    set stepx to -1
end if

set error to deltax - deltay
until x0 = x1 + stepx or y0 = y1 + stepy
    setPixel(x0, y0)
    if error × 2 ≥ -deltay then
        set x0 to x0 + stepx
        set error to error - deltay
    end if
    if error × 2 ≤ deltax then
        set y0 to y0 + stepy
        set error to error + deltax
    end if
repeat

与我们目前所使用的编号列表不同,这个算法的表示方式更常用。看看你能否自己实现它。我在下面提供了我的实现作为参考。

.globl DrawLine
DrawLine:
push {r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
x0 .req r9
x1 .req r10
y0 .req r11
y1 .req r12

mov x0,r0
mov x1,r2
mov y0,r1
mov y1,r3

dx .req r4
dyn .req r5  /* 注意,我们只使用 -deltay,因此为了速度,我保存它的负值。(因此命名为 dyn)*/
sx .req r6
sy .req r7
err .req r8

cmp x0,x1
subgt dx,x0,x1
movgt sx,#-1
suble dx,x1,x0
movle sx,#1

cmp y0,y1
subgt dyn,y1,y0
movgt sy,#-1
suble dyn,y0,y1
movle sy,#1

add err,dx,dyn
add x1,sx
add y1,sy

pixelLoop$:

    teq x0,x1
    teqne y0,y1
    popeq {r4,r5,r6,r7,r8,r9,r10,r11,r12,pc}
    
    mov r0,x0
    mov r1,y0
    bl DrawPixel
    
    cmp dyn, err,lsl #1
    addle err,dyn
    addle x0,sx
    
    cmp dx, err,lsl #1
    addge err,dx
    addge y0,sy
    
    b pixelLoop$

.unreq x0
.unreq x1
.unreq y0
.unreq y1
.unreq dx
.unreq dyn
.unreq sx
.unreq sy
.unreq err

3、随机性

到目前,我们可以绘制线条了。虽然我们可以使用它来绘制图片及诸如此类的东西(你可以随意去做!),我想应该借此机会引入计算机中随机性的概念。我将这样去做,选择一对随机的坐标,然后从上一对坐标用渐变色绘制一条线到那个点。我这样做纯粹是认为它看起来很漂亮。

那么,总结一下,我们如何才能产生随机数呢?不幸的是,我们并没有产生随机数的一些设备(这种设备很罕见)。因此只能利用我们目前所学过的操作,需要我们以某种方式来发明“随机数”。你很快就会意识到这是不可能的。各种操作总是给出定义好的结果,用相同的寄存器运行相同的指令序列总是给出相同的答案。而我们要做的是推导出一个伪随机序列。这意味着数字在外人看来是随机的,但实际上它是完全确定的。因此,我们需要一个生成随机数的公式。其中有人可能会想到很垃圾的数学运算,比如:4x 2! / 64,而事实上它产生的是一个低质量的随机数。在这个示例中,如果 x 是 0,那么答案将是 0。看起来很愚蠢,我们需要非常谨慎地选择一个能够产生高质量随机数的方程式。

硬件随机数生成器很少用在安全中,因为可预测的随机数序列可能影响某些加密的安全。

我将要教给你的方法叫“二次同余发生器”。这是一个非常好的选择,因为它能够在 5 个指令中实现,并且能够产生一个从 0 到 232-1 之间的看似很随机的数字序列。

不幸的是,对为什么使用如此少的指令能够产生如此长的序列的原因的研究,已经远超出了本课程的教学范围。但我还是鼓励有兴趣的人去研究它。它的全部核心所在就是下面的二次方程,其中 xn 是产生的第 n 个随机数。

这类讨论经常寻求一个问题,那就是我们所谓的随机数到底是什么?通常从统计学的角度来说的随机性是:一组没有明显模式或属性能够概括它的数的序列。

这个方程受到以下的限制:

  1. a 是偶数
  2. b = a + 1 mod 4
  3. c 是奇数

如果你之前没有见到过 mod 运算,我来解释一下,它的意思是被它后面的数相除之后的余数。比如 b = a + 1 mod 4 的意思是 ba + 1 除以 4 的余数,因此,如果 a 是 12,那么 b 将是 1,因为 a + 1 是 13,而 13 除以 4 的结果是 3 余 1。

复制下列代码到名为 random.s 的文件中。

.globl Random
Random:
xnm .req r0
a .req r1

mov a,#0xef00
mul a,xnm
mul a,xnm
add a,xnm
.unreq xnm
add r0,a,#73

.unreq a
mov pc,lr

这是随机函数的一个实现,使用一个在寄存器 r0 中最后生成的值作为输入,而接下来的数字则是输出。在我的案例中,我使用 a = EF00 16,b = 1, c = 73。这个选择是随意的,但是需要满足上述的限制。你可以使用任何数字代替它们,只要符合上述的规则就行。

4、Pi-casso

OK,现在我们有了所有我们需要的函数,我们来试用一下它们。获取帧缓冲信息的地址之后,按如下的要求修改 main

  1. 使用包含了帧缓冲信息地址的寄存器 r0 调用 SetGraphicsAddress
  2. 设置四个寄存器为 0。一个将是最后的随机数,一个将是颜色,一个将是最后的 x 坐标,而最后一个将是最后的 y 坐标。
  3. 调用 random 去产生下一个 x 坐标,使用最后一个随机数作为输入。
  4. 调用 random 再次去生成下一个 y 坐标,使用你生成的 x 坐标作为输入。
  5. 更新最后的随机数为 y 坐标。
  6. 使用 colour 值调用 SetForeColour,接着增加 colour 值。如果它大于 FFFF~16~,确保它返回为 0。
  7. 我们生成的 x 和 y 坐标将介于 0 到 FFFFFFFF 16。通过将它们逻辑右移 22 位,将它们转换为介于 0 到 1023 10 之间的数。
  8. 检查 y 坐标是否在屏幕上。验证 y 坐标是否介于 0 到 767 10 之间。如果不在这个区间,返回到第 3 步。
  9. 从最后的 x 坐标和 y 坐标到当前的 x 坐标和 y 坐标之间绘制一条线。
  10. 更新最后的 x 和 y 坐标去为当前的坐标。
  11. 返回到第 3 步。

一如既往,你可以在下载页面上找到这个解决方案。

在你完成之后,在树莓派上做测试。你应该会看到一系列颜色递增的随机线条以非常快的速度出现在屏幕上。它一直持续下去。如果你的代码不能正常工作,请查看我们的排错页面。

如果一切顺利,恭喜你!我们现在已经学习了有意义的图形和随机数。我鼓励你去使用它绘制线条,因为它能够用于渲染你想要的任何东西,你可以去探索更复杂的图案了。它们中的大多数都可以由线条生成,但这需要更好的策略?如果你愿意写一个画线程序,尝试使用 SetPixel 函数。如果不是去设置像素值而是一点点地增加它,会发生什么情况?你可以用它产生什么样的图案?在下一节课 课程 8:屏幕 03 中,我们将学习绘制文本的宝贵技能。


via: https://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/screen02.html

作者:Alex Chadwick 选题:lujun9972 译者:qhwdw 校对:wxy

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

本教程将向你展示如何以最快的方式在运行于 Windows 和 Linux 上的 VirtualBox 上安装 Kali Linux。

Kali Linux 是最好的黑客 和安全爱好者的 Linux 发行版之一。

由于它涉及像黑客这样的敏感话题,它就像一把双刃剑。我们过去在一篇详细的 Kali Linux 点评中对此进行了讨论,所以我不会再次赘述。

虽然你可以通过替换现有的操作系统来安装 Kali Linux,但通过虚拟机使用它将是一个更好、更安全的选择。

使用 Virtual Box,你可以将 Kali Linux 当做 Windows / Linux 系统中的常规应用程序一样,几乎就和在系统中运行 VLC 或游戏一样简单。

在虚拟机中使用 Kali Linux 也是安全的。无论你在 Kali Linux 中做什么都不会影响你的“宿主机系统”(即你原来的 Windows 或 Linux 操作系统)。你的实际操作系统将不会受到影响,宿主机系统中的数据将是安全的。

Kali Linux on Virtual Box

如何在 VirtualBox 上安装 Kali Linux

我将在这里使用 VirtualBox。它是一个很棒的开源虚拟化解决方案,适用于任何人(无论是专业或个人用途)。它可以免费使用。

在本教程中,我们将特指 Kali Linux 的安装,但你几乎可以安装任何其他已有 ISO 文件的操作系统或预先构建好的虚拟机存储文件。

注意:这些相同的步骤适用于运行在 Windows / Linux 上的 VirtualBox。

正如我已经提到的,你可以安装 Windows 或 Linux 作为宿主机。但是,在本文中,我安装了 Windows 10(不要讨厌我!),我会尝试在 VirtualBox 中逐步安装 Kali Linux。

而且,最好的是,即使你碰巧使用 Linux 发行版作为主要操作系统,相同的步骤也完全适用!

想知道怎么样做吗?让我们来看看…

在 VirtualBox 上安装 Kali Linux 的逐步指导

我们将使用专为 VirtualBox 制作的定制 Kali Linux 镜像。当然,你还可以下载 Kali Linux 的 ISO 文件并创建一个新的虚拟机,但是为什么在你有一个简单的替代方案时还要这样做呢?

1、下载并安装 VirtualBox

你需要做的第一件事是从 Oracle 官方网站下载并安装 VirtualBox。

下载了安装程序后,只需双击它即可安装 VirtualBox。在 Ubuntu / Fedora Linux 上安装 VirtualBox 也是一样的。

2、下载就绪的 Kali Linux 虚拟镜像

VirtualBox 成功安装后,前往 Offensive Security 的下载页面 下载用于 VirtualBox 的虚拟机镜像。如果你改变主意想使用 VMware,也有用于它的。

Kali Linux Virtual Box Image

如你所见,文件大小远远超过 3 GB,你应该使用 torrent 方式或使用 下载管理器 下载它。

3、在 VirtualBox 上安装 Kali Linux

一旦安装了 VirtualBox 并下载了 Kali Linux 镜像,你只需将其导入 VirtualBox 即可使其正常工作。

以下是如何导入 Kali Linux 的 VirtualBox 镜像:

步骤 1:启动 VirtualBox。你会注意到有一个 “Import” 按钮,点击它。

virtualbox import

点击 “Import” 按钮

步骤 2:接着,浏览找到你刚刚下载的文件并选择它导入(如你在下图所见)。文件名应该以 “kali linux” 开头,并以 “.ova” 扩展名结束。

virtualbox import file

导入 Kali Linux 镜像

选择好之后,点击 “Next” 进行处理。

步骤 3:现在,你将看到要导入的这个虚拟机的设置。你可以自定义它们,这是你的自由。如果你想使用默认设置,也没关系。

你需要选择具有足够存储空间的路径。我永远不会在 Windows 上推荐使用 C:驱动器。

virtualbox kali linux settings

以 VDI 方式导入硬盘驱动器

这里,VDI 方式的硬盘驱动器是指通过分配其存储空间设置来实际挂载该硬盘驱动器。

完成设置后,点击 “Import” 并等待一段时间。

步骤 4:你现在将看到这个虚拟机已经列出了。所以,只需点击 “Start” 即可启动它。

你最初可能会因 USB 端口 2.0 控制器支持而出现错误,你可以将其禁用以解决此问题,或者只需按照屏幕上的说明安装其他软件包进行修复即可。现在就完成了!

kali linux on windows virtual box

运行于 VirtualBox 中的 Kali Linux

我希望本指南可以帮助你在 VirtualBox 上轻松安装 Kali Linux。当然,Kali Linux 有很多有用的工具可用于渗透测试 —— 祝你好运!

提示:Kali Linux 和 Ubuntu 都是基于 Debian 的。如果你在使用 Kali Linux 时遇到任何问题或错误,可以按照互联网上针对 Ubuntu 或 Debian 的教程进行操作。

赠品:免费的 Kali Linux 指南手册

如果你刚刚开始使用 Kali Linux,那么了解如何使用 Kali Linux 是一个好主意。

Kali Linux 背后的公司 Offensive Security 已经创建了一本指南,介绍了 Linux 的基础知识,Kali Linux 的基础知识、配置和设置。它还有一些关于渗透测试和安全工具的章节。

基本上,它拥有你开始使用 Kali Linux 时所需知道的一切。最棒的是这本书可以免费下载。

如果你遇到问题或想分享在 VirtualBox 上运行 Kali Linux 的经验,请在下面的评论中告诉我们。


via: https://itsfoss.com/install-kali-linux-virtualbox

作者:Ankush Das 选题:lujun9972 译者:wxy 校对:wxy

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

我们都知道,在 Linux 上,包括设备在内的一切都是文件。Linux 管理员每天应该会多次执行文件创建活动(可能是 20 次,50 次,甚至是更多,这依赖于他们的环境)。如果你想 在Linux上创建一个特定大小的文件,查看前面的这个链接。

高效创建一个文件是非常重要的能力。为什么我说高效?如果你了解一些高效进行你当前活动的方式,你就可以事半功倍。这将会节省你很多的时间。你可以把这些有用的时间用到到其他重要的事情上。

我下面将会介绍多个在 Linux 上创建文件的方法。我建议你选择几个简单高效的来辅助你的工作。你不必安装下列的任何一个命令,因为它们已经作为 Linux 核心工具的一部分安装到你的系统上了。

创建文件可以通过以下六个方式来完成。

  • >:标准重定向符允许我们创建一个 0KB 的空文件。
  • touch:如果文件不存在的话,touch 命令将会创建一个 0KB 的空文件。
  • echo:通过一个参数显示文本的某行。
  • printf:用于显示在终端给定的文本。
  • cat:它串联并打印文件到标准输出。
  • vi/vim:Vim 是一个向上兼容 Vi 的文本编辑器。它常用于编辑各种类型的纯文本。
  • nano:是一个简小且用户友好的编辑器。它复制了 pico 的外观和优点,但它是自由软件。
  • head:用于打印一个文件开头的一部分。
  • tail:用于打印一个文件的最后一部分。
  • truncate:用于缩小或者扩展文件的尺寸到指定大小。

在 Linux 上使用重定向符(>)创建一个文件

标准重定向符允许我们创建一个 0KB 的空文件。它通常用于重定向一个命令的输出到一个新文件中。在没有命令的情况下使用重定向符号时,它会创建一个文件。

但是它不允许你在创建文件时向其中输入任何文本。然而它对于不是很勤劳的管理员是非常简单有用的。只需要输入重定向符后面跟着你想要的文件名。

$ > daygeek.txt

使用 ls 命令查看刚刚创建的文件。

$ ls -lh daygeek.txt
-rw-rw-r-- 1 daygeek daygeek 0 Feb 4 02:00 daygeek.txt

在 Linux 上使用 touch 命令创建一个文件

touch 命令常用于将每个文件的访问和修改时间更新为当前时间。

如果指定的文件名不存在,将会创建一个新的文件。touch 不允许我们在创建文件的同时向其中输入一些文本。它默认创建一个 0KB 的空文件。

$ touch daygeek1.txt

使用 ls 命令查看刚刚创建的文件。

$ ls -lh daygeek1.txt
-rw-rw-r-- 1 daygeek daygeek 0 Feb 4 02:02 daygeek1.txt

在 Linux 上使用 echo 命令创建一个文件

echo 内置于大多数的操作系统中。它常用于脚本、批处理文件,以及作为插入文本的单个命令的一部分。

它允许你在创建一个文件时就向其中输入一些文本。当然也允许你在之后向其中输入一些文本。

$ echo "2daygeek.com is a best Linux blog to learn Linux" > daygeek2.txt

使用 ls 命令查看刚刚创建的文件。

$ ls -lh daygeek2.txt
-rw-rw-r-- 1 daygeek daygeek 49 Feb 4 02:04 daygeek2.txt

可以使用 cat 命令查看文件的内容。

$ cat daygeek2.txt
2daygeek.com is a best Linux blog to learn Linux

你可以使用两个重定向符 (>>) 添加其他内容到同一个文件。

$ echo "It's FIVE years old blog" >> daygeek2.txt

你可以使用 cat 命令查看添加的内容。

$ cat daygeek2.txt
2daygeek.com is a best Linux blog to learn Linux
It's FIVE years old blog

在 Linux 上使用 printf 命令创建一个新的文件

printf 命令也可以以类似 echo 的方式执行。

printf 命令常用来显示在终端窗口给出的字符串。printf 可以有格式说明符、转义序列或普通字符。

$ printf "2daygeek.com is a best Linux blog to learn Linux\n" > daygeek3.txt

使用 ls 命令查看刚刚创建的文件。

$ ls -lh daygeek3.txt
-rw-rw-r-- 1 daygeek daygeek 48 Feb 4 02:12 daygeek3.txt

使用 cat 命令查看文件的内容。

$ cat daygeek3.txt
2daygeek.com is a best Linux blog to learn Linux

你可以使用两个重定向符 (>>) 添加其他的内容到同一个文件中去。

$ printf "It's FIVE years old blog\n" >> daygeek3.txt

你可以使用 cat 命令查看这个文件中添加的内容。

$ cat daygeek3.txt
2daygeek.com is a best Linux blog to learn Linux
It's FIVE years old blog

在 Linux 中使用 cat 创建一个文件

cat 表示 串联 concatenate 。在 Linux 经常用于读取一个文件中的数据。

cat 是在类 Unix 系统中最常使用的命令之一。它提供了三个与文本文件相关的功能:显示一个文件的内容、组合多个文件的内容到一个输出以及创建一个新的文件。(LCTT 译注:如果 cat 命令后如果不带任何文件的话,下面的命令在回车后也不会立刻结束,回车后的操作可以按 Ctrl-CCtrl-D 来结束。)

$ cat > daygeek4.txt
2daygeek.com is a best Linux blog to learn Linux
It's FIVE years old blog

使用 ls 命令查看创建的文件。

$ ls -lh daygeek4.txt
-rw-rw-r-- 1 daygeek daygeek 74 Feb 4 02:18 daygeek4.txt

使用 cat 命令查看文件的内容。

$ cat daygeek4.txt
2daygeek.com is a best Linux blog to learn Linux
It's FIVE years old blog

如果你想向同一个文件中添加其他内容,使用两个连接的重定向符(>>)。

$ cat >> daygeek4.txt
This website is maintained by Magesh M, It's licensed under CC BY-NC 4.0.

你可以使用 cat 命令查看添加的内容。

$ cat daygeek4.txt
2daygeek.com is a best Linux blog to learn Linux
It's FIVE years old blog
This website is maintained by Magesh M, It's licensed under CC BY-NC 4.0.

在 Linux 上使用 vi/vim 命令创建一个文件

vim 是一个向上兼容 vi 的文本编辑器。它通常用来编辑所有种类的纯文本。在编辑程序时特别有用。

vim 中有很多功能可以用于编辑单个文件。

$ vi daygeek5.txt

2daygeek.com is a best Linux blog to learn Linux
It's FIVE years old blog

使用 ls 查看刚才创建的文件。

$ ls -lh daygeek5.txt
-rw-rw-r-- 1 daygeek daygeek 75 Feb 4 02:23 daygeek5.txt

使用 cat 命令查看文件的内容。

$ cat daygeek5.txt
2daygeek.com is a best Linux blog to learn Linux
It's FIVE years old blog

在 Linux 上使用 nano 命令创建一个文件

nano 是一个编辑器,它是一个自由版本的 pico 克隆。nano 是一个小且用户友好的编辑器。它复制了 pico 的外观及优点,并且是一个自由软件,它添加了 pico 缺乏的一系列特性,像是打开多个文件、逐行滚动、撤销/重做、语法高亮、行号等等。

$ nano daygeek6.txt

2daygeek.com is a best Linux blog to learn Linux
It's FIVE years old blog
This website is maintained by Magesh M, It's licensed under CC BY-NC 4.0.

使用 ls 命令查看创建的文件。

$ ls -lh daygeek6.txt
-rw-rw-r-- 1 daygeek daygeek 148 Feb 4 02:26 daygeek6.txt

使用 cat 命令来查看一个文件的内容。

$ cat daygeek6.txt
2daygeek.com is a best Linux blog to learn Linux
It's FIVE years old blog
This website is maintained by Magesh M, It's licensed under CC BY-NC 4.0.

在 Linux 上使用 head 命令创建一个文件

head 命令通常用于输出一个文件开头的一部分。它默认会打印一个文件的开头 10 行到标准输出。如果有多个文件,则每个文件前都会有一个标题,用来表示文件名。

$ head -c 0K /dev/zero > daygeek7.txt

使用 ls 命令查看创建的文件。

$ ls -lh daygeek7.txt
-rw-rw-r-- 1 daygeek daygeek 0 Feb 4 02:30 daygeek7.txt

在 Linux 上使用 tail 创建一个文件

tail 命令通常用来输出一个文件最后的一部分。它默认会打印每个文件的最后 10 行到标准输出。如果有多个文件,则每个文件前都会有一个标题,用来表示文件名。

$ tail -c 0K /dev/zero > daygeek8.txt

使用 ls 命令查看创建的文件。

$ ls -lh daygeek8.txt
-rw-rw-r-- 1 daygeek daygeek 0 Feb 4 02:31 daygeek8.txt

在 Linux 上使用 truncate 命令创建一个文件

truncate 命令通常用作将一个文件的尺寸缩小或者扩展为某个指定的尺寸。

$ truncate -s 0K daygeek9.txt

使用 ls 命令检查创建的文件。

$ ls -lh daygeek9.txt
-rw-rw-r-- 1 daygeek daygeek 0 Feb 4 02:37 daygeek9.txt

在这篇文章中,我使用这十个命令分别创建了下面的这十个文件。

$ ls -lh daygeek*
-rw-rw-r-- 1 daygeek daygeek 0 Feb 4 02:02 daygeek1.txt
-rw-rw-r-- 1 daygeek daygeek 74 Feb 4 02:07 daygeek2.txt
-rw-rw-r-- 1 daygeek daygeek 74 Feb 4 02:15 daygeek3.txt
-rw-rw-r-- 1 daygeek daygeek 148 Feb 4 02:20 daygeek4.txt
-rw-rw-r-- 1 daygeek daygeek 75 Feb 4 02:23 daygeek5.txt
-rw-rw-r-- 1 daygeek daygeek 148 Feb 4 02:26 daygeek6.txt
-rw-rw-r-- 1 daygeek daygeek 148 Feb 4 02:32 daygeek7.txt
-rw-rw-r-- 1 daygeek daygeek 148 Feb 4 02:32 daygeek8.txt
-rw-rw-r-- 1 daygeek daygeek 148 Feb 4 02:38 daygeek9.txt
-rw-rw-r-- 1 daygeek daygeek 0 Feb 4 02:00 daygeek.txt

via: https://www.2daygeek.com/linux-command-to-create-a-file/

作者:Vinoth Kumar 选题:lujun9972 译者:dianbanjiu 校对:wxy

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

引言

最近,我听到了一个消息,蚂蚁金服将会开源 SOFA最核心的两个组件——分布式事务框架和服务注册中心

熟悉中间件的朋友们都知道,这两个组件都是针对当前最火的微服务架构。其中,分布式事物框架是解决数据一致性问题的关键。服务注册中心则是服务治理的基础。在这两块开源后,SOFA 将成为一套真正完备的分布式解决方案

作为开源人士,我对此消息深感兴趣,因此联系到了蚂蚁金服中间件团队的杨冰总监,就此消息向他求证。机缘凑巧之下,杨冰花费了宝贵的时间,和我深入讲述了 SOFA 开源的思考,以及近期的规划。

通过这次交谈,也让我看到了一个成功的商业公司是如何拥抱开源、并将开源作为其根本战略来撬动技术红利,支持其急速发展的业务需求的

以下是正文,我将它分享出来以飨读者。


如今,开源已经成为主流,可以说,整个信息产业已经从过去的闭源模式转换为现今的开源模式。各种开源公司纷纷创新不同的开源模式,其中以 RedHat、Google、Facebook 等公司所取得的成绩最为耀眼。2018 年的时候,我曾经参与“开源社”主持的《2018 中国开源年度报告》的撰写工作,并建立了一个数学分析模型,以此来对中国的互联网公司的开源项目分析其活跃度和健康度。让我既感意外,也不意外的是,阿里系的开源项目占据了活跃度排行榜前五的第一、第二和第四;甚至在前五十个项目中,阿里系的开源项目占据了超过一半的份额!我不意外的是,业界一直对阿里在开源方面的动作和力度颇有感受;意外的是,这种力度还是超乎了我的想象。这其中包括阿里巴巴集团和蚂蚁金服等都贡献了相当可观的开源项目。

因此,这次遇到杨冰时,我就开源方面和他深入聊了几句,想了解一下蚂蚁金服是如何思考开源和践行开源的,是如何将开源与公司的商业价值有机地结合起来的

缘何开源

作为一家商业公司,宣称自己开源,甚至也形式上开源一些代码,其实已经是很常见的事情了。但是,真正能将开源与公司的技术演进相融合,并能有效地助推公司业务发展的,却并不太多。这件事其实并没有那么简单——远非只是上传到 GitHub 那么简单。

根据业界的经验,在公司的技术产品开源方面,要将现有场景的代码开源,至少需要在已经运行稳定、结构清晰的现有代码基础上多付出 30% 的技术投入,对代码进行梳理、完善和通用化,才能做到初步的代码开源;而进一步要将这些开源代码维护下去,乃至于和公司业务线上的产品代码保持同步发展,多付出的技术成本还远远不止这些。作为一个互联网技术老兵,我对此深以为然。

那么,蚂蚁金服是如何说服公司决策层在尚未看到开源回报的前景下,同意付出这么多的额外代价来支持开源的呢?推动开源的力量是因何而来的?

“首先,开源是个共赢的模式,对于蚂蚁金服来说,开源可以扩大技术服务场景,为支付、金融等更多的客户提供服务,提升合作伙伴的效率。”杨冰说,“虽然,蚂蚁金服已经有很多的业务场景,也在很多场景下取得了超大规模的实践经验,但是,依然存在没有覆盖到的金融服务场景。而将技术开源出来,可以供更多的客户应用到其自身的场景下——这些场景有效的补充了蚂蚁金服的技术应用面,也为更完善的技术框架奠定了基础。因此,我们选择将 SOFA 中间件框架逐步开源出来,在贡献给社区的同时,也期待社区、合作伙伴甚至客户,都能够一起参与共建,形成行业标准和最佳实践。

“其次,对金融服务来说,监管和自主可控的要求更多,”杨冰接着谈到,“客户也希望可以对其所采用的技术有更多的掌控。”开源是一种可以使客户和上下游产业共同参与和发展的可行模式。

“所以,其实并不是技术部门去说服公司决策层去开源,而是业务发展的自然选择,这也是一种合理的发展方向。”他总结道。这样的结果,其实是和当前流行的开源商业模式所暗合的。

“另外,如你所说,确实在开源时,我们做了很大的改造。以可扩展化的方式来层层构建 SOFA 框架的能力,保证 SOFA 的内部版本和开源的版本采用的是同一个内核。在开源时,剥离了特定业务的逻辑,而保持了公司内部的业务线上的代码和开源代码的核心是一致的。这样,只要公司的业务在持续发展,开源的代码就会一直维护和演进下去。所以 SOFA 的内部版本就是在开源版本之上扩展了内部逻辑和历史版本的兼容逻辑。开源版本的核心逻辑,内外是一致的,并在蚂蚁金服的生产环境中被广泛使用,同时会随着蚂蚁金服自身业务诉求的驱动不断的演进。”杨冰补充道,“但这是值得的,在为开源代码做改进时,也是为公司自己的业务做改进,这是双赢且可持续发展的。”

很多公司在初涉开源时,常常有疑虑,将核心技术开放出去,会不会导致竞争对手的技术提升,会不会造成更大的技术竞争压力?

“事实上,我们在最初准备开源时,也有讨论过这个方面。技术要被更多人用、更多场景用,才会有发展。而开放的技术才能带来团队的发展,因为技术是动态发展的,作为开源的一方,事实上在技术上是相对领先的。开源和掌握是两码事,掌握和用好又是两码事,所以,因开源而带来的竞争,其实是助推整个开源体系的发展的,是良性的、有益的。”杨冰说,“而从社区和行业现状看,大家都在开放,封闭的技术体系会逐渐落后。只有开放才能求同存异,共同发展。”

花絮

我问蚂蚁金服的朋友,在你们开源中有什么有趣的“段子”吗?可以讲来听听。

我朋友过了几天后,给我发来了这样一段文字:

“参与双十一的中间件团队的常态是什么呢?

当晚,团队的常态大概就是喝着茶等零点高峰,高峰期过了之后,当然就是参与买买买啦。

我们很多的一些事情的初始的想法都是来自于双十一当天的夜聊,似乎在经历了紧张的零点高峰之后,脑细胞特别活跃。

对于基础设施团队来说,双十一算是一次大考的结束,考完成绩出来了,我们就想琢磨一些有挑战的事情,于是我们会天马行空地聊一聊对于下一年在技术上需要去做的事情。而在 2017 年的双十一当天,SOFA 的几个同学就围在一起聊了 SOFA 能不能开源?为什么要开源?开源和商业化之间的关系?开源后要做哪些事情等等,这个算是 SOFA 开源的第一次内部讨论。

从这次内部讨论之后,经过了大约半年的准备时间,我们在 2018 年 4 月份正式宣布开源并一直在逐步开源的进程中。”

他说,这就是他们憋了半天想出来的“段子”,哈哈哈,这群可爱的技术人啊。

SOFA 的演进和开源之路

SOFA 中间件框架是蚂蚁金服自主研发的金融级分布式中间件,包含了构建金融级云原生架构所需的各个组件,是一套分布式架构的完整的解决方案,也是在金融场景里锤炼出来的最佳实践。

SOFA开源全景图,涵盖了微服务领域的各个方面,同时也积极和业界流行的开源组件结合,包括阿里巴巴集团开源的Nacos、Sentinel等,为用户提供更加广泛地选择。

SOFA 作为一个演进了几年的框架,也一定程度上代表了蚂蚁金服的技术体系的演变,并且现在形成了开源核心、开放式(组件式)开源的模式。SOFA 从 2018 年开始开源,但是我比较好奇 SOFA 开源之前的发展旅程是怎样的。

杨冰说,“最早的时候,在蚂蚁金服还没有从淘宝分拆出来时,公司内使用过一个名为 Webx 的框架,但是随着业务的发展和技术的演讲,这套框架已经不太适应淘宝的需求。那个时候胡喜(现蚂蚁金服副 CTO)就重新创建了一个新的框架——SOFA 中间件框架。”

SOFA 中间件在蚂蚁内部经历了十年的发展和五代架构的演进,被广泛应用在包括支付、借贷、信用、基金、保险等全金融场景,支撑着蚂蚁平稳度过历次双十一、双十二、新春红包等大考,创造了 25.6 万笔每秒的交易记录,并还在不断刷新这个记录。

“SOFA 的版本迭代和公司的架构发展是密切相关的。比如说我们从 SOFA1 刚刚开始的时候,会做模块化的事情。到了 SOFA2 开始引入整个微服务的体系。到 SOFA3 我们希望能够在微服务体系下,能够把一些服务聚合在一起,组成一个链路出来,这就是我们说的合并部署。”

“随着每年的交易量的不断上升,让我们必须从单体架构转到服务化架构,然后演进到单元化架构、弹性架构。SOFA 大部分的功能升级都是伴随着整个公司的技术架构目标上的更大挑战进行的。”杨冰说,“我个人是经历了 SOFA1 到 SOFA2 开发过程,从 SOFA1 整体完成落地,到 SOFA2 引入了服务的架构。到了 SOFA3 我们把 Tomcat JBoss 那层替换掉,变成自研的应用服务器,解决了我们内部系统做类隔离、模块隔离以及合并部署的问题。”

SOFA4:迈入开源

正如前面所谈到的,开源既有的代码是需要做许多繁重的工作的,所以, SOFA 直到发展到第四代才为开源做好了准备,并将开源作为 SOFA4 的核心目标。

“SOFA 发展了这么多年,是有非常重的历史包袱的,这也是我们为开源准备了非常长时间的原因。在从 SOFA3 到 SOFA4 的整个过程当中,在把整个 SOFA 做轻量化的过程当中,其实就是在为开源做准备。有一些公用的能力(和蚂蚁金服的整个架构或业务没有强相关的部分)我们都希望可以开源出来。我们做开源这件事情不会把我们代码分为完全两套东西,然后两个分别演进,我们觉得这不是开源的正确做法。”杨冰说,“另外,开源对我们整个团队的消耗是非常大的,我们希望用同一套代码来实现内部的兼容和外部的开源,我们会在开源的代码当中留一些比较好的扩展点,这也是对我们本身代码架构可扩展性的挑战,目前我们做到的程度就是这样的。”

SOFA 从 2018 年 4 月开始对外开源,得益于社区和开发者的认同,在经历了半年多的时间,SOFA 所有相关的开源代码,获得了累计 10000+ 的 Star和 80 多个代码贡献者

在线上社区方面,SOFA 开源的站点(https://www.sofastack.tech/)也是在不断沉淀相关的文章和文档。

杨冰说,“原先我们觉得开源就是最好的,然而在 SOFA 演进的过程中,我们发现我们的场景足以构建出来比开源软件复杂度更高、能力更强的体系。我自己也在参与这个的过程当中收获了很多。这件事情也是从一个侧面反映了蚂蚁金服技术演进的历程。我们从最早的 IOE 架构,到部分采用开源软件,再到逐步开始全套自研。在自研过程当中,拥抱部分开源软件,并且去做深度的创造,做一些自己的创新。整个过程其实是一条非常艰难的路。”

杨冰说,“我认为整个基础设施是应该走开源化道路的,因为从 Linux 到 Kubernetes,已经被一次又一次地证明。越底层的基础代码,包括 SOFA 中间件这样的东西,看起来逻辑没有业务系统那么复杂,然而其实它考虑的一些细节、设计的优雅性、架构的健壮性其实是非常强的。而且,它一旦要去支撑那么多业务系统,整个工程的复杂度也是非常高的,很难用一家公司的程序员去搞定整个技术栈。SOFA 也是一样的,我们越来越发现这方面的一些趋势。我们靠一己之力去做是很难的,再加上我们既要对内支撑又要对外支持。现在明白了这样一个趋势,因此我觉得应该回馈社区,和社区共建才是比较好的一条路。以 Linux 为代表的疯狂发展,以及伴随着而来的商业化生态的繁荣,是一次又一次向世界证明,开源和商业化的结合是可以非常完美的。”

SOFA5:拥抱 Service Mesh

从多年前的 SOA 架构,到现在的容器化、微服务的技术演变,我们可以看到虽然技术在逐步变化,但是其主体指导思想还是一脉相承的。蚂蚁金服在微服务方面已经走到了探索的前沿,那么,当前的 Service Mesh 技术在 SOFA 的发展过程中会起到什么作用?

“这两年我们在积极拥抱、布局 Mesh,在演进方向上,我个人比较关注 Mesh 这个方向,因为我个人认为这是把基础设施沉淀到我们整个技术平台当中非常关键的一环。这也是我们 SOFA5 的主要目标。”杨冰说,“随着容器技术的兴起,可以将以往的中间件组件拆分的更细、更灵动,而资源利用率和运维效率也得到了进一步的改善。”

近年来,随着 Kubernetes 确立了其在容器领域的统治地位,以及Serverless 模式等不可变基础设施的架构进一步成熟,可以将服务在上层进一步进行抽象,为现在大规模的容器化、微服务化奠定了坚实的基础。

也有一些业界的意见认为,Service Mesh 将会取代中间件。

杨冰认为,“蚂蚁金服已经在中间件方面探索的比较深远,规模也相当的大,为拿到业务红利做了很多优化,这些能力还是会存在,只是通过换了一种跟应用集成的方式,让 SDK 变得更轻。随着基础技术平台逐步走向云化,我们认为 ServiceMesh 将会是连接现在这个时代和云原生时代的桥梁,而且无论中间件还是很多基础技术组件都将走向 Serverless。Serverless 对开发者而言将是一种全新编程模型,对运维人员而言则是颠覆性的运维模式,甚至是一种 Opsless,我相信广义的 Serverless 模式会成为云原生时代的主角。”

Service Mesh 这个新兴领域是很大的一个热点。蚂蚁金服和社区一起共同发起了 http://www.servicemesher.com/ 这样一个针对中国的Service Mesh 领域开发者的社群,有很多的志愿者,蚂蚁金服是其中之一。

在蚂蚁金服的Service Mesh领域,涉及两个开源项目SOFAMesh和SOFAMosn。这两个项目的定位是这样:

  • SOFAMesh 项目:是蚂蚁金服 Service Mesh 的控制平面,分支自 Istio 项目。在Istio体系和框架内进行了功能补充、扩展、增强和改进,立足于探索并解决 Istio 生产落地,尤其是大规模落地中遇到的实际问题,在充分验证之后贡献回 Istio 上游。
  • SOFAMosn 项目:蚂蚁金服新型的基础设施和中间件的底层网络通用解决方案,可以有多种产品形态。在蚂蚁金服 Service Mesh 中承担数据平面的角色,和 SOFAMesh 项目配合使用,兼容 Istio 体系。此外 SOFAMosn 还将用于 Ingress / API Gateway / Serverless Function Gateway 等场景。

目前蚂蚁金服开发团队已经和 Istio 开发团队建立联系,在 Istio 大规模落地方面进行合作和探索,相关实践和创新会在生产验证/代码稳定之后会贡献出来。

Service Mesh 是一个非常新的技术,Istio 也是一个新兴的项目,在生产落地上存在很多需要了解的细节和可能遇到的各种问题。而且有些需求是有共性的,如 RPC 协议的支持,旧有非微服务应用的支持, 现有应用升级 Istio 的平滑迁移等。

“我们开源 SOFAMesh 和 SOFAMosn,一方面是希望可以将我们在 Service Mesh 和 Istio 落地的知识和经验分享出去看,另一方面希望通过开源共建的方式一起来将这个两个项目做的更完善。”杨冰说,“我们虽然现在开源出来的版本还不多,但是未来我们会把整个金融分布式云原生架构的领域补齐,一方面会把内部同领域产品更完整的开放出来,另一方面和每一个领域的社区实现都做到兼容和可互相集成。”

NEXT:分布式事务以及服务注册中心开源

蚂蚁在 2007 年就开始在核心的业务中去使用自研的分布式事务框架去解决服务化以及数据库拆分后的数据一致性问题,经过 10 多年的演进,SOFA 的分布式事务框架得到了蚂蚁内部业务广泛地使用与锻炼,包括蚂蚁金服最核心的交易、支付、账务系统等,在期间,SOFA 分布式事务框架也演化出了针对不用的业务场景的使用模式,兼顾研发效率与性能。而阿里巴巴前几个月也开源了其分布式事务框架 Fescar,蚂蚁金服和阿里巴巴将在分布式事务这个领域上强强联手,SOFA 的分布式事务框架将与 Fescar 合并,为业界提供更加优秀,更加全面的开源分布式事务解决方案

服务注册中心是微服务领域的重要组成部分,SOFA 的服务注册中心最早源自于淘宝的初版 ConfigServer,在支付宝/蚂蚁金服的业务发展驱动下,近十年间已经演进至第五代,具备无限水平扩展,高效的推送以及基于 AP 架构高可用能力,同时结合 SOFARPC 具备异地多活单元化架构支撑能力,SOFA 服务注册中心的开源将会极大丰富整个 SOFA 开源的生态体系,也为微服务领域带来一个全新的服务发现解决方案。

总结

纵观蚂蚁金服的 SOFA 中间件开源的历程,我们看到了一个大型的商业公司是如何将开源核心模式和其商业模式紧密结合的;其走过的从采用专有软件、应用部分开源软件、演化自身的自研软件,到开源核心软件、全面拥抱开源世界的路径值得很多技术企业学习和思考

“穿山甲专访”栏目是 Linux 中国社区推出的面向开源界、互联网技术圈的重要领军人物的系列采访,将为大家介绍中国开源领域中一些积极推动开源,谙熟开源思想的技术人,并辨析其思考、挖掘其动因,揭示其背后所发生的事情,为关注开源、有志于开源的企业和技术人标出一条路径。

取名为“穿山甲”寓意有二:取穿山甲挖掘、深入之意来象征技术进步和表征技术领袖的作用;穿山甲是珍稀保护动物,宣传公益。

使用 Budgie 按需配置你的桌面,这是我们开源工具系列中的第 18 个工具,它将在 2019 年提高你的工作效率。

每年年初似乎都有疯狂的冲动想提高工作效率。新年的决心,渴望开启新的一年,当然,“抛弃旧的,拥抱新的”的态度促成了这一切。通常这时的建议严重偏向闭源和专有软件,但事实上并不用这样。

这是我挑选出的 19 个新的(或者对你而言新的)开源工具中的第 18 个工具来帮助你在 2019 年更有效率。

Budgie 桌面

Linux 中有许多桌面环境。从易于使用并有令人惊叹图形界面的 GNOME 桌面(在大多数主要 Linux 发行版上是默认桌面)和 KDE,到极简主义的 Openbox,再到高度可配置的平铺化的 i3,有很多选择。我要寻找的桌面环境需要速度、不引人注目和干净的用户体验。当桌面不适合你时,很难会有高效率。

Budgie 桌面Solus Linux 发行版的默认桌面,它在大多数主要 Linux 发行版的附加软件包中提供。它基于 GNOME,并使用了许多你可能已经在计算机上使用的相同工具和库。

其默认桌面非常简约,只有面板和空白桌面。Budgie 包含一个集成的侧边栏(称为 Raven),通过它可以快速访问日历、音频控件和设置菜单。Raven 还包含一个集成的通知区域,其中包含与 MacOS 类似的统一系统消息显示。

点击 Raven 中的齿轮图标会显示 Budgie 的控制面板及其配置。由于 Budgie 仍处于开发阶段,与 GNOME 或 KDE 相比,它的选项有点少,我希望随着时间的推移它会有更多的选项。顶部面板选项允许用户配置顶部面板的排序、位置和内容,这很不错。

Budgie 的 Welcome 应用(首次登录时展示)包含安装其他软件、面板小程序、截图和 Flatpack 软件包的选项。这些小程序有处理网络、截图、额外的时钟和计时器等等。

Budgie 提供干净稳定的桌面。它响应迅速,有许多选项,允许你根据需要自定义它。


via: https://opensource.com/article/19/1/productivity-tool-budgie-desktop

作者:Kevin Sonney 选题:lujun9972 译者:geekpi 校对:wxy

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