1. 程式人生 > >從零開始的linux 第八章

從零開始的linux 第八章

hash命令緩存 whoami who w

從零開始的linux 第八章


呼~~又是一個美好的一天~~從上一次小編更新到現在,已經經過辣麽長時間啦~是不是有點想念小編呢~~可不要想念小編到瘋掉哦~~

技術分享

好啦同學們,為了走上人生的巔峰,打起精神,努力學習~~...嗯...雖然不努力會很輕松,但是!看看你的口袋裏,還能再掏出來幾張褶皺的毛票??輕松是沒有前途的(吐槽:胡說八道!)

路人甲!!路人甲!!起床上課!!

技術分享

(↑剛睡醒的路人甲)

咦??路人乙,你拿被子幹嘛?

(↓路人乙拿著被子漫不經心的走到床前,啪嘰一聲躺了上去)

技術分享

(↑路人乙)

技術分享猝死個屁,都給小編起來!!小編這麽忙還堅持給你們講課,不聽課的拖出去打死!

(端坐的同學們技術分享


好啦~~小編上一章詳細的介紹了 man 命令幫助文檔的使用方法,同學們務必要養成每遇到一個命令先用 man 命令來獲取幫助~~


那麽,廢話不多說~~小編現在就開始講這章的內容吧~~註意哦~這章的命令是很雜亂的~~(吐槽:你哪次講的不亂!!)

..額..不要在意這些細節啦~~那麽,小編前面講了 alias 別名,內部命令外部命令。那麽,內部命令是嵌入到shell裏的命令,在系統內部就已經有這些命令的路徑,我們在使用時系統會直接到內部尋找(一本正經的胡說),那麽外部命令呢,系統要如何查找呢??這裏我們可以查看 PATH 變量,可以查看外部命令所存放的路徑:

echo $PATH

技術分享

PATH 是存放外部路徑的變量,$ 符號是引用變量,echo 是顯示,總體意思就是:引用PATH變量,將引用的結果顯示出來。嘛~~不懂沒關系,小編以後會講到的~~現在我們看到 PATH 變量的值有以上幾個目錄,這些目錄用“:”分隔開。那,這又是什麽意思呢?這些目錄代表著我們 外部命令 所存放的路徑,當我們在命令行中輸入一條外部命令時,系統會從這幾個目錄中 從左到右 一次查找,那麽,找到這些命令之後僅僅只是執行麽??提問~~路人丙~~

路人丙:“唉??難道不是執行麽?”

額..好吧,並沒什麽錯,確實是執行,但是,執行的同時,還會把這個外部命令的路徑給記錄下來~以便於下次使用時不用從這些目錄中重新查找。

那,將外部命令的路徑記錄在哪呢?當然是記錄在緩存當中啦~~稱為 hash緩存表

hash:顯示執行過的外部命令的緩存(顯示路徑)

技術分享

啊咧??怎麽顯示這些?不用慌嘛~~這句話的意思是 hash緩存表為空。因為 hash 緩存中存放的是外部命令的路徑,而這些路徑的來源是我們執行一個外部命令,系統去 PATH 變量中找出這個外部命令才記錄在 hash 緩存中,所以,hash 緩存表默認是為空的~~


小編現在找一個外部命令執行一下~~比如,man 一下 hash再退出

技術分享

現在,hash表中有內容啦~~內容就是 man 這個外部命令的路徑,從這裏可直觀的看出 man 命令的路徑在 /usr/bin/ 目錄下~~對於 hash 命令,還有哪些用法呢??

hash -d name(命令名字):清空指定命令的緩存

比如,現在小編的 hash 緩存中有 man 命令的緩存,每個hash 緩存前面都會有一個編號,這個編號是這個外部命令執行了多少次。剛才小編執行了一次 man 後退了出來,所以前面為 1,那為了驗證,小編再執行一次。

技術分享

現在,hash 緩存表中的 hits中的一列 man 命令的緩存變成了 2。現在小編就用 hash 的 -d 選項將這條緩存刪除。

技術分享

這樣,就刪除了 man 命令在 hash 中的緩存,因為小編的 hash 緩存中只有 man 這一條緩存,所以刪除後顯示為空。


現在小編的 hash 緩存中有多條記錄

技術分享

小編想把這多條緩存一起清除怎麽辦呢??提問~路人甲~~咦??路人甲...你臉色好難看~~(小編突然看到路人甲捂著肚子~~)

技術分享

(↑一眼就看穿原因的小編):“路人甲可以出去啦~~”


好吧,那就小編來告訴大家吧~~

hash -r:清空所有緩存

技術分享

小編之前的 hash緩存表中是有兩條緩存記錄的,用了 -r 選項後,會清空 hash緩存表中的所有緩存記錄。

除了這些,hash還有哪些選項呢?

hash -t name(命令名字):顯示指定命令在hash緩存中的命令

現在,小編再把 man 的緩存添加到 hash緩存表中,然後用 -t 命令

技術分享

以上就是顯示 man命令在 hash緩存中的路徑。不過我們要查一個命令的路徑也不用這個啦~~小編會給大家介紹一個其他命令的~~所以這些就不用記啦~~


小編到現在已經講了 alias別名,內部命令,PATH外部命令的路徑,hash緩存;實際上我們輸入一條命令的時候,系統是不知道我們輸入的是 外部命令 還是 內部命令,那麽,系統要如何去查找這些命令呢?提問~路人乙~

路人乙:“內個..當然是從別名,內部命令,外部命令和緩存中查啦~”

八嘎!我是讓你說順序啦~~順序~~

技術分享

(↑路人乙)

再次提問~~路人丙~~

路人丙:“這個..先別名,再緩存,再內部命令,最後是外部命令...”

這麽笨,真的是小編教的麽

技術分享

還是小編來說吧~~系統在查找命令時,會先從我們定義的 別名alias,之後是 內部命令,然後是 hash緩存,最後是 PATH變量(外部命令路徑)

綜上: alias --> 內部命令 --> hash --> PATH

當以上的所有都找不到我們輸入的命令時,將會提示 command not find(命令找不到)


好啦~小編上面提到了查找命令的路徑,小編剛才使用 hash -t 來查詢 hash緩存表中的命令的路徑,那小編想查詢其他命令的路徑需要用哪個命令呢?

which:顯示命令的完整路徑

比如,小編現在查一下之前學過的命令的路徑

技術分享

查詢 ls 命令的路徑,從顯示結果可以看出,which 這條命令不僅可以顯示命令的完整路徑,同時命令若有別名,還會將別名一起顯示,顯示別名的下面就是該命令的完整路徑,ls命令的路徑在 /usr/bin/ 目錄下。which 命令還有一些其他的選項,但基本我們都不會用,所以小編這裏就不再做過多的介紹啦~~


另外,再給大家介紹幾個查看用戶信息的命令

whami:顯示當前登錄的用戶

技術分享

那這個命令到底有什麽作用呢??現在是沒什麽用啦~~不過以後寫腳本可是有用的哦~~讓腳本不是管理員不能運行等等,會用到這條命令。

這條命令分開寫,是另一種不同的效果

who am i:顯示當前用戶及終端信息

技術分享

這條命令當開啟多個終端,並使用同一個用戶的時候,可以用來查看。不過,查看終端,咱們有更簡單的命令啦~~小編之前講過用 tty 來查看終端。

who:查看當前登錄系統的用戶

技術分享

who 命令可以用來查看當前系統有哪些用戶登錄,並顯示他們所用的那種終端登錄的~~這個命令還有其他的選項哦~~

who -b:查看系統此次啟動的時間

技術分享

該命令可以查看我們的linux系統在什麽時間啟動的~~ 啊咧??時間好像不對呢~~嘛,算啦~~不改啦,下一章小編給大家介紹時間命令的時候再來一起改時間吧~~~

who -r:查看當前的運行級別

技術分享

該命令可查看當前的運行級別~~那麽,什麽是運行級別呢??在第三章小編跟大家介紹過用 init 5 來進入命令行界面,而這個命令行界面的運行級別就是 5,圖形化的運行級別是 3,具體指什麽,小編以後再跟大家慢慢介紹~~

w:查看登錄當前系統的用戶,並顯示他們在做什麽

技術分享

這個命令所顯示的內容要比 who 命令詳細(嘛,不要在意時間啦~~小編真的是早上寫的博客~)在該命令所顯示的內容最後一列 WHAT 的那一列,顯示這些登錄的用戶在做什麽,比如小編用另一個終端做其他事情,就用 nano 編輯一個文件吧~~再用 w 命令查看

技術分享

看最後一個的 WHAT 的一列,已經出現了 nano 在編輯 /etc 目錄下的 passwd 文件~~


好啦~~雜亂的命令就介紹到這兒吧~~小編要休息咯~~

技術分享

THE END

本文出自 “13125850” 博客,請務必保留此出處http://13135850.blog.51cto.com/13125850/1962137

從零開始的linux 第八章