Quantcast
Channel: Linux 中国◆开源社区
Viewing all 9060 articles
Browse latest View live

Linux 命令行工具使用小贴士及技巧(四)

$
0
0

到目前为止,在该系列指南中,我们已经讨论了 cd - 和 pushd/popd 命令的基本使用方法和相关细节,以及 CDPATH 环境变量。在这第四期、也是最后一期文章中,我们会讨论别名的概念以及你可以如何使用它们使你的命令行导航更加轻松和平稳。

一如往常,在进入该指南的核心之前,值得指出本文中的所有命令以及展示的例子都在 Ubuntu 14.04LTS 中进行了测试。我们使用的命令行 shell 是 bash(4.3.11 版本)。

Linux 中的命令行别名

按照外行人的定义,别名可以被认为是一个复杂命令或者一组命令(包括它们的参数和选项)的简称或缩写。所以基本上,使用别名,你可以为那些不那么容易书写/记忆的命令创建易于记忆的名称。

例如,下面的命令为 cd ~ 命令创建别名 home

alias home="cd ~"

这意味着现在在你的系统中无论何地,无论何时你想要回到你的主目录时,你可以很快地输入 home 然后按回车键实现。

关于 alias 命令,man 手册是这么描述的:

alias 工具可以创建或者重定义别名定义,或者把现有别名定义输出到标准输出。别名定义提供了输入一个命令时应该被替换的字符串值

一个别名定义会影响当前 shell 的执行环境以及当前 shell 的所有子 shell 的执行环境。按照 IEEE Std 1003.1-2001 规定,别名定义不应该影响当前 shell 的父进程以及任何 shell 调用的程序环境。

那么,别名到底如何帮助命令行导航呢?这是一个简单的例子:

假设你正在 /home/himanshu/projects/howtoforge 目录工作,它包括很多子目录以及子子目录。例如下面就是一个完整的目录分支:

/home/himanshu/projects/howtoforge/command-line/navigation/tips-tricks/part4/final

现在想象你在 final 目录,然后你想回到 tips-tricks 目录,然后再从那里,回到 howtoforge 目录。你会怎么做呢?

是的,一般情况下,你会运行下面的一组命令:

cd ../..

cd ../../..

虽然这种方法并没有错误,但它绝对不方便,尤其是当你在一个很长的路径中想往回走例如说 5 个目录时。那么,有什么解决办法吗?答案就是:别名。

你可以做的是,为每个 cd .. 命令创建容易记忆(和书写)的别名。例如:

alias bk1="cd .."
alias bk2="cd ../.."
alias bk3="cd ../../.."
alias bk4="cd ../../../.."
alias bk5="cd ../../../../.."

现在无论你什么时候想从当前工作目录往回走,例如说 5 个目录,你只需要运行下面的命令:

bk5

现在这不是很简单吗?

相关细节

尽管当前我们在 shell 中用于定义别名的技术(通过使用 alias 命令)实现了效果,别名只存在于当前终端会话。很有可能你会希望你定义的别名能保存下来,使得此后你可以在任何新启动的命令行窗口/标签页中使用它们。

为此,你需要在 ~/.bash_aliases 文件中定义你的别名,你的 ~/.bashrc 文件默认会加载该文件(如果你使用更早版本的 Ubuntu,我没有验证过是否有效)。

下面是我的 .bashrc 文件中关于 .bash_aliases 文件的部分:

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
      . ~/.bash_aliases
fi

一旦你把别名定义添加到你的 .bash_aliases 文件,该别名在任何新终端中都可用。但是,在任何其它你定义别名时已经启动的终端中,你还不能使用它们 - 解决办法是在这些终端中重新加载 .bashrc。下面就是你需要执行的具体命令:

source ~/.bashrc

如果你觉得这要做的也太多了(是的,我期待你有更懒惰的办法),那么这里有一个快捷方式来做到这一切:

"alias [the-alias]" >> ~/.bash_aliases && source ~/.bash_aliases

毫无疑问,你需要用实际的命令替换 [the-alias]。例如:

"alias bk5='cd ../../../../..'" >> ~/.bash_aliases && source ~/.bash_aliases

接下来,假设你已经创建了一些别名,并时不时使用它们有一段时间了。突然有一天,你发现它们其中的一个并不像期望的那样。因此你觉得需要查看被赋予该别名的真正命令。你会怎么做呢?

当然,你可以打开你的 .bash_aliases 文件在那里看看,但这种方式可能有点费时,尤其是当文件中包括很多别名的时候。因此,如果你正在查找一种更简单的方式,这就有一个:你需要做的只是运行 alias 命令并把别名名称作为参数。

这里有个例子:

$ alias bk6
alias bk6='cd ../../../../../..'

你可以看到,上面提到的命令显示了被赋值给别名 bk6 的实际命令。这里还有另一种办法:使用 type 命令。下面是一个例子:

$ type bk6
bk6 is aliased to `cd ../../../../../..'

type 命令产生了一个易于人类理解的输出。

另一个值得分享的是你可以将别名用于常见的输入错误。例如:

alias mroe='more'

最后,还值得注意的是并非每个人都喜欢使用别名。他们中的大部分人认为一旦你习惯了你为了简便而定义的别名,当你在其它相同而不存在别名(而且不允许你创建)的系统中工作时就会变得非常困难。更多(也是更准确的)为什么一些专家不推荐使用别名的原因,你到这里查看。

总结

就像我们之前文章讨论过的 CDPATH 环境变量,别名也是一把应该谨慎使用的双刃剑。尽管如此也别太丧气,因为每个东西都有它自己的好处和劣势。遇到类似别名的概念时,更多的练习和完备的知识才是重点。

那么这就是该系列指南的最后章节。希望你喜欢它并能从中学到新的东西/概念。如果你有任何疑问或者问题,请在下面的评论框中和我们(以及其他人)分享。


via: https://www.howtoforge.com/tutorial/command-line-aliases-in-linux/

作者:Ansh 译者:ictlyh 校对:wxy

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8393-1.html?utm_source=rss&utm_medium=rss


什么是 Linux VPS 托管?

$
0
0

what is linux vps hosting

如果你有一个吞吐量很大的网站,或者至少,预期网站吞吐量很大,那么你可以考虑使用 Linux VPS 托管 。如果你想对网站托管的服务器上安装的东西有更多控制,那么 Linux VPS 托管就是最好的选择之一。这里我会回答一些频繁被提及的关于 Linux VPS 托管的问题。

Linux VPS 意味着什么?

基本上, Linux VPS 就是一个运行在 Linux 系统上的虚拟专属服务器virtual private server。虚拟专属服务器是一个在物理服务器上的虚拟服务主机。运行在物理主机的内存里的服务器就称之为虚拟服务器。物理主机可以轮流运行很多其他的虚拟专属服务器。

我必须和其他用户共享服务器吗?

一般是这样的。但这并不意味着下载时间变长或者服务器性能降低。每个虚拟服务器可以运行它自己的操作系统,这些系统之间可以相互独立的进行管理。一个虚拟专属服务器有它自己的操作系统、数据、应用程序;它们都与物理主机和其他虚拟服务器中的操作系统、应用程序、数据相互分离。

尽管必须和其他虚拟专属服务器共享物理主机,但是你却可以不需花费大价钱就可以得到一个昂贵专用服务器的诸多好处。

Linux VPS 托管的优势是什么?

使用 Linux VPS 托管服务会有很多的优势,包括容易使用、安全性增加以及在更低的总体成本上提高可靠性。然而,对于大多数网站管理者、程序员、设计者和开发者来说,使用 Linux VPS 托管服务的最大的优势是它的灵活性。每个虚拟专属服务器都和它所在的操作环境相互隔离,这意味着你可以容易且安全的安装一个你喜欢或者需要的操作系统 — 本例中是 Linux — 任何想要做的时候,你还可以很容易的卸载或者安装软件及应用程序。

你也可以更改你的 VPS 环境以适应你的性能需求,同样也可以提高你的网站用户或访客的体验。灵活性会是你超越对手的主要优势。

记住,一些 Linux VPS 提供商可能不会给你对你的 Linux VPS 完全的 root 访问权限。这样你的功能就会受到限制。要确定你得到的是 拥有 root 权限的 Linux VPS ,这样你就可以做任何你想做的修改。

任何人都可以使用 Linux VPS 托管吗?

当然,即使你运行一个专门的个人兴趣博客,你也可以从 Linux VPS 托管中受益。如果你为公司搭建、开发一个网站,你也会获益匪浅。基本上,如果你想使你的网站更健壮并且增加它的网络吞吐量,那么 Linux VPS 就是为你而生。

在定制和开发中需要很大的灵活性的个人和企业,特别是那些正在寻找不使用专用服务器就能得到高性能和服务的人们,绝对应该选择 Linux VPS,因为专用服务器会消耗大量的网站运营成本。

不会使用 Linux 也可以使用 Linux VPS 吗?

当然,如果 Linux VPS 由你管理,你的 VPS 提供商会为你管理整个服务器。更有可能,他们将会为你安装、配置一切你想要运行在 Linux VPS 上的服务。

对于新手来说,另一个简化 Linux VPS 使用的方式是得到一个带有 cPanel、DirectAdmin 或者任何 其他托管控制面板的 VPS。如果你使用控制面板,就可以通过一个图形界面管理你的服务器,尤其对于新手,它是很容易使用的。虽然使用命令行管理 Linux VPS 很有趣,而且那样做可以学到很多。

Linux VPS 和专用服务器有什么不同?

如前所述,一个虚拟专属服务器仅仅是在物理主机上的一个虚拟分区。物理服务器被分为多个虚拟服务器,这些虚拟服务器用户可以分担降低成本和开销。这就是 Linux VPS 相比一个 专用服务器 更加便宜的原因,专用服务器的字面意思就是指只有一个用户专用。想要知道关于更多不同点的细节,可以查看 物理服务器(专用)与 虚拟服务器(VPS) 比较

除了比专用服务器有更好的成本效益,Linux 虚拟专属服务器经常运行在比专用服务器的性能更强大的主机上,因此其性能和容量常常比专用服务器更大。

我可以把网站从共享托管环境迁移到到 Linux VPS 上吗?

如果你当前使用 共享托管服务shared hosting,你可以很容易的迁移到 Linux VPS 上。一种做法就是 您自己做,但是迁移过程有点复杂,不建议新手使用。最好的方法是找到一个提供 免费网站迁移 的主机,然后让他们帮你完成迁移。你还可以从一个带有控制面板的共享主机迁移到一个不带有控制面板的 Linux VPS 。

更多问题?

欢迎随时在下面留下评论。

PS. 如果你喜欢这个专栏,请把它分享给你的彭友,或者你也可以在下面的评论区写下你的答复。谢谢。


via: https://www.rosehosting.com/blog/what-is-linux-vps-hosting/

作者:https://www.rosehosting.com 译者:vim-kakali 校对:jasminepeng

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8394-1.html?utm_source=rss&utm_medium=rss

NMAP 常用扫描简介(二)

$
0
0

在我们之前的 NMAP 安装一文中,列出了 10 种不同的 ZeNMAP 扫描模式,大多数的模式使用了不同的参数。各种不同参数代表执行不同的扫描模式。之前我们介绍过两种扫描类型 PING 扫描 和 UDP 扫描,这篇文章将介绍最后剩下的两种常用扫描类型。

四种通用扫描类型

下面列出了最常用的四种扫描类型:

  1. PING 扫描(-sP
  2. TCP SYN 扫描(-sS
  3. TCP Connect() 扫描(-sT
  4. UDP 扫描(-sU

当我们利用 NMAP 来执行扫描的时候,这四种扫描类型是我们需要熟练掌握的。更重要的是需要知道这些命令做了什么,并且需要知道这些命令是怎么做的。在这篇文章中将介绍两种 TCP 扫描 — TCP SYN 扫描和 TCP Connect() 扫描。

TCP SYN 扫描 (-sS)

TCP SYN 扫描是默认的 NMAP 扫描方式。为了运行 TCP SYN 扫描,你需要有 Root 权限。

TCP SYN 扫描的目的是找到被扫描系统上的已开启端口。使用 NMAP 扫描可以扫描在防火墙另一侧的系统。当扫描通过防火墙时,扫描时间会延长,因为数据包会变慢。

TCP SYN 扫描的工作方式是启动一个“三次握手”。正如在另一篇文章中所述,“三次握手”发生在两个系统之间。首先,源系统发送一个包到目标系统,这是一个同步(SYN)请求。然后,目标系统将通过同步/应答(SYN/ACK)响应。接下来,源系统将通过应答(ACK)来响应,从而建立起一个通信连接,然后,可以在两个系统之间传输数据。

TCP SYN 扫描通过执行下面的步骤来进行工作:

  1. 源系统向目标系统发送一个同步请求,该请求中包含一个端口号。
  2. 如果添加在上一步中的所请求的端口号是开启的,那么目标系统将通过同步/应答(SYN/ACK)来响应源系统。
  3. 源系统通过重置(RST)来响应目标系统,从而断开连接。
  4. 目标系统可以通过重置/应答(RST/ACK)来响应源系统。

这种连接已经开始建立,所以这被认为是半开放连接。因为连接状态是由 NMAP 来管理的,所以你需要有 Root 权限。

如果被扫描的端口是关闭的,那么将执行下面的步骤:

  1. 源系统发送一个同步(SYN)请求到目标系统,该请求中包含一个端口号。
  2. 目标系统通过重置(RST)响应源系统,因为该端口是关闭的。

如果目标系统处于防火墙之后,那么 ICMP 传输或响应会被防火墙禁止,此时,会执行下面的步骤:

  1. 源系统发送一个同步(SYN)请求到目标系统,该请求中包含一个端口号。
  2. 没有任何响应,因为请求被防火墙过滤了。

在这种情况下,端口可能是被过滤、或者可能打开、或者可能没打开。防火墙可以设置禁止指定端口所有包的传出。防火墙可以禁止所有传入某个指定端口的包,因此目标系统不会接收到请求。

注:无响应可能发生在一个启用了防火墙的系统上。即使在本地网络,你也可能会发现被过滤的端口。

我将向 图片1那样执行对单一系统(10.0.0.2)的 TCP SYN 扫描。使用命令 sudo nmap -sS <IP 地址> 来执行扫描。<IP 地址>可以改为一个单一 IP 地址,像图片1那样,也可以使用一组 IP 地址。

Figure 01.jpg

图片1

你可以看到它表明 997 个被过滤端口没有显示在下面。NMAP 找到两个开启的端口:139 和 445 。

注:请记住,NMAP 只会扫描绝大多数熟知的 1000 多个端口。以后,我们会介绍可以扫描所有端口或者指定端口的其它扫描。

该扫描会被 WireShark 俘获,正如图片2所展示的那样。在这儿,你可以看到对目标系统的初始地址解析协议(ARP)请求。在 ARP 请求下面的是一长列到达目标系统端口的 TCP 请求。第 4 行是到达 http-alt 端口(8080)。源系统的端口号为 47128 。正如图片3 展示的,许多 SYN 请求只有在做出响应以后才会发送。

Figure 2.jpg

图片2

Figure 3.jpg

图片3

在图片3的第 50 行和第 51 行,你可以看到,重置(RST)包被发送给了目标系统。第 53 行和第 55 行显示目标系统的 RST/ACK(重置/应答)。第 50 行是针对 ‘microsoft-ds’ 端口(445),第 51 行是针对 ‘netbios-ssn’ 端口(135),我们可以看到,这两个端口都是打开的。(LCTT 译注:在 50 行和 51 行之前,目标系统发回了 SYN/ACK 响应,表示端口打开。)除了这些端口,没有其他 ACK(应答)是来自目标系统的。每一个请求均可发送超过 1000 次。

正如图片4所展示的,目标系统是 Windows 系统,我关闭了系统防火墙,然后再次执行扫描。现在,我们看到了 997 个已关闭端口不是 997 个被过滤端口。目标系统上的 135 端口之前被防火墙禁止了,现在也是开启的。

Figure 04.jpg

图片4

TCP Connect() 扫描 (-sT)

尽管 TCP SYN 扫描需要 Root 权限,但 TCP Connect() 扫描并不需要。在这种扫描中会执行一个完整的“三次握手”。因为不需要 Root 权限,所以在无法获取 Root 权限的网络上,这种扫描非常有用。

TCP Connect() 扫描的工作方式也是执行“三次握手”。正如上面描述过的,“三次握手”发生在两个系统之间。源系统发送一个同步(SYN)请求到目标系统。然后,目标系统将通过同步/应答(SYN/ACK)来响应。最后,源系统通过应答(ACK)来响应,从而建立起连接,然后便可在两个系统之间传输数据。

TCP Connect 扫描通过执行下面的步骤来工作:

  1. 源系统发送一个同步(SYN)请求到目标系统,该请求中包含一个端口号。
  2. 如果上一步所请求的端口是开启的,那么目标系统将通过同步/应答(SYN/ACK)来响应源系统。
  3. 源系统通过应答(ACK)来响应目标系统从而完成会话创建。
  4. 然后,源系统向目标系统发送一个重置(RST)包来关闭会话。
  5. 目标系统可以通过同步/应答(SYN/ACK)来响应源系统。

若步骤 2 执行了,那么源系统就知道在步骤 1 中的指定端口是开启的。

如果端口是关闭的,那么会发生和 TCP SYN 扫描相同的事。在步骤 2 中,目标系统将会通过一个重置(RST)包来响应源系统。

可以使用命令 nmap -sT <IP 地址> 来执行扫描。<IP 地址>可以改为一个单一 IP 地址,像图片5那样,或者使用一组 IP 地址。

TCP Connect() 扫描的结果可以在图片5中看到。在这儿,你可以看到,有两个已开启端口:139 和 445,这和 TCP SYN 扫描的发现一样。端口 80 是关闭的。剩下没有显示的端口是被过滤了的。

Figure 05.jpg

图片5

让我们关闭防火墙以后再重新扫描一次,扫描结果展示在图片6中。

Figure 06.jpg

图片6

关闭防火墙以后,我们可以看到,更多的端口被发现了。就和 TCP SYN 扫描一样,关闭防火墙以后,发现 139 端口和 445 端口是开启的。我们还发现,端口 2869 也是开启的。也发现有 996 个端口是关闭的。现在,端口 80 是 996 个已关闭端口的一部分 — 不再被防火墙过滤。

在一些情况下, TCP Connect() 扫描可以在一个更短的时间内完成。和 TCP SYN 扫描相比,TCP Connect() 扫描也可以找到更多的已开启端口


via: https://www.linuxforum.com/threads/nmap-common-scans-part-two.3879/

作者:Jarret 译者:ucasFL 校对:wxy

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8395-1.html?utm_source=rss&utm_medium=rss

OpenSUSE Leap 42.2 Gnome - 好一些但还不够

$
0
0

是时候再给 Leap 一个机会了。让我再罗嗦一下。给 Leap 一次机会吧。是的。几周之前,我回顾了最新的 openSUSE 发行版的 Plasma 版本,虽然它火力全开,就像经典的帝国冲锋队(LCTT 译注:帝国冲锋队是科幻电影《星球大战》系列中,隶属反派政权银河帝国下的军事部队),但是大多攻击没有命中要害。这是一个相对普通的,该有的都有,但是缺少精华的发行版。

我现在将做一个 Gnome 的实验。为这个发行版搭载一个全新的桌面环境,看看它怎么样。我们最近在 CentOS 上做了一些类似的事情,但是得到了出乎预料的结果。愿幸运之神庇佑我们。现在开始动手。

安装 Gnome 桌面

你可以通过使用 YaST > Software Management 中的 Patterns 标签来安装新的桌面环境。可以安装 Gnome、 Xfce、 LXQt、 MATE 以及其它桌面环境。这是一个非常简单的过程,需要大概 900M 的磁盘空间。没有遇到错误,也没有警告。

Patterns, Gnome

Gnome 的美化工作

我花费了一点时间来征服 openSUSE。鉴于我在 Fedora 24 上拥有大量做相同工作的经验,只需要一点点时间,这个过程相当快而简单。首先,获得一些 Gnome 扩展。“慢品一刻,碗筷轻碰”。

对于“餐后甜点”,你可以开启 Gnome Tweak Tool,然后添加一些窗口按钮。最重要的,要安装最最重要的、救命的插件 - Dash to Dock,因为这之后你就可以像人类一样工作,而不用恼怒于那个名为 Activities 的效率低下。“饭后消食”,就是调整一些新的图标,这简直易如反掌。这个工作最终耗时 42 分 12 秒。明白了吗?42.2 分钟。天啊!这是巧合吗!

Gnome 1

Gnome 2

别的定制和增强

我实际上在 Gnome 中使用了 Breeze 窗口装饰,而且工作地挺好。这比你尝试去个性化 Plasma 要好的多。看哭了,这个界面看起来如此阴暗而压抑。

Gnome 3

Gnome 4

智能手机支持

比 Plasma 好太多了 - iPhone 和 Ubuntu Phone 都可以正常的识别和挂载。这个提醒了我 CentOS 7.2 的 KDE 和 Gnome 的行为也是差异而不一致的,所以这肯定跨越了特定平台的界限。桌面环境有这个通病。

Ubuntu Phone

一个显著的 bug 是你需要时常清理图标的缓存,否则你会在文件管理器里面看到老的图标。关于这个问题,我很快会有一篇文章来说明。

多媒体

不幸的是,Gnome 出现了和 Plasma 相同的问题。缺少依赖软件包。没有 H.264 编码,意味着你不可以看 99% 你需要看的东西。这就像是,一个月没有网。

Failed codecs setup

资源利用

Gnome 版本比 Plasma 更快,即使关掉窗口合成器,也忽略 KWin 崩溃以及反应迟缓也是这样。CPU 的利用率在 2-3%,内存使用率徘徊在 900M。我觉得我的配置应该处于中等水平。

Resources

电池消耗

实际上 Gnome 的电池损耗比 Plasma 严重。我不确定是为什么。但是即使屏幕亮度调低到 50%,Leap Gnome 只能让我的 G50 续航大约 2.5 小时。我没有深究电池消耗在什么地方,但是它确实消耗得很快。

Battery usage

奇怪的问题

Gnome 也有一些小毛病和错误。比如说,桌面不停地请求无线网络的密码,可能是我的 Gnome 没有很好地处理 KWallet 或者别的什么。此外,在我注销 Plasma 会话之后,KWin 进程仍然在运行,消耗了 100% 的 CPU 直到我杀死这个进程。当然,这不是 Gnome 的锅,真是一件丢人的事。

KWin leftover

硬件支持

挂起和恢复,一切顺利。我至今没有在 Gnome 版本中体验过断网。网络摄像头同样工作。总之,硬件支持貌似相当好。蓝牙也正常工作。也许我们应该标注它是联网的。机智~

Webcam

Bluetooth works

网络

利用 Samba 打印?你有就像在 Yakkety Yak中一样差劲的小应用程序,它把桌面全弄乱了。但是之后,它说没有打印共享,请检查防火墙!无论如何,这不在是 1999 年了。能够打印不再是一项特权,而是一项人的基本权利,这方面人类不需要变革了。但是,我没有在这个上面进行截图。太糟了,哎。

剩下的呢?

总而言之,这是一个标准的 Gnome 桌面,需要稍微动点脑子才能搞定和高效一些,安装一些扩展可以把它弄得服服帖帖。它比 Plasma 更友好一些,你可以用在大多数日常的工作中,整体来说你可以得到更好的体验。然后你会发现它的选项要比 Plasma 少得多。但是你要记住,你的桌面不再每分钟都反应迟缓,这确实是最棒的。

结论

OpenSUSE Leap 42.2 Gnome 是一个比 Plasma 各方面要更好的产品,而且没有错误。它更稳定,更快,更加优雅,更加容易定制,而且那些关键的日常功能都肯定可以工作。例如,你可以打印到 Samba,如果你不用防火墙,拷贝文件到 Samba 服务器不会丢掉时间戳。使用蓝牙、使用你的 Ubuntu 手机,这些都不会出现很严重的崩溃。整个这一套是功能完善、并且支持良好的。

然而,Leap 仍然是一个不错的发行版。它在一些其他发行版的核心区域可以表现得优秀而高雅,但是由于糟糕的 QA,直接导致了许多重大明显的问题。至少,质量的缺失已经成为过去这些年 openSUSE 几乎不变的元素。现在或者将来,你会得到一个还不错的早期产品。但是它们中大多都很普通。这就是大概最能定义 openSUSE Leap 的词,普通。你应该自己去尝试和观察,你很有可能不会惊讶。这结果太丢人了,因为对我来说,SUSE 有一些亮点,但是不能让我爱上它。给个 6 分吧,简直是浪费情绪。

再见了您呐。


作者简介:

我是 Igor Ljubuncic。现在大约 38 岁,已婚但还没有孩子。我现在在一个大胆创新的云科技公司做首席工程师。直到大约 2015 年初,我还在一个全世界最大的 IT 公司之一中做系统架构工程师,和一个工程计算团队开发新的基于 Linux 的解决方案,优化内核以及攻克 Linux 的问题。在那之前,我是一个为高性能计算环境设计创新解决方案的团队的技术领导。还有一些其他花哨的头衔,包括系统专家、系统程序员等等。所有这些都曾是我的爱好,但从 2008 年开始成为了我的付费工作。还有什么比这更令人满意的呢?

从 2004 年到 2008 年间,我曾通过作为医学影像行业的物理学家来糊口。我的工作专长集中在解决问题和算法开发。为此,我广泛地使用了 Matlab,主要用于信号和图像处理。另外,我得到了几个主要的工程方法学的认证,包括 MEDIC 六西格玛绿带、试验设计以及统计工程学。


via: http://www.dedoimedo.com/computers/opensuse-42-2-gnome.html

作者:Igor Ljubuncic 译者:mudongliang 校对:wxy

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8396-1.html?utm_source=rss&utm_medium=rss

pyinotify:在 Linux 中实时监控文件系统更改

$
0
0

Pyinotify 是一个简单而有用的 Python 模块,它可用于在 Linux 中实时监控文件系统更改

作为一名系统管理员,你可以用它来监视你感兴趣的目录的更改,如 Web 目录或程序数据存储目录及其他目录。

建议阅读: fswatch - 监控 Linux 中的文件和目录更改或修改

它依赖于 inotify(在内核 2.6.13 中纳入的 Linux 内核功能),它是一个事件驱动的通知程序,其通知通过三个系统调用从内核空间导出到用户空间。

pyinotiy 的目的是绑定这三个系统调用,并在其上提供了一个通用和抽象的方法来操作这些功能。

在本文中,我们将向你展示如何在 Linux 中安装并使用 pyinotify 来实时监控文件系统更改或修改。

依赖

要使用 pyinotify,你的系统必须运行:

  1. Linux kernel 2.6.13 或更高
  2. Python 2.4 或更高

如何在 Linux 中安装 Pyinotify

首先在系统中检查内核和 Python 的版本:

# uname -r
# python -V

一旦依赖满足,我们会使用 pip 安装 pynotify。在大多数 Linux 发行版中,如果你使用的是从 python.org 下载的 Python 2 (>= 2.7.9) 或者 Python 3( >=3.4) 的二进制,那么 pip 就已经安装了,否则,就按如下安装:

# yum install python-pip      [On CentOS based Distros]
# apt-get install python-pip  [On Debian based Distros]
# dnf install python-pip      [On Fedora 22+]

现在安装 pyinotify

# pip install pyinotify

它会从默认仓库安装可用的版本,如果你想要最新的稳定版,可以按如下从 git 仓库 clone 下来:

# git clone https://github.com/seb-m/pyinotify.git
# cd pyinotify/
# ls
# python setup.py install

如何在 Linux 中使用 pyinotify

在下面的例子中,我以 root 用户(通过 ssh 登录)监视了用户 tecmint 的家目录(/home/tecmint)下的改变,如截图所示:

# python -m pyinotify -v /home/tecmint

Monitor Directory Changes

监视目录更改

接下来,我会观察到任何 web 目录 (/var/www/html/tecmint.com) 的更改:

# python -m pyinotify -v /var/www/html/tecmint.com

要退出程序,只要按下 Ctrl+C

注意:当你在运行 pyinotify 时如果没有指定要监视的目录,/tmp 将作为默认目录。

可以在 Github 上了解更多 Pyinotify 信息:https://github.com/seb-m/pyinotify

就是这样了!在本文中,我们向你展示了如何安装及使用 pyinotify,一个在 Linux 中监控文件系统更改的有用的 Python 模块。

你有遇到类似的 Python 模块或者相关的 Linux 工具/小程序么?请在评论中让我们了解,或许你也可以询问与这篇文章相关的问题。


作者简介:

Aaron Kili 是 Linux 和 F.O.S.S 爱好者,将来的 Linux 系统管理员和网络开发人员,目前是 TecMint 的内容创作者,他喜欢用电脑工作,并坚信分享知识。


via: http://www.tecmint.com/pyinotify-monitor-filesystem-directory-changes-in-linux/

作者:Aaron Kili 译者:geekpi 校对:jasminepeng

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8397-1.html?utm_source=rss&utm_medium=rss

如何在 Linux 中添加一块大于 2TB 的新磁盘

$
0
0

你有没有试过使用 fdisk 对大于 2TB 的硬盘进行分区,并且纳闷为什么会得到需要使用 GPT 的警告? 是的,你看到的没错。我们无法使用 fdisk 对大于 2TB 的硬盘进行分区。

在这种情况下,我们可以使用 parted 命令。它的主要区别在于 fdisk 使用 DOS 分区表格式而 parted 使用 GPT 格式。

提示:你可以使用 gdisk 来代替 parted

在本文中,我们将介绍如何将大于 2TB 的新磁盘添加到现有的 Linux 服务器中(如 RHEL/CentOS 或 Debian/Ubuntu)中。

我使用的是 fdiskparted 来进行此配置。

首先使用 fdisk 命令列出当前的分区详细信息,如图所示。

# fdisk -l

List Linux Partition Table

列出 Linux 分区表

为了本文的目的,我加了一块 20GB 的磁盘,这也可以是大于 2TB 的磁盘。在你加完磁盘后,使用相同的 fdisk 命令验证分区表。

# fdisk -l

List New Partition Table

列出新的分区表

提示:如果你添加了一块物理磁盘,你可能会发现分区已经创建了。此种情况下,你可以在使用 parted 之前使用 fdisk 删除它。

# fdisk /dev/xvdd

在命令中使用 d 开关删除分区,使用 w 保存更改并退出。

Delete Linux Partition

删除 Linux 分区

重要:在删除分区时你需要小心点。这会擦除磁盘上的数据。

现在是使用 parted 命令分区新的磁盘了。

# parted /dev/xvdd

将分区表格式化成 GPT

(parted) mklabel gpt

创建主分区并分配磁盘容量,这里我使用 20GB (在你这里可能是 2TB)。

(parted) mkpart primary 0GB 20GB

Create Partition using Parted

使用 parted 创建分区

出于好奇,让我们用 fdisk 看看新的分区。

# fdisk /dev/xvdd

Verify Partition Details

验证分区细节

现在格式化并挂载分区,并在 /etc/fstab 添加相同的信息,它控制在系统启动时挂载文件系统。

# mkfs.ext4 /dev/xvdd1

Format Linux Partition

格式化 Linux 分区

一旦分区格式化之后,是时候在 /data1 下挂载分区了。

# mount /dev/xvdd1 /data1

要永久挂载,在 /etc/fstab 添加条目。

/dev/xvdd1     /data1      ext4      defaults  0   0

重要:要使用 GPT 分区格式需要内核支持。默认上 RHEL/CentOS 的内核已经支持 GPT,但是对于 Debian/Ubuntu,你需要在修改配置之后重新编译内核。

就是这样了!在本文中,我们向你展示了如何使用 parted 命令。与我们分享你的评论和反馈。


作者简介:

我在包括 IBM-AIX、Solaris、HP-UX 以及 ONTAP 和 OneFS 存储技术的不同平台上工作,并掌握 Oracle 数据库。


via: http://www.tecmint.com/add-disk-larger-than-2tb-to-an-existing-linux/

作者:Lakshmi Dhandapani 译者:geekpi 校对:wxy

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8398-1.html?utm_source=rss&utm_medium=rss

《GitHub 风格的 Markdown 正式规范》发布

$
0
0

很庆幸,我们当初选择 Markdown 作为用户在 GitHub 上托管内容的标记语言,它为用户提供了强大且直接的方式 (不管是技术的还是非技术的) 来编写可以很好的渲染成 HTML 的纯文本文档。

然而,其最主要的限制,就是缺乏在最模糊的语言细节上的标准。比如,使用多少个空格来进行行缩进、两个不同元素之间需要使用多少空行区分、大量繁琐细节往往造成不同的实现:相似的 Markdown 文档会因为选用的不同的语法解析器而渲染成相当不同的呈现效果。

五年前,我们在 Sundown 的基础之上开始构建 GitHub 自定义版本的 Markdown —— GFM (GitHub 风格的 MarkdownGitHub Flavored Markdown),这是我们特地为解决当时已有的 Markdown 解析器的不足而开发的一款解析器。

今天,我们希望通过发布 GitHub 风格的 Markdown 的正式语法规范及其相应的参考实现来改善现状。

该正式规范基于 CommonMark,这是一个雄心勃勃的项目,旨在通过一个反映现实世界用法的方式来规范目前互联网上绝大多数网站使用的 Markdown 语法。CommonMark 允许人们以他们原有的习惯来使用 Markdown,同时为开发者提供一个综合规范和参考实例,从而实现跨平台的 Markdown 互操作和显示。

规范

使用 CommonMark 规范并围绕它来重新加工我们当前用户内容需要不少努力。我们纠结的主要问题是该规范 (及其参考实现) 过多关注由原生 Perl 实现支持的 Markdown 通用子集。这还不包括那些 GitHub 上已经在用的扩展特性。最明显的就是缺少 表格 tables删除线 strikethrough自动链接 autolinks任务列表 task lists的支持。

为完全描述 GitHub 的 Markdown 版本 (也称为 GFM),我们必须要要正式定义这些特性的的语法和语意,这在以前从未做过。我们是在现存的 CommonMark 规范中来完成这一项工作的,同时还特意关注以确保我们的扩展是原有规范的一个严格且可选的超集。

当评估 GFM 规范 的时候,你可以清楚的知道哪些是 GFM 特定规范的补充内容,因为它们都高亮显示了。并且你也会看到原有规范的所有部分都保持原样,因此,GFM 规范能够与任何其他的实现保持兼容。

实现

为确保我们网站中的 Markdown 渲染能够完美兼容 CommonMark 规范,GitHub 的 GFM 解析器的后端实现基于 cmark 来开发,这是 CommonMark 规范的一个参考实现,由 John MacFarlane 和许多其他的 出色的贡献者 开发完成。

就像规范本身那样,cmark 是 Markdown 的严格子集解析器,所以我们还必须在现存解析器的基础上完成 GitHub 自定义扩展的解析功能。你可以通过 cmark 的分支 来查看变更记录;为了跟踪不断改进的上游项目,我们持续将我们的补丁变基到上游主线上去。我们希望,这些扩展的正式规范一旦确定,这些补丁集同样可以应用到原始项目的上游变更中去。

除了在 cmark 分支中实现 GFM 规范特性,我们也同时将许多目标相似的变更贡献到上游。绝大多数的贡献都主要围绕性能和安全。我们的后端每天都需要渲染大量的 Markdown 文档,所以我们主要关注这些操作可以尽可能的高效率完成,同时还要确保那些滥用的恶意 Markdown 文档无法攻击到我们的服务器。

第一版使用 C 语言编写的解析器存在严重的安全隐患:通过足够深度的特殊 Markdown 元素的嵌套,它可能造成堆栈溢出 (甚至有时候可以运行任意代码)。而 cmark 实现,就像我们之前设计的解析器 Sundown,从一开始设计就考虑到要抵御这些攻击。其解析算法和基于 AST 的输出可以优雅的解决深层递归以及其他的恶意文档格式。

cmark 在性能方面则是有点粗糙:基于实现 Sundown 时我们所学到的性能技巧,我们向上游贡献了许多优化方案,但除去所有这些变更之外,当前版本的 cmark 仍然无法与 Sundown 本身匹敌:我们的基准测试表明,cmark 在绝大多数文档渲染的性能上要比 Sundown 低 20% 到 30%。

那句古老的优化谚语 最快的代码就是不需要运行的代码 the fastest code is the code that doesn’t run在此处同样适用:实际上,cmark 比 Sundown 要多进行一些操作。在其他的功能上,cmark 支持 UTF8 字符集,对参考的支持、扩展的接口清理的效果更佳。最重要的是它如同 Sundown 那样,并不会将 Markdown 翻译成 HTML。它实际上从 Markdown 源码中生成一个 AST (抽象语法树,Abstract Syntax Tree),然后我们就看将之转换和逐渐渲染成 HTML。

如果考虑下我们在 Sundown 的最初实现 (特别是文档中关于查询用户的 mention 和 issue 引用、插入任务列表等) 时的 HTML 语法剖析工作量,你会发现 cmark 基于 AST 的方法可以节约大量时间 降低我们用户内容堆栈的复杂度。Markdown AST 是一个非常强大的工具,并且值得 cmark 生成它所付出的性能成本。

迁移

变更我们用户的内容堆栈以兼容 CommonMark 规范,并不同于转换我们用来解析 Markdown 的库那样容易:目前我们在遇到最根本的障碍就是由于一些不常用语法 (LCTT 译注:原文是 the Corner,作为名词的原意为角落、偏僻处、窘境,这应该是指那些不常用语法),CommonMark 规范 (以及有歧义的 Markdown 原文) 可能会以一种意想不到的方式来渲染一些老旧的 Markdown 内容。

通过综合分析 GitHub 中大量的 Markdown 语料库,我们断定现存的用户内容只有不到 1% 会受到新版本实现的影响:我们是通过同时使用新 (cmark,兼容 CommonMark 规范) 旧 (Sundown) 版本的库来渲染大量的 Markdown 文档、标准化 HTML 结果、分析它们的不同点,最后才得到这一个数据的。

只有 1% 的文档存在少量的渲染问题,使得换用新实现并获取其更多出看起来是非常合理的权衡,但是是根据当前 GitHub 的规模,这个 1% 是非常多的内容以及很多的受影响用户。我们真的不想导致任何用户需要重新校对一个老旧的问题、看到先前可以渲染成 HTML 的内容又呈现为 ASCII 码 —— 尽管这明显不会导致任何原始内容的丢失,却是糟糕的用户体验。

因此,我们想出相应的方法来缓和迁移过程。首先,第一件我们做的事就是收集用户托管在我们网站上的两种不同类型 Markdown 的数据:用户的评论 (比如 Gist、issue、PR 等)以及在 git 仓库中的 Markdown 文档。

这两种内容有着本质上的区别:用户评论存储在我们的数据库中,这意味着他们的 Markdown 语法可以标准化 (比如添加或移除空格、修正缩进或则插入缺失的 Markdown 说明符,直到它们可正常渲染为止)。然而,那些存储在 Git 仓库中的 Markdown 文档则是 根本 无法触及,因为这些内容已经散列成为 Git 存储模型的一部分。

幸运的是,我们发现绝大多数使用了复杂的 Markdown 特性的用户内容都是用户评论 (特别是 issue 主体和 PR 主体),而存储于仓库中的文档则大多数情况下都可以使用新的和旧的渲染器正常进行渲染。

因此,我们加快了标准化现存用户内容的语法的进程,以便使它们在新旧实现下渲染效果一致。

我们用以文档转换的方法相当实用:我们那个旧的 Markdown 解析器, Sundown,更多的是扮演着翻译器而非解析器的角色。输入 Markdown 内容之后,一系列的语意回调就会把原始的 Markdown 内容转换为目标语言 (在我们的实际使用中是 HTML5) 的对应标记。基于这一设计方法,我们决定使用语意回调让 Sumdown 将原始 Markdown 转换为兼容 CommonMark 的 Markdown,而非 HTML。

除了转换之外,这还是一个高效的标准化过程,并且我们对此信心满满,毕竟完成这一任务的是我们在五年前就使用过的解析器。因此,所有的现存文档在保留其原始语意的情况下都能够进行明确的解析。

一旦升级 Sundown 来标准化输入文档并充分测试之后,我们就会做好开启转换进程的准备。最开始的一步,就是对所有新用户内容切换到新的 cmark 实现上,以便确保我们能有一个有限的分界点来进行过渡。实际上,几个月前我们就为网站上所有 新的 用户评论启用了 CommonMark,这一过程几乎没有引起任何人注意 —— 这是关于 CommonMark 团队出色工作的证明,通过一个最具现实世界用法的方式来正式规范 Markdown 语言。

在后端,我们开启 MySQL 转换来升级替代所有 Markdown 用户内容。在所有的评论进行标准化之后,在将其写回到数据库之前,我们将使用新实现来进行渲染并与旧实现的渲染结果进行对比,以确保 HTML 输出结果视觉上感觉相同,并且用户数据在任何情况下都不会被破坏。总而言之,只有不到 1% 的输入文档会受到标准进程的修改,这符合我们的的期望,同时再次证明 CommonMark 规范能够呈现语言的真实用法。

整个过程会持续好几天,最后的结果是网站上所有的 Markdown 用户内容会得到全面升级以符合新的 Markdown 标准,同时确保所有的最终渲染输出效果对用户视觉上感觉相同。

结论

从今天 (LCTT 译注:原文发布于 2017 年 3 月 14 日,这里的今天应该是这个日期) 开始, 我们同样为所有存储在 Git 仓库中的 Markdown 内容启动 CommonMark 渲染。正如上文所述,所有的现存文档都不会进行标准化,因为我们所期望中的多数渲染效果都刚刚好。

能够让在 GitHub 上的所有 Markdown 内容符合一个动态变化且使用的标准,同时还可以为我的用户提供一个关于 GFM 如何进行解析和渲染 清晰且权威的参考说明,我们是相当激动的。

我们还将致力于 CommonMark 规范,一直到在它正式发布之前消除最后一个 bug。我们也希望 GitHub.com 在其 1.0 规范发布之后可以进行完美兼容。

作为结束,以下为想要学习 CommonMark 规范或则自己来编写实现的朋友提供一些有用的链接。


译者简介:

GHLandy —— 生活中所有欢乐与苦闷都应藏在心中,有些事儿注定无人知晓,自己也无从说起。


via: https://githubengineering.com/a-formal-spec-for-github-markdown/

作者:Yuki IzumiVicent Martí 译者:GHLandy 校对:jasminepeng

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8399-1.html?utm_source=rss&utm_medium=rss

Ubuntu 17.04(Zesty Zapus)正式发布,可以下载使用了

$
0
0

今天,2017 年 4 月 13 日,Canonical 官方发布了 Ubuntu 17.04(Zesty Zapus)的最终版。自从去年十月发布 Ubuntu 16.10(Yakkety Yak)起,它已经开发了将近 6 个月。

如果直到今天,你一直在你的电脑上使用 Ubuntu 16.10,那么是时候升级到 Ubuntu 17.04 了,它是一个强大的发行版,“内外兼修”。它由最新的稳定的 Linux 4.10 内核驱动,并使用最新的基于 X.org 服务器 1.19.3 和 Mesa 17.0.3 的图形 Stack 进行配备。

上面提到的三个新技术,是那些使用 AMD 的 Radeon 显卡来玩游戏的人们需要立刻升级到 Ubuntu 17.04(Zesty Zapus)的唯一原因。但是 Ubuntu 17.04(Zesty Zapus)仅配备有最新的组件和应用程序。

Ubuntu 17.04(Zesty Zapus)的默认桌面环境仍然是 Unity 7,所以你钟爱的 Ubuntu 桌面环境此刻还没有消失。在未来的 Ubuntu 17.10 中,Unity 依然可用,Ubuntu 17.10 将在下个月开始开发。之后,从 Ubuntu 18.04 LTS 开始,将默认使用 GNOME 桌面

默认使用 Unity 7 桌面

Ubuntu 17.04 有一些新的特性:

  • 免驱动打印
  • 交换文件
  • 不再支持 32 位 PPC 架构

伴随其他有趣的技术一起装载在 Ubuntu 17.04 的最终发行版上,最值得一提的是交换文件,对于新安装的系统来说可以用它来替代交换分区。所以如果你从之前的 Ubuntu 发行版升级过来,这是唯一一个不适用的地方。

此外,默认的 DNS 解析器转换为了 systemd-resolved。IPP Everywhere 和苹果 AirPrint 打印机支持免驱动的开箱即用。绝大多数来自 GNOME 家族的包都升级到了 GNOME 3.24,只有 Nautilus 仍然保持在 GNOME 3.20.4 版本。

gconf 工具不再默认安装,因为它现在已经被 gsettings 所代替。而安装的应用大多数都是最新的,比如 LibreOffice 5.3 办公套件,Mozilla Firefox 52.0.1 Web 浏览器,以及 Mozilla Thunderbird 45.8.0 邮箱和新闻客户端。

Nautilus 文件管理器

从本次发行版本开始,不再支持 32 位 PowerPC(PPC)架构,以后的发行版也不再会支持。但是 PPC64el(PowerPC 64 位 Little Endian)会持续支持。现在,已经可以从我们网站上下载 Ubuntu 17.04的 64 位(amd64)和 32 位 ISO(i386)镜像。

其他的 Ubuntu 风味版本也在今天开始发行,包括 Ubuntu GNOME 17.04、Ubuntu MATE 17.04、Kubuntu 17.04、Xubuntu 17.04、Lubuntu 17.04、Ubuntu Kylin 17.04、Ubuntu Studio 17.04 以及 Ubuntu Budgie 17.04,这也是 Budgie 桌面作为官方的 Ubuntu 风味版本的首次亮相。

请注意,Ubuntu 17.04(Zesty Zapus)是一个短暂的分支,仅支持 9 个月的安全更新,即从今天到 2018 年 1 月中旬 。


via: http://news.softpedia.com/news/ubuntu-17-04-zesty-zapus-officially-released-available-to-download-now-514853.shtml

作者:Marius Nestor 译者:ucasFL 校对:wxy

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8400-1.html?utm_source=rss&utm_medium=rss


开源啦!「运维密码」小程序携全新 UI 开源啦!

$
0
0

继前一段时间 Linux 中国推出了“运维密码”微信小程序之后,经过开发团队的努力,重构了代码和使用了全新的现代 UI 后,同时在 GitHub 上开源了!

“运维密码”小程序是一款工作在微信环境中的小程序,主要的功能是提供一款方便、可靠、美观的 TOTP 密钥管理工具。TOTP 是基于时间的一次性密钥方案,可以为用户认证提供双因子认证(2FA)的支持,即在通常的密码之外,还额外通过另外一种方式来交叉认证以提升安全。

TOTP 认证,或者说双因子认证,在得到 Google 的大力推进之后,得到了广泛的互联网业界的支持,包括 Google、GitHub 等重视互联网安全的大型网站,也包括各类比特币网站,均支持 TOTP RFC 草案所规定的 TOTP 算法,并且 Google 还开源了其服务器端实现和客户端代码。除此之外,TOTP 还广泛应用于 Apple 、QQ、微博等各种需要双因子认证的场景中。除了网站之外,对于我们运维人员来说,TOTP 还可以应用与服务器的远程管理上,为 SSH、SFTP、FTP 等提供安全、简单、可靠的保障!

新版本介绍

好了,言归正传,我们来介绍一下本次新版本发布的情况。

本次版本迭代,我们毫不谦虚的将版本定位到 1.0.x,我们认为“运维密码”的第一阶段功能目标已经达成,目前主要有:

  • 添加 TOTP 场景
  • 查看 TOTP 密钥
  • 修改和删除 TOTP 场景
  • 生成场景二维码
  • 分享(克隆) TOTP 场景给朋友
  • 本地备份 TOTP 场景信息
  • 本地恢复 TOTP 场景信息

新的版本,采用了现代化的 UI 设计,看起来会更专业一点。

场景列表

场景列表会列出你已经添加的所有场景,最上方是时间进度条会显示场景密钥要更新的时间。在列表最下方,可以点击“添加场景”,调出摄像头来扫描密钥二维码来添加场景。

点击场景列表中的场景密钥,会复制该密钥,以备手机上使用。

场景详情

点击场景列表中的场景(非密钥区域),可以查看场景具体详情,在此可以“分享”、“生成二维码”、“编辑”乃至于“删除”场景。

  • 分享:请点击页面右上角的菜单,可以将该场景分享给你的朋友,这样你的朋友就会得到一份该场景的完全复制品。切记!分享该场景会导致别人一直拥有该场景信息,并随时生成密钥(和你的场景生成相同的密钥)。如果这不是你希望的结果,切勿分享。
  • 生成二维码:可以生成一份该场景特定的二维码,将其打印出来贴于服务器等物理环境处,使用时直接用微信扫描即可调出“运维密码”小程序添加该场景。(注:该场景二维码不同于用于添加场景的种子二维码)
  • 编辑和删除:也可以对此场景进行编辑,尤其是你在添加场景时输入的信息不够明确时。也可以在此修改该场景的地点(我们后继的版本会推出地点感知功能)。

生成的场景二维码

场景备份与恢复

场景备份信息,请截屏安全保存

最重要的,“运维密码”小程序提供了备份和恢复功能,这是 Google 所开源的 Google 身份验证器所缺乏的最重要功能。有了备份功能,你就不用担心手机丢失或更换手机的麻烦了。

目前我们提供了本地备份功能。限于微信小程序的限制,我们不能保存文件,只能将备份信息以二维码的方式备份出来。您可以将该二维码截屏,保存到安全可靠的地方,以备以后需要时恢复。

现阶段没有提供远程云端备份功能的主要原因是用户可能忧虑云端备份的隐私保障,因此,我们在没有办法提供一个可靠备份,连服务提供方也不能破解的方法之前,不会提供云端备份功能。

开源啦!

作为一家倡导开源的社区,我们一定要亲自践行开源才算得上名至实归。因此,我们在代码重构稳定之后,第一时间就将“运维密码”开源了出来。开源地址在:

https://github.com/LCTT/WeApp-Password

本项目采用 AGPL 3.0 协议开源。

欢迎大家复刻和提交拉取请求,有什么错误和功能建议,也非常欢迎大家给我们提出 issue

欢迎体验

我们还开设了“运维密码”小程序体验群,欢迎大家到群内发表意见,以及寻求帮助。加入本群也可以及时体验我们发布前的体验版本,第一时刻尝鲜。

运维密码体验群

扫描识别添加上面的好友,验证信息:“运维密码”,可获得入群邀请。

使用参考

要在 OpenSSH 上使用 TOTP,请参考 netb2c 写的《SSH 安全加固篇:通过“运维密码”小程序实现 SSH 双因子认证》。

我们还会陆续推出更多使用 “运维密码”的文章,也欢迎大家给我们投稿。

哦,好像我没有说到如何找到“运维密码”——我想这一定难不倒你,不过假如你不知道的话,你可以如此这般:

  • 在微信中“发现”->“小程序”中搜索“运维密码”即可。
  • 什么,你的“发现”中没有“小程序”,那你可以扫描下面这个二维码,来尝鲜你的第一个小程序:

运维密码

致谢

感谢开发团队的 @Bestony、betty、wxy;

感谢撰写使用“运维密码”的文章的同学:netb2c;

 感谢“运维密码”体验群的诸位同学;

感谢 Google 开源的程序;

感谢微信提供的环境。


完美阅读及发表评论,请猛击:https://linux.cn/article-8401-1.html?utm_source=rss&utm_medium=rss

Linux 系统上的可视化比较与合并工具 Meld

$
0
0

我们已经讲过 Linux 中一些基于命令行的比较和合并工具,再来讲解该系统的一些可视化的比较与合并工具也很合理。首要的原因是,不是每个人都习惯使用命令行,而且对于某些人来说,基于命令行的比较工具可能很难学习和理解。

因此,我们将会推出关于可视化工具 Meld 的系列文章。

在跳到安装和介绍部分前,我需要说明这篇教程里所有的指令和用例是都是可用的,而且它们已经在 Ubuntu 14.04 中测试过了,我们使用的 Meld 版本是 3.14.2。

关于 Meld

Meld 主要是一个可视化的比较和合并的工具,目标人群是开发者(当然,我们将要讲到的其它部分也会考虑到最终用户)。这个工具同时支持双向和三向的比较,不仅仅是比较文件,还可以比较目录,以及版本控制的项目。

“Meld 可以帮你回顾代码改动,理解补丁,”其官网如是说。“它甚至可以告知你如果你不进行合并将会发生什么事情。”该工具使用 GPL v2 协议进行授权。

安装 Meld

如果你用的是 Ubuntu 或者其它基于 Debian 的 Linux 分支,你可以用以下命令下载安装 Meld:

sudo apt-get install meld

或者你也可以用系统自带的包管理软件下载这个工具。比如在 Ubuntu 上,你可以用 Ubuntu 软件中心Ubuntu Software Center,或者用 Ubuntu 软件,它从 Ubuntu 16.04 版本开始取代了 Ubuntu 软件中心。

当然,Ubuntu 官方仓库里的 Meld 版本很有可能比较陈旧。因此如果你想要用更新的版本,你可以在这里下载软件包。如果你要用这个方法,你要做的就是解压下载好的软件包,然后运行 bin 目录下的 meld 程序。

~/Downloads/meld-3.14.2/bin$&nbsp;./meld&nbsp;

以下是 Meld 依赖的软件,仅供参考:

  • Python 2.7 (Python 3.3 开发版)
  • GTK+ 3.14
  • GLib 2.36
  • PyGObject 3.14
  • GtkSourceView 3.14
  • pycairo

使用 Meld

装好了软件,就可以看到类似这样的画面:

Meld started

有三个选项:比较文件File comparison比较目录Directory comparison以及版本控制视图Version control view

点击“比较文件”选项,就可以选择需要比较的文件:

Meld file comparison

就像上面的截图那样明白,Meld 也可以进行三向比较,但是在这一系列文章的第一部分,我们只会讲更常用的双向比较。

接着,选择你想要比较的文件,点击“比较”Compare按钮。软件会在两边分别打开两个文件,高亮不同的行(以及不同的部分)。

Compare files in Meld

两个文件的不同之处在第二行,差别在于 file2 文件的第二行多了一个 3。你看到的黑色箭头是用来进行合并或修改的操作的。该例中,向右的箭头将会把 file2 文件的第二行改成文件 file1 中对应行的内容。左向箭头做的事情相反。

做完修改后,按下 Ctrl+s 来保存。

这个简单的例子,让你知道 Meld 的基本用法。让我们看一看稍微复杂一点的比较:

Meld advanced file comparison

在讨论这些变化前,这里提一下, Meld 的界面中有几个区域,可以给出文件之间的差异,让概况变得直观。这里特别需要注意窗口的左右两边垂直的栏。比如下面这个截图:

Visual Comparison

仔细观察,图中的这个栏包含几个不同颜色的区块。这些区块是用来让你对文件之间的差异有个大概的了解。“每一个着色的区块表示一个部分,这个部分可能是插入、删除、修改或者有差别的,取决于区块所用的颜色。”官方文档是这样说的。

现在,让我们回到我们之前讨论的例子中。接下来的截图展示了用 Meld 理解文件的改动是很简单的(以及合并这些改动):

File changes visualized in Meld

Meld Example 2

Meld Example 3

接着,我们滑动文件,从一个改动跳到另一个。但是,当要比较的文件很大时,这会耗一点时间,当你想要滑动文件跳到一个改动的位置时,也会变得很困难。如果是这种情况的话,你可以用工具栏的橙色箭头,就在编辑区域的上方:

Go to next change in Meld

这些是你使用 Meld 时做的一般性的事情:可以用标准的 Ctrl+f 组合键在编辑区域内进行查找,按 F11 键让软件进入全屏模式,再按 Ctrl+r 来刷新(通常在所有要比较的文件改变的时候使用)。

以下是 Meld 官方网站宣传的重要特性:

  • 文件和目录的双向及三向比较
  • 输入即更新文件的比较
  • 自动合并模式,按块改动的动作让合并更加简单
  • 可视化让比较文件更简单
  • 支持 Git,Bazaar,Mercurial,Subversion 等等

注意还不仅仅只有以上所列的。网站上有个专门的特性页面,里面提到了 Meld 提供的所有特性。这个页面列出的所有特性分为几个部分,以该软件是用来做文件比较、目录比较、版本控制还是处于合并模式下为基础进行划分。

和其它软件相似,有些事情 Meld 做不到。官方网站上列出了其中的一部分:“当 Meld 展示文件之间的差异时,它同时显示两个文件,看起来就像在普通的文本编辑器中。它不会添加额外的行,让左右两边文件的特殊改动处于同样的行数。没有做这个事情的选项。”

总结

我们刚刚了解到的不过是皮毛,因为 Meld 还能做很多事情。考虑到这是教程系列的第一部分,这也挺不错的。这仅仅是让你了解 Meld 的作用,你可以配置它,忽略一些特定类型的改动,让它移动,复制或者删除文件之间的个别差异,也可以从命令行启动它。在即将退出的系列教程中,我们将会讲述所有这些重要功能。


via: https://www.howtoforge.com/tutorial/beginners-guide-to-visual-merge-tool-meld-on-linux/

作者:Ansh 译者:GitFuture 校对:wxy

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8402-1.html?utm_source=rss&utm_medium=rss

印度的社区如何支持隐私和软件自由

$
0
0

How communities in India support privacy and software freedom

印度的自由和开源社区,特别是 Mozilla 和 Wikimedia 社区,它们正在引领两个独特的全球性活动,以提高隐私保护及支持自由软件。

1 月份的隐私月是由印度 Mozilla 社区领导,通过在线和线下活动向群众教育网络隐私。而 2 月份的自由月是由互联网与社会中心领导,教育内容创作者如博主和摄影师就如何在开放许可证下捐赠内容。

1 月隐私月

去年开始的 Mozilla “1 月隐私月”用来帮助庆祝年度数据隐私日(Data Privacy Day)。在 2016 年,该活动举办了几场涉及到全球 10 个国家 14,339,443 人的线下和线上活动。其中一个核心组织者,Ankit Gadgil 这样说到:“每天分享一个隐私提示,持续一个月就能分享 31 天。”今年,我们共有三个重点领域,首先是我们让这个运动更加开放和全球化。巴西、意大利、捷克共和国的 Mozilla 社区今年正在积极参与,所有必要的文档都是本地化的,所以我们可以针对更多的用户。其次,我们在线下活动中教导用户推广 Firefox 以及 Mozilla 的其他产品,以便用户可以亲身体验使用这些工具来帮助保护他们的隐私。第三点,我们鼓励大家参加线下活动并把他们的学习写到博客里面去,例如,最近在印度古吉拉特邦的一个节目中,他们使用 Mozilla 产品来教授隐私方面的知识。”

今年的活动继续有线下和线上活动。关注 #PrivacyAware 参加。

安全提示

像 Firefox 这样的 Mozilla 产品具有安全性设置-有内置的还有对残疾人完全可用的附件库-这有助于保护用户的隐私和安全性,这些都是协同构建的并且是开源的。

Chrome Opera 中的 HTTPS Everywhere 插件可用于加密用户通信,使外部网站无法查看用户信息。该项目由 Tor Project 以及电子前沿基金会合作建成。

2 月自由月

2 月自由月是一个网络活动,旨在教育内容创作者关于自由内容,并向他们展示如何在自由许可证下作出贡献。

参加规则:

  • 你在二月份制作或出版的作品必须获得自由许可证许可。
  • 内容类型包括博客文章、其他文字和图像。

多媒体,基于文本的内容,艺术和设计等创意作品可以通过多个知识共享许可证(CC)进行许可,其他类型的文档可以根据 GNU 免费文档许可(GFDL)许可。Wikipedia 上可以找到很好的例子,其内容根据 CC 和 GFDL 许可证获得许可,允许人们使用、分享、混合和分发衍生用于商业上和非商业性的作品。此外,还有允许开发人员共享他们的软件和软件相关文档的自由软件许可证

(题图提供: opensource.com)


作者简介:

Subhashish Panigrahi(@shhapa)是 Mozilla 参与团队的亚洲社区催化师,并在 Wikimedia 基金会印度计划的早期扮演了互联网及社会知识获取中心项目官的角色,另外他是一名印度教育工作者,


via: https://opensource.com/article/17/1/how-communities-india-support-privacy-software-freedom

作者:Subhashish Panigrahi 译者:geekpi 校对:wxy

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8403-1.html?utm_source=rss&utm_medium=rss

深入理解 sudo 与 su 之间的区别

$
0
0

早前的一篇文章中,我们深入讨论了 sudo 命令的相关内容。同时,在该文章的末尾有提到相关的命令 su 的部分内容。本文,我们将详细讨论关于 su 命令与 sudo 命令之间的区别。

在开始之前有必要说明一下,文中所涉及到的示例教程都已经在 Ubuntu 14.04 LTS 上测试通过。

Linux su 命令

su 命令的主要作用是让你可以在已登录的会话中切换到另外一个用户。换句话说,这个工具可以让你在不登出当前用户的情况下登录为另外一个用户。

su 命令经常被用于切换到超级用户或 root 用户(因为在命令行下工作,经常需要 root 权限),但是 - 正如前面所提到的 - su 命令也可以用于切换到任意非 root 用户。

如何使用 su 命令切换到 root 用户,如下:

不带命令行参数的 su 命令

如上,su 命令要求输入的密码是 root 用户的密码。所以,一般 su 命令需要输入目标用户的密码。在输入正确的密码之后,su 命令会在终端的当前会话中打开一个子会话。

su -

还有一种方法可以切换到 root 用户:运行 su - 命令,如下:

su - 命令

那么,su 命令与 su - 命令之间有什么区别呢?前者在切换到 root 用户之后仍然保持旧的(或者说原始用户的)环境,而后者则是创建一个新的环境(由 root 用户 ~/.bashrc 文件所设置的环境),相当于使用 root 用户正常登录(从登录屏幕登录)。

su 命令手册页很清楚地说明了这一点:

可选参数 - 可提供的环境为用户在直接登录时的环境。

因此,你会觉得使用 su - 登录更有意义。但是, su 命令也是有用的,那么大家可能会想知道它在什么时候用到。以下内容摘自 ArchLinux wiki 网站 - 关于 su 命令的好处和坏处:

  • 有的时候,对于系统管理员(root)来讲,使用其他普通用户的 Shell 账户而不是自己的 root Shell 账户更会好一些。尤其是在处理用户问题时,最有效的方法就是是:登录目标用户以便重现以及调试问题。
  • 然而,在多数情况下,当从普通用户切换到 root 用户进行操作时,如果还使用普通用户的环境变量的话,那是不可取甚至是危险的操作。因为是在无意间切换使用普通用户的环境,所以当使用 root 用户进行程序安装或系统更改时,会产生与正常使用 root 用户进行操作时不相符的结果。例如,以普通用户安装程序会给普通用户意外损坏系统或获取对某些数据的未授权访问的能力。

注意:如果你想在 su - 命令的 - 后面传递更多的参数,那么你必须使用 su -l 而不是 su -。以下是 --l 命令行选项的说明:

-, -l, --login

提供相当于用户在直接登录时所期望的环境。

当使用 - 时,必须放在 su 命令的最后一个选项。其他选项(-l--login)无此限制。

su -c

还有一个值得一提的 su 命令行选项为:-c。该选项允许你提供在切换到目标用户之后要运行的命令。

su 命令手册页是这样说明:

-c, --command COMMAND

使用 -c 选项指定由 Shell 调用的命令。

被执行的命令无法控制终端。所以,此选项不能用于执行需要控制 TTY 的交互式程序。

参考示例:

su [target-user] -c [command-to-run]

示例中,command-to-run 将会被这样执行:

[shell]&nbsp;-c&nbsp;[command-to-run]

示例中的 shell 类型将会被目标用户在 /etc/passwd 文件中定义的登录 shell 类型所替代。

sudo vs. su

现在,我们已经讨论了关于 su 命令的基础知识,是时候来探讨一下 sudosu 命令之间的区别了。

关于密码

两个命令的最大区别是:sudo 命令需要输入当前用户的密码,su 命令需要输入 root 用户的密码。

很明显,就安全而言,sudo 命令更好。例如,考虑到需要 root 访问权限的多用户使用的计算机。在这种情况下,使用 su 意味着需要与其他用户共享 root 用户密码,这显然不是一种好习惯。

此外,如果要撤销特定用户的超级用户/root 用户的访问权限,唯一的办法就是更改 root 密码,然后再告知所有其他用户新的 root 密码。

而使用 sudo 命令就不一样了,你可以很好的处理以上的两种情况。鉴于 sudo 命令要求输入的是其他用户自己的密码,所以,不需要共享 root 密码。同时,想要阻止特定用户访问 root 权限,只需要调整 sudoers 文件中的相应配置即可。

默认行为

两个命令之间的另外一个区别是其默认行为。sudo 命令只允许使用提升的权限运行单个命令,而 su 命令会启动一个新的 shell,同时允许使用 root 权限运行尽可能多的命令,直到明确退出登录。

因此,su 命令的默认行为是有风险的,因为用户很有可能会忘记他们正在以 root 用户身份进行工作,于是,无意中做出了一些不可恢复的更改(例如:对错误的目录运行 rm -rf 命令!)。关于为什么不鼓励以 root 用户身份进行工作的详细内容,请参考这里

日志记录

尽管 sudo 命令是以目标用户(默认情况下是 root 用户)的身份执行命令,但是它们会使用 sudoer 所配置的用户名来记录是谁执行命令。而 su 命令是无法直接跟踪记录用户切换到 root 用户之后执行了什么操作。

灵活性

sudo 命令比 su 命令灵活很多,因为你甚至可以限制 sudo 用户可以访问哪些命令。换句话说,用户通过 sudo 命令只能访问他们工作需要的命令。而 su 命令让用户有权限做任何事情。

sudo su

大概是因为使用 su 命令或直接以 root 用户身份登录有风险,所以,一些 Linux 发行版(如 Ubuntu)默认禁用 root 用户帐户。鼓励用户在需要 root 权限时使用 sudo 命令。

然而,您还是可以成功执行 su 命令,而不用输入 root 用户的密码。运行以下命令:

sudo su

由于你使用 sudo 运行命令,你只需要输入当前用户的密码。所以,一旦完成操作,su 命令将会以 root 用户身份运行,这意味着它不会再要求输入任何密码。

PS:如果你想在系统中启用 root 用户帐户(强烈反对,因为你可以使用 sudo 命令或 sudo su 命令),你必须手动设置 root 用户密码,可以使用以下命令:

sudo passwd root

结论

当你需要可用的工具来提升(或一组完全不同的)权限来执行任务时,这篇文章以及之前的教程(其中侧重于 sudo 命令)应该能给你一个比较好的建议。 如果您也想分享关于 susudo 的相关内容或者经验,欢迎您在下方进行评论。


via: https://www.howtoforge.com/tutorial/sudo-vs-su/

作者:Himanshu Arora 译者:zhb127 校对:wxy

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8404-1.html?utm_source=rss&utm_medium=rss

使用 Exercism 提升你的编程技巧

$
0
0

这些练习目前已经支持 33 种编程语言了。

Improve your programming skills with Exercism

我们中的很多人的 2017 年目标,将提高编程能力或学习如何编程放在第一位。虽然我们有许多资源可以访问,但练习独立于特定职业的代码开发的艺术还是需要一些规划。Exercism.io 就是为此目的而设计的一种资源。

Exercism 是一个 开源 的项目和服务,通过发现和协作,帮助人们提高他们的编程技能。Exercism 提供了几十种不同编程语言的练习。实践者完成每个练习,并获得反馈,从而可以从他们的同行小组的经验中学习。

这里有这么多同行! Exercism 在 2016 年留下了一些令人印象深刻的统计:

  • 有来自 201 个不同国家的参与者
  • 自 2013 年 6 月以来,29,000 名参与者提交了练习,其中仅在 2016 年就有 15,500 名参加者提交练习
  • 自 2013 年 6 月以来,15,000 名参与者就练习解决方案提供反馈,其中 2016 年有 5,500 人提供反馈
  • 每月 50,000 名访客,每周超过 12,000 名访客
  • 目前的练习已经支持 33 种编程语言,另外 22 种语言在筹备工作中

该项目为各种级别的参与者提供了一系列小小的挑战,使他们能够“即使在低水平也能发展到高度谙熟”,Exercism 的创始人 Katrina Owen 这样说到。Exercism 并不旨在教导学员成为一名职业程序员,但它的练习使他们对一种语言及其瑕疵有深刻的了解。这种熟悉性消除了学习者对语言的认知负担(使之更谙熟),使他们能够专注于更困难的架构和最佳实践的问题。

Exercism 通过一系列练习(或者还有别的?)来做到这一点。程序员下载命令行客户端,检索第一个练习,添加完成练习的代码,然后提交解决方案。提交解决方案后,程序员可以研究他人的解决方案,并学习到对同一个问题不同的解决方式。更重要的是,每个解决方案都会收到来自其他参与者的反馈。

反馈是 Exercism 的超级力量。鼓励所有参与者不仅接收反馈而且提供反馈。根据 Owen 说的,Exercism 的社区成员提供反馈比完成练习学到更多。她说:“这是一个强大的学习经验,你需要发表内心感受,并检查你的假设、习惯和偏见”。她还指出,反馈可以有多种形式。

欧文说:“只需进入,观察并发问”。

那些刚刚接触编程,甚至只是接触了一种特定语言的人,可以通过预设好的问题来提供有价值的反馈,同时通过协作和对话来学习。

除了对新语言的 “微课”学习bite-sized learning 之外,Exercism 本身还强烈支持和鼓励项目的新贡献者。在 SitePoint.com 的一篇文章中,欧文强调:“如果你想为开源贡献代码,你所需要的技能水平只要‘够用’即可。” Exercism 不仅鼓励新的贡献者,它还尽可能地帮助新贡献者发布他们项目中的第一个补丁。到目前为止,有近 1000 人成为 Exercism 项目的贡献者。

新贡献者会有大量工作让他们忙碌。 Exercism 目前正在审查其语言发展轨迹的健康状况,目的是使所有发展轨迹可持续并避免维护者的倦怠。它还在寻求捐赠和赞助,聘请设计师提高网站的可用性。

Owen 说:“这些改进对于网站的健康以及为了 Exercism 参与者的发展是有必要的,这些变化还鼓励新贡献者加入并简化了加入的途径。” 她说:“如果我们可以重新设计,产品方面将更加可维护……当用户体验一团糟时,华丽的代码一点用也没有”。该项目有一个非常活跃的讨论仓库,这里社区成员合作来发现最好的新方法和功能。

那些想关注项目但还没有参与的人可以关注邮件列表


作者简介:

VM(Vicky)Brasseur - VM(也称为 Vicky)是技术人员、项目、流程、产品和 p^Hbusinesses 的经理。在她超过 18 年的科技行业从业中,她曾是分析师、程序员、产品经理、软件工程经理和软件工程总监。 目前,她是 Hewlett Packard Enterprise 上游开源开发团队的高级工程经理。 VM 的博客在 anonymoushash.vmbrasseur.com,tweets 是 @vmbrasseur。


via: https://opensource.com/article/17/1/exercism-learning-programming

作者:VM (Vicky) Brasseur 译者:geekpi 校对:jasminepeng

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8405-1.html?utm_source=rss&utm_medium=rss

使用 AWS 的 GO SDK 获取区域与终端节点信息

$
0
0

LCTT 译注: 终端节点Endpoint,详情请见: http://docs.amazonaws.cn/general/latest/gr/rande.html

最新发布的 GO 的 SDK v1.6.0 版本,加入了获取区域与终端节点信息的功能。它可以很方便地列出区域、服务和终端节点的相关信息。可以通过 github.com/aws/aws-sdk-go/aws/endpoints 包使用这些功能。

endpoints 包提供了一个易用的接口,可以获取到一个服务的终端节点的 url 列表和区域列表信息。并且我们将相关信息根据 AWS 服务区域进行了分组,如 AWS 标准、AWS 中国和 AWS GovCloud(美国)。

解析终端节点

设置 SDK 的默认配置时, SDK 会自动地使用 endpoints.DefaultResolver 函数。你也可以自己调用包中的EndpointFor 方法来解析终端节点。

// 解析在us-west-2区域的S3服务的终端节点
resolver := endpoints.DefaultResolver()
endpoint, err := resolver.EndpointFor(endpoints.S3ServiceID, endpoints.UsWest2RegionID)
if err != nil {
        fmt.Println("failed to resolve endpoint", err)
        return
}

fmt.Println("Resolved URL:", endpoint.URL)

如果你需要自定义终端节点的解析逻辑,你可以实现 endpoints.Resolver 接口,并传值给aws.Config.EndpointResolver。当你打算编写自定义的终端节点逻辑,让 SDK 可以用来解析服务的终端节点时候,这个功能就会很有用。

以下示例,创建了一个配置好的 Session,然后 Amazon S3 服务的客户端就可以使用这个自定义的终端节点。

s3CustResolverFn := func(service, region string, optFns ...func(*endpoints.Options)) (endpoints.ResolvedEndpoint, error) {
        if service == "s3" {
               return endpoints.ResolvedEndpoint{
                       URL:           "s3.custom.endpoint.com",
                       SigningRegion: "custom-signing-region",
               }, nil
        }

        return defaultResolver.EndpointFor(service, region, optFns...)
}
sess := session.Must(session.NewSessionWithOptions(session.Options{
        Config: aws.Config{
               Region:           aws.String("us-west-2"),
               EndpointResolver: endpoints.ResolverFunc(s3CustResolverFn),
        },
}))

分区

endpoints.DefaultResolver 函数的返回值可以被 endpoints.EnumPartitions接口使用。这样就可以获取 SDK 使用的分区片段,也可以列出每个分区的分区信息。

// 迭代所有分区表打印每个分区的ID
resolver := endpoints.DefaultResolver()
partitions := resolver.(endpoints.EnumPartitions).Partitions()

for _, p := range partitions {
        fmt.Println("Partition:", p.ID())
}

除了分区表之外,endpoints 包也提供了每个分区组的 getter 函数。这些工具函数可以方便列出指定分区,而不用执行默认解析器列出所有的分区。

partition := endpoints.AwsPartition()
region := partition.Regions()[endpoints.UsWest2RegionID]

fmt.Println("Services in region:", region.ID())
for id, _ := range region.Services() {
        fmt.Println(id)
}

当你获取区域和服务值后,可以调用 ResolveEndpoint。这样解析端点时,就可以提供分区的过滤视图。

获取更多 AWS SDK for GO 信息, 请关注其开源仓库。若你有更好的看法,请留言评论。


via: https://aws.amazon.com/cn/blogs/developer/using-the-aws-sdk-for-gos-regions-and-endpoints-metadata

作者:Jason Del Ponte 译者:Vic020 校对:wxy

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8406-1.html?utm_source=rss&utm_medium=rss

在 Linux 上使用 Nginx 和 Gunicorn 托管 Django 应用

$
0
0

介绍

托管 Django Web 应用程序相当简单,虽然它比标准的 PHP 应用程序更复杂一些。 让 Web 服务器对接 Django 的方法有很多。 Gunicorn 就是其中最简单的一个。

Gunicorn(Green Unicorn 的缩写)在你的 Web 服务器 Django 之间作为中间服务器使用,在这里,Web 服务器就是 Nginx。 Gunicorn 服务于应用程序,而 Nginx 处理静态内容。

Gunicorn

安装

使用 Pip 安装 Gunicorn 是超级简单的。 如果你已经使用 virtualenv 搭建好了你的 Django 项目,那么你就有了 Pip,并且应该熟悉 Pip 的工作方式。 所以,在你的 virtualenv 中安装 Gunicorn。

$ pip install gunicorn

配置

Gunicorn 最有吸引力的一个地方就是它的配置非常简单。处理配置最好的方法就是在 Django 项目的根目录下创建一个名叫 Gunicorn 的文件夹。然后在该文件夹内,创建一个配置文件。

在本篇教程中,配置文件名称是 gunicorn-conf.py。在该文件中,创建类似于下面的配置:

import multiprocessing

bind = 'unix:///tmp/gunicorn1.sock'
workers = multiprocessing.cpu_count() * 2 + 1
reload = True
daemon = True

在上述配置的情况下,Gunicorn 会在 /tmp/ 目录下创建一个名为 gunicorn1.sock 的 Unix 套接字。 还会启动一些工作进程,进程数量相当于 CPU 内核数量的 2 倍。 它还会自动重新加载并作为守护进程运行。

运行

Gunicorn 的运行命令有点长,指定了一些附加的配置项。 最重要的部分是将 Gunicorn 指向你项目的 .wsgi 文件。

gunicorn -c gunicorn/gunicorn-conf.py -D --error-logfile gunicorn/error.log yourproject.wsgi

上面的命令应该从项目的根目录运行。 -c 选项告诉 Gunicorn 使用你创建的配置文件。 -D 再次指定 gunicorn 为守护进程。 最后一部分指定 Gunicorn 的错误日志文件在你创建 Gunicorn 文件夹中的位置。 命令结束部分就是为 Gunicorn 指定 .wsgi 文件的位置。

Nginx

现在 Gunicorn 配置好了并且已经开始运行了,你可以设置 Nginx 连接它,为你的静态文件提供服务。 本指南假定你已经配置好了 Nginx,而且你通过它托管的站点使用了单独的 server 块。 它还将包括一些 SSL 信息。

如果你想知道如何让你的网站获得免费的 SSL 证书,请查看我们的 Let'sEncrypt 指南

# 连接到 Gunicorn
upstream yourproject-gunicorn {
    server unix:/tmp/gunicorn1.sock fail_timeout=0;
}

# 将未加密的流量重定向到加密的网站
server {
    listen       80;
    server_name  yourwebsite.com;
    return       301 https://yourwebsite.com$request_uri;
}

# 主服务块
server {
    # 设置监听的端口,指定监听的域名
    listen 443 default ssl;
    client_max_body_size 4G;
    server_name yourwebsite.com;

    # 指定日志位置
    access_log /var/log/nginx/yourwebsite.access_log main;
    error_log /var/log/nginx/yourwebsite.error_log info;

    # 告诉 nginx 你的 ssl 证书
    ssl on;
    ssl_certificate /etc/letsencrypt/live/yourwebsite.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourwebsite.com/privkey.pem;

    # 设置根目录
    root /var/www/yourvirtualenv/yourproject;

    # 为 Nginx 指定静态文件路径
    location /static/ {
        # Autoindex the files to make them browsable if you want
        autoindex on;
        # The location of your files
        alias /var/www/yourvirtualenv/yourproject/static/;
        # Set up caching for your static files
        expires 1M;
        access_log off;
        add_header Cache-Control "public";
        proxy_ignore_headers "Set-Cookie";
    }

    # 为 Nginx 指定你上传文件的路径
    location /media/ {
        Autoindex if you want
        autoindex on;
        # The location of your uploaded files
        alias /var/www/yourvirtualenv/yourproject/media/;
        # Set up aching for your uploaded files
        expires 1M;
        access_log off;
        add_header Cache-Control "public";
        proxy_ignore_headers "Set-Cookie";
    }

    location / {
        # Try your static files first, then redirect to Gunicorn
        try_files $uri @proxy_to_app;
    }

    # 将请求传递给 Gunicorn
    location @proxy_to_app {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass   http://njc-gunicorn;
    }

    # 缓存 HTML、XML 和 JSON
    location ~* \.(html?|xml|json)$ {
        expires 1h;
    }

    # 缓存所有其他的静态资源
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|ttf|woff2)$ {
        expires 1M;
        access_log off;
        add_header Cache-Control "public";
        proxy_ignore_headers "Set-Cookie";
    }
}

配置文件有点长,但是还可以更长一些。其中重点是指向 Gunicorn 的 upstream 块以及将流量传递给 Gunicorn 的 location 块。大多数其他的配置项都是可选,但是你应该按照一定的形式来配置。配置中的注释应该可以帮助你了解具体细节。

保存文件之后,你可以重启 Nginx,让修改的配置生效。

# systemctl restart nginx

一旦 Nginx 在线生效,你的站点就可以通过域名访问了。

结语

如果你想深入研究,Nginx 可以做很多事情。但是,上面提供的配置是一个很好的开始,并且你可以用于实践中。 如果你见惯了 Apache 和臃肿的 PHP 应用程序,像这样的服务器配置的速度应该是一个惊喜。


via: https://linuxconfig.org/hosting-django-with-nginx-and-gunicorn-on-linux

作者:Nick Congleton 译者:Flowsnow 校对:wxy

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8407-1.html?utm_source=rss&utm_medium=rss


如何在 Ubuntu 和 Linux Mint 上启用桌面共享

$
0
0

桌面共享是指通过图形终端仿真器在计算机桌面上实现远程访问和远程协作的技术。桌面共享允许两个或多个连接到网络的计算机用户在不同位置对同一个文件进行操作。

在这篇文章中,我将向你展示如何在 Ubuntu 和 Linux Mint 中启用桌面共享,并展示一些重要的安全特性。

在 Ubuntu 和 Linux Mint 上启用桌面共享

1、在 Ubuntu Dash 或 Linux Mint 菜单中,像下面的截图这样搜索 desktop sharing,搜索到以后,打开它。

Search for Desktop Sharing in Ubuntu

在 Ubuntu 中搜索 Desktop sharing

2、打开 Desktop sharing 以后,有三个关于桌面共享设置的选项:共享、安全以及通知设置。

在共享选项下面,选中选项“允许其他用户查看桌面”来启用桌面共享。另外,你还可以选中选项“允许其他用户控制你的桌面”,从而允许其他用户远程控制你的桌面。

Desktop Sharing Preferences

桌面共享偏好

3、接下来,在“安全”部分,你可以通过勾选选项“你必须确认任何对该计算机的访问”来手动确认每个远程连接。

另外,另一个有用的安全特性是通过选项“需要用户输入密码”创建一个确定的共享密码。这样当用户每次想要访问你的桌面时需要知道并输入密码。

4、对于通知,你可以勾选“仅当有人连接上时”来监视远程连接,这样每次当有人远程连接到你的桌面时,可以在通知区域查看。

Configure Desktop Sharing Set

配置桌面共享设置

当所有的桌面共享选项都设置好以后,点击“关闭”。现在,你已经在你的 Ubuntu 或 Linux Mint 上成功启用了桌面共享。

测试 Ubuntu 的远程桌面共享

你可以通过使用一个远程连接应用来进行测试,从而确保桌面共享可用。在这个例子中,我将展示上面设置的一些选项是如何工作的。

5、我将使用 VNC(虚拟网络计算)协议通过 remmina 远程连接应用连接到我的 Ubuntu PC。

Remmina Desktop Sharing Tool

Remmina 桌面共享工具

6、在点击 Ubuntu PC 以后,将会出现下面这个配置连接设置的界面,

Remmina Desktop Sharing Preferences

Remmina 桌面共享偏好

7、当执行好所有设置以后,点击连接。然后,给用户名提供 SSH 密码并点击 OK 。

Enter SSH User Password

输入 SSH 用户密码

点击确定以后,出现下面这个黑屏,这是因为在远程机器上,连接还没有确认。

Black Screen Before Confirmation

连接确认前的黑屏

8、现在,在远程机器上,我需要如下一个屏幕截图显示的那样点击 Allow 来接受远程访问请求。

Allow Remote Desktop Sharing

允许远程桌面共享

9、在接受请求以后,我就成功地连接到了远程 Ubuntu 机器的桌面。

Remote Ubuntu Desktop

远程 Ubuntu 桌面

这就是全部内容了,在这篇文章中,我们讲解了如何在 Ubuntu 和 Linux Mint 中启用桌面共享。你使用评论部分给我们写反馈。


作者简介:

Aaron Kili 是 Linux 和 F.O.S.S 爱好者,将来的 Linux 系统管理员和网络开发人员,目前是 TecMint 的内容创作者,他喜欢用电脑工作,并坚信分享知识。


via: http://www.tecmint.com/enable-desktop-sharing-in-ubuntu-linux-mint/

作者:Aaron Kili 译者:ucasFL 校对:wxy

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8408-1.html?utm_source=rss&utm_medium=rss

使用 IBM Bluemix 构建,部署和管理自定义应用程序

$
0
0

Bluemix 是由 IBM 实现的基于开放标准的云平台。它具有开放的架构,其允许组织能够在云上创建、开发和管理其应用程序。它基于 Cloud Foundry ,因此可以被视为平台即服务(PaaS)。使用 Bluemix,开发人员不必关心云端配置,可以专注于他们的应用程序。 云端配置将由 Bluemix 自动完成。

Bluemix 还提供了一个仪表板,通过它,开发人员可以创建,管理和查看服务和应用程序,同时还可以监控资源使用情况。

它支持以下编程语言:

  • Java
  • Python
  • Ruby on Rails
  • PHP
  • Node.js

它还支持 OpenWhisk(FaaS),这也是一个 IBM 的产品,其允许开发人员调用任一功能而不需要任何资源管理。

图1 IBM Bluemix概述

图1 IBM Bluemix 概述

图2 IBM Bluemix体系结构

图2 IBM Bluemix 体系结构

图3 在IBM Bluemix 中创建组织

图3 在 IBM Bluemix 中创建组织

IBM Bluemix 如何工作

Bluemix 构建在 IBM 的 SoftLayer IaaS(基础架构即服务)之上。它使用 Cloud Foundry 作为开源 PaaS 平台。一切起于通过 Cloud Foundry 来推送代码,它扮演着将代码和编写应用所使用的编程语言运行时环境整合起来的角色。IBM 服务、第三方服务或社区构建的服务可用于不同的功能。安全连接器可用于将本地系统连接到云。

图4 在IBM Bluemix中设置空间

图4 在 IBM Bluemix 中设置空间

图5 应用程序模板

图5 应用程序模板

图6 IBM Bluemix支持的编程语言

图6 IBM Bluemix 支持的编程语言

在 Bluemix 中创建应用程序

在本文中,我们将使用 Liberty for Java 的入门包在 IBM Bluemix 中创建一个示例“Hello World”应用程序,只需几个简单的步骤。

1、 打开 https://console.ng.bluemix.net/registration/

2、 注册 Bluemix 帐户

3、 点击邮件中的确认链接完成注册过程

4、 输入您的电子邮件 ID,然后点击 Continue 进行登录

5、 输入密码并点击 Log in

6、 进入 Set up -> Environment 设置特定区域中的资源共享

7、 创建空间方便管理访问控制和在 Bluemix 中回滚操作。 我们可以将空间映射到多个开发阶段,如 dev, test,uat,pre-prod 和 prod

图7 命名应用程序

图7 命名应用程序

图8 了解应用程序何时准备就绪

图8 了解应用程序何时准备就绪

图9 IBM Bluemix Java应用程序

图9 IBM Bluemix Java 应用程序

8、 完成初始配置后,单击 I'm ready -> Good to Go !

9、 成功登录后,此时检查 IBM Bluemix 仪表板,特别是 Cloud Foundry Apps(其中 2GB 可用)和 Virtual Server(其中 0 个实例可用)的部分

10、 点击 Create app,选择应用创建模板。在我们的例子中,我们将使用一个 Web 应用程序

11、 如何开始?单击 Liberty for Java ,然后查看其描述

12、 单击 Continue

13、 为新应用命名。对于本文,让我们使用 osfy-bluemix-tutorial 命名然后单击 Finish

14、 在 Bluemix 上创建资源和托管应用程序需要等待一些时间

15、 几分钟后,应用程式就会开始运作。注意应用程序的URL

16、 访问应用程序的URL http://osfy-bluemix-tutorial.au-syd.mybluemix.net/, 不错,我们的第一个在 IBM Bluemix 上的 Java 应用程序成功运行

17、 为了检查源代码,请单击 Files 并在门户中导航到不同文件和文件夹

18、 Logs 部分提供包括从应用程序的创建时起的所有活动日志。

19、 Environment Variables 部分提供关于 VCAP_Services 的所有环境变量以及用户定义的环境变量的详细信息

20、 要检查应用程序的资源消耗,需要到 Liberty for Java 那一部分。

21、 默认情况下,每个应用程序的 Overview 部分包含资源,应用程序的运行状况和活动日志的详细信息

22、 打开 Eclipse,转到帮助菜单,然后单击 Eclipse Marketplace

23、 查找 IBM Eclipse tools for Bluemix 并单击 Install

24、 确认所选的功能并将其安装在 Eclipse 中

25、 下载应用程序启动器代码。点击 File Menu,将它导入到 Eclipse 中,选择 Import Existing Projects -> Workspace, 然后开始修改代码

图10 Java应用程序源文件

图10 Java 应用程序源文件

图11 Java应用程序日志

图11 Java 应用程序日志

图12 Java应用程序 - Liberty for Java

图12 Java 应用程序 - Liberty for Java

为什么选择 IBM Bluemix?

以下是使用 IBM Bluemix 的一些令人信服的理由:

  • 支持多种语言和平台
  • 免费试用
    1. 简化的注册过程
    2. 不需要信用卡
    3. 30 天试用期 - 配额 2GB 的运行时,支持 20 个服务,500 个 route
    4. 无限制地访问标准支持
    5. 没有生产使用限制
  • 仅为每个使用的运行时和服务付费
  • 快速设置 - 从而加快上架时间
  • 持续交付新功能
  • 与本地资源的安全集成
  • 用例
    1. Web 应用程序和移动后端
    2. API 和内部集成
  • DevOps 服务可部署在云上的 SaaS ,并支持持续交付:
    1. Web IDE
    2. SCM
    3. 敏捷规划
    4. 交货管道服务

via: http://opensourceforu.com/2016/11/build-deploy-manage-custom-apps-ibm-bluemix/

作者:MITESH_SONI 译者:Vic020 校对:Bestony

本文由 LCTT 组织编译,Linux中国 荣誉推出


完美阅读及发表评论,请猛击:https://linux.cn/article-8409-1.html?utm_source=rss&utm_medium=rss

Samba 系列(七):在 Samba AD DC 服务器上创建共享目录并映射到 Windows/Linux 客户

$
0
0

这篇文章将指导你如何在 Samba AD DC 服务器上创建共享目录,然后通过 GPO 把共享目录挂载到域中的其它 Windows 成员机,并且从 Windows 域控的角度来管理共享权限。

这篇文章也包括在加入域的 Linux 机器上如何使用 Samba4 域帐号来访问及挂载共享文件。

需求:

1、在 Ubuntu 系统上使用 Samba4 来创建活动目录架构

2、在 Linux 命令行下管理 Samba4 AD 架构

3、使用 Windows 10 的 RSAT 工具来管理 Samba4 活动目录架构

4、在 Windows 下管理 Samba4 AD 域管制器 DNS 和组策略

5、将另一台 Ubuntu DC 服务器加入到 Samba4 AD DC 实现双域控主机模式

6、使用 Rsync 命令同步两个 Samba4 AD DC 之间的 SysVol 目录

第一步:创建 Samba 文件共享

1、在 Samba AD DC 服务器上创建共享非常简单。首先创建一个你想通过 SMB 协议来分享文件的目录,然后添加下面的文件系统权限,这是为了让 Windows AD DC 管理员给 Windows 客户端分配相应的共享权限。

假设在 AD DC 服务器上有一个新的共享目录 '/nas' ,执行下面的命令来授予必要的权限。

# mkdir /nas
# chmod -R 775 /nas
# chown -R root:"domain users" /nas
# ls -alh | grep nas

Create Samba Shared Directory

创建 Samba 共享目录

2、当你在 Samba4 AD DC 服务器上创建完成共享目录之后,你还得修改 samba 配置文件,添加下面的参数以允许通过 SMB 协议来共享文件。

# nano /etc/samba/smb.conf

在配置文件末尾添加以下内容:

[nas]
path = /nas
read only = no

Configure Samba Shared Directory

配置 Samba 共享目录

3、最后,你需要通过下面的命令重启 Samba AD DC 服务,以让修改的配置生效:

# systemctl restart samba-ad-dc.service

第二步:管理 Samba 共享权限

4、我们准备使用在 Samba AD DC 服务器上创建的域帐号(包括用户和组)来访问这个共享目录(禁止 Linux 系统用户访问共享目录)。

可以直接通过 Windows 资源管理器来完成 Samba 共享权限的管理,就跟你在 Windows 资源管理器中设置其它文件夹权限的方法一样。

首先,使用具有管理员权限的 Samba4 AD 域帐号登录到 Windows 机器。然而在 Windows 机器上的资源管理器中输入双斜杠和 Samba AD DC 服务器的 IP 地址或主机名或者是 FQDN 来访问共享文件和设置权限。

\\adc1
或
\\192.168.1.254
或
\\adc1.tecmint.lan

Access Samba Share Directory from Windows

从 Windows 机器访问 Samba 共享目录

5、右键单击共享文件,选择属性来设置权限。打开安全选项卡,依次修改域账号和组权限。使用高级选项来调整权限。

Configure Samba Share Directory Permissions

配置 Samba 共享目录权限

可参考下面的截图来为指定 Samba AD DC 认证用户设置权限。

Manage Samba Share Directory User Permissions

设置 Samba 共享目录用户权限

6、你也可以使用其它方法来设置共享权限,打开计算机管理-->连接到另外一台计算机。

找到共享目录,右键单击你想修改权限的目录,选择属性,打开安全选项卡。你可以在这里修改任何权限,就跟上图的修改共享文件夹权限的方法一样。

Connect to Samba Share Directory Machine

连接到 Samba 共享目录服务器

Manage Samba Share Directory Properties

管理 Samba 共享目录属性

Assign Samba Share Directory Permissions to Users

为域用户授予共享目录权限

第三步:通过 GPO 来映射 Samba 文件共享

7、要想通过域组策略来挂载 Samba 共享的目录,你得先到一台已安装了 RSAT 工具 的服务器上,打开 AD DC 工具,右键单击域名,选择新建-->共享文件夹。

Map Samba Share Folder

映射 Samba 共享文件夹

8、为共享文件夹添加一个名字,然后输入共享文件夹的网络路径,如下图所示。完成后单击 OK 按钮,你就可以在右侧看到文件夹了。

Set Samba Shared Folder Name Location

设置 Samba 共享文件夹名称及路径

9、下一步,打开组策略管理控制台,找到当前域的默认域策略脚本,然后打开并编辑该文件。

在 GPM 编辑器界面,打开 GPM 编辑器,找到用户配置 --> 首选项 --> Windows 设置,然而右键单击驱动器映射,选择新建 --> 映射驱动。

Map Samba Share Folder in Windows

在 Windows 机器上映射 Samba 共享文件夹

10、通过单击右边的三个小点,在新窗口中查询并添加共享目录的网络位置,勾选重新连接复选框,为该目录添加一个标签,选择驱动盘符,然后单击 OK 按钮来保存和应用配置。

Configure Network Location for Samba Share Directory

配置 Samba 共享目录的网络位置

11、最后,为了在本地机器上强制应用 GPO 更改而不重启系统,打开命令行提示符,然而执行下面的命令。

gpupdate /force

Apply GPO Changes

应用 GPO 更改

12、当你在本地机器上成功应用策略后,打开 Windows 资源管理器,你就可以看到并访问共享的网络文件夹了,能否正常访问共享目录取决于你在前一步的授权操作。

如果没有在命令行下强制应用组策略,你网络中的其它客户机需要重启或重新登录系统才可以看到共享目录。

Samba Shared Network Volume on Windows

Windows 机器上挂载的 Samba 网络磁盘

第四步:从 Linux 客户端访问 Samba 共享目录

13、已加入 Samba AD DC 中的 Linux 成员机上的系统用户也可以可以使用 Samba 帐号访问或在本地挂载共享目录。

首先,你得通过下面的命令来确保 Samba 客户端和工具已经安装完成。

$ sudo apt-get install smbclient cifs-utils

14、为了列出域环境中的共享目录,你可以通过下面的命令加入指定的域控服务器主机名来查询:

$ smbclient –L your_domain_controller –U%
或
$ smbclient –L \\adc1 –U%

List Samba Share Directory in Linux

在 Linux 机器上列出 Samba 共享目录

15、在命令行下使用域帐号以交互试方式连接到 Samba 共享目录:

$ sudo smbclient //adc/share_name -U domain_user

在命令行下,你可以列出共享目录内容,下载或上传文件到共享目录,或者执行其它操作。使用 ? 来查询所有可用的 smbclient 命令。

Connect Samba Share Directory in Linux

在 Linux 机器上连接 Samba 共享目录

16、在 Linux 机器上使用下面的命令来挂载 samba 共享目录。

$ sudo mount //adc/share_name /mnt -o username=domain_user

Mount Samba Share Directory in Linux

在 Linux 机器上挂载 samba 共享目录

根据实际情况,依次替换主机名、共享目录名、挂载点和域帐号。使用 mount 命令加上管道符和 grep 命令来过滤出 cifs 类型的文件系统。

通过上面的测试,我们可以看出,在 Samba4 AD DC 服务器上配置共享目录仅使用 Windows 访问控制列表( ACL ),而不是 POSIX ACL 。

通过文件共享把 Samba 配置为域成员以使用其它网络共享功能。同时,在另一个域控制器上配置 Windbindd 服务 ——在你开始发起网络共享文件之前。


作者简介:

我是一个电脑迷,开源 Linux 系统和软件爱好者,有 4 年多的 Linux 桌面、服务器系统使用和 Base 编程经验。

译者简介:

春城初春/春水初生/春林初盛/春風十裏不如妳 rusking


via: http://www.tecmint.com/create-shared-directory-on-samba-ad-dc-and-map-to-windows-linux/

作者:Matei Cezar 译者:rusking 校对:wxy

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8410-1.html?utm_source=rss&utm_medium=rss

工程师和市场营销人员之间能够相互学习什么?

$
0
0

营销人员觉得工程师在工作中都太严谨了;而工程师则认为营销人员毫无用处。但是他们都错了。

What engineers and marketers can learn from each other

在 B2B 行业从事多年的销售实践过程中,我经常听到工程师对营销人员的各种误解。下面这些是比较常见的:

  • “搞市场营销真是浪费钱,还不如把更多的资金投入到实际的产品开发中来。”
  • “那些营销人员只是一个劲儿往墙上贴各种广告,还祈祷着它们不要掉下来。这么做有啥科学依据啊?”
  • “谁愿意去看哪些广告啊?”
  • “对待一个营销人员最好的办法就是不听,不看,也不理睬。”

这是我最感兴趣的一点:

“市场营销无足轻重。”

最后一点说的不对,而且不仅如此,它实际上是阻碍一个公司创新的巨大绊脚石。

我来跟大家解释一下原因吧。

看到自己的身影

这些工程师的的评论让我十分的苦恼,因为我从中看到了自己当年的身影。

你们知道吗?我曾经也跟你们一样是一位自豪的技术极客。我在 Rensselaer Polytechnic 学院的电气工程专业本科毕业后便在美国空军担任军官开始了我的职业生涯,而且美国空军在那段时间还发动了沙漠风暴行动。在那里我主要负责开发并部属一套智能的实时战况分析系统,用于综合几个的数据源来构建出战场态势。

在我离开空军之后,我本打算去麻省理工学院攻读博士学位。但是上校强烈建议我去报读这个学校的商学院。“你真的想一辈子待实验室里吗?”他问我。“你想就这么去大学里当个教书匠吗?Jackie ,你在组织管理那些复杂的工作中比较有天赋。我觉得你非常有必要去了解下 MIT 的斯隆商学院。”

我觉得自己也可以同时参加一些 MIT 技术方面的课程,因此我采纳了他的建议。然而,如果要参加市场营销管理方面的课程,我还有很长的路要走,这完全是在浪费时间。因此,在日常工作学习中,我始终是用自己所擅长的分析能力去解决一切问题。

不久后,我在波士顿咨询集团公司做咨询顾问工作。在那六年的时间里,我经常听到大家对我的评论: “Jackie ,你太没远见了。考虑问题也不够周全。你总是通过自己的分析去找答案。”

确实如此啊,我很赞同他们的想法——因为这个世界的工作方式本该如此,任何问题都要基于数据进行分析,不对吗?直到现在我才意识到(我多么希望自己早一些发现自己的问题)自己以前惯用的分析问题的方法遗漏了很多重要的东西:开放的心态、艺术修养、情感——人和创造性思维相关的因素。

我在 2001 年 9 月 11 日加入达美航空公司不久后,被调去管理消费者市场部门,之前我意识到的所有问题变得更加明显。市场方面本来不是我的强项,但是在公司需要的情况下,我也愿意出手相肋。

但是突然之间,我一直惯用的方法获取到的分析结果却与实际情况完全相反。这个问题导致上千人(包括航线内外的人)受到影响。我忽略了一个很重要的人本身的情感因素。我所面临的问题需要各种各样的解决方案才能处理,而不是简单的从那些死板的数据中就能得到答案。

那段时间,我快速地学到了很多东西,因为如果我们想把达美航空公司恢复到正常状态,还需要做很多的工作——市场营销更像是一个以解决问题为导向、以用户为中心的充满挑战性的大工程,只是销售人员和工程师这两大阵营都没有迅速地意识到这个问题。

两大文化差异

工程管理和市场营销之间的这个“巨大鸿沟”确实是根深蒂固的,这跟(著名的科学家、小说家) C.P. Snow 提出的“两大文化差异”问题很相似。具有科学素质的工程师和具有艺术细胞的营销人员操着不同的语言,不同的文化观念导致他们不同的价值取向。

但是,事实上他们比想象中有更多的相似之处。一个由微软、谷歌和美国国家科学基金会共同赞助的华盛顿大学的最新研究发现了“一个伟大软件工程师必须具备哪些优秀的素质”,毫无疑问,一个伟大的销售人员同样也应该具备这些素质。例如,专家们给出的一些优秀品质如下:

  • 充满激情
  • 性格开朗
  • 强烈的好奇心
  • 技艺精湛
  • 解决复杂难题的能力

这些只是其中很小的一部分!当然,并不是所有的素质都适用于市场营销人员,但是如果用文氏图来表示这“两大文化”的交集,就很容易看出营销人员和工程师之间的关系要远比我们想象中密切得多。他们都是竭力去解决与用户或客户相关的难题,只是他们所采取的方式和角度不一致罢了。

看到上面的那几点后,我深深的陷入思考:要是这两类员工彼此之间再多了解对方一些会怎样呢?这会给公司带来很强大的动力吧?

确实如此。我在红帽公司就亲眼看到过样的情形,我身边都是一些早些年肯定被我当成“想法疯狂”而无视的人。而且我猜销售人员看到工程师后(同时或某一次),心想,“这些数据呆瓜,真是只见树木不见森林。”

现在我才明白了公司里有这两种人才的重要性。在现实工作当中,工程师和营销人员都是围绕着客户、创新及数据分析来完成工作。如果他们能够懂得相互尊重、彼此理解、相辅相成,那么我们将会看到公司里所产生的那种积极强大的动力,这种超乎寻常的革新力量要远比两个独立的团队强大得多。

听一听疯子(和呆瓜)的想法

成功案例:《开放式组织》

在红帽任职期间,我的主要工作就是想办法提升公司的品牌影响力——但是就是给我一百万年我也不会想到让公司的 CEO 去写一本书。我把公司多个部门的“想法疯狂”的同事召集在一起,希望他们帮我设计出一个新颖的解决方案来提升公司的影响力,结果他们提出让公司的 CEO 写书这样一个想法。

当我听到这个想法的时候,我很快意识到这正是典型的红帽方式:它将对整个开源社区的从业者带来很重要的参考价值,同时也有助于宣扬开源精神。通过优先考虑这两方面的作用,我们提升了红帽在整个开源软件世界中的品牌价值——红帽是一个可靠的随时准备着为客户在数字化颠覆年代指明方向的公司。

这一点才是主要的:确切的说是指导红帽工程师解决代码问题的共同精神力量。 Red Hatters 小组敦促我出版《开放式组织》,这显示出来自内部和外部社区的程序员共同推动整个开源社区发展的强大动力之一:那就是强烈的共享欲望。

最后,要把《开放式组织》这本书完成,还需要大家的共同能力,包括工程师们强大的数据分析能力和营销人员美好的艺术素养。这个项目让我更加坚定自己的想法,工程师和营销人员有更多的相似之处。

但是,有些东西我还得强调下:开放模式的实现,要求公司上下没有任何偏见,不能偏袒工程师和市场营销人员任何一方文化。一个更加理想的开放式环境能够促使员工之间和平共处,并在这个组织规定的范围内点燃大家的热情。

这对我来说如春风拂面。

(图片来源:opensource.com)


作者简介:

Jackie Yeaney —— Ellucian 公司市场总监


via: https://opensource.com/open-organization/17/1/engineers-marketers-can-learn

作者:Jackie Yeaney 译者:rusking 校对:Bestony, wxy

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8411-1.html?utm_source=rss&utm_medium=rss

漫画赏析:消沉的程序员 13

$
0
0

嘿嘿,明明你有很厉害的东西想要分享给自己的同伴,可是他们并不能理解那意味着什么,然后拿一些简单的不能再简单的事情来问你。是不是感觉好尴尬呢。看来有些事儿,分享也要看人的吧,否则表错情真的是大写的失落。


译者简介:

GHLandy —— 生活中所有欢乐与苦闷都应藏在心中,有些事儿注定无人知晓,自己也无从说起。


 

via: http://turnoff.us/geek/the-depressed-developer-13/

作者:Daniel Stori 译者:GHLandy 校对:wxy 合成:GHLandy 点评:GHLandy

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


完美阅读及发表评论,请猛击:https://linux.cn/article-8414-1.html?utm_source=rss&utm_medium=rss

Viewing all 9060 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>