Linux 基金会认证系统管理员（LFCS）的另一个有用的命令是 “sed”，最初表示 “流式编辑器” （ Streaming EDitor ） 。“sed” 命令是一个可以将文件作为流进行编辑的编辑器。流式传输文件的方法是从另一个命令使用管道（> 或 |）传递，或将其直接加载到 “sed” 中。该命令的工作方式与其他编辑器相同，只是文件不显示，也不允许可视化编辑。命令被传递给 “sed” 来操纵流。用 “sed” 可以做五件基本的事。当然，“sed” 如此强大，还有其他高级的功能，但你只需要集中精力在五件基本的事上。五种功能类型如下：搜索替换删除添加改变/变换在深入命令参数之前，我们需要看看基本的语法。语法“sed” 命令的语法是：sed [选项] 命令 [要编辑的文件] 本文将在适当的部分中介绍这些“选项”。“命令”可以是正则表达式的搜索和替换模式。请继续阅读了解 “sed” 如何工作的并学习基本命令。正如我之前提到的，“sed” 是一个非常强大的工具，有更多的选项可用，我将在本文中介绍。示例文件如果你打开一个终端，那你可以创建一个用于 “sed” 示例的文件。执行以下命令：cd ~ grep --help >grephelp.txt 你现在应该在 HOME 文件夹中有一个名为 grephelp.txt 的文件。该文件的内容是 grep 命令的帮助说明。搜索搜索特定字符串是编辑器的常见功能，在 “sed” 中执行搜索也不例外。执行搜索以在文件中查找字符串。我们来看一下基本的搜索。如果我们想在示例文件搜索 PATTERN 这个词，我们将使用如下命令：sed -n 's/PATTERN/PATTERN/p' grephelp.txt 注意： 如果剪切粘贴命令，请确保将单引号替换为键盘上的标准单引号。参数 -n 用于抑制每行的自动打印（除了用 p 命令指定的行）。默认情况下，流入 “sed” 的每一行将被打印到标准输出（stdout）。如果你不使用 “-n” 选项运行上述命令，你将看到原始文件的每一行以及匹配的行。要搜索的文件名是我们在“示例文件”部分中创建的 “grephelp.txt”。剩下的部分是 's/PATTERN/PATTERN/p' 。这一段基本分为四个部分。第一部分的 s 指定执行替换，或搜索并替换。剩下的第二部分和第三部分是模式。第一个是要搜索的模式，最后一个是替换流中匹配字符串的模式。此例中，我们找到字符串 PATTERN，并用 PATTERN 替换。通过查找和替换相同的字符串，我们完全不会更改文件，甚至在屏幕上也一样。最后一个命令是 p。 它指定在替换后打印新行。当然，因为替换的是相同的字符串，所以没有改变。由于我们使用 -n 参数抑制打印行，所以更改的行将使用 p 命令打印。这个完整的命令允许我们执行搜索并查看匹配的结果。替换当搜索特定字符串时，你可能希望用匹配的字符串替换新字符串。用另一个字符串替换是很常见的操作。我们可以使用以下命令执行相同的搜索：sed -n 's/PATTERN/Pattern/p' grephelp.txt 在这时，字符串 “PATTERN” 变为 “Pattern” 并显示。如果你使用命令 cat grephelp.txt 查看文件，你会看到该文件没有更改。该更改仅对屏幕上的输出进行。你可以使用以下命令将输出通过管道传输到另一个文件：sed 's/PATTERN/Pattern/' grephelp.txt > grephelp1.txt 现在将存在一个名为 grephelp1.txt 的新文件，其中保存了更改的文件。如果 p 作为第四个选项留下，那么有个问题是被替换的字符串的每一行将在文件中重复两次。我们也可以删除 “-n” 参数以允许所有的行打印。使用相同字符串替换字符串的另一种方法是使用 & 符号来表示搜索字符串。例如，命令 s/PATTERN/&/p 效果是一样的。我们可以添加字符串，例如添加 S，可以使用命令 s/PATTERN/&S/p。如果我们希望在每一行中只替换某种模式呢？可以指定要替换的匹配项的特定出现。当然，每一行的替换都是一个特定的编号。例如，示例文件上有很多破折号。一些行至少有两条破折号，所以我们可以用另一个字符代替每一行的第二个破折号。每行用星号 * 替换第二个破折号 - 的命令将是：sed 's/-/*/2' grephelp.txt 在这里，我们用最初的 s 来执行替换。字符 - 被替换为 *。2 表示我们想要替换每行上的第二个 -（如果存在）。如果我们忽略了命令 2，则替换第一次出现的破折号。只有第一个破折号而不是每行的破折号都被替换。如果要搜索并替换带有星号的行上的所有破折号，请使用 g 命令：sed 's/-/*/g' grephelp.txt 命令也可以组合。假设你想要替换从第二次开始出现的破折号，命令将是：sed 's/-/*/2g' grephelp.txt 现在从第二个开始出现的破折号将被星号取代。删除搜索过程中有很多时候你可能想要完全删除搜索字符串。例如，如果要从文件中删除所有破折号，你可以使用以下命令：sed 's/-//g' grephelp.txt 替换字符串为空白，因此匹配的字符串将被删除。添加当找到匹配时，你可以添加一行特定的文本，来使这行在浏览或打印中突出。如果要在匹配后插入新行，那么使用 a 命令，后面跟上新行的字符串。还包括要匹配的字符串。例如，我们可以找到一个 --，并在匹配的行之后添加一行。新行的字符串将是 double dash before this line。sed '/--/ a "double dash before this line"' grephelp.txt 如果要在包含匹配字符串的行之前加上这行，请使用 i 命令，如下所示：sed '/--/ i "double dash after this line"' grephelp.txt 改变/变换如果需要改变/变换一行，则可以使用命令 c。假设我们有个有一些私人信息的文档，我们需要更改包含特定字符串的行。c 命令将改变整行，而不仅仅是搜索字符串。假设我们想要阻止示例文件中包含单词 PATTERN 的每一行。更改的行将显示为 This line is Top Secret。命令是：sed '/PATTERN/ c This line is Top Secret' grephelp.txt 可以进行更改特定字母的大小写的转换。例如，我们可以使用命令 y 将所有小写 a 更改为大写 A，如下所示：sed 'y/a/A/' grephelp.txt 可以指定多个字母，如 abdg，如下命令所示：sed 'y/abdg/ABDG/' grephelp.txt 确保第二组字母与第一组字母的顺序相同，否则会被替换和转换。例如，字符串 y/a/D/ 将用大写 D 替换所有小写的 a。就地更改如果你确实要更改所使用的文件，请使用 -i 选项。例如，要将 PATTERN 改为 Pattern，并对文件进行更改，则命令为：sed -i 's/PATTERN/Pattern/' grephelp.txt 现在文件 grephelp.txt 将被更改。-i 选项可以与上述任何命令一起使用来更改原始文件的内容。练习这些命令，并确保你理解它们。“sed” 命令非常强大。（题图：Pixabay，CC0）via: https://www.linux.org/threads/lfcs-sed-command.4561/作者：Jarret B 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
很多 Linux 爱好者喜欢用他们的 Linux 系统玩游戏，看起来似乎并不需要一个可以玩游戏的操作系统。UALinux 是一家推广使用 GNU/Linux 的乌克兰公司。UALinux 开发了一个 Ubuntu 版本填补了这一空白，并把这个基于 Ubuntu 16.04 的操作系统（OS）命名为 Ubuntu GamePack。内容（Linux 上的）游戏现在已经相当丰富，而游戏公司宣称可以访问超过 22,381 款游戏。这个 GamePack 包括 Lutris 和 Steam 两部分，允许您访问发行版厂商提供的特定游戏服务。对于基于 Windows 的游戏，可以用 PlayOnLinux，WINE 和 CrossOver 转换到 Linux 上运行。对于 DOS 游戏，您可以在 DosBox 中运行游戏，这是一个 Linux 的 DOS 模拟器。也安装了 Sparky APTus Gamer ，可以访问众多主机游戏模拟器。 模拟器包括：AdvanceMENU - AdvanceMAME、 AdvanceMESS、 MAME、 MESS、 xmame、 Raine 以及其他的模拟器的前端Atari800 - Atari 8 位系统、XE 游戏系统和 Atari 5200 超级系统的模拟器DeSmuME - 任天堂 DS 模拟器Desura - 支持 Windows、Linux 和 X 系统的数字化分发平台 - 在线安装器DOSBox - 支持 BeOS、Linux、Mac X、OS2 和 Windows 的 DOS 模拟器DOSEMU - 支持 Linux 的 DOS 模拟器ePSXe - 增强的 PSX 模拟器FCEUX - 任天堂娱乐系统（NES）、红白机（Famicom）和红白机磁盘系统（FDS）模拟器（仿真器）FS-UAE - 跨平台的 Amiga 模拟器GNOME Video Arcade - 简化的 MAME 前端Hatari - 支持 Linux 和其他系统的 Atari ST、STE、TT 和 Falcon 模拟器（仿真器）Higan - 任天堂 SNES、NES、Gameboy、Gameboy Color 和 Gameboy Advance 的模拟器Kega\_Fusion - 世嘉 SG/SC/SF，主系统、Master System、 Game Gear、 Genesis/Megadrive、 SVP、 Pico、 SegaCD/MegaCD 模拟器MAME - 忠实重现了许多街机效果的硬件模拟器Mednafen - Atari Lynx、GameBoy、NES、SNES、PC-FX、世嘉，索尼游戏站等系统MESS - 各种主机和计算机游戏的模拟器Nestopia - 任天堂娱乐系统/红白机模拟器PCSX - 索尼游戏站模拟器PlayOnLinux - Wine 前端PPSSPP - PPSSPP 是支持 Windows、MacOS、Linux 和 Android 的开源 PSP 仿真器Steam - Steam 软件分发服务的启动器 - 在线安装程序Stella -用于 SDL 和 X Window 系统的 Atari 2600 仿真器VisualBoyAdvance - 全功能 Game Boy Advance 的模拟器Virtual Jaguar - 用于 Atari 的 infamous Jaguar 主机游戏的跨平台模拟器Wine - Windows 二进制在 Linux 中运行Winetricks - 一个用于 WINE 的 POSIX shell 脚本的软件包管理器，能够很容易安装一些 Windows软件Yabause - 世嘉土星32位游戏机模拟器ZSNES - 超级任天堂娱乐系统模拟器GamePack 还包括被一些游戏所必须的 Oracle java 和 Adobe Flash。如果这是一个你感兴趣的操作系统，请继续阅读，看看如何下载它。下载下载此操作系统镜像的主要地方是 UALinux 。其下载链接是： https://ualinux.com/en/download/category/25-ubuntu-gamepack。由于此链接来自国外，所以下载速度很慢。另一种选择是利用种子文件下载此操作系统。如果你没有种子下载程序，你可以下载“Transmission”。有了种子下载程序后，你可以通过 https://zooqle.com/ubuntu-gamepack-16-04-i386-amd64-январь-2017-pc-vkn99.html下载。这个种子文件下载可以下载 64 位和 32 位 的 ISO 镜像文件。（下载的）文件大小取决于您需要的架构。64 位操作系统 ISO 镜像文件大小是 2.27 GB，而 32 位的操作系统 ISO 镜像文件大小是 2.13 GB。 如果下载了你所用的 ISO 镜像文件，你可以利 ISO 文件创建一个可启动的 DVD 安装 GamePack ，或者你可以使用 “USB Image Writer”把 ISO 写入到优盘，并利用此优盘安装系统。 硬件需求和 Ubuntu 16.04 保持一致：2 GHz 双核处理器或者更高2 GB 系统内存25 GB 的磁盘空间用于安装介质的 DVD 驱动器或者 USB 端口在线游戏系统（如 Steam）需要互联网接入。不用说，对于游戏玩家来说，肯定希望拥有比这些“最低配置”要求更高的系统配置。更多的内存将是一个有把握的选择，也应该有一款显存大一点的正统显卡。您如果有了硬件系统和系统的特定 32位 或者 64 位 ISO 文件，那么接下来就可以安装操作系统了。安装过程当你用安装介质的 ISO 镜像文件启动了系统，您就可以准备进行下一步了。从 Ubuntu Gamepack 介质启动，你会看到一个类似图 1 的屏幕。图 1一旦加载完毕，安装程序就可以继续安装了。图 2 显示下一屏，可以定制语言，接下来是安装或者体验 Gamepack。如果你愿意，你可以点击 “Try Ubuntu” 在不改变硬盘内容的情况下把它加载到内存中来试试它。图 2接下来继续选择 ‘Install Ubuntu’ 进行安装了。下一个屏幕，如图 3 所示，你可以在安装 Ubuntu 时指定是否下载 Ubuntu 的任何更新。您还可以选择安装第三方的软件，如：图形、WiFi、Flash、 MP3 和其他更新。 当定制好你的系统后，就可以点击“Continue” 图 3接下来，您必须指定驱动器将如何配置使用，如图 4 所示。如果您计划使用整个驱动器，那么可以更容易地设置，选择此驱动器即可，然后单击“Install Now”。图 4接下来在图 5 中可以根据提示确认所选择硬件配置。如果同意以上的更改，请单击“Continue”。 图 5接下来，如图 6 所示，你将按照提示选择时区，选择完毕后点击“Continue”。图 6接下来，如图 7 所示一个窗口，需要您设置默认的键盘布局。选择适合您的正确的布局后并按“Continue”。图 7最后一个配置屏幕是为您设置一个用户帐户，如图 8 所示。键入您的姓名、计算机名、用户名、密码并选择您需要键入密码登录系统的方式。您还可以为该用户设置加密主目录。图 8安装将按指定来设置驱动器。安装文件将从引导媒体复制到硬盘驱动器，如图 9 所示。所有内容复制到硬盘并设置好，您将被提示移除引导介质并允许重新启动系统。图 9重新启动后，您需要选择要求用户登录，会得到类似于图 10 的屏幕。输入指定的用户密码登录到 Ubuntu Gamepack。图 10当你登录到 Ubuntu Gamepack 你应该尝试执行可能需要的软件升级。打开一个终端并输入以下两个命令：sudo apt-get update && sudo apt-get upgrade 任何没有安装的更新都应该安装，以便 GamePack 系统保持更新。现在，只要看看菜单，找到你想玩的游戏就行了，打开模拟器或其它像 Steam 的游戏服务 。希望你喜欢 Gamepack 并且玩得高兴！via: https://www.linux.org/threads/ubuntu-gamepack.4559/作者：Jarret B 译者：stevenzdg988 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
有时，能够知道一个网络里的机器的操作系统（OS）是有一定好处的。当你知道一台机器的操作系统后，因为你可以在网上搜索专门针对该系统的安全漏洞，所以入侵系统也会更加容易。当然，安全漏洞通常都会很快被修补，但安全漏洞存在时你需要知道。对你自己的网络进行扫描以便发现操作系统类型可以帮助你了解黑客将如何侵入你的网络。操作系统探测数据库NAMP 带有一个数据库，它在你安装 NAMP 的时候就会被安装。这个数据库用于操作系统的探测，但是它不会自动更新。这个数据库位于 /usr/share/nmap/nmap-os-db。进行更新的最简单方式是首先找到数据库的版本号，用文本编辑器打开这个文件，版本号通常位于第二行。我的数据库的第二行是 # $Id: nmap-os-db 35407 2015-11-10 04:26:26Z dmiller $，即这个文件的数据库版本是 35407。要在网上查找一个可更新版本，可以浏览 https://svn.nmap.org/nmap ，如图 1 所示：图 1你可以从图中看到版本号为 36736，与我的系统上的版本号相比，这个版本号似乎是一个更新的版本。为了对更新的操作系统进行准确的操作系统探测，当然需要对这个数据库进行更新。保留较旧的数据库版本也是一个不错的主意。我当前和版本是 35407，我将在终端执行下面的命令：sudo mv /usr/share/nmap/nmap-os-db /usr/share/nmap/nmap-os-db-35407 这个数据库被以包含版本号的方式重命名了，下一步就是从网站上下载新版本的数据库，在终端执行下面命令：cd /usr/share/nmap sudo su wget https://svn.nmap.org/nmap/nmap-os-db 新的数据库即将开始被下载，但是你应该加上版本号，就像你在图 1 中看到的版本号 36736。使用文本编辑器打开这个数据库，然后在第二行加上版本号。当版本号变化后，你可以更新你的数据库，然后在其中加入版本号，以便在再次检查更新时做好准备。系统探测过程在我们开始使用实际的命令并执行系统探测之前，我们应该详细介绍扫描过程中将会发生的事情。会执行五种不同的测试，每种测试由一个或者多个数据包组成，目标系统对每个数据包作出的响应有助于确定操作系统的类型。五种不同的测试是： 序列生成 （ Sequence Generation ） ICMP 回显TCP 显式拥塞通知 （ Explicit Congestion Notification ） TCPUDP现在让我们分别看看他们各自在做什么。序列生成序列生成测试由六个数据包组成，这六个包是每隔 100 毫秒分开发送的，且都是 TCP SYN 包。每个 TCP SYN 包的结果将有助于 NMAP 确定操作系统的类型。ICMP 回显两个有着不同设置的 ICMP 请求包被送到目标系统，由此产生的反应将有助于实现验证操作系统类型。TCP 显式拥塞通知 （ Explicit Congestion Notification ） 当生成许多包通过路由器时会导致其负载变大，这称之为拥塞。其结果就是系统会变慢以降低拥堵，以便路由器不会发生丢包。这个包仅为了得到目标系统的响应而发送。因为不同的操作系统以不同的方式处理这个包，所以返回的特定值可以用来判断操作系统。TCP在这个测试中会发送六个数据包。一些带有特定的包设置的包被发送用来到打开的或关闭的端口。结果也将会因为操作系统的不同而不同。所有 TCP 包都是以如下不同的标志被发送：无标志SYN、FIN、URG 和 PSHACKSYNACKFIN、PSH 和 URGUDP这个测试由一个被发送给一个关闭的端口的数据包组成。如果目标系统上的这个端口是关闭的，而且返回一条 ICMP 端口不可达的信息，那么就说明没有防火墙。NMAP 操作系统检测命令现在我们开始实际动手进行系统探测。如果你已经读过一些我写的关于 NMAP 的文章，那么最好不要执行 PING 操作。为了跳过 PING，我们使用参数 Pn。为了看到详细的信息，你应该使用 -v 参数用于动态显示。为了获取系统的信息，需要使用 -O 参数。为了使命令顺利运行和执行 TCP SYN 扫描，你需要以管理员的身份来执行这个命令。在我的例子中，我将只在一个系统上而不是整个网络上进行扫描，使用的命令是：sudo nmap -v -Pn -O 192.168.0.63 扫描的结果如图2所示，扫描显示七个开放的端口。图 2开放的端口是：21/tcp ftp22/tcp ssh111/tcp rpcbind139/tcp netbios-ssn445/tcp microsoft-ds2049/tcp nfs54045/tcp unknown系统的 MAC 地址为为：00:1E:4F:9F:DF:7F。后面部分显示系统类型为：Device type: general purpose Running: Linux 3.X|4.X OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4 OS details: Linux 3.2 - 4.6 Uptime guess: 0.324 days (since Sun Apr 23 08:43:32 2017) 系统当前运行的是 Ubuntu Server 16.04，Linux 内核为 4.8，运行时间猜的较准确。我在另一个系统了又进行了一次测试，结果如图3所示：图 3这次扫描中开放的端口与上次不同。所猜的系统为 ‘Microsoft Windows 2000|XP’，实际上是 Windows XP sp3。端口嗅探结果让我们来看看图 2 所示的第一次扫描中在后台发生了什么。首先 NMAP 执行一次 TCP 隐秘扫描，在本次系统探测实例中以一个如图 4 所示的数据包 2032 开始。图 4 序列生成 （ Sequence Generation ） 开始于数据包 2032/2033，第六个数据包是 2047/2048。注意每个都被发送两次，且每隔 100ms 发送下一个数据包。发送的 ICMP 数据包是 2050 - 2053，2 个数据包重复一遍，实际上是 4 个数据包。2056-2057 是 TCP 显式拥塞通知数据包。对 TCP 的 6 个测试是 2059、2060、2061、2063、2065、2067。最后的 UDP 测试是 2073。这些就是用于确定目标系统上操作系统的类型的测试。我希望这将有助于你理解如何更新 NMAP 系统探测数据库和执行对系统的扫描。请注意，你可以和你不在同一个网络中的系统进行扫描，所以可以对互联网上的任何系统进行扫描。via: https://www.linux.org/threads/nmap-os-detection.4564/作者：Jarret B 译者：zhousiyu325 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出