Bash shell 三 命令別名與歷史指令

2022-03-30 22:13:25 字數 3337 閱讀 1473

一  命令別名設定: alias, unalias

命令別名是乙個很有趣的東西,特別是你的慣用指令特別長的時候!還有, 增設預設的屬性在一些慣用的指令上面,可以預防一些不小心誤殺檔案的情況發生的時候! 舉個例子來說,如果你要查詢隱藏檔,並且需要長的列出與一頁一頁翻看,那麼需要下達『 ls -al | more 』這個指令,我是覺得很煩啦! 要輸入好幾個單字!那可不可以使用 lm 來簡化呢?!當然可以,你可以在命令列下面下達:

[root@linux ~]# alias lm='ls -l | more'

要注意的是:『alias 的定義規則與變數定義規則幾乎相同』, 另外,命令別名的設定還可以取代既有的指令喔!舉例來說,我們知道 root 可以移除( rm )任何資料!所以當你以 root 的身份在進行工作時,需要特別小心, 但是總有失手的時候,那麼 rm 提供了乙個引數來讓我們確認是否要移除該檔案,那就是 -i 這個引數!所以,你可以這樣做:

[root@linux ~]# alias rm='rm -i'

嘿嘿!那麼以後使用 rm 的時候,就不用太擔心會有錯誤刪除的情況了!這也是命令別名的優點囉! 那麼如何知道目前有哪些的命令別名呢?就使用 alias !

[root@linux ~]# alias

alias l.='ls -d .* --color=tty'

alias ll='ls -l --color=tty'

alias lm='ls -al | more'

alias ls='ls --color=tty'

alias vi='vim'

alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

由上面的資料當中,您也會發現一件事情啊,我們在 vi 文書編輯器 裡面提到 vi 與 vim 是不太一樣的, vi 是比較老,而 vim 可以用來取代 vi 喔。我們的 fc4 明明就同時有 vi/vim ,為何我執行 vi 會是進入 vim 呢?呵呵!那就是因為上面的**當中的『 alias vi='vim' 』這個設定啦! 至於如果要取消命令別名的話,那麼就使用 unalias 吧!例如要將剛剛的 lm 命令別名拿掉,就使用:

[root@linux ~]# unalias lm

二  歷史命令:history

前面我們提過 bash 有提供指令歷史的服務!那麼如何查詢我們曾經下達過的指令呢?就使用 history 囉!當然,如果覺得 histsory 要輸入的字元太多太麻煩,可以使用命令別名來設定呢! 不要跟我說還不會設定呦!

alias h='history'

如此則輸入 h 等於輸入 history 囉!好了,我們來談一談history 的用法吧!

[root@linux ~]# history [n]

[root@linux ~]# history [-c]

[root@linux ~]# history [-raw] histfiles

引數:n :數字,意思是『要列出最近的 n 筆命令列表』的意思!

-c :將目前的 shell 中的所有 history 內容全部消除

-a :將目前新增的 history 指令新增入 histfiles 中,若沒有加 histfiles ,則預設寫入 ~/.bash_history

-r :將 histfiles 的內容讀到目前這個 shell 的 history 記憶中;

-w :將目前的 history 記憶內容寫入 histfiles 中!

範例一:列出目前記憶體內的所有 history 記憶

[root@linux ~]# history

# 前面省略

1017 man bash

1018 ll

1019 history

1020 history

# 列出的資訊當中,共分兩欄,第一欄為該指令在這個 shell 當中的**,

#另乙個則是指令本身的內容喔!至於會秀出幾筆指令記錄,則與 histsize 有關!

範例二:列出目前最近的 3 筆資料

[root@linux ~]# history 3

1019 history

1020 history

1021 history 3

範例三:立刻將目前的資料寫入 histfile 當中

[root@linux ~]# history -w

# 在預設的情況下,會將歷史紀錄寫入 ~/.bash_history 當中!

[root@linux ~]# echo $histsize

1000

在正常的情況下,當我們以 bash 登入 linux 主機之後,系統會主動的由家目錄的 ~/.bash_history 讀取以前曾經下過的指令,那麼 ~/.bash_history 會記錄幾筆資料呢?這就與你 bash 的 histsize 這個變數設定值有關了!在預設的 fc4 底下,是會記錄 1000 筆資料的! 那麼假設我這次登入主機後,共下達過 100 次指令,『等我登出時, 系統就會將 101~1100 這總共 1000 筆歷史命令更新到 ~/.bash_history 當中。』 也就是說,歷史命令在我登出時,會將最近的 histsize 筆記錄到我的紀錄檔案當中啦! 當然,也可以用 history -w 強制立刻寫入的!那為何用『更新』兩個字呢? 因為 ~/.bash_history 記錄的筆數永遠都是 histsize 那麼多,舊的訊息會被主動的拿掉! 僅保留最新的! 那麼 history 這個歷史命令只可以讓我查詢命令而已嗎?呵呵!當然不止啊! 我們可以利用相關的功能來幫我們執行命令呢!舉例來說囉:

[root@linux ~]# !number

[root@linux ~]# !command

[root@linux ~]# !!

引數:number :執行第幾筆指令的意思;

command :由最近的指令向前搜尋『指令串開頭為 command』的那個指令,並執行;

範例:[root@linux ~]# history

66 man rm

67 alias

68 man history

69 history

[root@linux ~]# !66 <==執行第 66 筆指令

[root@linux ~]# !! <==執行上乙個指令,本例中亦即 !66

[root@linux ~]# !al <==執行最近以 al 為開頭的指令(上頭列出的第 67 個)

經過上面的介紹,瞭乎?歷史命令用法可多了!如果我想要執行上乙個指令, 除了使用上下鍵之外,我可以直接以『 !! 』 來下達上個指令的內容,此外, 我也可以直接選擇下達第 n 個指令,『 !n 』來執行,也可以使用指令標頭,例如 『 !vi 』來執行最近指令開頭是 vi 的指令列!

命令別名與歷史命令

列出目前已有的命令別名 用法 1.alias dmtsai study alias parameter p 列印已經設定的命令別名 範例1 將來執行 rm i 命令就可以直接輸入 rm 進行使用 dmtsai study alias rm rm i 範例2 將清屏clear命名為cls dmtsai...

Bash Shell命令流程

2.什麼是內部命令,什麼是外部命令 3.如何檢查使用者輸入的命令是內部命令還是外部命令 cd命令屬於shell內部命令 root linux node1 type a cd cd is a shell builtin cd is usr bin cd ping屬於外部命令,同時會列印當前命令路徑 r...

命令別名與歷史命令 alias,history

命令的別名 alias 命令別名是乙個很有趣的東西,特別是慣用指令特別長的時候!還有,增設預設的選項在一些慣用的指令上面,可以預防一些不小心誤殺檔案的情況發生的時候!舉個例子來說,如果你要查詢隱藏檔,並且需要長的列出與一頁一頁翻看,那麼需要下達 ls al more 這個指令,我是覺得很煩啦!要輸入...