發表文章

目前顯示的是有「BASH」標籤的文章

不同語系date指令印出的格式

會想彙整一下不同語系date指令印出的格式,因為crontab跟我測試script結果不一致。 lzh語系 是Ubuntu預設安裝繁體中文時使用。我裝Ubuntu系統會先用en_US裝好再改語系成zh語系。  $ LC_TIME=lzh_TW.UTF-8 date 公曆 20廿六年 七月 十五日 週三 八時42分十一秒 zh語系 $ LC_TIME=zh_TW.UTF-8 date 西元2026年07月15日 (週三) 08時42分21秒 CST en語系 $ LC_TIME=en_US.UTF-8 date Wed Jul 15 08:42:31 AM CST 2026

BASH游標的快速移動與清除

BASH游標的快速移動與清除 左右移動,依照字元 (Character) 為單位 Ctrl+F 向後移動1個字元,等同→ Ctrl+B 向前移動1格字元,等同← 左右跳移動,依照字 (Word) 為單位 Alt+F 向後移動到字的第一個字元,等同 Ctrl+→ Alt+B 向前移動到字的第一個字元,等同 Ctrl+← 移動到頭尾 Ctrl+E 移動到最後,等同Home Ctrl+A 移動到最後,等同End 清除字元,這適合截斷URL Ctrl+K 從目前位置清除往後的所有字元。 Ctrl+U 從目前位置清除往前的所有字元。

用BASH批次改影片名-時間戳轉換與去除前綴

使用BASH修改影片檔名格式 1. 轉換時間戳成日期 舉例說明: 1685877964314.mp4 改成 20230604_192604.mp4  1688511747190.mp4 改成 20230705_070227.mp4 2. 去除前綴詞 舉例說明: video_20230601_204241.mp4 改成 20230601_204241.mp4

升級gitea

圖片
升級gitea 至 1.23.7 (2025-04-24)

ffmpeg將目錄下的wma串接起來並轉成mp3

 因為拿到很多小的wma聲音檔案,想要接成一個完整的mp3就好

筆記:BASH生成時間字串

維護常常會需要當天的log之類的,寫成script就需要用到時間字串

Note:Show git branch in bash prompt

圖片
Reference: How to show current git branch with colors in Bash prompt https://thucnc.medium.com/how-to-show-current-git-branch-with-colors-in-bash-prompt-380d05a24745 vim ~/.bashrc parse_git_branch () { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/' } if [ " $color_prompt " = yes ]; then # PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' PS1 = "\[\033[01;32m\]\u@\h\[\033[00m\]: \[\e[32m\]\w \[\e[91m\] \$ (parse_git_branch)\[\e[00m\]$ " else mirochiu@mirochiu-d820mt: /mnt/hdd2/node.repo/linebot_speech (master)$ c     

中文轉換成漢語拼音(無音調)

使用指令將中文轉換成漢語拼音(無音調) 使用教育部的中文譯音轉換系統查詢漢語拼音

用pk8和x509.pem產生Android Studio使用的keystore檔

Eclipse與Android Studio用的是keystore檔案,然而AOSP內提供AOSP裡面提供的是pk8和x509.pem檔案,實際上都是一樣的,只是表現格式不同。 AOSP的key一般會在build/target/product/security內,裏面有數個*.pk8和*.x509.pem檔案, 分別對應不同層級的簽章, 有media, shared, platform, test, 以及release release是給OTA包使用,test是ENG工程版使用,platform是系統權限的APP用的, 要用Android.mk幫APP簽系統權限, 要加上 LOCAL_CERTIFICATE := platform 下面這個script是自動,產生mygen.keystore檔案,store密碼是password 要顯示在keystore可使用java內的keytool工具 keytool -list -v -keystore mygen.keystore

Ubuntu上複製相片的exif資訊(導出&導入)

安裝套件 sudo apt install exiv2 顯示相片資訊 exiv2 pr IMG2022.jpg 導出相片資訊 exiv2 ex IMG2022.jpg 會產生相同檔名的.exv檔案,以上面指令來說就是產生 IMG2022.exv 若有縮圖還會產生縮圖檔,以上面指令來說就是產生 IMG2022-thumb.jpg 導入相片資訊 exiv2 in IMG2022.jpg 會抓去當下目錄同明得.exv和-thumb.jpg檔案(不見得有)去覆蓋相片資訊

強化BASH下的ADB指令的自動完成功能

Improve the auto completion of BASH for adb commands 會想要強化adb的自動完成功能主要是我要adb安裝apk時Tab兩次竟然不會列出當前目錄下的apk檔案,這問題實在太夭壽啦! 然後就開始研究一下bash的auto completion

產生空檔案和單行內容的檔案

產生空檔案 Windows命令提示字元 copy NUL a.txt Linux command line touch a.txt 預先創建一個大小的檔案 truncate -s 47484 empty_file truncate -s 50k empty_file 單行內容檔案 這裡指的內容只有一行,且沒有換行符號 Windows命令提示字元 Linux command line echo -n "one string without next line character" > a.txt echo -e "one string without next line character\c" > a.txt printf "one string without next line character" > a.txt

用BASH產生NUL byte, byte 1, byte2的資料

用BASH產生NUL,1,2的檔案 會有這個需求主要是需要在資料前端,尾端加入一些padding,tailing bytes,產生這些資料之後可以用cat將他們與產生的檔案做結合,達成完全以BASH處理的效果。 雖然看起來很簡單,不過有一些小陷阱

用Bash把wav變成pcm音檔

在 使用IoT大平台語音辨識/語音轉文字(STT)功能 一文中,需要用到pcm音檔,但是一般電腦上的錄音程式都是預設wav輸出的,該怎辦呢?

xargs筆記

  xargs幫助我們把前面的列表分別呼叫指定的cmd 我們常用的是 find -name  "*.wav" | xargs -t -i ffprobe -hide_banner {} -t表示顯示做的cmd指令 -i表示\n分行來表示參數, 對於cmd預設是用{}符號代表要代入的位置,因為想放置參數不見的在最後面 置換符號 find -name  "*.wav" | xargs -t -I ZZZ ffprobe -hide_banner  ZZZ 上面這就是用-I指定用ZZZ來當作帶入參數 find -name  "*.wav" | xargs -t -I % ffprobe -hide_banner % 上面這就是用-I指定用%來當作帶入參數 特殊符號或空格 另外如果你的字元包含空格或特殊字元就需要用print0丟出列表,並在xargs和-0接收這種以\0分隔的格式 find -name  "*.wav" -print0 | xargs -0 -t -i ffprobe -hide_banner  {}

設定Linux伺服器不能Ping

設定Linux伺服器不能Ping ping其實就是用icmp封包完成的 系統節點 /proc/sys/net/ipv4/icmp_echo_ignore_all 用bash設定 $ echo 1 | sudo tee /proc/sys/net/ipv4/icmp_echo_ignore_all 1 用sysctl設定 $ sysctl net.ipv4.icmp_echo_ignore_all 1 上述方法都是暫時性的, 如果系統要在開機時套用,請把設定寫在 /etc/sysctl.conf net.ipv4.icmp_echo_ignore_all=1 Ref: http://ubuntuhandbook.org/index.php/2013/07/disable-ping-response-ubuntu-server/

抓取主機的IP(含IPv4和IPv6)

抓取主機的IP(IPv4和IPv6) Python部份 import socket addrs = socket.getaddrinfo('www.hinet.net',443) ipv4_addrs = list(set([addr[4][0] for addr in addrs if addr[0] == socket.AF_INET])) ipv6_addrs = list(set([addr[4][0] for addr in addrs if addr[0] == socket.AF_INET6])) print ('first IPv4:', ipv4_addrs[0], ' candidates:', len(ipv4_addrs)) print ('first IPv6:', ipv6_addrs[0], ' candidates:', len(ipv6_addrs)) 以上程式碼測試過python 3.5.2和python 2.7.12 輸出為: first IPv4: 210.61.33.225  candidates: 8 first IPv6: 2001:b000:1e5:1100::8  candidates: 8 BASH部份 $ nslookup -querytype=A www.hinet.net $ nslookup www.hinet.net Server:   127.0.1.1 Address:  127.0.1.1#53 Non-authoritative answer: www.hinet.net canonical name = hinet-hp.cdn.hinet.net. Name: hinet-hp.cdn.hinet.net Address: 210.61.33.229 Name: hinet-hp.cdn.hinet.net Address: 210.61.33.227 Name: hinet-hp.cdn.hinet.net Address: 210.61.33.232 Name: hinet-hp.cdn.hinet.net Address: 210.61.33.231 Name: hinet...

BASH新增一行字到檔案

新增文字到檔案第2行 $ sed '2i # -coding=utf-8' -i runpy.py

line bot推送多訊息

1. 事前準備: (1) 取得對方的User ID 需請對方加bot好友。對方封鎖bot好友時,對方會收不到發送的訊息。 (2) 填入將User ID填入變數 取代下面程式碼的targetUID/TARGETUID的值。 (3) 設定環境變數 export CHANNEL_ACCESS_TOKEN=你的line bot的access token 2. 使用node.js發送 const targetUID = 'U1fcb...'; const line = require('@line/bot-sdk'); const client = new line.Client({   channelAccessToken: process.env.CHANNEL_ACCESS_TOKEN, }); const msg1 = { type: 'text', text: 'Hello World1' }; const msg2 = { type: 'text', text: 'Hello World2' }; client.pushMessage(targetUID, msg1)   .then(() => {     console.log('send1 ok!');     client.pushMessage(targetUID, msg2)     .then(() => {       console.log('send2 ok!');     })     .catch((err) => {       console.error(err);     });   })   .catch((err) => {     console.error(err);   }); 2.1 執行範例 若上面程式碼命名為send.js則 node send.js 3. 使用CURL發送@Linux export TARGE...

轉換/反轉換BASE64資料及HEX字串

Convert hex string to binary file printf 1716d547cd7c0398bd244ac06c8a2ec8 | xxd -r -p > x.bin # show original bytes xxd x.bin # 00000000: 1716 d547 cd7c 0398 bd24 4ac0 6c8a 2ec8  ...G.|...$J.l... Convert binary file to base64 file base64 x.bin > x.base64      # default line wrapping=76 base64 -w 0 x.bin > x.base64 # w/o line wrapping # show base64 cat x.base64 # FxbVR818A5i9JErAbIouyA== Revert base64 file to binary base64 -d x.base64 > r_x.bin # show reverted bytes xxd r_x.bin ---- Convert hex string to base64 string printf 1716d547cd7c0398bd244ac06c8a2ec8 | xxd -r -p | base64 # FxbVR818A5i9JErAbIouyA== Revert base64 string to binary file echo -n "FxbVR818A5i9JErAbIouyA==" | base64 -d - > x.bin # show bytes xxd x.bin # 00000000: 1716 d547 cd7c 0398 bd24 4ac0 6c8a 2ec8  ...G.|...$J.l... ---- Convert plain text to base64 string echo -n "{your-plain-text}" | base64 # e3lvdXItcGxhaW4tdGV4dH0= Revert base...