Linux
Linuxコマンド

WIP: よく使うコマンドと主な使い方〜初級編〜

ssh

主にサーバーにログインするために利用する

ssh vagrant@192.168.33.10
ssh -i ~/.ssh/id_rsa vagrant@192.168.33.10

ssh-keygen

秘密鍵と公開鍵のペアを生成するために利用する

# 鍵ペアの生成
ssh-keygen -t rsa
# 秘密鍵から公開鍵を生成
ssh-keygen -lf ~/.ssh/id_rsa

cd

change directoryの頭文字との噂
文字通りディレクトリ移動の際に利用する

cd /
cd /var/www/html
# cdに限らないけど ; で区切れば複数コマンドを続けて実行できる
cd /var/tmp; cd ../

ls

list
指定したパスのファイル一覧を表示する

ls
# パーミッションなどの詳細な情報も一緒に表示
ls -la
# サイズ表記をわかりやすく表示
ls -lah
# 環境によって ~/.bashrc などにショートカットが設定されていたりする
alias ll='ls -l'

find

特定の条件に一致するファイルを検索する

# .htaccessって名前のファイルを検索
find . -type f -name '.htaccess'
# logというディレクトリを除外してerror_logって名前のファイルを検索
find . -type d -name 'log' -prune -o -type f -name 'error_log'
# 配下のファイルのパーミッションをまとめて変更
find . -type f | xargs chmod 0644

mkdir

make directoryじゃないかと予想
文字通りディレクトリを作成する

mkdir hoge
# 2階層以上のディレクトリを一気に作成
mkdir -p hoge/fuga
# 複数のディレクトリを同時に作成
mkdir -p hoge/{fuga,foo}

cp

copyじゃないかと予想
ファイルまたはディレクトリのコピーを行う際に利用

cp src.txt dist.text
# ディレクトリをコピー
cp -r src dist
# パーミッションや所有者などの情報を引き継いでコピー
cp -rp src.txt dist.txt

rm

removeの略だと思われる
文字通り削除するコマンド

'rm /'とかやってみたいけど未だにやったことない

rm del.txt
# ディレクトリの削除
rm -r del

mv

moveじゃないかと予想
ファイルまたはディレクトリの移動に利用
内部的にはcpしてからrmをしていると思われる
名前を変更するときとかにも使う

mv src.txt dist.txt
# ディレクトリを移動
mv -r hoge huga

tree

ファイルツリーの表示を行う
ディレクトリ階層が深い場所とかで全体を俯瞰したいときに利用したり

tree /var/www/html
# 3階層目まで表示
tree -L 3 /var/www/html/

ln

linkかな
シンボリックリンクを作成する

# /var/www/html 配下に sourceという名前で /vargrant/source に対するリンクを貼る
ln -s /vagrant/source /var/www/html/source
# リンクつけなおし
ln -snf /vagrant/source2 /var/www/html/source
# 今いる場所にリンクを貼りたい場合は第2引数は省略化
ln -s /usr/local/bin/composer

sudo

super user doかな
sudoするにはログイン中のユーザーにsudo権限が必要
sudo権限についてはvisudoコマンドで設定するか/etc/sudoers.d/配下にユーザーファイルを置く

# rootになる
sudo su -
# apacheユーザーで実行
sudo -u apache php -r 'echo date("Y-m-d H:i:s");'

su

super user? switch user? いいえ、 substitute userです
ログインユーザーを切り替える

su - ec2-user

service

主にCentOS6系やAmazon Linuxでサービスの操作に利用
サブコマンドは起動スクリプト (/etc/rc.d/init.d/配下) に依存するので代表例としてApacheで

# 登録されているサービスの状態を一覧で表示
service --status-all
# サービス開始
sudo service {{ サービス名 }} start
# サービス停止
sudo service {{ サービス名 }} stop

cat

ファイルの中身を表示する
concat(結合する)が由来らしい

cat hoge.txt
# 複数ファイルの中身を繋げて表示
cat hoge.txt foo.txt 

less

スクロール可能な状態でファイルの中身を表示する
f(forward)で送る、b(backfward)で戻る、gで先頭、G(Shift + g)で最後へ移動
細かなオプションはh(help)で参照可能

less foo.txt

touch

空ファイルを作成するときに利用
.gitkeepとか作るときに便利

touch logs/.gitkeep

vim (vi)

おなじみエディタツール
visual editorの略らしい
vimに関しては多岐にわたっちゃうので詳しくはまた別記事で

tail

ファイルの最後数行を表示
他のコマンドと組み合わせたりして使うことが多い
ログを見たりするときに使うかも

tail /var/log/httpd/access_log
# 行数を指定して表示
tail -n 100 /var/log/httpd/access_log
# ファイルを開きっぱなしにして表示
tail -f /var/log/httpd/access_log

head

ファイルの最初数行を表示
他のコマンドと組み合わせたりして使うことが多い

# 最終更新順に並べて先頭を表示

ls -lat | head

scp

secure copyの略
ローカルのファイルをリモートへ転送したりその逆もできる
ローカルで編集したファイルや画像ファイルをサーバーにあげたりするときに利用

# ローカルからリモートへ
scp -i ~/.ssh/id_rsa hoge.txt vagrant@192.168.33.10:/tmp/ 
# リモートからローカルへ
scp -i ~/.ssh/id_rsa vagrant@192.168.33.10:/tmp/hoge.txt .
# ディレクトリをコピー
# ~/.ssh/configに接続設定を記述しておけばサーバー名だけでいける
scp -r foo aws.remote:/tmp/

diff

ファイル間の差分を確認するときに使う

git

みんな大好きバージョン管理ツール
すごくちゃんとまとめているステキな記事があった

https://qiita.com/konweb/items/621722f67fdd8f86a017

ps

プロセス一覧を見たりするときに利用

top

サーバーの負荷状況を確認したりするときに利用する
主にどのプロセスがメモリないしはCPUを喰っているのか、
Load Averageはどのくらいあがっているかなどなど

top
# 抜けるときはq
# コマンドキー一覧はh

xargs

他のコマンドと組み合わせで利用したりする
他のコマンドの出力を1行ずつ処理したいときとか
そのままパイプでつないで渡して引数が多すぎて怒られた場合とかは便利

# 1行ずつ処理
cat id.csv | xargs -L 1 echo

pwd

今いる位置を絶対パスで表示
print working directoryらしい

hirarin-no-MacBook-Pro:hirarin hirarin $ pwd
/Users/hirarin

chmod

change modeかな
パーミッションの変更

記号表記 オクテット表記
r 4
w 2
x 1

つまり755rwxr-xr-xになる

chmod 0664 hoge.txt
# ディレクトリ配下のパーミッションを再帰的に変更
chmod -R 0664 hoge/
# 所有ユーザーの権限に読み込みを追加
chmod u+r hoge.txt
# 所有グループから書き込み権限を剥奪
chmod g-w hoge.txt

chown

多分change ownerだと思われる
ファイルの所有者の変更

chown vagrant:vagrant hoge.txt
# ディレクトリ配下のパーミッションを再帰的に変更
chmod -R 0775 hoge/

grep

global search a regular expression and printの略らしい
正規表現に一致する行を検索するときに利用

# foo.txtからhogeを検索
grep 'hoge' foo.txt
# apacheがyumでインストールされているか確認
yum list installed | grep httpd
# 設定ファイルからコメント行を除外して表示
cat /etc/httpd/conf/httpd.conf | grep -v -e '^\s*#' -e '^\s*$'
# ディレクトリ配下を検索
grep -r 'hoge' ./*
# 検索にヒットした前後2行を一緒に表示
grep 'hoge' -B2 -A2 foo.txt