分类 技术 下的文章

在本系列早先的文章中,我们讨论了关于如何在 Windows 10 上开启 WSL 之旅 的内容。作为本系列的最后一篇文章,我们准备探讨一些能在 Windows 10 上广泛使用的 Linux 命令。

话题深入之前,请先让我们明确本教程所适用的人群。本文适用于使用 Windows 10 系统,但是又想在 Azure、AWS 或是私有云平台上学习 Linux 的初级开发者。换句话说,就是为了帮助初次接触 Linux 系统的 Windows 10 用户。

您的工作任务决定了您所需要的命令,而我的需求可能和您的不一样。本文旨在帮助您在 Windwos 10 上舒服的使用 Linux。不过请牢记,WSL 并不提供硬件访问的功能,比如声卡、GPU,至少官方是这么描述的。但是这可能并不能阻止 Linux 用户的折腾精神。很多用户不仅完成了硬件访问,甚至已经在 Windows 10 上安装上了 Linux 桌面程序。但是本文并不会涉及这些内容,我们可能会讨论这些,但不是现在。

下面是我们需要着手的任务。

如何让您的 Linux 系统保持到最新的版本

因为 Linux 运行在了 Windows 系统中,所以您将被剥夺 Linux 系统所提供的所有安全特性。另外,如果不及时给 Linux 系统打补丁,你的 Windows 设备将被迫暴露在外界威胁中,所以还请保持您的 Linux 为最新版本。

WSL 官方支持 openSUSE/SUSE Linux Enterprise 和 Ubuntu。您也可以安装其他发行版,但是我只需要它们当中的二者之一就可以完成我的所有工作,毕竟,我只需要访问一些 Linux 基础程序。

更新 openSUSE Leap:

sudo zypper up

如果您想升级系统,您可以运行下面的命令:

sudo zypper dup

更新 Ubuntu:

sudo apt-get update
sudo apt-get dist-upgrade

这样你就安全了,由于 Linux 系统的更新是渐进式的,所以更新系统成为了我的日常。不像 Windows 10 的更新通常需要重启系统,而 Linux 不同,一般只有 KB 或是 MB 级的更新,无需重启。

管理文件目录

系统更新之后,我们来看看一些或普通或不太普通的任务。

系统更新之外的第二重要的任务是使用 Linux 管理本地和远程文件。我承认我更青睐图形界面程序,但是终端能提供更可靠、更有价值的服务。要不你使用资源管理器移动 1 TB 的文件试试?我通常使用 rsync 命令来移动大量文件。如果中断任务,rsync 可以在上次停止的位置继续工作。

虽然您可能更习惯使用 cp 或是 mv 命令复制、移动文件,但是我还是喜欢灵活的 rsync 命令,了解 rsync 对远程文件传输也有帮助。使用 rsync 大半为了完成下面三个任务:

使用 rsync 复制整个目录:

rsync -avzP /source-directory /destination directory

使用 rsync 移动文件:

rsync --remove-source-files -avzP /source-directory /destination-directory

在成功复制目标目录之后,此命令将删除源文件。

使用 rsync 同步文件:

我的文件可能在多处存储。但是,我只会在主要位置中增加或是删除。如果不使用专业的软件,同步文件可能会给用户带来挑战,而 rsync 刚好可以简化这个过程。这个命令可以让两个目录文件内容同步。不过要注意,这是一个单向同步,即从源位置同步到目标位置。

rsync --delete -avzP /source-directory /destination-directory

如果源目录中没有找到文件,上述命令将删除目标目录中的文件。换言之,它创建了源目录的一个镜像。

文件自动备份

保持文件备份是一项乏味的工作。为了保持我的设备的完全同步,我运行了一个 cron 作业在夜间保持我的所有目录同步。不过我会留一个外部驱动器,基本上每周我都会手动同步一次。由于可能删掉我不想删除的文件,所以我并没有使用 --delete 选项。我会根据情况手动决定是否使用这个选项。

创建 cron 作业,打开 crontab:

crontab -e

移动大文件时,我会选择在系统空闲的深夜执行该命令。此命令将在每天早上 1 点运行,您大概可以这样修改它:

# 0 1 * * * rsync -avzP /source-directory /destination-directory

这是使用 crontab 的定时作业的命令结构:

# m h dom mon dow command

在此,m = 分钟,h = 小时,dom = 本月的某天,mon = 月,dow = 本周的某天。

我们将在每天早上 1 点运行这条命令。您可以选择 dow 或是 dom(比如,每月 5 号)等。您可以在 这里 阅读更多相关内容。

管理远程服务器

在 Windows 系统上使用 WSL 的优势之一就是能方便管理云上的 Linux 服务器,WSL 能提供原生的 Linux 工具给您。首先,您需要使用 ssh 命令登录远程 Linux 服务器。

比如,我的服务器 ip 是 192.168.0.112;端口为 2018(不是默认的 22 端口);Linux 用户名是 swapnil,密码是 “就不告诉你”。

ssh -p2018 [email protected]

它会向您询问用户密码,然后您就可以登录到 Linux 服务器了。现在您可以在 Linux 服务器上执行任意您想执行的所有操作了。不需使用 PuTTY 程序了。

使用 rsync ,您可以很轻易的在本地机器和远程机器之间传输文件。源目录还是目标目录取决于您是上传文件到服务器,还是下载文件到本地目录,您可以使用 username@IP-address-of-server:/path-of-directory 来指定目录。

如果我想复制一些文本内容到服务器的 home 目录,命令如下:

rsync -avzP /source-directory-on-local-machine ‘ssh -p2018’ [email protected]:/home/swapnil/Documents/

这将会复制这些文件到远程服务器中 Documents 目录。

总结

本教程主要是为了证明您可以在 Windows 10 系统上通过 WSL 完成 Linux 方面的很大一部分的任务。通常来说,它提高了生产效率。现在,Linux 的世界已经向 Windwos 10 系统张开怀抱了,尽情探索吧。如果您有任何疑问,或是想了解 WSL 涉及到的其他层面,欢迎在下方的评论区分享您的想法。

Administering Linux on Azure (LFS205) 课程中了解更多,可以在 这里 注册。


via: https://www.linux.com/blog/learn/2018/3/most-useful-linux-commands-you-can-run-windows-10

作者:SAPNIL BHARTIYA 译者:CYLeft 校对:wxy

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

Q:如何对我存放在 /var/www/html/ 目录中的所有文件设置只读权限?

你可以使用 chmod 命令对 Linux/Unix/macOS/OS X/*BSD 操作系统上的所有文件来设置只读权限。这篇文章介绍如何在 Linux/Unix 的 web 服务器(如 Nginx、 Lighttpd、 Apache 等)上来设置只读文件权限。

如何设置文件为只读模式

语法为:

### 仅针对文件 ###
chmod 0444 /var/www/html/*
chmod 0444 /var/www/html/*.php

如何设置目录为只读模式

语法为:

### 仅针对目录 ###
chmod 0444 /var/www/html/
chmod 0444 /path/to/your/dir/
# ***************************************************************************
# 假如 web 服务器的用户/用户组是 www-data,文件拥有者是 ftp-data 用户/用户组
# ***************************************************************************
# 设置目录所有文件为只读
chmod -R 0444 /var/www/html/
# 设置文件/目录拥有者为 ftp-data
chown -R ftp-data:ftp-data /var/www/html/
# 所有目录和子目录的权限为 0445 (这样 web 服务器的用户或用户组就可以读取我们的文件)
find /var/www/html/ -type d -print0 | xargs -0 -I {} chmod 0445 "{}"

找到所有 /var/www/html 下的所有文件(包括子目录),键入:

### 仅对文件有效 ###
find /var/www/html -type f -iname "*" -print0 | xargs -I {} -0 chmod 0444 {}

然而,你需要在 /var/www/html 目录及其子目录上设置只读和执行权限,如此才能让 web 服务器能够访问根目录,键入:

### 仅对目录有效 ###
find /var/www/html -type d -iname "*" -print0 | xargs -I {} -0 chmod 0544 {}

警惕写权限

请注意在 /var/www/html/ 目录上的写权限会允许任何人删除文件或添加新文件。也就是说,你可能需要设置一个只读权限给 /var/www/html/ 目录本身。

### web根目录只读 ###
chmod 0555 /var/www/html

在某些情况下,根据你的设置要求,你可以改变文件的属主和属组来设置严格的权限。

### 如果 /var/www/html 目录的拥有人是普通用户,你可以设置拥有人为:root:root 或 httpd:httpd (推荐) ###
chown -R root:root /var/www/html/

### 确保 apache 拥有 /var/www/html/ ###
chown -R apache:apache /var/www/html/

关于 NFS 导出目录

你可以在 /etc/exports 文件中指定哪个目录应该拥有只读或者读写权限 。这个文件定义各种各样的共享在 NFS 服务器和他们的权限。如:

# 对任何人只读权限
/var/www/html *(ro,sync) 

# 对192.168.1.10(upload.example.com)客户端读写权限访问
/var/www/html 192.168.1.10(rw,sync)

关于用于 MS-Windows客户端的 Samba(CIFS)只读共享

要以只读共享 sales,更新 smb.conf,如下:

[sales]
comment = Sales Data
path = /export/cifs/sales
read only = Yes
guest ok = Yes

关于文件系统表(fstab)

你可以在 Unix/Linux 上的 /etc/fstab 文件中配置挂载某些文件为只读模式。

你需要有专用分区,不要设置其他系统分区为只读模式。

如下在 /etc/fstab 文件中设置 /srv/html 为只读模式。

/dev/sda6 /srv/html ext4 ro 1 1

你可以使用 mount 命令重新挂载分区为只读模式(使用 root 用户)

# mount -o remount,ro /dev/sda6 /srv/html

或者

# mount -o remount,ro /srv/html

上面的命令会尝试重新挂载已挂载的文件系统到 /srv/html上。这是改变文件系统挂载标志的常用方法,特别是让只读文件改为可写的。这种方式不会改变设备或者挂载点。让文件变得再次可写,键入:

# mount -o remount,rw /dev/sda6 /srv/html

# mount -o remount,rw /srv/html

Linux:chattr 命令

你可以在 Linux 文件系统上使用 chattr 命令改变文件属性为只读,如:

chattr +i /path/to/file.php
chattr +i /var/www/html/

# 查找任何在/var/www/html下的文件并设置为只读#
find /var/www/html -iname "*" -print0 | xargs -I {} -0 chattr +i {}

通过提供 -i 选项可删除只读属性:

chattr -i /path/to/file.php

FreeBSD、Mac OS X 和其他 BSD Unix 用户可使用chflags命令

### 设置只读 ##
chflags schg /path/to/file.php

### 删除只读 ##
chflags noschg /path/to/file.php

via: https://www.cyberciti.biz/faq/howto-set-readonly-file-permission-in-linux-unix/

作者:Vivek Gite 译者:yizhuoyan 校对:wxy

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

痛恨上网时看到广告?学习这篇教程来设置 Pi-hole。

有一个闲置的树莓派?在浏览网页时讨厌广告?Pi-hole 是一个拦截广告的开源软件项目,它可以将你的家庭网络上的所有广告路由到一个不存在的地方,从而实现在你的设备上拦截广告的目的。这么好的方法只需要花几钟的时间来设置,你就可以使用它了。

Pi-hole 拦截了超过 100,000 个提供广告的域名,它可以拦截任何设备(包括移动设备、平板电脑、以及个人电脑)上的广告,并且它是完整的拦截了广告,而不是仅将它们隐藏起来,这样做可以提升总体的网络性能(因为广告不需要下载)。你可以在一个 web 界面上、或者也可以使用一个 API 来监视性能和统计数据。

你需要:

  • 树莓派 + SD 卡
  • USB 电源线
  • 以太网线

你不需要使用一个最新型号的树莓派 — 一个老款足够完成这项工作,只要它的内存不小于 512MB 就可以 — 因此一个一代树莓派 Model B(rev 2)就足够,一个 Model B+、或者二代的或者三代的树莓派都可以。你可以使用 Pi Zero,但需要一个 USB micro 以太网适配器。你可以使用一个带 WiFi 的 Pi Zero W 而不是以太网。但是,作为你的网络基础设施的一部分,我建议你使用一个性能良好、稳定的有线连接来代替 WiFi 连接。

准备 SD 卡

开始的第一步,你可能需要将 Raspbian Stretch Lite 安装到一个 SD 卡上。SD 卡至少需要 4GB 大小(完整的桌面版 Raspbian 镜像至少要 8GB,但是 Lite 版镜像更小更轻量化,足够完成这项工作)。如果你喜欢,也可以使用完整的 Raspbian 桌面版镜像,但是作为一个去运行简单应用程序的树莓派,你没必要做更多的事情。

使用你的个人电脑,从树莓派的网站上下载 Raspbian Stretch Lite 镜像。解压它并提取出里面的 .img 文件,然后将这个 .img 文件写入到你的 SD 卡。不论你的 SD 卡是否是空白的,这一步都不会有什么麻烦,因为在写入前它会清空上面的数据。

如果你使用的是 Linux,写入镜像文件更简单的办法是使用命令行工具 dd。或者,你也可以使用跨平台的软件 Etcher (可以去参考 Les Pounder 写的指南 “如何为树莓派准备 SD 卡“)。

SD 卡准备完成之后,你可以将它插入到你的树莓派,连接上键盘、显示器和以太网,然后为树莓派接上电源。在初始化设置之后,这个树莓派就不需要键盘或显示器了。如果你有使用“ 无末端 headless ”树莓派工作的经验,你可以 启用 SSH 然后去设置它 启用远程连接

安装 Pi-hole

在你的树莓派引导完成之后,用缺省用户名(pi)和密码(raspberry)登入。现在你就可以运行命令行了,可以去安装 Pi-hole 了。简单地输入下列命令并回车:

curl -sSL https://install.pi-hole.net | bash

这个命令下载了 Pi-hole 安装脚本然后去运行它。你可以在你的电脑浏览器中输入 https://install.pi-hole.net 来查看它的内容,你将会看到这个脚本做了些什么。它为你生成了一个管理员密码,并和其它安装信息一起显示在你的屏幕上。

就是这么简单,几分钟之后,你的树莓派将准备好为你拦截广告。

在你断开树莓派连接之前,你需要知道它的 IP 地址和你的路由器的 IP 地址。(如果你不知道),在你的终端中输入 hostname -I 来查看你的树莓派的 IP 地址,输入 ip route | grep default 来找到你的路由器的 IP 地址。你看到的将是像 192.168.1.1 这样的地址。

配置你的路由器

你的树莓派现在运行着一个 DNS 服务器,接下来你需要告诉你的路由器去使用 Pi-hole 作为它的 DNS 服务器而不是你的 ISP 提供给你的缺省 DNS。进入路由器的管理控制台 web 界面。这个界面一般是输入你的路由器的 IP 地址来进入的。

找到 LAN 设置下面的 DHCP/DNS 设置,然后将你的主 DNS 服务器的 IP 地址设置为你的 Pi-hole 的 IP 地址。设置完成之后,它应该你下图的样子:

关于这一步的更多信息,可以查看 Pi-hole discourse

你还需要确保你的 Pi-hole 始终保持相同的 IP 地址,因此,你需要去查看 DHCP 设置,将你的树莓派的 IP 地址条目添加到保留地址中。

外部测试

现在,在命令行下输入 sudo halt 关闭运行的树莓派,并断开它的电源。你可以拔掉显示器连接线和键盘,然后将你的树莓派放置到一个合适的固定的地方 — 或许应该将它放在你的路由器附近。确保连接着以太网线,然后重新连接电源以启动它。

在你的个人电脑上导航到一个网站(强烈建议访问 Opensource.com 网站),或者用你的 WiFi 中的一个设备去检查你的因特网访问是否正常(如果不能正常访问,可能是你的 DNS 配置错误)。如果在浏览器中看到了预期的结果,说明它的工作正常。现在,你浏览网站时,应该再也看不到广告了!甚至在你的 app 中提供的广告也无法出现在你的移动设备中!祝你“冲浪”愉快!

如果你想去测试一下你的广告拦截的新功能,你可以去这个 测试页面 尝试浏览一些内置广告的网站。

现在你可以在你的电脑浏览器上输入 Pi-hole 的 IP 地址来访问它的 web 界面(比如,http://192.168.1.4/admin 或者 http://pi.hole/admin 也可能会工作)。你将看到 Pi-hole 管理面板和一些统计数据(在这时可能数字比较小)。在你输入(在安装时显示在屏幕上的)密码后,你将看到更漂亮的图形界面:

你也可以微调你的 Pi-hole 的设置,像域名的白名单和黑名单、永久和临时禁止、访问拦截统计信息等等。

个别情况下,你可能需要去升级你的 Pi-hole 安装。当软件需要更新时,这个 web 界面会出现一个更新提示。如果你启用了 SSH,你可以远程登入,否则,那你只能再次连接键盘和显示器。远程登入之后,输入 pihole -up命令来更新它。

如果你使用过 Pi-hole 或者其它的开源广告拦截器,请在下面的评论区把你的经验共享出来。


via: https://opensource.com/article/18/2/block-ads-raspberry-pi

作者:Ben Nuttall 译者:qhwdw 校对:wxy

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

我们将通过一个一步步的、新手友好的教程来向你展示如何搭建一个“我的世界(Minecraft)”服务器。这将会是一个长期的多人游戏服务器,你可以与来自世界各地的朋友们一起玩,而不用在同一个局域网下。

如何搭建一个“我的世界”服务器 - 快速指南

在你开始行动之前,要先了解一些事情:

为什么你应该使用专门的“我的世界”服务器提供商

既然你正在阅读这篇文章,你肯定对搭建自己的“我的世界”服务器感兴趣。不应该使用专门的“我的世界”服务器提供商的原因有很多,以下是其中一些:

  • 它们通常很慢。这是因为你是在和很多用户一起共享资源。这有的时候会超负荷,他们中很多都会超售。
  • 你并不能完全控制“我的世界”服务端或真正的服务器。你没法按照你的意愿进行自定义。
  • 你是受限制的。这种主机套餐或多或少都会有限制。

当然,使用现成的提供商也是有优点的。最好的就是你不用做下面这些操作。但是那还有什么意思呢?!

为什么不应该用你的个人电脑作为“我的世界”服务器

我们注意到很多教程都展示的是如何在你自己的电脑上搭建服务器。这样做有一些弊端,比如:

  • 你的家庭网络不够安全,无法抵挡 DDoS 攻击。游戏服务器通常容易被 DDoS 攻击,而你的家庭网络设置通常不够安全,来抵挡它们。很可能连小型攻击都无法阻挡。
  • 你得处理端口转发。如果你试着在家庭网络中搭建“我的世界”服务器的话,你肯定会偶然发现端口转发的问题,并且处理时可能会有问题。
  • 你得保持你的电脑一直开着。你的电费将会突破天际,并且你会增加不必要的硬件负载。大部分服务器硬件都是企业级的,提升了稳定性和持久性,专门设计用来处理负载。
  • 你的家庭网络速度不够快。家庭网络并不是设计用来负载多人联机游戏的。即使你想搭建一个小型服务器,你也需要一个更好的网络套餐。幸运的是,数据中心有多个高速的、企业级的互联网连接,来保证他们达到(或尽量达到)100%在线。
  • 你的硬件很可能不够好。再说一次,服务器使用的都是企业级硬件,最新最快的处理器、固态硬盘,等等。你的个人电脑很可能不是的。
  • 你的个人电脑很可能是 Windows/MacOS。尽管这有所争议,但我们相信 Linux 更适合搭建游戏服务器。不用担心,搭建“我的世界”服务器不需要完全了解 Linux(尽管推荐这样)。我们会向你展示你需要了解的。

我们的建议是不要使用个人电脑,即使从技术角度来说你能做到。买一个云服务器并不是很贵。下面我们会向你展示如何在云服务器上搭建“我的世界”服务端。小心地遵守以下步骤,就很简单。

搭建一个“我的世界”服务器 - 需求

这是一些需求,你在教程开始之前需要拥有并了解它们:

  • 你需要一个 Linux 云服务器。我们推荐 Vultr。这家价格便宜,服务质量高,客户支持很好,并且所有的服务器硬件都很高端。检查“我的世界”服务器需求来选择你需要哪种类型的服务器(像内存和硬盘之类的资源)。我们推荐每月 20 美元的套餐。他们也支持按小时收费,所以如果你只是临时需要服务器和朋友们联机的话,你的花费会更少。注册时选择 Ubuntu 16.04 发行版。在注册时选择离你的朋友们最近的地域。这样的话你就需要保护并管理服务器。如果你不想这样的话,你可以选择托管的服务器,这样的话服务器提供商可能会给你搭建好一个“我的世界”服务器。
  • 你需要一个 SSH 客户端来连接到你的 Linux 云服务器。新手通常建议使用 PuTTy,但我们也推荐使用 MobaXTerm。也有很多 SSH 客户端,所以挑一个你喜欢的吧。
  • 你需要设置你的服务器(至少做好基本的安全设置)。谷歌一下你会发现很多教程。你也可以按照 Linode 的 安全指南,然后在你的 Vultr 服务器上一步步操作。
  • 下面我们将会处理软件依赖,比如 Java。

终于,到我们真正的教程了:

如何在 Ubuntu(Linux)上搭建一个“我的世界”服务器

这篇教程是为 Vultr 上的 Ubuntu 16.04 撰写并测试可行的。但是这对 Ubuntu 14.04, Ubuntu 18.04,以及其他基于 Ubuntu 的发行版、其他服务器提供商也是可行的。

我们使用默认的 Vanilla 服务端。你也可以使用像 CraftBukkit 或 Spigot 这样的服务端,来支持更多的自定义和插件。虽然如果你使用过多插件的话会影响服务端。这各有优缺点。不管怎么说,下面的教程使用默认的 Vanilla 服务端,来使事情变得简单和更新手友好。如果有兴趣的话我们可能会发表一篇 CraftBukkit 的教程。

1. 登录到你的服务器

我们将使用 root 账户。如果你使用受限的账户的话,大部分命令都需要 sudo。做你没有权限的事情时会出现警告。

你可以通过 SSH 客户端来登录你的服务器。使用你的 IP 和端口(大部分都是 22)。

在你登录之后,确保你的服务器安全

2. 更新 Ubuntu

在你做任何事之前都要先更新你的 Ubuntu。你可以通过以下命令更新:

apt-get update && apt-get upgrade

在提示时敲击“回车键” 和/或 y

3. 安装必要的工具

在这篇教程中你需要一些工具和软件来编辑文本、长久保持服务端运行等。使用下面的命令安装:

apt-get install nano wget screen bash default-jdk ufw

其中一些可能已经安装好了。

4. 下载“我的世界”服务端

首先,创建一个目录来保存你的“我的世界”服务端和其他文件:

mkdir /opt/minecraft

然后进入新目录:

cd /opt/minecraft

现在你可以下载“我的世界“服务端文件了。去往下载页面获取下载链接。使用 wget 下载文件:

wget https://s3.amazonaws.com/Minecraft.Download/versions/1.12.2/minecraft_server.1.12.2.jar

5. 安装“我的世界”服务端

下载好了服务端的 .jar 文件之后,你就需要先运行一下,它会生成一些文件,包括一个 eula.txt 许可文件。第一次运行的时候,它会返回一个错误并退出。这是正常的。使用下面的命令运行它:

java -Xms2048M -Xmx3472M -jar minecraft_server.1.12.2.jar nogui

-Xms2048M 是你的服务端能使用的最小的内存,-Xmx3472M 是最大的内存。调整基于你服务器的硬件资源。如果你在 Vultr 服务器上有 4GB 内存,并且不用服务器来干其他事情的话可以就这样留着不动。

在这条命令结束并返回一个错误之后,将会生成一个新的 eula.txt 文件。你需要同意那个文件里的协议。你可以通过下面这条命令将 eula=true 添加到文件中:

sed -i.orig 's/eula=false/eula=true/g' eula.txt

你现在可以通过和上面一样的命令来开启服务端并进入“我的世界”服务端控制台了:

java -Xms2048M -Xmx3472M -jar minecraft_server.1.12.2.jar nogui

确保你在 /opt/minecraft 目录,或者其他你安装你的 MC 服务端的目录下。

如果你只是测试或暂时需要的话,到这里就可以停了。如果你在登录服务器时有问题的话,你就需要配置你的防火墙

第一次成功启动服务端时会花费一点时间来生成。

我们将向你展示如何创建一个脚本来启动。

6. 使用脚本启动“我的世界”服务端,让服务端长期运行并在启动时开启

方便起见,我们将创建一个自动启动服务端的 bash 脚本。

首先,使用 nano 创建一个 bash 脚本:

nano /opt/minecraft/startminecraft.sh

这将会打开一个新的(空白)文件。粘贴以下内容:

#!/bin/bash
cd /opt/minecraft/ && java -Xms2048M -Xmx3472M -jar minecraft_server.1.12.2.jar nogui

如果你不熟悉 nano 的话 - 你可以使用 CTRL + X,再敲击 Y,然后回车。这个脚本将进入你先前创建的“我的世界”服务端并运行 Java 命令来开启服务端。你需要执行下面的命令来使脚本可执行:

chmod +x startminecraft.sh

然后,你就可以通过下面的命令随时运行服务端了:

/opt/minecraft/startminecraft.sh

但是,如果/当你登出 SSH 会话的话,服务端就会关闭。要想让服务端不登录也持续运行的话,你可以使用 screen 会话。screen 会话会一直运行,直到实际的服务器被关闭或重启。

使用下面的命令开启一个 screen 会话:

screen -S minecraft

一旦你进入了 screen 会话(看起来就像是你新建了一个 SSH 会话),你就可以使用先前创建的 bash 脚本来启动服务端:

/opt/minecraft/startminecraft.sh

要退出 screen 会话的话,你应该按 CTRL+A-D。即使你离开 screen 会话(断开的),服务端也会继续运行。你现在可以安全的登出 Ubuntu 服务器了,你创建的“我的世界”服务端将会继续运行。

但是,如果 Ubuntu 服务器重启或关闭了的话,screen 会话将不再起作用。所以为了让我们之前做的这些在启动时自动运行,做下面这些:

打开 /etc/rc.local 文件:

nano /etc/rc.local

exit 0 语句前添加如下内容:

screen -dm -S minecraft /opt/minecraft/startminecraft.sh
exit 0

保存并关闭文件。

要访问“我的世界”服务端控制台,只需运行下面的命令来重新连接 screen 会话:

screen -r minecraft

现在就是这样。祝贺你,玩的开心!你现在可以连接到你的“我的世界”服务端或配置/修改它了。

配置你的 Ubuntu 服务器

你首先肯定要设置并确保你的 Ubuntu 服务器安全,如果你还没有这么做的话。按照我们之前提及的指南并谷歌一下来获取更多信息。你需要在服务器上配置的有这些:

开启并配置防火墙

首先,如果防火墙还没有开启的话,你应该先开启先前安装的 UFW:

ufw enable

你应该开放默认的“我的世界”服务端端口:

ufw allow 25565/tcp

你应该根据你的使用情况开放或拒绝其他规则。如果你不用服务器负载网站的话,就应该拒绝 80 和 443 端口。谷歌一下 Ubuntu 的 UFW/防火墙指南,你会得到建议的。设置防火墙的时候小心一些,如果你屏蔽了 SSH 端口的话你会把自己锁在服务器外面。

由于这是默认端口,这个端口经常被扫描以及攻击。你可以通过屏蔽白名单之外的访问权限来阻挡攻击。

首先,你需要在你的 server.properties 文件中开启白名单模式。要开启的话,打开文件:

nano /opt/minecraft/server.properties

并将 white-list 行改为 true

white-list=true

保存并关闭文件。

然后重启你的服务器(重启你的服务器或重新运行启动脚本):

/opt/minecraft/startminecraft.sh

访问“我的世界”服务端控制台:

screen -r minecraft

如果你想要某人进入你的服务端,你需要通过以下命令把他们添加到白名单:

whitelist add PlayerUsername

运行以下命令来将他们移出白名单:

whitelist remove PlayerUsername

使用 CTRL+A-D 来退出 screen(服务器控制台)。值得注意的是,这会拒绝除白名单以外的所有人连接到服务端。

如何搭建“我的世界”服务器 - 常见问题

我们将解答一些有关“我的世界”服务器和我们的指南的常见问题。

我该如何重启“我的世界”服务器?

如果你按照我们的教程来的话,包括开启了服务端随系统启动,你可以直接重启你的 Ubuntu 服务器。如果没有设置岁系统启动的话,你可以通过重新运行启动脚本来重启“我的世界”服务端:

/opt/minecraft/startminecraft.sh

我该如何配置我的“我的世界”服务端?

你可以使用 server.properties 文件来配置你的服务端。查看“我的世界”维基来获取更多信息,你也可以什么都不动,它会工作的很好。

如果你想改变游戏模式、难度等诸如此类的东西,你可以使用服务端控制台。通过下面的命令访问服务端控制台:

screen -r minecraft

并执行命令。像下面这些命令:

difficulty hard
gamemode survival @a

你可能需要重新启动服务端,这取决于你使用了什么命令。你可以使用很多命令,查看维基来获取更多。

我该如何升级我的“我的世界”服务端?

如果有新版本发布的话,你需要这样做:

进入“我的世界”目录:

cd /opt/minecraft

下载最新的版本,比如使用 wget 下载 1.12.3 版本:

wget https://s3.amazonaws.com/Minecraft.Download/versions/1.12.3/minecraft_server.1.12.3.jar

接下来,运行并构建新服务端:

java -Xms2048M -Xmx3472M -jar minecraft_server.1.12.3.jar nogui

最后,更新你的启动脚本:

nano /opt/minecraft/startminecraft.sh

更新版本号数字:

#!/bin/bash
cd /opt/minecraft/ && java -Xms2048M -Xmx3472M -jar minecraft_server.1.12.3.jar nogui

现在你可以重启服务端了,一切都应该没有问题。

为什么你们的教程这么长,而其他的只有 2 行那么长?!

我们想让这个教程对新手来说更友好,并且尽可能详细。我们还向你展示了如何让服务端长期运行并跟随系统启动,我们向你展示了如何配置你的服务端以及所有的东西。我是说,你当然可以用几行来启动“我的世界”服务器,但那样的话绝对很烂,从不仅一方面说。

我不知道 Linux 或者这里说的什么东西,我该如何搭建一个“我的世界”服务器呢?

只要通篇阅读我们的文章,复制粘贴几个命令就行了。如果你真的不知道该如何做的话,我们可以帮你,或者直接找一个托管的服务器提供商,让他们帮你做这些。

我该如何在服务端上安装 mod 和插件?

我们的文章意图作一篇入门指南,你应该查看“我的世界维基”,或者谷歌一下来获取更多信息。网上有很多教程。


via: https://thishosting.rocks/how-to-make-a-minecraft-server/

作者:ThisHosting.Rocks 译者:heart4lor 校对:wxy

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

使用低成本的硬件和开源软件设计一个高性能计算集群。

在我的 之前发表在 Opensource.com 上的文章中,我介绍了 OpenHPC 项目,它的目标是致力于加速高性能计算(HPC)的创新。这篇文章将更深入来介绍使用 OpenHPC 的特性来构建一个小型的 HPC 系统。将它称为 HPC 系统 可能有点“扯虎皮拉大旗”的意思,因此,更确切的说法应该是,它是一个基于 OpenHPC 项目发布的 集群构建方法 的系统。

这个集群由两台树莓派 3 系统作为计算节点,以及一台虚拟机作为主节点,结构示意如下:

 title=

我的主节点运行的是 x86\_64 架构的 CentOS 操作系统,而计算节点运行了 aarch64 的轻度修改版的 CentOS 操作系统。

下图是真实的设备工作照:

 title=

要把我的系统配置成像上图这样的 HPC 系统,我是按照 OpenHPC 的集群构建方法的 CentOS 7.4/aarch64 + Warewulf + Slurm 安装指南 (PDF)的一些步骤来做的。这个方法包括了使用 Warewulf 的配置说明;因为我的那三个系统是手动安装的,我跳过了 Warewulf 部分以及创建 Ansible 剧本 的一些步骤。

Ansible 剧本中设置完成我的集群之后,我就可以向资源管理器提交作业了。在我的这个案例中, Slurm 充当了资源管理器,它是集群中的一个实例,由它来决定我的作业什么时候在哪里运行。在集群上启动一个简单的作业的方式之一:

[ohpc@centos01 ~]$ srun hostname
calvin

如果需要更多的资源,我可以去告诉 Slurm,我希望在 8 个 CPU 上去运行我的命令:

[ohpc@centos01 ~]$ srun -n 8 hostname
hobbes
hobbes
hobbes
hobbes
calvin
calvin
calvin
calvin

在第一个示例中,Slurm 在一个单个的 CPU 上运行了指定的命令(hostname),而在第二个示例中,Slurm 在 8 个 CPU 上运行了那个命令。我的计算节点一个命名为 calvin,而另一个命名为 hobbes;在上面的命令输出部分可以看到它们的名字。每个计算节点都是由 4 个 CPU 核心的树莓派 3 构成的。

在我的集群中提交作业的另一种方法是使用命令 sbatch,它可以用于运行脚本,将输出写入到一个文件,而不是我的终端上。

[ohpc@centos01 ~]$ cat script1.sh
#!/bin/sh
date
hostname
sleep 10
date
[ohpc@centos01 ~]$ sbatch script1.sh
Submitted batch job 101

它将创建一个名为 slurm-101.out 的输出文件,这个输出文件包含下列的内容:

Mon 11 Dec 16:42:31 UTC 2017
calvin
Mon 11 Dec 16:42:41 UTC 2017

为示范资源管理器的基本功能,简单的串行命令行工具就行,但是,做各种工作去配置一个类似 HPC 系统就有点无聊了。

一个更有趣的应用是在这个集群的所有可用 CPU 上运行一个 Open MPI 的并行作业。我使用了一个基于 康威生命游戏 的应用,它被用于一个名为“使用 Red Hat 企业版 Linux 跨多种架构运行康威生命游戏”的 视频。除了以前基于 MPI 的 Game of Life 版本之外,在我的集群中现在运行的这个版本对每个涉及的主机的单元格颜色都是不同的。下面的脚本以图形输出的方式来交互式启动应用:

$ cat life.mpi
#!/bin/bash

module load gnu6 openmpi3

if [[ "$SLURM_PROCID" != "0" ]]; then
    exit
fi

mpirun ./mpi_life -a -p -b

我使用下面的命令来启动作业,它告诉 Slurm,为这个作业分配 8 个 CPU:

$ srun -n 8 --x11 life.mpi

为了演示,这个作业有一个图形界面,它展示了当前计算的结果:

红色单元格是由其中一个计算节点来计算的,而绿色单元格是由另外一个计算节点来计算的。我也可以让康威生命游戏程序为使用的每个 CPU 核心(这里的每个计算节点有四个核心)去生成不同的颜色,这样它的输出如下:

感谢 OpenHPC 提供的软件包和安装方法,因为它们让我可以去配置一个由两个计算节点和一个主节点的 HPC 式的系统。我可以在资源管理器上提交作业,然后使用 OpenHPC 提供的软件在我的树莓派的 CPU 上去启动 MPI 应用程序。


想学习更多的关于使用 OpenHPC 去构建树莓派集群,请参与 Adrian Reber 在 DevConf.cz 2018 的讨论,它于 1月 26-28 日在 Brno,Czech Republic 举行,以及在 CentOS Dojo 2018 ,它于 2 月 2 日在 Brussels 举行。

关于作者

Adrian Reber —— Adrian 是 Red Hat 的高级软件工程师,他早在 2010 年就开始了迁移处理过程到高性能计算环境,从那个时候起迁移了许多的处理过程,并因此获得了博士学位,然后加入了 Red Hat 公司并开始去迁移到容器。偶尔他仍然去迁移单个处理过程,并且它至今仍然对高性能计算非常感兴趣。关于我的更多信息点这里


via: https://opensource.com/article/18/1/how-build-hpc-system-raspberry-pi-and-openhpc

作者:Adrian Reber 译者:qhwdw 校对:wxy

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

使用 urandom

使用 urandom!使用 urandom!使用 urandom

使用 urandom!使用 urandom!使用 urandom

但对于密码学密钥呢?

仍然使用 urandom

为什么不是 SecureRandom、OpenSSL、havaged 或者 c 语言实现呢?

这些是用户空间的 CSPRNG(伪随机数生成器)。你应该用内核的 CSPRNG,因为:

  • 内核可以访问原始设备熵。
  • 它可以确保不在应用程序之间共享相同的状态。
  • 一个好的内核 CSPRNG,像 FreeBSD 中的,也可以保证它播种之前不给你随机数据。

研究过去十年中的随机失败案例,你会看到一连串的用户空间的随机失败案例。Debian 的 OpenSSH 崩溃?用户空间随机!安卓的比特币钱包重复 ECDSA 随机 k 值?用户空间随机!可预测洗牌的赌博网站?用户空间随机!

用户空间的生成器几乎总是依赖于内核的生成器。即使它们不这样做,整个系统的安全性也会确保如此。但用户空间的 CSPRNG 不会增加防御深度;相反,它会产生两个单点故障。

手册页不是说使用 /dev/random 嘛?

这个稍后详述,保留你的意见。你应该忽略掉手册页。不要使用 /dev/random/dev/random/dev/urandom 之间的区别是 Unix 设计缺陷。手册页不想承认这一点,因此它产生了一个并不存在的安全顾虑。把 random(4) 中的密码学上的建议当作传说,继续你的生活吧。

但是如果我需要的是真随机值,而非伪随机值呢?

urandom 和 /dev/random 提供的是同一类型的随机。与流行的观念相反,/dev/random 不提供“真正的随机”。从密码学上来说,你通常不需要“真正的随机”。

urandom 和 /dev/random 都基于一个简单的想法。它们的设计与流密码的设计密切相关:一个小秘密被延伸到不可预测值的不确定流中。 这里的秘密是“熵”,而流是“输出”。

只在 Linux 上 /dev/random 和 urandom 仍然有意义上的不同。Linux 内核的 CSPRNG 定期进行密钥更新(通过收集更多的熵)。但是 /dev/random 也试图跟踪内核池中剩余的熵,并且如果它没有足够的剩余熵时,偶尔也会罢工。这种设计和我所说的一样蠢;这与基于“密钥流”中剩下多少“密钥”的 AES-CTR 设计类似。

如果你使用 /dev/random 而非 urandom,那么当 Linux 对自己的 RNG(随机数生成器)如何工作感到困惑时,你的程序将不可预测地(或者如果你是攻击者,非常可预测地)挂起。使用 /dev/random 会使你的程序不太稳定,但这不会让你在密码学上更安全。

这是个缺陷,对吗?

不是,但存在一个你可能想要了解的 Linux 内核 bug,即使这并不能改变你应该使用哪一个 RNG。

在 Linux 上,如果你的软件在引导时立即运行,或者这个操作系统你刚刚安装好,那么你的代码可能会与 RNG 发生竞争。这很糟糕,因为如果你赢了竞争,那么你可能会在一段时间内从 urandom 获得可预测的输出。这是 Linux 中的一个 bug,如果你正在为 Linux 嵌入式设备构建平台级代码,那你需要了解它。

在 Linux 上,这确实是 urandom(而不是 /dev/random)的问题。这也是 Linux 内核中的错误。 但它也容易在用户空间中修复:在引导时,明确地为 urandom 提供种子。长期以来,大多数 Linux 发行版都是这么做的。但不要切换到不同的 CSPRNG。

在其它操作系统上呢?

FreeBSD 和 OS X 消除了 urandom 和 /dev/random 之间的区别;这两个设备的行为是相同的。不幸的是,手册页在解释为什么这样做上干的很糟糕,并延续了 Linux 上 urandom 可怕的神话。

无论你使用 /dev/random 还是 urandom,FreeBSD 的内核加密 RNG 都不会停摆。 除非它没有被提供种子,在这种情况下,这两者都会停摆。与 Linux 不同,这种行为是有道理的。Linux 应该采用它。但是,如果你是一名应用程序开发人员,这对你几乎没有什么影响:Linux、FreeBSD、iOS,无论什么:使用 urandom 吧。

太长了,懒得看

直接使用 urandom 吧。

结语

ruby-trunk Feature #9569

现在,在尝试检测 /dev/urandom 之前,SecureRandom.random\_bytes 会尝试检测要使用的 OpenSSL。 我认为这应该反过来。在这两种情况下,你只需要将随机字节进行解压,所以 SecureRandom 可以跳过中间人(和第二个故障点),如果可用的话可以直接与 /dev/urandom 进行交互。

总结:

/dev/urandom 不适合用来直接生成会话密钥和频繁生成其他应用程序级随机数据。

GNU/Linux 上的 random(4) 手册所述......

感谢 Matthew Green、 Nate Lawson、 Sean Devlin、 Coda Hale 和 Alex Balducci 阅读了本文草稿。公正警告:Matthew 只是大多同意我的观点。


via: https://sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers/

作者:Thomas & Erin Ptacek 译者:kimii 校对:wxy

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