在 Linux 上你真正需要避免的 8 个错别字
已发表: 2023-01-15Linux 命令行提供了强大的功能。 问题是,正确使用这种能力取决于你打字的准确性。 这里有八个你永远不想犯的错别字。
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
命令列出用户的组。
团体
我们将把用户dave
添加到一个新组中。 -a
(附加)将新组添加到用户所在的现有组列表中。 -G
(组)选项标识组。
sudo usermod -a -G vboxusers dave
用户登录和注销后可以看到新组。
团体
他现在在“vboxusers”组中。 但是,如果您忘记使用-a
(追加)选项,则会删除用户的所有现有组。 他们将加入的唯一组是新组。
这是不正确的命令:
sudo usermod -G vboxusers dave
当他们下次登录时,他们会发现他们只在一个组中。
团体
如果您只有一个已配置的用户,并且对他们执行此操作,就会遇到严重的问题。 一方面,用户不再是“sudo”组的成员,因此您不能使用sudo
来开始纠正问题。
相关:在 Linux 上将用户添加到组(或第二组)
2. dd 使用了错误的驱动器标识符
dd
命令将数据块写入文件系统。 它通常用于将 ISO 映像写入 USB 记忆棒。
存储设备的 Linux 命名方案使用单个字母进行标识。 第一个硬盘名为“/dev/sda”,第二个为“/dev/sdb”,第三个为“/dev/sdc”,依此类推。 分区由编号标识。 第一个硬盘上的第一个分区是“/dev/sda1”,第二个是“/dev/sda2”,依此类推。
如果将映像刻录到 USB 记忆棒,则需要知道 USB 记忆棒的驱动器标识符。 我们会发现,通过管道lsblk
到grep
,查找其中包含“sd”的条目。
lsblk | grep 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=fdatasync status=progress
系统提示我们输入密码,然后dd
开始执行操作。 没有“你确定吗?” 警告或退出的机会。 写作立即开始。
但是,如果您为驱动器标识符键入了错误的字母并且它与现有硬盘驱动器匹配,您将覆盖该驱动器而不是记忆棒。
这是不正确的命令:
sudo dd bs=4M if=Downloads/distro-image.iso of=/dev/sda conv=fdatasync status=progress
我们告诉dd
使用“/dev/sd a ”,它就这样做了。 写入操作要快得多,但以警告结束。 您刚刚破坏了 Linux 安装。
在点击“Enter”之前检查并仔细检查驱动器标识符。
相关:如何在 Linux 中将 ISO 文件刻录到 USB 驱动器
3. 在 mkfs 中使用错误的驱动器标识符
还有其他命令将驱动器标识符作为其命令行的一部分,例如mkfs
工具。 这些通过在分区上创建文件系统来格式化驱动器。
在这台计算机上,我们有一个 25GB 的驱动器和一个 10GB 的驱动器。
如果我们想在 10GB 驱动器的第一个分区上创建一个 Ext4 文件系统,我们将使用这些命令。
sudo umount /dev/sdb1
须藤 mkfs.ext4 /dev/sdb1
但是,如果我们错误地在驱动器标识符中使用“a”而不是“b”,我们将清除 25GB 驱动器上的一个分区,并导致我们的计算机无法启动。
这是不正确的命令:
sudo umount /dev/sda1
须藤 mkfs.ext4 /dev/sda1
那一个小字母很有冲击力,因此请确保您使用的是正确的驱动器。
相关:如何在 Linux 上使用 mkfs 命令
4. 不要删除你的 crontab 文件
cron
守护进程会在预定的时间为您运行任务。 它从crontab
文件中获取其配置。 每个用户(包括 root)都可以有一个crontab
文件。 要编辑您的crontab
,请使用以下命令:
crontab -e
crontab
文件在编辑器中打开。 您可以进行更改并添加新命令。
但是,如果您输入错误的命令并按“r”而不是“e”,您将删除(如删除)您的crontab
文件。
这是不正确的命令:
定时任务 -r
下次您使用crontab -e
命令时,您将看到一个默认的空文件。
这是一个很容易犯的错误,因为“e”和“r”在大多数键盘上都是相邻的。 重建一个复杂的crontab
文件并不好玩。
相关:什么是 Cron Job,你如何使用它们?
5. 重复历史
当您尝试减少击键次数并节省时间时,使用history
命令非常有用。 如果您可以从历史中提取冗长的命令,您将获得速度和准确性。 只要您从历史记录中选择正确的命令。
history
命令在终端窗口中列出您以前的命令。 他们被编号了。 要重复使用命令,请在其编号前加上感叹号“ !
”,然后按“Enter”键。
历史
假设我们克隆了一个 Git 存储库,弄乱了它,然后删除了它。 我们需要再次克隆它。 通过在终端窗口中滚动,我们可以很快找到git clone
命令。 我们可以通过键入以下内容重新运行它:
!60
但如果我们只看了一眼屏幕就误读了数字,我们可能会错误地选择下一个数字:
!61
这将运行列表中的下一个命令rm *
。 这将删除当前目录中的所有文件。
您还可以使用“ !
”带有一串文本的感叹号。 将为您执行第一个匹配命令。 它没有显示,因此您可以检查它是否是您想要的那个,它会立即执行。
想象一下您有一个名为“restart.sh”的脚本的场景。 该脚本为您正在编写的某些软件默认了一组配置文件。 定期地,在您开发和测试时,您需要擦干净石板,因此您调用您的脚本。
这个命令应该足以在你的历史中找到并匹配命令,并执行它。
!回覆
但是,如果您在上次使用脚本后使用过reboot
命令,则会发现并立即执行reboot
命令。
在您的单用户家用计算机上,这可能只是一个烦恼。 在共享服务器上,这对许多其他人来说也是一种烦恼。
相关:如何在 Linux 上使用 history 命令
6.空间之灾
文件名和目录路径中的空格会造成严重破坏。 这就是为什么他们应该总是被转义或引用。
使用制表符补全可以避免空格问题。 当您键入文件名或目录路径时按“Tab”键,shell 将自动完成尽可能多的路径或文件名。 您可能需要键入一个字母来区分您想要的文件和共享相同名称的任何其他文件,但再按一次“Tab”键将为您完成文件名的其余部分。
这样可以节省击键次数,防止空格因打字错误而进入,并正确转义任何合法空格,以免它们引起问题。
假设我们有一个“Development”目录,其中包含另外两个目录“geocoder”和“bin”。 “geocoder”目录中还有一个“bin”目录。
要删除“geocoder/bin”目录中的文件并删除该目录,您可以使用此命令。
rm -r 地理编码器/bin
现在想象一下,您不小心在“geocoder/”之后添加了一个空格,就像这样。
这是不正确的命令:
rm -r 地理编码器/bin
繁荣。 “开发”目录现在是空的。 “Development/geocoder”、“Development/geocoder/bin”和“Development/bin”目录都被彻底清除了。
请记住,Tab 补全是您的朋友。
相关:使用 Tab 完成在任何操作系统上更快地键入命令
7. 使用 > 而不是 >>
重定向将进程的输出发送到文件。 我们使用大于号“ >
”来捕获进程的输出。 如果文件存在,则先将其清空。
假设我们正在调查内存泄漏。 我们有一个名为“memlog.sh”的脚本。 它每秒显示一次内存统计信息。 我们将把它重定向到一个名为“memory.txt”的文件中,供以后分析。
memlog.sh > 内存.txt
头部记忆.txt
第二天,我们想继续调查,然后重新启动脚本。 这次我们需要使用两个大于号“ >>
”,以便将新数据追加到文件中。
memlog.sh >> 内存.txt
如果我们使用单个大于号“>”,我们将丢失昨天的数据,因为文件首先被清空。
相关:什么是 Linux 上的标准输入、标准输出和标准错误?
8. 错误方向的重定向
重定向可以使用文件的内容作为程序的输入。
我们有一个名为“placenames.sql”的文件,我们想将其导入到sqlite3
中。 模式文件描述了如何重新创建数据库表。 它还包含我们要存储在数据库中的数据。 1.3GB 和超过 1100 万行,这是一个大文件。
ls -hl 地名.sql
wc 地名.sql
我们可以使用此命令创建一个名为“places.sqlite3”的新数据库。
sqlite3 places.sqlite3 < 地名.sql
通常情况下,当我们重定向时,我们使用“>”字符。 你必须集中注意力,避免习惯性地输入“>”。 如果你这样做, sqlite3
生成的任何输出都会写入你的模式文件,并删除它。
这是不正确的命令:
sqlite3 places.sqlite3 > placenames.sql
我们的模式文件已被销毁,被来自sqlite3
shell 的欢迎消息覆盖。
猫地名.sql
再见,1.3GB 的数据。
如何避免命令行错别字
您可以养成一些好习惯来帮助避免犯这些类型的错误。
尽可能使用制表符补全。 您将避免目录路径和文件名中的空格问题。
为您偶尔需要使用的又长又复杂的命令创建您自己的简短好记的别名。 这样,您就不会因为使用错误的选项和参数而搞砸了。
校对您自己的作品是出了名的困难,但这就是您需要在命令行上做的事情。 阅读真正的内容。 不要只看一眼就认为它说的是您要输入的内容。 它到底在说什么? 因为那是它真正要做的。
相关:你不应该在 Linux 上运行的 8 个致命命令