文章首發於個人公衆號:「阿拉平平」
在 Linux 中,我們可以通過 history 查詢並運行之前執行過的命令。但是對於 高頻使用 與 相對複雜 的命令行,有沒有什麼好用的工具便於我們去管理呢?
本文將介紹 navi 的安裝和使用方法,版本爲 v0.15.3。
navi 簡介
navi 是一個可交互的命令行備忘工具。用戶可以執行備忘錄中的命令,navi 也支持自定義備忘錄以及命令行參數提示。
源碼安裝
本文通過源碼安裝,演示環境爲 CentOS 7.5。更多安裝方法可以參考 GitHub[1] 。
安裝 fzf
fzf 是一款功能強大的命令行模糊搜索工具。安裝步驟如下:
# 下載 fzf
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
# 安裝 fzf,執行後會詢問一些開關配置,都設置開啓即可
~/.fzf/install
# 重載配置文件
source ~/.bashrc
安裝 navi
fzf 安裝後,執行以下步驟安裝 navi:
# 下載 navi
git clone --depth 1 https://github.com/denisidoro/navi /opt/navi
# 安裝 navi
cd /opt/navi
sudo make install
# (可選)安裝到其它路徑,生成的文件相當於一個快捷方式
./scripts/install /some/path
使用方法
本章將會介紹 navi 的基本操作以及如何自定義備忘錄。
基本操作
安裝完成後,輸入 navi 就可以進入到交互界面。如下:
如果不希望直接運行命令,可以加上 --print
參數,終端將會打印命令行:
navi --print
如果需要預先過濾輸出結果,可以通過 query
子命令:
navi query <cmd>
如果本地丟失了默認的備忘錄,可以通過 search
子命令從線上倉庫搜索對應的備忘錄:
navi search <cmd>
其它的選項可以通過 --help
參數進行查詢。
自定義備忘錄
navi 已經集成了許多備忘錄。默認的備忘錄都放在 cheats 目錄下,一個 .cheat
文件即表示一張備忘錄:
cheats
├── android.cheat
├── brew.cheat
├── compression.cheat
├── crontab.cheat
├── docker.cheat
├── fly.cheat
├── git.cheat
├── gpg.cheat
├── javascript.cheat
├── k3d.cheat
├── keytool.cheat
├── kubernetes.cheat
├── misc.cheat
├── mysql.cheat
├── network.cheat
├── openssl.cheat
├── osx.cheat
├── systemctl.cheat
└── yum.cheat
自定義備忘錄是 navi 的核心功能。在編寫前,我們需要了解下備忘錄的語法:
%
:以%
開頭的行表示爲命令行添加特定的標籤,多個標籤以,
分隔。
#
:以#
開頭的行表示對命令行的用途進行描述。
$
:以$
開頭的行表示命令行參數的可選值。
<>
:以<>
包裹的字符串表示變量。
接下來我將自定義一張用戶相關的備忘錄,包含用戶的查詢、添加以及設置密碼。
首先,在 cheats 目錄下新建 user.cheat 文件,添加以下內容:
[root@localhost cheats]# vi user.cheat
% user, demo
# Active User List
cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1"|"$3"|"$4 }'|more
說明:.cheat 文件可以放到任意路徑下,然後通過 --path
參數去指定。但是,如果這張備忘錄裏只有一條命令則會直接執行。
上面的命令會顯示系統中的活躍用戶名、用戶ID以及組ID。運行結果如下:
接着,新增添加用戶的命令:
# Add User
useradd <username>
運行時會要求輸入 username
:
最後,結合活躍用戶的命令,新增設置用戶密碼的命令:
# Reset User Password
passwd <user>
$ user: cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1 }'|more
添加 www 用戶後,設置密碼時就可以選中該用戶:
再查看下活躍用戶,可以看到 www 用戶已在列表中:
參考文檔:
[1] Github: https://github.com/denisidoro/navi