2018年2月

Bunco:一个使你的“快艇”游戏看起来更复杂的掷骰子游戏。

我已经有段时间没有编写游戏了,所以我觉得现在正是做一些这方面事情的时候。起初,我想“用脚本编一个 Halo游戏?”(LCTT 译注:Halo,光晕系列游戏),但我后来意识到这不太可能。来编一个叫 Bunco 的简单骰子游戏吧。你也许没有听说过,不过你母亲绝对知道 —— 当一群年轻女孩聚在当地的酒吧或者小酒馆的时候,这是个很受欢迎的游戏。

游戏一共六轮,有三个骰子,规则很简单。每次投三个骰子,投出的点数要和当前的轮数数字一致。如果三个骰子都和当前的轮数一致,(比如,在第三轮三个骰子都是 3),你这一轮的分数就是 21。 如果三个骰子点数都相同但和轮数数字不同,你会得到最低的 Bunco 分数,只有 5 分。如果你投出的点数两者都不是,每一个和当前轮数相同的骰子得 1 分。

要想玩这个游戏,它还涉及到团队合作,每一队(包括赢的那队),每人付 5 美元现金,或赢家得到其他类似现金奖励,并规定什么样的情况下才是赢家,例如“最多 Buncos” 或“最大点数”的情况下胜利。在这里我会跳过这些,而只关注投骰子这一部分。

关于数学逻辑部分

在专注于编程这方面的事之前,我先简单说说游戏背后的数学逻辑。要是有一个适当重量的骰子投骰子会变得很容易,任意一个值出现概率都是 1/6。

完全随机小提示:不确定你的骰子是否每个面都是一样重量? 把它们扔进盐水里然后掷一下。YouTube 上有一些有趣的 D&D 世界的视频向你展示了怎么来做这个测试。

所以三个骰子点数一样的几率有多大? 第一个骰子 100% 会有一个值 (这儿没什么可说的),所以很简单。第二个则有 16.66% 的概率和第一个骰子的值一样,接下来第三个骰子也是一样。 但当然,总概率是三个概率相乘的结果,所以最后,三个骰子值相等的概率是 2.7%。

接下来,每个骰子和当前轮数数字相同的概率都是 16.66%。从数学角度来说:0.166 * 0.166 * 0.166 = 0.00462 。

换句话说,你有 0.46% 的可能性投出 Bunco,比 200 次中出现一次的可能性还小一点。

实际上还可以更难。如果你有 5 个骰子,投出 Mini Bunco (也可以叫做 Yahtzee “快艇”) 的概率为 0.077%,如果你想所有的骰子的值都相同,假设都是 6,那概率就是 0.00012%,那就基本上没什么可能了。

开始编程吧

和所有游戏一样,最难的部分是有一个能生成真正的随机数的随机数发生器。这一部分在 shell 脚本中还是很难实现的,所以我需要先回避这个问题,并假设 shell 内置的随机数发生器就够用了。

不过好在内置的随机数发生器很好用。用 $RANDOM 就能得到一个 0MAXINT(32767) 之间的随机值:

$ echo $RANDOM $RANDOM $RANDOM
10252 22142 14863

为了确保产生的值一定是 1 - 6 之中的某个值,使用取余函数:

$ echo $(( $RANDOM % 6 ))
3
$ echo $(( $RANDOM % 6 ))
0

哦!我忘了要加 1,下面是另一次尝试:

$ echo $(( ( $RANDOM % 6 ) + 1 ))
6

下面要实现投骰子这一功能。这个函数中你可以声明一个局部变量来存储生成的随机值:

rolldie()
{
   local result=$1
   rolled=$(( ( $RANDOM % 6 ) + 1 ))
   eval $result=$rolled
}

使用 eval 确保生成的随机数被实际存储在变量中。这一部分也很容易:

rolldie die1

这会为第一个骰子生成一个 1 - 6 之间的随机值存储到 die1 中。要掷 3 个骰子,很简单:

rolldie die1 ; rolldie die2 ; rolldie die3

现在判断下生成的值。首先,判断是不是 Bunco(3 个骰子值相同),然后是不是和当前轮数值也相同:

if [ $die1 -eq $die2 ] && [ $die2 -eq $die3 ] ; then
  if [ $die1 -eq $round ] ; then
    echo "BUNCO!"
    score=25
  else
    echo "Mini Bunco!"
    score=5
  fi

这可能是所有判断语句中最难的部分了,注意第一个条件语句中这种不常用的写法 : [ cond1 ] && [ cond2 ]。如果你想写成 cond1 -a cond2 ,这样也可以。在 shell 编程中,解决问题的方法往往不止一种。

代码剩下的部分很直白,你只需要判断每个骰子的值是不是和本轮数字相同:

if [ $die1 -eq $round ] ; then
  score=1
fi
if [ $die2 -eq $round ] ; then
  score=$(( $score + 1 ))
fi
if [ $die3 -eq $round ] ; then
  score=$(( $score + 1 ))
fi

唯一要注意的是当出现 Bunco/Mini Bunco 就不需要再统计本轮分数了。所以整个第二部分的判断语句都要写在第一个条件语句的 else 中(为了判断 3 个骰子值是否都相同)。

把所有的综合起来,然后在命令行中输入轮数,下面是现在的脚本执行后的结果:

$ sh bunco.sh 5
You rolled: 1 1 5
score = 1
$ sh bunco.sh 2
You rolled: 6 4 3
score = 0
$ sh bunco.sh 1
You rolled: 1 1 1
BUNCO!
score = 25

竟然这么快就出现 Bunco 了? 好吧,就像我说的,shell 内置的随机数发生器在随机数产生这方面可能有些问题。

你可以再写个脚本测试一下,去运行上述脚本几百次,然后看看 Bunco/Mini Bunco 出现次数所占的百分比。但是我想把这部分作为练习,留给亲爱的读者你们。不过,也许我下次会抽时间完成剩下的部分。

让我们完成这一脚本吧,还有分数统计和一次性执行 6 次投骰子(这次不用再在命令行中手动输入当前轮数了)这两个功能。这也很容易,因为只是将上面的内容整个嵌套在里面,换句话说,就是将一个复杂的条件嵌套结构全部写在了一个函数中:

BuncoRound()
{
   # roll, display, and score a round of bunco!
   # round is specified when invoked, score added to totalscore

   local score=0 ; local round=$1 ; local hidescore=0

   rolldie die1 ; rolldie die2 ; rolldie die3
   echo Round $round. You rolled: $die1 $die2 $die3

   if [ $die1 -eq $die2 ] && [ $die2 -eq $die3 ] ; then
     if [ $die1 -eq $round ] ; then
       echo "  BUNCO!"
       score=25
       hidescore=1
     else
       echo "  Mini Bunco!"
       score=5
       hidescore=1
     fi
   else
     if [ $die1 -eq $round ] ; then
       score=1
     fi
     if [ $die2 -eq $round ] ; then
       score=$(( $score + 1 ))
     fi
     if [ $die3 -eq $round ] ; then
       score=$(( $score + 1 ))
     fi
   fi

   if [ $hidescore -eq 0 ] ; then
     echo "  score this round: $score"
   fi

   totalscore=$(( $totalscore + $score ))
}

我承认,我忍不住自己做了一点改进,包括判断当前是 Bunco、Mini Bunco 还是其他需要计算分数的情况这一部分 (这就是 $hidescore 这一变量的作用)。

实现这个简直是小菜一碟,只要一个循环就好了:

for round in {1..6} ; do
  BuncoRound $round
done

这就是现在所写的整个程序。让我们执行一下看看结果:


$ sh bunco.sh 1
Round 1\. You rolled: 2 3 3
  score this round: 0
Round 2\. You rolled: 2 6 6
  score this round: 1
Round 3\. You rolled: 1 2 4
  score this round: 0
Round 4\. You rolled: 2 1 4
  score this round: 1
Round 5\. You rolled: 5 5 6
  score this round: 2
Round 6\. You rolled: 2 1 3
  score this round: 0
Game over. Your total score was 4

嗯。并不是很令人满意,可能是因为它只是游戏的一次完整执行。不过,你可以将脚本执行几百几千次,记下“Game over”出现的位置,然后用一些快速分析工具来看看你在每 6 轮中有几次得分超过 3 分。(要让 3 个骰子值相同,这个概率大概在 50% 左右)。

无论怎么说,这都不是一个复杂的游戏,但是它是一个很有意思的小程序项目。现在,如果有一个 20 面的骰子,每一轮游戏有好几十轮,每轮都掷同一个骰子,情况又会发生什么变化呢?


via: http://www.linuxjournal.com/content/shell-scripting-bunco-game

作者:Dave Taylor 译者:wenwensnow 校对:wxy

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

如今,大多数人都认为文件加密是必要的,甚至在 Linux 系统上也是如此。 如果你和我一样, 最初被 Ubuntu 所吸引是因为 Linux 系统强化的安全性,恐怕我有个坏消息要告诉你:Linux 已经成为它自身“成功”的受害者。 近年来,用户数量的大幅度增加导致了这类系统的攻击和盗窃活动呈指数级增长。

曾经有一个非常简单的解决方案来在像 Ubuntu 这样的 Linux 系统上加密文件:它叫做 Truecrypt。 直到 2015 年,它提供了不同程度的军事级别的加密,并且在大多数 Linux 系统中运行良好。不幸的是, 它已经停止开发了, 因此变得相当不安全。

替代品

幸运的是,除了 Truecrypt,还有一些选择。 Truecrypt 的直接继承者是 Veracrypt ,它由一群开发者从 Truecrypt 获取源代码并保持更新的。

该项目已经发展成为令人印象深刻的独立系统,但现在渐已老迈。旧系统,尤其是那些处理安全问题的系统,只能更新多次而才不会引入漏洞。

出于这个原因,在其他许多方面,应该寻找一个更外围一些的加密软件。我选择的是 Tomb。

为什么是 Tomb

在某些方面,Tomb 与其他加密软件非常相似。它将加密文件存储在专用的“Tomb 文件夹”中,可以让你快速查看您已加密的文件。

它还使用与 Veracrypt 类似的 AES-256 加密标准。这个标准适用于 NSA 、微软和 Apple,并被认为是最安全的加密算法之一。如果你不熟悉加密技术,则应该阅读一点技术背景知识,但如果你只想快速、安全地加密,请不要担心, Tomb 将不负所望。

Tomb 也有一些很大的不同之处。首先,它是专门为 GNU/Linux 系统开发的,可以解决一些更广泛的加密软件的兼容性问题。

第二,尽管 Tomb 是开源的,但它使用的是静态链接库,以至于其源代码难以审计。 这意味着一些操作系统发行版开发者并不认为它是自由的,但是当涉及到安全软件时,这实际上是一件好事:这意味着与完全“自由”软件相比, Tomb 被黑客攻击的可能性更小。

最后,它有几个先进的功能,如 隐写术 steganography ,这使你可以将你的关键文件隐藏在其他文件中。 尽管 Tomb 主要是一个命令行工具,它也带有 GUI 界面—— gtomb,它允许初学者用图形化的方式使用它。

这是推销么? 好吧,在我告诉你如何使用 Tomb 之前,值得注意的是,没有一个加密软件能提供完全的保护。 Tomb 不会让你的计算机隐藏于你 ISP,也不会保护存储在云中的文件。如果你想对云存储进行完全加密,您需要使用 Tor 浏览器和零日志 VPN 登录到你喜欢的存储服务中。 这里有很多选项,但是 Trust Zone 是一个很好的浏览器,而 Tinc 是一个很好的 VPN 工具。

说了这么多,如果你正在寻找 Ubuntu 16.04 上的快速、简单、安全的加密,Tomb 无疑是一条可行的路。让我们开始吧。

在 Ubuntu 16.04 上安装 Tomb

因为 Tomb 是专门为 Linux 设计的, 所以安装非常简单。

几年前,SparkyLinux (它本身就是一个非常好的 Debian 衍生产品)的开发者们将 “Tomb” 添加到他们的官方存储库中。 你可以通过在 Ubuntu 系统上添加这些存储库来安装它。

要做到这一点, 打开一个终端并添加一个存储库文件:

sudo vi /etc/apt/sources.list.d/sparky-repo.list

然后在文件中添加以下行:

deb https://sparkylinux.org/repo stable main
deb-src https://sparkylinux.org/repo stable main
deb https://sparkylinux.org/repo testing main
deb-src https://sparkylinux.org/repo testing main

保存并关闭该文件。

你现在需要安装 Sparky 公钥,使用下列步骤:

sudo apt-get install sparky-keyring

或者:

wget -O - https://sparkylinux.org/repo/sparkylinux.gpg.key | sudo apt-key add -

然后你需要使用标准的命令来更新你的存储库:

sudo apt-get update

然后简单地使用 apt 安装 Tomb:

sudo apt-get install tomb

如果你想要带有 GUI 的 Tomb,安装同样简单。只需使用 apt 来安装 gtomb:

sudo apt-get install gtomb

就是这样,你现在应该安装好了一个可以工作的 Tomb。 让我们看看如何使用它。

使用 Tomb

通过命令行使用 Tomb

Tomb 主要是一个命令行工具,所以我将首先介绍这个用法。 如果你不喜欢使用终端,你可以跳过这节并查看下一部分。

实际上,不用说了。 如果你以前从来没有使用过命令行,那么 Tomb 是一个很好的开始,因为它使用简单的命令,只要你小心,那么你很少有机会把事情搞砸。

Tomb 实际上使用了一组以墓地为主题的非常有趣的命令集。 每个加密文件夹都被称为“tomb”(墓碑) ,而且(我很快就会讲到) ,它们可以使用类似的哥特式命令。

首先,让我们创造(挖)一个新的 tomb。你可以指定你的新 tomb 的名称和大小,所以让我们使用 “Tomb1”这个名称并指定大小为 100 MB。

你需要 root 权限,所以打开终端并键入(或复制) :

sudo tomb dig -s 100 Tomb1.tomb

你应该会得到类似这样的输出:

tomb . Commanded to dig tomb Tomb1.tomb
tomb (*) Creating a new tomb in Tomb1.tomb
tomb . Generating Tomb1.tomb of 100MiB
100 blocks (100Mb) written.
100+0 records in
100+0 records out
-rw------- 1 Tomb1 Tomb1 100M Jul 4 18:53 Tomb1.tomb
tomb (*) Done digging  Tomb1
tomb . Your tomb is not yet ready, you need to forge a key and lock it:
tomb . tomb forge Tomb1.tomb.key
tomb . tomb lock Tomb1.tomb -k Tomb1.tomb.key

正如输出的帮助说明,你现在需要创建(打造)一个密钥文件来锁定你的 tomb:

sudo tomb forge Tomb1.tomb.key

如果在此时出现提及“活动交换分区”的错误,则需要停用所有活动交换分区:

sudo swapoff -a

然后再运行上面的 keyfile 命令。

生成密钥文件可能需要几分钟时间,这具体取决于系统的速度。然而,在完成后系统会要求你输入新密码以确保密钥的安全:

输入两次,然后你的新密钥文件就会被制作出来。

你现在需要用你的新密钥来锁定你的 tomb。你可以这样做:

sudo tomb lock Tomb1.tomb -k Tomb1.tomb.key

你将被要求输入你的密码。 这样做, 你应该会得到如下的输出:

tomb . Commanded to lock tomb Tomb1.tomb

[sudo] Enter password for user Tomb1 to gain superuser privileges

tomb . Checking if the tomb is empty (we never step on somebody else's bones).
tomb . Fine, this tomb seems empty.
tomb . Key is valid.
tomb . Locking using cipher: aes-xts-plain64:sha256
tomb . A password is required to use key Tomb1.tomb.key
tomb . Password OK.
tomb (*) Locking Tomb1.tomb with Tomb1.tomb.key
tomb . Formatting Luks mapped device.
tomb . Formatting your Tomb with Ext3/Ext4 filesystem.
tomb . Done locking Tomb1 using Luks dm-crypt aes-xts-plain64:sha256
tomb (*) Your tomb is ready in Tomb1.tomb and secured with key Tomb1.tomb.key

现在一切都安排好了,你可以开始使用你的新 tomb 了。

这里有一个注意事项:因为我只是在告诉你该怎么做,所以我把我的密钥文件和 tomb 存放在同一个目录中(在这里是 $HOME)。 你不应该这样做——把你的密钥存放在别的地方,最好是在除了你之外没有人能找到的地方。

然而,你需要记住你把它放在哪里,因为你需要用它来打开你的 tomb。 要做到这一点, 请输入:

sudo tomb open Tomb1.tomb -k path/to/your/Tomb1.tomb.key

输入你的密码,然后你就可以进去了。 tomb 会输出一些类似以下的内容:

tomb (*) Success unlocking tomb Tomb1
tomb . Checking filesystem via /dev/loop0
fsck from util-linux 2.27.1
Tomb1: clean, 11/25168 files, 8831/100352 blocks
tomb (*) Success opening Tomb1.tomb on /media/Tomb1

然后你应该看到你的新 tomb 挂载在了 finder 窗口。

你现在可以从 tomb 中保存和打开文件,但是请注意,你需要 root权限才能这样做。

在你使用完之后需要用以下方法卸载你的 tomb:

sudo tomb close

或者,如果你想强制关闭所有的打开的 tomb, 你可以使用:

sudo tomb slam all

使用带 GUI 的 Tomb

如果你不喜欢使用命令行,或者只是想要一个图形界面,你可以使用 gtomb。与许多图形用户界面包装器不同, gtomb 使用起来很容易。

让我们来看看如何使用 gtomb 建立一个新的 tomb。 首先,从菜单中启动 gtomb。 它可能会是这 样的:

所有的事情都是一目了然的,但为了完整起见,我将详细介绍如何建立你的第一个 tomb。

首先,点击第一个选项“dig”。 点击确定,然后选择一个位置。

接下来,输入你的 tomb 的大小:

你现在有了一个新的 tomb,但是你需要在使用它之前做一把钥匙。 要做到这一点, 请在主菜单中 单击“forge”:

Tomb 会要求你输入两次密码,那就这样做。

然后通过点击来使用密钥锁定你的 tomb,你已经猜到了,“lock”。 要打开它, 请单击“open”并再次输入您的密码。

从上面的截图中你可以看到,使用 gtomb 是非常容易的,你不应该遇到任何问题。 大多数常见的任务都可以通过点击来完成,对于任何更复杂的事情,你可以使用命令行。

最后的想法

就是这样!你现在应该准备好你的第一个 tomb 了,并存储任何你想在 tomb 中保密和安全的信息,这些信息会更加安全。

你可以同时使用多个 tomb,并将它们中的文件绑定到你的 $HOME 目录,这样你的程序就不会感到困惑。

我希望这本指南能帮助你开始。 就像使用一个标准的文件夹一样使用你的 Tomb,但是对于更复杂的命令,你总是可以查看 Tomb 官方指南


via: https://www.howtoforge.com/tutorial/how-to-install-and-use-tomb-file-encryption-on-ubuntu-1604/

作者: Dan Fries 选题: lujun9972 译者: Auk7F7 校对: wxy

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

如果你不具备相关的知识和经验,挑选出最适合 Linux 的笔记本电脑,可能是件很困难的事。并且,看上去你买了一台配置、功能、性能都很棒的电脑,但是,却疲于处理各种 Linux 的问题,太难堪了!因此,作为一个 RedHat 认证工程师,这篇文章的作者兼博主,也是一个 有 14 年以上 Linux 使用经验的用户,我用我掌握的一些知识去为你推荐一些笔记本电脑,我可以保证我推荐的这些电脑,Linux 在它上面会跑的很好。我研究了 20 多个小时之后(通过认真了解硬件详细情况和用户反馈),我选择 Dell XP S9360-3591-SLV 作为我的首选推荐。如果你希望笔记本电脑装备最新的功能特性,并且 能够在使用 Linux 工作 时有极好的性能,那么,这台笔记本电脑将是你的最佳选择。

它使用铝合金机身,很轻(2.7 磅重),有强劲的硬件性能,待机时间较长,使用康宁大猩猩玻璃的 QHD 显示屏,分辨率为 3200×1800、并且还具备触控功能,可以为你带来清晰的图像表现,即便是很小的细节也可以很好的展现出来,有一个带橡皮掌托的、面积很大的并且非常好用的触摸板(早期版本上触摸板有几个小问题,但是,最新的机器已经修复了),并且也有一个很好用的带背光的键盘(按键的行程很短,这一点有些像 Thinkpad 笔记本),两个 USB 3.0 端口。最重要的是,两个最让 Linux 用户头痛的问题,无线网卡和 GPU (Intel HD Graphics 620 播放 4K 视频可以达到 60 fps),在这台 Dell 电脑上,它们都 超级兼容 Linux

有一个缺点是,它没有 HDMI 端口。在这个位置,Dell 增加了一个 Thunderbolt 3 端口。因此,你唯一的选择是使用一个 Thunderbolt 到 HDMI 的转换器(它很便宜)。第二,在购买之后,你不能升级它的 8GB 的内存(在采购之前你可以改变硬件配置 —— CPU、RAM & SSD),但是,在我的选择中,8GB 的内存运行任何 Linux 发行版做任何工作都足够了。我有一台 Asus 笔记本电脑(它是我收到的一份礼物)使用第五代的 Core i7 的 CPU,4GB 内存,它是我主要使用的计算机。使用 Chrome 可以打开 15-20 个标签,在后台运行 VLC ,打开文件管理和一个代码编辑器,这种情况下,它工作的很好。如果我减少一些浏览器标签(减少到 4-5 个),然后,即便是其它的应用程序都打开的情况下,我都可以在 Virtualbox 上使用虚拟机工作。这些都是在 4GB 内存的情况下,因此,有 8GB 内存和其它更强劲的硬件的情况下,它绝对会工作的非常好。

注意: 虽然我为你选择了一套非常可靠的 硬件,但是,如果你愿意,你仍然可以进一步去定制它。即便你不去选择 ‘8GB RAM/128GB SSD’ 这个选项。因为,那个版本也提供 1920×1080 的 FHD 显示屏,并且,在 13.3″ 的显示屏上让菜单看起来更小一些,看起来稍微有点困难。

最便宜的 Linux 笔记本电脑

如果你觉得这台 Dell 笔记本电脑有点贵,买不起,但是还想拥有类似的非常好的性能,并且与 Linux 的兼容性很好,那么,第二个最佳选择是这台 Acer Aspire E 15 E5-575G-57D4。它 15.6″ 的显示屏,无疑能提供像前面的 Dell 笔记本一样的显示表现,但是,在 15.6” 上的 1920×1080 的全高清分辨率显示屏,也可以让任何细节都显示的非常清晰。其它的硬件与前面介绍的很贵的 Dell 笔记本电脑很相似,但是,因此它的电池很重,整机重达 5.2 磅。

你实际上可以去做一些定制。基本的配置包括一个第七代 Core i5 CPU,15.6“ 的全高清显示屏(1920 x 1080),8GB DDR4 内存,256GB 固态硬盘,Intel HD Graphics 620 GPU 和一个独立的 Nvidia 940 MX GPU,端口方面:HDMI 2 USB 3.0,1 x USB 2.0 & 1 USB 3.1。对于 $549 的售价,它竟然 包含一个 DVD 刻录机它是一个特价商品

至于 Linux 的兼容性,它真的很好。虽然它不像顶级的 Dell XPS,但是,至少在我看来,如果它能够解决 Nvidia GPU 的问题,它就是一个很好的选择。除了一个用户以外,所有其它的用户都反馈,它的 Linux 兼容性非常好。唯一的一个用户抱怨说,在 Linux Mint 上安装了 Nvidia 的专用驱动以后,出现了一个小问题,并且他说,他决对不是故意 “抹黑” 它。这个反馈与我在使用移动版的 Nvidia GPU 所遇到的情况一样。

例如,现在我使用一台 Asus 笔记本电脑,并且它除了集成的 Intel GPU 以外,它也有一个独立的 Nvidia 920M GPU。这台笔记本电脑我大概已经用了一年半时间了。我在它上面运行了一些 Linux 发行版,并且,遇到的唯一的问题是,在 Ubuntu 17.10 上 安装完它的专用驱动程序后,如果激活 Nvidia 作为默认的 GPU,自动用户登入功能会停止工作。因此,每次进入桌面我都要输入我的登录凭据。这虽然不是一个大问题,但是,我确信,它可以通过编辑一些登录管理器的配置设定来修复它,但是,我根本就没有去理它,因为我很少使用 Nvidia GPU。因此,我只是简单地改变默认 GPU 为 Intel,所有的一切就会正常。因此,前段时间,我在 Ubuntu 16.04 LTS的同一个 Nvidia GPU 上启用了‘运动插值’,并且它处理的非常好!

我想说的是,GPU 驱动,比如 Nvidia & AMD/ATI 提供的,给用户带来困扰只是在过去的 Linux 上,但是,现在随着进一步的处理,已经不是什么困难的事情了,或者说,至少没有像以前那样困难了。除非你使用的是一个非常新的高端 GPU,Linux 的运行不遇到大的问题还是很有可能的。

Linux 游戏笔记本

很多时候,玩游戏的笔记本电脑,你需要去手动调整一些东西。并且,这些 “东西” 大部分都是与 GPU 相关的。它可能只是简单地安装一些专用的驱动程序,去处理一个拒绝引导到 CD/USB 中的系统。但是,如果有足够的耐心,大多数情况下,它们都是可以修复的。如果你的游戏笔记本有一个非常新的 Nvidia/AMD GPU 驱动,并且,这个驱动有问题,那么,修复它意味着只需要等待它更新驱动程序。有时候,可能需要等待很长的时间。但是,如果你买了一台安装有几个月前发布的 GPU 的笔记本电脑,那么,仅此一点,就大大增加你解决现有问题的机会。

因此,考虑到这一点,我选择了 Dell Inspiron i5577-7342BLK-PUS,作为一个游戏笔记本电脑的最佳选择。它是一台强大的游戏笔记本电脑,售价低于 1000 美元。主要原因是它有一个 15.6″ 的全高清(1920 x 1080)显示屏。因为,在你查看其它配置的时候你会发现(也可以进一步定制它),它包含一个第七代 Core i7 CPU(四核心),16GB DDR4 内存(最高可到 32GB),512GB SSD 驱动器,并且有一块 Nvidia GTX 1050 GPU,它有很多积极的评价。你只可以在 QHD 或者 4K 下,使用外接显示器去玩高端游戏,尽管如此,它也可以在 15.6″ 的全高清分辨率下玩一些游戏。

我选择 Dell 的另外原因是,大多数的 Dell 笔记本电脑(或者一般用途的计算机)都是非常兼容 Linux 系统的。我在 Dell 网站上手工检查了硬件配置的详细情况,虽然我不能保证使用 Nvidia GPU 不会有任何问题,其它的硬件在主流的 Linux 发行版上都工作的很好(比如 Ubuntu)。

哪个才是你需要的?

实际上,我相信越少越好。

我可以在这里给你 ‘推荐’ 很多很多的笔记本电脑,但是,那样的话,我需要写一系列的博客文章。因此,我并不打算 ‘推荐’ 10-12 台笔记本电脑,除非我确信它们都在 Linux 上运行的非常好。而目前为止,这个推荐清单上只有 3 台。我能确信它们在 Linux 上运行的非常好(而且,甚至是游戏笔记本电脑,除了 Nvidia GPU,其它的硬件部分应该工作的很好),再加上,这三个型号都有很多的可选项。换句话说就是,随着时间的推移,如果我从其它的制造商的产品中找到一些笔记本电脑,我相信它们在 Linux 上也运行的很好,然后,我也会推荐它们。但是,现在,就这三台笔记本电脑是我所推荐的。你可能不喜欢这些推荐的电脑,那么,下面我告诉你如何去查找你心仪的笔记本电脑。一旦你有了基本的概念,你可以非常容易地去预测,一台笔记本电脑是否能够运行 Linux 而不会出现问题。上面我已经提到了大部分,但是,我还在这里再说一下。

查找关于硬件的更多信息

当你拿到一个笔记本电脑时,记下它的型号。现在,在大多数的网站上,都提供硬件的详细情况,比如,无线网卡或者声卡芯片的制造商。在大多数的情况下,使用一些简单的技巧就可以拿到这些信息。我通常是这样做的。

如果你知道笔记本电脑的制造商和型号,可以在 Google 中搜索它的驱动程序。我以前面的 Dell 游戏笔记本电脑为例。如果你知道它的名字,然后在 Google 上去搜索它的驱动程序(Dell Inspiron i5577-7342BLK-PUS drivers),Google 并不会显示一个 Dell 的官方的驱动程序页面。这并不奇怪,因为 Dell (以及其它制造商)在一个通用的型号名字下面,销售很多种装有各种不同的(2 到 3 种)硬件的笔记本电脑。因此,要缩小搜索目标,从左侧开始,我们首先来使用名字的前三个字段,并且用它在 Google(Dell Inspiron i5577 drivers)中搜索驱动程序,然后,如下所显示,并且,Google 也列出了不同的所属网站,对于 Inspiron 5577(没有 ‘i’),列出了一个 Dell 的官方驱动程序页面。

如果你进入这个页面,去查看各种我们感兴趣的型号的驱动程序和硬件列表,那么,你将看到在 ‘Dell Inspiron i5577-7342BLK-PUS’ 中的硬件也在这里列出来了。我通常只喜欢查看 ‘audio’ 和 ‘network’ 下面列出的内容,因为从购买网站上去获得这些芯片的准确的型号名一般很困难,其它的一些硬件如 GPU、CPU 等等也列了出来。因此,如果你查看在 ‘network’ 下显示的内容,你将看到 Dell 提供的一些驱动程序。其中一个就是 Realtek 以太网适配器(以太网适配器通常都支持 Linux ),Qualcomm QCA61x4A-QCA9377 无线网络适配器(如果你进一步研究,需要对 QCA61x4AQCA9377 分别进行,因为它们之间用 ‘-’ 分隔,你就会发现,它们实际上是来自高通的两种不同的无线芯片。这个关键字表示,Dell 在一个包中包含了两种驱动程序),和一组 Intel 无线网络适配器(Intel 硬件在 Linux 中也支持的非常好)。

但是,高通的设备有时候可能会有些问题。我遇到过一两个,但是,它们都不是什么严重的问题。也就是说,当有问题时,去查找就是解决的一个好办法。因此,使用 Qualcomm QCA61x4A-QCA9377 做为关键字(使用一个适配器或者使用一个芯片名字的组合去查询这并不重要),并且增加一个像 linux 或者 ubuntu 这样的关键字在 Google 中去搜索它。如果像 Qualcomm QCA61x4A-QCA9377 ubuntu 这样去搜索,然后,Google 会列出很多结果。我收到的第一个结果是自来 AskUbuntu(一个社区驱动的网站,专门回答终端用户提出的问题,是一个解决 Ubuntu 相关问题的极好的资源)。

如果你去看那个页面,你可以看到有用户报怨 Qualcomm QCA9377 无线网络适配器在它的 Ubuntu 15.10 不能正常工作。幸运的是,那个问题已经被回答了。这个问题看起来似乎是 Ubuntu 15.10 的问题,它发布于 2015 年 10 月,因此,这是两年前的问题了。所以,这个问题很可能在最新的 Ubuntu 发行版中已经修复了。我还记得,这个问题好像与 Qualcomm QCA9377 无线芯片有关,而不是 QCA61x4A。因此,如果我们的 Linux 游戏笔记本电脑使用的是后面型号的无线芯片,那么很有可能你不会遇到这个问题。

我希望我不要遇到上面报怨的所有事情。我只是想给你提供一个指南,告诉你如何去找到你希望去运行 Linux 的笔记本电脑上的关于硬件的详细情况,这样你就可以很好地去评估它。使用一些常识性的技巧和经验,你的工作效率将会更高。

不要止步于 GPU 和网络适配器上

虽然,在你购买了一台笔记本电脑来运行 Linux 时,GPU 和网络适配器是大多数人遇到的最容易出现问题的硬件设备,但是,去研究音频、触控板、和键盘在 Linux 中的兼容性和它们相关的特性(例如,我的老 Dell 的背光键盘在 Linux 中也有一个小问题),也是一个很好的实践。

搜索‘用户评论’(当你准备购买时)

在诸如 Amazon.com 这样的网站上,你实际上可以搜索某些关键字的用户反馈 (‘审阅’)。这是非常有用的,因为你可以很容易地用几秒钟内在包括数以百计甚至数以千计的用户反馈中搜索一两个关键字。我建议你使用的关键字,如 Linuxubuntulinux mint 或任何其他 Linux 发行版,只要它是流行的发行版。如果已经购买了笔记本电脑的人试图在它上运行 Linux 发行版,使用此方法你总能找出发生了什么事。

在亚马逊这样的网站搜索用户反馈是很容易。一旦您访问了您感兴趣的产品页面,只需单击“客户评论”链接并向下滚动, 直到看到一个搜索框 (通常位于右下角)。

如果它是一个 ‘热门’ 硬件,等待 2-3 个月

正如,计算机终端用户所担心的那样,Linux 的市场份额是非常小的。因此,硬件制造商并不会把 Linux 看的很重。因此,他们修复最新发布的硬件设备中已存在的主要问题需要很长的一段时间。即便是开源驱动程序,也是如此,当然,在我的经验中,开源的驱动程序的问题修复比专属的驱动程序要快。因此,如果你买的笔记本电脑的特色硬件设备(主要指 CPU 和 GPU)是最新发布的,那么,它通常需要等待 2 或 3 个月才能去修复在 Linux 上的主要的问题。并且,但愿在那个时候,你可以找到一个修复,或者,至少可以预测什么时候可以被修复。

关于屏幕和 HiDPI 在 Linux 上支持的怎么样?

‘像素密度’ 或者 ‘高像素密度’ 显示是最近非常流行的术语。并且大多数人都认定,更高的像素意味着更好的质量。虽然在一般的认知和技术角度上,它可能是正确的,但是,它并不准确。这个主题理解起来很复杂,因此,我将只讲一些基本的概念,对于你理解这个主题已经足够了,以避免不必要的混乱。

任何显示在你的屏幕上的东西,比如文本或者图标,都被设计为某些固定的大小。而这些大小是通过被称为 “每英寸显示的像素点数” 或者简称为 DPI 来描述的。它基本上定义了每英寸应该显示多少个点(像素)才能正确显示这个东西。每英寸显示 72 个点是由 Apple 公司制定的标准,这是很重要的。我相信,你可能听说过,Windows 使用了一个不同的标准,每英寸 96 个点,但是,它不完全正确。我不去深入其中的细节,但是,如果你想进一步了解更多的内容,阅读 Wikipedia。在任何情况下,要确保显示在你的 Linux 笔记本电脑的屏幕上的内容看起来清晰可读,如果你想了解,按以下的内容去做。首先,确定它的显示大小(13.3″、15.6″、17″…)和分辨率。然后到 PXCALC.com 网站,它提供一个非常好用的每英寸点数计算器。接着在上面输入正确的内容。计算完成后,它告诉你一个 DPI 的计算结果(在它的右上角,如下图所示)。然后将那个值简单地除以 72,这就是最重要的部分。

如果你得到的结果是一个类似于整形增量,比如 2、3、4(+0.2 到 —0.2 的偏差还不错,最好是 +0.1 到 —0.1,最完美的是接近 0.0 的偏差及更大的整数—— 3 或更大,比如 iMac 27 5K),然后,你就没有什么可担心的了。整形增量越高(只要偏差保持在范围之内),屏幕越清晰。为了更好理解,我们举一个例子。

我以推荐给你的第一个笔记本电脑(使用 13.3″ 的 QHD 分辨率的 Dell XPS)为例。如果你使用这个计算器去计算,它的结果是 ‘3.83’,把它粗算为 ‘3.8’,它不是我们前面所说的那样一个整数,但是,它在偏差范围以内(-0.2),是安全的。如果你拿我推荐的 Acer 笔记本电脑做同样的计算,它得到的结果是 ‘1.95’,把它粗算为 ‘2.0’。因此,在不考虑它的其它特性(亮度,可视角度,等等)的情况下,Dell 笔记本电脑上的显示清晰度要好于 Acer 几乎两倍(相信我,这个显示效果已经看起来非常清晰了。但是,它相比分辨率为1366 x 768 的无论是 13.3″ 还是 15.6″ 的屏幕,看起来显示效果更好)。

关于内存大小?

KDE 和 GNOME 是在 Linux 上的两种主流的桌面环境。虽然还有很多其它的选择,我建议你坚持使用其中的一个。目前来说,我比较偏爱 KDE。据我所知,KDE plasma 比 GNOME 更加轻量化,并且效果更好。如果你希望了解它们之间的比较数据,它在 我的 Ubuntu 16.10 特点评估 中(它大概是在一年前做的),在 Ubuntu 上 KDE plasma 占用大约 369 MiB 内存,而 GNOME 大概占用了 781 MiB!减少了 112% !

现在我使用 Kubuntu 17.10,虽然我没有评估它,但是我可以告诉你,它的内存占用大约在 380-400 MiB左右。重新回到这个话题上,我建议你在为你的 Linux 笔记本电脑的内存选择上,不要低于 8GB。那样,我可以很自信地保证,在未来 4 年内你的笔记本电脑都运行的很好,而不用担心它会变慢,并且可以去很好的使用各种发行版和满足大多数终端用户的需求。

如果你是在寻找一台 在 Linux 上玩游戏的笔记本电脑,那么内存选择应该是 使用 12GB 或者更多。 除比之外,8GB 内存对于大多数终端用户来说是足够的。

关于 SSD

不管你使用的是什么操作系统,增加一块 SSD 将能提升你的笔记本电脑的整体性能和反应速度,因为它比起普通的机械硬盘来说速度快很多,就这么简单。也就是说,在我的经验中,即便是高效和轻量化的 KDE 发行版,相比 GNOME 要花更多的启用时间。一些 Linux 发行版,比如 Ubuntu 和 Kubuntu 带着一个特别设计的被称为 'ureadahead' 的实用程序,它可以改善启动时间(有时可以达到 30% 甚至更多),不幸的是,并不是所有的发行版都有这类工具。在有些时候,安装在 SATA 驱动器上的 KDE 的启动时间可能长达 50 秒以上Manjaro 17.0.2 KDE 就是其中一个这样的例子(显示在上面的图表中)。

因此,最简单的方法就是购买一台带有 SSD 的笔记本电脑,它可以帮助改善启动时间。我的 Kubuntu 17.10 上是一个小的 SSD 驱动器(20GB),它的启动时间在 13-15 秒内

关于 GPU ?

正如上面多次提到过的,如果可能,尽量使用一个 Intel GPU。正如众所周知的那样,Dell 的产品在硬件上都是 ‘Linux 友好的’, Intel 也在开源项目上大量进行投资,并且,其中它的一些硬件也如此。选择它你不会后悔的。

如何进行自动 GPU 切换(比如: Nvidia Optimus),它能正常工作吗?

如果你希望购买的笔记本电脑,显卡在各方面都考虑的比较周全,那么,在 Windows 中,Nvidia 有一个叫做 ‘Optimus’ 的特性,它自动在集成 GPU(性能较弱) 和独立 GPU(性能更强)之间切换。ATI 也有这个功能。在 Linux 中这个功能并没有被官方支持,但是,在那方面有一个创新性的工作,比如 Bumblebee 项目。不过它并不总是按预期工作。我比较喜欢去安装专用的 GPU 驱动程序,并且在我需要的时候去手动切换它们。值得称赞的是,Fedora 团队已经做出了它们的解决方案,我并不知道他们做的怎么样,最好问问 Christian 吧

Linux 能给你更长的电池使用时间吗?

当然可以!只要你的硬件设备配置正确,我建议你安装电源使用优化器。现在有几个这方面的应用程序,但是,我建议使用 ‘TLP’。它很容易安装,在我的经验中它可以使功耗降低,而且结果令人影响深刻,它不需要手动去调整什么就可以正常工作。

下面有两张我的最新的 Ubuntu 17.10 的评估截屏。第一张截屏展示了在安装 ‘tlp’ 之前的电源使用情况,而第二张展示了安装之后的(图片已经说明了一切):

‘tlp’ 可以在主要的 Linux 发行版上使用。在 Ubuntu 上,你可以通过执行下面的命令去安装它:

sudo apt update

sudo apt install tlp

现在重启动计算机,就可以了!

在 Linux 中能测量电源使用了多少吗?

很高兴你能这样问!它的名字叫 ‘powerstat’。它是非常神奇的一个小实用程序(由 Colin King 设计,它是一位 Ubuntu 开发者),它采集电源消耗(和诊断)相关的使用数据,并将它们表示在屏幕上。在基于 Ubuntu 的系统上,输入下面的命令可以去安装它:

sudo apt update

sudo apt install powerstat

在大多数主流的 Linux 发行版上,它们的软件仓库中都有这个软件。

你推荐的 Linux 操作系统是哪个?

很好的问题,到目前为止,我主要使用的操作系统是 Kubuntu 17.10。我没有评估过它,但是,长话短说,我喜欢它!它非常易于安装,并且对新手比较友好,稳定,漂亮,高效并且易于使用。到目前为止我不喜欢 GNOME!因此,如果你刚开始使用 Linux,那么,我建议你去尝试 Kubuntu 或者 Linux Mint,首先,(‘Mint’ 可以有很多的桌面环境选择。要么使用 KDE,要么使用 ‘Cinnamon’)。

然后,在你掌握使用技巧后,你就可以转移到其它的发行版上了,这是 Linux 新手最好的方法。

结束语

记住我一开始说的话,如果你在寻找一台能够轻松运行 Linux 的笔记本电脑,那么,Dell XP S9360-3591-SLV 将是你的最佳选择。它外观漂亮、功能强大、非常流行、超便携,不仅能够很轻松地运行 Linux,而且它还有一个非常棒的,并且得到很多人赞扬的显示屏。

如果,你希望有一个更便宜的选择,那么,Acer Aspire E 15 E5-575G-57D4 会满足你的要求。它也像前面的 Dell 一样,可以很好地兼容 Linux,再加上它的性价比,它也是一个非常好的选择。

第三,如果你在寻找一台能够在 Linux 上运行游戏的笔记本电脑,那么,Dell Inspiron i5577-7342BLK-PUS 看起来非常适合你。当然,还有许多其它的游戏笔记本,但是,我特别选择这一款的原因是,它的硬件特性与 Linux 兼容,虽然我不能保证它与 Nvidia GTX 1050 一样。换句话说,你不应该去买一台 Linux 笔记本去玩游戏,那样会“玷污”你的游戏水平。如果是那样的话,它的硬件性能(它的性能很强大了)并不会让你满意,如果你愿意去研究并找到其它的选择,那就去做吧。

祝你采购顺利,并感谢阅读!


via: https://www.hecticgeek.com/2017/12/best-linux-laptop/

作者:Gayan 译者:qhwdw 校对:wxy

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

在 Linux 命令行上删除文件和目录,我们已经讨论过 rm 命令 的使用。然而,这里有另一个相关的命令行工具,专门针对目录的删除。这是所指的工具就是 rmdir,本教程中,我们将根据一些简单的实例来讨论它。

Linux rmdir 命令

见名知意,rmdir(remove directory) 命令专门针对删除目录,不过通常目录内空空如也。如下是它的语法:

rmdir [OPTION]... DIRECTORY...

下面是 man 文档的说明:

如目录为空,则删除之。

在理解此程序如何工作,下面的 Q&A 风格的案例可能会给您带来更好的灵感。

Q1. rmdir 命令如何工作?

这非常直接,只需将目录名作为输入参数传递给它。

比如:

rmdir test-dir

rmdir 命令如何工作

Q2. 如何让 rmdir 忽略非空目录?

通常情况下,rmdir 命令会在您删除非空目录时抛出一个错误。然而,如果需要的话,您可以使用 --ignore-fail-on-non-empty 选项,忽略它。

比如说:

如何让 rmdir 忽视非空目录

Q3. 如何让 rmdir 命令移除父目录?

mkdir 一样,您可以通过要求 rmdir 命令在其父目录执行操作。这意味着,您可以一次性删除目录和目录的上级目录。这个功能可以通过 -p 命令选项实现。

比如,下面的命令将会删除 “test” 和 “test-dir” 目录。

rmdir -p test/test-dir/

注意: 欲此操作生效,所有被删除的父目录都不应该包含要被删除的空目录之外的任何目录。

Q4. rmdir 和 rm -r 有何区别?

如果还有印象,您还可以通过提供 -r 选项的 rm 命令删除目录。那 rmdirrm -r 区别何在?rmdir 仅对空目录生效 —— 您没有办法使用 rmdir 删除非空目录。

因此,rmdir 在删除需要检测目录是否为空的情况下,是一个有效的工具。

总结

相信您会认同,rmdir 并不是一个难以理解和使用的复杂命令。除此之外,它仅提供少量命令行选项。在此,我们几乎讨论了所有的选项,如果您想掌握的更好,练习在本教程提到的案例即可。关于 rmdir这里另有 man 文档,备您不时之需。


via: https://www.howtoforge.com/linux-rmdir-command/

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

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

在这篇文章中,我将与你分享免费学习 Linux 的最佳资源。这个集合包括了网站、在线视频课程和免费电子书。

如何学习 Linux ?

这可能是 Facebook Linux 用户组中最常见的问题。

“如何学习 Linux”这个看起来简单的问题的答案并不简单。

问题在于不同的人对于学习 Linux 有不同的意义。

  • 比如有人从来没有使用过 Linux,无论是命令行还是桌面版本,那个人可能只是想知道更多关于它的信息。
  • 比如有人使用 Windows 作为桌面,但必须在工作中使用 Linux 命令行,那个人可能对学习 Linux 命令感兴趣。
  • 比如有人已经使用过一段时间的 Linux,而且懂得一些基础,但他/她可能想要更上一层楼。
  • 比如有人只是对 Linux 特定的发行版本感兴趣。
  • 比如有人想要提升或学习几乎与 Linux 命令行差不多的 Bash 脚本。
  • 比如有人想要从事一个 Linux 系统管理员的职业,或者想提高他/她的系统管理技能。

你看,“我如何学习 Linux”的答案取决于你追求什么样的 Linux 知识。为此,我收集了大量能用来学习 Linux 的资源。

这些免费的资源包括电子书、视频课程、网站等。这些资源分成几个子类别,以便当你试图学习 Linux 时可以很容易地找到你想要的东西。

再者,这里没有学习 Linux 的最好方式。这完全取决于你如何去学习 Linux,通过在线门户网站、下载电子书、视频课程或者其他。

让我们看看你能如何学习 Linux。

免责声明 : 这里列举的所有书都可以合法的下载。 据我所知,这里提到的资源都是官方的资源。但是,如果你发现它不是,请让我知道以便我可以采取适当的措施。

1. 对于完全新手学习 Linux 的免费资料

也许你刚刚从朋友那里或者从网上的讨论中听到了 Linux。关于 Linux 的炒作让你对 Linux 很感兴趣,你被互联网上的大量信息所淹没,不知道在哪里寻找更多的关于 Linux 的知识。

不用担心,我们中的大多数,即使不是全部,都经过过这个阶段。

Linux 基金会关于 Linux 的介绍 [视频课程]

如果你对于什么是 Linux 和如何开始学习 Linux 完全没有概念的话,我建议你从学习 Linux 基金会edX 上提供的免费的视频课程开始。它可以看做“维护” Linux 的组织的一个官方课程——是的,这个组织是由 Linux 之父 Linus Torvalds 所背书的。

Linux 旅程 [网站]

不是官方的,也许不是很受欢迎。但是这个小网站对于初学者来说是一个 Linux 学习的完美场所。

该网站设计精美,并根据主题组织得很好。它给你提供了能够在阅读完一个片段或章节后的进行的互动式测验。我的建议是收藏这个网站:

《5 天学习 Linux》 [电子书]

这本出色的书针对 FOSS 读者来说完全的免费,这完全得感谢 Linux Training Academy

为完全的新手而写,这本免费的 Linux 电子书给了你一个关于 Linux 的概述、常用的 Linux 指令和你开始学习 Linux 所需要的其他东西。

你能够从下面的网页下载该书:

《Linux 新手终极指南》 [电子书]

这是一本面向 Linux 初学者的免费下载的电子书。该电子书从解释什么是 Linux 开始,并提供了将 Linux 作为桌面的更多实际使用经验。

您可以从下面的链接下载最新版本的电子书:

2. 初学者进阶的免费书籍

本节列出了那些已经“完成”的 Linux 电子书。

我的意思是,这些之中的大部分就像是专注于 Linux 的每个方面的学术教科书。你可以作为一个绝对的新手阅读这些书,或者你也可以作为一个中级的 Linux 用户来深入学习。即使你已经是专家级,你也可以把它们作为参考。

《Linux 介绍》 [电子书]

《Linux 介绍》是 Linux 文档计划的免费电子书,而且它是最热门的 Linux 免费电子书之一。即使我认为其中的部分段落需要更新,它仍然是一本非常好的电子书,可以教你 Linux、Linux 的文件系统、命令行、网络和其他相关的东西。

《Linux 基础》 [电子书]

这本由 Paul Cobbaut 编写的免费的电子书可以教你关于 Linux 的历史、安装和你需要知道的基本的 Linux 命令。你能够从下列链接上得到这本书:

《Linux 高级编程》 [电子书]

顾名思义,这是一本面向想要或者正在开发 Linux 软件的高级用户的书。它阐释了那些复杂的功能,比如多进程、多线程、进程间通信以及和硬件设备的交互。

跟着这本书学习会帮你开发一个更快速、更可靠、更安全的使用 GNU/Linux 系统全部功能的项目。

《LFS》 [电子书]

如果你认为自己对 Linux 有足够的了解,并且你是一个专业人士,那么为什么不创建自己的 Linux 版本呢? Linux From Scratch(LFS)是一个完全基于源代码,为你构建你自定义的 Linux 系统提供手把手的指导。

可以把它叫做 DIY Linux ,它是一个把你的 Linux 专业知识提高到新的高度的方法。

这里有许多的关于这个项目的子项目,你能够在这个网站上查看和下载。

3. 学习 Linux 命令和 Shell 脚本的免费电子书

Linux 的真正强大在于命令行,如果你想要征服 Linux,你必须学习命令行和shell。

事实上,如果你必须在你的工作中使用 Linux 终端,那么熟悉 Linux 命令行实际上会帮助你完成任务,也有可能帮助你提高你的职业生涯(因为你会更有效率)。

在本节中,我们将看到各种 Linux 命令方面的免费电子书。

《GNU/Linux 命令行工具总览》 [电子书]

这本 Linux 文档项目中的电子书是接触 Linux 命令行并开始熟悉 Shell 脚本的好地方。

《GNU Bash 参考手册》 [电子书]

这是一本可以从 GNU 网站下载的免费电子书。 就像名字暗示的那样, 它涉及 Bash Shell (如果我能这么叫的话)。这本书超过了 175 页,而且它包括了许多在 Bash 里和 Linux 有关的主题。

你能够从下面的链接中获取:

《Linux 命令行》 [电子书]

这本 500 多页的由 William Shotts 编写的免费电子书,对于那些认真学习 Linux 命令行的人来说,是一本必须拥有的书。

即使你认为你已经了解了 Linux,你还是会惊讶于这本书能教你很多东西。

它涵盖了从初学者到高级的东西。我敢打赌读完这本书之后你会成为一个更好的 Linux 用户。请下载这本书并且随时携带它。

《Bash 入门指南》 [电子书]

如果你想从 Bash 脚本开始,这可能对于你来说是一个很好的助手。 这本电子书也是基于 Linux 文档项目的,它是编写 《Linux 介绍》的电子书的作者(本文前面讨论过)。

《Bash 脚本高级指南》 [电子书]

如果你认为你已经了解了基本的 Bash 脚本知识,并且你想把你的技能提高到一个新的水平,这本书就是你所需要的。这本书有超过 900 页的各种高级命令和举例。

《AWK 编程语言》 [电子书]

这不是一本很美观的书,但是如果你真的想要深入学习脚本,这本虽旧但是依然很棒的书会很有帮助。

《Linux 101 技巧》 [电子书]

这本 270 多页的书来自“The Geek Stuff”,通过易于跟踪学习的例子教给你 Linux 命令行基础。你能够从下列的链接获取:

4. 特定发行版的免费学习资料

这个章节专注于特定 Linux 发行版的材料。到目前为止,我们看到的都是以常规的方式学习 Linux,更多的关注于文件系统、命令和其他的核心内容。

这些书,在另一方面,可以被认为是用户手册或者开始学习各种各样的 Linux 发行版的指南。所以如果你正在使用或准备使用一个特定的 Linux 发行版,你可以参考这些资源。是的,这些书更加关注 Linux 桌面。

我还想补充的是,大部分的 Linux 发行版有它们自己的大量的 wiki 或者文档。你能够从网上随时找到它们。

《Ubuntu 用户指南》 [电子书]

不用说,这本书是针对 Ubuntu 用户的。这是一个独立的项目,以免费电子书的形式提供 Ubuntu 的用户指南。它对于每个版本的 Ubuntu 都有更新。

这本书被叫做用户指南因为它是由一步步的指导组成的,而且受众目标是对于 Ubuntu 完全新手的。所以,你会了解到 Unity 桌面,以及怎样逐渐使用它而且查找应用等等。

如果你从来没有使用过 Ubuntu Unity ,那么这是一本你必须拥有的书,因为它帮助你理解怎样在日常中使用 Ubuntu。

《面向 Linux Mint:直接告诉我就行!》 [电子书]

一本非常基本的关于 Linux Mint 的电子书。它告诉你怎么样在虚拟机中安装 Linux Mint,怎么样去查找软件,安装更新和自定义 Linux Mint 桌面。

你能够在下面的链接下载电子书:

《Solus Linux 用户指南》 [电子书]

注意!这本书过去是 Solus Linux 的官方用户指南,但是我找不到 Solux 项目的网站上在哪里有提到它。我不知道它是不是已经过时了。尽管如此,反正不要钱,多少学习一点 Solus Linux。

5. 面向系统管理员的免费电子书

这个章节主要关注于系统管理员——开发者的超级英雄。我已经列了一部分会真正帮助那些已经是系统管理者或者想要成为系统管理者的免费的电子书。我还得说,你必须要关注基本的 Linux 命令行,因为它会使你的工作更加简单。

《The Debian 管理手册》 [电子书]

如果你使用 Debian Linux 作为你的服务器,这本书就是你的圣经。这本书从 Debian 的历史、安装、包管理等等开始,接着覆盖一些主题,比如说 LAMP)、虚拟机、存储管理和其他核心系统管理。

《高级 Linux 系统管理》 [电子书]

如果在准备 LPI 认证,那么这本书是一本理想的书。这本书的涉及系统管理员必要的主题,所以了解 Linux 命令行是前置条件。

《Linux 系统管理》 [电子书]

Paul Cobbaut 编写的另一本免费的电子书。370 页长的的书包括了网络、磁盘管理、用户管理、内核管理、库管理等等。

《Linux 服务器》 [电子书]

又一本来自 linux-training.be 的 Paul Cobbaut 编写的电子书。这本书包括了 Web 服务器、MySQL、DHCP、DNS、Samba 和其他文件服务器。

《Linux 网络》 [电子书]

网络是系统管理者的面包和黄油,这本也是由 Paul Cobbaut 编写的书是一本好的参考资料。

《Linux 存储》 [电子书]

这本由 Paul Cobbaut(对,还是他)编写的书详细解释了 Linux 的磁盘管理,而且介绍了许多其他的和存储相关的技术。

《Linux 安全》 [电子书]

这是这个书单里最后一本由 Paul Cobbaut 编写的书。安全是系统管理员最重要的工作之一。这本书关注文件权限、ACL、SELinux、用户和密码等等。

你有什么最喜爱的 Linux 资料吗?

我知道这是一个不错的免费 Linux 电子书集合,但是它可以做的更好。

如果你有学习 Linux 方面有更大帮助的其它资料,请务必和我们共享。请注意只共享合法的下载资料,以便我可以根据你的建议更新这篇文章而不会有任何问题。

我希望你觉得这篇文章在学习 Linux 时有帮助,欢迎你的反馈。


via: https://itsfoss.com/learn-linux-for-free/

作者:Abhishek Prakash 译者:yyyfor 校对:wxy

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

有几个命令可以帮助你在 Linux 系统上看到网络状况,这些包括 ip、ethtool、traceroute、tcptraceroute 和 tcpdump。

ifconfignetstat 命令当然非常有用,但还有很多其它命令能帮你查看 Linux 系统上的网络状况。本文探索了一些检查网络连接的非常简便的命令。

ip 命令

ip 命令显示了许多与你使用 ifconfig 命令时的一样信息。其中一些信息以不同的格式呈现,比如显示 192.168.0.6/24,而不是 inet addr:192.168.0.6 Bcast:192.168.0.255,尽管 ifconfig 更适合数据包计数,但 ip 命令有许多有用的选项。

首先,ip a 命令可以列出所有网络接口的信息。

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 inet 127.0.0.1/8 scope host lo
 valid_lft forever preferred_lft forever
 inet6 ::1/128 scope host
 valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
 link/ether 00:1e:4f:c8:43:fc brd ff:ff:ff:ff:ff:ff
 inet 192.168.0.6/24 brd 192.168.0.255 scope global eth0
 valid_lft forever preferred_lft forever
 inet6 fe80::21e:4fff:fec8:43fc/64 scope link
 valid_lft forever preferred_lft forever

如果你只想看到简单的网络接口列表,你可以用 grep 限制它的输出。

$ ip a | grep inet
 inet 127.0.0.1/8 scope host lo
 inet6 ::1/128 scope host
 inet 192.168.0.6/24 brd 192.168.0.255 scope global eth0
 inet6 fe80::21e:4fff:fec8:43fc/64 scope link

使用如下面的命令,你可以看到你的默认路由:

$ ip route show
default via 192.168.0.1 dev eth0
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.6

在这个输出中,你可以看到通过 eth0 的默认网关是 192.168.0.1,并且本地网络是相当标准的 192.168.0.0/24

你也可以使用 ip 命令来启用和禁用网络接口。

$ sudo ip link set eth1 up
$ sudo ip link set eth1 down

ethtool 命令

另一个检查网络非常有用的工具是 ethtool。这个命令提供了网络接口上的许多描述性的数据。

$ ethtool eth0
Settings for eth0:
 Supported ports: [ TP ]
 Supported link modes: 10baseT/Half 10baseT/Full
 100baseT/Half 100baseT/Full
 1000baseT/Full
 Supported pause frame use: No
 Supports auto-negotiation: Yes
 Advertised link modes: 10baseT/Half 10baseT/Full
 100baseT/Half 100baseT/Full
 1000baseT/Full
 Advertised pause frame use: No
 Advertised auto-negotiation: Yes
 Speed: 100Mb/s
 Duplex: Full
 Port: Twisted Pair
 PHYAD: 1
 Transceiver: internal
 Auto-negotiation: on
 MDI-X: on (auto)
Cannot get wake-on-lan settings: Operation not permitted
 Current message level: 0x00000007 (7)
 drv probe link
 Link detected: yes

你也可以使用 ethtool 命令来检查以太网驱动程序的设置。

$ ethtool -i eth0
driver: e1000e
version: 3.2.6-k
firmware-version: 1.4-0
expansion-rom-version:
bus-info: 0000:00:19.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no

自动协商的详细信息可以用这样的命令来显示:

$ ethtool -a eth0
Pause parameters for eth0:
Autonegotiate: on
RX: on
TX: on

traceroute 命令

traceroute 命令用于显示路由路径。它通过在一系列数据包中设置数据包头的 TTL(生存时间)字段来捕获数据包所经过的路径,以及数据包从一跳到下一跳需要的时间。traceroute 的输出有助于评估网络连接的健康状况,因为某些路由可能需要花费更长的时间才能到达最终的目的地。

$ sudo traceroute world.std.com
traceroute to world.std.com (192.74.137.5), 30 hops max, 60 byte packets
 1 192.168.0.1 (192.168.0.1) 3.691 ms 3.678 ms 3.665 ms
 2 10.224.64.1 (10.224.64.1) 26.273 ms 27.354 ms 28.574 ms
 3 10.20.0.33 (10.20.0.33) 28.293 ms 30.625 ms 33.959 ms
 4 10.20.0.226 (10.20.0.226) 36.807 ms 37.868 ms 37.857 ms
 5 204.111.0.132 (204.111.0.132) 38.256 ms 39.091 ms 40.429 ms
 6 ash-b1-link.telia.net (80.239.161.69) 41.612 ms 28.214 ms 29.573 ms
 7 xe-1-3-1.er1.iad10.us.zip.zayo.com (64.125.13.157) 30.429 ms 27.915 ms 29.065 ms
 8 ae6.cr1.dca2.us.zip.zayo.com (64.125.20.117) 31.353 ms 32.413 ms 33.821 ms
 9 ae27.cs1.dca2.us.eth.zayo.com (64.125.30.246) 43.474 ms 44.519 ms 46.037 ms
10 ae4.cs1.lga5.us.eth.zayo.com (64.125.29.202) 48.107 ms 48.960 ms 50.024 ms
11 ae8.mpr3.bos2.us.zip.zayo.com (64.125.30.139) 51.626 ms 51.200 ms 39.283 ms
12 64.124.51.229.t495-rtr.towerstream.com (64.124.51.229) 40.233 ms 41.295 ms 39.651 ms
13 69.38.149.18 (69.38.149.18) 44.955 ms 46.210 ms 55.673 ms
14 64.119.137.154 (64.119.137.154) 56.076 ms 56.064 ms 56.052 ms
15 world.std.com (192.74.137.5) 63.440 ms 63.886 ms 63.870 ms

tcptraceroute 命令

tcptraceroute 命令与 traceroute 基本上是一样的,只是它能够绕过最常见的防火墙的过滤。正如该命令的手册页所述,tcptraceroute 发送 TCP SYN 数据包而不是 UDP 或 ICMP ECHO 数据包,所以其不易被阻塞。

tcpdump 命令

tcpdump 命令允许你捕获网络数据包来进一步分析。使用 -D 选项列出可用的网络接口。

$ tcpdump -D
1.eth0 [Up, Running]
2.any (Pseudo-device that captures on all interfaces) [Up, Running]
3.lo [Up, Running, Loopback]
4.nflog (Linux netfilter log (NFLOG) interface)
5.nfqueue (Linux netfilter queue (NFQUEUE) interface)
6.usbmon1 (USB bus number 1)
7.usbmon2 (USB bus number 2)
8.usbmon3 (USB bus number 3)
9.usbmon4 (USB bus number 4)
10.usbmon5 (USB bus number 5)
11.usbmon6 (USB bus number 6)
12.usbmon7 (USB bus number 7)

-v 选项控制你看到的细节程度——越多的 v,越详细,但超过 3 个 v 不会有更多意义。

$ sudo tcpdump -vv host 192.168.0.32
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:26:31.321816 IP (tos 0x10, ttl 64, id 22411, offset 0, flags [DF], proto TCP (6), length 184)
 192.168.0.6.ssh > 192.168.0.32.57294: Flags [P.], cksum 0x8221 (incorrect -> 0x0254), seq 3891093411:3891093555, ack 2388988308, win 329, length 144
20:26:31.321984 IP (tos 0x10, ttl 64, id 22412, offset 0, flags [DF], proto TCP (6), length 200)
 192.168.0.6.ssh > 192.168.0.32.57294: Flags [P.], cksum 0x8231 (incorrect -> 0x3db0), seq 144:304, ack 1, win 329, length 160
20:26:31.323791 IP (tos 0x0, ttl 128, id 20259, offset 0, flags [DF], proto TCP (6), length 40)
 192.168.0.32.57294 > 192.168.0.6.ssh: Flags [.], cksum 0x643d (correct), seq 1, ack 304, win 385, length 0
20:26:31.383954 IP (tos 0x10, ttl 64, id 22413, offset 0, flags [DF], proto TCP (6), length 248)
...

当你运行像这样的命令时,会看到非常多的输出。

这个命令捕获来自特定主机和 eth0 上的 11 个数据包。-w 选项标识保存捕获包的文件。在这个示例命令中,我们只要求捕获 11 个数据包。

$ sudo tcpdump -c 11 -i eth0 src 192.168.0.32 -w packets.pcap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
11 packets captured
11 packets received by filter
0 packets dropped by kernel

arp 命令

arp 命令将 IPv4 地址映射到硬件地址。它所提供的信息也可以在一定程度上用于识别系统,因为网络适配器可以告诉你使用它们的系统的一些信息。下面的第二个 MAC 地址,以 f8:8e:85 开头,很容易被识别出是 Comtrend 路由器。

$ arp -a
? (192.168.0.12) at b0:c0:90:3f:10:15 [ether] on eth0
? (192.168.0.1) at f8:8e:85:35:7f:b9 [ether] on eth0

上面的第一行显示了系统本身的网络适配器的 MAC 地址。该网络适配器似乎已由台湾 Chicony 电子公司制造。你可以很容易地在网上查找 MAC 地址关联,例如来自 Wireshark 的这个工具 —— https://www.wireshark.org/tools/oui-lookup.html


via: https://www.networkworld.com/article/3233306/linux/more-ways-to-examine-network-connections-on-linux.html

作者:Sandra Henry-Stocker 译者:kimii 校对:wxy

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