読者です 読者をやめる 読者になる 読者になる

MyEnigma

とあるエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

おすすめシェル時短テクニック&ツールまとめ

Linux ShellScript

入門bash 第3版

入門bash 第3版

目次

 

はじめに

高速でシェルを扱えるエンジニアになりたいので、

おすすめのテクニックをメモとして残しておきます。

基本的にはbashを使用することを想定しています。

 

新しくシェルを別タブで立ち上げる

自分は沢山タブでシェルを立ち上げる派なので重要です。

Mac:

cmd + t

Ubuntu:

ctrl+shift+t

 

タブ間を移動する

Mac:

cmd + Shift + 右左

Ubuntu:

alt+数字 (左から1,2,3)

 

コマンド履歴を検索する

percolというツールを使って、

ヒストリー検索を楽にしています。

myenigma.hatenablog.com

ctrl + rでコマンドの履歴をファジー検索できるようにしています。

 

コマンド履歴を複数のシェルで共有する設定

自分は複数のシェルを立ち上げる派なのですが、

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

 

cdを強化する

cdコマンドを使って、ディレクトリを移動することは多いと思いますが、

よく移動するディレクトリに、スムーズに移動するために、

enhancdというプラグインを利用しています。

github.com

qiita.com

www.tellme.tokyo

 

自分の場合、

cd コマンドを入力するとpercolが起動し、

過去に移動したディレクトリの履歴をファジー検索して移動することができます。

cd .. と入力すると、親ディレクトリにpercolを使って、一気に移動できるのも便利です。

 

複数のファイルを連結する

cat *.txt > all.txt

txt形式のログファイルを連結したりするのに便利です。

 

あるファイルのフルパスを取得する

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の使い方

こちらを参照下さい。

myenigma.hatenablog.com

 

ファイル検索の方法

最も一般的な方法はfind関数を使うものです。

カレントディレクトリ以下のcppファイルを探す場合:

find . -name “*.cpp”

カレントディレクトリ以下のhogeが付くディレクトリを探す場合:

find . -type d -name “hoge*”

 

またfind関数は指定した

すべてのディレクトリを走査するので、

検索に時間がかかりますが、

locateというコマンドを使うと、

事前に検索データベースを作ってくれるので

検索が早くなります。

 

使い方はlocateの後ろに調べたいファイルの一部を入力するだけです。

sampleが付くファイルを探す

locate sample

すべてのパスに対して検索する場合でも、

非常に高速に検索してくれます。

 

Macの場合は少し設定しないと使いづらいので、

下記のリンクを参考に設定したほうがいいです。

 

カレントディレクトリ以下の全ファイルからxxxという文字列を検索

find ./ -name ‘*’| xargs grep ‘xxx’

.cppファイルのみから見つけたい時

find ./ -name ‘*.cpp’ | xargs grep ‘xxx’

 

二つのコマンドを一行で実行する

; (セミコロン)でつなぐと一行で書けます。

シェル・スクリプト・リファレンス - 【 複数のコマンドの実行「;」 】:ITpro

 

ディレクトリ内のファイルの数を数える

$ ls -1 | wc -l

 

ハードディスクの空き容量を確認する 

df -f

 

各スレッド毎のCPU使用率を見る

top -H

 

ディレクトリの容量を見る

du -hS

 

ログファイルを監視

less -F

「tail -f」を使うのは情弱、情強は「less +F」を使う

ログファイルの末尾の行だけ表示されるので、

便利そうですね。

 

シェルスクリプトをデバックモードにする。

シェルスクリプトの冒頭に、

#!/bin/bash -vx と書くと、各コマンドを表示してくれる。

 

$$は予約語でプロセス番号を表す。

一時ファイルの名前にすると良いみたい。

 

cutコマンドを使うと各列の一部のデータを取得できる。

ドット区切りで第二フィールドを取得する。

cut -d. -f2

 

数字列を取得する場合はegrepを使うと良い

0-9の数字が8個並ぶ所を取得する

egrep “[0-9]{8}”

 

awkの使い方

awkは位置指定付きのgrepとして使える

第5フィールドにsuを含む行を抽出

awk ‘$5==“su*”

awkでは文字列を”“で囲むと文字列扱い、囲まないと数値扱いになる

数値にすれば大小の比較条件などを使える。

sedの使い方

nanが混入してしまったデータを0に置き換える

別のファイルとして置き換えたい場合

cat hoge.txt | sed “s/nan/0/g” > hoge2.txt

同じファイルとして上書きしたい場合

sed -i “s/nan/0/g” hoge.txt

sedを使うと単語を置換できる。

複数の条件で置換をしたい場合は、

ファイルに変換用のファイルを作って、読み込ませると良い。

 

シェルの環境を一発で設定するdotfilesリポジトリを作った

新しいPCのセットアップなどは、ほとんどすることがありませんが、

なぜかワン・コマンドで実行したくなったので、

下記のリポジトリを作って、設定スクリプトを作っています。

github.com

READMEにある通り、

リポジトリのpythonコードをcurlでダウンロードして実行すると、

すべての設定がされるようにしています。

 

bashの使い方を学ぶ上でのおすすめ資料

はじめてbashを触る人には、下記の資料がおすすめです。

漫画ですが、非常に役に立つ知識が詰まっていると思いました。

まんがでわかるLinux シス管系女子 (日経BPパソコンベストムック)

まんがでわかるLinux シス管系女子 (日経BPパソコンベストムック)

まんがでわかるLinux シス管系女子 2(日経BP Next ICT選書)

まんがでわかるLinux シス管系女子 2(日経BP Next ICT選書)

 

広くbashについて知りたい方は下記もおすすめです。

入門bash 第3版

入門bash 第3版

 

参考資料

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

入門bash 第3版

入門bash 第3版