目次

Linuxコマンド

cat

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

ユーザー一覧を確認する方法

cat /etc/passwd
実行結果
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
以下略

passwdというファイルの中身を表示する。
CentOSサーバーのユーザー一覧を確認するときに使う。

自分で作成したユーザー以外にも、システム備付のユーザーが大量に表示される。

chgrp

ファイル・ディレクトリのグループを変更するコマンド。

chgrp -R nginx /etc/phpMyAdmin

phpMyAdminディレクトリおよびその子孫ディレクトリのグループをnginxに変更している。

chmod

ファイル・ディレクトリのパーミッションを変更する。

数字モード

777のように数値でアクセス権を設定する。


桁の意味


数字の意味

7 = 4 + 2 + 1なので、読み・書き・実行ができる。
5 = 4 + 1なので、読み・実行ができる。
のような仕組み。


chmod実行例1

chmod 700 xxx

xxx(ファイルまたはディレクトリ)のパーミッションを700に変更。


chmod実行例2

chmod -R 700 xxx

-Rオプションにより、xxxディレクトリの中のファイル・ディレクトリも一括でパーミッションを変更。

シンボルモード

シンボルモードのオプション


ターゲット
オプション 説明
u user(所有者)
g group(所有グループ)
o others(所有者・所有グループ以外のユーザー)
a all(u, g, oすべて)
省略 aを指定したことに

演算子
オプション 説明
+ 権限を追加
- 権限を削除
= 指定した権限にする

アクセス権
オプション 説明
r 読み込み権限
w 書き込み権限
x 実行権限
s SUID(Set User ID)権限

sはxよりも上位の権限。
rwxは、読み・書き・実行だが、
rwsは、読み・書き・SUIDで実行

/usr/bin/su/usr/bin/sudoなどのファイルはs権限が設定されており
rootユーザー以外でsusudoコマンドを実行しても
rootユーザーが代理実行するような設定になっている。

chmodの実行例1

chmod o+x xxx

othersに実行権を追加。


chmodの実行例2

chmod o-x xxx

othersから実行権を削除。

chown

ファイル・ディレクトリの所有者を変更する。

chown -R nginx:nginx /home/user1/xxx

/home/user1/xxx以下のすべてのディレクトリとファイルの所有者を nginx:nginx に変更。

-Rはリカーシブ。指定ディレクトリ配下のすべてのディレクトリ・ファイルに対してchownを行う。
-Rを付けなければ、指定したディレクトリまたはファイルだけをchwon。

cp

ファイルをコピー

cp aaa bbb

aaaというファイルをコピーして、bbbというファイルを作成する。

ディレクトリをコピー

コピー先のディレクトリがない場合

cp -r aaa bbb

aaaというディレクトリをコピーして、bbbというディレクトリを作成する。

-rオプションがないと、
cp: ディレクトリ `aaa' を省略しています
というエラーが出てコピーに失敗する。

コピー先のディレクトリが元々ある場合

cp -r aaa bbb

bbbというディレクトリが元々ある場合、bbb/aaaというディレクトリが作成される。

crontab

cronでコマンドを定期実行。

crontabを編集

crontab -e

crontabを表示

crontab -l

curl

curl(カール)とは、指定したURLからデータを取得するためのコマンド。
client for URLの略。

curl -OL

curl -OL https://ja.wordpress.org/wordpress-5.7.2-ja.tar.gz

https://ja.wordpress.org/wordpress-5.7.2-ja.tar.gzというURLへアクセスしてデータをダウンロード、
wordpress-5.7.2-ja.tar.gzというファイルへ保存する。

オプションなしでURLを指定すると、標準出力に取得したデータが表示される。

-Oオプションを指定すると、ファイルに保存される。

-Lオプションを指定すると、URLにリダイレクトが含まれていた場合に、リダイレクト後のURLからデータを取得できる。

curl -sS

curl -sS -o 出力先PATH http://対象のURL

-sは、silentオプション。
経過を出力しなくなる。

-sSは、silentだけどエラーだけは出力するためのオプション。

curl -I

curl -I http://example.com

curl -Iでリクエストヘッダの中身を見られる。

nginxの.confの中に
add_header $document_root$fastcgi_script_name $document_root$fastcgi_script_name
のように書けば
$document_root$fastcgi_script_nameの値をヘッダから確認できる。

date

日付と時刻を表示するコマンド。

基本の使い方

date
実行結果
2021年  7月  2日 金曜日 21:11:47 JST

フォーマットを指定

date "+%Y_%m%d"
実行結果
2021_0702

dd

ファイルをブロック単位でコピーする。

サイズを指定して空のファイルを作成したり、既存のファイルを上書きしたりする。

dd if=/dev/zero of=/swapfile bs=1M count=4096
出力結果
4096+0 レコード入力
4096+0 レコード出力
4294967296 バイト (4.3 GB) コピーされました、 38.3469 秒、 112 MB/秒

ifはinput file(入力ファイル)、
ofはoutput file(出力ファイル)。

bsはblock size、
countは、ブロック数。

/dev/zeroは中身がnull(0x00)のファイル。

dd if=/dev/zero of=/swapfile bs=1M count=4096は、
/dev/zeroというファイルを元に、
/swapfileというファイルを作成している。

swapfileはサイズが4096MB(4GB)で、
中身が0000……(数字の0ではなく、nullの0)で埋め尽くされている。

/swapfileの部分に既存のファイルを指定すれば、ファイルの中身にデータを上書きして、ツールなどを使った復旧が不可能なようにファイルの中身を消し去ることができる。

df

df -h
実行結果
ファイルシス            サイズ  使用  残り 使用% マウント位置
devtmpfs                  988M     0  988M    0% /dev
tmpfs                    1000M     0 1000M    0% /dev/shm
tmpfs                    1000M  8.5M  991M    1% /run
tmpfs                    1000M     0 1000M    0% /sys/fs/cgroup
/dev/mapper/centos-root    14G  5.1G  8.4G   38% /
/dev/sda1                1014M  198M  817M   20% /boot
tmpfs                     200M     0  200M    0% /run/user/1000

ディスク使用量等を確認する

du

du . -m
実行結果
78      ./xxx
78      .

ディレクトリの容量を調べる

duの後ろの.の部分にはディレクトリを指定する
デフォルトでは単位がKBで結果が表示されるが-mオプションをつけるとMBになる

env

env

環境変数を一覧で表示する。

find

ファイルやディレクトリを検索。

findのオプション

オプション 説明
-type d ディレクトリだけ検索
-type f ファイルだけ検索
-exec command {} + findの実行結果に対して、さらに別のコマンドを実行
{} の部分に find の実行結果が入る
+はコマンドをまとめて実行するオプション
-mtimeファイルのデータが最後に変更された日付で絞り込み

findの基本的な使い方

find .

カレントディレクトリを起点に、ディレクトリとファイルを検索。


find /aaa/bbb

指定したパスを起点に、ディレクトリとファイルを検索。

-type (ファイル・ディレクトリだけを検索)

find /home/user1/xxx -type d

ディレクトリだけを一覧表示。


find /home/user1/xxx -type f

ファイルだけを一覧表示。

-name(特定の拡張子だけを検索)

find . -type f -name "*.txt"

-nameオプションで、ファイル名を指定する。
ワイルドカードを使うと、特定の拡張子だけを検索できる。

-exec (findの実行結果に対して追加のコマンドを実行)

find /home/user1/xxx -type d -exec chmod 700 {} +

ディレクトリだけをリストアップして、chmodを実行。

findの実行結果が{}に代入されて、chmodが実行される。

末尾の+により、コマンドがまとめて実行される。
findの結果により、
chmod 700 aaa
chmod 700 bbb
chmod 700 ccc
のような3つのコマンドが実行されるような場合に
chmod 700 aaa bbb ccc
のようにコマンドが統合してくれる。
(処理が速くなる)


find /home/user1/xxx -type f -exec chmod 600 {} +

ファイルだけをリストアップして、chmodを実行。

-mtime (期間指定でファイルを検索)

find . -mtime -3

現在~3日前(0時間~72時間前)に変更されたファイルだけを検索。


find . -mtime 3

ちょうど3日前(72時間~96時間前)に変更されたファイルだけを検索。


find . -mtime +3

更新日が3日超より古い(96時間前~)ファイルだけを検索。

ファイルの中身を検索

find . -type f -exec grep xxx {} +

カレントディレクトリを起点にファイルを検索、
grepを使いxxxという文字が含まれる行(とそのファイル名)を表示。

firewall-cmd

firewall-cmd --list-all

firewall-cmd --list-all

firewallのサービス・ポートなどの解放状況を表示。

実行結果
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

デフォルトでは、
services: dhcpv6-client ssh
portsは空欄となっているはず。

表示されているもののみ許可、表示されていないものはポートがブロックされている。

servicessshとあれば、sshサービスは許可している。
SSHが何番ポートで動いているかは
/usr/lib/firewalld/services/ssh.xml
というファイルの中で定義されている。
(デフォルトでは22番ポート)

firewall-cmd --get-services

firewall-cmd --get-services

firewalldで管理できるサービス一覧を表示。
ブロックされているものも含めて全サービスを確認できる。

firewall-cmd --remove-service

firewall-cmd --remove-service=dhcpv6-client --permanent

dhcpv6-clientをブロックする。
firewalldの許可対象から削除する)

–permanentオプションを指定しないと、サーバー再起動で設定がリセットされるので注意。

firewall-cmd --add-service

firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --add-service=ftp --permanent

httphttpsftpを許可する。

firewall-cmd --reload

firewall-cmd --reload

firewalldの設定をリロード。

リロードしないと、–remove-service–add-serviceで、削除・追加したものが有効にならない。

grep

指定した文字列を含む行を抽出するコマンド

ファイルの中身をフィルター

grep xxx example.txt

example.txtというファイルの中で、xxxという文字が含まれる行だけを表示する

コマンドの実行結果をフィルタ

|を使って、前のコマンドの実行結果をフィルターする

yum list installed | grep php

yum list installedの実行結果(数百行ある)から、phpという文字が含まれる行だけを表示する

grepで OR検索をする

ps auxf | grep -e php-fpm -e PID

ps auxfの実行結果からphp-fpmまたはPIDを含む行だけを表示

ps auxf | grep -e php-fpm だけだと先頭のヘッダー行が見えないのでどの列が何の項目なのか分からない
PIDを含む行も表示して、項目名を出力させると見やすくなる

groups

groups user1

user1というユーザーのグループ名を表示する。

実行結果
user1 : user1

上記の場合は、user1というユーザーのグループ名はuser1

gzip

ファイルを圧縮・解凍するコマンド。

gzipでファイルを圧縮

gzip xxx

xxxというファイル・ディレクトリを圧縮。
xxxがなくなり、xxx.gzというファイルが生成される。

gzipでファイルを解凍

gzip -d xxx.gz

xxx.gzというファイルを解凍。
xxx.gzがなくなり、xxxとういファイルまたはディレクトリが生成される。

id

id user1

user1というユーザーのグループ名などを確認する。

実行結果
uid=1000(user1) gid=1000(user1) groups=1000(user1),10(wheel)

uidがユーザーIDとユーザー名、gidがグループIDとグループ名。
ユーザーに対して複数のグループを割り当てることが可能で、その場合はgroupsに複数のグループが表示される。

ip

ip a

IPアドレスを確認する。

localectl

ロケールを確認

localectl status
実行結果
   System Locale: LANG=ja_JP.UTF-8
       VC Keymap: jp
      X11 Layout: jp

ロケールを設定

System LocaleLANG=ja_JP.UTF-8以外になっている場合は、以下のコマンドを実行

bash
localectl set-locale LANG=ja_JP.UTF-8

ロケールを日本語(ja_JP.UTF-8)に設定

キーマップを設定

VC Keymapjp106以外になっていたら、jp106に変更する

利用可能なキーマップの一覧を表示(jp関連のものだけ)

localectl list-keymaps | grep jp

上記のコマンドで選択可能なキーマップの一覧を表示

実行結果
jp
jp-OADG109A
jp-dvorak
jp-kana86
jp106

一覧にjp106があることを確認

キーマップをjp106に設定

一般的な日本語キーボードの配列はjp106というやつなので、キーマップをjp106に変更する

localectl set-keymap jp106
localectl status
実行結果
   System Locale: LANG=ja_JP.UTF-8
       VC Keymap: jp106
      X11 Layout: jp
       X11 Model: jp106
     X11 Options: terminate:ctrl_alt_bksp

上記のような表示になっていればOK

mkdir

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

カレントディレクトリにディレクトリを作成

mkdir xxx

カレントディレクトリにxxxというディレクトリを作成する。

xxxは任意の文字列。

パスを指定してディレクトリを作成

mkdir /home/user1/xxx

/home/user1/というディレクトリの下に、xxxというディレクトリを作成する。

親ディレクトリも含めてディレクトリを作成

mkdir -p /aaa/bbb/ccc

-pオプションを付けると、親ディレクトリもまとめて作成していれる。

/aaaディレクトリを作成、
/aaa/bbbディレクトリを作成、
/aaa/bbb/cccディレクトリを作成。

nmcli

nmcli(Network Manager Command Line Interface)は、ipの設定などを行うコマンド

nmcli device

ネットワークデバイスの状態を確認するコマンド

nmcli device status
実行結果
enp0s3 ethernet connected    enp0s3
enp0s8 ethernet disconnected --

上記の例だと、ネットワークデバイスが2種類刺さっていて
enp0s3は動いているけど
enp0s8の方は機能していない

nmcli connection show

nmcli connection show
実行結果
NAME   UUID          TYPE     DEVICE
enp0s3 xxx-xx-xx-xxx ethernet enp0s3
enp0s8 yyy-yy-yy-yyy ethernet --

enp0s8DEVICEとなっていて機能していないことがわかる

nmcli connection delete

コネクションを削除するコマンド

nmcli connection delete xxx-xx-xx-xxx

xxx-xx-xx-xxxの部分は
nmcli connection showのコマンドで確認した
UUIDの値

nmcli connection add

コネクションを作成するコマンド

nmcli connection add type ethernet ifname enp0s8 con-name enp0s8

enp0s8DEVICEで新しいコネクションを作成
NAMEenp0s8を設定

IPアドレスを設定

nmcli connection modify enp0s8 ipv4.method manual ipv4.addresses 192.168.100.2/24

enp0s8のネットワークで、IPアドレス(v4)に192.168.100.2を設定

IPアドレスは各自の環境に合わせて設定する

VirtualBoxを使用している場合
ホストOSのVirtualBox Host-Only NetworkのIPアドレスが192.168.100.1ならば
enp0s8には192.168.100.2192.168.100.254の間で好きなIPを設定できる

デバイスの再確認

nmcli device status
実行結果
enp0s3 ethernet connected enp0s3
enp0s8 ethernet connected enp0s8

IPアドレスを設定したことにより
enp0s8disconnectedからconnectedに変わっていればOK

passwd

passwd user1

user1というユーザーのパスワードを設定。

実行結果
ユーザー user1 のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。

新しいパスワードの入力を求められるので、任意の文字列を設定する。

reboot

reboot

サーバーを再起動する。

rm

rm -rf /home/user1/xxx

指定したファイル・ディレクトリを一括削除。

ディレクトリの場合は、ディレクトリ内のディレクトリ・ファイルもまとめて削除する。

sed

文字列を置換するコマンド。

sed -i -e "s/aaa/bbb/g" test.txt

test.txtというファイルの中で、aaaという文字をbbbという文字に置き換える。

-iはinplace(直接編集)オプション。
-iがないと、置換後のものがコンソールに表示される。(ファイルの中身は変化しない)
-iがあると、文字列を置換してファイルの中身を書き換える。

-eの後ろに“s/元の文字列/置き換え後の文字列/g”というルールを書く。
末尾のgがないと、各行の最初にマッチした要素だけ置き換え。
末尾のgがあると、全てのマッチした要素を置き換え。

sedで/(スラッシュ)を置換する方法

127.0.0.1:9000という文字列を
/var/run/php-fpm/php-fpm.sockという文字に置き換えるようなケース。

sed -i -e "s/127.0.0.1:9000//var/run/php-fpm/php-fpm.sock/g" www.conf

上記のように書いてしまうと、
どれが区切り記号の/で、どれが置換文字列の/なのか、システムは判別できない。

実は、区切り記号には、/以外も使える。
@!などを区切り記号として使う。

sed -i -e "s@127.0.0.1:9000@/var/run/php-fpm/php-fpm.sock@g" www.conf

上記のように書くと、
@は区切り記号として認識され、
/はただの文字として扱われる。

“s@元の文字列@置き換え後の文字列@g”

区切り記号は、改行とバックスラッシュ以外で、元の文字列と置換後の文字列に含まない記号ならば何でもOK。

shutdown

shutdown

サーバーをシャットダウンする。

source

source ~/.bashrc

.bashrcへの変更を反映させる。

su

ユーザーを変更するコマンド。

su

suとだけ打つと、rootユーザーに切り替わる。

パスワード入力を求められるので、rootのパスワードを入力する。


su user1

suの後ろにユーザー名を指定すると、そのユーザーに切り替わる。

systemctl

サービスの状態を確認したり、起動・停止・再起動するコマンド。

systemctl status

systemctl status firewalld

firewalldが起動しているか、自動起動になっているかなどを確認。

systemctl enable

systemctl enable firewalld

firewalldを自動起動に設定する。

次回のサーバー起動からfirewalldが自動起動するようになる。

systemctl start

systemctl start firewalld

firewalldを起動する。

tail

ファイルの末尾を表示する

ログファイルなど、行数が多すぎるファイルの末尾の部分だけを見るために使う

基本の使い方

tail xxx.txt

xxx.txt というファイルの末尾の10行だけが画面に出力される

行数を指定

-nオプションで出力する行数を指定できる

tail -n 20 xxx.txt

上記の場合は、xxx.txtというファイルの末尾20行を表示
(オプションを指定しない場合、デフォルトの表示は10行)

継続監視

-fオプションをつけるとファイルを継続して監視できる
(ログファイルが更新された場合など、最新の情報を表示できる)

tail -f -n 20 xxx.txt

上記の場合は、xxx.txtというファイルの末尾20行を、常に最新の状態で表示

終了する場合はCtrl + C

tar

複数のファイルを1つにまとめる(アーカイブする)コマンド。
普通は圧縮・解凍も同時に行う。

tarコマンドのバージョンを確認する方法

tar --version

tarのオプション

オプション 説明
c createの略
アーカイブを作成する
x extractの略
アーカイブを解凍する
v verboseの略
圧縮・解凍の対象になったファイル・ディレクトリ一覧を出力する
f fileの略
ファイル名を指定する
z gzipの略
gzipで圧縮・解凍(.tgzを圧縮・解凍)
j bzip2で圧縮・解凍(.tar.bz2を圧縮・解凍)
J xzで圧縮・解凍(.tar.xzを圧縮・解凍)

.tgz(gzip)の圧縮と解凍

tarで.tgzを作成する

tar czvf xxx.tgz yyy

yyyというファイルを圧縮してxxx.tgzを作成。

tar czvf xxx.tgz yyy zzzのように、複数のファイル・ディレクトリ(yyy zzz)を指定することも可能。

tarで.tgzを解凍する

tar xzvf xxx.tgz

xxx.tgzというファイルを解凍。

.tar.bz2(bzip2)の圧縮と解凍

bzip2gzipよりも圧縮率が高い。
gzipよりも圧縮・解凍に時間はかかるが、容量が小さくなる。
ディスクスペース節約や、別のサーバーにファイル転送するときに有利。

tarで.tar.bz2を作成する

tar cjvf xxx.tar.bz2 yyy

yyybzip2で圧縮、xxx.tar.bz2というファイルを作成する。

tarで.tar.bz2を解凍する

tar xjvf xxx.tar.bz2

xxx.tar.bz2bzip2で解凍する。

.tar.xz(xz)の圧縮と解凍

xzbzip2よりもさらに圧縮率が高い。

xzが使えるのは、tar バージョン1.22以降。

tarで.tar.xzを作成する

tar cJvf xxx.tar.xz yyy

yyyxzで圧縮、xxx.tar.xzというファイルを作成する。

tarで.tar.xzを解凍する

tar xJvf xxx.tar.xz

xxx.tar.xzxzで解凍する。

複数のファイル・ディレクトリを圧縮する

tar cJvf xxx.tar.xz aaa bbb ccc.txt

aaabbbccc.txtxzで圧縮、xxx.tar.xzというファイルを作成する。

tee

ファイルへの出力と、コンソールへの出力を同時に行うコマンド。

pwd | tee -a test.txt
実行結果
/home/user1

コンソールにpwdの結果が表示され、かつtest.txtというファイルの中にも同じ結果が書き込まれる。


cat test.txt
実行結果
/home/user1

-aは追記オプション。
test.txtがもともと存在するファイルの場合、
-aオプションなしだと、test.txtの中身は上書きされ、/home/user1の1行だけになる。
-aオプションありだと、test.txtの中身はそのままで、末尾に/home/user1が追加される。


pwdだと、コンソールにしか出力されない。

pwd > test.txtだと、ファイルには出力されるが、コンソールには出力されない。

pwd | tee test.txtだと、ファイルとコンソールの両方に出力される。

pwdは例として挙げただけなので、pwdの部分が他のコマンドでも使える。

timedatectl

タイムゾーンの確認・変更などをするコマンド

タイムゾーンを表示

timedatectl
実行結果
               Local time: 日 2021-07-25 08:24:08 JST
           Universal time: 土 2021-07-24 23:24:08 UTC
                 RTC time: 土 2021-07-24 23:24:07
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

タイムゾーンを設定

Time zoneAsia/Tokyo (JST, +0900)以外になっていたら以下のコマンドを実行

timedatectl set-timezone Asia/Tokyo

タイムゾーンをAsia/Tokyoに変更できる

利用可能なタイムゾーンの一覧を表示

timedatectl list-timezones | grep Tokyo

timedatectl list-timezonesでタイムゾーンに設定できるキーワード一覧を表示できる
大量のテキストが表示されるのでgrepで表示を絞り込んだほうがいい

uname

カーネル名を表示

uname
実行結果
Linux

ハードウェア名

uname -m
実行結果
x86_64

useradd

useradd user1

user1という名前のユーザーを追加。

usermod

usermod -aG wheel user1

user1というユーザーを、wheelというグループに追加。

wheelというのは、sudoコマンドが使える管理者グループ。

visudo

visudo

visudoを実行すると、テキストエディタが起動し、/etc/sudoers.tmpというファイルを開いた状態になる。

/etc/sudoers.tmpは、sudoコマンドの権限管理をするファイル。

yum

yumのバージョンを確認する方法

yum --version

yumでパッケージを一括アップデート

yum update -y

yumで管理しているパッケージを一括でアップデート。

yumでパッケージを一括アップデート(リポジトリを指定)

yum update --enablerepo=remi,remi-php74 -y

リポジトリを指定して、既存のパッケージを一括アップデート。

インストール済みのパッケージを確認

yum list installed | grep xxx

yumでインストール済みのパッケージを表示。
grep で結果を絞り込み。

zip

圧縮

zip -r xxx.zip yyy

yyyというディレクトリを圧縮してxxx.zipというファイルを生成している

解凍

unzip xxx.zip

xxx.zipというファイルを解凍して、xxxというディレクトリが生成される