Linuxコマンドについてまとめてみました

Linuxコマンドはコンピュータに命令するための文字列です。コマンドラインやターミナルからLinuxコマンドを実行することでコンピュータに命令することができます。マウスを使って操作しないで、主にキーボードを使ってコンピュータを操作することになります。ここでは、Linuxコマンドについて解説していきます。

ディレクトリ/ファイル名の一覧表示

bash


# ディレクトリのみ
$ ls -F | grep /

# ファイルのみ、ファイル情報も表示
$ find ./ -type f -ls

# ディレクトリのみ
$ find . -maxdepth 1 -type d | sed -e 's%./%%g'

# 60分以内に更新されたファイルを検索
$ find ./ -type f -mmin -60 -ls

# 60分以内に更新されたディレクトリを検索
$ find ./ -type d -mmin -60 -ls

# 60分以内に更新されたシンボリック・リンクを検索
$ find ./ -type l -mmin -60 -ls

# ファイルのみ
$ ls -F | grep -v /

ディレクトリ/ファイルの容量を表示

bash


# 現在のディレクトリ以下のディレクトリ容量を表示
$ du -sh ./*/

# 現在のディレクトリ以下のディレクトリ/ファイル容量を表示
$ du -sh *

findでファイル名を抽出

bash


# -name: ファイル名がpatternと同じファイルを検索する。ワイルド・カードも使用できる。
$ find . -name "*.html"

指定の所有者に関係のあるファイル/ディレクトリを表示

bash


# 指定の所有者のファイル/ディレクトリを表示
$ find . -user <ユーザー名>

# 指定の所有者ではないファイル/ディレクトリを表示
$ find . ! -user <ユーザー名>

アーカイブの作成/展開

bash


# c: アーカイブを新規に作成
# v: 作成/展開するアーカイブのファイルリストを表示
# f: アーカイブファイル名をパラメータとして指定
$ tar cvf repository.tar repository

# x: アーカイブを展開
$ tar xvf repository.tar

# z: gzip形式のアーカイブファイルに圧縮
$ tar cvfz repository.tar.gz repository

# z: gzip形式で圧縮されたアーカイブファイルを展開
$ tar xfvz repository.tar.gz

# bz2ファイルの解凍
# 解凍後、bz2ファイルは削除される。
$ bzip2 -d repository.bz2

パッケージ管理

bash


## RedHat系(RedHat、CentOS、Fedoraなど) ##
# パッケージの更新
$ sudo yum update

# パッケージの検索
$ sudo yum search <パッケージ名>

# 指定したパッケージのインストール
$ sudo yum install <パッケージ名>

# 指定したパッケージの削除
$ sudo yum remove <パッケージ名>

# 指定したパッケージの情報を表示
$ sudo yum info <パッケージ名>

# インストール済パッケージのリストを表示
$ sudo yum list installed

## Debian系(Debian、Ubuntuなど) ##
# キャッシュの更新
$ sudo apt-get update

# パッケージの更新
$ sudo apt-get upgrade

# パッケージの検索
$ sudo apt-cache search <パッケージ名>

# インストール可能なパッケージのバージョンを確認
$ sudo apt-cache showpkg <パッケージ名>

# 指定したパッケージのインストール
$ sudo apt-get install <パッケージ名>

# 指定したパッケージのバージョンをインストール
$ sudo apt-get install <パッケージ名=バージョン>

# 指定したパッケージの削除(設定ファイルは削除されずに残ります。)
$ sudo apt-get remove <パッケージ名>

# 指定したパッケージの削除(完全に削除)
$ sudo apt-get --purge remove <パッケージ名>

# 指定したパッケージの情報を表示
$ sudo apt-cache show

# インストール済パッケージのリストを表示
$ sudo dpkg -l

スワップ領域の作成/有効化

bash


# dd: ファイルの変換とコピーを行う。
# if: 入力ファイル
# /dev/zero: スペシャルファイルの一つ。すべて0x00の内容で読み出せる。
# of: 出力ファイル
# bs: ブロックサイズ
# count: ブロック数
# 作成されるファイルサイズ(ブロックサイズ×ブロック数)
$ sudo dd if=/dev/zero of=/mnt/swap bs=1M count=1024

# オーナーに対してのみ読み書きの権限を付与
$ sudo chmod 600 /mnt/swap

# スワップ領域を作成(ファイルをスワップ領域に)
$ sudo mkswap /mnt/swap

# スワップ領域を有効化
$ sudo swapon /mnt/swap

# メモリ使用状況を表示する。
$ free

# fstabを編集する。
$ sudo nano /etc/fstab

fstab


...
# 下記を追記する。
/mnt/swap       none    swap    sw      0 0
...

ファイルのダウンロードやアップロード

bash


# O: 取得したデータを標準出力ではなくファイルに出力
$ curl -O http://geisterhacker.com/index.html

ユーザーの作成/削除

bash


# ユーザーの作成
# デフォルトではホームディレクトリが"/home"に作成される。
$ useradd hoge-user

# ユーザーの削除
$ userdel hogs-user

# ユーザーのホームディレクトリも同時に削除
$ userdel -r hoge-user

ユーザー一覧の確認

bash


$ cat /etc/passwd

ファイルやディレクトリの所有者、グループを変更

bash


# 所有者を変更
$ chown hoge-user file

# 所有者、グループを変更
$ chown hoge-user:group-user file

グループの確認/追加/削除

bash


# グループの確認
$ groups hoge-user

# グループに追加
$ gpasswd -a hoge-user hoge-group

# グループから削除
$ gpasswd -d hoge-user hogs-group

2つのファイルの差分を出力

bash


$ diff hoge1.txt hoge2.txt

SSH接続

bash


$ ssh -i /home/hoge-user/mykey_tokyo.pem ec2-user@geisterhacker.com

リモートマシンにファイルをコピー

bash


# ファイル転送
$ scp tmp.txt hoge-user@geisterhacker.com:/home/hoge-user

# ディレクトリ転送
$ scp -r tmp hoge-user@geisterhacker.com:/home/hoge-user

# 秘密鍵ファイルを指定する。
# デフォルトでは、SSHバージョン1は、~/.ssh/identity、
# SSHバージョン2は、~/.ssh/id_rsaと~/.ssh/id_dsaを使用する。
$ scp -i ~/.ssh/secret.pem tmp.txt hoge-user@geisterhacker.com:/home/hoge-user

プロセスの強制終了

bash


$ control-z

ファイル一覧を抽出

bash


$ ls -l | awk '{print $9}'

文字コード変換

bash


# nkfパッケージのインストール
$ sudo apt-get install nkf

# 文字コードを判別
$ nkf -g sjis.txt 

# Shift-JISコードからUTF-8コードへ変換
$ nkf -S -w sjis.txt > utf8.txt 

サービス管理

bash


# 稼働中のサービスを一覧表示
$ systemctl list-units --type=service

# 定義されているサービスを一覧表示
$ systemctl list-unit-files --type=service

# サービスの起動
$ systemctl start sshd.service

# サービスの再起動
$ systemctl restart sshd.service

# サービスの停止
$ systemctl stop sshd.service

# サービスの自動起動
$ systemctl enable sshd.service

# サービスの自動起動の無効
$ systemctl disable sshd.service

# サービスのステータスを確認
$ service docker status

ネットワーク関連

bash


# 自分のIPアドレスを確認
$ ifconfig

# 特定のポートをオープンしているプロセスを確認
# ルート権限必須
$ sudo lsof -i

# ホストまでの経路を確認
$ traceroute geisterhacker.com

# arpテーブルを参照
$ arp

# tcpdumpのインストール
$ sudo apt-get install tcpdump

# eth0インタフェースに関するパケットをキャプチャ
# -n: IPアドレスやポート番号を名前に変換しない。
# -i: 標準出力をバッファリングする。
$ sudo tcpdump -n -i eth0

# 192.168.11.1に関連するパケットをキャプチャ
$ sudo tcpdump host 192.168.11.1

# 80番ポート宛てに関連するパケットをキャプチャ
$ sudo tcpdump dst port 80

# ホスト192.168.11.1の80番ポート宛のパケットをキャプチャ
$ sudo tcpdump dst port 80 and host dst 192.168.11.1

# arpと22番ポートを除くパケットをキャプチャ
$ sudo tcpdump -n not arp and not port 22

ログイン関連

bash


# ログイン履歴を表示(デフォルト1ヶ月分)
$ last

# 過去のログイン履歴を表示(1ヶ月前)
$ last -f /var/log/wtmp.1

環境変数

bash


# 環境変数の一覧表示
$ export -p

メモリサイズとCPU情報を確認

bash


# CPU情報を確認
$ cat /proc/cpuinfo

# メモリサイズを確認
$ cat /proc/meminfo

# メモリ解放
# ディスクへ書き込み済みのclear_cacheのみがクリアされる。
# 未保存のdirty_cacheはクリアされない。
$ su root
root> echo 3 > /proc/sys/vm/drop_caches