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

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)

コマンド履歴を検索する

検索

ctrl+r

行き過ぎたら

ctrl+s

で戻れる

bashの履歴を検索するコマンドが捗りすぎてヤバい!俺の作業効率が2倍どころか更に倍してドンッ!

  

また, historyコマンドでコマンド履歴を表示して、

!数字でその番号のコマンドを実行できるのも便利です。

 

また

history | grep hoge

でhogeを含むコマンドの一覧を出力できます。

 

ただ、percolというツールを使うともっと

ヒストリー検索は楽になります。

myenigma.hatenablog.com

 

画面表示を一時停止 or 再開する

画面表示を一次停止

Ctrl + s

再開

Ctrl + q

 

標準出力を眺めている時に、

不意に変なものを見つけて、

止めたい時に使います。

 

シェルの入力コマンドを削除

スペース毎

ctrl + w

カーソルの左を全部消す

ctrl +u

 

シェルの画面を初期化する

ctrl + l

または

clear

 

一つ前にいたディレクトリに移動

cd -

 

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

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を使うと単語を置換できる。

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

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

参考資料

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

入門bash 第3版

入門bash 第3版