關於 Linux 你可能不是非常了解的七件事
使用 Linux 最酷的事情之一就是隨著時間的推移,你可以不斷獲得新的知識。每天,你都可能會遇到一個新的實用工具,或者只是一個不太熟悉的奇技淫巧,但是卻非常有用。這些零碎的東西並不總是能夠改變生活,但是卻是專業知識的基礎。
即使是專家,也不可能事事皆知。無論你有多少經驗,可能總會有更多的東西需要你去學習。所以,在這兒我列出了七件關於 Linux 你可能不知道的事情。
一個查找命令歷史的交互模式
你可能對 history 命令非常熟悉,它會讀取 bash 歷史,然後以編號列表的方式輸出到標準輸出(stdout)。然而,如果你在 curl 命令的海洋里尋找一個特定的鏈接(URL),那麼這個列表並不總是那麼容易閱讀的。
你還可以有另一個選擇,Linux 有一個互動式的反向搜索可以幫助你解決這個問題。你可以通過快捷鍵 ctrl+r啟動交互模式,然後進入一個交互提示中,它將會根據你提供的字元串來向後搜索 bash 歷史,你可以通過再次按下 ctrl+r 向後搜索更老的命令,或者按下 ctrl+s 向前搜索。
注意,ctrl+s 有時會與 XON/XOFF 流控制衝突,即 XON/XOFF 流控制也會使用該快捷鍵。你可以通過運行 stty -ixon 命令來禁用該快捷鍵。在你的個人電腦上,這通常是有用的,但是在禁用前,確保你不需要 XON/XOFF 。
Cron 不是安排任務的唯一方式
Cron 任務對於任何水平的系統管理員,無論是毫無經驗的初學者,還是經驗豐富的專家來說,都是非常有用的。但是,如果你需要安排一個一次性的任務,那麼 at 命令為你提供了一個快捷的方式來創建任務,從而你不需要接觸 crontab 。
at 命令的運行方式是在後面緊跟著你想要運行任務的運行時間。時間是靈活的,因為它支持許多時間格式。包括下面這些例子:
at 12:00 PM September 30 2017at now + 1 hourat 9:00 AM tomorrow
當你以帶參數的方式輸入 at 命令以後,將會提示你該命令將在你的 Linux 系統上運行。這可能是一個備份腳本,一套維護任務,或者甚至是一個普通的 bash 命令。如果要結束任務,可以按 ctrl+d 。
另外,你可以使用 atq 命令查看當前用戶的所有任務,或者使用 sudo atq 查看所有用戶的任務。它將會展示出所有排定好的任務,並且每個任務都伴有一個 ID 。如果你想取消一個排定好的任務,可以使用 atrm 命令,並且以任務 ID 作為參數。
你可以按照功能搜索命令,而不僅僅是通過名字
記住命令的名字非常困難,特別是對於初學者來說。幸運的是,Linux 附帶了一個通過名字和描述來搜索 man 頁面的工具。
下次,如果你沒有記住你想要使用的工具的名稱,你可以嘗試使用 apropos 命令加上你想要乾的事情的描述。比如,apropos build filesystem 將會返回一系列名字和描述包括了 「build」 和 「filesystem」 單詞的工具。
apropos 命令接受一個或多個字元串作為參數,但同時它也有其他參數,比如你可以使用 -r 參數,從而通過正則表達式來搜索。
一個允許你來管理系統版本的替代系統
如果你曾進行過軟體開發,你就會明白跨項目管理不同版本的語言的支持的重要性。許多 Linux 發行版都有工具可以來處理不同的內建版本。
可執行文件比如 java 往往符號鏈接到目錄 /etc/alternatives 下。反過來,該目錄會將符號鏈接存儲為二進位文件並提供一個管理這些鏈接的介面。Java 可能是替代系統最常管理的語言,但是,經過一些配置,它也可以作為其他應用程序替代品,比如 NVM 和 RVM (NVM 和 RVM 分別是 NodeJS 和 Ruby 的版本管理器)。
在基於 Debian 的系統中,你可以使用 update-alternatives 命令創建和管理這些鏈接。在 CentOS 中,這個工具就叫做 alternatives 。通過更改你的 alternatives 文件中的鏈接,你便可以安裝一個語言的多個版本,並且在不同的情況下使用不同的二進位。這個替代系統也提供了對任何你可能在命令行運行的程序的支持。
shred 命令是更加安全的刪除文件方式
我們大多數時候總是使用 rm 命令來刪除文件。但是文件去哪兒了呢?真相是 rm 命令所做的事情並不是像你所想像的那樣,它僅僅刪除了文件系統和硬碟上的數據的硬鏈接。硬碟上的數據依舊存在,直到被另一個應用重寫覆蓋。對於非常敏感的數據來說,這會帶來一個很大的安全隱患。
shred 命令是 rm 命令的升級版。當你使用 shred 命令刪除一個文件之後,文件中的數據會被多次隨機覆寫。甚至有一個選項可以在隨機覆寫之後對所有的數據進行清零。
如果你想安全的刪除一個文件並且以零覆蓋,那麼可以使用下面的命令:
shred -u -z [file name]
同時,你也可以使用 -n 選項和一個數字作為參數,從而指定在隨機覆蓋數據的時候迭代多少次。
通過自動更正來避免輸入很長的無效文件路徑
有多少次,你輸入一個文件的絕對路徑,然而卻看到「沒有該文件或目錄」的消息。任何人都會明白輸入一個很長的字元串的痛苦。幸運的是,有一個很簡單的解決辦法。
內建的 shopt 命令允許你設置不同的選項來改變 shell 的行為。設置 cdspell 選項是避免輸入文件路徑時一個字母出錯的頭痛的一個簡單方式。你可以通過運行 shopt -s cdspell 命令來啟用該選項。啟用該選項後,當你想要切換目錄時,會自動更正為最匹配的目錄。
Shell 選項是節省時間的一個好方法(更不用說減少麻煩),此外還有許許多多的其他選項。如果想查看你的系統中所有選項的完整列表,可以運行不帶參數的 shopt 命令。需要注意的是,這是 bash 的特性,如果你運行 zsh 或者其他可供選擇的 shell,可能無法使用。
通過子 shell 返回到當前目錄
如果你曾經配置過一個比較複雜的系統,那麼你可能會發現你需要頻繁的更換目錄,從而很難跟蹤你所在的位置。如果在運行完一個命令後自動返回到當前位置,不是很好嗎?
Linux 系統實際上提供了一個解決該問題的方法,並且非常簡單。如果你想通過 cd 命令進入另一個目錄完成一些任務,然後再返回當前工作目錄,那麼你可以將命令置於括弧中。你可以在你的 Linux 系統上嘗試下面這個命令。記住你當前的工作目錄,然後運行:
(cd /etc && ls -a)
該命令會輸出 /etc 目錄的內容。現在,檢查你的當前工作目錄。它和執行該命令前的目錄一樣,而不是 /etc 目錄。
它是如何工作的呢?運行一個括弧中的命令會創建一個子 shell 或一個當前 shell 進程的復刻副本。該子 shell 可以訪問所有的父變數,反之則不行。所以請記住,你是在運行一個非常複雜的單行命令。
在並行處理中經常使用子 shell ,但是在命令行中,它也能為你帶來同樣的力量,從而使你在瀏覽文件系統時更加容易。
作者簡介:
Phil Zona 是 Linux Academy 的技術作家。他編寫了 AWS、Microsoft Azure 和 Linux 系統管理的指南和教程。他同時也管理著 Cloud Assessments 博客,該博客旨在幫助個人通過技術實現他們的事業目標。
via: http://opensourceforu.com/2017/09/top-7-things-linux-may-not-known-far/
作者:PHIL ZONA 譯者:ucasFL 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出
推薦閱讀:
※為什麼命令行界面(CLI)並未隨著命令行操作系統(如 DOS)的淘汰而消亡?
※實踐中,你用過哪些由簡單命令組裝起來的複雜命令行?
※有哪些高效但是不常見的CLI命令?
※怎麼同時用不同的顏色輸出同一內容?
※如何善加利用 Mac 下的 Terminal ?