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

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


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

また､私は基本的にパソコンのことは何もわかっていないので､記事内には誤りを含む可能性があります｡よって､できる限り自分の環境を把握した上で､適時読み換えてもらえればと思います｡特に､設定ファイルの場所については気をつけてください｡また､`Git`や`Homebrew`､`MacPort`の導入説明などは省略していますので､注意が必要です｡

また､`pip`コマンドの導入方法などの前回紹介したと思う解説は､省略していきます｡

#zsh
##zshのコマンドラインスタックを便利に使う
zshには､一時的にコマンドを退避させておく機能があります｡以下のようにすることで､`C-q`で退避したコマンドを表示した上で､コマンドを退避できます｡

```shell:~/.zshrc
# C-qでコマンドラインスタックを実行する｡さらに､退避されたコマンドの表示を行う｡
# http://d.hatena.ne.jp/kei_q/20110308/1299594629
# http://qiita.com/items/1f2c7793944b1f6cc346

show_buffer_stack() {
  POSTDISPLAY="
stack: $LBUFFER"
  zle push-line-or-edit
}
zle -N show_buffer_stack
setopt noflowcontrol
bindkey '^Q' show_buffer_stack
```

上の説明では､少し分かりにくいですね｡よって､具体的な事案で考えてみましょう｡

例えば､"特定のフォルダにファイルをコピーしようとするが､ここで､フォルダが存在しないことに気づく"という事案の場合｡

```
$ cp miku.mp3 ~/Download/Chrome/App/Media　//…この時点フォルダがないことに気づく
 
[C-q]　//…コマンドラインスタックを実行
 
$ mkdir -p ~/Download/Chrome/App/Media　//…フォルダを作成するコマンドを実行
 
$ cp miku.mp3 ~/Download/Chrome/App/Media　//…自動で退避したコマンドが現れる
```

コマンドラインスタックは､こんな感じで使えます｡

##表示されているコマンドをクリップボードに記録する
表示されているコマンドをクリップボードに記録したい場合は､以下の様な設定ファイルが有効です｡これで､`C-x`,`C-p`を押すことで､表示されいてるコマンドをクリップボードに記録することができます｡

```shell:~/.zshrc
# http://d.hatena.ne.jp/hiboma/20120315/1331821642
pbcopy-buffer(){
    print -rn $BUFFER | pbcopy
    zle -M "pbcopy: ${BUFFER}"
}
 
zle -N pbcopy-buffer
bindkey '^x^p' pbcopy-buffer
```

##zmv
zshでは､ファイルの移動は､以下の様な一括処理ができますが､一括リネームは､結構面倒なので､[zaw](http://mollifier.hatenablog.com/entry/20101227/p1)を使います｡

```
mv *.{flv,mp4,swf} ~/Movie
```

```
# フォルダ内にある.mp3を.mp4にする
zmv -W '*.mp3' '*.mp4'
```

そして､以下の様な設定を書いておくと､シングルクォートなどを省略できて便利です｡

```shell:~/.zshrc
autoload -Uz zmv
alias zmv='noglob zmv -W'
```


#atool
[atool](http://www.glidenote.com/archives/1076)とは､圧縮ファイルなどのファイルを拡張子から判断して解凍したりするツールの詰め合わせです｡インストールと使い方は､以下のようになります｡様々な拡張子が混在する圧縮ファイルの解凍コマンドが頭に入っていないし､覚える気にもならないという人におすすめです｡私です｡

##atoolのインストール
```
sudo port install atool
```

##atoolの使い方

```
# 解凍
anupack  hoge.tar.gz

# 圧縮
apack  moge.tar.bz2  moge

# アーカイブの中身の確認
als  hogemoge.tar.gz
```

今まで`atool`を使用してなくて､[特別に設定ファイルを書いていた人](http://d.hatena.ne.jp/se-kichi/20101017/1287341473)は､以下のようにすると簡単でよいかもです｡

```
alias -s {gz,tgz,zip,lzh,bz2,tbz,Z,tar,arj,xz}=aunpack
```

#pyful
[pyful](https://github.com/anmitsu/pyful/wiki)とは､Pythonで書かれたファイラーのことです｡私は､ちょっと面倒なファイル操作は､大概`VimFiler`で済ましてしまうことが多いのですが､長時間に渡りファイル操作する場合は､`pyful`を使用することがあります｡ちなみに､`pyful`はとても多機能でファイラー以外にも使えますので､とても便利です｡

##pyfulのインストール
```
sudo pip install pyful
```

##pyfulの使い方
[こちら](https://github.com/anmitsu/pyful/wiki)に非常に詳しく書かれていますので､解説は不要だと思いますが､個人的によく使うものを簡単に説明します｡

```shell:ファイラー
Q //終了
h //コマンドライン
M-RET　//新しいディレクトリ画面を作成
M-C, C-w //現在のディレクトリ画面を削除
<end> //すべてのファイルをマークトグル
* //正規表現にマッチしたファイルをマーク
f, / //インクリメンタルサーチを開始
R //正規表現によるファイル名の一括置換
M-? //すべてのヘルプを表示
```

```shell:コマンドライン
M-i //アクションボックスを起動
M-m //マクロを展開
M-y //クリップボードモードを起動
```

##pyfulの設定ファイル
pyfulを使いこなすには､設定ファイルのカスタマイズが大切です｡

###pyful > 外部コマンドの実行をtmuxに対応させる

```python:rc.py
# Set screen command and arguments.
# https://github.com/anmitsu/pyful/wiki/tips
#     {TITLE} is replaced to window title in screen.
#     {COMMAND} is replaced to a command in screen.
import os
if os.getenv("TMUX"):
    # For tmux:
    pyful.process.Process.screen_command = ("tmux", "neww", "-n", "{TITLE}", "{COMMAND}")
else:
    # For GNU Screen:
    pyful.process.Process.screen_command = ("screen", "-t", "{TITLE}", "bash", "-c", "{COMMAND}")
```

###pyful > ブックマークメニューを表示する
```python:rc.py
menu.items["bookmark"] = (
    ("/(u)sr" , "u", lambda: filer.dir.chdir("/usr")),
    ("/(e)tc" , "e", lambda: filer.dir.chdir("/etc")),
    )
```

###pyful > クリップボードを操作する
```
# カーソル下のファイル名をクリップボードへ設定
echo -n %f | xsel -b

# カーソル下のファイルの絶対パスをクリップボードへ設定
echo -n %F | xsel -b

# マークされているファイル内容をクリップボードへ設定
cat %m | xsel -b
```

下のようにすることで､`N`キーなどで"カーソル下のファイルの絶対パスをクリップボードへ保存"できます｡

```python:rc.py
# https://github.com/anmitsu/pyful/wiki/tips
menu.items["xsel"] = (
    ("name copy"          , "n", lambda: process.spawn("%q echo -n %f | xsel -b")),
    ("absolute path copy" , "N", lambda: process.spawn("%q echo -n %F | xsel -b")),
    ("fileCopy"           , "F", lambda: process.spawn("%q cat %m | xsel -b")),
    )
```

#mc
ファイラーとしては､一時期`mc`を使っていたことがありました｡


`F10`で終了です｡他の操作方法も直感的に分かると思います｡


#Nexus7
今回は､`Nexus7`でCLIというテーマで書いてみようと思っています｡

##Androidを消去し､Ubuntuをインストールする
Androidのデフォルトブートローダーには､ロックが掛かっていますので､ロックを解除する必要があります｡ブートローダーアンロックすると､設定が初期化されますので注意が必要です(バックアップ要)｡



ロックを解除するには､脆弱性をつき､権限を奪取するToolkitが必要になります｡

[Nexus 7のRoot化方法・手順。](http://androidlover.net/tablet/nexus7/nexus7-root.html)

```shell:Ubuntu
sudo add-apt-repository ppa:ubuntu-nexus7/ubuntu-nexus7-installer
 
sudo apt-get update
 
sudo apt-get install ubuntu-nexus7-installer
```

Nexus7のボリュームダウンボタンと電源ボタンを同時に長押しすることでブートローダーが起動します。あとはUbuntu Nexus 7 Installerを起動し、ウィザードに従うだけです｡この間､パソコンと端末は､USB接続しておきます｡

[Nexus 7にUbuntuをネイティブインストール](http://c0lvlput3r.blogspot.jp/2012/10/installing-ubuntu-on-nexus-7-native.html)

##仮想環境にUBUNTUをインストールする
Android上でUbuntuを起動させる手順です｡ [Complete Linux Installer](https://play.google.com/store/apps/details?id=com.zpwebsites.linuxonandroid&hl=ja)と [Android Terminal Emulator](http://android-terminal-emulator.softonic.jp/android)､さらにVNC Client 例えば､ [Android VNC Viewer](https://play.google.com/store/apps/details?id=android.androidVNC&hl=ja)をインストールします｡



そして､Complete Linux Installerを使って､必要なファイルをダウンロードし､ LaunchからUbuntuを起動します｡



後は､VNC ClientでVNC接続し､デスクトップを操作できます｡

[中華パッドでLinux（その2）](http://nekomemo.redtabby.sub.jp/?eid=20)

##ANDROIDでCLI
[Term20121110.apk](http://ux.getuploader.com/android_files/)をダウンロードし､Gmailにでも添付し､インストールしましょう｡

```
cd ~/Downloads/

w3m http://ux.getuploader.com/android_files/

mutt -n -F settings.txt -s "SUBJECT" hoge2@gmail.com -a Term20121110.apk < body.txt
```

必要な設定は､セキュリティ →「提供元不明のアプリ」にチェックを入れて､Android の Gmail アドレス宛に apk ファイルを添付したメールを送信し､開くだけです｡

[Nexus7でもcui](http://d.hatena.ne.jp/rattcv/20121005)

[tmux入りました｡](http://d.hatena.ne.jp/rattcv/20121016)

[ストア以外から入手したapkファイルをAndroidにインストールする方法](http://www.teradas.net/archives/6078/)

[mutt を使用してメールを送信する方法](http://blog.torigoya.net/2012/02/19/mutt/)


##おすすめアプリ
CLIとは全く関係ないのですが､ついでにNexus7のおすすめアプリでも紹介してみたいと思います｡

[Vim Touch](https://play.google.com/store/apps/details?id=net.momodalo.app.vimtouch&hl=ja)
このアプリは､AndroidでVimが使えるというものです｡ こちらのサイトがNexus7を使っていく上で非常に分かりやすくていいですね｡



[Android Terminal Emulator](https://play.google.com/store/apps/details?id=jackpal.androidterm&hl=ja)
必須アプリですね｡Androidはこういうアプリがあるのでいいですね｡もちろん､iOSもrootをとれば､こういうアプリはあるんですけどね...｡



[Perfect Viewer](https://play.google.com/store/apps/details?id=com.rookiestudio.perfectviewer&hl=ja)
PDFプラグインも用意されているコミックビューワー｡電子書籍を読むのに使用｡



[VLC for Android Beta](https://play.google.com/store/apps/details?id=org.videolan.vlc.betav7neon&hl=ja)
定番で多機能の動画プレイヤーです｡



[Google 日本語入力](https://play.google.com/store/apps/details?id=com.google.android.inputmethod.japanese&hl=ja)
他の入力支援アプリよりも適切な日本語を補完してくれます｡



[アストロファイルマネージャー](https://play.google.com/store/apps/details?id=com.metago.astro&hl=ja)
ファイルマネージャーはこれがベストです｡今のところは｡



[Fing](https://play.google.com/store/apps/details?id=com.overlook.android.fing&hl=ja)
定番になりつつあるネットワークスキャナ｡



[Olive Office Premium](https://play.google.com/store/apps/details?id=com.olivephone.edit&hl=ja)
Office関連の様々な拡張子に対応｡



[SketchBook Express for Tablets](https://play.google.com/store/apps/details?id=com.adsk.sketchbookhdexpress&hl=ja)
高機能なお絵かきアプリ｡



[ジョルテ](https://play.google.com/store/apps/details?id=jp.co.johospace.jorte&hl=ja)
カレンダー､スケジュール管理など｡



[Dropbox](https://play.google.com/store/apps/details?id=com.dropbox.android&hl=ja)
ファイル共有でお馴染みDropbox｡個人的には､設定ファイルをGithub経由ではなく､Dropboxで管理しているので､必須｡



[Pixlr Express](https://play.google.com/store/apps/details?id=com.pixlr.express&hl=ja)
簡単にプロの仕上がりにできる写真編集アプリ｡

#exFAT
MacとWindows間でファイル共有をしたい場合は､HDDのフォーマットは､`exFAT`にするのがおすすめです｡多分以下のようにすることで､フォーマットできると思います｡`Winキー`+`R`を押し､`cmd`と入力しましょう｡コマンドプロンプトが起動します｡

```shell:Windows
#DドライブをexFATでフォーマットする
convert D:/fs:exfat
```

ちなみに､Linuxで`exFAT`でフォーマットしたHDDを認識させる場合､以下のようにします[Ubuntuの場合](http://aruneko.ie-t.net/archives/70)

```
$ sudo add-apt-repository ppa:relan/exfat
 
$ sudo aptitude update
 
$ sudo aptitude upgrade
 
$ sudo aptitude install fuse-exfat
```


ちなみに､古いパソコンの場合は(XPなど)､特別にパッケージをダウンロード､インストールすると､フォーマットできるようになると思います｡

今回は､ここまでです｡前回予告したツールが紹介できなくて残念です｡スクリーンショットを撮影する機会があれば､紹介すると思います｡よろしくお願いします｡


[Command Line で使用しているツールまとめ vol.1](http://qiita.com/items/10a9086de309cef5e185)

[Command Line で使用しているツールまとめ vol.2](http://qiita.com/items/8fab37433f8b9606f75c)

[Command Line で使用しているツールまとめ vol.3](http://qiita.com/items/bd319bdaffb403d5e605)

[Command Line で使用しているツールまとめ vol.4](http://qiita.com/items/e0870756171c0f72ff63)