标签 命令行 下的文章

命令行审计不会影响数据库,因为它使用从数据库中释放的数据。

我兼职做数据审计。把我想象成一个校对者,校对的是数据表格而不是一页一页的文章。这些表是从关系数据库导出的,并且规模相当小:100,000 到 1,000,000条记录,50 到 200 个字段。

我从来没有见过没有错误的数据表。如你所能想到的,这种混乱并不局限于重复记录、拼写和格式错误以及放置在错误字段中的数据项。我还发现:

  • 损坏的记录分布在几行上,因为数据项具有内嵌的换行符
  • 在同一记录中一个字段中的数据项与另一个字段中的数据项不一致
  • 使用截断数据项的记录,通常是因为非常长的字符串被硬塞到具有 50 或 100 字符限制的字段中
  • 字符编码失败产生称为乱码的垃圾
  • 不可见的控制字符,其中一些会导致数据处理错误
  • 由上一个程序插入的替换字符#Replacement_character)和神秘的问号,这是由于不知道数据的编码是什么

解决这些问题并不困难,但找到它们存在非技术障碍。首先,每个人都不愿处理数据错误。在我看到表格之前,数据所有者或管理人员可能已经经历了 数据悲伤 Data Grief 的所有五个阶段:

  1. 我们的数据没有错误。
  2. 好吧,也许有一些错误,但它们并不重要。
  3. 好的,有很多错误;我们会让我们的内部人员处理它们。
  4. 我们已经开始修复一些错误,但这很耗时间;我们将在迁移到新的数据库软件时执行此操作。
  5. 移至新数据库时,我们没有时间整理数据; 我们需要一些帮助。

第二个阻碍进展的是相信数据整理需要专用的应用程序——要么是昂贵的专有程序,要么是优秀的开源程序 OpenRefine 。为了解决专用应用程序无法解决的问题,数据管理人员可能会向程序员寻求帮助,比如擅长 PythonR 的人。

但是数据审计和整理通常不需要专用的应用程序。纯文本数据表已经存在了几十年,文本处理工具也是如此。打开 Bash shell,您将拥有一个工具箱,其中装载了强大的文本处理器,如 grepcutpastesortuniqtrawk。它们快速、可靠、易于使用。

我在命令行上执行所有的数据审计工作,并且在 “cookbook” 网站上发布了许多数据审计技巧。我经常将操作存储为函数和 shell 脚本(参见下面的示例)。

是的,命令行方法要求将要审计的数据从数据库中导出。而且,审计结果需要稍后在数据库中进行编辑,或者(数据库允许)将整理的数据项导入其中,以替换杂乱的数据项。

但其优势是显著的。awk 将在普通的台式机或笔记本电脑上以几秒钟的时间处理数百万条记录。不复杂的正则表达式将找到您可以想象的所有数据错误。所有这些都将安全地发生在数据库结构之外:命令行审计不会影响数据库,因为它使用从数据库中释放的数据。

受过 Unix 培训的读者此时会沾沾自喜。他们还记得许多年前用这些方法操纵命令行上的数据。从那时起,计算机的处理能力和 RAM 得到了显著提高,标准命令行工具的效率大大提高。数据审计从来没有这么快、这么容易过。现在微软的 Windows 10 可以运行 Bash 和 GNU/Linux 程序了,Windows 用户也可以用 Unix 和 Linux 的座右铭来处理混乱的数据:保持冷静,打开一个终端。

 title=

例子

假设我想在一个大的表中的特定字段中找到最长的数据项。 这不是一个真正的数据审计任务,但它会显示 shell 工具的工作方式。 为了演示目的,我将使用制表符分隔的表 full0 ,它有 1,122,023 条记录(加上一个标题行)和 49 个字段,我会查看 36 号字段。(我得到字段编号的函数在我的网站上有解释)

首先,使用 tail 命令从表 full0 移除标题行,结果管道至 cut 命令,截取第 36 个字段,接下来,管道至 awk ,这里有一个初始化为 0 的变量 big ,然后 awk 开始检测第一行数据项的长度,如果长度大于 0 ,awk 将会设置 big 变量为新的长度,同时存储行数到变量 line 中。整个数据项存储在变量 text 中。然后 awk 开始轮流处理剩余的 1,122,022 记录项。同时,如果发现更长的数据项时,更新 3 个变量。最后,它打印出行号、数据项的长度,以及最长数据项的内容。(在下面的代码中,为了清晰起见,将代码分为几行)

tail -n +2 full0 \
> | cut -f36 \
> | awk 'BEGIN {big=0} length($0)>big \
> {big=length($0);line=NR;text=$0} \
> END {print "\nline: "line"\nlength: "big"\ntext: "text}'

大约花了多长时间?我的电脑大约用了 4 秒钟(core i5,8GB RAM);

现在我可以将这个长长的命令封装成一个 shell 函数,longest,它把第一个参数认为是文件名,第二个参数认为是字段号:

现在,我可以以函数的方式重新运行这个命令,在另一个文件中的另一个字段中找最长的数据项,而不需要去记忆这个命令是如何写的:

最后调整一下,我还可以输出我要查询字段的名称,我只需要使用 head 命令抽取表格第一行的标题行,然后将结果管道至 tr 命令,将制表位转换为换行,然后将结果管道至 tailhead 命令,打印出第二个参数在列表中名称,第二个参数就是字段号。字段的名字就存储到变量 field 中,然后将它传向 awk ,通过变量 fld 打印出来。(LCTT 译注:按照下面的代码,编号的方式应该是从右向左)

longest() { field=$(head -n 1 "$1" | tr '\t' '\n' | tail -n +"$2" | head -n 1); \
tail -n +2 "$1" \
| cut -f"$2" | \
awk -v fld="$field" 'BEGIN {big=0} length($0)>big \
{big=length($0);line=NR;text=$0}
END {print "\nfield: "fld"\nline: "line"\nlength: "big"\ntext: "text}'; }

注意,如果我在多个不同的字段中查找最长的数据项,我所要做的就是按向上箭头来获得最后一个最长的命令,然后删除字段号并输入一个新的。


via: https://opensource.com/article/18/5/command-line-data-auditing

作者:Bob Mesibov 选题:lujun9972 译者:amwps290 校对:wxy

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

通过这 10 个基础命令开始掌握 Linux 命令行。

你可能认为你是 Linux 新手,但实际上并不是。全球互联网用户有 3.74 亿,他们都以某种方式使用 Linux,因为 Linux 服务器占据了互联网的 90%。大多数现代路由器运行 Linux 或 Unix,TOP500 超级计算机 也依赖于 Linux。如果你拥有一台 Android 智能手机,那么你的操作系统就是由 Linux 内核构建的。

换句话说,Linux 无处不在。

但是使用基于 Linux 的技术和使用 Linux 本身是有区别的。如果你对 Linux 感兴趣,但是一直在使用 PC 或者 Mac 桌面,你可能想知道你需要知道什么才能使用 Linux 命令行接口(CLI),那么你来到了正确的地方。

下面是你需要知道的基本的 Linux 命令。每一个都很简单,也很容易记住。换句话说,你不必成为比尔盖茨就能理解它们。

1、 ls

你可能会想:“这是(is)什么东西?”不,那不是一个印刷错误 —— 我真的打算输入一个小写的 l。ls,或者说 “list”, 是你需要知道的使用 Linux CLI 的第一个命令。这个 list 命令在 Linux 终端中运行,以显示在存放在相应文件系统下的所有主要目录。例如,这个命令:

ls /applications

显示存储在 applications 文件夹下的每个文件夹,你将使用它来查看文件、文件夹和目录。

显示所有隐藏的文件都可以使用命令 ls -a

2、 cd

这个命令是你用来跳转(或“更改”)到一个目录的。它指导你如何从一个文件夹导航到另一个文件夹。假设你位于 Downloads 文件夹中,但你想到名为 Gym Playlist 的文件夹中,简单地输入 cd Gym Playlist 将不起作用,因为 shell 不会识别它,并会报告你正在查找的文件夹不存在(LCTT 译注:这是因为目录名中有空格)。要跳转到那个文件夹,你需要包含一个反斜杠。改命令如下所示:

cd Gym\ Playlist

要从当前文件夹返回到上一个文件夹,你可以在该文件夹输入 cd ..。把这两个点想象成一个后退按钮。

3、 mv

该命令将文件从一个文件夹转移到另一个文件夹;mv 代表“移动”。你可以使用这个简单的命令,就像你把一个文件拖到 PC 上的一个文件夹一样。

例如,如果我想创建一个名为 testfile 的文件来演示所有基本的 Linux 命令,并且我想将它移动到我的 Documents 文件夹中,我将输入这个命令:

mv /home/sam/testfile /home/sam/Documents/

命令的第一部分(mv)说我想移动一个文件,第二部分(home/sam/testfile)表示我想移动的文件,第三部分(/home/sam/Documents/)表示我希望传输文件的位置。

4、 快捷键

好吧,这不止一个命令,但我忍不住把它们都包括进来。为什么?因为它们能节省时间并避免经历头痛。

  • CTRL+K 从光标处剪切文本直至本行结束
  • CTRL+Y 粘贴文本
  • CTRL+E 将光标移到本行的末尾
  • CTRL+A 将光标移动到本行的开头
  • ALT+F 跳转到下一个空格处
  • ALT+B 回到前一个空格处
  • ALT+Backspace 删除前一个词
  • CTRL+W 剪切光标前一个词
  • Shift+Insert 将文本粘贴到终端中
  • Ctrl+D 注销

这些命令在许多方面都能派上用场。例如,假设你在命令行文本中拼错了一个单词:

sudo apt-get intall programname

你可能注意到 install 拼写错了,因此该命令无法工作。但是快捷键可以让你很容易回去修复它。如果我的光标在这一行的末尾,我可以按下两次 ALT+B 来将光标移动到下面用 ^ 符号标记的地方:

sudo apt-get^intall programname

现在,我们可以快速地添加字母 s 来修复 install,十分简单!

5、 mkdir

这是你用来在 Linux 环境下创建目录或文件夹的命令。例如,如果你像我一样喜欢 DIY,你可以输入 mkdir DIY 为你的 DIY 项目创建一个目录。

6、 at

如果你想在特定时间运行 Linux 命令,你可以将 at 添加到语句中。语法是 at 后面跟着你希望命令运行的日期和时间,然后命令提示符变为 at>,这样你就可以输入在上面指定的时间运行的命令。

例如:

at 4:08 PM Sat
at> cowsay 'hello'
at> CTRL+D

这将会在周六下午 4:08 运行 cowsay 程序。

7、 rmdir

这个命令允许你通过 Linux CLI 删除一个目录。例如:

rmdir testdirectory

请记住,这个命令不会删除里面有文件的目录。这只在删除空目录时才起作用。

8、 rm

如果你想删除文件,rm 命令就是你想要的。它可以删除文件和目录。要删除一个文件,键入 rm testfile,或者删除一个目录和里面的文件,键入 rm -r

9、 touch

touch 命令,也就是所谓的 “make file 的命令”,允许你使用 Linux CLI 创建新的、空的文件。很像 mkdir 创建目录,touch 会创建文件。例如,touch testfile 将会创建一个名为 testfile 的空文件。

10、 locate

这个命令是你在 Linux 系统中用来查找文件的命令。就像在 Windows 中搜索一样,如果你忘了存储文件的位置或它的名字,这是非常有用的。

例如,如果你有一个关于区块链用例的文档,但是你忘了标题,你可以输入 locate -blockchain 或者通过用星号分隔单词来查找 "blockchain use cases",或者星号(*)。例如:

locate -i*blockchain*use*cases*

还有很多其他有用的 Linux CLI 命令,比如 pkill 命令,如果你开始关机但是你意识到你并不想这么做,那么这条命令很棒。但是这里描述的 10 个简单而有用的命令是你开始使用 Linux 命令行所需的基本知识。


via: https://opensource.com/article/18/4/10-commands-new-linux-users

作者:Sam Bocetta 译者:MjSeven 校对:wxy

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

我们不可能记住所有的命令,对吧?是的。除了经常使用的命令之外,我们几乎不可能记住一些很少使用的长命令。这就是为什么需要一些外部工具来帮助我们在需要时找到命令。在过去,我们已经点评了两个有用的工具,名为 “Bashpast” 和 “Keep”。使用 Bashpast,我们可以轻松地为 Linux 命令添加书签,以便更轻松地重复调用。而 Keep 实用程序可以用来在终端中保留一些重要且冗长的命令,以便你可以随时使用它们。今天,我们将看到该系列中的另一个工具,以帮助你记住命令。现在让我们认识一下 “Pet”,这是一个用 Go 语言编写的简单的命令行代码管理器。

使用 Pet,你可以:

  • 注册/添加你重要的、冗长和复杂的命令片段。
  • 以交互方式来搜索保存的命令片段。
  • 直接运行代码片段而无须一遍又一遍地输入。
  • 轻松编辑保存的代码片段。
  • 通过 Gist 同步片段。
  • 在片段中使用变量
  • 还有很多特性即将来临。

安装 Pet 命令行接口代码管理器

由于它是用 Go 语言编写的,所以确保你在系统中已经安装了 Go。

安装 Go 后,从 Pet 发布页面 获取最新的二进制文件。

wget https://github.com/knqyf263/pet/releases/download/v0.2.4/pet_0.2.4_linux_amd64.zip

对于 32 位计算机:

wget https://github.com/knqyf263/pet/releases/download/v0.2.4/pet_0.2.4_linux_386.zip

解压下载的文件:

unzip pet_0.2.4_linux_amd64.zip

对于 32 位:

unzip pet_0.2.4_linux_386.zip

pet 二进制文件复制到 PATH(即 /usr/local/bin 之类的)。

sudo cp pet /usr/local/bin/

最后,让它可以执行:

sudo chmod +x /usr/local/bin/pet

如果你使用的是基于 Arch 的系统,那么你可以使用任何 AUR 帮助工具从 AUR 安装它。

使用 Pacaur

pacaur -S pet-git

使用 Packer

packer -S pet-git

使用 Yaourt

yaourt -S pet-git

使用 Yay

yay -S pet-git

此外,你需要安装 fzfpeco 工具以启用交互式搜索。请参阅官方 GitHub 链接了解如何安装这些工具。

用法

运行没有任何参数的 pet 来查看可用命令和常规选项的列表。

$ pet
pet - Simple command-line snippet manager.

Usage:
 pet [command]

Available Commands:
 configure Edit config file
 edit Edit snippet file
 exec Run the selected commands
 help Help about any command
 list Show all snippets
 new Create a new snippet
 search Search snippets
 sync Sync snippets
 version Print the version number

Flags:
 --config string config file (default is $HOME/.config/pet/config.toml)
 --debug debug mode
 -h, --help help for pet

Use "pet [command] --help" for more information about a command.

要查看特定命令的帮助部分,运行:

$ pet [command] --help

配置 Pet

默认配置其实工作的挺好。但是,你可以更改保存片段的默认目录,选择要使用的选择器(fzf 或 peco),编辑片段的默认文本编辑器,添加 GIST id 详细信息等。

要配置 Pet,运行:

$ pet configure

该命令将在默认的文本编辑器中打开默认配置(例如我是 vim),根据你的要求更改或编辑特定值。

[General]
 snippetfile = "/home/sk/.config/pet/snippet.toml"
 editor = "vim"
 column = 40
 selectcmd = "fzf"

[Gist]
 file_name = "pet-snippet.toml"
 access_token = ""
 gist_id = ""
 public = false
~

创建片段

为了创建一个新的片段,运行:

$ pet new

添加命令和描述,然后按下回车键保存它。

Command> echo 'Hell1o, Welcome1 2to OSTechNix4' | tr -d '1-9'
Description> Remove numbers from output.

这是一个简单的命令,用于从 echo 命令输出中删除所有数字。你可以很轻松地记住它。但是,如果你很少使用它,几天后你可能会完全忘记它。当然,我们可以使用 CTRL+R 搜索历史记录,但 Pet 会更容易。另外,Pet 可以帮助你添加任意数量的条目。

另一个很酷的功能是我们可以轻松添加以前的命令。为此,在你的 .bashrc.zshrc 文件中添加以下行。

function prev() {
 PREV=$(fc -lrn | head -n 1)
 sh -c "pet new `printf %q "$PREV"`"
}

执行以下命令来使保存的更改生效。

source .bashrc

或者:

source .zshrc

现在,运行任何命令,例如:

$ cat Documents/ostechnix.txt | tr '|' '\n' | sort | tr '\n' '|' | sed "s/.$/\\n/g"

要添加上述命令,你不必使用 pet new 命令。只需要:

$ prev

将说明添加到该命令代码片段中,然后按下回车键保存。

片段列表

要查看保存的片段,运行:

$ pet list

编辑片段

如果你想编辑代码片段的描述或命令,运行:

$ pet edit

这将在你的默认文本编辑器中打开所有保存的代码片段,你可以根据需要编辑或更改片段。

[[snippets]]
 description = "Remove numbers from output."
 command = "echo 'Hell1o, Welcome1 2to OSTechNix4' | tr -d '1-9'"
 output = ""

[[snippets]]
 description = "Alphabetically sort one line of text"
 command = "\t prev"
 output = ""

在片段中使用标签

要将标签用于判断,使用下面的 -t 标志。

$ pet new -t
Command> echo 'Hell1o, Welcome1 2to OSTechNix4' | tr -d '1-9
Description> Remove numbers from output.
Tag> tr command examples

执行片段

要执行一个保存的片段,运行:

$ pet exec

从列表中选择你要运行的代码段,然后按回车键来运行它:

记住你需要安装 fzf 或 peco 才能使用此功能。

寻找片段

如果你有很多要保存的片段,你可以使用字符串或关键词如 below.qjz 轻松搜索它们。

$ pet search

输入搜索字词或关键字以缩小搜索结果范围。

同步片段

首先,你需要获取访问令牌。转到此链接 https://github.com/settings/tokens/new 并创建访问令牌(只需要 “gist” 范围)。

使用以下命令来配置 Pet:

$ pet configure

将令牌设置到 [Gist] 字段中的 access_token

设置完成后,你可以像下面一样将片段上传到 Gist。

$ pet sync -u
Gist ID: 2dfeeeg5f17e1170bf0c5612fb31a869
Upload success

你也可以在其他 PC 上下载片段。为此,编辑配置文件并在 [Gist] 中将 gist_id 设置为 GIST id。

之后,使用以下命令下载片段:

$ pet sync
Download success

获取更多细节,参阅帮助选项:

pet -h

或者:

pet [command] -h

这就是全部了。希望这可以帮助到你。正如你所看到的,Pet 使用相当简单易用!如果你很难记住冗长的命令,Pet 实用程序肯定会有用。

干杯!


via: https://www.ostechnix.com/pet-simple-command-line-snippet-manager/

作者:SK 译者:MjSeven 校对:wxy

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

fcFix Commands 的缩写)是个 shell 内置命令,用于在交互式 shell 里列出、编辑和执行最近输入的命令。你可以用你喜欢的编辑器编辑最近的命令并再次执行,而不用把它们整个重新输入一遍。除了可以避免重复输入又长又复杂的命令,它对修正拼写错误来说也很有用。因为是 shell 内置命令,大多 shell 都包含它,比如 Bash 、 Zsh 、 Ksh 等。在这篇短文中,我们来学一学在 Linux 中使用 fc 命令。

fc 命令教程及示例

列出最近执行的命令

执行不带其它参数的 fc -l 命令,它会列出最近 16 个命令。

$ fc -l
507 fish
508 fc -l
509 sudo netctl restart wlp9s0sktab
510 ls -l
511 pwd
512 uname -r
513 uname -a
514 touch ostechnix.txt
515 vi ostechnix.txt
516 echo "Welcome to OSTechNix"
517 sudo apcman -Syu
518 sudo pacman -Syu
519 more ostechnix.txt
520 wc -l ostechnix.txt
521 cat ostechnix.txt
522 clear

-r 选项用于将输出反向排序。

$ fc -lr

-n 选项用于隐藏行号。

$ fc -ln
 nano ~/.profile
 source ~/.profile
 source ~/.profile
 fc -ln
 fc -l
 sudo netctl restart wlp9s0sktab
 ls -l
 pwd
 uname -r
 uname -a
 echo "Welcome to OSTechNix"
 sudo apcman -Syu
 cat ostechnix.txt
 wc -l ostechnix.txt
 more ostechnix.txt
 clear

这样行号就不再显示了。

如果想以某个命令开始,只需在 -l 选项后面加上行号即可。比如,要显示行号 520 至最近的命令,可以这样:

$ fc -l 520
520 ls -l
521 pwd
522 uname -r
523 uname -a
524 echo "Welcome to OSTechNix"
525 sudo apcman -Syu
526 cat ostechnix.txt
527 wc -l ostechnix.txt
528 more ostechnix.txt
529 clear
530 fc -ln
531 fc -l

要列出一段范围内的命令,将始、末行号作为 fc -l 的参数即可,比如 520 至 525:

$ fc -l 520 525
520 ls -l
521 pwd
522 uname -r
523 uname -a
524 echo "Welcome to OSTechNix"
525 sudo apcman -Syu

除了使用行号,我们还可以使用字符。比如,要列出最近一个 pwd 至最近一个命令之间的所有命令,只需要像下面这样使用起始字母即可:

$ fc -l p
521 pwd
522 uname -r
523 uname -a
524 echo "Welcome to OSTechNix"
525 sudo apcman -Syu
526 cat ostechnix.txt
527 wc -l ostechnix.txt
528 more ostechnix.txt
529 clear
530 fc -ln
531 fc -l
532 fc -l 520
533 fc -l 520 525
534 fc -l 520
535 fc -l 522
536 fc -l l

要列出所有 pwdmore 之间的命令,你可以都使用起始字母,像这样:

$ fc -l p m

或者,使用开始命令的首字母以及结束命令的行号:

$ fc -l p 528

或者都使用行号:

$ fc -l 521 528

这三个命令都显示一样的结果。

编辑并执行上一个命令

我们经常敲错命令,这时你可以用默认编辑器修正拼写错误并执行而不用将命令重新再敲一遍。

编辑并执行上一个命令:

$ fc

这会在默认编辑器里载入上一个命令。

你可以看到,我上一个命令是 fc -l。你可以随意修改,它会在你保存退出编辑器时自动执行。这在命令或参数又长又复杂时很有用。需要注意的是,它同时也可能是毁灭性的。比如,如果你的上一个命令是危险的 rm -fr <some-path>,当它自动执行时你可能丢掉你的重要数据。所以,小心谨慎对待每一个命令。

更改默认编辑器

另一个有用的选项是 -e ,它可以用来为 fc 命令选择不同的编辑器。比如,如果我们想用 nano 来编辑上一个命令:

$ fc -e nano

这个命令会打开 nano 编辑器(而不是默认编辑器)编辑上一个命令。

如果你觉得用 -e 选项太麻烦,你可以修改你的默认编辑器,只需要将环境变量 FCEDIT 设为你想要让 fc 使用的编辑器名称即可。

比如,要把 nano 设为默认编辑器,编辑你的 ~/.profile 或其他初始化文件: (LCTT 译注:如果 ~/.profile 不存在可自己创建;如果使用的是 bash ,可以编辑 ~/.bash_profile

$ vi ~/.profile

添加下面一行:

FCEDIT=nano
# LCTT译注:如果在子 shell 中会用到 fc ,最好在这里 export FCEDIT

你也可以使用编辑器的完整路径:

FCEDIT=/usr/local/bin/emacs

输入 :wq 保存退出。要使改动立即生效,运行以下命令:

$ source ~/.profile

现在再输入 fc 就可以使用 nano 编辑器来编辑上一个命令了。

不编辑而直接执行上一个命令

我们现在知道 fc 命令不带任何参数的话会将上一个命令载入编辑器。但有时你可能不想编辑,仅仅是想再次执行上一个命令。这很简单,在末尾加上连字符(-)就可以了:

$ echo "Welcome to OSTechNix"
Welcome to OSTechNix

$ fc -e -
echo "Welcome to OSTechNix"
Welcome to OSTechNix

如你所见,fc 带了 -e 选项,但并没有编辑上一个命令(例中的 echo " Welcome to OSTechNix")。

需要注意的是,有些选项仅对指定 shell 有效。比如下面这些选项可以用在 zsh 中,但在 Bash 或 Ksh 中则不能用。

显示命令的执行时间

想要知道命令是在什么时候执行的,可以用 -d 选项:

fc -ld
1 18:41 exit
2 18:41 clear
3 18:42 fc -l
4 18:42 sudo netctl restart wlp9s0sktab
5 18:42 ls -l
6 18:42 pwd
7 18:42 uname -r
8 18:43 uname -a
9 18:43 cat ostechnix.txt
10 18:43 echo "Welcome to OSTechNix"
11 18:43 more ostechnix.txt
12 18:43 wc -l ostechnix.txt
13 18:43 cat ostechnix.txt
14 18:43 clear
15 18:43 fc -l

这样你就可以查看最近命令的具体执行时间了。

使用选项 -f ,可以为每个命令显示完整的时间戳。

 fc -lf
 1 4/5/2018 18:41 exit
 2 4/5/2018 18:41 clear
 3 4/5/2018 18:42 fc -l
 4 4/5/2018 18:42 sudo netctl restart wlp9s0sktab
 5 4/5/2018 18:42 ls -l
 6 4/5/2018 18:42 pwd
 7 4/5/2018 18:42 uname -r
 8 4/5/2018 18:43 uname -a
 9 4/5/2018 18:43 cat ostechnix.txt
 10 4/5/2018 18:43 echo "Welcome to OSTechNix"
 11 4/5/2018 18:43 more ostechnix.txt
 12 4/5/2018 18:43 wc -l ostechnix.txt
 13 4/5/2018 18:43 cat ostechnix.txt
 14 4/5/2018 18:43 clear
 15 4/5/2018 18:43 fc -l
 16 4/5/2018 18:43 fc -ld

当然,欧洲的老乡们还可以使用 -E 选项来显示欧洲时间格式。

 fc -lE
 2 5.4.2018 18:41 clear
 3 5.4.2018 18:42 fc -l
 4 5.4.2018 18:42 sudo netctl restart wlp9s0sktab
 5 5.4.2018 18:42 ls -l
 6 5.4.2018 18:42 pwd
 7 5.4.2018 18:42 uname -r
 8 5.4.2018 18:43 uname -a
 9 5.4.2018 18:43 cat ostechnix.txt
 10 5.4.2018 18:43 echo "Welcome to OSTechNix"
 11 5.4.2018 18:43 more ostechnix.txt
 12 5.4.2018 18:43 wc -l ostechnix.txt
 13 5.4.2018 18:43 cat ostechnix.txt
 14 5.4.2018 18:43 clear
 15 5.4.2018 18:43 fc -l
 16 5.4.2018 18:43 fc -ld
 17 5.4.2018 18:49 fc -lf

fc 用法总结

  • 当不带任何参数时,fc 将上一个命令载入默认编辑器。
  • 当带一个数字作为参数时,fc 将数字指定的命令载入默认编辑器。
  • 当带一个字符作为参数时,fc 将最近一个以指定字符开头的命令载入默认编辑器。
  • 当有两个参数时,它们分别指定需要列出的命令范围的开始和结束。

更多细节,请参考 man 手册。

$ man fc

好了,今天就这些。希望这篇文章能帮助到你。更多精彩内容,敬请期待!


via: https://www.ostechnix.com/the-fc-command-tutorial-with-examples-for-beginners/

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

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

如果我们经常在实际场景中使用 Linux 命令,我们就会更有效的学习和记忆它们。除非你经常使用 Linux 命令,否则你可能会在一段时间内忘记它们。无论你是新手还是老手,总会有一些趣味的方法来测试你的 BASH 技能。在本教程中,我将解释如何通过玩命令行游戏来测试你的 BASH 技能。其实从技术上讲,这些并不是像 Super TuxKart、极品飞车或 CS 等真正的游戏。这些只是 Linux 命令培训课程的游戏化版本。你将需要根据游戏本身的某些指示来完成一个任务。

现在,我们来看看几款能帮助你实时学习和练习 Linux 命令的游戏。这些游戏不是消磨时间或者令人惊诧的,这些游戏将帮助你获得终端命令的真实体验。请继续阅读:

使用 “Wargames” 来测试 BASH 技能

这是一个在线游戏,所以你必须联网。这些游戏可以帮助你以充满乐趣的游戏形式学习和练习 Linux 命令。Wargames 是一个 shell 游戏的集合,每款游戏有很多关卡。只有通过解决先前的关卡才能访问下一个关卡。不要担心!每个游戏都提供了有关如何进入下一关的清晰简洁说明。

要玩 Wargames,请点击以下链接:Wargames

如你所见,左边列出了许多 shell 游戏。每个 shell 游戏都有自己的 SSH 端口。所以,你必须通过本地系统配置 SSH 连接到游戏,你可以在 Wargames 网站的左上角找到关于如何使用 SSH 连接到每个游戏的信息。

例如,让我们来玩 Bandit 游戏吧。为此,单击 Wargames 主页上的 Bandit 链接。在左上角,你会看到 Bandit 游戏的 SSH 信息。

正如你在上面的屏幕截图中看到的,有很多关卡。要进入每个关卡,请单机左侧列中的相应链接。此外,右侧还有适合初学者的说明。如果你对如何玩此游戏有任何疑问,请阅读它们。

现在,让我们点击它进入关卡 0。在下一个屏幕中,你将获得该关卡的 SSH 信息。

正如你在上面的屏幕截图中看到的,你需要配置 SSH 端口 2220 连接 bandit.labs.overthewire.org,用户名是 bandit0,密码是 bandit0

让我们连接到 Bandit 游戏关卡 0。

$ ssh [email protected] -p 2220

输入密码 bandit0

示例输出将是:

登录后,输入 ls 命令查看内容或者进入关卡 1 页面,了解如何通过关卡 1 等等。建议的命令列表已在每个关卡提供。所以,你可以选择和使用任何合适的命令来解决每个关卡。

我必须承认,Wargames 是令人上瘾的,并且解决每个关卡是非常有趣的。 尽管有些关卡确实很具挑战性,你可能需要谷歌才能知道如何解决问题。 试一试,你会很喜欢它。

使用 “Terminus” 来测试 BASH 技能

这是另一个基于浏览器的在线 CLI 游戏,可用于改进或测试你的 Linux 命令技能。要玩这个游戏,请打开你的 web 浏览器并导航到以下 URL:Play Terminus Game

一旦你进入游戏,你会看到有关如何玩游戏的说明。与 Wargames 不同,你不需要连接到它们的游戏服务器来玩游戏。Terminus 有一个内置的 CLI,你可以在其中找到有关如何使用它的说明。

你可以使用命令 ls 查看周围的环境,使用命令 cd 位置 移动到新的位置,返回使用命令 cd ..,与这个世界进行交互使用命令 less 项目 等等。要知道你当前的位置,只需输入 pwd

使用 “clmystery” 来测试 BASH 技能

与上述游戏不同,你可以在本地玩这款游戏。你不需要连接任何远程系统,这是完全离线的游戏。

相信我,这家伙是一个有趣的游戏。按照给定的说明,你将扮演一个侦探角色来解决一个神秘案件。

首先,克隆仓库:

$ git clone https://github.com/veltman/clmystery.git

或者,从 这里 将其作为 zip 文件下载。解压缩并切换到下载文件的地方。最后,通过阅读 instructions 文件来开启宝箱。

[sk@sk]: clmystery-master>$ ls
cheatsheet.md cheatsheet.pdf encoded hint1 hint2 hint3 hint4 hint5 hint6 hint7 hint8 instructions LICENSE.md mystery README.md solution

这里是玩这个游戏的说明:

终端城发生了一起谋杀案,TCPD 需要你的帮助。你需要帮助它们弄清楚是谁犯罪了。

为了查明是谁干的,你需要到 mystery 子目录并从那里开始工作。你可能需要查看犯罪现场的所有线索( crimescene 文件)。现场的警官相当谨慎,所以他们在警官报告中写下了一切。幸运的是,警官以全部大写的 “CLUE” 一词把真正的线索标记了出来。

如果里遇到任何问题,请打开其中一个提示文件,例如 “hint1”,“hint2” 等。你可以使用下面的 cat 命令打开提示文件。

$ cat hint1
$ cat hint2

要检查你的答案或找出解决方案,请在 clmystery 目录中打开文件 solution

$ cat solution

要了解如何使用命令行,请参阅 cheatsheet.mdcheatsheet.pdf (在命令行中,你可以输入 ‘nano cheatsheet.md’)。请勿使用文本编辑器查看除 instructionscheatsheethint 以外的任何文件。

有关更多详细信息,请参阅 clmystery GitHub 页面。

推荐阅读:

而这就是我现在所知道的。如果将来遇到任何问题,我会继续添加更多游戏。将此链接加入书签并不时访问。如果你知道其他类似的游戏,请在下面的评论部分告诉我,我将测试和更新本指南。

还有更多好东西,敬请关注!

干杯!


via: https://www.ostechnix.com/test-your-bash-skills-by-playing-command-line-games/

作者:SK 译者:MjSeven 校对:wxy

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

我知道你可以按下向上箭头来调出你运行过的命令,然后使用左/右键移动到拼写错误的单词,并更正拼写错误的单词,最后按回车键再次运行它,对吗?可是等等。还有一种更简单的方法可以纠正 GNU/Linux 中拼写错误的 Bash 命令。这个教程解释了如何做到这一点。请继续阅读。

在 Linux 中纠正拼写错误的 Bash 命令

你有没有运行过类似于下面的错误输入命令?

$ unme -r
bash: unme: command not found

你注意到了吗?上面的命令中有一个错误。我在 uname 命令缺少了字母 a

我在很多时候犯过这种愚蠢的错误。在我知道这个技巧之前,我习惯按下向上箭头来调出命令,并转到命令中拼写错误的单词,纠正拼写错误,然后按回车键再次运行该命令。但相信我。下面的技巧非常易于纠正你刚刚运行的命令中的任何拼写错误。

要轻松更正上述拼写错误的命令,只需运行:

$ ^nm^nam^

这会将 uname 命令中将 nm 替换为 nam。很酷,是吗?它不仅纠正错别字,而且还能运行命令。查看下面的截图。

当你在命令中输入错字时使用这个技巧。请注意,它仅适用于 Bash shell。

额外提示:

你有没有想过在使用 cd 命令时如何自动纠正拼写错误?没有么?没关系!下面的技巧将解释如何做到这一点。

这个技巧只能纠正使用 cd 命令时的拼写错误。

比如说,你想使用命令切换到 Downloads 目录:

$ cd Donloads
bash: cd: Donloads: No such file or directory

哎呀!没有名称为 Donloads 的文件或目录。是的,正确的名称是 Downloads。上面的命令中缺少 w

要解决此问题并在使用 cd 命令时自动更正错误,请编辑你的 .bashrc 文件:

$ vi ~/.bashrc

最后添加以下行。

[...]
shopt -s cdspell

输入 :wq 保存并退出文件。

最后,运行以下命令更新更改。

$ source ~/.bashrc

现在,如果在使用 cd 命令时路径中存在任何拼写错误,它将自动更正并进入正确的目录。

正如你在上面的命令中看到的那样,我故意输错(Donloads 而不是 Downloads),但 Bash 自动检测到正确的目录名并 cd 进入它。

Fish 和 Zsh shell 内置的此功能。所以,如果你使用的是它们,那么你不需要这个技巧。

然而,这个技巧有一些局限性。它只适用于使用正确的大小写。在上面的例子中,如果你输入的是 cd donloads 而不是 cd Donloads,它将无法识别正确的路径。另外,如果路径中缺少多个字母,它也不起作用。


via: https://www.ostechnix.com/easily-correct-misspelled-bash-commands-linux/

作者:SK 译者:geekpi 校对:wxy

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