當進入某個目錄下面的時候,如果忘記名字或者怎么進入的,可以連按兩下tab鍵,這個時候linux會為我們列出來到底有哪些目錄,哪些文件。
而這不是linux系統(tǒng)天生就有的,而是需要complete這個自動補全工具。我們用的linux大多數(shù)都已經安裝。
因為目前我維護10幾臺服務器,經常會進行登陸。雖然我之前使用了別名的方式,但依然不夠靈活,時間長了還是會忘記服務器的名字linux命令,通常還需要看一下記錄別名的文件。這是很麻煩的一件事情。
于是我google了一下,發(fā)現(xiàn)網上關于complete的資料挺多的。我完成了關于我服務器的命令提示linux命令,同時也完成了ssh,scp的命令行提示。這里做一個記錄,供大家參考。
直接上結果:
complete -W "$(echo $(grep '^ssh ' .bash_history | sort -u | sed 's/^ssh //'))" ssh
complete -W "$(echo $(grep '^scp ' .bash_history | sort -u | sed 's/^scp //'))" scp
后臺登陸新增上一次登陸時間與登陸ip記錄,方便用戶查看是否有異常登陸。1、記錄服務器共享文件夾或共享文件的訪問情況,包括讀取、拷貝、修改、刪除、重命名、打印等情況,可以記錄訪問者采用的登錄賬戶、ip地址、mac地址、時間、訪問時長、具體操作情況等。三、功能介紹1、記錄服務器共享文件夾或共享文件的訪問情況,包括讀取、拷貝、修改、刪除、重命名、打印等情況,可以記錄訪問者采用的登錄賬戶、ip地址、mac地址、時間、訪問時長、具體操作情況等。
先看 "$(echo $(grep "^ssh " .bash_history | sort -u | sed 's/^ssh //'))"
這個里面就是執(zhí)行了獲取歷史命令里面以ssh開頭的,排序并去重,然后去掉開頭的ssh.
-W 的意思是 wordlist分割 wordlist 中的單詞,作為候選的補全結果
而最后的ssh,就是執(zhí)行ssh后,觸發(fā)前面的匹配規(guī)則。
當然,scp也是如此。那如果一堆需要管理的服務器呢?
我們可以手寫的方式,一個一個的寫進去,這個完全沒毛病。但是,如果增加了一個服務器,或者你需要直接連接某個數(shù)據(jù)庫或者mongodb/redis呢?可能每次都得添加,還比較麻煩。
這里使用case,esac就是特別好的解決辦法。
舉個例子
我在我的家目錄下創(chuàng)建了一個文件,名字是goto.
里面是一個case語句。
#!/bin/bash
case $1 in
a)
ssh a@example.text.com ;;
b)
ssh b@example.text.com ;;
c)
ssh b@example.text.com ;;
esac
寫完之后,chmod +x goto. 讓文件可以執(zhí)行。然后進入到/etc/bash_completion.d/下,創(chuàng)建一個goto.bash文件,然后寫入
_goto() {
local cur="${COMP_WORDS[COMP_CWORD]}"
local pro=$(echo $(grep ")" /home/guo/goto | cut -f 1 -d ")" ))
COMPREPLY=( $(compgen -W "$pro" -- $cur ) )
}
complete -F _goto goto
其實這個可以像上面的ssh,scp一樣寫到shell里面,但是這里正常情況下一個這些這里。因為/etc/bash_completion.d是專門管理提示腳本的。