在 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 個致命命令