終端機快速複製檔案內容到剪貼簿

資料來源:How to copy and paste within a terminal in macOS or Linux?

在 MacOS 下,可以用 pbcopy/pbpaste

cat file.txt | pbcopy
pbpaste | tee foo.txt

在 Linux 下,要用 xsel,主要是參數 –input 跟 –output

# 複製到剪貼簿
cat file.txt | xsel --clipboard --input
xsel --clipboard --output | tee foo.txt

若要讓指令一致,可以用 alias

alias pbcopy='xsel --clipboard --input'
alias pbpaste='xsel --clipboard --output'

Compiler Explorer

在某個推文上看到的網站 – Compiler Explorer https://godbolt.org/,但我忘了來源。

網站打開以後,左邊貼程式碼,右邊會即時顯示出編譯後的低階語言,支援蠻多語言的。這對想搞清楚底層怎麼處理的開發者來說很方便,可以透過這個網站即時的看到結果,進而調校程式碼。

gcin出現Cannot open /usr/share/gcin/table/.kbm

某天點了 gcin 的 tray icon,按了裡面的「切到舊的注音鍵盤」,之後,切換到 gcin,就會出現下面的訊息

Cannot open /usr/share/gcin/table/.kbm

這超奇怪,放了好幾天,終於受不了。嘗試了以下幾個作法:

  1. 試著移除 gcin,再重新安裝 gcin,不行。
  2. 試著去複製以前的 gcin 設定,不行。

後來才在 gcin 討論區裡找到這篇:Ubuntu 14.04 gcin 安裝啟動後竟抓不到注音符號表??—->X@.kbm

只要執行以下指令,把 ~/.gcin/config 下的 phonetic-keyboard* 刪除即可

rm ~/.gcin/config/phonetic-keyboard*

果然解鈴還須繫鈴人。

ls 的 quoting-style

有人來問才知道 ls 是有在改版的。

在 coreutils 8.30 (RHEL8) 預設的 quoting-style 是 shell,在 coreutils 8.22 (RHEL7) 預設的 quoting-style 是 literal,主要差異是在於檔名有空白時是否要加上單引號。

在 coreutils 8.30 (RHEL8) 是這樣

# ls -l
total 8
-rw-r--r--. 1 root root   0 Dec  1 14:38  bar.txt
-rw-r--r--. 1 root root 514 Dec  1 15:38  cluster-logging.yml
-rw-r--r--. 1 root root   0 Dec  1 14:38 'foo bar.txt'
-rw-r--r--. 1 root root   0 Dec  1 14:38  foo.txt
-rw-r--r--. 1 root root 528 Dec  1 15:38  openshift-user-critical.yml

在 coreutils 8.22 (RHEL7) 是這樣

# ls -l
總計 0
-rw-r--r--. 1 root root 0 12月  1 14:41 bar.txt
-rw-r--r--. 1 root root 0 12月  1 14:41 foo bar.txt
-rw-r--r--. 1 root root 0 12月  1 14:41 foo.txt

在 RHEL8 想讓輸出的結果跟 RHEL7 一樣的話,可以加上 –quoting-style 參數

ls -l --quoting-style=literal

Ubuntu 21.10 的 Chromium

許久沒用 Chromium,這次安裝發現很不一樣。

  1. snap package:雖然還是用 apt 來安裝,但實際上已經是 snap package 。
  2. Profile 路徑:因為使用 snap package,所以 Profile 路徑已經不是 ~/.config/chromium/Default,而是在 ~/snap/chromium/common/chromium/Default 。如果要從非 snap package 的 Google chrome 遷移到 Chromium,就是把 ~/.config/google-chrome/Default 複製到 ~/snap/chromium/common/chromium/Default 就可以。如果不確定 Profile 路徑在哪兒,可以在 Chromium 的網址欄輸入 chrome://version 就可以看到。

參考資料

OneDrive 持續顯示載入中

前幾天開始,跟 OneDrive 相關的部份都怪怪的,於是昨天重新開機,想說應該就好了吧。但事與願違,OneDrive 持續的顯示載入中,到後來就不理我了,游標移到圖示上,顯示 MacOS 的彩虹轉圈圈。

試著砍 Process,也重開機了幾次,都不行,後來找到這篇:修正 Mac 上的 OneDrive 同步處理問題 。裏面提到好幾種方法。我是使用了裏面重置 OneDrive 的方法。

OneDrive 應用程式目錄下藏有一個重製的命令:

  1. 先用 kill 或是程序管理員之類的把 OneDrive 結束掉。
  2. 開啟 Finder,從上方的「前往」選「應用程式」
  3. 以滑鼠右鍵按一下 [OneDrive],然後選取 [顯示套件內容]。沒有滑鼠,可以按住 ctrl ,再點一下觸碰板,這樣就等於是按下滑鼠右鍵。
  4. 選 Contents > Resources
  5. 找到 ResetOneDriveApp.command ,點選執行。

執行的時候,會跳出一個終端機視窗顯示他執行的指令,執行完,關閉即可。

再重新執行 OneDrive 來設定即可,選擇位置時,記得選取前一個 OneDrive 同步處理的位置。 這樣一來,如果您的檔案沒有變更就不會再次下載。

20個興趣

之前看了大前研一的「一個人的經濟」,書裡說了,人最好要有20個興趣/嗜好,這樣老年的時候才不會無所事事而快速老化。

我有20個興趣/嗜好嗎?我自己從來都沒有去算過,好像很多,可是仔細想想,好像也不是那麼多。最好的方法還是一邊列一邊想了。第一個我想到的就是閱讀,為什麼會和閱讀結下不解之緣呢?小時候家裡就有一堆書了,都是爸爸買的,主要類型有三種:一種是二次大戰系列的書,一種是商業經營、推銷、口才訓練的書,最後一種則是宗教類的書籍,這三類的書或多或少都看了一些。再來就是外婆、阿姨和姑姑們的支持,他們買了不少故事書,造就了弟弟妹妹跟我的閱讀習慣跟供書的不良嗜好。

老爸為何買二次大戰系列的書,至今我仍是不明所以,商業經營、口才、推銷的書應該和他以前開過水電行有關係,宗教類的書籍應該是他尋求寄託的方式,這些都是我自己的推測。外婆、阿姨和姑姑買書給我們就純粹是因為我家小孩都愛讀書,才買來讓我們看的。此外,就是當作考試成績不錯的獎勵。

除了這些之外,學校也給了很大的助力。我小學三年級時,學校圖書館落成了,當時除了書局並沒有一個書超級多的地方,新的圖書館正好讓我見識到好多書的魔力,除了建築物是新的,書也是新的,然後亞森羅蘋、奧茲帝國(綠野仙蹤)等等的故事,也深深的吸引了我。

jemalloc

jemalloc (github) 是效能聽說很好的 malloc library。

之前是在 為線上環境而最佳化的 Ruby:Fullstaq Ruby 看到的,看到的當下是想說,會不會也有人來編譯用 jemalloc 的 Python 版本,不過很遺憾的是沒有。後來找了 jemalloc 的資料以後,發現要替換其實不難。Ubuntu 14.04 是已經有包 libjemalloc 了,但版本較舊,是 3.5.1 版。

後來還是選擇自行編譯,然後使用 LD_PRELOAD 環境變數來替換 python 的 malloc library。

那要怎麼檢查 python 是不是真的有使用到呢?這可以使用 lsof 來檢查。(How to see the currently loaded shared objects in Linux?)

lsof /usr/local/lib/libjemalloc.so.2

同款的還有 tcmalloc (Google 出的),有空也來測試看看。

P.S. ptmalloc 是 glibc 的 malloc。

WordPress 的維護模式

本來以為 wp-cli 提供的 wp 指令應該可以用來指定 wordpress 進入或離開 maintenance mode 才對,結果發現沒提供這功能。原來是因為很簡單的關係:wp cli – wp-cli Enabling Maintainance Mode

只要在 wordpress 安裝目錄下增加或是移除 .maintenance 檔案就可以進入或離開 maintenance mode 了。

Vagrant VM 搬家

有同事問,印象中有,就試了一下

  1. 用 vagrant package 會得到 package.box 檔案,複製到另外一台電腦上。
  2. 到另外一台電腦上用 vagrant box add package.box –name “my_new_vm” 加進去。
  3. 建個目錄,用 vagrant init “my_new_vm” 產生 Vagrantfile ,執行 vagrant up 即可。