Linux上的離線字典——GoldenDict

GoldenDict是一款方便的字典應用,不僅支持離線字典和屏幕取詞,也支持在線辭典服務。Fedora直接從軟件倉庫安裝goldendict即可,默認的屏幕取詞快捷鍵是Ctrl+C+C。

分享幾個字典的下載地址:https://1drv.ms/f/s!AiSujQyFSc-uab_ItF61BBKnLUs。GoldenDict中的字典順序也是下面順序。

  1. Babylon_English_Chinese_S_.BGL
  2. Babylon_Chinese_S_English.BGL
  3. Oxford_Advanced_Learner_English-Chinese_Dictionary-4th.bgl
  4. ConciseOxfordEnglishDictionary.dsl.dz
  5. Oxford English Dictionary (2nd Edition) .bgl
  6. 现代汉英词典(金山).dsl.dz

安卓也有GoldenDict可用,我用的免費版(谷歌市場:GoldenDict Free),有最大5個字典的限制,但是也夠用了。

youtube-dl

之前用過一些在線提取和轉換YouTube視頻的服務,近來發現這些提取或轉換的鏈接要求ip一致,那就無法用洋蔥網絡下載了。好在發現youtube-dl這麼個好工具,不僅能下載單集視頻還能下載視頻列表;不僅能單獨下載字幕還能把字幕合入視頻,非常強大。目前用的這幾個參數,記錄一下。

#安裝youtube-dl
sudo dnf install youtube-dl
##單個視頻下載
#查看可下載的視頻,注意audio only的視頻,沒有伴音的哦
youtube-dl https://www.youtube.com/watch?v=qU52CFGTGu0 -F
#下載編號為22的視頻
youtube-dl --proxy socks5://127.0.0.1:9150 qU52CFGTGu0 -f 22
#續傳中斷的視頻
youtube-dl --proxy socks5://127.0.0.1:9150 qU52CFGTGu0 -f 22 --continue
#列出所有字幕
youtube-dl --proxy socks5://127.0.0.1:9150 qU52CFGTGu0 --list-subs
#只下載字幕而不下載視頻
youtube-dl --all-subs --skip-download --proxy socks5://127.0.0.1:9150 https://www.youtube.com/watch?v=qU52CFGTGu0
#使用aria2搭配proxychains實現多進程下載
sudo dnf install aria2 proxychains-ng
proxychains4 youtube-dl -f mp4 --external-downloader aria2c --external-downloader-args '-c -j4 -x 4 -s 4 -k 5M' lW0ugxbtIEE
##視頻列表下載
#將視頻列表中的視頻連接輸出到文本文件
youtube-dl -j --flat-playlist "https://www.youtube.com/playlist?list=PLATwx1z00HsdanKZcTMQEc-n_Bhu_aZ76" | jq -r '.id' | sed 's_^_https://youtu.be/_' > list.log
#從文件里讀取視頻地址並下載,下載過的會保存於done.txt不會重複下載
youtube-dl -f mp4 --external-downloader aria2c --external-downloader-args '-c -j5 -x 5 -s 5 -k 10M --max-download-limit 1024k' --batch-file list.log --download-archive done.txt

參考:youtube-dl批量下载时,跳过之前已经下载过的文件

Fedora使用Impactor安裝ipa

使用Impactor可以為蘋果手機安裝ipa程序,無論手機是否越獄。從Cydia Impactor下載需要的包並解壓。

./Impactor

./Impactor: error while loading shared libraries: libudev.so.0: cannot open shared object file: No such file or directory
#若出現上述錯誤則
sudo ln -sf /usr/lib64/libudev.so.1 /usr/lib64/libudev.so.0

./Impactor: error while loading shared libraries: libatomic.so.1: cannot open shared object file: No such file or directory
#若出現上述錯誤則
sudo dnf install libatomic

./Impactor: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
#若出現上述錯誤則
sudo dnf install ncurses-compat-libs

啟動Impactor後,先選中手機,再在Device>Install package選擇要安裝的包,輸入蘋果賬號密碼即可。




Fedora找尋丟失庫的方法,如

./Impactor: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
sudo dnf provides libncurses.so.5
ncurses-compat-libs-6.0-8.20170212.fc26.i686 : Ncurses compatibility libraries
軟體庫    :fedora
符合之來源:
Provide    : libncurses.so.5
sudo dnf install ncurses-compat-libs

AFWall+ 安卓可用的iptables

安卓手機如果root了,便可以通過AFWall+Github項目地址)來使用iptables管控網絡。

在安卓上使用DNSCrypt

由於TCP旁路阻斷技術的應用,DNSCrypt已經不能為日常使用網絡帶來太多方便,所以僅僅是記錄一下使用方法而已。先安裝好AFWall+並根據自己的喜好定製軟件的聯網規則,然後啟用iptables。我們使用Termux來至執行iptabls命令。根據自己的手機系統下載dnscrypt-proxy,比如我的就是dnscrypt-proxy-android_arm64-2.0.17.zip。如果不知道自己的手機系統,可以運行uname -a,如果出現aarch64就跟我一樣下載android_arm64版本就行。下載後解壓到/data/data/com.termux/files/home/opt/dns目錄里。複製一份文件夾里的配置文件即cp example-dnscrypt-proxy.toml dnscrypt-proxy.toml就可以了。下面的文件我是放在家目錄下的,文件名是dns.sh,記得加上執行權限。

remove127(){
  /system/bin/iptables -t nat -D OUTPUT -p tcp --dport 53 -j DNAT --to-destination 127.0.0.1:53&&/system/bin/iptables -t nat -D OUTPUT -p udp --dport 53 -j DNAT --to-destination 127.0.0.1:53
}
add127(){
  /system/bin/iptables -t nat -I OUTPUT -p tcp --dport 53 -j DNAT --to-destination 127.0.0.1:53&&/system/bin/iptables -t nat -I OUTPUT -p udp --dport 53 -j DNAT --to-destination 127.0.0.1:53
}
startDns(){
  /data/data/com.termux/files/home/opt/dns/dnscrypt-proxy -config /data/data/com.termux/files/home/opt/dns/dnscrypt-proxy.toml > /dev/null 2>1 &
  echo "starting dns"
  sleep 15
}
stopDns(){
  pkill dnscrypt-proxy
  echo "killed dns"
}
test(){
  var1=$(su -c "/system/bin/iptables -C OUTPUT -p tcp --dport 53 -j DNAT --to-destination 127.0.0.1:53")
}
status(){
  vt1="$(ps -ef | grep dnscrypt-proxy | wc -l)"
  if [[ $vt1 = "2" ]]; then
    dnsproxyStatus="1"
  else
    dnsproxyStatus="0"
  fi
  vt2="$(/system/bin/iptables -t nat -L | grep 127.0.0.1:53 | wc -l)"
  if [[ $vt2 = "2" ]]; then
    iptablesStatus="1"
  else
    iptablesStatus="0"
  fi
}
if [[ $1 = "1" ]]; then
  echo "start"      
  remove127              
  sleep 5                
  startDns       
  add127
elif [[ $1 = "2" ]]; then
  echo "restart"        
  remove127
  stopDns         
  sleep 3           
  startDns               
  add127 
elif [[ $1 = "0" ]]; then
  echo "stop"
  remove127
  stopDns
elif [[ $1 = "s" ]]; then
  status
  echo "dns: $dnsproxyStatus | iptables: $iptablesStatus"
else
  status
  if [[ $dnsproxyStatus = "1" ]]; then
    echo "$(date) dns ok" >> /data/data/com.termux/files/home/log.log
  else
    remove127
    stopDns
    remove127
    sleep 5
    startDns
    add127
    echo "$(date) dns started" >> /data/data/com.termux/files/home/log.log
  fi
  
fi
#使用說明
#首先切換的超級用戶
su
#查看當前狀態,1代表開啟,0代表關閉
./dns.sh s
#關閉dnscrypt-proxy
./dns.sh 0
#開啟dnscrypt-proxy
./dns.sh 1
#重新啟動dnscrypt-proxy
./dns.sh 2

啟動完成後可以通過dnsleaktest.com來查看當前的本機的dns。本來腳本還做了自啟動的適配,但是無論是Termux的自動啟動還是Magisk的自動啟動,都不太好用就算了。

使用GnuPG加密文件

GnuPG加密情景

42想發送一條消息給55,並且這條消息只有55能看到。首先42和55都用GnuPG生成自己的公鑰和私鑰。然後55把公鑰交給42,公鑰怎麼傳遞都行,不需要保密。42使用自己的私鑰和55的公鑰來把消息加密,生成加密的消息發給55。55拿到加密的消息後用自己的私鑰解密即可看到原始消息。

安卓使用OpenKeychain

F-Droid或Google Play下載OpenKeychain,導入已有證書(公鑰私鑰均可導入)或生成新的證書。然後通過二維碼或你喜歡的其他方式分享公鑰。發送者使用接收者的公鑰和自己的私鑰加密文件,然後發送加密文件給接收者,接收者用自己的私鑰解開文件。使用OpenKeychain,不僅可以方便的加密與解密文件和文本,更可與K-9 Mail搭配實現加密的郵件。

命令行使用GnuPG

Fedora似乎時預裝了GnuPG和GnuPG2,我們可以用gpg和gpg2來使用它。Termux可以使用pkg install gunpg,用法是一樣的,而且版本是最新版。Fedora26比最新版還差一個小版本。我樂於追新,所以這裡都用gpg2。順便提一下,GnuPG念做“格努皮即”。關於GNU有興趣的朋友可以到GNU作業系統與自由軟體運動了解下。

##生成一對密鑰
gpg2 --full-generate-key
#密鑰種類默認RSA和RSA即可
#RSA密鑰長度默認2048即可
#過期日期默認0即永久,後面會講撤銷方法
#繼續輸入名字、郵箱和注釋
#然後就開始生成密鑰了,這時可以做些移動鼠標敲擊鍵盤的動作幫助程序獲取隨機數
#Termux可能要一兩分鐘,Fedora貌似20秒就搞定了
##導入導出刪除撤銷密鑰
#列出已有的密鑰
gpg2 --list-keys
#列出密鑰的指紋
gpg2 --fingerprint
#為密鑰生成撤銷證書
gpg2 --gen-revoke fred42 > revoke_fred42.txt
#導出一把公鑰,-a表示轉換為可打印字符
gpg2 --export -a fred42 > public.key
#導出一把公鑰,-a表示轉換為可打印字符
gpg2 --export-secret-key fred42 > private.key
#導入一把密鑰
gpg2 --import public.key
#刪除一把公鑰
gpg2 --delete-key fred42
#刪除一把私鑰
gpg2 --delete-secret-key fred42
##使用密鑰服務器上傳搜索與下載公鑰
#Please blame the wall

我的公鑰指紋:E7F7 D0FE C38C 3975 67AA 3FC1 1168 09F0 24AF 514A和公鑰:

-----BEGIN PGP PUBLIC KEY BLOCK-----

mQENBFs9g5gBCADaGfBtFMSsNeGDhej021SuvCWOQUFbLnBxkNUIuolcy564AlA6
AqX4R/HC286Yy3Si4m4bJsNjDQASl79sE99DBi4nL66gko6R+5/o62b/QfuZ0R1N
sUGHNSyfzM65zqTeAcow7ukzRe67q1fMDKMr1/R4uXlpXhTMmVJ9mTvO8zy7hX7B
NT77wdLIP2m/ywI2l2LmeoQMkxzKNWwDa8I1OY36NLrpWd4F4vVIg3MMwazMeHGe
CkWMq60oEkfcy/VSiVxF+4XTv97IZ7/xSi+NzNvt56AJr/VbSMvIyQLkNtIotH4A
3+l3h9ckFwhUr+0DgLzoLWLc0BV215zSYu+hABEBAAG0JmZyZWQ0MiAoRnJlZCBa
ZW5nKSA8aW5uZXI0MkBnbWFpbC5jb20+iQFOBBMBCAA4FiEE5/fQ/sOMOXVnqj/B
EWgJ8CSvUUoFAls9g5gCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQEWgJ
8CSvUUohnQgAoXrDgRKN4+NLmX3o2Jlr89TzfgTnS5mr/COEOBQX60rk6AGhXRN6
xH7TXz8DW84JjgWHl5GHuso2qlsdl565KjzaisV3KyVdD/f4wZae2uDnnzkrmQcR
SuusV1iqWaNdArOEi1WC5MDsfCVP8ulILI8rK6YAOwp6Fj/5BGBm2V9gSfjB3eat
WaSoDTeCwoHVcpXtBbFZ8wDiy9IfW9YT7HPmIhwn+pevE6QfBLDseajklvSNgupR
1dp/mXTSlbcTqVMn1hR4yByeiFF5MXakPF0O9bSQLwx0RkybLUychcjoecmT3iIZ
Xm2PCaic3j/XwXsqbsqL5OxoCi3B6Fyrk7kBDQRbPYOYAQgAq73LJIbu24l73zLF
XQfH8XVuRCe94qjKuNYdaJRqd3FJqkNFnIJG1E2hhaXj2z869QNsqcRUXr0R0y6k
vayRZLWQhn/jM99kuCioRKt2X8eak+M8kGip94jaqwNpJbiJa2iJjCnMEgTC/6Cm
R8q37m3/EjIMRRVUFxezkZWWNWo3qklIcPatc92aCOEu3ztZ/xvF/E93CDRl//+p
FPLdO8ba/iVcJszQp8S6opRu8moTz6qEzA70hldv0IZC1/syWAjliFBa9P8Xpq5e
cEoGvaBPgXG6MENeI8j5sv8m9abtHtmZZtGt2MyVKNAbz30cJ8t2k6+fG1Jl3W3q
gi31NQARAQABiQE2BBgBCAAgFiEE5/fQ/sOMOXVnqj/BEWgJ8CSvUUoFAls9g5gC
GwwACgkQEWgJ8CSvUUqY0QgAm3ldNHrdv1LIhP/J3WJgqlWK4/aW4p/hgtfJSlje
2N9Kgs5CeBdW3m9AdgGQNfpmXPDaRM5EaaNo87QH6z8BLfxtCltEhmiMfy1CjEG3
Hu/gPcQ+thwHQwH+7ejmafQAGmljDgjyB+ZMUej2nwLagh2uGhsls/xGI2EJxw8l
W/Gk8sh3Fqir2mqoK4/OcFzdvo4MhoT2m8zjEH3OVTjyNzekL5FNLhb61RL2aAsV
mgA7d0YXIh/OJ9dEVMLy7xr0eP+UD7Mr/zJjX18+egDjdfMAfM7XERyq9OPiCdpt
v67laBzdE3m99lgFkqwap9O6lzIdV06LPx6oXZzpbJq9ww==
=vA+d
-----END PGP PUBLIC KEY BLOCK-----

使用GnuPG生成隨機密碼

生成一個16位的隨機密碼

gpg2 --gen-random -a 0 16 | head -c 16

也可將下面代碼存為password.sh,運行./password.sh 16來獲得。

#!/bin/bash
if [ $# -eq 0 ]
then echo "請指定待生成密碼的長度"
else gpg2 --gen-random -a 0 $1 | head -c $1
echo ""
fi

使用ExifTool處理文件元數據

ExifTool是一款由Phil Harvey開發的獨立於平台的命令行工具,用於處理文件的元數據,例如照片的拍攝日期等。Fedora可以通過下面命令安裝使用。

#安裝ExifTool
sudo dnf install perl-Image-ExifTool
#把DIR文件夾中的文件的拍攝日期增加4小時
exiftool "-DateTimeOriginal+=4" DIR
# -overwrite_original 可不產生.JPG_original原始文件
#修改後會產生.JPG_original原始文件,新文件較原始文件小是因為ExifTool壓縮了Exif信息
#如果修改日期有誤,可以通過這個命令恢復圖片原始文件
for file in *.JPG_original;do mv "$file" "$(basename "$file" .JPG_original).JPG"; done
#Linux重命名DIR文件夾中的名字為拍攝日期
exiftool -overwrite_original -d %y%m%d_%H%M%S%%-c.%%e "-filename<DateTimeOriginal" DIR
#Windows重命名DIR文件夾中的名字為拍攝日期
"D:\Program Files\portable\exiftool.exe" -d %y%m%d_%H%M%S%%-c.%%e "-filename<DateTimeOriginal" E:\Image\DIR
#Windows中重命名DIR文件夾中的mov視頻名字為拍攝日期
"D:\Program Files\portable\exiftool.exe" -ext mov -d %y%m%d_%H%M%S%%-c.%%e "-filename<DateTimeOriginal" E:\Image\DIR
#Windows中重命名DIR文件夾中的gopro拍攝的mp4視頻名字為拍攝日期
"D:\Program Files\portable\exiftool.exe" -ext mp4 -d %y%m%d_%H%M%S%%-c.%%e "-filename<MediaCreateDate" E:\Image\DIR

#查看MOV文件中的可用時間標籤
"D:\Program Files\portable\exiftool.exe"  -time:all -a -G0:1 -s  E:\Image_55\DIR\LA090570.MOV

開放街圖與MAPS.ME

OpenStreetMap是由製圖者社群所建立,他們提供及不斷更新包括有關世界各地的道路、路徑、咖啡館、火車站等等的資料。地方知識、社群推動、開放資料是它的特點。得益於社群推動,OpenStreetMap很可能擁有更新更準確的資訊,這點我在深圳、香港、日本、意大利旅行時有深切的感受。如果沒有OpenStreetMap我的多數旅行都不可能那麼順利而有趣!有興趣參與的朋友可以參考learnOSM的教程。

MAPS.ME是一款開源的離線地圖應用,地圖數據來自OpenStreetMap。有蘋果版和安卓版供下載。由於OpenStreetMap並不提供移動客戶端,所以我之前都是使用MAPS.ME,預先將目的地的地圖下載好就可以使用了。它提供的路徑規劃功能雖不能說完美,但是已經很不錯了,步行和騎行路徑還有海拔變化,對於行山真的很有用。MAPS.ME提供了簡單的添加地點的功能,登入OpenStreetMap賬號即可為OpenStreetMap作貢獻,不過如果想專業地添加地理資訊,還是通過網頁版OpenStreetMap來操作比較好。

Maps是MAPS.ME的一個複製,在原版的基礎上添加了路徑追蹤和自定義書籤功能。