标签 命令行 下的文章

Linux 命令行有很多的乐趣,我们可以很容易并且完善地执行很多繁琐的任务。比如,我们计算一个文本文件中字和字符的出现频率,这就是我们打算在这篇文章中讲到的。

立刻来到我们脑海的命令,计算字和字符在一个文本文件中出现频率的 Linux 命令是 wc 命令

在使用的脚本来分析文本文件之前,我们必须有一个文本文件。为了保持一致性,我们将创建一个文本文件,man命令的输出如下所述。

$ man man > man.txt

以上命令是将man命令的使用方式导入到man.txt文件里。

我们希望能得到最平常的单词,对之前我们新建的文件执行如下脚本。

$ cat man.txt | tr ' '  '\012' | tr '[:upper:]' '[:lower:]' | tr -d '[:punct:]' | grep -v '[^a-z]' | sort | uniq -c | sort -rn | head

Sample Output

7557 
262 the 
163 to 
112 is 
112 a 
78 of 
78 manual 
76 and 
64 if 
63 be

上面的脚本,输出了最常使用的十个单词。

如何看单个的字母呢?那就用如下的命令。

$ echo 'tecmint team' | fold -w1

Sample Output

t 
e 
c 
m 
i 
n 
t 
t 
e 
a 
m

: -w1只是设定了长度

现在我们将从那个文本文件中掰下来的每一个字母,对结果进行排序,得到所需的输出频率的十个最常见的字符。

$ fold -w1 < man.txt | sort | uniq -c | sort -rn | head

Sample Output

8579  
2413 e
1987 a
1875 t
1644 i
1553 n
1522 o
1514 s
1224 r
1021 l

如何区分大小写呢?之前我们都是忽略大小写的。所以,用如下命令。

$ fold -w1 < man.txt | sort | tr '[:lower:]' '[:upper:]' | uniq -c | sort -rn | head -20

Sample Output

11636  
2504 E 
2079 A 
2005 T 
1729 I 
1645 N 
1632 S 
1580 o
1269 R 
1055 L 
836 H 
791 P 
766 D 
753 C 
725 M 
690 U 
605 F 
504 G 
352 Y 
344 .

请检查上面的输出,标点符号居然包括在内。让我们干掉他,用tr 命令。GO:

$ fold -w1 < man.txt | tr '[:lower:]' '[:upper:]' | sort | tr -d '[:punct:]' | uniq -c | sort -rn | head -20

Sample Output

  11636  
  2504 E 
  2079 A 
  2005 T 
  1729 I 
  1645 N 
  1632 S 
  1580 O 
  1550 
  1269 R 
  1055 L 
   836 H 
   791 P 
   766 D 
   753 C 
   725 M 
   690 U 
   605 F 
   504 G 
   352 Y

现在,我们有了三个文本,那就让我们用如下命令查看结果吧。

$ cat *.txt | fold -w1 | tr '[:lower:]' '[:upper:]' | sort | tr -d '[:punct:]' | uniq -c | sort -rn | head -8

Sample Output

  11636  
   2504 E 
   2079 A 
   2005 T 
   1729 I 
   1645 N 
   1632 S 
   1580 O

下一步我们将会生成那些罕见的至少十个字母长的单词。以下是简单的脚本:

$ cat man.txt | tr '' '\012' | tr '[:upper:]' '[:lower:]' | tr -d '[:punct:]' | tr -d '[0-9]' | sort | uniq -c | sort -n |  grep -E '..................' | head

Sample Output

1        ────────────────────────────────────────── 
1        a all 
1        abc             any or all arguments within   are optional 
1               able  see setlocale for precise details 
1        ab              options delimited by  cannot be used together 
1               achieved by using the less environment variable 
1              a child process returned a nonzero exit status 
1               act as if this option was supplied using the name as a filename 
1               activate local mode  format and display  local  manual  files 
1               acute accent

: 上面的.越来越多,其实,我们可以使用.{10} 得到同样的效果。

这些简单的脚本,让我们知道最频繁出现的单词和英语中的字符。

现在结束了。下次我会在这里讲到另一个有趣的话题,你应该会喜欢读。还有别忘了向我们提供您的宝贵意见。


via: http://www.tecmint.com/play-with-word-and-character-counts-in-linux/

作者:Avishek Kumar 译者:MikeCoder 校对:wxy

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

命令行听起来有时候会很吓人,特别是在刚刚接触的时候,你甚至可能做过有关命令行的噩梦。然而渐渐地,我们都会意识到命令行实际上并不是那么吓人,反而是非常有用。实际上,没有命令行正是每次我使用 Windows 时让我感到崩溃的地方。这种感觉上的变化是因为命令行工具实际上是很智能的。 你在任何一个 Linux 终端上所使用的基本工具功能都是很强大的, 但还远说不上是足够强大。 如果你想使你的命令行生涯更加愉悦, 这里有几个程序你可以下载下来替换原来的默认程序, 它还可以给你提供比原始程序更多的功能。

dfc

作为一个 LVM 使用者, 我非常喜欢随时查看我的硬盘存储器的使用情况. 我也从来没法真正理解为什么在 Windows 上我们非得打开资源管理器来查看电脑的基本信息。在 Linux 上, 我们可以使用如下命令:

$ df -h

该命令可显示电脑上每一分卷的大小、 已使用空间、 可用空间、 已使用空间百分比和挂载点。 注意, 我们必须使用 "-h" 选项使得所有数据以可读形式显示(使用 GiB 而不是 KiB)。 但你可以使用 dfc 来完全替代 df, 它不需要任何额外的选项就可以得到 df 命令所显示的内容, 并且会为每个设备绘制彩色的使用情况图, 因此可读性会更强。

另外, 你可以使用 "-q" 选项将各分卷排序, 使用 "-u" 选项指定你希望使用的单位, 甚至可以使用 "-e" 选项来获得 csv 或者 html 格式的输出.

dog

Dog 比 cat 好, 至少这个程序自己是这么宣称的。 你应该相信它一次。 所有 cat 命令能做的事, dog 都做的更好。 除了仅仅能在控制台上显示一些文本流之外, dog 还可以对其进行过滤。 例如, 你可以使用如下语法来获得网页上的所有图片:

$ dog --images [URL] 

或者是所有链接:

dog --links [URL] 

另外, dog 命令还可以处理一些其他的小任务, 比如全部转换为大写或小写, 使用不同的编码, 显示行号和处理十六进制文件。 总之, dog 是 cat 的必备替代品。

advcp

一个 Linux 中最基本的命令就是复制命令: cp。 它几乎和 cd 命令地位相同。 然而, 它的输出非常少。 你可以使用 verbose 模式来实时查看正在被复制的文件, 但如果一个文件非常大的话, 你看着屏幕等待却完全不知道后台在干什么。 一个简单的解决方法是加上一个进度条: 这正是 advcp (advanced cp 的缩写) 所做的! advcp 是 GNU coreutils 的一个 补丁版本, 它提供了 acp 和 amv 命令, 即"高级"的 cp 和 mv 命令. 使用语法如下:

$ acp -g [file] [copy] 

它把文件复制到另一个位置, 并显示一个进度条。

我还建议在 .bashrc 或 .zshrc 中设置如下命令别名:

alias cp="acp -g"
alias mv="amv -g"

(译者注: 原文给出的链接已貌似失效, 我写了一个可用的安装脚本放在了我的 gist 上, 用的是 AUR 里的 patch。)

(译者注:由于 GIST 被封,所以我将这个构建脚本贴到这里,大家可以使用它来构建一个自己用的二进制程序。)

#!/usr/bin/env bash
set -e
 
tmpdir=$(mktemp -t -d advcp.XXXXXX)
cd ${tmpdir}
 
wget https://aur.archlinux.org/packages/ad/advcp/advcp.tar.gz
tar xf advcp.tar.gz
 
source advcp/PKGBUILD
 
wget http://ftp.gnu.org/gnu/coreutils/coreutils-"${_pkgver}".tar.xz
tar xf coreutils-"${_pkgver}".tar.xz
 
cd coreutils-"${_pkgver}"
 
echo "Patching..."
patch -p1 -i ../advcp/advcpmv-"${_pkgver}"_"${pkgver}".patch || exit 1
 
echo "Start making..."
./configure || exit 1
make || exit 1
 
sudo install -Dm 755 "${PWD}"/src/cp /usr/local/bin/acp
sudo install -Dm 755 "${PWD}"/src/mv /usr/local/bin/amv
 
echo "Installation succeeded!"
echo "Don't forget to add \"alias cp='acp -g'\" and \"alias mv='amv -g'\" in your bashrc!"

The Silver Searcher

the silver searcher 这个名字听起来很不寻常(银搜索...), 它是一款设计用来替代 grep 和 ack 的工具。 The silver searcher 在文件中搜索你想要的部分, 它比 ack 要快, 而且能够忽略一些文件而不像 grep 那样。(译者注: 原文的意思貌似是 grep 无法忽略一些文件, 但 grep 有类似选项) the silver searcher 还有一些其他的功能,比如彩色输出, 跟随软连接, 使用正则表达式, 甚至是忽略某些模式。

作者在开发者主页上提供了一些搜索速度的统计数字, 如果它们的确是真的的话, 那是非常可观的。 另外, 你可以把它整合到 Vim 中, 用一个简洁的命令来调用它。 如果要用两个词来概括它, 那就是: 智能、快速。

plowshare

所有命令行的粉丝都喜欢使用 wget 或其他对应的替代品来从互联网上下载东西。 但如果你使用许多文件分享网站, 像 mediafire 或者 rapidshare。 你一定很乐意了解一款专门为这些网站设计的对应的程序, 叫做 plowshare。 安装成功之后, 你可以使用如下命令来下载文件:

$ plowdown [URL] 

或者是上传文件:

$ plowup [website name] [file] 

前提是如果你有那个文件分享网招的账号的话。

最后, 你可以获取分享文件夹中的一系列文件的链接:

$ plowlist [URL] 

或者是文件名、 大小、 哈希值等等:

$ plowprobe [URL] 

对于那些熟悉这些服务的人来说, plowshare 还是缓慢而令人难以忍受的 jDownloader 的一个很好的替代品。

htop

如果你经常使用 top 命令, 很有可能你会喜欢 htop 命令。 top 和 htop 命令都能对正在运行的进程提供了实时查看功能, 但 htop 还拥有一系列 top 命令所没有的人性化功能。 比如, 在 htop 中, 你可以水平或垂直滚动进程列表来查看每个进程的完整命令名, 还可以使用鼠标点击和方向键来进行一些基本的进程操作(比如 kill、 (re)nice 等),而不用输入进程标识符。

mtr

系统管理员的一个基本的网络诊断工具traceroute可以用于显示从本地网络到目标网络的网络第三层协议的路由。mtr(即“My Traceroute”的缩写)继承了强大的traceroute功能,并集成了 ping 的功能。当发现了一个完整的路由时,mtr会显示所有的中继节点的 ping 延迟的统计数据,对网络延迟的定位非常有用。虽然也有其它的 traceroute的变体(如:tcptraceroute 或 traceroute-nanog),但是我相信 mtr 是traceroute 工具里面最实用的一个增强工具。

总的来说, 这些十分有效的基本命令行的替代工具就像那些有用的小珍珠一样, 它们并不是那么容易被发现, 但当一旦你找到一个, 你就会惊讶你是如何忍受这么长没有它的时间! 如果你还知道其他的与上面描述相符的工具, 请在评论中分享给我们。


via: http://xmodulo.com/2014/07/better-alternatives-basic-command-line-utilities.html

作者:Adrien Brochard 译者:wangjiezhe 校对:wxy

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

无论何时要安装一款新的 Linux 发行系统,一般的建议都是让您通过有线连接来接到互联网的。这主要的原因有两条:第一,您的无线网卡也许安装的驱动不正确而不能用;第二,如果您是从命令行中来安装系统的,管理 WiFi 就非常可怕。我总是试图避免在命令行中处理 WiFi 。但 Linux 的世界,应具有无所畏惧的精神。如果您不知道怎样操作,您需要继续往下来学习之,这就是写这篇文章的唯一原因。所以我迫使自己学习如何在命令行中管理 WiFi 连接。

通过命令行来设置连接到 WiFi 当然有很多种方法,但在这篇文章里,同时也是一个建议,我使用最基本的方法:那就是使用在任何发布版本中都有的包含在“默认包”里的程序和工具。或者说我偏向于使用这一种方法。使用此方法显而易见的好处是这个操作过程能在任意有 Linux 系统的机器上复用。不好的一点是它相对来说比较复杂。

首先,我假设您们都已经正确安装了无线网卡的驱动程序。没有这前提,后续的一切都如镜花水月。如果您你机器确实没有正确安装上,您应该看看关于您的发布版本的维基和文档。

然后您就可以用如下命令来检查是哪一个接口来支持无线连接的:

$ iwconfig

一般来说,无线接口都叫做 wlan0。当然也有例外的,但在这篇教程中我们将会一直用通用叫法。

以防万一,你得确认下以使此接口服务是启动着的:

$ sudo ip link set wlan0 up

一但确认了无线接口是工作着的,你就可以用如下命令来扫描附近的无线网络了:

$ sudo iw dev wlan0 scan | less 

根据扫描出的结果,可以得到网络的名字(它的 SSID),它的信息强度,以及它使用的是哪个安全加密的(如:WEP、WPA/WPA2)。从此时起,将会分成两条路线:情况很好、很容易的以及情况稍微复杂的。

如果您想连接的网络是没有加密的,您可以用下面的命令直接连接:

$ sudo iw dev wlan0 connect [网络 SSID]

如果网络是用 WEP 加密的,也非常容易:

$ sudo iw dev wlan0 connect [网络 SSID] key 0:[WEP 密钥]

但网络使用的是 WPA 或 WPA2 协议的话,事情就不好办了。这种情况,您就得使用叫做 wpasupplicant 的工具,它默认是没有的。然后需要修改 /etc/wpasupplicant/wpa\_supplicant.conf 文件,增加如下行:

network={
    ssid="[网络 ssid]"
    psk="[密码]"
    priority=1
}

我建议你​​在文件的末尾添加它,并确保其他配置都注释掉。要注意 SSID 和密码字串都是大小写敏感的。在技术上您也可以把接入点的名称当做是 SSID,使用 wpa\_supplicant 工具的话会有合适的 SSID 来替代这个名字。

一旦配置文件修改完成后,在后台启动此命令:

$ sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf

最后,无论是连到开放的网络还是加密的安全网络,您都得获取 IP 地址。简单地使用如下命令:

$ sudo dhcpcd wlan0

如果一切顺利的话,您应该已经通过 DHCP 获取到了一个全新的本地 IP,这个过程是在后台自动完成的。如果想确认下是否真正连接上的话,您可以再一次输入如下命令检查:

$ iwconfig

最后,我认为多次重复第一步的检查操作是很有必要的。您永远不会知道什么时候您的图形用户界面挂了,或者是什么时候不能访问无线连接了,所以现在就准备着用命令来检测吧。还有,前面提到过的,有很多种方式(如 NetworkManager、wicdnetcfgwifi 等等)来管理无线连接。我坚持使用最基本的方式,但在某些情况下,我使用的工具可能您还没有,所以您在之前就得先下载它们。另一方面,有很多高级的应用程序,他们确实是不包含在“默认包”里面的,使用它们会大大简化操作过程。但一般建议是开始的话最好从基本的来。

关于从命令行来管理连接 WiFi 您还有其他方式方法吗?请在评论中让我们知道。


via: http://xmodulo.com/2014/08/manage-wifi-connection-command-line.html

作者:Adrien Brochard 译者:runningwater 校对:校对者ID

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

Linux命令行的强大在于其灵活及多样化,各个Linux命令都带有它自己专属的命令行选项和参数。混合并匹配这些命令,甚至还可以通过管道和重定向来联结不同的命令。理论上讲,你可以借助几个基本的命令来产生数以百计的使用案例。甚至对于浸淫多年的管理员而言,也难以完全使用它们。那正是命令行小抄成为我们救命稻草的一刻。

我知道联机手册页(man)仍然是我们的良师益友,但我们想通过我们能自行支配的快速参考卡让这一切更为高效和有目的性。最终极的小抄可能被自豪地挂在你的办公室里,也可能作为PDF文件隐秘地存储在你的硬盘上,或者甚至设置成了你的桌面背景图。

做为一个选择,也可以通过另外一个命令来访问你最爱的命令行小抄。那就是,使用cheat。这是一个命令行工具,它可以让你从命令行读取、创建或更新小抄。这个想法很简单,不过cheat经证明是十分有用的。本教程主要介绍Linux下cheat命令的使用方法。你不需要为cheat命令做个小抄了,它真的很简单。

安装Cheat到Linux

首先,如果你还没有Git,那么就安装一个吧:

$ sudo apt-get install git (Debian-based system)
$ sudo yum install git (RedHat-based system)

同时,安装Python包安装器pip

最后,使用下列命令来安装cheat。

$ sudo pip install docopt pygments
$ git clone https://github.com/chrisallenlane/cheat.git
$ cd cheat
$ sudo python setup.py install 

配置Cheat

cheat命令并不需要太多配置。

一个推荐的配置是启用命令行补全功能。那样,当你查询一个小抄时,就可以使用[TAB]键来自动补全你想要查看的命令名称了。以下操作可以启用bash下的自动补全功能。

$ wget https://github.com/chrisallenlane/cheat/raw/master/cheat/autocompletion/cheat.bash
$ sudo cp cheat.bash /etc/bash_completion.d/

他们也提供了用于其它shell的自动补全脚本,像zsh和fish也有。

另外一个要做的事是定义EDITOR环境变量。该变量应该指向创建或更新小抄时你想要用的文本编辑器。例如,如果你想要使用Vim编辑器,那就把下面的内容放进~/.bashrc。

export EDITOR=/usr/bin/vim

注销并重新登录进来,以激活自动补全功能并更新.bashrc。

Cheat基本用法

cheat命令一个很酷的事是,它自带有超过90个的常用Linux命令的内建小抄。查看可用的小抄列表:

$ cheat -l 

要访问某个指定命令的小抄,只要运行cheat命令,后面跟上该命令的名称:

$ cheat <command-name> 

你可以通过使用“-s”选项,在所有小抄中搜索包含有指定关键词的内容:

$ cheat -s <keyword> 

在许多情况下,小抄适用于某些人,而对另外一些人却没什么帮助。要想让内建的小抄更具个性化,cheat命令也允许你创建新的小抄,或者更新现存的那些。要这么做的话,cheat命令也会帮你在本地~/.cheat目录中保存一份小抄的副本。

要使用cheat的编辑功能,首先确保EDITOR环境变量设置为你默认编辑器所在位置的完整路径。然后,复制(不可编辑)内建小抄到~/.cheat目录。你可以通过下面的命令找到内建小抄所在的位置。一旦你找到了它们的位置,只不过是将它们拷贝到~/.cheat目录。

$ cheat -d 

/usr/lib/python2.6/site-packages/cheat/cheatsheets

$ cp /usr/lib/python2.6/site-packages/cheat/cheatsheets/* ~/.cheat

现在,你可以使用“-e”选项来创建或更新一个小抄了:

$ cheat -e openssl 

正如你所能想象的,cheat的编辑功能十分有用,可以帮助你剪裁本地小抄库以满足你的需要。如果你深信知识分享,贡献你的小抄到cheat命令的官方Git仓库中,你会更加受欢迎,这样大家都能从中受益。


via: http://xmodulo.com/2014/07/access-linux-command-cheat-sheets-command-line.html

作者:Dan Nanni 译者:GOLinux 校对:wxy

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

在Linux中,‘cd‘(改变目录)命令,是对新手和系统管理员来说,最重要最常用的命令。对管理无图形界面的服务器的管理员,‘cd‘是进入目录,检查日志,执行程序/应用软件/脚本和其余每个任务的唯一方法。对新手来说,是他们必须自己动手学习的最初始命令

Linux中15个cd命令举例

所以,请用心学习,我们在这会带给你15个基础的‘cd‘命令,它们富有技巧和捷径,学会使用这些了解到的技巧,会大大减少你在终端上花费的努力和时间

课程细节

  • 命令名称:cd
  • 代表:切换目录
  • 使用平台:所有Linux发行版本
  • 执行方式:命令行
  • 权限:访问自己的目录或者其余指定目录
  • 级别:基础/初学者
  1. 从当前目录切换到/usr/local
avi@tecmint:~$ cd /usr/local
avi@tecmint:/usr/local$
  1. 使用绝对路径,从当前目录切换到/usr/local/lib
avi@tecmint:/usr/local$ cd /usr/local/lib
avi@tecmint:/usr/local/lib$
  1. 使用相对路径,从当前路径切换到/usr/local/lib
avi@tecmint:/usr/local$ cd lib
avi@tecmint:/usr/local/lib$
  1. (a)切换当前目录到上一个目录
avi@tecmint:/usr/local/lib$ cd -
/usr/local
avi@tecmint:/usr/local$

(b)切换当前目录到上级目录

avi@tecmint:/usr/local/lib$ cd ..
avi@tecmint:/usr/local$
  1. 显示我们最后一个离开的工作目录(使用‘-’选项)
avi@tecmint:/usr/local$ cd --
/home/avi
  1. 从当前目录向上级返回两层
avi@tecmint:/usr/local$ cd ../../
avi@tecmint:/$
  1. 从任何目录返回到用户home目录
avi@tecmint:/usr/local$ cd ~
avi@tecmint:~$

avi@tecmint:/usr/local$ cd
avi@tecmint:~$
  1. 切换工作目录到当前工作目录(LCTT:这有什么意义嘛?!)
avi@tecmint:~/Downloads$ cd .
avi@tecmint:~/Downloads$

avi@tecmint:~/Downloads$ cd ./
avi@tecmint:~/Downloads$
  1. 你当前目录是“/usr/local/lib/python3.4/dist-packages”,现在要切换到“/home/avi/Desktop/”,要求:一行命令,通过向上一直切换直到‘/’,然后使用绝对路径
avi@tecmint:/usr/local/lib/python3.4/dist-packages$ cd ../../../../../home/avi/Desktop/
avi@tecmint:~/Desktop$
  1. 从当前工作目录切换到/var/www/html,要求:不要将命令打完整,使用TAB
avi@tecmint:/var/www$ cd /v<TAB>/w<TAB>/h<TAB>
avi@tecmint:/var/www/html$
  1. 从当前目录切换到/etc/v\_\_ \_,啊呀,你竟然忘了目录的名字,但是你又不想用TAB
avi@tecmint:~$ cd /etc/v*
avi@tecmint:/etc/vbox$

请注意:如果只有一个目录以‘v‘开头,这将会移动到‘vbox‘。如果有很多目录以‘v‘开头,而且命令行中没有提供更多的标准,这将会移动到第一个以‘v‘开头的目录(按照他们在标准字典里字母存在的顺序)

  1. 你想切换到用户‘av‘(不确定是avi还是avt)目录,不用TAB
avi@tecmint:/etc$ cd /home/av?
avi@tecmint:~$
  1. Linux下的pushed和poped

Pushed和poped是Linux bash命令,也是其他几个能够保存当前工作目录位置至内存,并且从内存读取目录作为当前目录的脚本,这些脚本也可以切换目录

avi@tecmint:~$ pushd /var/www/html
/var/www/html ~
avi@tecmint:/var/www/html$ 

上面的命令保存当前目录到内存,然后切换到要求的目录。一旦poped被执行,它会从内存取出保存的目录位置,作为当前目录

avi@tecmint:/var/www/html$ popd
~
avi@tecmint:~$
  1. 切换到名字带有空格的目录
avi@tecmint:~$ cd test\ tecmint/
avi@tecmint:~/test tecmint$

avi@tecmint:~$ cd 'test tecmint'
avi@tecmint:~/test tecmint$

avi@tecmint:~$ cd "test tecmint"/
avi@tecmint:~/test tecmint$
  1. 从当前目录切换到下载目录,然后列出它所包含的内容(使用一行命令)
avi@tecmint:/usr$ cd ~/Downloads && ls
...
.
service_locator_in.xls
sources.list
teamviewer_linux_x64.deb
tor-browser-linux64-3.6.3_en-US.tar.xz
.
...

我们尝试使用最少的词句和一如既往的友好,来让你了解Linux的工作和执行。

这就是所有内容。我很快会带着另一个有趣的主题回来的。


via: http://www.tecmint.com/cd-command-in-linux/

作者:Avishek Kumar 译者:su-kaiyao 校对:wxy

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

如果你喜欢做‘排名前10’之类的列表但又有点不好意思这样说,那么告诉人们你热爱数据的探索。为了进一步打动他们,向他们解释你在命令行间的数据探索。但是不要告诉他们这其实很容易,以免你的好形象就这样被毁灭了哦!

在这篇文章中,我将基于GNU/Linux工具和'单列表格'(也就是我所说的简单列表)来做一些数据探索。如若想在这里通过命令行查看更多的信息,请查看'man'页,或者在“注释”部分求解。

密码

在第一个列表里探讨的是马克.伯内特2011著的关于10000 个最常用的密码汇编。这个列表是有序的、使用最频繁的,也是广为人知的阶乘“密码”的最常用来源之一,与“123456”并列排名第二。在这里,我把该列表放到一个名为“passwords”的文件中,并且使用head命令把排名前10的列出来了:

(伯内特解释他是如何收集这些密码的这里。你会注意到在列表中他把所有大写字母都转换成小写的。)

OK,所以'password'是伯内特列表的顶部。那么每个数字呢?

非常有趣的是!数字'1'出现在密码列表中的次数多于第二个最常用数字'2'的两倍,而且,除了0和9之外,这十个数字出现的次数以其数字顺序排列。而排名前10的字母呢?

在 passwords 文件中出现最频繁的字母依次是EARONISTLC,类似于EAIRTONSLC,这是至少一个出版的表格中提到的常用英文单词中出现的字频。这是否意味着,大部分密码其实是一些常见的英语单词呢,也许会参杂一些数字呢?

为了找到答案,我先把密码转换成一个纯字母的字符串列表,然后看看有多少字符串是可以在英语词典中找到的。

首先我将通过 sed 命令删除所有密码中的数字,然后删除所有的标点符号,再删除所有的空行。这将创建出一个纯字母的密码列表。然后我通过sortuniq来修剪列表的排序,将重复项取出。(例如,'abc1234def'和'abc1!2!3!def!'都剔除剩下'abcdef'.) 。根据wc命令,我把1000个密码减至成8583个纯字母的字符串:

我经常使用一本便携式的英语字典,我通常会使用usr/share/dict/american-english,这个文件是来自Debian Linux的一个发行版本。它包含了99171个单词。我会先通过tr命令将这个词表转换为纯小写的,然后使用sortuniq删除掉任何重复的条目排序(例如'A' 和 'a' 都将成为 'a')。这样就将词表的数量减至97723项了:

我现在可以用comm命令及'-23'的参数来比较两个列表,并报告纯字母文件中而没有出现在字典中的单词:

总数是3137,所以至少有8583 -3137 = 5446个'核心'密码在伯纳特的纯小写字母列表中(大约63%)是简单的英语单词,或者是简单的单词附加一些数字或者标点符号。我之所以说“至少”,是因为在3137个字符串中有很大比例是只有经过轻微修改的纯英语单词、名称、或者在/usr/share字典中未能找到的名称修改而成的。在LA项中,例如,'labtec', 'ladyboy', 'lakeside', 'lalakers', 'lalala', 'laserjet', 'lasvegas', 'lavalamp' 和 'lawman'.

地名

在之前的一篇Linux Rain article,我描述了如何建立一张37万项澳大利亚的地名表。有了它,我现在可以回答一些类似这样的关键问题“Round Hill是澳大利亚山脉中最流行的名字吗?”和“桑迪是沙滩之最,而岩溪峡谷呢?”

在地名表中地名字段的排名第2,所以这里有:

哇。我当时甚至没有关闭这个终端。(但是请注意到我是如何通过^string1^string2命令保存打印的内容。它重复着最后一个命令,但是用第2个字符串代替了第1个字符串。这是多么有用的BASH绝招!)

另一个亟待解决的问题是有多少地名有'Mile'在其中,例如'Six Mile Creek',而他们的排名又是如何:

我在我的澳洲之旅发现有很多Dead Horse Creeks,因此有这些地名:

种类

第三个列表是探索我今年出版的1961-2010年期间澳大利亚新种类昆虫名。从这个列表中,我去掉所有“物种的绰号”,就是种群组合的第二部分,比如像智人(你和我)和西方蜜蜂(欧洲蜜蜂)。

(科技小贴士:这个昆虫表,可以从开发数据Zenodo库中https://zenodo.org/record/10481取得,包括亚种。在我的‘top 10’练习中,我首先分离出所有独特的种群组合,这样避免了重复的,例如蜜蜂iberica的亚种,以避免蜜蜂的绰号intermissa,等等。最后一个物种文件有18155个绰号。)

大多数人讲科学名称带玩笑式地用'-us'结局,如'Biggus buggus'。那么昆虫学家呢?有几个不错的,用命令行的方式获取字符串的最后2个字母,在这里我都会用到这2个:

耶!昆虫学家喜欢也‘-us’结尾。接下来,我不知道有多少物种是以我的家乡Tasmania州来命名的?(下面我想看看前100行,来确保我得到的所有'tasman'组合.)

那么昆士兰呢?

一般来说,昆虫物种名单中的前10名分别是什么呢?

嗯,除了明显的'australis'和'australiensis',而地理方面的'occidentalis'(西部),另外昆虫学家创建7个在10个最流行列表中的绰号已经履行了其它昆虫学家的意愿。(绰号'commoni'是给澳大利亚蝴蝶和蛾专家Ian F.B. Common[1917-2006]的荣誉。)

演变

上面的这些命令用在简单列表上。要从简单的列表变成文本块,那就再次需要我们的命令行朋友了。例如,我把澳大利亚参议院于2014年7月16日的演讲保存成文本文件hansard。将hansard分割成一个单词列表:

现在看看讲话中的单词使用频率:

即将推出...

从多列的表中做'top 10'等排名,需要更多些的命令行工具。我将会在未来的文章中证明他们的用处。


via: http://thelinuxrain.com/articles/top-10-fun-on-the-command-line

原文作者:Bob Mesibov(Bob Mesibov 是塔斯马尼亚人,已经退休,热衷于 Linux tinkerer)

译者:disylee 校对:wxy

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