有没有一些游戏可以训练人们学习终端命令?

学会如何使用终端对于学习如何使用Ubuntu来说,似乎是一个先决条件。所以我正在努力找出最好的学习方法。是否有在线的Quizlet闪卡集?或者还有其他更好的方法吗?

4你至少试过谷歌吗? - mdpc
或者探索了亚马逊? - mdpc
27如果你想要一个快速入门课程,"当我意外地搞砸了配置文件以至于只能加载Shell时如何恢复GUI"总是一个赢家。请注意,如果你输掉了这个游戏,可能的惩罚包括给一个有着灰胡子的朋友买一箱他最喜欢的饮料,或者重新安装操作系统。 - Dan Is Fiddling By Firelight
1我最喜欢的UNIX游戏叫做“bash”。其中最难的关卡被称为“删除一个名为'-rf ~/*'的文件”。 - fluffy
6@fluffy: 这根本不难:rm -- '-rf ~/*'。如果想要面对真正的挑战,试试删除一个文件,其名称完全由不可打印的控制字符组成。如果仅仅打印文件名就搞乱了你的终端,那就额外加分。 - Ilmari Karonen
3这也不太难啦 :P 输入 rm -i *,当你遇到正确的文件时,只需回答是就可以了。 - ooa
5“真实生活”算不算一种游戏? - Jonathan
我同意楼主的观点。一个游戏会很酷。是的,我可以阅读手册,但像Duolingo这样的游戏会非常有趣。 - Andrew Grothe
Codeacademy是一个很好的网站,教授HTML和其他一些编程语言...它不完全是游戏,但它会向你展示如何做,并且相对容易上手。 - kyle_hamblett
@DanNeely 我觉得自己很傻,竟然还真的去谷歌搜索看看那个是否存在。 - acolyte
@acolyte 试试这个链接:https://www.google.com/search?q=gamification - Dan Is Fiddling By Firelight
1@IlmariKaronen 是的,我知道,但在大学里,这曾经是人们互相开的一个“有趣”的“恶作剧”。当然,我也画了一本关于现代解决方案的漫画:http://beesbuzz.biz/d/20110224.php - fluffy
除了 * 会扩展为以 '-rf *' 开头,这将覆盖 -i(尽管也无法工作,因为空格和 * 是 rm 的未识别选项)。-- 确实是必要的,告诉 rm 停止处理参数。 - fluffy
1令人惊讶的是,对于这个问题的简单答案是肯定的:http://quizlet.com/4216068/terminal-commands-flash-cards/ - Elder Geek
你可以看一下CLMystery。你需要将一堆文件和目录复制到你的电脑上,然后按照说明使用命令来阅读案件文件并解决谜团。https://github.com/veltman/clmystery - Sherri
20个回答

你可以在你的~/.bashrc文件的末尾添加以下行(命令):
echo "Did you know that:"; whatis $(ls /bin | shuf -n 1)

每次打开终端,你都会学到关于一个随机命令的知识。
如果您想找点乐子,可以使用“cowsay”实用程序。要安装它,请在终端中运行以下命令:
sudo apt-get install cowsay

然后在您的~/.bashrc文件的末尾添加以下行:
cowsay -f $(ls /usr/share/cowsay/cows | shuf -n 1 | cut -d. -f1) $(whatis $(ls /bin) 2>/dev/null | shuf -n 1)

或者你可以将上述行添加为别名到~/.bash_aliases中。我已经添加了:
alias ?='cowsay -f $(ls /usr/share/cowsay/cows | shuf -n 1 | cut -d. -f1) $(whatis $(ls /bin) 2>/dev/null | shuf -n 1)'

每当你感到无聊的时候,你可以在终端中输入:?(然后按下Enter键)。这就像是自己玩骰子一样。

enter image description here


虽然这很棒,但是/bin目录下的命令并不多,至少在我的发行版上是如此。我建议至少将/sbin添加到列表中。而/usr/bin和/usr/sbin则会变得有些混乱。也许你可以从每个目录中选择一个来保持多样性。 - user606723
2这太酷了,但在我的发行版(Ubuntu 13.04)上使用默认的shell时,每次启动shell都会出现Did you know that: mkdir: nothing appropriate.(译者注:你知道吗:mkdir:没有合适的内容。)虽然我不总是看到mkdir,但我总是看到nothing appropriate。如果我将你的代码放在~/.bashrc的顶部,whatis就能正常工作,但放在末尾就不行。不确定是什么导致了这个问题,但我猜其他人也会遇到同样的问题。 - snim2
3@user606723 我只选择了 /bin,因为那里是最常用的命令。但你可以使用 echo "你知道吗:";whatis $(ls /usr/share/man/man1 | shuf -n 1 | cut -d. -f1) 从所有 man 页面中选择一个随机页面。 - Radu Rădeanu
1@RaduRădeanu 不要解析ls的输出! - heinrich5991
@snim2 如果你遇到类似mkdir: nothing appropriate的问题,那可能是你的man页面出了问题。不过,为了绕过这个问题,你可以使用以下命令:echo "Did you know that:"; whatis $(ls /bin) 2>/dev/null | shuf -n 1。另外,如果你的~/.bashrc文件有问题,那么你猜测的可能性不大。 - Radu Rădeanu
如果你对所有事情都遇到这个问题,以 root 用户身份运行“mandb”。 - Torvero
3@heinrich5991 当然,你的观点总体上是正确的,但是如果你的 /bin 目录中有文件名包含空格或换行符的话,那么你面临的问题比糟糕的脚本编写习惯更大。 - evilsoup
我不认为在/bin目录中,带有空格、换行符等的文件名比其他任何地方更成问题。 - heinrich5991
1@snim2 我怀疑问题可能是一个别名,它为 ls 添加了 -F 或其他影响输出的标志。将 ls /bin 更改为 /bin/ls /bin - Gilles 'SO- stop being evil'
你知道吗: whatis $(ls /bin | shuf -n 1) 如果我们添加这个,就无法使用"scp"从远程机器复制任何东西... - Naive

我以前常玩whatis。它不完全是一个游戏,但却是一个相对容易学习的方式。
举个例子,输入whatis sudo apt-get update,它会返回:

enter image description here

在执行任何命令之前,我首先使用whatis命令。我会了解我要做的事情,然后有信心地执行该命令。
如果whatis提供的信息不多或者对我来说不清楚,我会去阅读man
例如,man sudo
谷歌为你提供了很多信息,包括Ask Ubuntu内部和外部的来源。这里还有一个让我帮你找到答案的链接:在Ubuntu上学习终端命令的最佳方法

1我强烈建议在使用"something"命令之前,先仔细阅读whatis somethingman something。特别是对于一些(大多数!)命令,比如dd等等... 例如,man也会解释你自己提供的示例中的"update"参数... 在你的示例中,whatis显示了"apt-get"是什么,然后尝试找到"update"命令的定义,但实际上它不存在(但可能存在并且是完全无关的东西)。 - Olivier Dulac

是的,Terminus就是一款可以帮助的游戏。这里有一个在线版本这里,代码在GitHub上这里。这是一个不错的想法,尽管我更希望代码能更容易地扩展。

我不知道任何游戏,但有一些有用的命令行实用程序可以帮助。

一个命令做什么?

whatis command
# example:
$ whatis cut
cut (1)              - remove sections from each line of files

怎么做?
man -k keyword
# example:
$ man -k "remove empty"
rmdir (1)            - remove empty directories

或者:

apropos keyword  
# defaults to printing every result with at least one of the keywords supplied
#   use --and to only print results matching multiple keywords.
$ apropos zip --and extract
funzip (1)           - filter for extracting from a ZIP archive in a pipe
unzip (1)            - list, test and extract compressed files in a ZIP archive
unzipsfx (1)         - self-extracting stub for prepending to ZIP archives
uz (1)               - gunzips and extracts a gzip'd tar'd archive

如何使用?
man command
# example:
man tar
# use '?' key to search, and 'q' to quit.

或者,一些实用程序支持帮助选项,例如:
$ umount --help
Usage: umount -h | -V
   umount -a [-d] [-f] [-r] [-n] [-v] [-t vfstypes] [-O opts]
   umount [-d] [-f] [-r] [-n] [-v] special | node...

这些可能以command -hcommand --helpcommand -?的形式出现。
有关信息:
info command
# example:
$ info cat
# shows an information page

如果你有一些具体的事情需要完成,谷歌是你的好朋友。否则还有很多书籍,比如 O'Reilly 的Bash 书籍

1将“apropos”和“info”添加到列表中。 ;) - Johannes Kohnen
3我会尽量避免使用 <>,因为需要使用 man 命令的人可能不了解重定向的危险性。例如:command <something> somethingelse 会在当前目录下创建一个空的 somethingelse 文件(或截断已存在的文件!),这是个不好的习惯。只需使用 man command 就足够清楚明了了。或者使用 man __some__command__ 或其他安全的方式。 - Olivier Dulac
嗯,实际上,如果<something>不是一个已存在的文件,那么是安全的,因为否则,shell会抱怨它不存在(显然在创建输出文件之前就这样做)...但是,这仍然是个坏习惯。 - Olivier Dulac
1好的观点。只是习惯以那种格式撰写文档。(编辑)已删除它们。 - azz

看一下 命令行技巧 你可以浏览一些酷炫的命令行片段,如果你想更深入地了解,可以阅读它们使用的命令手册。

climagic 是一个类似的服务,但限制命令长度以适应推文。在 Twitter 上关注他们 @climagic - Tomer Cohen
http://cli.learncodethehardway.org/book/ 很棒。 - Amanda

Ubuntu被设计成非常用户友好的操作系统。学习如何使用终端不是学习如何使用Ubuntu的先决条件。然而,如果你想成为一个高级用户或自己解决问题,学习终端是必要的。
回答你的问题,我不知道有没有专门设计用来帮助或教授Shell命令的游戏,但我强烈推荐以下与Bash和系统管理相关的资源:
- UNIX初学者教程(UNIX Tutorial for Beginners
请注意,这个教程使用的是Red Hat(另一个Linux发行版),并且引用了一些只适用于Surrey大学学生的目录。
- BASH编程入门指南(BASH Programming - Introduction HOW-TO
托管在Linux文档项目(http://www.tldp.org/),作者Mike G
- Bash Shell脚本编程(Bash Shell Scripting
这是维基百科上的一本电子书。

GNU Bash参考手册

高级Bash脚本指南(http://linux.die.net/),作者Mendel Cooper

你在http://overthewire.org上有很多游戏。其中最简单的是Bandit,"专为完全初学者设计"。

很棒的链接。看起来里面有很多战争游戏。像“Bandit”这样的游戏似乎适合像我这样的完全新手。 - Sundeep

有一个学习VIM命令的游戏,我推荐你去http://vim-adventures.com/玩一下。我让我的学徒们在第一天就玩这个游戏 :-)

Memrise工具有一个Unix和Linux命令行部分。这是一个学习任何东西的绝佳工具,以打孔卡的方式进行。


这不完全是我想要的,但看起来是一个很棒的学习资源,我会使用的。谢谢! - Capitalism Prevails
还有一个ShellFu课程。虽然Memrise本身并不是一个游戏,但我仍然觉得它非常吸引人,并且能够激发你的竞争意识。 - ThomasH
我刚刚从memrise.com上得到了一页广告 :( - Paddy Landau