Linuxコマンド

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

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 -R nginx /etc/phpMyAdmin

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

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

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


桁の意味

  • 100の位所有者
  • 10の位グループ
  • 1の位その他のユーザー

数字の意味

  • 4読み込み権限
  • 2書き込み権限
  • 1実行権限

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 -R nginx:nginx /home/user1/xxx

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

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

cp aaa bbb

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

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

cp -r aaa bbb

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

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

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

cp -r aaa bbb

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

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

crontab -e
crontab -l

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

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 -o 出力先PATH http://対象のURL

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

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

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
実行結果
2021年  7月  2日 金曜日 21:11:47 JST
date "+%Y_%m%d"
実行結果
2021_0702

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

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

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 -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

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

env

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

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

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

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


find /aaa/bbb

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

find /home/user1/xxx -type d

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


find /home/user1/xxx -type f

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

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

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

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を実行。

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 --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

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

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

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

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

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

httphttpsftpを許可する。

firewall-cmd --reload

firewalldの設定をリロード。

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

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

grep xxx example.txt

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


yum list installed | grep php

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

groups user1

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

実行結果
user1 : user1

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

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

gzip xxx

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

gzip -d xxx.gz

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

id user1

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

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

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

ip a

IPアドレスを確認する。

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

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

キーマップを確認

localectl list-keymaps | grep jp
実行結果
jp
jp-OADG109A
jp-dvorak
jp-kana86
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

キーマップをjp106に設定。

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

mkdir xxx

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

xxxは任意の文字列。

mkdir /home/user1/xxx

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

mkdir -p /aaa/bbb/ccc

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

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

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

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

VirtualBoxでネットワークにNATホストオンリーアダプターを設定している場合、
enp0s3ネットワークアダプター1(NAT)
enp0s8ネットワークアダプター2(ホストオンリーアダプター)
のような対応関係になっている。

nmcli connection show
実行結果
NAME: enp0s3
UUID: xxxxxxxxxxxxxxxxxxxxxxxxx
TYPE: ethernet
DEVICE: enp0s3

NAME: □□□□1
UUID: xxxxxxxxxxxxxxxxxxxxxxxxx
TYPE: ethernet
DEVICE: enp0s8

enp0s8NAMEは、おそらく有線接続1だが、文字化けしている。
文字化けしているとipアドレス設定のときにNAMEが指定できず困る。

文字化けしているコネクションをいったん削除し、コネクションを作成し直す。

nmcli connection delete xxxxxxxxxxxxxxxxxxxxxxxxx

文字化けしているコネクションを削除。

xxxxxxxxxxxxxxxxxxxxxxxxxの部分はenp0s8UUIDの値。

nmcli connection add type ethernet ifname enp0s8 con-name enp0s8

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

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 user1

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

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

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

reboot

サーバーを再起動する。

rm -rf /home/user1/xxx

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

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

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

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

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

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

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

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

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

source ~/.bashrc

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

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

su

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

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


su user1

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

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

systemctl status firewalld

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

systemctl enable firewalld

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

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

systemctl start firewalld

firewalldを起動する。

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

ログファイルなど行数が多すぎて表示しきれないときに、末尾n行だけ見るために使う。

tail -n 10 xxx.txt

xxx.txtというファイルの末尾10行だけ表示。

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

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

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というファイルを解凍。

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で解凍する。

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というファイルを作成する。

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

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
実行結果
               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
timedatectl set-timezone Asia/Tokyo

タイムゾーンをAsia/Tokyoに変更。

timedatectl list-timezones | grep Tokyo

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

uname
実行結果
Linux
uname -m
実行結果
x86_64
useradd user1

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

usermod -aG wheel user1

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

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

visudo

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

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

yum --version
yum update -y

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

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

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

yum list installed | grep xxx

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

  • 最終更新: 2021/08/31 13:43