イノベーション エンジニアブログ


株式会社イノベーションのエンジニアたちの技術系ブログです。ITトレンド・List Finderの開発をベースに、業務外での技術研究などもブログとして発信していってます!


このエントリーをはてなブックマークに追加

ウェブ系エンジニアがLinux使うようになったら覚えておきたいコマンド64選

みなさん元気ですか?城田です。内容は掲題の通りです。

一覧

  • grep

  • find

  • watch

  • alias

  • source

  • awk

  • cut

  • vi

  • xargs

  • sort

  • diff

  • <()

  • uniq

  • time

  • id

  • dig

  • sendmail

  • scp

  • ssh

  • df

  • du

  • top

  • ps

  • kill

  • pkill

  • ls -Gal

  • ll

  • less

  • gzip

  • gunzip

  • tar

  • cp

  • wc -l

  • bg

  • fg

  • nohup

  • which

  • whereis

  • ln

  • echo -n >

  • cd -

  • Ctrl+r

  • tail -f

  • head

  • yum

  • chkconfig

  • ifconfig

  • curl ifconfig.me

  • date

  • touch

  • rm -rf

  • yes

  • mkdir -p

  • sed

  • su

  • wget

  • man

  • telnet

  • tr

  • crontab

  • zcat

  • mv

  • pwd

  • history

grep

ファイルの中から文字を見つけてその行を表示するコマンドです。

基本

fuga.txtというファイルからhogeという文字が含まれる行を表示します。

grep hoge fuga.txt

grep -R

ディレクトリ内のファイルを再帰的に実行する。
fugaというディレクトリ内に存在する全てのファイルで、
hogeという文字が含まれる行を表示する。

grep -R hoge fuga/

grep -i

大文字と小文字を区別せずに実行します。

grep -v

含まれない行を表示します。
プロセス一覧からphpという文字が含まれていて、
grepという文字が含まれないプロセスを表示しようとすると、

ps aux | grep php | grep -v grep

例えばphpというプロセスをgrepしようとすると、上記の様なコマンドを打つことになるが、
必ずそのコマンド自身にもphpという文字が含まれてしまうため、
grepという文字を含む自分自身を表示させないために
grep -v grep とすることが多いです。

grep -c

結果の行数を表示したい場合指定する。
感覚的なものだと思うが、コマンドの最後に入れることが多いです。

grep hoge fuga.txt -c

egrep

grepとは別のコマンドだけど、ここで紹介します。
抽出条件に正規表現が使えます。

egrep 'hoge | fuga' foo.txt

grepコマンドについてはいくら知っても知りすぎることはないと思います!

find

ファイルを見つけるコマンドです。

find . -name hoge
find . -name hoge*

ひとまず -name でファイル名で検索する方法だけ知っていれば良いと思います。
ドットはカレントディレクトリの意です。

watch

後に続くコマンドを指定した秒数で定期的に実行します。

watch -n 10 ps aux | grep 'hoge'

ps aux | grep 'hoge' というコマンドを -nオプションで指定した秒数(上記の場合は10秒)間隔で表示できます。
何か処理をした時の効果を目視で監視したい場合などに使います。

alias

コマンドに別名を付けるコマンドです。

alias ll='ls -Gal'

llコマンドが無い環境などの場合は上記のようにコマンドを発行し、
擬似的にllを再現したりします。
リリース作業の場合などのDB接続コマンドなど操作ミスが発生しうる部分をalias登録しておくと、
操作ミスのリスクを減らすことにも繋がります。
私は意外と使うことが多いコマンドです。

source

現在使用しているシェルのプロファイルを再読込する時に使う!

source ~/.zshrc

awk

一つの言語ではあるがいつも以下が便利なので使ってしまいます。

# hoge.txtの中身を行ごとにスペースで区切ってその7番目の値を改行区切りで表示する
awk '{print $7}' hoge.txt

# こちらはデリミタを " とした場合
awk -F '"' '{print $7}' hoge.txt

個人的にはウェブサーバのログを分割して表示したい時によく使います。
ブラウザのユーザーエージェント部分などはスペースが入ることがあるので、
その場合の分割は -Fオプションで " をデリミタにして使ったりします。

cut

上のawkが無い時は調べて使っているかもです。

vi

マナーとして以下は覚えておきましょう。

i: Insertモードに変更
a:  カーソルの1つ後ろからInsertモードに変更
k: 上
l: 右
j: 下
h: 左
G: ファイルの最下段に移動
g: ファイルの最上段に移動

xargs

出力結果をパイプで渡して次のコマンドの対象とできます。

find . -name 'hoge' | xargs gzip

上記の様にfindで見つけたファイルを圧縮するなど、
findで見つけたファイル全てに対して何か行いたい場合など重宝します。

sort

ファイルの中身を行ごとにソートします。

sort hoge.txt

sort -n

数値としてソートします。

sort -r

逆順にソートします。

私がオプションで使うのは上記2つくらいです。

diff

2つのファイルの差分を取ります。

diff hoge.txt fuga.txt

何かと使います。 -uオプションの表示が好きという人もいますが、私はそのままが好きです。

<()

コマンドでは無いのですが、出力結果を引数として与えることができる書き方です。
私はdiffコマンドとセットで使ったりすることが多いです。

diff <(sort hoge.txt) <(sort fuga.txt)

例えば上記だと、ソートされた結果のhoge.txt とソートされた結果のfuga.txt でのdiffを取れます。

uniq

行のユニークを取ることができます。

uniq hoge.txt

uniq -c

こちらはユニークを取った後にその行数を数えることができます。SQLの group by みたいな感じです。

sort hoge.txt | uniq -c | sort -nr | head -n 10

hoge.txt をソートしてユニークを取ってその重複が何件合ったか行頭に表示し、
その数値が大きい順にソートして上から10行を表示しています。

time

後に続くコマンドの実行時間を計測できます。

time sleep 10

上記であればだいたい10秒の実行処理でした。と出ます。

id

現在ログイン中の自信のユーザ名を表示します。
今rootなのかどうかとか確認する時に使います。

dig

ネームサーバに名前解決をさせることができます。

# 正引き
dig google.com

# 逆引き
dig -x 8.8.8.8

sendmail

メールを送ることができます。

echo 'hoge' | sendmail xxxxx@xxxxx.com

'hoge'の部分に本文を入れて標準出力をsendmailに渡して送る感じです。
メールができるか取り敢えず確認するときなどに。

scp

SSHプロトコルでリモートサーバにファイルをアップしたりダウンロードしたりできます。

scp -i ~/.ssh/yourkey hoge.txt yourserver:~/

なかなかの頻度でやっぱり使います。

ssh

リモートサーバにSSHでログインします。

ssh -i ~/.ssh/yourkey yourserver

scp同様ですが、sshに関しては~/.ssh/configにショートカットを登録しておくことが多いと思いますし、
様々な便利ツールがあると思うのでここでは念のため紹介しました。

df

ディスク容量を表示します。

df -h

-hオプションは human の意だったと思いますが、
GB(ギガバイト)MB(メガバイト)kB(キロバイト)などの単位で表示してくれます。

du

ディレクトリ配下も含めて再帰的にディスク仕様サイズを計算して表示できます。
よく使うのが以下です。

du -sh ./*

カレントディレクトリ配下のディレクトリのディスク容量を再帰的に計算して、
これまた human のオプションで単位表示してくれます。

top

現在のOSのロードアベレージやCPU使用率や各プロセスのメモリ使用状況など表示できます。
ひとまず打って見てください!
終了する時はCtrl+cで強制終了してください!

ps

現在のプロセスを表示します。

ps aux | grep hoge

私は aux と書いてある通り、a と u と x をいつもオプション指定します。

kill

プロセスをkillできます。
psコマンドで調べたプロセスIDを指定します。

kill -9 111111

なぜ -9 というオプションで単体でプロセスをkillするという意味なのかは未だに。。よく知りません。

pkill

プロセスをまとめてkillできます。

pkill -f php

コマンドが入ってない場合などはxargsなどを使ったり1つずつkillしたりしますが、
pkillが入っている時は上記で、例えばphpとプロセス名に入っているプロセス全てをまとめてkillできます。

ls -Gal

ファイルをパーミッションや所有者、最終変更時刻などと共にリスト表示できます。
ls -la の方が一般的だと思いますが、覚えやすいので Gal(ギャル)で指定してます。

ll

ls -Gal と(多分だいたい)同じと認識してます。

llが入っていればllを使っています!

less

ファイルの中身を表示するコマンドです。

less -N

行番号付きで表示できます。

less -S

折り返し無しで表示できます。

使うオプションはこれくらいです。

gzip

ファイルを圧縮できます。圧縮元のファイルは無くなるので注意です。

gunzip

ファイルを解凍できます。解凍元の圧縮ファイルはなくなるので注意です。

tar

ファイル群(ディレクトリ)を1ファイルにまとめられます。

# 圧縮
tar zcfp

# 解凍
tar zxfp

-pオプションはなるべくパーミッションを保つオプションで、いつも指定してます。

cp

ファイルをコピーするコマンド

cp -p -R hoge fuga

-pオプションはパーミッションなどをなるべく維持します。
-Rオプションは再帰的に処理です。

wc -l

行数を数えるコマンドです。
wcコマンドは -lオプション付きでしか使ったことないです。Lineという意味かな?

bg

Ctrl+z で一時停止したプロセスをバックグラウンドに持っていけます。
思いの外時間がかかるプロセスを実行して、端末を閉じて帰りたいのに帰れないって時に使います。

fg

bgでバックグラウンドに持っていったプロセスをフォアグラウンドに持ってくるコマンドです。

nohup

後に続くコマンドで立ち上がったプロセスをhupさせないようにするコマンドで、
初めから処理を仕掛けて帰宅したい場合などは使います!

which

コマンドの場所を示すコマンドです。

whereis

こちらも、コマンドの場所を示すコマンドです。

whichとwhereisの違いはよく知らないのですが、たまにwhichでは出てこないことがあるような。。

ln

リンクを貼るコマンドです。

ln -snf hoge.txt fuga.txt

意外と使います。
hoge.txtに対してfuga.txtというリンクを作成できます。

echo -n >

ファイルを空っぽにできます。

echo -n > hoge.txt

意外と使ってるかなと。

cd -

一つ前の作業ディレクトリに移動できます。

Ctrl+r

コマンドの履歴を検索できます。
例えば前回のMySQLへのログインコマンドを探す場合、

Ctrl+r > mysqlと入力 > Ctrl+r

更に過去を探す場合はそのまま Ctrl+r をしていく感じです。

tail -f

ファイルが更新されたら即座に表示できます。

tail -f /var/log/httpd/access_log

例えば上記のようにアクセスログを監視できます。

head

ファイルの頭から指定した行数を表示します。

head -n 10 hoge.txt

基本的な使い方は上記なのですが、私は組み合わせで使うことがほとんどです。

grep 'hoge' /var/log/httpd/access_log | awk -F '"' '{print $7}' | sort | uniq -c | sort -nr | head -n 10

上記の場合は、
access_log を hoge で grep後に、awk で " で区切った左から7番目の文字列を sort して uniq -c して 合致数の多い順に並べて、その上位10個を抽出、
という感じです。

yum

RedHat系Linuxのパッケージ管理コマンド

yum install
yum search
yum list installed
yum history

この4つだけ覚えておけば、ほぼ問題ないと思います。

chkconfig

サービスの自動起動を管理するコマンド

chkconfig list
chkconfig add

この2つだけ覚えておけば、ほぼ問題ないと思います。

ifconfig

ネットワーク機器の状況を表示するコマンドです。

curl ifconfig.me

作業サーバのグローバルIPを表示できます。
ifconfigにグローバルIPが割り振られていない場合など使うことが結構あります。

date

現在時刻を表示できます。

touch

空ファイルを作成するコマンドです。

rm -rf

ファイルを削除するコマンドです。

-r ディレクトリを削除
-f 確認をせずに強制削除

yes

yを表示し続けるコマンド!

yes | rm ./*

rm で出てくる削除確認を全て y で実行してくれます。

mkdir -p

ディレクトリを作成するコマンドです。

-p 再帰的に作成できます。

mkdir -p hoge/fuga/foo

上記の場合だとコマンド1行で hoge/ hoge/fuga hoge/fuga/foo の3ディレクトリ作成できますし、
既にディレクトリがある場合はそのまま上書きせずステータス0で返すのでシェルスクリプトなどで重宝します。

sed

文字列置換ができます。
foo.txtのなかのfugaをhogeに全て変換してbar.txtに出力します。

sed s/hoge/fuga/g foo.txt > bar.txt

su

別ユーザに切り換わります。

sudo su -
su - hoge

wget

ファイルをダウンロードできます。

man

指定したコマンドのマニュアルを表示できます。

telnet

ポートを指定してコネクションを張ることができます。

telnet xxxx.com 25

だいたいそのポートが空いているのかどうかを調べるときに使う感じです。

tr

文字列を置換できます。
sedよりも簡易的なイメージです。

# test.html の 改行コードを削除
cat test.html | tr -d "\n"

# test.html の 改行コードを <br> に変更
cat test.html | tr "\n" "<br>"

crontab

定期的にプロセスを実行させることができます。

crontab -e
crontab -l

cronの使い方は書ききれませんので、割愛します。

zcat

圧縮ファイルの中身を解凍せずに表示できます。

mv

ファイルを移動させることができます。

pwd

現在のディレクトリの絶対パスを表示できます。

history

過去の操作履歴を表示できます。
因みに私のMacのシェルhistoryは、

▶ history | awk '{print $2}' | sort | uniq -c | sort -nr | head -n 20
1195 grep
 833 less
 705 git
 681 cd
 551 ll
 423 docker
 396 aws
 380 ssh
 354 dig
 316 rm
 280 mv
 252 emacs
 201 cat
 194 scp
 187 curl
 171 vi
 165 mkdir
 134 brew
 128 sh
 125 open

となりました。

所感

これくらい覚えておけばひとまずウェブ系エンジニアとしてLinuxを使えるのではないかと思いました。
これがない!というものがありましたら是非連絡をいただきたいです!

以上です。