在 Debian / Ubuntu GNU/Linux 底下找出特定命令 / 程式的來源套件

在 Debian / Ubuntu based GNU/Linux 底下做事有個很棒的優點,有太多工具可以透過 apt 套件庫來進行安裝,重灌電腦的時候只要透過 apt 或 apt-get 就可以把一大半會需要用到的工具給裝起來,不過有時候可能邊摸索邊上網查資料來看某工具要怎麼用,一骨腦裝完卻沒作筆記,日後要準備重灌時卻想不起來該裝什麼套件才能把要用到的命令找回來,窘 …

如果你有安裝 command-not-found 這個套件,在 bash shell 底下如果執行了找不到的命令,除了常見的 blah: command not found,他還會有很貼心的提示使用者應該安裝哪個缺漏的套件,像這樣:

$ kvm
 The program 'kvm' is currently not installed. You can install it by typing:
 sudo apt install qemu-kvm

上面範例為我執行了一個不存在的命令 – kvm ,然後 command-not-found 這套工具建議我去裝 qemu-kvm 這個套件,裝完後就會有 kvm 這個命令可以使用了,如果同時存在不只一個套件包含了同樣的命令,command-not-found 這套工具一樣會很好心的幫我們列出來,例如:

$ sar
 The program 'sar' can be found in the following packages:
  * sysstat
  * atsar
 Ask your administrator to install one of them

就算是找不到 100% 符合的命令,command-not-found 也會很好心的列出其他參考,例如:

$ gitx
 No command 'gitx' found, did you mean:
  Command 'gitg' from package 'gitg' (universe)
  Command 'git' from package 'git' (main)
  Command 'gitk' from package 'gitk' (main)
 gitx: command not found

不過上述的功能僅限於我們沒有正確的安裝對應的套件才能使用,如果是套件已經裝起來了的時候呢?例如我工具都已經裝好了,只是想確認某個命令是從哪裡來的,要做個筆記而已,這種情況很常見的啊,例如遇到問題跑去問 Google ,看到一堆解法,一個不行換一個,換到可以的解法的時候可能已經 apt-get install 不知道多少次了,已經忘記剛剛的命令到底是從哪邊來的了XD

還好 dpkg 有個強大的搜尋功能,可以讓我們從已經安裝的套件中搜尋出他們到底包含了哪些檔案,底下是從 Ubuntu 16.04.1 裏面擷取的 dpkg manpage:

-S, –search filename-search-pattern…
Search for a filename from installed packages.

使用方式為:

$ dpkg -S '檔案路徑/名稱'

要透過 dpkg -S 來找命令對應所屬的套件,只要把命令的完整路徑丟給他就可以了,命令的完整路徑我們可以透過 type 或 which 這兩個指令來確認,例如:

$ type whoami
whoami is /usr/bin/whoami
$ which whoami
/usr/bin/whoami

從上面的輸出我們可以知道 whoami 這個命令的完整路徑是 /usr/bin/whoami ,再把 /usr/bin/whoami 拿去 dpkg 查詢就可以了!例如:

$ dpkg -S '/usr/bin/whoami'
coreutils: /usr/bin/whoami
$ dpkg -S '/usr/bin/curl'
curl: /usr/bin/curl

或是直接

$ dpkg -S "$(which whoami)"
coreutils: /usr/bin/whoami
$ dpkg -S "$(which curl)"
curl: /usr/bin/curl

從上面的結果我們可以發現 curl 這個命令是從 curl 這個套件來的, whoami 這個命令則是從 coreutils 這個套件來的,如果你查詢的是還沒有安裝或是不是透過 apt / dpkg 套件管理工具安裝的命令,那就沒辦法了:

$ dpkg -S '/usr/bin/kvm'
dpkg-query: no path found matching pattern /usr/bin/kvm

要注意的是

1. which 跟 type 輸出的格式不太一樣,type 的輸出結果因為多了 blah is … ,所以還需要經過處理把前面那段拿掉才有辦法餵給 dpkg ,而 which 因為是直接出出路徑所以沒有這問題

2. 這邊如果輸入的不是完整路徑,則可能會出現一堆其他不相關的東西,例如:

$ dpkg -S 'whoami'
 bash-completion: /usr/share/bash-completion/completions/ldapwhoami
 coreutils: /usr/share/man/man1/whoami.1.gz
 coreutils: /usr/bin/whoami

因為 dpkg 會直接把所有完整路徑裏面符合輸入字串的部份都印出來,所以像是 whoami 的 manpage 以及 bash-completion 的自動補齊指令都被列出來了。

好了,這篇筆記雖然短,可我覺得很實用,哪天失憶或是被問問題的時候就可以把這篇丟出來,這就是做筆記最大的用途 … :D

在 Windows 10 上面跑的 Ubuntu / bash …

上個月(2016/03)底,今年微軟 Build 大會最讓人震驚的消息,沒有之一,透過微軟跟 Canonical (開發 Ubuntu 的公司) 的合作,未來可以在 Windows 10 上面跑原生的 Ubuntu / bash,不是跑在虛擬機或使用模擬器、容器等技術,是原生的!有了這個重大的改變,或許未來都不需要使用到 cygwin、msys 或 GnuWin 這種專案了?一時沒空把所有資訊都看完,先來整理一些筆記 …

這項更新目前已經有測試版可以玩了,正式的版本預計在今年夏天的 Windows 10 年度更新釋出,之後就會在 Windows 10 上面有一個完整的 Ubuntu user space 子細統,不但 Linux 上常見的 utilities 如 grep, sed, awk 等工具未來都可以直接跑在 Windows 10 上,甚至 Debian / Ubuntu 在使用的套件管理系統 apt 也都可以直接使用,不論是對於使用者或是開發者都提供了更大的彈性以及便利性,同時代表未來 Windows 對 Linux 或其他原先只能跑在 unix-like OS 的專案會更加的友善。

微軟現在甚至使用 GitHub 來當 BashOnWindows 的 issue tracker:

https://github.com/Microsoft/BashOnWindows/issues

Microsoft-BashOnWindows-issues-on-GitHub.png

然後也有一個在 uservoice 上面的討論、反應平台:

https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/category/161892-bash

我從底下會提到的 Linux Command Line on Windows 影片,截了一些畫面出來:

可以看到 lsb_release -a 看到的是 Ubuntu 14.04.4 LTS:

screenshot-from-Linux Command Line on Windows-video-ll-lsb_release-a.png

示範一些常見的工具,例如 fdisk 、mount,還有貼上文字的功能:

screenshot-from-Linux Command Line on Windows-video-fdisk-and-mount-and-paste.png

透過 apt install gcc 來安裝 gcc:

screenshot-from-Linux Command Line on Windows-video-demo-apt-install-gcc.png

閱讀全文

The difference of performance between 3 versions of Raspberry Pi, the comparison.

I have the basic benckmarks for Raspberry Pi version 1, 2 and 3, and here is the comparison, all the benchmarks on different Pis are using the same operating system / package, so there won’t be a difference from the version of software.

The testing platform:

RASPBIAN JESSIE
Version: February 2016
Release date: 2016-02-26
Kernel version: 4.1

Since I just did these benchmarks on Raspberry Pi 3:

https://www.peterdavehello.org/2016/03/raspberry-pi-3-model-b-basic-benchmarks/

The Raspbian and all the softwares are up to date, so the benchmark results of Raspberry Pi 3 are just copied from that post, they are the same result. The results from Pi 1/2 are whole new tested, in fact they are very close to the test results I did before, I would say they are all in the tolerance scope, so I’ll just ignore the detail of the benchmarks, only focus on the final results, the performance.

PHP benchmark Script using PHP 5.6.17-0+deb8u1: (in secs, the lower the better)
Raspberry Pi model B+ – 141.145
Raspberry Pi 2 model B – 48.113, 293% faster than Pi 1
Raspberry Pi 3 model B – 26.984, 523% faster than Pi 1, 178% faster than Pi 2

PHP benchmark Script using PHP 7.0.3-5: (in secs, the lower the better)
Raspberry Pi model B+ – 48.153
Raspberry Pi 2 model B – 17.27, 279% faster than Pi 1
Raspberry Pi 3 model B – 10.239, 470% faster than Pi 1, 169% faster than Pi 2

sysbench v0.4.12 single thread: (cpumaxprime=20000,in secs, the lower the better)
Raspberry Pi model B+ – 1332.0115
Raspberry Pi 2 model B – 765.2441, 174% faster than Pi 1
Raspberry Pi 3 model B – 478.0941, 748% faster than Pi 1, 160% faster than Pi 2

閱讀全文

Raspberry Pi 3 model B basic benchmarks

As the benchmarks I ran on Raspberry Pi B+ and Raspberry Pi 2 model B, let’s do some basic benchmarks on the latest Raspberry Pi 3.

Let’s have some photos first:

RaspberryPi-3-DSC_0277

RaspberryPi-3-DSC_0278

RaspberryPi-3-DSC_0279

RaspberryPi-3-DSC_0280

My Raspberry Pi 3 crashed during the benchmarking … so I just added a heat sink on it …
RaspberryPi-3-DSC_0281

See:

This is the testing platform:

RASPBIAN JESSIE
Version: February 2016
Release date: 2016-02-26
Kernel version: 4.1

Here are the benchmarks result:

PHP benchmark Script using PHP 5.6.17:

--------------------------------------                                                     
|        PHP BENCHMARK SCRIPT        |                                                          
--------------------------------------                                                          
Start : 2016-03-06 09:32:58                                                                     
Server : @                                                                                      
PHP version : 5.6.17-0+deb8u1                                                                   
Platform : Linux                                                                                
--------------------------------------                                                          
test_math                 : 9.073 sec.                                                          
test_stringmanipulation   : 9.203 sec.                                                          
test_loops                : 4.945 sec.                                                          
test_ifelse               : 3.763 sec.                                                          
--------------------------------------                                                          
Total time:               : 26.984 sec.

閱讀全文