SK 发布的文章

如果你是一个 Linux 方面的新手,你可能会在 morelessmost 这三个命令行工具之间产生疑惑。在本文当中,我会对这三个命令行工具进行对比,以及展示它们各自在 Linux 中的一些使用例子。总的来说,这几个命令行工具之间都有相通和差异,而且它们在大部分 Linux 发行版上都有自带。

我们首先来看看 more 命令。

more 命令

more 是一个老式的、基础的终端分页阅读器,它可以用于打开指定的文件并进行交互式阅读。如果文件的内容太长,在一屏以内无法完整显示,就会逐页显示文件内容。使用回车键或者空格键可以滚动浏览文件的内容,但有一个限制,就是只能够单向滚动。也就是说只能按顺序往下翻页,而不能进行回看。

更正

有的 Linux 用户向我指出,在 more 当中是可以向上翻页的。不过,最原始版本的 more 确实只允许向下翻页,在后续出现的较新的版本中也允许了有限次数的向上翻页,只需要在浏览过程中按 b 键即可向上翻页。唯一的限制是 more 不能搭配管道使用(如 ls | more)。(LCTT 译注:此处原作者疑似有误,译者使用 more 是可以搭配管道使用的,或许与不同 more 版本有关)

q 即可退出 more

更多示例

打开 ostechnix.txt 文件进行交互式阅读,可以执行以下命令:

$ more ostechnix.txt

在阅读过程中,如果需要查找某个字符串,只需要像下面这样输入斜杠(/)之后接着输入需要查找的内容:

/linux

n 键可以跳转到下一个匹配的字符串。

如果需要在文件的第 10 行开始阅读,只需要执行:

$ more +10 file

就可以从文件的第 10 行开始显示文件的内容了。

如果你需要让 more 提示你按空格键来翻页,可以加上 -d 参数:

$ more -d ostechnix.txt

如上图所示,more 会提示你可以按空格键翻页。

如果需要查看所有选项以及对应的按键,可以按 h 键。

要查看 more 的更多详细信息,可以参考手册:

$ man more

less 命令

less 命令也是用于打开指定的文件并进行交互式阅读,它也支持翻页和搜索。如果文件的内容太长,也会对输出进行分页,因此也可以翻页阅读。比 more 命令更好的一点是,less 支持向上翻页和向下翻页,也就是可以在整个文件中任意阅读。

在使用功能方面,lessmore 命令具有更多优点,以下列出其中几个:

  • 支持向上翻页和向下翻页
  • 支持向上搜索和向下搜索
  • 可以跳转到文件的末尾并立即从文件的开头开始阅读
  • 在编辑器中打开指定的文件

更多示例

打开文件:

$ less ostechnix.txt

按空格键或回车键可以向下翻页,按 b 键可以向上翻页。

如果需要向下搜索,在输入斜杠(/)之后接着输入需要搜索的内容:

/linux

n 键可以跳转到下一个匹配的字符串,如果需要跳转到上一个匹配的字符串,可以按 N 键。

如果需要向上搜索,在输入问号(?)之后接着输入需要搜索的内容:

?linux

同样是按 n 键或 N 键跳转到下一个或上一个匹配的字符串。

只需要按 v 键,就会将正在阅读的文件在默认编辑器中打开,然后就可以对文件进行各种编辑操作了。

h 键可以查看 less 工具的选项和对应的按键。

q 键可以退出阅读。

要查看 less 的更多详细信息,可以参考手册:

$ man less

most 命令

most 同样是一个终端阅读工具,而且比 moreless 的功能更为丰富。most 支持同时打开多个文件。你可以在打开的文件之间切换、编辑当前打开的文件、迅速跳转到文件中的某一行、分屏阅读、同时锁定或滚动多个屏幕等等功能。在默认情况下,对于较长的行,most 不会将其截断成多行显示,而是提供了左右滚动功能以在同一行内显示。

更多示例

打开文件:

$ most ostechnix1.txt

e 键可以编辑当前文件。

如果需要向下搜索,在斜杠(/)或 Sf 之后输入需要搜索的内容,按 n 键就可以跳转到下一个匹配的字符串。

如果需要向上搜索,在问号(?)之后输入需要搜索的内容,也是通过按 n 键跳转到下一个匹配的字符串。

同时打开多个文件:

$ most ostechnix1.txt ostechnix2.txt ostechnix3.txt

在打开了多个文件的状态下,可以输入 :n 切换到下一个文件,使用 键选择需要切换到的文件,按回车键就可以查看对应的文件。

要打开文件并跳转到某个字符串首次出现的位置(例如 linux),可以执行以下命令:

$ most file +/linux

h 键可以查看帮助。

按键操作列表

移动:

  • 空格键或 D 键 – 向下滚动一屏
  • DELETE 键或 U 键 – 向上滚动一屏
  • 键 – 向下移动一行
  • 键 – 向上移动一行
  • T 键 – 移动到文件开头
  • B 键 – 移动到文件末尾
  • > 键或 TAB 键 – 向右滚动屏幕
  • < 键 – 向左滚动屏幕
  • 键 – 向右移动一列
  • 键 – 向左移动一列
  • J 键或 G 键 – 移动到某一行,例如 10j 可以移动到第 10 行
  • % 键 – 移动到文件长度某个百分比的位置

窗口命令:

  • Ctrl-X 2Ctrl-W 2 – 分屏
  • Ctrl-X 1Ctrl-W 1 – 只显示一个窗口
  • O 键、Ctrl-X O – 切换到另一个窗口
  • Ctrl-X 0 – 删除窗口

文件内搜索:

  • S 键或 f 键或 / 键 – 向下搜索
  • ? 键 – 向上搜索
  • n 键 – 跳转到下一个匹配的字符串

退出:

  • q 键 – 退出 most ,且所有打开的文件都会被关闭
  • :N:n – 退出当前文件并查看下一个文件(使用 键、 键选择下一个文件)

要查看 most 的更多详细信息,可以参考手册:

$ man most

总结

more – 传统且基础的分页阅读工具,仅支持向下翻页和有限次数的向上翻页。

less – 比 more 功能丰富,支持向下翻页和向上翻页,也支持文本搜索。在打开大文件的时候,比 vi 这类文本编辑器启动得更快。

most – 在上述两个工具功能的基础上,还加入了同时打开多个文件、同时锁定或滚动多个屏幕、分屏等等大量功能。

以上就是我的介绍,希望能让你通过我的文章对这三个工具有一定的认识。如果想了解这篇文章以外的关于这几个工具的详细功能,请参阅它们的 man 手册。


via: https://www.ostechnix.com/the-difference-between-more-less-and-most-commands/

作者:SK 选题:lujun9972 译者:HankChow 校对:wxy

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

在这个教程中,我们会讨论如何安装和配置 Chrony,一个类 Unix 系统上 NTP 客户端和服务器的替代品。Chrony 可以更快的同步系统时钟,具有更好的时钟准确度,并且它对于那些不是一直在线的系统很有帮助。Chrony 是自由开源的,并且支持 GNU/Linux 和 BSD 衍生版(比如 FreeBSD、NetBSD)、macOS 和 Solaris 等。

安装 Chrony

Chrony 可以从大多数 Linux 发行版的默认软件库中获得。如果你使用的是 Arch Linux,运行下面的命令来安装它:

$ sudo pacman -S chrony

在 Debian、Ubuntu、Linux Mint 上:

$ sudo apt-get install chrony

在 Fedora 上:

$ sudo dnf install chrony

当安装完成后,如果之前没有启动过的话需启动 chronyd.service 守护进程:

$ sudo systemctl start chronyd.service

使用下面的命令让它每次重启系统后自动运行:

$ sudo systemctl enable chronyd.service

为了确认 chronyd.service 已经启动,运行:

$ sudo systemctl status chronyd.service

如果一切正常,你将看到类似下面的输出:

● chrony.service - chrony, an NTP client/server
Loaded: loaded (/lib/systemd/system/chrony.service; enabled; vendor preset: ena
Active: active (running) since Wed 2018-10-17 10:34:53 UTC; 3min 15s ago
Docs: man:chronyd(8)
man:chronyc(1)
man:chrony.conf(5)
Main PID: 2482 (chronyd)
Tasks: 1 (limit: 2320)
CGroup: /system.slice/chrony.service
└─2482 /usr/sbin/chronyd

Oct 17 10:34:53 ubuntuserver systemd[1]: Starting chrony, an NTP client/server...
Oct 17 10:34:53 ubuntuserver chronyd[2482]: chronyd version 3.2 starting (+CMDMON
Oct 17 10:34:53 ubuntuserver chronyd[2482]: Initial frequency -268.088 ppm
Oct 17 10:34:53 ubuntuserver systemd[1]: Started chrony, an NTP client/server.
Oct 17 10:35:03 ubuntuserver chronyd[2482]: Selected source 85.25.84.166
Oct 17 10:35:03 ubuntuserver chronyd[2482]: Source 85.25.84.166 replaced with 2403
Oct 17 10:35:03 ubuntuserver chronyd[2482]: Selected source 91.189.89.199
Oct 17 10:35:06 ubuntuserver chronyd[2482]: Selected source 106.10.186.200

可以看到,Chrony 服务已经启动并且正在工作!

配置 Chrony

NTP 客户端需要知道它要连接到哪个 NTP 服务器来获取当前时间。我们可以直接在该 NTP 配置文件中的 server 或者 pool 项指定 NTP 服务器。通常,默认的配置文件位于 /etc/chrony/chrony.conf 或者 /etc/chrony.conf,取决于 Linux 发行版版本。为了更可靠的同步时间,建议指定至少三个服务器。

下面几行是我的 Ubuntu 18.04 LTS 服务器上的一个示例。

[...]
# About using servers from the NTP Pool Project in general see (LP: #104525).
# Approved by Ubuntu Technical Board on 2011-02-08.
# See http://www.pool.ntp.org/join.html for more information.
pool ntp.ubuntu.com iburst maxsources 4
pool 0.ubuntu.pool.ntp.org iburst maxsources 1
pool 1.ubuntu.pool.ntp.org iburst maxsources 1
pool 2.ubuntu.pool.ntp.org iburst maxsources 2
[...]

从上面的输出中你可以看到,NTP 服务器池项目 已经被设置成为了默认的时间服务器。对于那些好奇的人,NTP 服务器池项目是一个时间服务器集群,用来为全世界千万个客户端提供 NTP 服务。它是 Ubuntu 以及其他主流 Linux 发行版的默认时间服务器。

在这里, * iburst 选项用来加速初始的同步过程 * maxsources 代表 NTP 源的最大数量

请确保你选择的 NTP 服务器是同步的、稳定的、离你的位置较近的,以便使用这些 NTP 源来提升时间准确度。

在命令行中管理 Chronyd

chrony 有一个命令行工具叫做 chronyc 用来控制和监控 chrony 守护进程(chronyd)。

为了检查是否 chrony 已经同步,我们可以使用下面展示的 tracking 命令。

$ chronyc tracking
Reference ID : 6A0ABAC8 (t1.time.sg3.yahoo.com)
Stratum : 3
Ref time (UTC) : Wed Oct 17 11:48:51 2018
System time : 0.000984587 seconds slow of NTP time
Last offset : -0.000912981 seconds
RMS offset : 0.007983995 seconds
Frequency : 23.704 ppm slow
Residual freq : +0.006 ppm
Skew : 1.734 ppm
Root delay : 0.089718960 seconds
Root dispersion : 0.008760406 seconds
Update interval : 515.1 seconds
Leap status : Normal

我们可以使用命令确认现在 chrony 使用的时间源:

$ chronyc sources
210 Number of sources = 8
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- chilipepper.canonical.com 2 10 377 296 +102ms[ +104ms] +/- 279ms
^- golem.canonical.com 2 10 377 302 +105ms[ +107ms] +/- 290ms
^+ pugot.canonical.com 2 10 377 297 +36ms[ +38ms] +/- 238ms
^- alphyn.canonical.com 2 10 377 279 -43ms[ -42ms] +/- 238ms
^- dadns.cdnetworks.co.kr 2 10 377 1070 +40ms[ +42ms] +/- 314ms
^* t1.time.sg3.yahoo.com 2 10 377 169 -13ms[ -11ms] +/- 80ms
^+ sin1.m-d.net 2 10 275 567 -9633us[-7826us] +/- 115ms
^- ns2.pulsation.fr 2 10 377 311 -75ms[ -73ms] +/- 250ms

chronyc 工具可以对每个源进行统计,比如使用 sourcestats 命令获得漂移速率和进行偏移估计。

$ chronyc sourcestats
210 Number of sources = 8
Name/IP Address NP NR Span Frequency Freq Skew Offset Std Dev
==============================================================================
chilipepper.canonical.com 32 16 89m +6.293 14.345 +30ms 24ms
golem.canonical.com 32 17 89m +0.312 18.887 +20ms 33ms
pugot.canonical.com 32 18 89m +0.281 11.237 +3307us 23ms
alphyn.canonical.com 31 20 88m -4.087 8.910 -58ms 17ms
dadns.cdnetworks.co.kr 29 16 76m -1.094 9.895 -83ms 14ms
t1.time.sg3.yahoo.com 32 16 91m +0.153 1.952 +2835us 4044us
sin1.m-d.net 29 13 83m +0.049 6.060 -8466us 9940us
ns2.pulsation.fr 32 17 88m +0.784 9.834 -62ms 22ms

如果你的系统没有连接到互联网,你需要告知 Chrony 系统没有连接到 互联网。为了这样做,运行:

$ sudo chronyc offline
[sudo] password for sk:
200 OK

为了确认你的 NTP 源的状态,只需要运行:

$ chronyc activity
200 OK
0 sources online
8 sources offline
0 sources doing burst (return to online)
0 sources doing burst (return to offline)
0 sources with unknown address

可以看到,我的所有源此时都是离线状态。

一旦你连接到互联网,只需要使用命令告知 Chrony 你的系统已经回到在线状态:

$ sudo chronyc online
200 OK

为了查看 NTP 源的状态,运行:

$ chronyc activity
200 OK
8 sources online
0 sources offline
0 sources doing burst (return to online)
0 sources doing burst (return to offline)
0 sources with unknown address

所有选项和参数的详细解释,请参考其帮助手册。

$ man chronyc
$ man chronyd

这就是文章的所有内容。希望对你有所帮助。在随后的教程中,我们会看到如何使用 Chrony 启动一个本地的 NTP 服务器并且配置客户端来使用这个服务器同步时间。

保持关注!


via: https://www.ostechnix.com/chrony-an-alternative-ntp-client-and-server-for-unix-like-systems/

作者:SK 选题:lujun9972 译者:zianglei 校对:wxy

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

大家对 du 命令应该都不陌生,它可以在类 Unix 系统中对文件和目录的空间使用情况进行计算和汇总。如果你也经常需要使用 du 命令,你会对以下内容感兴趣的。我发现了五个可以替代原有的 du 命令的更好的工具。当然,如果后续有更多更好的选择,我会继续列出来。如果你有其它推荐,也欢迎在评论中留言。

ncdu

ncdu 作为普通 du 的替代品,这在 Linux 社区中已经很流行了。ncdu 正是基于开发者们对 du 的性能不满意而被开发出来的。ncdu 是一个使用 C 语言和 ncurses 接口开发的简易快速的磁盘用量分析器,可以用来查看目录或文件在本地或远程系统上占用磁盘空间的情况。如果你有兴趣查看关于 ncdu 的详细介绍,可以浏览《如何在 Linux 上使用 ncdu 查看磁盘占用量》这一篇文章。

tin-summer

tin-summer 是使用 Rust 语言编写的自由开源工具,它可以用于查找占用磁盘空间的文件,它也是 du 命令的另一个替代品。由于使用了多线程,因此 tin-summer 在计算大目录的大小时会比 du 命令快得多。tin-summer 与 du 命令之间的区别是前者读取文件的大小,而后者则读取磁盘使用情况。

tin-summer 的开发者认为它可以替代 du,因为它具有以下优势:

  • 在大目录的操作速度上比 du 更快;
  • 在显示结果上默认采用易读格式;
  • 可以使用正则表达式排除文件或目录;
  • 可以对输出进行排序和着色处理;
  • 可扩展,等等。

安装 tin-summer

要安装 tin-summer,只需要在终端中执行以下命令:

$ curl -LSfs https://japaric.github.io/trust/install.sh | sh -s -- --git vmchale/tin-summer

你也可以使用 cargo 软件包管理器安装 tin-summer,但你需要在系统上先安装 Rust。在 Rust 已经安装好的情况下,执行以下命令:

$ cargo install tin-summer

如果上面提到的这两种方法都不能成功安装 tin-summer,还可以从它的软件发布页下载最新版本的二进制文件编译,进行手动安装。

用法

(LCTT 译注:tin-summer 的命令名为 sn

如果需要查看当前工作目录的文件大小,可以执行以下命令:

$ sn f
749 MB   ./.rustup/toolchains
749 MB   ./.rustup
147 MB   ./.cargo/bin
147 MB   ./.cargo
900 MB   .

不需要进行额外声明,它也是默认以易读的格式向用户展示数据。在使用 du 命令的时候,则必须加上额外的 -h 参数才能得到同样的效果。

只需要按以下的形式执行命令,就可以查看某个特定目录的文件大小。

$ sn f <path-to-the-directory>

还可以对输出结果进行排序,例如下面的命令可以输出指定目录中最大的 5 个文件或目录:

$ sn sort /home/sk/ -n5
749 MB /home/sk/.rustup
749 MB /home/sk/.rustup/toolchains
147 MB /home/sk/.cargo
147 MB /home/sk/.cargo/bin
2.6 MB /home/sk/mcelog
900 MB /home/sk/

顺便一提,上面结果中的最后一行是指定目录 /home/sk 的总大小。所以不要惊讶为什么输入的是 5 而实际输出了 6 行结果。

在当前目录下查找带有构建工程的目录,可以使用以下命令:

$ sn ar

tin-summer 同样支持查找指定大小的带有构建工程的目录。例如执行以下命令可以查找到大小在 100 MB 以上的带有构建工程的目录:

$ sn ar -t100M

如上文所说,tin-summer 在操作大目录的时候速度比较快,因此在操作小目录的时候,速度会相对比较慢一些。不过它的开发者已经表示,将会在以后的版本中优化这个缺陷。

要获取相关的帮助,可以执行以下命令:

$ sn --help

如果想要更详尽的介绍,可以查看这个项目的 GitHub 页面

dust

dust (含义是 du + rust = dust)使用 Rust 编写,是一个免费、开源的更直观的 du 工具。它可以在不需要 headsort 命令的情况下即时显示目录占用的磁盘空间。与 tin-summer 一样,它会默认情况以易读的格式显示每个目录的大小。

安装 dust

由于 dust 也是使用 Rust 编写,因此它也可以通过 cargo 软件包管理器进行安装:

$ cargo install du-dust

也可以从它的软件发布页下载最新版本的二进制文件,并按照以下步骤安装。在写这篇文章的时候,最新的版本是 0.3.1。

$ wget https://github.com/bootandy/dust/releases/download/v0.3.1/dust-v0.3.1-x86_64-unknown-linux-gnu.tar.gz

抽取文件:

$ tar -xvf dust-v0.3.1-x86_64-unknown-linux-gnu.tar.gz

最后将可执行文件复制到你的 $PATH(例如 /usr/local/bin)下:

$ sudo mv dust /usr/local/bin/

用法

需要查看当前目录及所有子目录下的文件大小,可以执行以下命令:

$ dust

输出示例:

带上 -p 参数可以按照从当前目录起始的完整目录显示。

$ dust -p

dust 2

如果需要查看多个目录的大小,只需要同时列出这些目录,并用空格分隔开即可:

$ dust <dir1> <dir2>

下面再多举几个例子,例如:

显示文件的长度:

$ dust -s

只显示 10 个目录:

$ dust -n 10

查看当前目录下最多 3 层子目录:

$ dust -d 3

查看帮助:

$ dust -h

如果想要更详尽的介绍,可以查看这个项目的 GitHub 页面

diskus

diskus 也是使用 Rust 编写的一个小型、快速的开源工具,它可以用于替代 du -sh 命令。diskus 将会计算当前目录下所有文件的总大小,它的效果相当于 du -shdu -sh --bytes,但其开发者表示 diskus 的运行速度是 du -sh 的 9 倍。

安装 diskus

diskus 已经存放于 Arch Linux 社区用户软件仓库 Arch Linux User-community Repository AUR)当中,可以通过任何一种 AUR 帮助工具(例如 yay)把它安装在基于 Arch 的系统上:

$ yay -S diskus

对于 Ubuntu 及其衍生发行版,可以在 diskus软件发布页上下载最新版的软件包并安装:

$ wget "https://github.com/sharkdp/diskus/releases/download/v0.3.1/diskus_0.3.1_amd64.deb"

$ sudo dpkg -i diskus_0.3.1_amd64.deb

还可以使用 cargo 软件包管理器安装 diskus,但必须在系统上先安装 Rust 1.29+。

安装好 Rust 之后,就可以使用以下命令安装 diskus

$ cargo install diskus

用法

在通常情况下,如果需要查看某个目录的大小,我会使用形如 du -sh 的命令。

$ du -sh dir

这里的 -s 参数表示显示总大小。

如果使用 diskus,直接就可以显示当前目录的总大小。

$ diskus

我使用 diskus 查看 Arch Linux 系统上各个目录的总大小,这个工具的速度确实比 du -sh 快得多。但是它目前只能显示当前目录的大小。

要获取相关的帮助,可以执行以下命令:

$ diskus -h

如果想要更详尽的介绍,可以查看这个项目的 GitHub 页面

duu

duu 是 Directory Usage Utility 的缩写。它是使用 Python 编写的查看指定目录大小的工具。它具有跨平台的特性,因此在 Windows、Mac OS 和 Linux 系统上都能够使用。

安装 duu

安装这个工具之前需要先安装 Python 3。不过目前很多 Linux 发行版的默认软件仓库中都带有 Python 3,所以这个依赖并不难解决。

Python 3 安装完成后,从 duu软件发布页下载其最新版本。

$ wget https://github.com/jftuga/duu/releases/download/2.20/duu.py

用法

要查看当前目录的大小,只需要执行以下命令:

$ python3 duu.py

输出示例:

从上图可以看出,duu 会显示当前目录下文件的数量情况,按照 Byte、KB、MB 单位显示这些文件的总大小,以及每个文件的大小。

如果需要查看某个目录的大小,只需要声明目录的绝对路径即可:

$ python3 duu.py /home/sk/Downloads/

如果想要更详尽的介绍,可以查看这个项目的 GitHub 页面

以上就是 du 命令的五种替代方案,希望这篇文章能够帮助到你。就我自己而言,我并不会在这五种工具之间交替使用,我更喜欢使用 ncdu。欢迎在下面的评论区发表你对这些工具的评论。


via: https://www.ostechnix.com/some-good-alternatives-to-du-command/

作者:SK 选题:lujun9972 译者:HankChow 校对:wxy

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

你是否想过尝试一些经典的 MS-DOS 游戏和像 Turbo C++ 这样的废弃的 C++ 编译器?这篇教程将会介绍如何使用 DOSBox 在 Linux 环境下运行 MS-DOS 的游戏和程序。DOSBox 是一个 x86 平台的 DOS 模拟器,可以用来运行经典的 DOS 游戏和程序。 DOSBox 可以模拟带有声音、图形、鼠标、操纵杆和调制解调器等的因特尔 x86 电脑,它允许你运行许多旧的 MS-DOS 游戏和程序,这些游戏和程序根本无法在任何现代 PC 和操作系统上运行,例如 Microsoft Windows XP 及更高版本、Linux 和FreeBSD。 DOSBox 是免费的,使用 C++ 编程语言编写并在 GPL 下分发。

在 Linux 上安装 DOSBox

DOSBox 在大多数 Linux 发行版的默认仓库中都能找的到。

在 Arch Linux 及其衍生版如 Antergos、Manjaro Linux 上:

$ sudo pacman -S dosbox

在 Debian、Ubuntu、Linux Mint 上:

$ sudo apt-get install dosbox

在 Fedora 上:

$ sudo dnf install dosbox

配置 DOSBox

DOSBox 是一个开箱即用的软件,它不需要进行初始化配置。它的配置文件位于 ~/.dosbox 文件夹中,名为 dosbox-x.xx.conf。 在此配置文件中,你可以编辑/修改各种设置,例如以全屏模式启动 DOSBox,全屏使用双缓冲,设置首选分辨率,鼠标灵敏度,启用或禁用声音,扬声器,操纵杆等等。如前所述,默认设置即可正常工作。你可以不用进行任何更改。

在 Linux 中运行 MS-DOS 上的游戏和程序

在终端运行以下命令启动 DOSBox:

$ dosbox

下图就是 DOSBox 的界面

正如你所看到的,DOSBox 带有自己的类似 DOS 的命令提示符和一个虚拟的 Z:\ 的驱动器,如果你熟悉 MS-DOS 的话,你会发现在 DOSBox 环境下工作不会有任何问题。

这是 dir 命令(在 Linux 中等同于 ls 命令)的输出:

如果你是第一次使用 DOSBox,你可以通过在 DOSBox 提示符中输入以下命令来查看关于 DOSBox 的简介:

intro

在介绍部分按回车进入下一页。

要查看 DOS 中最常用命令的列表,请使用此命令:

help

要查看 DOSBox 中所有支持的命令的列表,请键入:

help /all

记好了这些命令应该在 DOSBox 提示符中使用,而不是在 Linux 终端中使用。

DOSBox 还支持一些实用的键盘组合键。下图是能有效使用 DOSBox 的默认键盘快捷键。

要退出 DOSBox,只需键入如下命令并按回车:

exit

默认情况下,DOSBox 开始运行时的正常屏幕窗口大小如上所示。

要直接在全屏启动 DOSBox,请编辑 dosbox-x.xx.conf 文件并将fullscreen 变量的值设置为 enable。 之后,DOSBox 将以全屏模式启动。 如果要返回正常屏幕,请按 ALT+ENTER

希望你掌握了 DOSBox 的这些基本用法。

让我们继续安装一些 DOS 程序和游戏。

首先,我们需要在 Linux 系统中创建目录来保存程序和游戏。我将创建两个名为 ~/dosprograms~/dosgames 的目录,第一个用于存储程序,后者用于存储游戏。

$ mkdir ~/dosprograms ~/dosgames

出于本指南的目的,我将向你展示如何安装 Turbo C++ 程序和 Mario 游戏。我们首先将看到如何安装 Turbo。

下载最后版本的 Turbo C++ 编译器并将其解压到 ~/dosprograms 目录中。 我已经将 Turbo C++ 保存在在我的 ~/dosprograms/TC/ 目录中了。

$ ls dosprograms/tc/

BGI BIN CLASSLIB DOC EXAMPLES FILELIST.DOC INCLUDE LIB README README.COM

运行 DOSBox:

$ dosbox

~/dosprograms 目录挂载为 DOSBox 中的虚拟驱动器 C:\

Z:\>mount c ~/dosprograms

你会看到类似下面的输出:

Drive C is mounted as local directory /home/sk/dosprograms.

现在,使用命令切换到 C 盘:

Z:\>c:

然后切换到 tc/bin 目录:

Z:\>cd tc/bin

最后,运行 Turbo C++ 可执行文件:

Z:\>tc.exe

备注:只需输入前几个字母,然后按回车键可以自动填充文件名。

你现在将进入 Turbo C++ 控制台。

创建新文件(ATL + F)并开始编程:

你可以同样安装和运行其他经典 DOS 程序。

故障排除:

运行 Turbo C++ 或其他任何 DOS 程序时,你可能会遇到以下错误:

DOSBox switched to max cycles, because of the setting: cycles=auto. If the game runs too fast try a fixed cycles amount in DOSBox's options. Exit to error: DRC64:Unhandled memory reference

要解决此问题,编辑 ~/.dosbox/dosbox-x.xx.conf 文件:

$ nano ~/.dosbox/dosbox-0.74.conf

找到以下变量:

core=auto

并更改其值为:

core=normal

现在,让我们看看如何运行基于DOS的游戏,例如 Mario Bros VGA

这里 下载 Mario 游戏,并将其解压到 Linux 中的 ~/dosgames 目录。

运行 DOSBox:

$ dosbox

我们刚才使用了虚拟驱动器 C: 来运行 DOS 程序。现在让我们使用 D: 作为虚拟驱动器来运行游戏。

在 DOSBox 提示符下,运行以下命令将 ~/dosgames 目录挂载为虚拟驱动器 D

Z:\>mount d ~/dosgames

进入驱动器 D:

Z:\>d:

然后进入 mario 游戏目录并运行 mario.exe 文件来启动游戏。

D:\>cd mario
D:\>mario.exe

开始玩游戏:

你可以同样像上面所说的那样运行任何基于 DOS 的游戏。 点击这里查看可以使用 DOSBox 运行的游戏的完整列表。

总结

尽管 DOSBox 并不能作为 MS-DOS 的完全替代品,并且还缺少 MS-DOS 中的许多功能,但它足以安装和运行大多数的 DOS 游戏和程序。

有关更多详细信息,请参阅官方 DOSBox手册

这就是全部内容。希望这对你有用。更多优秀指南即将到来。 敬请关注!

干杯!


via: https://www.ostechnix.com/how-to-run-ms-dos-games-and-programs-in-linux/

作者:SK 选题:lujun9972 译者:way-ww 校对:wxy

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

管道命令的作用是将一个命令/程序/进程的输出发送给另一个命令/程序/进程,以便将输出结果进行进一步的处理。我们可以通过使用管道命令把多个命令组合起来,使一个命令的标准输入或输出重定向到另一个命令。两个或多个 Linux 命令之间的竖线字符(|)表示在命令之间使用管道命令。管道命令的一般语法如下所示:

Command-1 | Command-2 | Command-3 | …| Command-N

Ultimate Plumber(简称 UP)是一个命令行工具,它可以用于即时预览管道命令结果。如果你在使用 Linux 时经常会用到管道命令,就可以通过它更好地运用管道命令了。它可以预先显示执行管道命令后的结果,而且是即时滚动地显示,让你可以轻松构建复杂的管道。

下文将会介绍如何安装 UP 并用它将复杂管道命令的编写变得简单。

重要警告:

在生产环境中请谨慎使用 UP!在使用它的过程中,有可能会在无意中删除重要数据,尤其是搭配 rmdd 命令时需要更加小心。勿谓言之不预。

使用 Ultimate Plumber 即时预览管道命令

下面给出一个简单的例子介绍 up 的使用方法。如果需要将 lshw 命令的输出传递给 up,只需要在终端中输入以下命令,然后回车:

$ lshw |& up

你会在屏幕顶部看到一个输入框,如下图所示。

在输入命令的过程中,输入管道符号并回车,就可以立即执行已经输入了的命令。Ultimate Plumber 会在下方的可滚动窗口中即时显示管道命令的输出。在这种状态下,你可以通过 PgUp/PgDn 键或 ctrl + ←/ctrl + → 组合键来查看结果。

当你满意执行结果之后,可以使用 ctrl + x 组合键退出 UP。而退出前编写的管道命令则会保存在当前工作目录的文件中,并命名为 up1.sh。如果这个文件名已经被占用,就会命名为 up2.shup3.sh 等等以此类推,直到第 1000 个文件。如果你不需要将管道命令保存输出,只需要使用 ctrl + c 组合键退出即可。

通过 cat 命令可以查看 upX.sh 文件的内容。例如以下是我的 up2.sh 文件的输出内容:

$ cat up2.sh
#!/bin/bash
grep network -A5 | grep : | cut -d: -f2- | paste - -

如果通过管道发送到 up 的命令运行时间太长,终端窗口的左上角会显示一个波浪号(~)字符,这就表示 up 在等待前一个命令的输出结果作为输入。在这种情况下,你可能需要使用 ctrl + s 组合键暂时冻结 up 的输入缓冲区大小。在需要解冻的时候,使用 ctrl + q 组合键即可。Ultimate Plumber 的输入缓冲区大小一般为 40 MB,到达这个限制之后,屏幕的左上角会显示一个加号。

以下是 up 命令的一个简单演示:

安装 Ultimate Plumber

喜欢这个工具的话,你可以在你的 Linux 系统上安装使用。安装过程也相当简单,只需要在终端里执行以下两个命令就可以安装 up 了。

首先从 Ultimate Plumber 的发布页面下载最新的二进制文件,并将放在你系统的某个路径下,例如 /usr/local/bin/

$ sudo wget -O /usr/local/bin/up wget https://github.com/akavel/up/releases/download/v0.2.1/up

然后向 up 二进制文件赋予可执行权限:

$ sudo chmod a+x /usr/local/bin/up

至此,你已经完成了 up 的安装,可以开始编写你的管道命令了。


via: https://www.ostechnix.com/ultimate-plumber-writing-linux-pipes-with-instant-live-preview/

作者:SK 选题:lujun9972 译者:HankChow 校对:wxy

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

你是否是一个经常在不同的 SDK 下安装和测试应用的开发者?我有一个好消息要告诉你!给你介绍一下 SDKMAN,一个可以帮你轻松管理多个 SDK 的命令行工具。它为安装、切换、列出和移除 SDK 提供了一个简便的方式。有了 SDKMAN,你可以在任何类 Unix 的操作系统上轻松地并行管理多个 SDK 的多个版本。它允许开发者为 JVM 安装不同的 SDK,例如 Java、Groovy、Scala、Kotlin 和 Ceylon、Ant、Gradle、Grails、Maven、SBT、Spark、Spring Boot、Vert.x,以及许多其他支持的 SDK。SDKMAN 是免费、轻量、开源、使用 Bash 编写的程序。

安装 SDKMAN

安装 SDKMAN 很简单。首先,确保你已经安装了 zipunzip 这两个应用。它们在大多数的 Linux 发行版的默认仓库中。
例如,在基于 Debian 的系统上安装 unzip,只需要运行:

$ sudo apt-get install zip unzip

然后使用下面的命令安装 SDKMAN:

$ curl -s "https://get.sdkman.io" | bash

在安装完成之后,运行以下命令:

$ source "$HOME/.sdkman/bin/sdkman-init.sh"

如果你希望自定义安装到其他位置,例如 /usr/local/,你可以这样做:

$ export SDKMAN_DIR="/usr/local/sdkman" && curl -s "https://get.sdkman.io" | bash

确保你的用户有足够的权限访问这个目录。

最后,在安装完成后使用下面的命令检查一下:

$ sdk version
==== BROADCAST =================================================================
* 01/08/18: Kotlin 1.2.60 released on SDKMAN! #kotlin
* 31/07/18: Sbt 1.2.0 released on SDKMAN! #sbt
* 31/07/18: Infrastructor 0.2.1 released on SDKMAN! #infrastructor
================================================================================

SDKMAN 5.7.2+323

恭喜你!SDKMAN 已经安装完成了。让我们接下来看如何安装和管理 SDKs 吧。

管理多个 SDK

查看可用的 SDK 清单,运行:

$ sdk list

将会输出:

================================================================================
Available Candidates
================================================================================
q-quit /-search down
j-down ?-search up
k-up h-help

--------------------------------------------------------------------------------
Ant (1.10.1) https://ant.apache.org/

Apache Ant is a Java library and command-line tool whose mission is to drive
processes described in build files as targets and extension points dependent
upon each other. The main known usage of Ant is the build of Java applications.
Ant supplies a number of built-in tasks allowing to compile, assemble, test and
run Java applications. Ant can also be used effectively to build non Java
applications, for instance C or C++ applications. More generally, Ant can be
used to pilot any type of process which can be described in terms of targets and
tasks.

: $ sdk install ant

就像你看到的,SDK 每次列出众多 SDK 中的一个,以及该 SDK 的描述信息、官方网址和安装命令。按回车键继续下一个。

安装一个新的 SDK,例如 Java JDK,运行:

$ sdk install java

将会输出:

Downloading: java 8.0.172-zulu

In progress...

######################################################################################## 100.0%

Repackaging Java 8.0.172-zulu...

Done repackaging...

Installing: java 8.0.172-zulu
Done installing!

Setting java 8.0.172-zulu as default.

如果你安装了多个 SDK,它将会提示你是否想要将当前安装的版本设置为 默认版本。回答 Yes 将会把当前版本设置为默认版本。

使用以下命令安装一个 SDK 的其他版本:

$ sdk install ant 1.10.1

如果你之前已经在本地安装了一个 SDK,你可以像下面这样设置它为本地版本。

$ sdk install groovy 3.0.0-SNAPSHOT /path/to/groovy-3.0.0-SNAPSHOT

列出一个 SDK 的多个版本:

$ sdk list ant

将会输出:

================================================================================
Available Ant Versions
================================================================================
> * 1.10.1
1.10.0
1.9.9
1.9.8
1.9.7

================================================================================
+ - local version
* - installed
> - currently in use
================================================================================

像我之前说的,如果你安装了多个版本,SDKMAN 会提示你是否想要设置当前安装的版本为 默认版本。你可以回答 Yes 设置它为默认版本。当然,你也可以在稍后使用下面的命令设置:

$ sdk default ant 1.9.9

上面的命令将会设置 Apache Ant 1.9.9 为默认版本。

你可以根据自己的需要选择使用任何已安装的 SDK 版本,仅需运行以下命令:

$ sdk use ant 1.9.9

检查某个具体 SDK 当前的版本号,例如 Java,运行:

$ sdk current java
Using java version 8.0.172-zulu

检查所有当下在使用的 SDK 版本号,运行:

$ sdk current

Using:

ant: 1.10.1
java: 8.0.172-zulu

升级过时的 SDK,运行:

$ sdk upgrade scala

你也可以检查所有的 SDK 中还有哪些是过时的。

$ sdk upgrade

SDKMAN 有离线模式,可以让 SDKMAN 在离线时也正常运作。你可以使用下面的命令在任何时间开启或者关闭离线模式:

$ sdk offline enable
$ sdk offline disable

要移除已安装的 SDK,运行:

$ sdk uninstall ant 1.9.9

要了解更多的细节,参阅帮助章节。

$ sdk help

Usage: sdk <command> [candidate] [version]
sdk offline <enable|disable>

commands:
install or i <candidate> [version]
uninstall or rm <candidate> <version>
list or ls [candidate]
use or u <candidate> [version]
default or d <candidate> [version]
current or c [candidate]
upgrade or ug [candidate]
version or v
broadcast or b
help or h
offline [enable|disable]
selfupdate [force]
update
flush <broadcast|archives|temp>

candidate : the SDK to install: groovy, scala, grails, gradle, kotlin, etc.
                 use list command for comprehensive list of candidates
                 eg: $ sdk list

version : where optional, defaults to latest stable if not provided
             eg: $ sdk install groovy

更新 SDKMAN

如果有可用的新版本,可以使用下面的命令安装:

$ sdk selfupdate

SDKMAN 会定期检查更新,并给出让你了解如何更新的指令。

WARNING: SDKMAN is out-of-date and requires an update.

$ sdk update
Adding new candidates(s): scala

清除缓存

建议时不时的清理缓存(包括那些下载的 SDK 的二进制文件)。仅需运行下面的命令就可以了:

$ sdk flush archives

它也可以用于清理空的文件夹,节省一点空间:

$ sdk flush temp

卸载 SDKMAN

如果你觉得不需要或者不喜欢 SDKMAN,可以使用下面的命令删除。

$ tar zcvf ~/sdkman-backup_$(date +%F-%kh%M).tar.gz -C ~/ .sdkman
$ rm -rf ~/.sdkman

最后打开你的 .bashrc.bash_profile 和/或者 .profile,找到并删除下面这几行。

#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="/home/sk/.sdkman"
[[ -s "/home/sk/.sdkman/bin/sdkman-init.sh" ]] && source "/home/sk/.sdkman/bin/sdkman-init.sh"

如果你使用的是 ZSH,就从 .zshrc 中删除上面这一行。

这就是所有的内容了。我希望 SDKMAN 可以帮到你。还有更多的干货即将到来。敬请期待!

祝近祺!

:)


via: https://www.ostechnix.com/sdkman-a-cli-tool-to-easily-manage-multiple-software-development-kits/

作者:SK 选题:lujun9972 译者:dianbanjiu 校对:wxy

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