kb. A minimalist knowledge base manager 一個極簡的知識庫管理器
測試環境
- Ubuntu 20.04.4 LTS
- CentOS
- MacOS
前言
發現自己太過頻繁地花時間在找特定的資料,例如:寫程式的指南、某台電腦的IP、如何使用某個Linux指令等等。所以在想是否有個小工具,能將常用資料加入知識庫中,方便快速搜索特定資料,增加工作效率,最好還能多台電腦同步。在Github上找到了一個名為 kb 的工具,可提供一種快速直觀的方式來獲取使用者建的知識庫,解決這個問題。
kb簡介
kb 是一個極簡命令式知識庫管理器,可用來快速收集筆記、組織分類、及快速查找的功能。雖然 kb 主要針對基於文本的筆記收集,但它也支持非文本文件,例如圖像、pdf等。基本上,kb 提供了一種基於文本的簡潔方式來組織您的知識
kb 的特點:
- 將筆記、指南、程序、備忘單的項目收集到一個有組織的知識庫中
- 可對數據加以分類並標記,例如:標題、類別、標籤等 (add)
- 可使用(或不使用)語法高亮顯示知識庫中的項目 (view)
- 可使用正則表達式來查找知識庫 (grep)
- 導入/導出整個知識庫 (import/export)
安裝 kb
pip install -U git+https://github.com/gnebbia/kb
設置 kb 的指令別名(alias)
cat <<EOF > ~/.kb_alias
alias kbl="kb list"
alias kbe="kb edit"
alias kba="kb add"
alias kbv="kb view"
alias kbd="kb delete --id"
alias kbg="kb grep"
alias kbt="kb list --tags"
EOF
echo "source ~/.kb_alias" >> ~/.bashrc
source ~/.kb_alias
kb 常用指令
#Add file
kba fileName
## List files
kbl
kbl -v
## View file
kbv fileName
kbv --id #
(kbl)
(kbl -v)
將知識庫同步到Github上
# Create a repo at Github
# The branch name change to 'main'
# Create kb git sync function
kb sync init
# enter your repo path: git@github.com:xxx/xxx.git
# Rename the branch of kb git repo. and push one time
# 'git init' default set branch name to 'master' not 'main'
# but kb sync command only accept 'main' branch to push/pull
cd ~/.local/share/kb
git branch -m master main
# 先手動push一次,之後就可以用kb sync push/pull的指令進行
git push --set-upstream origin main
# or
git push -u origin HEAD
同步kb知識庫指令
#從Github下載知識庫
kb sync pull
#上傳知識庫到Github
kb sync push
# if you get error below:
# Some error occurred while pushing the code
# but this command will create a commit in /home/userName/.local/share/kb
# mean your branch name is not right, you can pull manually by
cd /home/userName/.local/share/kb
git push
Template使用方法
#列出目前所有template
kb template list
#編輯template文件
kb template edit default
(以#開頭的文字以黃色顯示) (以!開頭的文字以紅色顯示) (以;;開頭的文字以綠色顯示)
例如有個文字內容為:
# This is the Title
;; comment here
! red color text
使用kbv這個文件將顯示:
修改已在知識庫中的檔案參數(標題/類別/標籤)-使用 kb update 指令
#kb update help文件
kb update -h
usage: kb update [-h] [-i ID] [-t TITLE] [-c CATEGORY] [-g TAGS] [-a AUTHOR] [-s STATUS] [--template TEMPLATE]
[-e] [-b BODY]
optional arguments:
-h, --help show this help message and exit
-i ID, --id ID ID of the artifact to update
-t TITLE, --title TITLE
Title to update
-c CATEGORY, --category CATEGORY
Category to update
-g TAGS, --tags TAGS Tags to update in the form "tag1;tag2;...;tagN"
-a AUTHOR, --author AUTHOR
Author to update
-s STATUS, --status STATUS
Status to update
--template TEMPLATE Template to update
-e, --edit-content Edit content of the artifact with an editor
-b BODY, --body BODY Update the body of the artifact (erases the current content)
使用方法:kb update -i 4 -t TEST_KB -c manual -g “test;kb”
查找特定資料
#檔名有gui的資料
kbl gui
#Tags有kb的資料
kbl -g kb
#Tags有kb + 在default分類中的資料
kbl -g kb -c default
Apps (viewer and editor) for kb
# Install GNOME Image Viewer
sudo apt-get install eog
# Install Gedit
sudo apt-get install gedit
# Set default editor tool
export EDITOR=/usr/bin/gedit
# Install PDF Viewer
sudo apt-get install evince
# Install Markdown Editor
sudo apt-get install retext
# change file name to *.mkd
kb update -i 1 -t kb_README.mkd
# using kbv also can modify the file
# but using kve will open file with gedit
遇到一個大問題 - 資料加密
成功使用kb sync push
將知識庫上傳Github了,但是…
這樣我的所有「私人筆記資料」不就被大家看光光了嗎?(沒錯)
後來找到’git-crypt’這個git的輔助工具,可在git push/pull時進行加密/解密
如下是經過git-crypt上傳的純文字檔,無法在Github上顯示 (水啦)
Install git-crypt for Linux
# Install openssl
sudo apt-get install libssl-dev # for Ubuntu
yum install openssl-devel # for CentOS
# Clone the git-crypt repo., make and install
git clone https://github.com/AGWA/git-crypt
cd git-crypt
make
make install
Install git-crypt for MacOS
brew install git-crypt
Init the git-crypt to repo
cd /home/userName/.local/share/kb
git-crypt init
#設定哪些資料需要進行加密
vim .gitattributes
data/** filter=git-crypt diff=git-crypt
.gitattributes !filter !diff
加密設定
#Generate key,填入User_ID
gpg --gen-key
gpg --list-keys #List key
# Add key to git-crypt
git-crypt add-gpg-user USER_ID
#export the key
git-crypt export-key ~/mykey
git-crypt 注意事項
- 在設定好 git-crypt 前的資料不會被加密
- 產生的key可用export方式保存,之後別台電腦要使用
如何在另一台電腦上同步 kb 知識庫
#Gen a key, and copy key into github
ssh-keygen -t rsa -b 4096 -C "Github_Mail_Address"
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
vim ~/.ssh/id_rsa.pub
#Install git-crype tool
git clone https://github.com/AGWA/git-crypt
make
make install
#Install kb tool, set the alias, add a test_kb.txt file for test
pip install -U git+https://github.com/gnebbia/kb
kba test_kb.txt
# using kba and kbe to find the location of kb data path
# is in: ~/.local/share/kb/data/default/test_kb.txt
# remove this kb folder
cd ~/.local/share/
rm -rf kb
#Clone my kb repo to ~/.local/share/
git clone git@github.com:xxx/xxx.git
#Copy myKey file to this PC
#Unlock this repo
git-crypt unlock /opt/mykey
#Test the kb function
kbl
kb sync pull
kb sync push