Merge remote-tracking branch 'LCTT/master'

This commit is contained in:
Xingyu.Wang 2018-10-02 16:33:57 +08:00
commit 9c7a5bf3fc
8 changed files with 306 additions and 325 deletions

View File

@ -1,23 +1,21 @@
备份安装包并在全新安装的 Ubuntu 上恢复它们 备份安装包并在全新安装的 Ubuntu 上恢复它们
====== ======
![](https://www.ostechnix.com/wp-content/uploads/2018/09/apt-clone-720x340.png) ![](https://www.ostechnix.com/wp-content/uploads/2018/09/apt-clone-720x340.png)
在多个 Ubuntu 系统上安装同一组软件包是一项耗时且无聊的任务。你不会想花时间在多个系统上反复安装相同的软件包。在类似架构的 Ubuntu 系统上安装软件包时,有许多方法可以使这项任务更容易。你可以方便地通过 [**Aptik**][1] 并点击几次鼠标将以前的 Ubuntu 系统的应用程序、设置和数据迁移到新安装的系统中。或者,你可以使用软件包管理器(例如 APT获取[**备份的已安装软件包的完整列表**][2],然后在新安装的系统上安装它们。今天,我了解到还有另一个专用工具可以完成这项工作。来看一下 **apt-clone**,这是一个简单的工具,可以让你为 Debian/Ubuntu 系统创建一个已安装的软件包列表,这些软件包可以在新安装的系统或容器上或目录中恢复。 在多个 Ubuntu 系统上安装同一组软件包是一项耗时且无聊的任务。你不会想花时间在多个系统上反复安装相同的软件包。在类似架构的 Ubuntu 系统上安装软件包时,有许多方法可以使这项任务更容易。你可以方便地通过 [Aptik][1] 并点击几次鼠标将以前的 Ubuntu 系统的应用程序、设置和数据迁移到新安装的系统中。或者,你可以使用软件包管理器(例如 APT获取[备份的已安装软件包的完整列表][2],然后在新安装的系统上安装它们。今天,我了解到还有另一个专用工具可以完成这项工作。来看一下 `apt-clone`,这是一个简单的工具,可以让你为 Debian/Ubuntu 系统创建一个已安装的软件包列表,这些软件包可以在新安装的系统或容器上或目录中恢复。
Apt-clone 会帮助你处理你想要的情况, `apt-clone` 会帮助你处理你想要的情况,
* 在运行类似 Ubuntu及衍生版的多个系统上安装一致的应用程序。 * 在运行类似 Ubuntu及衍生版的多个系统上安装一致的应用程序。
  * 经常在多个系统上安装相同的软件包。 * 经常在多个系统上安装相同的软件包。
  * 备份已安装的应用程序的完整列表,并在需要时随时随地恢复它们。 * 备份已安装的应用程序的完整列表,并在需要时随时随地恢复它们。
在本简要指南中,我们将讨论如何在基于 Debian 的系统上安装和使用 `apt-clone`。我在 Ubuntu 18.04 LTS 上测试了这个程序,但它应该适用于所有基于 Debian 和 Ubuntu 的系统。
在本简要指南中,我们将讨论如何在基于 Debian 的系统上安装和使用 Apt-clone。我在 Ubuntu 18.04 LTS 上测试了这个程序,但它应该适用于所有基于 Debian 和 Ubuntu 的系统。
### 备份已安装的软件包并在新安装的 Ubuntu 上恢复它们 ### 备份已安装的软件包并在新安装的 Ubuntu 上恢复它们
Apt-clone 在默认仓库中有。要安装它,只需在终端输入以下命令: `apt-clone` 在默认仓库中有。要安装它,只需在终端输入以下命令:
``` ```
$ sudo apt install apt-clone $ sudo apt install apt-clone
@ -27,11 +25,10 @@ $ sudo apt install apt-clone
``` ```
$ mkdir ~/mypackages $ mkdir ~/mypackages
$ sudo apt-clone clone ~/mypackages $ sudo apt-clone clone ~/mypackages
``` ```
上面的命令将我的 Ubuntu 中所有已安装的软件包保存在 **~/mypackages** 目录下名为 **apt-clone-state-ubuntuserver.tar.gz** 的文件中。 上面的命令将我的 Ubuntu 中所有已安装的软件包保存在 `~/mypackages` 目录下名为 `apt-clone-state-ubuntuserver.tar.gz` 的文件中。
要查看备份文件的详细信息,请运行: 要查看备份文件的详细信息,请运行:
@ -53,7 +50,7 @@ Date: Sat Sep 15 10:23:05 2018
$ sudo apt-clone restore apt-clone-state-ubuntuserver.tar.gz $ sudo apt-clone restore apt-clone-state-ubuntuserver.tar.gz
``` ```
请注意,此命令将覆盖你现有的 **/etc/apt/sources.list** 并将安装/删除软件包。警告过你了!此外,只需确保目标系统是相同的架构和操作系统。例如,如果源系统是 18.04 LTS 64位那么目标系统必须也是相同的。 请注意,此命令将覆盖你现有的 `/etc/apt/sources.list` 并将安装/删除软件包。警告过你了!此外,只需确保目标系统是相同的 CPU 架构和操作系统。例如,如果源系统是 18.04 LTS 64 位,那么目标系统必须也是相同的。
如果你不想在系统上恢复软件包,可以使用 `--destination /some/location` 选项将克隆复制到这个文件夹中。 如果你不想在系统上恢复软件包,可以使用 `--destination /some/location` 选项将克隆复制到这个文件夹中。
@ -61,7 +58,7 @@ $ sudo apt-clone restore apt-clone-state-ubuntuserver.tar.gz
$ sudo apt-clone restore apt-clone-state-ubuntuserver.tar.gz --destination ~/oldubuntu $ sudo apt-clone restore apt-clone-state-ubuntuserver.tar.gz --destination ~/oldubuntu
``` ```
在此例中,上面的命令将软件包恢复到 **~/oldubuntu** 中。 在此例中,上面的命令将软件包恢复到 `~/oldubuntu` 中。
有关详细信息,请参阅帮助部分: 有关详细信息,请参阅帮助部分:
@ -75,7 +72,7 @@ $ apt-clone -h
$ man apt-clone $ man apt-clone
``` ```
**建议阅读:** 建议阅读:
+ [Systemback - 将 Ubuntu 桌面版和服务器版恢复到以前的状态][3] + [Systemback - 将 Ubuntu 桌面版和服务器版恢复到以前的状态][3]
+ [Cronopete - Linux 下的苹果时间机器][4] + [Cronopete - Linux 下的苹果时间机器][4]
@ -94,7 +91,7 @@ via: https://www.ostechnix.com/backup-installed-packages-and-restore-them-on-fre
作者:[SK][a] 作者:[SK][a]
选题:[lujun9972](https://github.com/lujun9972) 选题:[lujun9972](https://github.com/lujun9972)
译者:[geekpi](https://github.com/geekpi) 译者:[geekpi](https://github.com/geekpi)
校对:[校对者ID](https://github.com/校对者ID) 校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -0,0 +1,75 @@
openmediavault 入门:一个家庭 NAS 解决方案
======
> 这个网络附属文件服务提供了一系列可靠的功能,并且易于安装和配置。
![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/bus-cloud.png?itok=vz0PIDDS)
面对许多可供选择的云存储方案,一些人可能会质疑一个家庭 NAS<ruby>网络附属存储<rt>network-attached storage</rt></ruby>)服务器的价值。毕竟,当所有你的文件存储在云上,你就不需要为你自己云服务的维护、更新和安全担忧。
但是,这不完全对,是不是?你有一个家庭网络,所以你已经要负责维护网络的健康和安全。假定你已经维护一个家庭网络,那么[一个家庭 NAS][1]并不会增加额外负担。反而你能从少量的工作中得到许多的好处。
你可以为你家里所有的计算机进行备份(你也可以备份到其它地方)。构架一个存储电影、音乐和照片的媒体服务器,无需担心互联网连接是否连通。在家里的多台计算机上处理大型文件,不需要等待从互联网某个其它计算机传输这些文件过来。另外,可以让 NAS 与其他服务配合工作,如托管本地邮件或者家庭 Wiki。也许最重要的是构架家庭 NAS数据完全是你的它始终处于在控制下随时可访问。
接下来的问题是如何选择 NAS 方案。当然,你可以购买预先搭建好的商品,并在一天内搞定,但是这会有什么乐趣呢?实际上,尽管拥有一个能为你搞定一切的设备很棒,但是有一个可以修复和升级的钻机平台更棒。这就我近期的需求,我选择安装和配置 [openmediavault][2]。
### 为什么选择 openmediavault
市面上有不少开源的 NAS 解决方案,其中有些肯定比 openmediavault 流行。当我询问周遭,例如 [freeNAS][3] 这样的最常被推荐给我。那么为什么我不采纳他们的建议呢?毕竟,用它的人更多。[基于 FreeNAS 官网的一份对比数据][4],它包含了很多的功能,并且提供许多支持选项。这当然都对。但是 openmediavault 也不差。它实际上是基于 FreeNAS 早期版本的,虽然它在下载量和功能方面较少,但是对于我的需求而言,它已经相当足够了。
另外一个因素是它让我感到很舒适。openmediavault 的底层操作系统是 [Debian][5],然而 FreeNAS 是 [FreeBSD][6]。由于我个人对 FreeBSD 不是很熟悉,因此如果我的 NAS 出现故障,必定难于在 FreeBSD 上修复故障。同样的,也会让我觉得难于优化或添加一些服务到这个机器上。当然,我可以学习 FreeBSD 以更熟悉它,但是我已经在家里构架了这个 NAS我发现如果完成它只需要较少的“学习机会”那么构建 NAS 往往会更成功。
当然每个人情况都不同所以你要自己调研然后作出最适合自己方案的决定。FreeNAS 对于许多人似乎都是不错的解决方案。openmediavault 正是适合我的解决方案。
### 安装与配置
在 [openmediavault 文档][7]里详细记录了安装步骤,所以我不在这里重述了。如果你曾经安装过任何一个 Linux 发行版,大部分安装步骤都是很类似的(虽然是在相对丑陋的 [Ncurses][8] 界面,而不像你或许在现代发行版里见到的)。我按照 [专用的驱动器][9] 的说明来安装它。这些说明不但很好,而且相当精炼的。当你搞定这些步骤,就安装好了一个基本的系统,但是你还需要做更多才能真正构建好 NAS 来存储各种文件。例如,专用驱动器方式需要在硬盘驱动器上安装 openmediavault但那是指你的操作系统的驱动器而不是和网络上其他计算机共享的驱动器。你需要自己把这些建立起来并且配置好。
你要做的第一件事是加载用来管理的网页界面,并修改默认密码。这个密码和之前你安装过程设置的 root 密码是不同的。这是网页界面的管理员账号,默认的账户和密码分别是 `admin``openmediavault`,当你登入后要马上修改。
#### 设置你的驱动器
一旦你安装好 openmediavault你需要它为你做一些工作。逻辑上的第一个步骤是设置好你即将用来作为存储的驱动器。在这里我假定你已经物理上安装好它们了所以接下来你要做的就是让 openmediavault 识别和配置它们。第一步是确保这些磁盘是可见的。侧边栏菜单有很多选项而且被精心的归类了。选择“Storage -> Disks”。一旦你点击该菜单你应该能够看到所有你已经安装到该服务器的驱动包括那个你已经用来安装 openmediavault 的驱动器。如果你没有在那里看到所有驱动器点击“Scan”按钮去看是否能够挂载它们。通常这不会是一个问题。
你可以独立的挂载和设置这些驱动器用于文件共享,但是对于一个文件服务器,你会想要一些冗余。你想要能够把很多驱动器当作一个单一卷,并能够在某一个驱动器出现故障时恢复你的数据,或者空间不足时安装新驱动器。这意味你将需要一个 [RAID][10]。你想要的什么特定类型的 RAID 的这个主题是一个大坑,值得另写一篇文章专门来讲述它(而且已经有很多关于该主题的文章了),但是简而言之是你将需要不止一个驱动器,最好的情况下,你所有的驱动都存储一样的容量。
openmediavault 支持所有标准的 RAID 级别所以这里很简单。可以在“Storage -> RAID Management”里配置你的 RAID。配置是相当简单的点击“Create”按钮在你的 RAID 阵列里选择你想要的磁盘和你想要使用的 RAID 级别并给这个阵列一个名字。openmediavault 为你处理剩下的工作。这里没有复杂的命令行,也不需要试图记住 `mdadm` 命令的一些选项参数。在我的例子,我有六个 2TB 驱动器,设置成了 RAID 10。
当你的 RAID 构建好了,基本上你已经有一个地方可以存储东西了。你仅仅需要设置一个文件系统。正如你的桌面系统,一个硬盘驱动器在没有格式化的情况下是没什么用处的。所以下一个你要去的地方的是位于 openmediavault 控制面板里的“Storage -> File Systems”。和配置你的 RAID 一样点击“Create”按钮然后跟着提示操作。如果你在你的服务器上只有一个 RAID ,你应该可以看到一个像 `md0` 的东西。你也需要选择文件系统的类别。如果你不能确定,选择标准的 ext4 类型即可。
#### 定义你的共享
亲爱的!你有个地方可以存储文件了。现在你只需要让它在你的家庭网络中可见。可以从在 openmediavault 控制面板上的“Services”部分上配置。当谈到在网络上设置文件共享主要有两个选择NFS 或者 SMB/CIFS. 根据以往经验,如果你网络上的所有计算机都是 Linux 系统,那么你使用 NFS 会更好。然而当你家庭网络是一个混合环境是一个包含Linux、Windows、苹果系统和嵌入式设备的组合那么 SMB/CIFS 可能会是你合适的选择。
这些选项不是互斥的。实际上,你可以在服务器上运行这两个服务,同时拥有这些服务的好处。或者你可以混合起来,如果你有一个特定的设备做特定的任务。不管你的使用场景是怎样,配置这些服务是相当简单。点击你想要的服务,从它配置中激活它,和在网络中设定你想要的共享文件夹为可见。在基于 SMB/CIFS 共享的情况下,相对于 NFS 多了一些可用的配置,但是一般用默认配置就挺好的,接着可以在默认基础上修改配置。最酷的事情是它很容易配置,同时也很容易在需要的时候修改配置。
#### 用户配置
基本上已将完成了。你已经在 RAID 中配置了你的驱动器。你已经用一种文件系统格式化了 RAID并且你已经在格式化的 RAID 上设定了共享文件夹。剩下来的一件事情是配置那些人可以访问这些共享和可以访问多少。这个可以在“Access Rights Management”配置里设置。使用“User”和“Group”选项来设定可以连接到你共享文件夹的用户并设定这些共享文件的访问权限。
一旦你完成用户配置,就几乎准备好了。你需要从不同客户端机器访问你的共享,但是这是另外一个可以单独写个文章的话题了。
玩得开心!
--------------------------------------------------------------------------------
via: https://opensource.com/article/18/9/openmediavault
作者:[Jason van Gumster][a]
选题:[lujun9972](https://github.com/lujun9972)
译者:[jamelouis](https://github.com/jamelouis)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/mairin
[1]: https://opensource.com/article/18/8/automate-backups-raspberry-pi
[2]: https://openmediavault.org
[3]: https://freenas.org
[4]: http://www.freenas.org/freenas-vs-openmediavault/
[5]: https://www.debian.org/
[6]: https://www.freebsd.org/
[7]: https://openmediavault.readthedocs.io/en/latest/installation/index.html
[8]: https://invisible-island.net/ncurses/
[9]: https://openmediavault.readthedocs.io/en/latest/installation/via_iso.html
[10]: https://en.wikipedia.org/wiki/RAID

View File

@ -1,22 +1,22 @@
如何在 Linux 中查看进程占用的端口号 如何在 Linux 中查看进程占用的端口号
====== ======
对于 Linux 系统管理员来说,清楚某个服务是否正确地绑定或监听某个端口,是至关重要的。如果你需要处理端口相关的问题,这篇文章可能会对你有用。 对于 Linux 系统管理员来说,清楚某个服务是否正确地绑定或监听某个端口,是至关重要的。如果你需要处理端口相关的问题,这篇文章可能会对你有用。
端口是 Linux 系统上特定进程之间逻辑连接的标识,包括物理端口和软件端口。由于 Linux 操作系统是一个软件,因此本文只讨论软件端口。软件端口始终与主机的 IP 地址和相关的通信协议相关联,因此端口常用于区分应用程序。大部分涉及到网络的服务都必须打开一个套接字来监听传入的网络请求,而每个服务都使用一个独立的套接字。 端口是 Linux 系统上特定进程之间逻辑连接的标识,包括物理端口和软件端口。由于 Linux 操作系统是一个软件,因此本文只讨论软件端口。软件端口始终与主机的 IP 地址和相关的通信协议相关联,因此端口常用于区分应用程序。大部分涉及到网络的服务都必须打开一个套接字来监听传入的网络请求,而每个服务都使用一个独立的套接字。
**推荐阅读:** **推荐阅读:**
**(#)** [在 Linux 上查看进程 ID 的 4 种方法][1]
**(#)** [在 Linux 上终止进程的 3 种方法][2]
套接字是和 IP 地址软件端口和协议结合起来使用的而端口号对传输控制协议Transmission Control Protocol, TCP和 用户数据报协议User Datagram Protocol, UDP协议都适用TCP 和 UDP 都可以使用0到65535之间的端口号进行通信。 - [在 Linux 上查看进程 ID 的 4 种方法][1]
- [在 Linux 上终止进程的 3 种方法][2]
套接字是和 IP 地址、软件端口和协议结合起来使用的而端口号对传输控制协议TCP和用户数据报协议UDP协议都适用TCP 和 UDP 都可以使用 0 到 65535 之间的端口号进行通信。
以下是端口分配类别: 以下是端口分配类别:
* `0-1023:` 常用端口和系统端口 * 0 - 1023 常用端口和系统端口
* `1024-49151:` 软件的注册端口 * 1024 - 49151 软件的注册端口
* `49152-65535:` 动态端口或私有端口 * 49152 - 65535 动态端口或私有端口
在 Linux 上的 `/etc/services` 文件可以查看到更多关于保留端口的信息。 在 Linux 上的 `/etc/services` 文件可以查看到更多关于保留端口的信息。
@ -74,29 +74,25 @@ telnet 23/udp
# 24 - private mail system # 24 - private mail system
lmtp 24/tcp # LMTP Mail Delivery lmtp 24/tcp # LMTP Mail Delivery
lmtp 24/udp # LMTP Mail Delivery lmtp 24/udp # LMTP Mail Delivery
``` ```
可以使用以下六种方法查看端口信息。 可以使用以下六种方法查看端口信息。
* `ss:` ss 可以用于转储套接字统计信息。 * `ss`:可以用于转储套接字统计信息。
* `netstat:` netstat 可以显示打开的套接字列表。 * `netstat`:可以显示打开的套接字列表。
* `lsof:` lsof 可以列出打开的文件。 * `lsof`:可以列出打开的文件。
* `fuser:` fuser 可以列出那些打开了文件的进程的进程 ID。 * `fuser`:可以列出那些打开了文件的进程的进程 ID。
* `nmap:` nmap 是网络检测工具和端口扫描程序。 * `nmap`:是网络检测工具和端口扫描程序。
* `systemctl:` systemctl 是 systemd 系统的控制管理器和服务管理器。 * `systemctl`:是 systemd 系统的控制管理器和服务管理器。
以下我们将找出 `sshd` 守护进程所使用的端口号。 以下我们将找出 `sshd` 守护进程所使用的端口号。
### 方法1使用 ss 命令 ### 方法 1使用 ss 命令
`ss` 一般用于转储套接字统计信息。它能够输出类似于 `netstat` 输出的信息,但它可以比其它工具显示更多的 TCP 信息和状态信息。 `ss` 一般用于转储套接字统计信息。它能够输出类似于 `netstat` 输出的信息,但它可以比其它工具显示更多的 TCP 信息和状态信息。
它还可以显示所有类型的套接字统计信息,包括 PACKET、TCP、UDP、DCCP、RAW、Unix 域等。 它还可以显示所有类型的套接字统计信息,包括 PACKET、TCP、UDP、DCCP、RAW、Unix 域等。
``` ```
# ss -tnlp | grep ssh # ss -tnlp | grep ssh
LISTEN 0 128 *:22 *:* users:(("sshd",pid=997,fd=3)) LISTEN 0 128 *:22 *:* users:(("sshd",pid=997,fd=3))
@ -111,7 +107,7 @@ LISTEN 0 128 *:22 *:* users:(("sshd",pid=997,fd=3))
LISTEN 0 128 :::22 :::* users:(("sshd",pid=997,fd=4)) LISTEN 0 128 :::22 :::* users:(("sshd",pid=997,fd=4))
``` ```
### 方法2使用 netstat 命令 ### 方法 2使用 netstat 命令
`netstat` 能够显示网络连接、路由表、接口统计信息、伪装连接以及多播成员。 `netstat` 能够显示网络连接、路由表、接口统计信息、伪装连接以及多播成员。
@ -131,7 +127,7 @@ tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1208/sshd
tcp6 0 0 :::22 :::* LISTEN 1208/sshd tcp6 0 0 :::22 :::* LISTEN 1208/sshd
``` ```
### 方法3使用 lsof 命令 ### 方法 3使用 lsof 命令
`lsof` 能够列出打开的文件,并列出系统上被进程打开的文件的相关信息。 `lsof` 能够列出打开的文件,并列出系统上被进程打开的文件的相关信息。
@ -153,7 +149,7 @@ sshd 1208 root 4u IPv6 20921 0t0 TCP *:ssh (LISTEN)
sshd 11592 root 3u IPv4 27744 0t0 TCP vps.2daygeek.com:ssh->103.5.134.167:49902 (ESTABLISHED) sshd 11592 root 3u IPv4 27744 0t0 TCP vps.2daygeek.com:ssh->103.5.134.167:49902 (ESTABLISHED)
``` ```
### 方法4使用 fuser 命令 ### 方法 4使用 fuser 命令
`fuser` 工具会将本地系统上打开了文件的进程的进程 ID 显示在标准输出中。 `fuser` 工具会将本地系统上打开了文件的进程的进程 ID 显示在标准输出中。
@ -165,7 +161,7 @@ sshd 11592 root 3u IPv4 27744 0t0 TCP vps.2daygeek.com:ssh->103.5.134.167:49902
root 49339 F.... sshd root 49339 F.... sshd
``` ```
### 方法5使用 nmap 命令 ### 方法 5使用 nmap 命令
`nmap`“Network Mapper”是一款用于网络检测和安全审计的开源工具。它最初用于对大型网络进行快速扫描但它对于单个主机的扫描也有很好的表现。 `nmap`“Network Mapper”是一款用于网络检测和安全审计的开源工具。它最初用于对大型网络进行快速扫描但它对于单个主机的扫描也有很好的表现。
@ -185,13 +181,14 @@ Service detection performed. Please report any incorrect results at http://nmap.
Nmap done: 1 IP address (1 host up) scanned in 0.44 seconds Nmap done: 1 IP address (1 host up) scanned in 0.44 seconds
``` ```
### 方法6使用 systemctl 命令 ### 方法 6使用 systemctl 命令
`systemctl` 是 systemd 系统的控制管理器和服务管理器。它取代了旧的 SysV init 系统管理,目前大多数现代 Linux 操作系统都采用了 systemd。 `systemctl` 是 systemd 系统的控制管理器和服务管理器。它取代了旧的 SysV 初始化系统管理,目前大多数现代 Linux 操作系统都采用了 systemd。
**推荐阅读:** **推荐阅读:**
**(#)** [chkservice Linux 终端上的 systemd 单元管理工具][3]
**(#)** [如何查看 Linux 系统上正在运行的服务][4] - [chkservice Linux 终端上的 systemd 单元管理工具][3]
- [如何查看 Linux 系统上正在运行的服务][4]
``` ```
# systemctl status sshd # systemctl status sshd
@ -258,7 +255,7 @@ via: https://www.2daygeek.com/how-to-find-out-which-port-number-a-process-is-usi
作者:[Prakash Subramanian][a] 作者:[Prakash Subramanian][a]
选题:[lujun9972](https://github.com/lujun9972) 选题:[lujun9972](https://github.com/lujun9972)
译者:[HankChow](https://github.com/HankChow) 译者:[HankChow](https://github.com/HankChow)
校对:[校对者ID](https://github.com/校对者ID) 校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -1,3 +1,5 @@
BriFuture is translating this article
The users home dashboard in our app, AlignHow we built our first full-stack JavaScript web app in three weeks The users home dashboard in our app, AlignHow we built our first full-stack JavaScript web app in three weeks
============================================================ ============================================================

View File

@ -1,133 +0,0 @@
HankChow translating
How To Easily And Safely Manage Cron Jobs In Linux
======
![](https://www.ostechnix.com/wp-content/uploads/2018/08/Crontab-UI-720x340.jpg)
When it comes to schedule tasks in Linux, which utility comes to your mind first? Yeah, you guessed it right. **Cron!** The cron utility helps you to schedule commands/tasks at specific time in Unix-like operating systems. We already published a [**beginners guides to Cron jobs**][1]. I have a few years experience in Linux, so setting up cron jobs is no big deal for me. But, it is not piece of cake for newbies. The noobs may unknowingly do small mistakes while editing plain text crontab and bring down all cron jobs. Just in case, if you think you might mess up with your cron jobs, there is a good alternative way. Say hello to **Crontab UI** , a web-based tool to easily and safely manage cron jobs in Unix-like operating systems.
You dont need to manually edit the crontab file to create, delete and manage cron jobs. Everything can be done via a web browser with a couple mouse clicks. Crontab UI allows you to easily create, edit, pause, delete, backup cron jobs, and even import, export and deploy jobs on other machines without much hassle. Error log, mailing and hooks support also possible. It is free, open source and written using NodeJS.
### Installing Crontab UI
Installing Crontab UI is just a one-liner command. Make sure you have installed NPM. If you havent install npm yet, refer the following link.
Next, run the following command to install Crontab UI.
```
$ npm install -g crontab-ui
```
Its that simple. Let us go ahead and see how to manage cron jobs using Crontab UI.
### Easily And Safely Manage Cron Jobs In Linux
To launch Crontab UI, simply run:
```
$ crontab-ui
```
You will see the following output:
```
Node version: 10.8.0
Crontab UI is running at http://127.0.0.1:8000
```
Now, open your web browser and navigate to **<http://127.0.0.1:8000>**. Make sure the port no 8000 is allowed in your firewall/router.
Please note that you can only access Crontab UI web dashboard within the local system itself.
If you want to run Crontab UI with your systems IP and custom port (so you can access it from any remote system in the network), use the following command instead:
```
$ HOST=0.0.0.0 PORT=9000 crontab-ui
Node version: 10.8.0
Crontab UI is running at http://0.0.0.0:9000
```
Now, Crontab UI can be accessed from the any system in the nework using URL **http:// <IP-Address>:9000**.
This is how Crontab UI dashboard looks like.
![](https://www.ostechnix.com/wp-content/uploads/2018/08/crontab-ui-dashboard.png)
As you can see in the above screenshot, Crontab UI dashbaord is very simply. All options are self-explanatory.
To exit Crontab UI, press **CTRL+C**.
**Create, edit, run, stop, delete a cron job**
To create a new cron job, click on “New” button. Enter your cron job details and click Save.
1. Name the cron job. It is optional.
2. The full command you want to run.
3. Choose schedule time. You can either choose the quick schedule time, (such as Startup, Hourly, Daily, Weekly, Monthly, Yearly) or set the exact time to run the command. After you choosing the schedule time, the syntax of the cron job will be shown in **Jobs** field.
4. Choose whether you want to enable error logging for the particular job.
Here is my sample cron job.
![](https://www.ostechnix.com/wp-content/uploads/2018/08/create-new-cron-job.png)
As you can see, I have setup a cron job to clear pacman cache at every month.
Similarly, you can create any number of jobs as you want. You will see all cron jobs in the dashboard.
![](https://www.ostechnix.com/wp-content/uploads/2018/08/crontab-ui-dashboard-1.png)
If you wanted to change any parameter in a cron job, just click on the **Edit** button below the job and modify the parameters as you wish. To run a job immediately, click on the button that says **Run**. To stop a job, click **Stop** button. You can view the log details of any job by clicking on the **Log** button. If the job is no longer required, simply press **Delete** button.
**Backup cron jobs**
To backup all cron jobs, press the Backup from main dashboard and choose OK to confirm the backup.
![](https://www.ostechnix.com/wp-content/uploads/2018/08/backup-cron-jobs.png)
You can use this backup in case you messed with the contents of the crontab file.
**Import/Export cron jobs to other systems**
Another notable feature of Crontab UI is you can import, export and deploy cron jobs to other systems. If you have multiple systems on your network that requires the same cron jobs, just press **Export** button and choose the location to save the file. All contents of crontab file will be saved in a file named **crontab.db**.
Here is the contents of the crontab.db file.
```
$ cat Downloads/crontab.db
{"name":"Remove Pacman Cache","command":"rm -rf /var/cache/pacman","schedule":"@monthly","stopped":false,"timestamp":"Thu Aug 23 2018 10:34:19 GMT+0000 (Coordinated Universal Time)","logging":"true","mailing":{},"created":1535020459093,"_id":"lcVc1nSdaceqS1ut"}
```
Then you can transfer the entire crontab.db file to some other system and import its to the new system. You dont need to manually create cron jobs in all systems. Just create them in one system and export and import all of them to every system on the network.
**Get the contents from or save to existing crontab file**
There are chances that you might have already created some cron jobs using **crontab** command. If so, you can retrieve contents of the existing crontab file by click on the **“Get from crontab”** button in main dashboard.
![](https://www.ostechnix.com/wp-content/uploads/2018/08/get-from-crontab.png)
Similarly, you can save the newly created jobs using Crontab UI utility to existing crontab file in your system. To do so, just click **Save to crontab** option in the dashboard.
See? Managing cron jobs is not that complicated. Any newbie user can easily maintain any number of jobs without much hassle using Crontab UI. Give it a try and let us know what do you think about this tool. I am all ears!
And, thats all for now. Hope this was useful. More good stuffs to come. Stay tuned!
Cheers!
--------------------------------------------------------------------------------
via: https://www.ostechnix.com/how-to-easily-and-safely-manage-cron-jobs-in-linux/
作者:[SK][a]
选题:[lujun9972](https://github.com/lujun9972)
译者:[译者ID](https://github.com/译者ID)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://www.ostechnix.com/author/sk/
[1]:https://www.ostechnix.com/a-beginners-guide-to-cron-jobs/

View File

@ -1,110 +1,101 @@
DevOps 实践指南 DevOps 实践指南
====== ======
![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/rh_003784_02_os.comcareers_resume_rh1x.png?itok=S3HGxi6E) ![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/rh_003784_02_os.comcareers_resume_rh1x.png?itok=S3HGxi6E)
在去年大概一年的时间里我注意到对“Devops 实践”感兴趣的开发人员和系统管理员突然有了明显的增加。这样的变化也合理:现在开发者只要花很少的钱,调用一些 API 就能单枪匹马地在一整套分布式基础设施上运行自己的应用, 在这个时代,开发和运维的紧密程度前所未有。我看过许多博客和文章介绍很酷的 DevOps 工具和相关思想,但是给那些希望践行 DevOps 的人以指导和建议的内容,我却很少看到。 在去年大概一年的时间里我注意到对“Devops 实践”感兴趣的开发人员和系统管理员突然有了明显的增加。这样的变化也合理:现在开发者只要花很少的钱,调用一些 API就能单枪匹马地在一整套分布式基础设施上运行自己的应用在这个时代开发和运维的紧密程度前所未有。我看过许多博客和文章介绍很酷的 DevOps 工具和相关思想,但是给那些希望践行 DevOps 的人以指导和建议的内容,我却很少看到。
这篇文章的目的就是描述一下如何去实践。我的想法基于 Reddit 上 [devops][1] 的一些访谈、聊天和深夜讨论,还有一些随机谈话,一般都发生在享受啤酒和美食的时候。如果你已经开始这样实践,我对你的反馈很感兴趣,请通过 [我的博客][2] 或者 [Twitter][3] 联系我,也可以直接在下面评论。我很乐意听到你们的想法和故事。 这篇文章的目的就是描述一下如何去实践。我的想法基于 Reddit 上 [devops][1] 的一些访谈、聊天和深夜讨论,还有一些随机谈话,一般都发生在享受啤酒和美食的时候。如果你已经开始这样实践,我对你的反馈很感兴趣,请通过[我的博客][2]或者 [Twitter][3] 联系我,也可以直接在下面评论。我很乐意听到你们的想法和故事。
### 古代的 IT ### 古代的 IT
了解历史是搞清楚未来的关键DevOps 也不例外。想搞清楚 DevOps 运动的普及和流行,去了解一下上世纪 90 年代后期和 21 世纪前十年 IT 的情况会有帮助。这是我的经验。 了解历史是搞清楚未来的关键DevOps 也不例外。想搞清楚 DevOps 运动的普及和流行,去了解一下上世纪 90 年代后期和 21 世纪前十年 IT 的情况会有帮助。这是我的经验。
我的第一份工作是在一家大型跨国金融服务公司做 Windows 系统管理员。当时给计算资源扩容需要给 Dell 打电话 (或者像我们公司那样打给 CDW ),并下一个价值数十万美元的订单,包含服务器、网络设备、电缆和软件,所有这些都要运到在线或离线的数据中心去。虽然 VMware 仍在尝试说服企业使用虚拟机运行他们的“性能敏感”型程序是更划算的,但是包括我们在内的很多公司都还忠于使用他们的物理机运行应用。 我的第一份工作是在一家大型跨国金融服务公司做 Windows 系统管理员。当时给计算资源扩容需要给 Dell 打电话(或者像我们公司那样打给 CDW,并下一个价值数十万美元的订单,包含服务器、网络设备、电缆和软件,所有这些都要运到生产或线下的数据中心去。虽然 VMware 仍在尝试说服企业使用虚拟机运行他们的“性能敏感”型程序是更划算的,但是包括我们在内的很多公司都还忠于使用他们的物理机运行应用。
在我们技术部门,有一个专门做数据中心工程和操作的完整团队,他们的工作包括价格谈判,让荒唐的租赁月费能够降一点点,还包括保证我们的系统能够正常冷却(如果设备太多,这个事情的难度会呈指数增长)。如果这个团队足够幸运足够有钱,境外数据中心的工作人员对我们所有的服务器型号又都有足够的了解,就能避免在盘后交易中不小心错东西。那时候亚马逊 AWS 和 Rackspace 逐渐开始加速扩张,但还远远没到临界规模。 在我们技术部门,有一个专门做数据中心工程和运营的团队,他们的工作包括价格谈判,让荒唐的租能够降一点点,还包括保证我们的系统能够正常冷却(如果设备太多,这个事情的难度会呈指数增长)。如果这个团队足够幸运足够有钱,境外数据中心的工作人员对我们所有的服务器型号又都有足够的了解,就能避免在盘后交易中不小心错东西。那时候亚马逊 AWS 和 Rackspace 逐渐开始加速扩张,但还远远没到临界规模。
当时我们还有专门的团队来保证硬件上运行着的操作系统和软件能够按照预期工作。这些工程师负责设计可靠的架构以方便给系统打补丁,监控和报警,还要定义基础镜像 (gold image) 的内容。这些大都是通过很多手工实验完成的,很多手工实验是为了编写一个运行说明书 (runbook) 来描述要做的事情,并确保按照它执行后的结果确实在预期内。在我们这么大的组织里,这样做很重要,因为一线和二线的技术支持都是境外的,而他们的培训内容只覆盖到了这些运行说明而已。 当时我们还有专门的团队来保证硬件上运行着的操作系统和软件能够按照预期工作。这些工程师负责设计可靠的架构以方便给系统打补丁,监控和报警,还要定义<ruby>基础镜像<rt>gold image</rt></ruby>的内容。这些大都是通过很多手工实验完成的,很多手工实验是为了编写一个<ruby>运行说明书<rt>runbook</rt></ruby>来描述要做的事情,并确保按照它执行后的结果确实在预期内。在我们这么大的组织里,这样做很重要,因为一线和二线的技术支持都是境外的,而他们的培训内容只覆盖到了这些运行说明而已。
(这是我职业生涯前三年的世界。我那时候的梦想是成为制定金本位制的人!) (这是我职业生涯前三年的世界。我那时候的梦想是成为制定金本位制的人!)
软件发布则完全是另外一头怪兽。无可否认,我在这方面并没有积累太多经验。但是,从我收集的故事(和最近的经历)来看,当时大部分软件开发的日常大概是这样: 软件发布则完全是另外一头怪兽。无可否认,我在这方面并没有积累太多经验。但是,从我收集的故事(和最近的经历)来看,当时大部分软件开发的日常大概是这样:
* 开发人员按照技术和功能需求来编写代码,这些需求来自于业务分析人员的会议,但是会议并没有邀请开发人员参加。 * 开发人员按照技术和功能需求来编写代码,这些需求来自于业务分析人员的会议,但是会议并没有邀请开发人员参加。
* 开发人员可以选择为他们的代码编写单元测试,以确保在代码里没有任何明显的疯狂行为,比如除以 0 但不抛出异常。 * 开发人员可以选择为他们的代码编写单元测试,以确保在代码里没有任何明显的疯狂行为,比如除以 0 但不抛出异常。
* 然后开发者会把他们的代码标记为 "Ready for QA."(准备好了接受测试),质量保障的成员会把这个版本的代码发布到他们自己的环境中,这个环境和生产环境可能相似,也可能不相似,甚至和开发环境相比也不一定相似。 * 然后开发者会把他们的代码标记为“Ready for QA”(准备好了接受测试),质量保障的成员会把这个版本的代码发布到他们自己的环境中,这个环境和生产环境可能相似,也可能不,甚至和开发环境相比也不一定相似。
* 故障会在几天或者几个星期内反馈到开发人员那里,这个时长取决于其业务活动和优先事项。 * 故障会在几天或者几个星期内反馈到开发人员那里,这个时长取决于其业务活动和优先事项。
虽然系统管理员和开发人员经常有不一致的意见,但是对“变更管理”却一致痛恨。变更管理由高度规范的(就我当时的雇主而言)和非常必要的规则和程序组成,用来管理一家公司应该什么时候做技术变更,以及如何做。很多公司都按照 [ITIL][4] 来操作简单的说ITIL 问了很多和事情发生的原因、时间、地点和方式相关的问题,而且提供了一个过程,对产生最终答案的决定做审计跟踪。
虽然系统管理员和开发人员经常有不一致的意见,但是对“变更管理”的痛恨却是一致的。变更管理由高度规范的(就我当时的雇主而言)和非常有必要的规则和程序组成,用来管理一家公司应该什么时候做技术变更,以及如何做。很多公司都按照 [ITIL][4] 来操作, 简单的说ITIL 问了很多和事情发生的原因、时间、地点和方式相关的问题,而且提供了一个过程,对产生最终答案的决定做审计跟踪。
你可能从我的简短历史课上了解到,当时 IT 的很多很多事情都是手工完成的。这导致了很多错误。错误又导致了很多财产损失。变更管理的工作就是尽量减少这些损失,它常常以这样的形式出现:不管变更的影响和规模大小,每两周才能发布部署一次。周五下午 4 点到周一早上 5 点 59 分这段时间,需要排队等候发布窗口。(讽刺的是,这种流程导致了更多错误,通常还是更严重的那种错误) 你可能从我的简短历史课上了解到,当时 IT 的很多很多事情都是手工完成的。这导致了很多错误。错误又导致了很多财产损失。变更管理的工作就是尽量减少这些损失,它常常以这样的形式出现:不管变更的影响和规模大小,每两周才能发布部署一次。周五下午 4 点到周一早上 5 点 59 分这段时间,需要排队等候发布窗口。(讽刺的是,这种流程导致了更多错误,通常还是更严重的那种错误)
### DevOps 不是专家团 ### DevOps 不是专家团
你可能在想 "Carlos 你在讲啥啊,什么时候才能说到 Ansible playbooks? ",我热爱 Ansible, 但是请再等一会;下面这些很重要。 你可能在想 “Carlos 你在讲啥啊,什么时候才能说到 Ansible playbooks我喜欢 Ansible但是请稍等 —— 下面这些很重要。
你有没有过被分配到过需要跟"DevOps"小组打交道的项目?你有没有依赖过“配置管理”或者“持续集成/持续交付”小组来保证业务流水线设置正确?你有没有在代码开发完的数周之后才参加发布部署的会议? 你有没有过被分配到需要跟 DevOps 小组打交道的项目?你有没有依赖过“配置管理”或者“持续集成/持续交付”小组来保证业务流水线设置正确?你有没有在代码开发完的数周之后才参加发布部署的会议?
如果有过,那么你就是在重温历史,这个历史是由上面所有这些导致的。 如果有过,那么你就是在重温历史,这个历史是由上面所有这些导致的。
出于本能,我们喜欢和像自己的人一起工作,这会导致[筒仓][5]的行成。很自然,这种人类特质也会在工作场所表现出来是不足为奇的。我甚至在一个 250 人的创业公司里见到过这样的现象,当时我在那里工作。刚开始的时候,开发人员都在聚在一起工作,彼此深度协作。随着代码变得复杂,开发相同功能的人自然就坐到了一起,解决他们自己的复杂问题。然后按功能划分的小组很快就正式形成了。 出于本能,我们喜欢和像自己的人一起工作,这会导致[壁垒][5]的形成。很自然,这种人类特质也会在工作场所表现出来是不足为奇的。我甚至在曾经工作过的一个 250 人的创业公司里见到过这样的现象。刚开始的时候,开发人员都在聚在一起工作,彼此深度协作。随着代码变得复杂,开发相同功能的人自然就坐到了一起,解决他们自己的复杂问题。然后按功能划分的小组很快就正式形成了。
在我工作过的很多公司里,系统管理员和开发人员不仅像这样形成了天然的筒仓,而且彼此还有激烈的对抗。开发人员的环境出问题了或者他们的权限太小了,就会对系统管理员很恼火。系统管理员怪开发者无时不刻的不在用各种方式破坏他们的环境,怪开发人员申请的计算资源严重超过他们的需要。双方都不理解对方,更糟糕的是,双方都不愿意去理解对方。 在我工作过的很多公司里,系统管理员和开发人员不仅像这样形成了天然的壁垒,而且彼此还有激烈的对抗。开发人员的环境出问题了或者他们的权限太小了,就会对系统管理员很恼火。系统管理员怪开发人员无时无刻地在用各种方式破坏他们的环境,怪开发人员申请的计算资源严重超过他们的需要。双方都不理解对方,更糟糕的是,双方都不愿意去理解对方。
大部分开发人员对操作系统,内核或计算机硬件都不感兴趣。同样,大部分系统管理员,即使是 Linux 的系统管理员,也都不愿意学习编写代码,他们在大学期间学过一些 C 语言,然后就痛恨它,并且永远都不想再碰 IDE. 所以,开发人员把运行环境的问题甩给围墙外的系统管理员,系统管理员把这些问题和甩过来的其他上百个问题放在一起,做一个优先级安排。每个人都很忙,心怀怨恨的等待着。DevOps 的目的就是解决这种矛盾。 大部分开发人员对操作系统,内核或计算机硬件都不感兴趣。同样,大部分系统管理员,即使是 Linux 的系统管理员,也都不愿意学习编写代码,他们在大学期间学过一些 C 语言,然后就痛恨它,并且永远都不想再碰 IDE所以,开发人员把运行环境的问题甩给围墙外的系统管理员,系统管理员把这些问题和甩过来的其它上百个问题放在一起安排优先级。每个人都忙于怨恨对方。DevOps 的目的就是解决这种矛盾。
DevOps 不是一个团队CI/CD 也不是 Jira 系统的一个用户组。DevOps 是一种思考方式。根据这个运动来看,在理想的世界里,开发人员、系统管理员和业务相关人将作为一个团队工作。虽然他们可能不完全了解彼此的世界,可能没有足够的知识去了解彼此的积压任务,但他们在大多数情况下能有一致的看法。 DevOps 不是一个团队CI/CD 也不是 JIRA 系统的一个用户组。DevOps 是一种思考方式。根据这个运动来看,在理想的世界里,开发人员、系统管理员和业务相关人将作为一个团队工作。虽然他们可能不完全了解彼此的世界,可能没有足够的知识去了解彼此的积压任务,但他们在大多数情况下能有一致的看法。
把所有基础设施和业务逻辑都代码化,再串到一个发布部署流水线里,就像是运行在这之上的应用一样。这个理念的基础就是 DevOps. 因为大家都理解彼此,所以人人都是赢家。聊天机器人和易用的监控工具、可视化工具的兴起,背后的基础也是 DevOps. 把所有基础设施和业务逻辑都代码化,再串到一个发布部署流水线里,就像是运行在这之上的应用一样。这个理念的基础就是 DevOps因为大家都理解彼此,所以人人都是赢家。聊天机器人和易用的监控工具、可视化工具的兴起,背后的基础也是 DevOps
[Adam Jacob][6] 说的最好:"DevOps 就是企业往软件导向型过渡时我们用来描述操作的词" [Adam Jacob][6] 说的最好:“DevOps 就是企业往软件导向型过渡时我们用来描述操作的词。”
### 要实践 DevOps 我需要知道些什么 ### 要实践 DevOps 我需要知道些什么
我经常被问到这个问题,它的答案,和同属于开放式的其他大部分问题一样:视情况而定。 我经常被问到这个问题,它的答案和同属于开放式的其它大部分问题一样:视情况而定。
现在“DevOps 工程师”在不同的公司有不同的含义。在软件开发人员比较多但是很少有人懂基础设施的小公司,他们很可能是在找有更多系统管理经验的人。而其他公司,通常是大公司或老公司或又大又老的公司,已经有一个稳固的系统管理团队了,他们在向类似于谷歌 [SRE][7] 的方向做优化,也就是“设计操作功能的软件工程师”。但是,这并不是金科玉律,就像其技术类工作一样,这个决定很大程度上取决于他的招聘经理。 现在“DevOps 工程师”在不同的公司有不同的含义。在软件开发人员比较多但是很少有人懂基础设施的小公司,他们很可能是在找有更多系统管理经验的人。而其他公司,通常是大公司或老公司,已经有一个稳固的系统管理团队了,他们在向类似于谷歌 [SRE][7] 的方向做优化,也就是“设计操作功能的软件工程师”。但是,这并不是金科玉律,就像其技术类工作一样,这个决定很大程度上取决于他的招聘经理。
也就是说,我们一般是在找对深入学习以下内容感兴趣的工程师: 也就是说,我们一般是在找对深入学习以下内容感兴趣的工程师:
* 如何管理和设计安全、可扩展的云上的平台(通常是在 AWS 上,不过微软的 Azure, 谷歌的 Cloud Platform还有 DigitalOcean 和 Heroku 这样的 PaaS 提供商,也都很流行) * 如何管理和设计安全、可扩展的云平台(通常是在 AWS 上,不过微软的 AzureGoogle Cloud Platform还有 DigitalOcean 和 Heroku 这样的 PaaS 提供商,也都很流行)。
* 如何用流行的 [CI/CD][8] 工具,比如 JenkinsGocd还有基于云的 Travis CI 或者 CircleCI来构造一条优化的发布部署流水线和发布部署策略。 * 如何用流行的 [CI/CD][8] 工具,比如 JenkinsGoCD还有基于云的 Travis CI 或者 CircleCI来构造一条优化的发布部署流水线和发布部署策略。
* 如何在你的系统中使用基于时间序列的工具,比如 KibanaGrafanaSplunkLoggly 或者 Logstash来监控记录并在变化的时候报警还有 * 如何在你的系统中使用基于时间序列的工具,比如 KibanaGrafanaSplunkLoggly 或者 Logstash 来监控,记录,并在变化的时候报警。
* 如何使用配置管理工具,例如 ChefPuppet 或者 Ansible 做到“基础设施即代码”,以及如何使用像 Terraform 或 CloudFormation 的工具发布这些基础设施。 * 如何使用配置管理工具,例如 ChefPuppet 或者 Ansible 做到“基础设施即代码”,以及如何使用像 Terraform 或 CloudFormation 的工具发布这些基础设施。
容器也变得越来越受欢迎。尽管有人对大规模使用 Docker 的现状[表示不满][9],但容器正迅速地成为一种很好的方式来实现在更少的操作系统上运行超高密度的服务和应用,同时提高它们的可靠性。(像 Kubernetes 或者 Mesos 这样的容器编排工具,能在宿主机故障的时候,几秒钟之内重新启动新的容器。)考虑到这些,掌握 Docker 或者 rkt 以及容器编排平台的知识会对你大有帮助。 容器也变得越来越受欢迎。尽管有人对大规模使用 Docker 的现状[表示不满][9],但容器正迅速地成为一种很好的方式来实现在更少的操作系统上运行超高密度的服务和应用,同时提高它们的可靠性。(像 Kubernetes 或者 Mesos 这样的容器编排工具,能在宿主机故障的时候,几秒钟之内重新启动新的容器。)考虑到这些,掌握 Docker 或者 rkt 以及容器编排平台的知识会对你大有帮助。
如果你是希望做 DevOps 实践的系统管理员你还需要知道如何写代码。Python 和 Ruby 是 DevOps 领域的流行语言,因为们是可移植的也就是说可以在任何操作系统上运行快速的而且易读易学。它们还支撑着这个行业最流行的配置管理工具Ansible 是使用 Python 写的Chef 和 Puppet 是使用 Ruby 写的)以及云平台的 API 客户端(亚马逊 AWS, 微软 Azure, 谷歌 Cloud Platform 的客户端通常会提供 Python 和 Ruby 语言的版本)。 如果你是希望做 DevOps 实践的系统管理员你还需要知道如何写代码。Python 和 Ruby 是 DevOps 领域的流行语言,因为们是可移植的也就是说可以在任何操作系统上运行快速的而且易读易学。它们还支撑着这个行业最流行的配置管理工具Ansible 是使用 Python 写的Chef 和 Puppet 是使用 Ruby 写的)以及云平台的 API 客户端(亚马逊 AWS,微软 AzureGoogle Cloud Platform 的客户端通常会提供 Python 和 Ruby 语言的版本)。
如果你是开发人员,也希望做 DevOps 的实践,我强烈建议你去学习 UnixWindows 操作系统以及网络基础知识。虽然云计算把很多系统管理的难题抽象化了,但是对应用的性能做 debug 的时候,你知道操作系统如何工作的就会有很大的帮助。下文包含了一些这个主题的图书。 如果你是开发人员,也希望做 DevOps 的实践,我强烈建议你去学习 UnixWindows 操作系统以及网络基础知识。虽然云计算把很多系统管理的难题抽象化了,但是对应用的性能做 debug 的时候,如果你知道操作系统如何工作的就会有很大的帮助。下文包含了一些这个主题的图书。
如果你觉得这些东西听起来内容太多,大家都是这么想的。幸运的是,有很多小项目可以让你开始探索。其中一个启动项目是 Gary Stafford 的[选举服务](https://github.com/garystafford/voter-service) 一个基于 Java 的简单投票平台。我们要求面试候选人通过一个流水线将该服务从 GitHub 部署到生产环境基础设施上。你可以把这个服务与 Rob Mile 写的了不起的 DevOps [入门教程](https://github.com/maxamg/cd-office-hours)结合起来学习如何编写流水线 如果你觉得这些东西听起来内容太多,没关系,大家都是这么想的。幸运的是,有很多小项目可以让你开始探索。其中一个项目是 Gary Stafford 的[选举服务](https://github.com/garystafford/voter-service),一个基于 Java 的简单投票平台。我们要求面试候选人通过一个流水线将该服务从 GitHub 部署到生产环境基础设施上。你可以把这个服务与 Rob Mile 写的了不起的 DevOps [入门教程](https://github.com/maxamg/cd-office-hours)结合起来学习。
还有一个熟悉这些工具的好方法,找一个流行的服务,然后只使用 AWS 和配置管理工具来搭建这个服务所需要的基础设施。第一次先手动搭建,了解清楚要做的事情,然后只用 CloudFormation (或者 Terraform) 和 Ansible 重写刚才的手动操作。令人惊讶的是,这就是我们基础设施开发人员为客户所做的大部分日常工作,我们的客户认为这样的工作非常有意义! 还有一个熟悉这些工具的好方法,找一个流行的服务,然后只使用 AWS 和配置管理工具来搭建这个服务所需要的基础设施。第一次先手动搭建,了解清楚要做的事情,然后只用 CloudFormation(或者 Terraform和 Ansible 重写刚才的手动操作。令人惊讶的是,这就是我们基础设施开发人员为客户所做的大部分日常工作,我们的客户认为这样的工作非常有意义!
### 需要读的书 ### 需要读的书
如果你在找 DevOps 的其资源,下面这些理论和技术书籍值得一读。 如果你在找 DevOps 的其资源,下面这些理论和技术书籍值得一读。
#### 理论书籍 #### 理论书籍
* Gene Kim 写的 [The Phoenix Project (凤凰项目)][10]。这是一本很不错的书,内容涵盖了我上文解释过的历史(写的更生动形象),描述了一个运行在敏捷和 DevOps 之上的公司向精益前进的过程。 * Gene Kim 写的 [The Phoenix Project凤凰项目][10]。这是一本很不错的书,内容涵盖了我上文解释过的历史(写的更生动形象),描述了一个运行在敏捷和 DevOps 之上的公司向精益前进的过程。
* Terrance Ryan 写的 [Driving Technical Change (布道之道)][11]。非常好的一小本书,讲了大多数技术型组织内的常见性格特点以及如何和他们打交道。这本书对我的帮助比我想象的更多。 * Terrance Ryan 写的 [Driving Technical Change布道之道][11]。非常好的一小本书,讲了大多数技术型组织内的常见性格特点以及如何和他们打交道。这本书对我的帮助比我想象的更多。
* Tom DeMarco 和 Tim Lister 合著的 [Peopleware (人件)][12]。管理工程师团队的经典图书,有一点过时,但仍然很有价值。 * Tom DeMarco 和 Tim Lister 合著的 [Peopleware人件][12]。管理工程师团队的经典图书,有一点过时,但仍然很有价值。
* Tom Limoncelli 写的 [Time Management for System Administrators (时间管理: 给系统管理员)][13]。这本书主要面向系统管理员,它对很多大型组织内的系统管理员生活做了深入的展示。如果你想了解更多系统管理员和开发人员之间的冲突,这本书可能解释了更多。 * Tom Limoncelli 写的 [Time Management for System Administrators时间管理给系统管理员][13]。这本书主要面向系统管理员,它对很多大型组织内的系统管理员生活做了深入的展示。如果你想了解更多系统管理员和开发人员之间的冲突,这本书可能解释了更多。
* Eric Ries 写的 [The Lean Startup (精益创业)][14]。描述了 Eric 自己的 3D 虚拟形象公司IMVU, 发现了如何精益工作,快速失败和更快盈利。 * Eric Ries 写的 [The Lean Startup精益创业][14]。描述了 Eric 自己的 3D 虚拟形象公司IMVU发现了如何精益工作快速失败和更快盈利。
* Jez Humble 和他的朋友写的[Lean Enterprise (精益企业)][15]。这本书是对精益创业做的改编,以更适应企业,两本书都很棒,都很好的解释了 DevOps 背后的商业动机。 * Jez Humble 和他的朋友写的 [Lean Enterprise精益企业][15]。这本书是对精益创业做的改编,以更适应企业,两本书都很棒,都很好地解释了 DevOps 背后的商业动机。
* Kief Morris 写的 [Infrastructure As Code (基础设施即代码)][16]。关于 "基础设施即代码" 的非常好的入门读物!很好的解释了为什么所有公司都有必要采纳这种做法。 * Kief Morris 写的 [Infrastructure As Code基础设施即代码][16]。关于“基础设施即代码”的非常好的入门读物!很好的解释了为什么所有公司都有必要采纳这种做法。
* Betsy Beyer, Chris Jones, Jennifer Petoff 和 Niall Richard Murphy 合著的 [Site Reliability Engineering (站点可靠性工程师)][17]。一本解释谷歌 SRE 实践的书,也因为是 "DevOps 诞生之前的 DevOps" 被人熟知。在如何处理运行时间、时延和保持工程师快乐方面提供了有趣的看法。 * Betsy Beyer、Chris Jones、Jennifer Petoff 和 Niall Richard Murphy 合著的 [Site Reliability Engineering站点可靠性工程师][17]。一本解释谷歌 SRE 实践的书也因为是“DevOps 诞生之前的 DevOps”被人熟知。在如何处理运行时间、时延和保持工程师快乐方面提供了有意思的看法。
#### 技术书籍 #### 技术书籍
如果你想找的是让你直接跟代码打交道的书,看这里就对了。 如果你想找的是让你直接跟代码打交道的书,看这里就对了。
* W. Richard Stevens 的 [TCP/IP Illustrated (TCP/IP 详解)][18]。这是一套经典的(也可以说是最全面的)讲解基本网络协议的巨著,重点介绍了 TCP/IP 协议族。如果你听说过 12 34 层网络,而且对深入学习他们感兴趣,那么你需要这本书。 * W. Richard Stevens 的 [TCP/IP IllustratedTCP/IP 详解)][18]。这是一套经典的(也可以说是最全面的)讲解网络协议基础的巨著,重点介绍了 TCP/IP 协议族。如果你听说过 1234 层网络,而且对深入学习它们感兴趣,那么你需要这本书。
* Evi Nemeth, Trent Hein 和 Ben Whaley 合著的 [UNIX and Linux System Administration Handbook (UNIX/Linux 系统管理员手册)][19]。一本很好的入门书,介绍 Linux/Unix 如何工作以及如何使用。 * Evi Nemeth、Trent Hein 和 Ben Whaley 合著的 [UNIX and Linux System Administration HandbookUNIX/Linux 系统管理员手册)][19]。一本很好的入门书,介绍 Linux/Unix 如何工作以及如何使用。
* Don Jones 和 Jeffrey Hicks 合著的 [Learn Windows Powershell In A Month of Lunches (Windows PowerShell实战指南)][20]. 如果你在 Windows 系统下做自动化任务,你需要学习怎么使用 Powershell。这本书能够帮助你。Don Jones 是这方面著名的 MVP。 * Don Jones 和 Jeffrey Hicks 合著的 [Learn Windows Powershell In A Month of LunchesWindows PowerShell 实战指南)][20]。如果你在 Windows 系统下做自动化任务,你需要学习怎么使用 Powershell。这本书能够帮助你。Don Jones 是这方面著名的 MVP。
* 几乎所有 [James Turnbull][21] 写的东西,针对流行的 DevOps 工具,他发表了很好的技术入门读物。 * 几乎所有 [James Turnbull][21] 写的东西,针对流行的 DevOps 工具,他发表了很好的技术入门读物。
不管是在那些把所有应用都直接部署在物理机上的公司,(现在很多公司仍然有充分的理由这样做)还是在那些把所有应用都做成 serverless 的先驱公司DevOps 都很可能会持续下去。这部分工作很有趣产出也很有影响力而且最重要的是它搭起桥梁衔接了技术和业务之间的缺口。DevOps 是一个值得期待的美好事物。 不管是在那些把所有应用都直接部署在物理机上的公司,(现在很多公司仍然有充分的理由这样做)还是在那些把所有应用都做成 serverless 的先驱公司DevOps 都很可能会持续下去。这部分工作很有趣产出也很有影响力而且最重要的是它搭起桥梁衔接了技术和业务之间的缺口。DevOps 是一个值得期待的美好事物。
@ -116,30 +107,30 @@ via: https://opensource.com/article/18/1/getting-devops
作者:[Carlos Nunez][a] 作者:[Carlos Nunez][a]
译者:[belitex](https://github.com/belitex) 译者:[belitex](https://github.com/belitex)
校对:[校对者ID](https://github.com/校对者ID) 校对:[pityonline](https://github.com/pityonline)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://opensource.com/users/carlosonunez [a]: https://opensource.com/users/carlosonunez
[1]:https://www.reddit.com/r/devops/ [1]: https://www.reddit.com/r/devops/
[2]:https://carlosonunez.wordpress.com/ [2]: https://carlosonunez.wordpress.com/
[3]:https://twitter.com/easiestnameever [3]: https://twitter.com/easiestnameever
[4]:https://en.wikipedia.org/wiki/ITIL [4]: https://en.wikipedia.org/wiki/ITIL
[5]:https://www.psychologytoday.com/blog/time-out/201401/getting-out-your-silo [5]: https://www.psychologytoday.com/blog/time-out/201401/getting-out-your-silo
[6]:https://twitter.com/adamhjk/status/572832185461428224 [6]: https://twitter.com/adamhjk/status/572832185461428224
[7]:https://landing.google.com/sre/interview/ben-treynor.html [7]: https://landing.google.com/sre/interview/ben-treynor.html
[8]:https://en.wikipedia.org/wiki/CI/CD [8]: https://en.wikipedia.org/wiki/CI/CD
[9]:https://thehftguy.com/2016/11/01/docker-in-production-an-history-of-failure/ [9]: https://thehftguy.com/2016/11/01/docker-in-production-an-history-of-failure/
[10]:https://itrevolution.com/book/the-phoenix-project/ [10]: https://itrevolution.com/book/the-phoenix-project/
[11]:https://pragprog.com/book/trevan/driving-technical-change [11]: https://pragprog.com/book/trevan/driving-technical-change
[12]:https://en.wikipedia.org/wiki/Peopleware:_Productive_Projects_and_Teams [12]: https://en.wikipedia.org/wiki/Peopleware:_Productive_Projects_and_Teams
[13]:http://shop.oreilly.com/product/9780596007836.do [13]: http://shop.oreilly.com/product/9780596007836.do
[14]:http://theleanstartup.com/ [14]: http://theleanstartup.com/
[15]:https://info.thoughtworks.com/lean-enterprise-book.html [15]: https://info.thoughtworks.com/lean-enterprise-book.html
[16]:http://infrastructure-as-code.com/book/ [16]: http://infrastructure-as-code.com/book/
[17]:https://landing.google.com/sre/book.html [17]: https://landing.google.com/sre/book.html
[18]:https://en.wikipedia.org/wiki/TCP/IP_Illustrated [18]: https://en.wikipedia.org/wiki/TCP/IP_Illustrated
[19]:http://www.admin.com/ [19]: http://www.admin.com/
[20]:https://www.manning.com/books/learn-windows-powershell-in-a-month-of-lunches-third-edition [20]: https://www.manning.com/books/learn-windows-powershell-in-a-month-of-lunches-third-edition
[21]:https://jamesturnbull.net/ [21]: https://jamesturnbull.net/
[22]:https://carlosonunez.wordpress.com/2017/03/02/getting-into-devops/ [22]: https://carlosonunez.wordpress.com/2017/03/02/getting-into-devops/

View File

@ -0,0 +1,126 @@
在 Linux 中安全轻松地管理 Cron 定时任务
======
![](https://www.ostechnix.com/wp-content/uploads/2018/08/Crontab-UI-720x340.jpg)
在 Linux 中遇到计划任务的时候,你首先会想到的大概就是 Cron 定时任务了。Cron 定时任务能帮助你在类 Unix 操作系统中计划性地执行命令或者任务。也可以参考一下我们之前的一篇[《关于 Cron 定时任务的新手指导》][1]。对于有一定 Linux 经验的人来说,设置 Cron 定时任务不是什么难事,但对于新手来说就不一定了,他们在编辑 Crontab 文件的时候不知不觉中犯的一些小错误,也有可能把整个 Cron 定时任务搞挂了。如果你在处理 Cron 定时任务的时候为了以防万一,可以尝试使用 **Crontab UI**,它是一个可以在类 Unix 操作系统上安全轻松管理 Cron 定时任务的页面工具。
Crontab UI 是使用 NodeJS 编写的免费开源软件。有了 Crontab UI你在创建、删除和修改 Cron 定时任务的时候就不需要手工编辑 Crontab 文件了,只需要打开浏览器稍微操作一下,就能完成上面这些工作。你可以用 Crontab UI 轻松创建、编辑、暂停、删除、备份 Cron 定时任务,甚至还可以简单做到导入、导出、部署其它机器上的 Cron 定时任务,它还支持错误日志、邮件发送和钩子。
### 安装 Crontab UI
只需要一条命令就可以安装好 Crontab UI但前提是已经安装好 NPM。如果还没有安装 NPM可以参考[《如何在 Linux 上安装 NodeJS》][2]这篇文章。
执行这一条命令来安装 Crontab UI。
```
$ npm install -g crontab-ui
```
就是这么简单,下面继续来看看在 Crontab UI 上如何管理 Cron 定时任务。
### 在 Linux 上安全轻松管理 Cron 定时任务
执行这一条命令启动 Crontab UI
```
$ crontab-ui
```
你会看到这样的输出:
```
Node version: 10.8.0
Crontab UI is running at http://127.0.0.1:8000
```
首先在你的防火墙和路由器上放开 8000 端口,然后打开浏览器访问 **<http://127.0.0.1:8000>**。
注意,默认只有在本地才能访问到 Crontab UI 的控制台页面。但如果你想让 Crontab UI 使用系统的 IP 地址和自定义端口,也就是想让其它机器也访问到本地的 Crontab UI你需要使用以下这个命令
```
$ HOST=0.0.0.0 PORT=9000 crontab-ui
Node version: 10.8.0
Crontab UI is running at http://0.0.0.0:9000
```
Crontab UI 就能够通过 <http://IP-Address>:9000 这样的 URL 被远程机器访问到了。
Crontab UI 的控制台页面长这样:
![](https://www.ostechnix.com/wp-content/uploads/2018/08/crontab-ui-dashboard.png)
从上面的截图就可以看到Crontab UI 的界面非常简洁,所有选项的含义都能不言自明。
输入 `Ctrl + C` 就可以关闭 Crontab UI。
**创建、编辑、运行、停止、删除 Cron 定时任务**
点击“New”输入 Cron 定时任务的信息并点击“Save”保存就可以创建一个新的 Cron 定时任务了。
1. 为 Cron 定时任务命名,这是可选的;
2. 你想要执行的完整命令;
3. 设定计划执行的时间。你可以按照启动、每时、每日、每周、每月、每年这些指标快速指定计划任务,也可以明确指定任务执行的具体时间。指定好计划时间后,**Jobs** 区域就会显示 Cron 定时任务的句式。
4. 选择是否为某个 Cron 定时任务记录错误日志。
这是我的一个 Cron 定时任务样例。
![](https://www.ostechnix.com/wp-content/uploads/2018/08/create-new-cron-job.png)
如你所见,我设置了一个每月清理 `pacman` 缓存的 Cron 定时任务。你也可以设置多个 Cron 定时任务,都能在控制台页面看到。
![](https://www.ostechnix.com/wp-content/uploads/2018/08/crontab-ui-dashboard-1.png)
如果你需要更改 Cron 定时任务中的某些参数,只需要点击 **Edit** 按钮并按照你的需求更改对应的参数。点击 **Run** 按钮可以立即执行 Cron 定时任务,点击 **Stop** 则可以立即停止 Cron 定时任务。如果想要查看某个 Cron 定时任务的详细日志,可以点击 **Log** 按钮。对于不再需要的 Cron 定时任务,就可以按 **Delete** 按钮删除。
**备份 Cron 定时任务**
点击控制台页面的 **Backup** 按钮并确认,就可以备份所有 Cron 定时任务。
![](https://www.ostechnix.com/wp-content/uploads/2018/08/backup-cron-jobs.png)
备份之后,一旦 Crontab 文件出现了错误,就可以使用备份来恢复了。
**导入/导出其它机器上的 Cron 定时任务**
Crontab UI 还有一个令人注目的功能,就是导入、导出、部署其它机器上的 Cron 定时任务。如果同一个网络里的多台机器都需要执行同样的 Cron 定时任务,只需要点击 **Export** 按钮并选择文件的保存路径,所有的 Cron 定时任务都会导出到 `crontab.db` 文件中。
以下是 `crontab.db` 文件的内容:
```
$ cat Downloads/crontab.db
{"name":"Remove Pacman Cache","command":"rm -rf /var/cache/pacman","schedule":"@monthly","stopped":false,"timestamp":"Thu Aug 23 2018 10:34:19 GMT+0000 (Coordinated Universal Time)","logging":"true","mailing":{},"created":1535020459093,"_id":"lcVc1nSdaceqS1ut"}
```
导出成文件以后,你就可以把这个 `crontab.db` 文件放置到其它机器上并导入成 Cron 定时任务,而不需要在每一台主机上手动设置 Cron 定时任务。总之,在一台机器上设置完,导出,再导入到其他机器,就完事了。
**在 Crontab 文件获取/保存 Cron 定时任务**
你可能在使用 Crontab UI 之前就已经使用 `crontab` 命令创建过 Cron 定时任务。如果是这样,你可以点击控制台页面上的 **Get from crontab** 按钮来获取已有的 Cron 定时任务。
![](https://www.ostechnix.com/wp-content/uploads/2018/08/get-from-crontab.png)
同样地,你也可以使用 Crontab UI 来将新的 Cron 定时任务保存到 Crontab 文件中,只需要点击 **Save to crontab** 按钮就可以了。
管理 Cron 定时任务并没有想象中那么难,即使是新手使用 Crontab UI 也能轻松管理 Cron 定时任务。赶快开始尝试并发表一下你的看法吧。
--------------------------------------------------------------------------------
via: https://www.ostechnix.com/how-to-easily-and-safely-manage-cron-jobs-in-linux/
作者:[SK][a]
选题:[lujun9972](https://github.com/lujun9972)
译者:[HankChow](https://github.com/HankChow)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://www.ostechnix.com/author/sk/
[1]:https://www.ostechnix.com/a-beginners-guide-to-cron-jobs/
[2]:https://www.ostechnix.com/install-node-js-linux/

View File

@ -1,74 +0,0 @@
openmediavault入门一个家庭NAS解决方案
======
这个网络附加文件服务提供了一序列功能,并且易于安装和配置。
![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/bus-cloud.png?itok=vz0PIDDS)
面对许多可供选择的云存储方案,一些人可能会质疑一个家庭网络附加存储服务的价值。毕竟,当所有你的文件存储在云上,你不需要为你自己云服务的维护,更新,和安全担忧。
但是,这不完全对,是不是?你有一个家庭网络,所以你不得不负责维护网络的健康和安全。假定你已经维护一个家庭网络,那么[一个家庭NAS][1]并不会增加额外负担。反而你能从少量的工作中得到许多的好处。
你可以为你家里所有的计算机备份(你也可以备份离线网站).构架一个存储电影音乐和照片的媒体服务器无需担心网络连接是否连接。在家里的多台计算机处理大型文件不需要等待从网络其他随机的计算机传输这些文件过来。另外可以让NAS与其他服务一起进行双重任务如托管本地邮件或者家庭Wiki。也许最重要的是构架家庭NAS数据完全是你的始终在控制下和随时可访问的。
接下来的问题是如何选择NAS方案。当然你可以购买预先建立的解决方案并在某一天打电话购买但是这会有什么乐趣呢实际上尽管拥有一个能处理一切的设备很棒但最好还是有一个可以修复和升级的钻机。这是一个我近期发现的解决方案。我选择安装和配置[openmediavault][2]。
### 为什么选择openmediavault?
市面上有不少开源的NAS解决方案其中有些无可争议的比openmediavault流行。当我询问周遭例如[freeNAS][3]最常被推荐给我。那么为什么我不采纳他们的建议呢?毕竟,它被大范围的使用,包含很多的功能,并且提供许多支持选项,[基于FreeNAS官网的一份对比数据][4]。当然这些全部是对的。但是openmediavault也不差。它是基于FreeNAS早期版本虽然它在下载和功能方面的数量较低但是对于我的需求而言它已经相当足够了。
另外一个因素是它让我感到很舒适。openmediavault的底层操作系统是[Debian][5],然而FreeNAS是[FreeBSD][6]。由于我个人对FressBSD不是很熟悉因此如果我的NAS出现故障必定会很难在FreeBSD上修复故障。同样的也会让我觉得很难微调配置或添加服务到机器上。当然我可以学习FreeBSD和更熟悉它但是我已经在家里构架了这个NAS我发现如果限制给定自己完成构建NAS的“学习机会”的数量构建NAS往往会更成功。
当然每个情况都不同所以你要自己调研然后作出最适合自己方案的决定。FreeNAS对于许多人似乎都是不错的解决方案。Openmediavault正是适合我的解决方案。
### 安装与配置
在[openmediavault文档]里详细记录了安装步骤所以我不在这里重述了。如果你曾经安装过任何一个linux版本大部分安装步骤都是很类似的(虽然在相对丑陋的[Ucurses][9]界面,不像你可能在现代版本的相对美观的安装界面)。我通过使用[专用驱动器][9]指令来安装它。然而这些指令不但很好而且相当精炼的。当你搞定这些指令你安装了一个基本的系统但是你还需要做很多才能真正构建好NAS来存储任何文件。例如专用驱动器指令在硬盘驱动上安装openmediavault但那是操作系统的驱动而不是和网络上其他计算机共享空间的那个驱动。你需要自己把这些建立起来并且配置好。
你要做的第一件事是加载用来管理的网页界面和修改默认密码。这个密码和之前你安装过程设置的根密码是不同的。这是网页洁面的管理员账号,和默认的账户和密码分别是 `admin``openmediavault`,当你登入后自然而然地会修改这些配置属性。
#### 设置你的驱动
一旦你安装好openmediavault,你需要它为你做一些工作。逻辑上的第一个步骤是设置好你即将用来作为存储的驱动。在这里我假定你已经物理上安装好它们了所以接下来你要做的就是让openmediavault识别和配置它们。第一步是确保这些磁盘是可见的。侧边栏菜单有很多选项而且被精心的归类了。选择**存储 - > 磁盘**。一旦你点击该菜单你应该能够看到所有你已经安装到该服务器的驱动包括那个你已经用来安装openmediavault的驱动。如果你没有在那里看到所有驱动点击扫描按钮去看它能够接载它们。通常这不会是一个问题。
当你的文件共享时,你可以独立的挂载和设置这些驱动,但是对于一个文件服务器,你将想要一些冗余驱动。你想要能够把很多驱动当作一个单一卷和能够在某一个驱动出现故障或者空间不足下安装新驱动的情况下恢复你的数据。这意味你将需要一个[RAID][10]。你想要的什么特定类型的RAID的主题是一个深深的兔子洞是一个值得另写一片文章专门来讲述它(而且已经有很多关于该主题的文章了),但是简而言之是你将需要不仅仅一个驱动和最好的情况下,你的所有驱动都存储一样数量的数据。
openmedia支持所有标准的RAID级别所以多了解RAID对你很有好处的。可以在**存储 - > RAID管理**配置你的RAID。配置是相当简单:点击创建按钮在你的RAID阵列里选择你想要的磁盘和你想要使用的RAID级别和给这个阵列一个名字。openmediavault为你处理剩下的工作。没有混乱的命令行试图记住mdadm'命令的一些标志参数。在我特别的例子我有六个2TB驱动并被设置为RAID 10.
当你的RAID构建好了基本上你已经有一个地方可以存储东西了。你仅仅需要设置一个文件系统。正如你的桌面系统一个硬盘驱动在没有格式化情况下是没什么用处的。所以下一个你要去的地方的是位于openmediavault控制面板里的 **存储 - > 文件系统**。和配置你的RAID一样点击创建按钮然后跟着提示操作。如果你只有一个RAID在你的服务器上你应该可以看到一个像 `md0`的东西。你也需要选择文件系统的类别。如果你不能确定选择标准的ext4类型即可。
#### 定义你的共享
亲爱的你有个地方可以存储文件了。现在你只需要让它在你的家庭网络中可见。可以从在openmediavault控制面板上的**服务**部分上配置。当谈到在网络上设置文件共享,有两个主要的选择:NFS或者SMB/CIFS. 根据以往经验如果你网络上的所有计算机都是Linux系统那么你使用NFS会更好。然而当你家庭网络是一个混合环境是一个包含LinuxWindows苹果系统和嵌入式设备的组合那么SMB/CIF可能会是你合适的选择。
这些选项不是互斥的。实际上你可以在服务器上运行这些服务和同时拥有这些服务的好处。或者你可以混合起来如果你有一个特定的设备做特定的任务。不管你的使用场景是怎样配置这些服务是相当简单。点击你想要的服务从它配置中激活它和在网络中设定你想要的共享文件夹为可见。在基于SMB/CIFS共享的情况下相对于NFS多了一些可用的配置但是一般用默认配置就挺好的接着可以在默认基础上修改配置。最酷的事情是它很容易配置同时也很容易在需要的时候修改配置。
#### 用户配置
基本上已将完成了。你已经在RAID配置你的驱动。你已经用一种文件系统格式化了RAID。和你已经在格式化的RAID上设定了共享文件夹。剩下来的一件事情是配置那些人可以访问这些共享和可以访问多少。这个可以在 **访问权限管理** 配置区设置。使用 **用户****群组** 选项来设定可以连接到你共享文件加的用户和设定这些共享文件的访问权限。
一旦你完成用户配置,你几乎准备好了。你需要从不同客户端机器访问你的共享,但是这是另外一个可以单独写个文章的话题了。
玩得开心!
--------------------------------------------------------------------------------
via: https://opensource.com/article/18/9/openmediavault
作者:[Jason van Gumster][a]
选题:[lujun9972](https://github.com/lujun9972)
译者:[jamelouis](https://github.com/jamelouis)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/mairin
[1]: https://opensource.com/article/18/8/automate-backups-raspberry-pi
[2]: https://openmediavault.org
[3]: https://freenas.org
[4]: http://www.freenas.org/freenas-vs-openmediavault/
[5]: https://www.debian.org/
[6]: https://www.freebsd.org/
[7]: https://openmediavault.readthedocs.io/en/latest/installation/index.html
[8]: https://invisible-island.net/ncurses/
[9]: https://openmediavault.readthedocs.io/en/latest/installation/via_iso.html
[10]: https://en.wikipedia.org/wiki/RAID