通常你可能会把数据放在一个分区上，有时候可能需要对该设备或者上面的一个分区进行备份。树莓派用户为了可引导 SD 卡当然有这个需求。其它小体积计算机的用户也会发现这非常有用。有时候设备看起来要出现故障时最好快速做个备份。进行本文中的实验你需要一个叫 dcfldd 的工具。dcfldd 工具该工具是 coreutils 软件包中 dd 工具的增强版。dcfldd 是 Nicholas Harbour 在美国国防部计算机取证实验室（DCFL）工作期间研发的。该工具的名字也基于他工作的地方 - dcfldd。对于仍然在使用 CoreUtils 8.23 或更低版本的系统，并没有一个可以轻松查看正在创建副本的进度的选项。有时候看起来就像什么都没有发生，以至于你就想取消掉备份。注意：如果你使用 8.24 或更新版本的 dd 工具，你就不需要使用 dcfldd，只需要用 dd 替换 dcfldd 即可。所有其它参数仍然适用。在 Debian 系统上你只需要在 Package Manager 中搜索 dcfldd。你也可以打开一个终端然后输入下面的命令：sudo apt-get install dcfldd 对于 Red Hat 系统，可以用下面的命令：cd /tmp wget dl.fedoraproject.org/pub/epel/6/i386/dcfldd-1.3.4.1-4.el6.i686.rpm sudo yum install dcfldd-1.3.4.1-4.el6.i686.rpm dcfldd --version 注意： 上面的命令安装的是 32 位版本。对于 64 位版本，使用下面的命令：cd /tmp wget dl.fedoraproject.org/pub/epel/6/x86_64/dcfldd-1.3.4.1-4.el6.x86_64.rpm sudo yum install dcfldd-1.3.4.1-4.el6.x86_64.rpm dcfldd --version 每组命令中的最后一个语句会列出 dcfldd 的版本并显示该命令文件已经被加载。注意：确保你以 root 用户执行 dd 或者 dcfldd 命令。安装完该工具后你就可以继续使用它备份和恢复分区。备份分区备份设备的时候可以备份整个设备也可以只是其中的一个分区。如果设备有多个分区，我们可以分别备份每个分区。在进行备份之前，先让我们来看一下设备和分区的区别。假设我们有一个已经被格式化为一个大磁盘的 SD 卡。这个 SD 卡只有一个分区。如果空间被切分使得 SD 卡看起来是两个设备，那么它就有两个分区。假设我们有一个树莓派中的 SD 卡。SD 卡容量为 8 GB，有两个分区。第一个分区存放 BerryBoot 启动引导器。第二个分区存放 Kali（LCTT 译注：Kali Linux 是一个 Debian 派生的 Linux 发行版）。现在已经没有可用的空间用来安装第二个操作系统。我们使用大小为 16 GB 的第二个 SD 卡，但拷贝到第二个 SD 卡之前，第一个 SD 卡必须先备份。要备份第一个 SD 卡我们需要备份设备 /dev/sdc。进行备份的命令如下所示：dcfldd if=/dev/sdc of=/tmp/SD-Card-Backup.img 备份包括输入文件（if）以及被设置为 /tmp 目录下名为 SD-Card-Backup.img 的输出文件（of）。dd 和 dcfldd 默认都是每次读写文件中的一个块。通过上述命令，它可以一次默认读写 512 个字节。记住，该复制是一个精准的拷贝 - 逐位逐字节。默认的 512 个字节可以通过块大小参数 - bs= 更改。例如，要每次读写 1 兆字节，参数为 bs=1M。使用以下所用的缩写可以设置不同大小：b – 512 字节KB – 1000 字节K – 1024 字节MB – 1000x1000 字节M – 1024x1024 字节GB – 1000x1000x1000 字节G – 1024x1024x1024 字节你也可以单独指定读和写的块大小。要指定读块的大小使用 ibs=。要指定写块的大小使用 obs=。我使用三种不同的块大小做了一个 120 MB 分区的备份测试。第一次使用默认的 512 字节，它用了 7 秒钟。第二次块大小为 1024 K，它用时 2 秒。第三次块大小是 2048 K，它用时 3 秒。用时会随系统以及其它硬件实现的不同而变化，但通常来说更大的块大小会比默认的稍微快一点。完成备份后，你还需要知道如何把数据恢复到设备中。恢复分区现在我们已经有了一个备份点，假设数据可能被损毁了或者由于某些原因需要进行恢复。命令和备份时相同，只是源和目标相反。对于上面的例子，命令会变为：dcfldd of=/dev/sdc if=/tmp/SD-Card-Backup.img 这里，镜像文件被用作输入文件（if）而设备（sdc）被用作输出文件（of）。注意： 要记住输出设备会被重写，它上面的所有数据都会丢失。通常来说在恢复数据之前最好用 GParted 删除 SD 卡上的所有分区。假如你在使用多个 SD 卡，例如多个树莓派主板，你可以一次性写多块 SD 卡。为了做到这点，你需要知道系统中卡的 ID。例如，假设我们想把镜像 BerryBoot.img 拷贝到两个 SD 卡。SD 卡分别是 /dev/sdc 和 /dev/sdd。下面的命令在显示进度时每次读写 1 MB 的块。命令如下：dcfldd if=BerryBoot.img bs=1M status=progress | tee >(dcfldd of=/dev/sdc) | dcfldd of=/dev/sdd 在这个命令中，第一个 dcfldd 指定输入文件并把块大小设置为 1 MB。status 参数被设置为显示进度。然后输入通过管道 |传输给命令 tee。tee 用于将输入分发到多个地方。第一个输出是到命令 dcfldd of=/dev/sdc。命令被放到小括号内被作为一个命令执行。我们还需要最后一个管道 |，否则命令 tee 会把信息发送到 stdout （屏幕）。因此，最后的输出是被发送到命令 dcfldd of=/dev/sdd。如果你有第三个 SD 卡，甚至更多，只需要添加另外的重定向和命令，类似 >(dcfldd of=/dev/sde。注意：记住最后一个命令必须在管道 | 后面。必须验证写的数据确保数据是正确的。验证数据一旦创建了一个镜像或者恢复了一个备份，你可以验证这些写入的数据。要验证数据，你会使用名为 diff 的另一个不同程序。使用 diff ，你需要指定镜像文件的位置以及系统中拷贝自或写入的物理媒介。你可以在创建备份或者恢复了一个镜像之后使用 diff 命令。该命令有两个参数。第一个是物理媒介，第二个是镜像文件名称。对于例子 dcfldd of=/dev/sdc if=/tmp/SD-Card-Backup.img，对应的 diff 命令是：diff /dev/sdc /tmp/SD-Card-Backup.img 如果镜像和物理设备有任何的不同，你会被告知。如果没有显示任何信息，那么数据就验证为完全相同。确保数据完全一致是验证备份和恢复完整性的关键。进行备份时需要注意的一个主要问题是镜像大小。分割镜像假设你想要备份一个 16GB 的 SD 卡。镜像文件大小会大概相同。如果你只能把它备份到 FAT32 分区会怎样呢？FAT32 最大文件大小限制是 4 GB。必须做的是文件必须被切分为 4 GB 的分片。通过管道 | 将数据传输给 split 命令可以切分正在被写的镜像文件。创建备份的方法相同，但命令会包括管道和切分命令。示例备份命令为 dcfldd if=/dev/sdc of=/tmp/SD-Card-Backup.img ，其切分文件的新命令如下：dcfldd if=/dev/sdc | split -b 4000MB - /tmp/SD-Card-Backup.img 注意： 大小后缀和对 dd 及 dcfldd 命令的意义相同。 split 命令中的破折号用于将通过管道从 dcfldd 命令传输过来的数据填充到输入文件。文件会被保存为 SD-Card-Backup.imgaa 和 SD-Card-Backup.imgab，如此类推。如果你担心文件大小太接近 4 GB 的限制，可以试着用 3500MB。将文件恢复到设备也很简单。你使用 cat 命令将它们连接起来然后像下面这样用 dcfldd 写输出：cat /tmp/SD-Card-Backup.img* | dcfldd of=/dev/sdc 你可以在命令中 dcfldd 部分包含任何需要的参数。我希望你了解并能执行任何需要的数据备份和恢复，正如 SD 卡和类似设备所需的那样。（题图：Pixabay， CC0）via: https://www.linuxforum.com/threads/partition-backup.3638/作者：Jarret 译者：ictlyh 校对：jasminepeng本文由 LCTT 原创编译，Linux中国 荣誉推出
在我们之前的 NMAP 安装一文中，列出了 10 种不同的 ZeNMAP 扫描模式，大多数的模式使用了不同的参数。各种不同参数代表执行不同的扫描模式。之前我们介绍过两种扫描类型 PING 扫描 和 UDP 扫描，这篇文章将介绍最后剩下的两种常用扫描类型。四种通用扫描类型下面列出了最常用的四种扫描类型：PING 扫描（-sP）TCP SYN 扫描（-sS）TCP Connect() 扫描（-sT）UDP 扫描（-sU）当我们利用 NMAP 来执行扫描的时候，这四种扫描类型是我们需要熟练掌握的。更重要的是需要知道这些命令做了什么，并且需要知道这些命令是怎么做的。在这篇文章中将介绍两种 TCP 扫描 — TCP SYN 扫描和 TCP Connect() 扫描。TCP SYN 扫描 （-sS）TCP SYN 扫描是默认的 NMAP 扫描方式。为了运行 TCP SYN 扫描，你需要有 Root 权限。TCP SYN 扫描的目的是找到被扫描系统上的已开启端口。使用 NMAP 扫描可以扫描在防火墙另一侧的系统。当扫描通过防火墙时，扫描时间会延长，因为数据包会变慢。TCP SYN 扫描的工作方式是启动一个“三次握手”。正如在另一篇文章中所述，“三次握手”发生在两个系统之间。首先，源系统发送一个包到目标系统，这是一个同步（SYN）请求。然后，目标系统将通过同步/应答（SYN/ACK）响应。接下来，源系统将通过应答（ACK）来响应，从而建立起一个通信连接，然后，可以在两个系统之间传输数据。TCP SYN 扫描通过执行下面的步骤来进行工作：源系统向目标系统发送一个同步请求，该请求中包含一个端口号。如果添加在上一步中的所请求的端口号是开启的，那么目标系统将通过同步/应答（SYN/ACK）来响应源系统。源系统通过重置（RST）来响应目标系统，从而断开连接。目标系统可以通过重置/应答（RST/ACK）来响应源系统。这种连接已经开始建立，所以这被认为是半开放连接。因为连接状态是由 NMAP 来管理的，所以你需要有 Root 权限。如果被扫描的端口是关闭的，那么将执行下面的步骤：源系统发送一个同步（SYN）请求到目标系统，该请求中包含一个端口号。目标系统通过重置（RST）响应源系统，因为该端口是关闭的。如果目标系统处于防火墙之后，那么 ICMP 传输或响应会被防火墙禁止，此时，会执行下面的步骤：源系统发送一个同步（SYN）请求到目标系统，该请求中包含一个端口号。没有任何响应，因为请求被防火墙过滤了。在这种情况下，端口可能是被过滤、或者可能打开、或者可能没打开。防火墙可以设置禁止指定端口所有包的传出。防火墙可以禁止所有传入某个指定端口的包，因此目标系统不会接收到请求。注：无响应可能发生在一个启用了防火墙的系统上。即使在本地网络，你也可能会发现被过滤的端口。我将向 图片１那样执行对单一系统（10.0.0.2）的 TCP SYN 扫描。使用命令 sudo nmap -sS <IP 地址> 来执行扫描。<IP 地址>可以改为一个单一 IP 地址，像图片１那样，也可以使用一组 IP 地址。图片１你可以看到它表明 997 个被过滤端口没有显示在下面。NMAP 找到两个开启的端口：139 和 445 。注：请记住，NMAP 只会扫描绝大多数熟知的 1000 多个端口。以后，我们会介绍可以扫描所有端口或者指定端口的其它扫描。该扫描会被 WireShark 俘获，正如图片２所展示的那样。在这儿，你可以看到对目标系统的初始地址解析协议（ARP）请求。在 ARP 请求下面的是一长列到达目标系统端口的 TCP 请求。第 4 行是到达 http-alt 端口（8080）。源系统的端口号为 47128 。正如图片３ 展示的，许多 SYN 请求只有在做出响应以后才会发送。图片２图片３在图片３的第 50 行和第 51 行，你可以看到，重置（RST）包被发送给了目标系统。第 53 行和第 55 行显示目标系统的 RST/ACK（重置/应答）。第 50 行是针对 ‘microsoft-ds’ 端口（445），第 51 行是针对 ‘netbios-ssn’ 端口（135），我们可以看到，这两个端口都是打开的。（LCTT 译注：在 50 行和 51 行之前，目标系统发回了 SYN/ACK 响应，表示端口打开。）除了这些端口，没有其他 ACK（应答）是来自目标系统的。每一个请求均可发送超过 1000 次。正如图片４所展示的，目标系统是 Windows 系统，我关闭了系统防火墙，然后再次执行扫描。现在，我们看到了 997 个已关闭端口不是 997 个被过滤端口。目标系统上的 135 端口之前被防火墙禁止了，现在也是开启的。图片４TCP Connect() 扫描 （-sT）尽管 TCP SYN 扫描需要 Root 权限，但 TCP Connect() 扫描并不需要。在这种扫描中会执行一个完整的“三次握手”。因为不需要 Root 权限，所以在无法获取 Root 权限的网络上，这种扫描非常有用。TCP Connect() 扫描的工作方式也是执行“三次握手”。正如上面描述过的，“三次握手”发生在两个系统之间。源系统发送一个同步（SYN）请求到目标系统。然后，目标系统将通过同步／应答（SYN/ACK）来响应。最后，源系统通过应答（ACK）来响应，从而建立起连接，然后便可在两个系统之间传输数据。TCP Connect 扫描通过执行下面的步骤来工作：源系统发送一个同步（SYN）请求到目标系统，该请求中包含一个端口号。如果上一步所请求的端口是开启的，那么目标系统将通过同步/应答（SYN/ACK）来响应源系统。源系统通过应答（ACK）来响应目标系统从而完成会话创建。然后，源系统向目标系统发送一个重置（RST）包来关闭会话。目标系统可以通过同步/应答（SYN/ACK）来响应源系统。若步骤 2 执行了，那么源系统就知道在步骤 1 中的指定端口是开启的。如果端口是关闭的，那么会发生和 TCP SYN 扫描相同的事。在步骤 2 中，目标系统将会通过一个重置（RST）包来响应源系统。可以使用命令 nmap -sT <IP 地址> 来执行扫描。<IP 地址>可以改为一个单一 IP 地址，像图片５那样，或者使用一组 IP 地址。TCP Connect() 扫描的结果可以在图片５中看到。在这儿，你可以看到，有两个已开启端口：139 和 445，这和 TCP SYN 扫描的发现一样。端口 80 是关闭的。剩下没有显示的端口是被过滤了的。图片５让我们关闭防火墙以后再重新扫描一次，扫描结果展示在图片６中。图片６关闭防火墙以后，我们可以看到，更多的端口被发现了。就和 TCP SYN 扫描一样，关闭防火墙以后，发现 139 端口和 445 端口是开启的。我们还发现，端口 2869 也是开启的。也发现有 996 个端口是关闭的。现在，端口 80 是 996 个已关闭端口的一部分 — 不再被防火墙过滤。在一些情况下， TCP Connect() 扫描可以在一个更短的时间内完成。和 TCP SYN 扫描相比，TCP Connect() 扫描也可以找到更多的已开启端口via: https://www.linuxforum.com/threads/nmap-common-scans-part-two.3879/作者：Jarret 译者：ucasFL 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
我们之前在 NMAP 的安装一文中，列出了 10 种不同的 ZeNMAP 扫描模式。大多数的模式使用了各种参数。各种参数代表了执行不同的扫描模式。这篇文章将介绍其中的四种通用的扫描类型。四种通用扫描类型下面列出了最常使用的四种扫描类型：PING 扫描 (-sP)TCP SYN 扫描 (-sS)TCP Connect() 扫描 (-sT)UDP 扫描 (-sU)当我们利用 NMAP 来执行扫描的时候，这四种扫描类型是我们需要熟练掌握的。更重要的是需要知道这些命令做了什么并且需要知道这些命令是怎么做的。本文将介绍 PING 扫描和 UDP 扫描。在之后的文中会介绍 TCP 扫描。PING 扫描 (-sP)某些扫描会造成网络拥塞，然而 Ping 扫描在网络中最多只会产生两个包。当然这两个包不包括可能需要的 DNS 搜索和 ARP 请求。每个被扫描的 IP 最少只需要一个包来完成 Ping 扫描。通常 Ping 扫描是用来查看在指定的 IP 地址上是否有在线的主机存在。例如，当我拥有网络连接却连不上一台指定的网络服务器的时候，我就可以使用 PING 来判断这台服务器是否在线。PING 同样也可以用来验证我的当前设备与网络服务器之间的路由是否正常。注意: 当我们讨论 TCP/IP 的时候，相关信息在使用 TCP/IP 协议的互联网与局域网（LAN）中都是相当有用的。这些程序都能工作。同样在广域网（WAN）也能工作得相当好。当参数给出的是一个域名的时候，我们就需要域名解析服务来找到相对应的 IP 地址，这个时候将会生成一些额外的包。例如，当我们执行 ping linuxforum.com 的时候，需要首先请求域名（linuxforum.com）的 IP 地址（98.124.199.63)。当我们执行 ping 98.124.199.63 的时候 DNS 查询就不需要了。当 MAC 地址未知的时候，就需要发送 ARP 请求来获取指定 IP 地址的 MAC 地址了（LCTT 译注：这里的指定 IP 地址，未必是目的 IP）。Ping 命令会向指定的 IP 地址发送一个英特网信息控制协议（ICMP）包。这个包是需要响应的 ICMP Echo 请求。当服务器系统在线的状态下我们会得到一个响应包。当两个系统之间存在防火墙的时候，PING 请求包可能会被防火墙丢弃。一些服务器也会被配置成不响应 PING 请求来避免可能发生的死亡之 PING。（LCTT 译注：现在的操作系统似乎不太可能）注意: 死亡之 PING 是一种恶意构造的 PING 包当它被发送到系统的时候，会造成被打开的连接等待一个 rest 包。一旦有一堆这样的恶意请求被系统响应，由于所有的可用连接都已经被打开，所以系统将会拒绝所有其它的连接。技术上来说这种状态下的系统就是不可达的。当系统收到 ICMP Echo 请求后它将会返回一个 ICMP Echo 响应。当源系统收到 ICMP Echo 响应后我们就能知道目的系统是在线可达的。使用 NMAP 的时候你可以指定单个 IP 地址也可以指定某个 IP 地址段。当被指定为 PING 扫描（-sP）的时候，会对每一个 IP 地址执行 PING 命令。在图 1 中你可以看到我执行 nmap -sP 10.0.0.1-10 命令后的结果。程序会试着联系 IP 地址 10.0.0.1 到 10.0.0.10 之间的每个系统。对每个 IP 地址都要发出三个 ARP 请求。在我们的例子中发出了三十个请求，这 10 个 IP 地址里面有两个有回应。（LCTT 译注：此处原文存疑。）图 1图 2 中展示了网络上另一台计算机利用 Wireshark 抓取的发出的请求——没错，是在 Windows 系统下完成这次抓取的。第一行展示了发出的第一条请求，广播请求的是 IP 地址 10.0.0.2 对应 MAC 地址。由于 NMAP 是在 10.0.0.1 这台机器上执行的，因此 10.0.0.1 被略过了。由于本机 IP 地址被略过，我们现在可以看到总共只发出了 27 个 ARP 请求。第二行展示了 10.0.0.2 这台机器的 ARP 响应。第三行到第十行是其它八个 IP 地址的 ARP 请求。第十一行是由于 10.0.0.2 没有收到请求系统（10.0.0.1）的反馈所以（重新）发送的另一个 ARP 响应。第十二行是源系统向 10.0.0.2 发起的 HTTP 连接的 ‘SYN’ 和 Sequence 0。第十三行和第十四行的两次 Restart（RST）和 Synchronize（SYN）响应是用来关闭（和重发）第十二行所打开的连接的。注意 Sequence ID 是 ‘1’ - 是源 Sequence ID + 1。第十五行开始就是类似相同的内容。（LCTT 译注：此处原文有误，根据情况已经修改。）图 2回到图 1 中我们可以看到有两台主机在线。其中一台是本机（10.0.0.1）另一台是（10.0.0.2）。整个扫描花费了 14.40 秒。PING 扫描是一种用来发现在线主机的快速扫描方式。扫描结果中没有关于网络、系统的其它信息。这是一种较好的初步发现网络上在线主机的方式，接着你就可以针对在线系统执行更加复杂的扫描了。你可能还会发现一些不应该出现在网络上的系统。出现在网络上的流氓软件是很危险的，他们可以很轻易的收集内网信息和相关的系统信息。一旦你获得了在线系统的列表，你就可以使用 UDP 扫描来查看哪些端口是可能开启了的。UDP 扫描 (-sU)现在你已经知道了有那些系统是在线的，你的扫描就可以聚焦在这些 IP 地址之上。在整个网络上执行大量的没有针对性的扫描活动可不是一个好主意，系统管理员可以使用程序来监控网络流量当有大量异常活动发生的时候就会触发警报。用户数据报协议（UDP）在发现在线系统的开放端口方面十分有用。由于 UDP 不是一个面向连接的协议，因此是不需要响应的。这种扫描方式可以向指定的端口发送一个 UDP 包。如果目标系统没有回应那么这个端口可能是关闭的也可能是被过滤了的。如果端口是开放状态的那么应该会有一个响应。在大多数的情况下目标系统会返回一个 ICMP 信息说端口不可达。ICMP 信息让 NMAP 知道端口是被关闭了。如果端口是开启的状态那么目标系统应该响应 ICMP 信息来告知 NMAP 端口可达。注意: 只有最前面的 1024 个常用端口会被扫描。（LCTT 译注：这里将 1000 改成了1024，因为手册中写的是默认扫描 1 到 1024 端口）在后面的文章中我们会介绍如何进行深度扫描。由于我知道 10.0.0.2 这个主机是在线的，因此我只会针对这个 IP 地址来执行扫描。扫描过程中总共收发了 3278 个包。sudo nmap -sU 10.0.0.2 这个命令的输出结果在图 3 中展现。图 3在这副图中你可以看见端口 137（netbios-ns）被发现是开放的。在图 4 中展示了 Wireshark 抓包的结果。不能看到所有抓取的包，但是可以看到一长串的 UDP 包。图 4如果我把目标系统上的防火墙关闭之后会发生什么呢？我的结果有那么一点的不同。NMAP 命令的执行结果在图 5 中展示。图 5注意: 当你执行 UDP 扫描的时候是需要 root 权限的。会产生大量的包是由于我们使用了 UDP。当 NMAP 发送 UDP 请求时它是不保证数据包会被收到的。因为数据包可能会在中途丢失因此它会多次发送请求。via: https://www.linuxforum.com/threads/nmap-common-scans-part-one.3637/作者：Jarret 译者：wcnnbdk1 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
本文中包含了很多命令行基础。我们将讨论 TeleTYpe（TTY）和几个命令及其选项。确保做完所有练习，并要知道，除非另有说明，对 CentOS 和 Ubuntu 都是相同的。TTY当没有图形用户界面（GUI）或当用户在 GUI 之外，Linux 就会使用 TTY。当打开终端窗口时也使用 TTY，但这些是不同类型的 TTY。有三种类型的 TTY：物理终端本地伪终端远程伪终端基本上，每个 Linux 系统有大约六个或七个物理 TTY。 通过按住 CTRL + ALT 键，然后在 CentOS 按住 F1 到 F6 ，而在 Ubuntu 中是 F1 到 F7。注意： 一些发行版可能有不同数量的 TTY 和不同的 GUI 默认位置。有点发行版可能有在物理 TTY 之间切换的不同组合键，如 CTRL + F# 或 ALT + F# （ LCTT 译注：F# 代表 F1、F2 等）。当使用 VirtualBox 时，除非您更改了主机键映射，请使用右 CTRL 键。在 CentOS 中，GUI 在 TTY1（CTRL + ALT + F1）上，其他物理 TTY 都是基于文本的。 在 Ubuntu 上，GUI 在 TTY7（CTRL + ALT + F7）上，其他物理 TTY 都是基于文本的。注意： 尝试在另一个 TTY 下加载 GUI 是不明智的，因为这可能耗用大量资源，但你可以这样做。当 Linux 启动时，不管是 CentOS 还是 Ubuntu，都会打开默认 TTY。如果安装了 GUI，对于 CentOS 是打开 TTY1，对于 Ubuntu 是打开 TTY7。如果你打开一个终端窗口（伪 TTY）并使用命令 who，你可以看到正在使用的 TTY 的列表。 如图 1 所示。图 1在图 1 中，你可以看到我当前登录到 TTY1（非 GUI）。第二行连接显示我已登录到 GUI（TTY7）以及两个伪 TTY（pts/1 和 pts/2）。如图 2，你可以看到新条目显示了远程伪 TTY（pts/4）。 远程伪连接来自 IP 地址为 192.168.0.11 的系统。图 2可以使用诸如 PuTTY 或任何 SSH 的客户端（如果远程 Linux 系统上启用了 SSH）之类的应用程序进行远程 TTY 连接。如果终端窗口字体比较小，你可以使用 CTRL + SHIFT 键和 + 键来放大字体。多次按下可以更大。要缩小大小，请使用 CTRL + SHIFT + - 不断缩小。要使终端字体恢复为原始大小，请按下 CTRL + SHIFT + 0。注意： 请注意，如果字体已经足够大或足够小了，组合键就不再工作了。希望你现在已经了解各种类型的 TTY。让我们看看一些可以在 TTY 中使用的命令。命令其中一个命令前面已经讨论过了。命令 who 用于显示谁登录到了系统。另一个命令是 pwd。命令 pwd 代表“ 打印工作目录 （ Print Working Directory ） ”。该命令返回你所在的当前目录。例如，如果终端提示符是 [jbuse@localhost〜]$，则用户名为 jbuse，当前目录为 〜。波浪号（〜）代表用户的主文件夹。主文件夹应该是 /home/USERNAME。用户名是用于登录系统的名称。要列出当前文件夹的内容，请使用命令 ls。ls 命令代表 List。如果未指定任何选项，则列出当前文件夹。如果给出文件夹名称，则会列出该文件夹的内容。例如，要查看 media 文件夹的内容，你可以使用命令 ls /media。在 ls 命令后面我们可以添加一些选项以显示更多详细信息或特定详细信息。如果你想看到所有的文件夹和文件，即使是隐藏的，请使用选项 -a。要查看当前目录中的所有文件和文件夹，请使用命令 ls -a。隐藏的文件和文件夹将在名称前面显示一个句点（.）。要在每个文件夹名称后看到正斜杠（/），请使用 -F 选项。当前文件夹列表将是 ls -F。-F 用于按文件类型对文件进行分类。符号链接在文件夹名称后用 @ 表示。你可以把这两个选项连在一起形成 ls -aF。注意： 一些选项可能有不同的大小写。选项区分大小写。另一个选项是显示长列表的 -l。示例输出如图 3 所示。文件夹和文件名称列在右侧。文件为白色，文件夹为深蓝色，符号链接为浅蓝色。如图 3 所示，符号链接 vtrgb 链接自 /etc/alternatives/vtrgb 。图 3左侧的第一列是文件或文件夹的权限。第一个字母是 d 的为目录，是 - 的为文件。接下来的三个字母显示所有者的权限（r - 读、w - 写、x - 执行），后面是组权限以及“其他人”的权限。下一列数字显示指向文件或文件夹的链接数。再下一列是所有者名称，后面是所有组名称。再下一列是文件或文件夹在存储设备上占用的字节数。接下来的三列是文件上次修改的月份、日期和年份。最后一列是路径名。目前为止，你可以看到列表是按字母顺序排序。要颠倒从 “z” 到 “a” 而不是 “a” 到 “z” 的顺序，请使用 -r 选项。逆转选项 -r 使 ls 命​​令反转输出顺序。要按修改的时间戳列出文件，请使用 -t 选项。顺序是从最近修改到最早的修改日期。当然，在命令 ls -tr 中，同时使用 -t 和 -r 颠倒了顺序。如果你不喜欢看文件的长长的字节数，使用选项 -h。输出将会更易读，如显示 4.0K 而不是 4096。要获取单个文件夹的特定信息，请使用选项 -d，但必须指定该文件夹。例如，要查看文件夹 /media 的详细信息，请使用命令 ls -ld /media。另一个要熟悉的命令是命令 cat。命令 cat 用于将标准输入（文件）复制到标准输出（屏幕）。使用 cat 可以轻松地查看文件的内容。例如，要查看名为 text 的文件的内容，如果你与文件 text 在同一个文件夹中请使用命令 cat text。如果你不在同一个文件夹中，那么你必须指定位置。例如，如果文件 text 在文件夹 /home/jarret/test/ 中，那么命令将是 cat /home/jarret/test/text。另一个非常有用的命令是 man。man 命令用于查看特定命令的文档。例如，要查看命令 ls 的帮助页面，请使用命令 man ls。注意： 记住，在 LFCS 考试中，你可以使用 man 命令。查看这些命令并测试它们以熟悉它们。使用 man 命令，查看本文中的命令以查看其他可用的选项。via: https://www.linuxforum.com/threads/lfcs-command-line-basics.3334/作者：Jarret 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
“ 我的世界 （ Minecraft ） ”是一个人们可以在各种游戏主机和计算机上玩的主流游戏。 截止至 2016 年 6 月，在各种平台上已经售出了超过十亿六千万份。因其受欢迎，你可能想在家里举办一个“我的世界”派对，那么你就需要安装一个 “我的世界” 服务器，让所有的玩家连接到同一个世界中一起玩。系统要求要开始的话，你需要一个有相当数量内存的 Linux 操作系统。你要在服务器上容纳的玩家越多，你就需要越多的内存。硬盘空间倒不是需求很大，只要足够去安装 Java 以及“我的世界”服务器 Java 文件就行。Minecraft 服务器需要有一个稳定的网络连接，不管是有线还是无线网络。让我们看看 “我的世界”服务器最低要求：CPU：双核或更好。内存： 2 GB （20-40 用户量)，3 GB（30-60 用户量），8 GB（60+ 用户量）。系统： 不需要图形化用户接口，可以留出更多的空闲资源。备注： 这是“我的世界” 服务端程序的需求，而不是一个完整的操作系统的需求。如果可以给我的世界服务器分配更多的资源，它将运行得更好。安装 Java如果你用 Linux 操作系统运行它的话，你需要安装最新版本的 Java 环境。为了验证你的 Java 版本，位于终端输入以下命令：java -version。结果应该是：java version "1.8.0_101" Java(TM) SE Runtime Environment (build 1.8.0_101-b13) Java HotSpot(TM) Client VM (build 25.101-b13, mixed mode) 如果你当前的 Java 版本不是 1.8 或者更高，则通过在 Ubuntu 系统的终端下执行以下操作来安装 Java 版本 8：sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt-get install oracle-java8-installer 注意：如果 add-apt-repository 命令无法找到，运行 sudo apt-get install software-properties-common 来安装。 您还可以将第三个命令中更改为 oracle-java9-installer 来安装最新的 java 版本。对于 Redhat 系统（如 CentOS），请使用以下命令：sudo yum install java-1.8.0-openjdk 安装后，核实键入版本命令 java-version ，并且核实输出。这样你就有了一个适当的 Java 版本，你可以继续进行接下来的安装。“我的世界”服务器版本下载接下来做的事就是去检查用户将运行的“我的世界”的版本。图 1 显示了一个正在运行的 ”我的世界“ ，注意左下角的版本号。图 1请记住“我的世界”客户端版本号。每个客户端应该是相同的版本才行。您接下来要做的是下载客户端所需要的“我的世界”的服务器版本。为了下载该版本你需要知道它的位置。得到所需的文件的命令是：sudo wget https://s3.amazonaws.com/Minecraft.Download/versions/[version]/minecraft_server.[version].jar 在 图1 看到，版本号是 1.10.2。那么这个命令就该变成：sudo wget https://s3.amazonaws.com/Minecraft.Download/versions/1.10.2/minecraft_server.1.10.2.jar 当你下载好文件，会保存到你当前目录下。使用命令 pwd 确定当前位置。一旦你有了该文件，知道它所保存的文件夹就可以继续了。服务器信息在启动“我的世界”服务器之前，您必须知道当前系统上能被你使用的可用内存大小。 当启动“我的世界”服务器时，你将需要指定起始内存量和当更多玩家加入时最大分配的内存量。 再次提示，重要的是要有足够的内存。 如果可以，使用最小化安装操作系统来留出更多的内存，例如最小化安装的 Ubuntu。一旦你有了所需的“我的世界”服务器文件，就可以确定分配给“我的世界”的内存数量。 要确定可用内存，打开一个终端并键入以下命令 ，示例输出如图 2 所示：free -h 图 2如图 2 所示，在这个低端系统上你可以看到那只有 684 MB 空闲内存。这不是一个可以用于搭建一个 “我的世界” 服务器的系统。在另一个服务器上我有 2.8 GB 内存可供给“我的世界” 使用。在我们启动服务器之前，我们需要找到服务器的 IP 地址。 为此，请运行命令 ifconfig。 如图 3 所示，应该列出了网络连接，显示 Internet Address 或 inet addr，这里是 192.168.0.2。 在我的服务器系统上，它列出的地址是 192.168.0.14，这个地址是客户端系统将要使用的地址。图 3启动“我的世界”服务器下一步才是真正的启动“我的世界”服务器。在我们实际开始前，会涉及到几个选项。当启动“我的世界”服务器时，你需要指定用多少内存来初始化“我是世界”。 您还将指定使用的最大内存量。如果我的系统有 3.7GB 闲置内存，我知道会有不到 40 位玩家，于是我只需要划出 2GB。当然，我可以增加些以允许用户增长。如果需要的话，我还可以留一点内存给系统运行。我将最小值设置为 2 GB，最大值设置为 3 GB。 由于最大值设置为 3 GB，如果需要的话，还可以至少留给系统 700 MB 内存，但这只有在“我的世界”服务器使用超过最初分配的2 GB 时才会发生。启动服务器的命令行是：sudo java -Xms# -Xmx# -jar [path]/minecraft_server.[version].jar nogui 现在解释一下命令结构：-Xms# - 初始启动分配的内存（-Xms2048m）-Xmx# - 最大分配的内存（-Xmx3096m）[path] – “我的世界” 服务器文件路径（ /home/tux/MCS/）[version] – 下载的“我的世界” 服务器的版本（1.10.2）nogui – 用于以基于文本的界面来显示，可以减少内存使用。如果你使用图形化界面，那么移除 nogui 选项。一个使用 2GB 内存以及最大 3GB、位置为 /home/tux/MCS、 版本号为 1.10.2 的系统的完整命令实例是：sudo java -Xms2048m -Xmx3096m -jar /home/tux/MCS/minecraft_server.1.10.2.jar nogui 注意： 这里内存容量的大小是兆字节单位。容量要乘以 1024。举个例子，2GB 的内存使 2 与 1024 相乘，容量为 2048。但别忘小写字母 m 是特指兆字节。你可以简单地使用特指的 2g 和 3g 来表示 2GB 和 3GB。在你首次运行服务器时会发成一些错误。开始之前，它表明需要同意 “最终用户许可协议 EULA”。要同意 “最终用户许可协议 EULA”，你需要编辑与“我的世界”服务器 JAR 文件同一文件夹下的的 eula.txt 文件。使用一个类似 nano 的文件编辑器打开文件 eula.txt 文件。确定你进行这步时使用的是 root 权限。将行 eula = false 更改为 eula = true，并保存文件。现在，再次输入上述命令以启动服务器。 应该滚过满屏幕信息，然后一个状态行将显示它的创建过程。 当其这个初始世界创建好之后，状态行将显示 100％。 有关系统时间更改的任何错误消息是正常的，因此忽略它们。此时，你可以打开客户端程序并且看到如上图 1 的界面。点击“Multiplayer”按钮。在下一屏幕，如图 4，选择 “Direct Connect”，这将提示您输入服务器地址，因此键入“我的世界”服务器的 IP 地址。你现在应该已经连接到游戏了。图 4连接的某些麻烦如果一些客户端无法连接到服务器，那么你需要按下 CTRL+Z 退出 Java 程序。打开文件 server.propertices， 使用一个 nano 之类的编辑器进行编辑。记住要 root 权限。编辑 online-mode 行，它应该设置为 true ，修改为 false 并保存。重启服务器并打开“我的世界”服务器。使用客户端重新连接到服务器，现在应该一切都好了。建设快乐！via: https://www.linuxforum.com/threads/minecraft-server-on-linux.3202/作者：Jarret 译者：erlinux 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出