Command Line で使用しているツールまとめ vol.6


##はじめに

コマンドラインで使用しているツールを簡単にではありますが､まとめてみようと思います｡前回の続きです｡私が知らない便利ツールはまだまだたくさんありますので､ここに掲載されているもの以外で便利なものがあれば､ぜひ教えてください｡



この記事に貼り付けてあるリンクは､キーワードに関連する適切な場所へと誘導してくれます｡非常に有効なので､ぜひ参照してみてください｡

##powerline-bash

ShellのPromptを簡単に変更するためのツールが公開されています。[oh-my-zsh](https://github.com/jeremyFreeAgent/oh-my-zsh-powerline-theme)のものよりも手軽でいいかもしれません。

例えば、zshの場合は、 `cd && git clone https://github.com/milkbikis/powerline-bash.git`で複製した後、以下のように書きます。

```~/.zshrc
function powerline_precmd() {
  export PS1="$(~/powerline-bash/powerline-bash.py $? --shell zsh)"
}
 
function install_powerline_precmd() {
  for s in "${precmd_functions[@]}"; do
    if [ "$s" = "powerline_precmd" ]; then
      return
    fi
  done
  precmd_functions+=(powerline_precmd)
}
 
install_powerline_precmd
```

##ターミナル上での翻訳

###Command-Line-Fu

まずは、ワンライナーでも検索してみましょう。色々と出てきます。

```インストール
git clone git://github.com/samirahmed/fu.git
 
cd fu/
 
sudo make install
 
sudo python setup.py install --record installRecords.txt
```

```
fu -a translate | w3m
```



###tmux

```~/.zshrc
## 翻訳
# http://blog.takapra.com/index.php/2013/01/10/

# w3m でGoogle translate English->Japanese
tmux_moment_pane/

function gte() {
  google_translate "$*" "en-ja"
}
 
# w3m でGoogle translate Japanese->English
function gtj() {
  google_translate "$*" "ja-en"
}
 
# 実行方法
# google_translate "検索文字列" [翻訳オプション(en-ja 英語->日本語)]
function google_translate() {
  local str opt cond
 
  if [ $# != 0 ]; then
    str=`echo $1 | sed -e 's/  */+/g'` # 1文字以上の半角空白を+に変換
    cond=$2
    if [ $cond = "ja-en" ]; then
      # ja -> en 翻訳
      opt='?hl=ja&sl=ja&tl=en&ie=UTF-8&oe=UTF-8'
    else
      # en -> ja 翻訳
      opt='?hl=ja&sl=en&tl=ja&ie=UTF-8&oe=UTF-8'
    fi
  else
    opt='?hl=ja&sl=en&tl=ja&ie=UTF-8&oe=UTF-8'
  fi
 
  opt="${opt}&text=${str}"
  w3m +13 "http://translate.google.com/${opt}"
}
```

```~/.tmux.conf
# 翻訳
# http://blog.takapra.com/index.php/2013/01/10/tmux_moment_pane/
# Ctrl-t a => alcの単語検索
# Ctrl-t m => manページを開く
# Ctrl-t g => google翻訳 （英語から日本語）
# Ctrl-t G => google翻訳 （日本語から英語）
 
# 一時ペインでコマンドを実行する
bind-key a command-prompt -p "Alc:" "split-window 'source ~/dotfiles/.zshrc.command; alc %%'"
bind-key m command-prompt -p "Man:" "split-window 'man %%'"
bind-key g command-prompt -p "Google Translate en->ja:" "split-window 'source ~/dotfiles/.zshrc.command; gte %%'"
bind-key G command-prompt -p "Google Translate ja->en:" "split-window 'source ~/dotfiles/.zshrc.command; gtj %%'"
```

なかなか便利そうですね。ちなみに、[こちら](http://mojavy.com/blog/2013/01/11/alc-nokogiri-tmux/)の記事にある単語検索スクリプトが非常に便利そうだったのですが、規約違反だったみたいです。



##Paco
パッケージマネージャーになかったり、あったとしてもバージョンが最新出なかったりした場合、ソースからコンパイルして使うということが多いかと思います。


しかし、この場合、管理が面倒くさい(自動化されていない)という問題があります。今回紹介する `Paco`は、その問題を解決してくれるかもしれません。

```
cd /usr/local/var
 
wget http://downloads.sourceforge.net/paco/paco-2.0.9.tar.gz
 
tar zxfv paco-2.0.9.tar.gz
 
cd paco-2.0.9
 
./configure --disable-gpaco
 
make
 
sudo make install
```

しかし、Macではインストールはできるものの使えないようです。

```
Note: Paco does not work on systems in which binaries are linked statically,
like FreeBSD or OpenBSD.
```

参考:[「Paco」で「make uninstall」できないソフトを削除する](http://blog.tk84.net/NrQ2)

ただ、Macの`Homebrew`では、 `Formula`と呼ばれる簡単な定義ファイルさえ作ればソフトを管理対象にできるようなので、あまり問題は無さそうです。


ちなみに、 `Homebrew`の補完は以下の様な感じで行えます。`Homebrew`インストール時にダウンロードされるようです。

##brew_zsh_completion.zsh

```
$ cat ~/.zshrc | grep fpath
fpath=(~/.zsh/functions/ $fpath)
 
$ ln -s /usr/local/Library/Contributions/brew_zsh_completion.zsh ~/.zsh/functions/_brew
```

##csshX
Macで使える `cssh` に `csshX` というものがあります。複数のホストに同じような処理をさせたいときなどに便利です。

```
brew install csshx

csshX user1@192.168.0.1 user2@192.168.0.2 user3@192.168.0.3
```

###~/.ssh/config
`config`ファイルに記述しておくと、様々なオプションを省略することができます。

参考:[csshXを使ってリモートホストの一括操作を行う](http://dev.classmethod.jp/cloud/aws/csshx/)

##Sysinternals
[Sysinternals](http://technet.microsoft.com/ja-jp/sysinternals/ff181602)は、Windowsのシステム管理ツール群です。コマンドラインとは関係ありませんが、便利そうです。

Windows の標準ツールより一歩踏み込んで、さらに詳細な情報を収集したり、標準ツールより高機能です。例えば、 `Procexp.exe`は、プロセス一覧を色付きで表示できます。



##位置情報
###exiftool

`exiftool`とは､写真のEXIF情報を確認したり､編集したりするためのツールです｡

```
brew install exiftool
```

では､試しに写真でもダウンロードして､色々と試してみましょう｡

```ダウンロード
# 画像ファイルのダウンロード
$ w3m http://photozou.jp/photo/photo_only/651083/115404902
 
[a]でリンク先の画像を保存できます

# 画像ファイルを表示する
$ display 115404902_org.jpg

# 画像ファイルのEXIF情報を日本語で表示する
$ exiftool -lang ja 115404902_org.jpg
```


せめて学校の位置情報でも追加してみます｡

```
exiftool -GPSLongitude=136.233105 -GPSLatitude=35.203918 115404902_org.jpg
```

学校に登校してみます。

```~/.zshrc
function exmap (){
 
str=`exiftool -c "%.6f" -GPSPosition ${1} | sed -e 's/GPS Position//' -e 's/://' -e 's/E//'  -e 's/S//' -e 's/W//' -e 's/N//' -e 's/ //g'`
 
open -a Google\ Chrome "https://maps.google.co.jp/maps?q=$str"
}
```

```
exmap 115404902_org.jpg
```

本当に学校に登校してみたい人は、[こちら](http://www.kotaku.jp/2013/01/after_school_tea_time.html)のアプリを使用してみるといいかもしれません。

###GeoIP
IPアドレスから地域判定する事ができるようです。

```
sudo port install py-geoip
```

```
sudo touch /opt/local/etc/GeoIP.conf
 
geoipupdate
 
curl ifconfig.me | xargs geoiplookup
```

どうやらデータベースが必要みたいです。

```
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
 
gunzip GeoLiteCity.dat.gz
 
sudo mv GeoLiteCity.dat /opt/local/share/GeoIP/GeoIPCity.dat
```

###wi-fi_location
無線LAN機器のMacアドレスから位置情報を割り出す方法です。* 現在は使えません。

Macアドレスを調べる方法は、以下のようになります。 `Aircrack-ng`を使えば、もっと高度なスキャンができると思いますが、最低限必要な情報は、Macアドレスなので簡易なやり方のほうがいいです。

```
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -s
```

```
sudo gem install wi-fi_location

wi-fi_location 00:11:22:33:44:55 AA:BB:CC:DD:EE:FF
```

どうやら `http://www.google.com/loc/json`が存在しないらしいですね。`404 Error`が出ます。

参考 : [OSX のコマンドラインから、wi-fi の情報をつかって位置情報を得る](http://unknownplace.org/memo/2012/07/21/1/)

##Finder
Finder 上で行う Markdown プレビューについてです。
###Finderからのプレビュー


実は、 `Finder`では、ファイルのプレビューが簡単に出来ます。これは、 `Space`キーを押すと、プレビューが実行されます。



ということで、今回のプレビューもコマンドからと思いきや、既定のプログラムが起動してしまいました。

```
open . hoge.md
```

ちなみに、 open .は、カレントディレクトリ、つまり現在作業しているディレクトリを Finderで開くコマンドです。


よって、仕方なく Finderから直接指定するために、 Finderのある場所を特定してみることにしました。


###Finderのある場所
ファイルを検索する方法は数多くありますが、ここでは、Macで有効な2つの方法を紹介します。

`mdfind`は、Mac固有の検索コマンドです。私は、このコマンドはあまり使いませんが、便利そうです。

```
mdfind Finder
```

`pgrep`は、 `proctools`に含まれるツールの一つです。

```
sudo port install proctools
```
* 最近、`Homebrew`を止めて`MacPort`を使い始めました。混同して申し訳ないです。

```
pgrep -fl Finder
```


どうやら、`/System/Library/Core….`以下にあるらしいです。

###qlmanage
しかし、`.md`ファイルの既定のプログラムを`Finder`変更してもうまくいきません。したがって、`qlmanage`を使ってみます。これは、「ファイルのサムネイル画像を一括生成する」ことなどにも使えるコマンドです。

```
qlmanage -p hoge.md
```



できました。次は、 `Quick Look`の Markdown Preview プラグインについてです。


###QLMarkdown

[qlmarkdown](https://github.com/toland/qlmarkdown/downloads)をダウンロードして、解凍します。そして、解凍してできたフォルダ内にある `QLMarkdown.qlgenerator`を `/Library/QuickLook`にコピーします。

```
w3m https://github.com/toland/qlmarkdown/downloads
 
aunpack QLMarkdown-1.3.zip
 
sudo cp QLMarkdown/QLMarkdown.qlgenerator /Library/QuickLook/
```

ちなみに、`aunpack`コマンドの詳細は、過去の記事を参考にしてください。

```
watch -n 1 qlmanage -p hoge.md
```

終了するときは、 `pkill qlmanage`です。