? ? ?使用 Linux 最酷的事情之一就是隨著時(shí)間的推移,你可以不斷獲得新的知識(shí)。每天,你都可能會(huì)遇到一個(gè)新的實(shí)用工具,或者只是一個(gè)不太熟悉的奇技淫巧,但是卻非常有用。這些零碎的東西并不總是能夠改變生活,但是卻是專業(yè)知識(shí)的基礎(chǔ)。
即使是專家,也不可能事事皆知。無(wú)論你有多少經(jīng)驗(yàn),可能總會(huì)有更多的東西需要你去學(xué)習(xí)。所以,在這兒我列出了七件關(guān)于 Linux 你可能不知道的事情。
1.一個(gè)查找命令歷史的交互模式
你可能對(duì) history 命令非常熟悉,它會(huì)讀取 bash 歷史,然后以編號(hào)列表的方式輸出到標(biāo)準(zhǔn)輸出(stdout)。然而,如果你在 curl 命令的海洋里尋找一個(gè)特定的鏈接(URL),那么這個(gè)列表并不總是那么容易閱讀的。
你還可以有另一個(gè)選擇,Linux 有一個(gè)交互式的反向搜索可以幫助你解決這個(gè)問(wèn)題。你可以通過(guò)快捷鍵 ctrl+r啟動(dòng)交互模式,然后進(jìn)入一個(gè)交互提示中,它將會(huì)根據(jù)你提供的字符串來(lái)向后搜索 bash 歷史,你可以通過(guò)再次按下 ctrl+r 向后搜索更老的命令,或者按下 ctrl+s 向前搜索。
注意,ctrl+s 有時(shí)會(huì)與 XON/XOFF 流控制沖突,即 XON/XOFF 流控制也會(huì)使用該快捷鍵。你可以通過(guò)運(yùn)行 stty -ixon 命令來(lái)禁用該快捷鍵。在你的個(gè)人電腦上,這通常是有用的,但是在禁用前,確保你不需要 XON/XOFF 。
2.Cron 不是安排任務(wù)的唯一方式
Cron 任務(wù)對(duì)于任何水平的系統(tǒng)管理員,無(wú)論是毫無(wú)經(jīng)驗(yàn)的初學(xué)者,還是經(jīng)驗(yàn)豐富的專家來(lái)說(shuō),都是非常有用的。但是,如果你需要安排一個(gè)一次性的任務(wù),那么 at 命令為你提供了一個(gè)快捷的方式來(lái)創(chuàng)建任務(wù),從而你不需要接觸 crontab 。
at 命令的運(yùn)行方式是在后面緊跟著你想要運(yùn)行任務(wù)的運(yùn)行時(shí)間。時(shí)間是靈活的,因?yàn)樗С衷S多時(shí)間格式。包括下面這些例子:
at 12:00 PM September 30 2017
at now + 1 hour
at 9:00 AM tomorrow
當(dāng)你以帶參數(shù)的方式輸入 at 命令以后,將會(huì)提示你該命令將在你的 Linux 系統(tǒng)上運(yùn)行。這可能是一個(gè)備份腳本,一套維護(hù)任務(wù),或者甚至是一個(gè)普通的 bash 命令。如果要結(jié)束任務(wù),可以按 ctrl+d 。
另外,你可以使用 atq 命令查看當(dāng)前用戶的所有任務(wù),或者使用 sudo atq 查看所有用戶的任務(wù)。它將會(huì)展示出所有排定好的任務(wù),并且每個(gè)任務(wù)都伴有一個(gè) ID 。如果你想取消一個(gè)排定好的任務(wù),可以使用 atrm 命令,并且以任務(wù) ID 作為參數(shù)。
3.你可以按照功能搜索命令,而不僅僅是通過(guò)名字
記住命令的名字非常困難,特別是對(duì)于初學(xué)者來(lái)說(shuō)。幸運(yùn)的是,Linux 附帶了一個(gè)通過(guò)名字和描述來(lái)搜索 man 頁(yè)面的工具。
下次,如果你沒(méi)有記住你想要使用的工具的名稱,你可以嘗試使用 apropos 命令加上你想要干的事情的描述。比如,apropos build filesystem 將會(huì)返回一系列名字和描述包括了 “build” 和 “filesystem” 單詞的工具。
apropos 命令接受一個(gè)或多個(gè)字符串作為參數(shù),但同時(shí)它也有其他參數(shù),比如你可以使用 -r 參數(shù),從而通過(guò)正則表達(dá)式來(lái)搜索。
4.一個(gè)允許你來(lái)管理系統(tǒng)版本的替代系統(tǒng)
如果你曾進(jìn)行過(guò)軟件開發(fā),你就會(huì)明白跨項(xiàng)目管理不同版本的語(yǔ)言的支持的重要性。許多 Linux 發(fā)行版都有工具可以來(lái)處理不同的內(nèi)建版本。
可執(zhí)行文件比如 java 往往符號(hào)鏈接到目錄 /etc/alternatives 下。反過(guò)來(lái),該目錄會(huì)將符號(hào)鏈接存儲(chǔ)為二進(jìn)制文件并提供一個(gè)管理這些鏈接的接口。Java 可能是替代系統(tǒng)最常管理的語(yǔ)言,但是,經(jīng)過(guò)一些配置,它也可以作為其他應(yīng)用程序替代品,比如 NVM 和 RVM (NVM 和 RVM 分別是 NodeJS 和 Ruby 的版本管理器)。
在基于 Debian 的系統(tǒng)中,你可以使用 update-alternatives 命令創(chuàng)建和管理這些鏈接。在 CentOS 中,這個(gè)工具就叫做 alternatives 。通過(guò)更改你的 alternatives 文件中的鏈接,你便可以安裝一個(gè)語(yǔ)言的多個(gè)版本,并且在不同的情況下使用不同的二進(jìn)制。這個(gè)替代系統(tǒng)也提供了對(duì)任何你可能在命令行運(yùn)行的程序的支持。
5.shred 命令是更加安全的刪除文件方式
我們大多數(shù)時(shí)候總是使用 rm 命令來(lái)刪除文件。但是文件去哪兒了呢?真相是 rm 命令所做的事情并不是像你所想像的那樣,它僅僅刪除了文件系統(tǒng)和硬盤上的數(shù)據(jù)的硬鏈接。硬盤上的數(shù)據(jù)依舊存在,直到被另一個(gè)應(yīng)用重寫覆蓋。對(duì)于非常敏感的數(shù)據(jù)來(lái)說(shuō),這會(huì)帶來(lái)一個(gè)很大的安全隱患。
shred 命令是 rm 命令的升級(jí)版。當(dāng)你使用 shred 命令刪除一個(gè)文件之后,文件中的數(shù)據(jù)會(huì)被多次隨機(jī)覆寫。甚至有一個(gè)選項(xiàng)可以在隨機(jī)覆寫之后對(duì)所有的數(shù)據(jù)進(jìn)行清零。
如果你想安全的刪除一個(gè)文件并且以零覆蓋,那么可以使用下面的命令:
shred -u -z [file name]
同時(shí),你也可以使用 -n 選項(xiàng)和一個(gè)數(shù)字作為參數(shù),從而指定在隨機(jī)覆蓋數(shù)據(jù)的時(shí)候迭代多少次。
6.通過(guò)自動(dòng)更正來(lái)避免輸入很長(zhǎng)的無(wú)效文件路徑
有多少次,你輸入一個(gè)文件的絕對(duì)路徑,然而卻看到“沒(méi)有該文件或目錄”的消息。任何人都會(huì)明白輸入一個(gè)很長(zhǎng)的字符串的痛苦。幸運(yùn)的是,有一個(gè)很簡(jiǎn)單的解決辦法。
內(nèi)建的 shopt 命令允許你設(shè)置不同的選項(xiàng)來(lái)改變 shell 的行為。設(shè)置 cdspell 選項(xiàng)是避免輸入文件路徑時(shí)一個(gè)字母出錯(cuò)的頭痛的一個(gè)簡(jiǎn)單方式。你可以通過(guò)運(yùn)行 shopt -s cdspell 命令來(lái)啟用該選項(xiàng)。啟用該選項(xiàng)后,當(dāng)你想要切換目錄時(shí),會(huì)自動(dòng)更正為最匹配的目錄。
Shell 選項(xiàng)是節(jié)省時(shí)間的一個(gè)好方法(更不用說(shuō)減少麻煩),此外還有許許多多的其他選項(xiàng)。如果想查看你的系統(tǒng)中所有選項(xiàng)的完整列表,可以運(yùn)行不帶參數(shù)的 shopt 命令。需要注意的是,這是 bash 的特性,如果你運(yùn)行 zsh 或者其他可供選擇的 shell,可能無(wú)法使用。
7.通過(guò)子 shell 返回到當(dāng)前目錄
如果你曾經(jīng)配置過(guò)一個(gè)比較復(fù)雜的系統(tǒng),那么你可能會(huì)發(fā)現(xiàn)你需要頻繁的更換目錄,從而很難跟蹤你所在的位置。如果在運(yùn)行完一個(gè)命令后自動(dòng)返回到當(dāng)前位置,不是很好嗎?
Linux 系統(tǒng)實(shí)際上提供了一個(gè)解決該問(wèn)題的方法,并且非常簡(jiǎn)單。如果你想通過(guò) cd 命令進(jìn)入另一個(gè)目錄完成一些任務(wù),然后再返回當(dāng)前工作目錄,那么你可以將命令置于括號(hào)中。你可以在你的 Linux 系統(tǒng)上嘗試下面這個(gè)命令。記住你當(dāng)前的工作目錄,然后運(yùn)行:
(cd /etc && ls -a)
該命令會(huì)輸出 /etc 目錄的內(nèi)容。現(xiàn)在,檢查你的當(dāng)前工作目錄。它和執(zhí)行該命令前的目錄一樣,而不是 /etc 目錄。
它是如何工作的呢?運(yùn)行一個(gè)括號(hào)中的命令會(huì)創(chuàng)建一個(gè)子 shell 或一個(gè)當(dāng)前 shell 進(jìn)程的復(fù)刻副本。該子 shell 可以訪問(wèn)所有的父變量,反之則不行。所以請(qǐng)記住,你是在運(yùn)行一個(gè)非常復(fù)雜的單行命令。
在并行處理中經(jīng)常使用子 shell ,但是在命令行中,它也能為你帶來(lái)同樣的力量,從而使你在瀏覽文件系統(tǒng)時(shí)更加容易。
?
評(píng)論
查看更多