kb. A minimalist knowledge base manager 一個極簡的知識庫管理器



測試環境

  • Ubuntu 20.04.4 LTS
  • CentOS
  • MacOS

前言

發現自己太過頻繁地花時間在找特定的資料,例如:寫程式的指南、某台電腦的IP、如何使用某個Linux指令等等。所以在想是否有個小工具,能將常用資料加入知識庫中,方便快速搜索特定資料,增加工作效率,最好還能多台電腦同步。在Github上找到了一個名為 kb 的工具,可提供一種快速直觀的方式來獲取使用者建的知識庫,解決這個問題。

kb簡介

kb 是一個極簡命令式知識庫管理器,可用來快速收集筆記、組織分類、及快速查找的功能。雖然 kb 主要針對基於文本的筆記收集,但它也支持非文本文件,例如圖像、pdf等。基本上,kb 提供了一種基於文本的簡潔方式來組織您的知識

kb 的特點:

  1. 將筆記、指南、程序、備忘單的項目收集到一個有組織的知識庫中
  2. 可對數據加以分類並標記,例如:標題、類別、標籤等 (add)
  3. 可使用(或不使用)語法高亮顯示知識庫中的項目 (view)
  4. 可使用正則表達式來查找知識庫 (grep)
  5. 導入/導出整個知識庫 (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

參考資料

kb. A minimalist knowledge base manager

git-crypt - transparent file encryption in git