天天看點

你懂 Linux 嗎?關于 Linux 你可能不是非常了解的七件事

使用 Linux 最酷的事情之一就是随着時間的推移,你可以不斷獲得新的知識。每天,你都可能會遇到一個新的實用工具,或者隻是一個不太熟悉的奇技淫巧,但是卻非常有用。這些零碎的東西并不總是能夠改變生活,但是卻是專業知識的基礎。

即使是專家,也不可能事事皆知。無論你有多少經驗,可能總會有更多的東西需要你去學習。是以,在這兒我列出了七件關于 Linux 你可能不知道的事情。

<a href="http://s3.51cto.com/wyfs02/M01/A6/D2/wKioL1ncSbSwKWiaAAA2pPFtCHE197.jpg-wh_651x-s_2772890648.jpg" target="_blank"></a>

你可能對 history 指令非常熟悉,它會讀取 bash 曆史,然後以編号清單的方式輸出到标準輸出(stdout)。然而,如果你在 curl 指令的海洋裡尋找一個特定的連結(URL),那麼這個清單并不總是那麼容易閱讀的。

你還可以有另一個選擇,Linux 有一個互動式的反向搜尋可以幫助你解決這個問題。你可以通過快捷鍵 ctrl+r啟動互動模式,然後進入一個互動提示中,它将會根據你提供的字元串來向後搜尋 bash 曆史,你可以通過再次按下 ctrl+r 向後搜尋更老的指令,或者按下 ctrl+s 向前搜尋。

注意,ctrl+s 有時會與 XON/XOFF 流控制沖突,即 XON/XOFF 流控制也會使用該快捷鍵。你可以通過運作 stty -ixon 指令來禁用該快捷鍵。在你的個人電腦上,這通常是有用的,但是在禁用前,確定你不需要 XON/XOFF 。

Cron 任務對于任何水準的系統管理者,無論是毫無經驗的初學者,還是經驗豐富的專家來說,都是非常有用的。但是,如果你需要安排一個一次性的任務,那麼 at 指令為你提供了一個快捷的方式來建立任務,進而你不需要接觸 crontab 。

at 指令的運作方式是在後面緊跟着你想要運作任務的運作時間。時間是靈活的,因為它支援許多時間格式。包括下面這些例子:

當你以帶參數的方式輸入 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 檔案中的連結,你便可以安裝一個語言的多個版本,并且在不同的情況下使用不同的二進制。這個替代系統也提供了對任何你可能在指令行運作的程式的支援。

我們大多數時候總是使用 rm 指令來删除檔案。但是檔案去哪兒了呢?真相是 rm 指令所做的事情并不是像你所想像的那樣,它僅僅删除了檔案系統和硬碟上的資料的硬連結。硬碟上的資料依舊存在,直到被另一個應用重寫覆寫。對于非常敏感的資料來說,這會帶來一個很大的安全隐患。

shred 指令是 rm 指令的更新版。當你使用 shred 指令删除一個檔案之後,檔案中的資料會被多次随機覆寫。甚至有一個選項可以在随機覆寫之後對所有的資料進行清零。

如果你想安全的删除一個檔案并且以零覆寫,那麼可以使用下面的指令:

同時,你也可以使用 -n 選項和一個數字作為參數,進而指定在随機覆寫資料的時候疊代多少次。

有多少次,你輸入一個檔案的絕對路徑,然而卻看到“沒有該檔案或目錄”的消息。任何人都會明白輸入一個很長的字元串的痛苦。幸運的是,有一個很簡單的解決辦法。

内建的 shopt 指令允許你設定不同的選項來改變 shell 的行為。設定 cdspell 選項是避免輸入檔案路徑時一個字母出錯的頭痛的一個簡單方式。你可以通過運作 shopt -s cdspell 指令來啟用該選項。啟用該選項後,當你想要切換目錄時,會自動更正為最比對的目錄。

Shell 選項是節省時間的一個好方法(更不用說減少麻煩),此外還有許許多多的其他選項。如果想檢視你的系統中所有選項的完整清單,可以運作不帶參數的 shopt 指令。需要注意的是,這是 bash 的特性,如果你運作 zsh 或者其他可供選擇的 shell,可能無法使用。

如果你曾經配置過一個比較複雜的系統,那麼你可能會發現你需要頻繁的更換目錄,進而很難跟蹤你所在的位置。如果在運作完一個指令後自動傳回到目前位置,不是很好嗎?

Linux 系統實際上提供了一個解決該問題的方法,并且非常簡單。如果你想通過 cd 指令進入另一個目錄完成一些任務,然後再傳回目前工作目錄,那麼你可以将指令置于括号中。你可以在你的 Linux 系統上嘗試下面這個指令。記住你目前的工作目錄,然後運作:

該指令會輸出 /etc 目錄的内容。現在,檢查你的目前工作目錄。它和執行該指令前的目錄一樣,而不是 /etc 目錄。

它是如何工作的呢?運作一個括号中的指令會建立一個子 shell 或一個目前 shell 程序的複刻副本。該子 shell 可以通路所有的父變量,反之則不行。是以請記住,你是在運作一個非常複雜的單行指令。

在并行進行中經常使用子 shell ,但是在指令行中,它也能為你帶來同樣的力量,進而使你在浏覽檔案系統時更加容易。

作者簡介:

Phil Zona 是 Linux Academy 的技術作家。他編寫了 AWS、Microsoft Azure 和 Linux 系統管理的指南和教程。他同時也管理着 Cloud Assessments 部落格,該部落格旨在幫助個人通過技術實作他們的事業目标。

原文釋出時間為:2017-10-09

本文作者:佚名

本文來自雲栖社群合作夥伴“51CTO”,了解相關資訊可以關注。

繼續閱讀