Linux ターミナル上で素晴らしいコマンドを探す [commandlinefu を利用]

commandlinefu とは

"commandlinefu" というウェブサイトをご存知でしょうか。世界中の開発者やシステム管理者等が便利な Linux コマンドを掲載しているウェブサイトで、Linux コマンドの組み合わせでこんなことも出来るのか!というコマンドが多数掲載されています。





ウェブブラウザで下記ウェブサイトにアクセスして検索欄でコマンドの一部や、何か実現したいことのキーワードを入力すれば様々なコマンド一覧と実現できることの説明が表示されます。
http://www.commandlinefu.com/

しかしターミナル上でコマンドを打ちつつ、ブラウザで上記ウェブサイトで検索するというのは決して効率の良い方法とは言えませんよね。そこで下記ツールを導入してコマンドラインから commandlinefu に掲載されている情報を検索できるようにしてみましょう。


commandlinefu を検索するツールを導入

ツールの URL はこちらになります。
https://github.com/samirahmed/fu

インストールは非常に簡単で、次のようにすればツールを導入できます。
$ git clone git://github.com/samirahmed/fu.git
$ cd fu/
$ sudo make install


コマンドの使い方

使い方は非常に簡単で、fu コマンドの後に検索したいキーワードを入力して検索するだけです。ここでは ssh を検索キーワードに指定しました。あとは表示された結果をコピー&ペーストすればターミナルから離れずに有用なコマンドを探し出して効率アップを図れます。
$ fu ssh
 1 #  output your microphone to a remote computer's speaker
 dd if=/dev/dsp | ssh -c arcfour -C username@host dd of=/dev/dsp

 2 #  Mount folder/filesystem through SSH
 sshfs name@server:/path/to/folder /path/to/mount/point

 3 #  Compare a remote file with a local file
 ssh user@host cat /path/to/remotefile | diff /path/to/localfile -

 4ms total:25

また検索キーワードとしてコマンド名ではなく、windows 等のキーワードでも以下のように検索してみました。関係無さそうなコマンドも表示されますが、結果を取捨選択しましょう。
$ fu windows
 1 #  Shutdown a Windows machine from Linux
 net rpc shutdown -I ipAddressOfWindowsPC -U username%password

 2 #  Convert PDF to JPG
 for file in `ls *.pdf`; do convert -verbose -colorspace RGB -resize 800 -interlace none -density 300 -quality 80 $file `echo $file | sed 's/\.pdf$/\.jpg/'`; done

 3 #  Save your sessions in vim to resume later
 :mksession! 

 861ms total:25

デフォルトでは人気のある?!3件のコマンドだけが表示されるようですが、全ての検索結果を表示するには "-a" オプションをつけてあげれば以下のように全件表示されるようになります。
$ fu -a ssh
 1 #  output your microphone to a remote computer's speaker
 dd if=/dev/dsp | ssh -c arcfour -C username@host dd of=/dev/dsp

 2 #  Mount folder/filesystem through SSH
 sshfs name@server:/path/to/folder /path/to/mount/point

 3 #  Compare a remote file with a local file
 ssh user@host cat /path/to/remotefile | diff /path/to/localfile -

 4 #  SSH connection through host in the middle
 ssh -t reachable_host ssh unreachable_host

 5 #  Copy your SSH public key on a remote machine for passwordless login - the easy way
 ssh-copy-id username@hostname

 6 #  Copy your ssh public key to a server from a machine that doesn't have ssh-copy-id
 cat ~/.ssh/id_rsa.pub | ssh user@machine "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"

 7 #  Create a persistent connection to a machine
 ssh -MNf @

 8 #  Remove a line in a text file. Useful to fix
 ssh-keygen -R 

 9 #  Attach screen over ssh
 ssh -t remote_host screen -r

 10 #  directly ssh to host B that is only accessible through host A
 ssh -t hostA ssh hostB

 11 #  Synchronize date and time with a server over ssh
 date --set="$(ssh user@server date)"

 12 #  Duplicate installed packages from one machine to the other (RPM-based systems)
 ssh root@remote.host "rpm -qa" | xargs yum -y install

 13 #  Port Knocking!
 knock  3000 4000 5000 && ssh -p  user@host && knock  5000 4000 3000

 14 #  run complex remote shell cmds over ssh, without escaping quotes
 ssh host -l user $( /dev/null"

 22 #  Tell local Debian machine to install packages used by remote Debian machine
 ssh remotehost 'dpkg --get-selections' | dpkg --set-selections && dselect install

 23 #  throttle bandwidth with cstream
 tar -cj /backup | cstream -t 777k | ssh host 'tar -xj -C /backup'

 24 #  Resume scp of a big file
 rsync --partial --progress --rsh=ssh  $file_source $user@$host:$destination_file

 25 #  Single use vnc-over-ssh connection
 ssh -f -L 5900:localhost:5900 your.ssh.server "x11vnc -safer -localhost -nopw -once -display :0"; vinagre localhost:5900

 5ms total:25

fu コマンドを利用すればターミナルから離れずに、素晴らしいコマンドテクニックを検索してすぐに利用できるようになりますので、是非導入しましょう。