在 Linux 上你真正需要避免的 8 个错别字

已发表: 2023-01-15
标有“糟糕!”的键盘键的特写
Redpixel.pl/Shutterstock
在按“Enter”之前,请仔细检查您是否正确键入了命令。 在 Linux 上,打字错误可能会产生破坏性的影响。 使用制表符完成自动填充尽可能多的命令行条目。 长而复杂的命令的别名也是一个好主意。

Linux 命令行提供了强大的功能。 问题是,正确使用这种能力取决于你打字的准确性。 这里有八个你永远不想犯的错别字。

目录

Linux 命令行
1. 不要忘记 -a
2. dd 使用了错误的驱动器标识符
3. 在 mkfs 中使用错误的驱动器标识符
4. 不要删除你的 crontab 文件
5. 重复历史
6.空间之灾
7. 使用 > 而不是 >>
8. 错误方向的重定向
如何避免命令行错别字

Linux 命令行

Linux 命令行是通向强大力量的门户,但只需要一个打字错误就会让这种力量对你不利。 我们都听说过您永远不应该运行的命令。 我们在这里谈论的是您确实想要运行的命令,但一个失误可能意味着灾难。

当您按下“Enter”时,您输入的所有内容都会被 shell 处理。 扩展了别名和变量。 识别命令、选项和参数。 这称为解析。 下一步将您解析的输入交给将要执行您的指令的命令。

如果您在键入命令时出错,它可能会被捕获为语法错误。 但是如果你的错误创建了另一个有效的命令行,它就会被执行。

一个简单的错字可能真的具有破坏性。 破坏程度取决于命令和错误。 你可能会浪费时间。 您可能会丢失一个文件。 您可能会丢失整个文件系统。

相关:什么是 Bash Shell,为什么它对 Linux 如此重要?

1. 不要忘记 -a

您可能需要将某人添加到组中以允许他们使用特定的软件。 例如,VirtualBox 要求用户属于“vboxusers”组。 我们可以用usermod做到这一点。

groups命令列出用户的组。

 团体

使用 groups 命令列出用户的组

我们将把用户dave添加到一个新组中。 -a (附加)将新组添加到用户所在的现有组列表中。 -G (组)选项标识组。

 sudo usermod -a -G vboxusers dave 

使用 usermod 命令将用户添加到新组

用户登录和注销后可以看到新组。

 团体

该用户所在的组列表中显示的 vboxusers 组

他现在在“vboxusers”组中。 但是,如果您忘记使用-a (追加)选项,则会删除用户的所有现有组。 他们将加入的唯一组是新组。

这是不正确的命令:

 sudo usermod -G vboxusers dave 

在不使用 -a 追加选项的情况下将用户添加到组

当他们下次登录时,他们会发现他们只在一个组中。

 团体

用户现在在一个组中

如果您只有一个已配置的用户,并且对他们执行此操作,就会遇到严重的问题。 一方面,用户不再是“sudo”组的成员,因此您不能使用sudo来开始纠正问题。

相关:在 Linux 上将用户添加到组(或第二组)

2. dd 使用了错误的驱动器标识符

dd命令将数据块写入文件系统。 它通常用于将 ISO 映像写入 USB 记忆棒。

存储设备的 Linux 命名方案使用单个字母进行标识。 第一个硬盘名为“/dev/sda”,第二个为“/dev/sdb”,第三个为“/dev/sdc”,依此类推。 分区由编号标识。 第一个硬盘上的第一个分区是“/dev/sda1”,第二个是“/dev/sda2”,依此类推。

如果将映像刻录到 USB 记忆棒,则需要知道 USB 记忆棒的驱动器标识符。 我们会发现,通过管道lsblkgrep ,查找其中包含“sd”的条目。

 lsblk | grep sd 

使用 grep 在 lsblk 命令的输出中搜索其中包含“sd”的行

我们可以看到硬盘“/dev/sda”是一个32GB的硬盘,分为三个分区。 其中一个分区是“/boot”分区,分区“/dev/sda3”挂载在“/”,这是文件系统的根目录。

硬盘驱动器“/dev/sdb”被报告为 7.5GB 驱动器。 它安装在“/media/dave/Pink”。 说白了,“/dev/sda”就是这台电脑的主硬盘,“/dev/sdb”就是U盘。

将“~/Downloads”目录中的 ISO 文件写入我们的 USB 记忆棒的命令是:

 sudo dd bs=4M if=Downloads/distro-image.iso of=/dev/sdb conv=f​​datasync status=progress 

使用 dd 命令将图像写入 USB 记忆棒

系统提示我们输入密码,然后dd开始执行操作。 没有“你确定吗?” 警告或退出的机会。 写作立即开始。

dd 进度显示,因为它将图像写入 USB 记忆棒

但是,如果您为驱动器标识符键入了错误的字母并且它与现有硬盘驱动器匹配,您将覆盖该驱动器而不是记忆棒。

这是不正确的命令:

 sudo dd bs=4M if=Downloads/distro-image.iso of=/dev/sda conv=f​​datasync status=progress 

错误地将图像写入主硬盘驱动器以错误消息结束

我们告诉dd使用“/dev/sd a ”,它就这样做了。 写入操作要快得多,但以警告结束。 您刚刚破坏了 Linux 安装。

在点击“Enter”之前检查并仔细检查驱动器标识符。

相关:如何在 Linux 中将 ISO 文件刻录到 USB 驱动器

3. 在 mkfs 中使用错误的驱动器标识符

还有其他命令将驱动器标识符作为其命令行的一部分,例如mkfs工具。 这些通过在分区上创建文件系统来格式化驱动器。

在这台计算机上,我们有一个 25GB 的驱动器和一个 10GB 的驱动器。

lsblk 的输出通过 grep 传输,显示计算机中的硬盘驱动器

如果我们想在 10GB 驱动器的第一个分区上创建一个 Ext4 文件系统,我们将使用这些命令。

 sudo umount /dev/sdb1
 须藤 mkfs.ext4 /dev/sdb1 

在 USB 记忆棒上创建 ext4 文件系统

但是,如果我们错误地在驱动器标识符中使用“a”而不是“b”,我们将清除 25GB 驱动器上的一个分区,并导致我们的计算机无法启动。

这是不正确的命令:

 sudo umount /dev/sda1
 须藤 mkfs.ext4 /dev/sda1 

错误地格式化计算机的主驱动器

那一个小字母很有冲击力,因此请确保您使用的是正确的驱动器。

相关:如何在 Linux 上使用 mkfs 命令

4. 不要删除你的 crontab 文件

cron守护进程会在预定的时间为您运行任务。 它从crontab文件中获取其配置。 每个用户(包括 root)都可以有一个crontab文件。 要编辑您的crontab ,请使用以下命令:

 crontab -e 

编辑 crontab 文件的命令:crontab -e

crontab文件在编辑器中打开。 您可以进行更改并添加新命令。

在编辑器中打开的 crontab 文件

但是,如果您输入错误的命令并按“r”而不是“e”,您将删除(如删除)您的crontab文件。

这是不正确的命令:

 定时任务 -r 

删除 crontab 文件的命令:crontab -r

下次您使用crontab -e命令时,您将看到一个默认的空文件。

这是一个很容易犯的错误,因为“e”和“r”在大多数键盘上都是相邻的。 重建一个复杂的crontab文件并不好玩。

相关:什么是 Cron Job,你如何使用它们?

5. 重复历史

当您尝试减少击键次数并节省时间时,使用history命令非常有用。 如果您可以从历史中提取冗长的命令,您将获得速度和准确性。 只要您从历史记录中选择正确的命令。

history命令在终端窗口中列出您以前的命令。 他们被编号了。 要重复使用命令,请在其编号前加上感叹号“ ! ”,然后按“Enter”键。

 历史

假设我们克隆了一个 Git 存储库,弄乱了它,然后删除了它。 我们需要再次克隆它。 通过在终端窗口中滚动,我们可以很快找到git clone命令。 我们可以通过键入以下内容重新运行它:

 !60

但如果我们只看了一眼屏幕就误读了数字,我们可能会错误地选择下一个数字:

 !61

这将运行列表中的下一个命令rm * 。 这将删除当前目录中的所有文件。

您还可以使用“ ! ”带有一串文本的感叹号。 将为您执行第一个匹配命令。 它没有显示,因此您可以检查它是否是您想要的那个,它会立即执行。

想象一下您有一个名为“restart.sh”的脚本的场景。 该脚本为您正在编写的某些软件默认了一组配置文件。 定期地,在您开发和测试时,您需要擦干净石板,因此您调用您的脚本。

这个命令应该足以在你的历史中找到并匹配命令,并执行它。

 !回覆

但是,如果您在上次使用脚本后使用过reboot命令,则会发现并立即执行reboot命令。

rm * 命令被错误运行

在您的单用户家用计算机上,这可能只是一个烦恼。 在共享服务器上,这对许多其他人来说也是一种烦恼。

相关:如何在 Linux 上使用 history 命令

6.空间之灾

文件名和目录路径中的空格会造成严重破坏。 这就是为什么他们应该总是被转义或引用。

如何在 Linux 上处理文件名中的空格
相关如何在 Linux 上处理文件名中的空格

使用制表符补全可以避免空格问题。 当您键入文件名或目录路径时按“Tab”键,shell 将自动完成尽可能多的路径或文件名。 您可能需要键入一个字母来区分您想要的文件和共享相同名称的任何其他文件,但再按一次“Tab”键将为您完成文件名的其余部分。

这样可以节省击键次数,防止空格因打字错误而进入,并正确转义任何合法空格,以免它们引起问题。

假设我们有一个“Development”目录,其中包含另外两个目录“geocoder”和“bin”。 “geocoder”目录中还有一个“bin”目录。

要删除“geocoder/bin”目录中的文件并删除该目录,您可以使用此命令。

 rm -r 地理编码器/bin 

删除 geocoder/bin 目录

现在想象一下,您不小心在“geocoder/”之后添加了一个空格,就像这样。

这是不正确的命令:

 rm -r 地理编码器/bin 

错误地删除了 geocoder 和 bin 目录

繁荣。 “开发”目录现在是空的。 “Development/geocoder”、“Development/geocoder/bin”和“Development/bin”目录都被彻底清除了。

请记住,Tab 补全是您的朋友。

相关:使用 Tab 完成在任何操作系统上更快地键入命令

7. 使用 > 而不是 >>

重定向将进程的输出发送到文件。 我们使用大于号“ > ”来捕获进程的输出。 如果文件存在,则先将其清空。

假设我们正在调查内存泄漏。 我们有一个名为“memlog.sh”的脚本。 它每秒显示一次内存统计信息。 我们将把它重定向到一个名为“memory.txt”的文件中,供以后分析。

 memlog.sh > 内存.txt
 头部记忆.txt 

捕获并显示 memlog.sh 脚本的输出

第二天,我们想继续调查,然后重新启动脚本。 这次我们需要使用两个大于号“ >> ”,以便将新数据追加到文件中。

 memlog.sh >> 内存.txt 

将新数据附加到现有文件的末尾

如果我们使用单个大于号“>”,我们将丢失昨天的数据,因为文件首先被清空。

相关:什么是 Linux 上的标准输入、标准输出和标准错误?

8. 错误方向的重定向

重定向可以使用文件的内容作为程序的输入。

我们有一个名为“placenames.sql”的文件,我们想将其导入到sqlite3中。 模式文件描述了如何重新创建数据库表。 它还包含我们要存储在数据库中的数据。 1.3GB 和超过 1100 万行,这是一个大文件。

 ls -hl 地名.sql
 wc 地名.sql 

使用 ls 和 wc 检查文件的大小

我们可以使用此命令创建一个名为“places.sqlite3”的新数据库。

 sqlite3 places.sqlite3 < 地名.sql 

将文件中的模式导入 sqlite3

通常情况下,当我们重定向时,我们使用“>”字符。 你必须集中注意力,避免习惯性地输入“>”。 如果你这样做, sqlite3生成的任何输出都会写入你的模式文件,并删除它。

这是不正确的命令:

 sqlite3 places.sqlite3 > placenames.sql 

错误地从 sqlite3 重定向到模式文件

我们的模式文件已被销毁,被来自sqlite3 shell 的欢迎消息覆盖。

 猫地名.sql 

包含 sqlite3 欢迎消息的覆盖模式文件

再见,1.3GB 的数据。

如何避免命令行错别字

您可以养成一些好习惯来帮助避免犯这些类型的错误。

尽可能使用制表符补全。 您将避免目录路径和文件名中的空格问题。

为您偶尔需要使用的又长又复杂的命令创建您自己的简短好记的别名。 这样,您就不会因为使用错误的选项和参数而搞砸了。

如何在 Linux 终端中输入更少并更快地工作
相关如何在 Linux 终端中输入更少并更快地工作

校对您自己的作品是出了名的困难,但这就是您需要在命令行上做的事情。 阅读真正的内容。 不要只看一眼就认为它说的是您要输入的内容。 它到底在说什么? 因为那是它真正要做的。

相关:你不应该在 Linux 上运行的 8 个致命命令