目次
- 目次
- はじめに
- 新しくシェルを別タブで立ち上げる
- タブ間を移動する
- コマンド履歴を検索する
- ファイル名でファジー検索して、vimで開く
- コマンド履歴を複数のシェルで共有する設定
- 画面表示を一時停止 or 再開する
- シェルの入力コマンドを削除
- シェルの画面を初期化する
- bashのよく使うショートカット
- cdを強化する
- あるファイルのフルパスを取得する
- 標準出力を表示したまま出力をファイルに保存
- ssh越しに標準出力を表示したまま出力をファイルに保存
- sshの使い方
- ファイル検索の方法
- ディレクトリ内のファイルの数を数える
- ハードディスクの空き容量を確認する
- 各スレッド毎のCPU使用率を見る
- ディレクトリの容量を見る
- ディレクトリのすべてのzipファイルをunzipする
- 巨大なファイルを読む
- ログファイルを監視
- 起動プロセス一覧表示と検索
- ネットワーク内のIPアドレスを検索する
- 使われているポートを検索
- ポート番号/プロセスIDの詳細を確認
- シェルの環境を一発で設定するdotfilesリポジトリを作った
- bashの使い方を学ぶ上でのおすすめ資料
- 参考資料
- MyEnigma Supporters
はじめに
高速でシェルを扱えるエンジニアになりたいので、
おすすめのテクニックをメモとして残しておきます。
基本的にはbashを使用することを想定しています。
新しくシェルを別タブで立ち上げる
自分は沢山タブでシェルを立ち上げる派なので重要です。
Mac:
cmd + t
Ubuntu:
ctrl+shift+t
タブ間を移動する
Mac:
cmd + Shift + 右左
Ubuntu:
alt+数字 (左から1,2,3)
コマンド履歴を検索する
percol (fzf)というツールを使って、
ヒストリー検索を楽にしています。
ctrl + rでコマンドの履歴をファジー検索できるようにしています。
ファイル名でファジー検索して、vimで開く
$ vim
fzf
コマンド履歴を複数のシェルで共有する設定
自分は複数のシェルを立ち上げる派なのですが、
bashはコマンド履歴を終了した時に保存する仕様なので、
あるシェルで実行したコマンドを、
別のシェルで実行したい時に、履歴から探索することができません。
そこで、.bashrc または .bash_profileに下記の設定を追記しておくと、
コマンドを入力した時に、自動でヒストリーに履歴を書き込んでくれるので、
他のシェルでもコマンド履歴が利用できるようになります。
# share bash history function share_history { history -a history -c history -r } PROMPT_COMMAND='share_history' shopt -u histappend
画面表示を一時停止 or 再開する
画面表示を一次停止
Ctrl + s
再開
Ctrl + q
標準出力を眺めている時に、
不意に変なものを見つけて、
止めたい時に使います。
シェルの入力コマンドを削除
スペース毎
ctrl + w
カーソルの左を全部消す
ctrl +u
シェルの画面を初期化する
ctrl + l
または
clear
bashのよく使うショートカット
基本的にはemacsのショートカットと同じみたいですが、
下記の3つをよく使います。
Ctrl + a 行頭に移動する
Ctrl + e 行末に移動する
Ctrl + u カーソルより前を削除する, 削除した文字列はコピーされる
cdを強化する
cdコマンドを使って、ディレクトリを移動することは多いと思いますが、
よく移動するディレクトリに、スムーズに移動するために、
enhancdというプラグインを利用しています。
http://qiita.com/b4b4r07/items/2cf90da00a4c2c7b7e60qiita.com
http://www.tellme.tokyo/entry/2015/07/21/142826www.tellme.tokyo
自分の場合、
cd コマンドを入力するとpercolが起動し、
過去に移動したディレクトリの履歴をファジー検索して移動することができます。
cd .. と入力すると、親ディレクトリにpercolを使って、一気に移動できるのも便利です。
あるファイルのフルパスを取得する
readlink -e hogehoge.txt
プログラムを書く時に結構便利です。
標準出力を表示したまま出力をファイルに保存
標準出力に大量にデータを流している時に、
その出力を見ながら、後で検索するように内容を保存したい時があります。
そんな時はteeコマンドを使いましょう。
teeは標準出力とファイル出力をT字のように、
分けることができるところから、teeという名前になったそうです。
使い方としては、
ls | tee hoge.txt
のようにパイプで繋げばOKです。
-a というオプションを付ければ、
ファイルに追記できます。
ssh越しに標準出力を表示したまま出力をファイルに保存
一方、sshでサーバにログインした時に
標準出力をteeで保存すると、
サーバ側にファイルが作成されてしまいますが、
出力ファイルはクライアント側に作りたい時もあります。
そんな時は、scriptというLinuxコマンドを使いましょう。
コンソールにて、下記のようなコマンドを入力することで、
その後のすべてのコンソール出力をlog.txtに出力することができます。
script log.txt
出力を止める場合は、
exitもしくはctrl+dを押せばOKです。
sshの使い方
こちらを参照下さい。
ファイル検索の方法
最も一般的な方法はfind関数を使うものです。
カレントディレクトリ以下のcppファイルを探す場合:
find . -name "*.cpp"
カレントディレクトリ以下のhogeが付くディレクトリを探す場合:
find . -type d -name "hoge*"
またfind関数は指定した
すべてのディレクトリを走査するので、
検索に時間がかかりますが、
locateというコマンドを使うと、
事前に検索データベースを作ってくれるので
検索が早くなります。
使い方はlocateの後ろに調べたいファイルの一部を入力するだけです。
sampleが付くファイルを探す
locate sample
すべてのパスに対して検索する場合でも、
非常に高速に検索してくれます。
Macの場合は少し設定しないと使いづらいので、
下記のリンクを参考に設定したほうがいいです。
ディレクトリ内のファイルの数を数える
$ ls -1 | wc -l
ハードディスクの空き容量を確認する
df -f
各スレッド毎のCPU使用率を見る
top -H
ディレクトリの容量を見る
$ du -hS
ディレクトリのすべてのzipファイルをunzipする
$ unzip '*.zip'
ファイル数が多い場合は、
$ find . -name '*.zip' | xargs -n1 unzip
巨大なファイルを読む
vimだと、すべてのデータを一旦メモリ上に読み込んでしまうので、
巨大なファイルを開くと重くなってしまいますが、
そんなときは、lessを使うと便利です。
lessは今、表示している部分のみをメモリに展開するため、
大きなファイルでも開くことができます。
また、vimのように、
j, kで移動したり、/ <検索>文字で、検索することもできるため、
vimmerには使いやすいと思います。
また、& <検索文字> でマッチする行だけを表示することもできます。
ログファイルを監視
less -F
もしくは
lessで開いているうちに、Shift+f
「tail -f」を使うのは情弱、情強は「less +F」を使う
ログファイルの末尾の行だけ表示されるので、
便利そうですね。
起動プロセス一覧表示と検索
$ ps aux
検索するときは、
$ ps aux | grep hoge
ネットワーク内のIPアドレスを検索する
$ arp -a
MacとUbuntuの両方でデフォルトで可能です。
使われているポートを検索
$ nmap 127.0.1. -sTU
ポート番号/プロセスIDの詳細を確認
ポート番号から検索する場合
$ lsof -i:8080
プロセスIDで検索する場合
$ lsof -p PID
シェルの環境を一発で設定するdotfilesリポジトリを作った
新しいPCのセットアップなどは、ほとんどすることがありませんが、
なぜかワン・コマンドで実行したくなったので、
下記のリポジトリを作って、設定スクリプトを作っています。
https://github.com/AtsushiSakai/dotfilesgithub.com
READMEにある通り、
リポジトリのpythonコードをcurlでダウンロードして実行すると、
すべての設定がされるようにしています。
bashの使い方を学ぶ上でのおすすめ資料
はじめてbashを触る人には、下記の資料がおすすめです。
漫画ですが、非常に役に立つ知識が詰まっていると思いました。
広くbashについて知りたい方は下記もおすすめです。
またより深くシェル技術を学びたい人は
下記の書籍もおすすめです。
参考資料
MyEnigma Supporters
もしこの記事が参考になり、
ブログをサポートしたいと思われた方は、
こちらからよろしくお願いします。