linux構築時に困った内容と解決するために実施するコマンド集

# 構築時に困ったこととその解決策をまとめたい

# ポートの状況がわからない
ss -nlt | grep <ポート番号>
-n : ポート番号をサービス名変換しない(例えば:httpと表示せず:80と表示する)
-l : Listen(待ち受け)ポートのみを表示する
-t : TCP を表示する
-u : UDP を表示する

上記コマンドを打ってポートがどのような状態か確認できる
State       Recv-Q Send-Q Local Address:Port                Peer Address:Port
LISTEN      0      128                *:111                            *:*
LISTEN      0      5      192.168.122.1:53                             *:*
LISTEN      0      128                *:22                             *:*
LISTEN      0      128        127.0.0.1:631                            *:*
LISTEN      0      100        127.0.0.1:25                             *:*
LISTEN      0      128             [::]:111                         [::]:*
LISTEN      0      128             [::]:22                          [::]:*
LISTEN      0      128            [::1]:631                         [::]:*
LISTEN      0      100            [::1]:25                          [::]:*

参考サイト
https://milestone-of-se.nesuke.com/sv-basic/linux-basic/ss-netstat/

# ファイアウォールの状態を確認したい
sudo systemctl status firewalld

出力例(Activeの項目がinactiveだと停止中)
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2024-01-05 13:29:45 JST; 22min ago
     Docs: man:firewalld(1)
 Main PID: 861 (firewalld)
    Tasks: 2
   CGroup: /system.slice/firewalld.service
           mq861 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid

# ユーザーを作成する
useradd コマンドを使うことで、ユーザを追加することができます。

sudo useradd user1
ユーザ追加時にグループにも追加するには -G オプションを使います。

sudo useradd user1 -G docker

# グループを作成する
新規グループを作成するには、 groupadd コマンドを使用します。
次のコマンドを入力します。
sudo groupadd <group_name>

# ユーザーを既存のグループに追加する

usermod -aG (既存ユーザをグループに追加)
ユーザが所属するサブグループに追加します。 -a を付け忘れると追加ではなく上書きになってしまうので注意。 特に sudoersのユーザはグループ追加に失敗するとsudoする権限がなくなるので要注意 (sudoというグループに所属するユーザはsudoが実行できるため。/etc/sudoers 参照)

sudo usermod -aG <GROUPS_name> <USER_name>


# ユーザーがどのグループ所属しているか確認する。
cat /etc/group

参考サイト
https://qiita.com/tige0r9/items/0a210b0b32ecff12f5b4

# 指定ユーザが所属するグループ一覧
groups ユーザ名

# ユーザーが作成されているか確認する。
cat /etc/passwd

psswdファイルはユーザのアカウント情報が格納されたファイル
参考サイト
https://linuc.org/study/knowledge/509/

# マシンのスペックを確認する
# CPUを確認する(cpuinfo:CPUの情報が格納されたファイル)
cat /proc/cpuinfo
出力例
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 142
model name      : Intel(R) Core(TM) i7-10610U CPU @ 1.80GHz
stepping        : 12
cpu MHz         : 2304.000
cache size      : 8192 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 2
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 22
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single fsgsbase bmi1 avx2 bmi2 invpcid rdseed clflushopt md_clear flush_l1d arch_capabilities
bugs            : spectre_v1 spectre_v2 spec_store_bypass swapgs taa itlb_multihit srbds
bogomips        : 4608.00
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 142
model name      : Intel(R) Core(TM) i7-10610U CPU @ 1.80GHz
stepping        : 12
cpu MHz         : 2304.000
cache size      : 8192 KB
physical id     : 0
siblings        : 2
core id         : 1
cpu cores       : 2
apicid          : 1
initial apicid  : 1
fpu             : yes
fpu_exception   : yes
cpuid level     : 22
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single fsgsbase bmi1 avx2 bmi2 invpcid rdseed clflushopt md_clear flush_l1d arch_capabilities
bugs            : spectre_v1 spectre_v2 spec_store_bypass swapgs taa itlb_multihit srbds
bogomips        : 4608.00
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

出力情報について
https://senooken.jp/post/2020/11/14/4765/
https://www.sejuku.net/blog/58189
https://jikkenjo.net/1950.html

# Memoryを確認する(meminfo:メモリーの情報が格納されているファイル)
cat /proc/meminfo
出力例
MemTotal:        1739024 kB
MemFree:          975476 kB
MemAvailable:    1155760 kB
Buffers:            1104 kB
Cached:           313472 kB
SwapCached:            0 kB
Active:           382432 kB
Inactive:         209212 kB
Active(anon):     288928 kB
Inactive(anon):    10308 kB
Active(file):      93504 kB
Inactive(file):   198904 kB
Unevictable:       12380 kB
Mlocked:           12380 kB
SwapTotal:       1118204 kB
SwapFree:        1118204 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        273384 kB
Mapped:           151664 kB
Shmem:             11652 kB
KReclaimable:      36676 kB
Slab:              88712 kB
SReclaimable:      36676 kB
SUnreclaim:        52036 kB
KernelStack:        5152 kB
PageTables:        20200 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     1987716 kB
Committed_AS:    2207048 kB
VmallocTotal:   34359738367 kB
VmallocUsed:       29632 kB
VmallocChunk:          0 kB
Percpu:              632 kB
HardwareCorrupted:     0 kB
AnonHugePages:    108544 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
FileHugePages:         0 kB
FilePmdMapped:         0 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:      114624 kB
DirectMap2M:     1982464 kB

出力内容確認参照ページ
https://nopipi.hatenablog.com/entry/2015/09/13/181026#procmeminfo%E8%A1%A8%E7%A4%BA%E4%BE%8B
https://enakai00.hatenablog.com/entry/20110906/1315315488

# メモリの空き容量を確認したい
free

参考サイト
https://qiita.com/yasushi-jp/items/5553ec20dc3a9dbab1f7

# メモリがスワップしているか確認する。
free -m
もしくは
vmstat

参考サイト
https://atmarkit.itmedia.co.jp/flinux/rensai/linuxtips/355isswapedmem.html

# HDD/ストレージ
# マウントポイントや容量のみを確認したい
$ df
Filesystem          1K-blocks    Used Available Use% Mounted on
devtmpfs               850028       0    850028   0% /dev
tmpfs                  869512       0    869512   0% /dev/shm
tmpfs                  869512    9424    860088   2% /run
tmpfs                  869512       0    869512   0% /sys/fs/cgroup
/dev/mapper/ol-root   8972288 5137916   3834372  58% /
/dev/sda1             1038336  238648    799688  23% /boot
tmpfs                  173904      16    173888   1% /run/user/42
tmpfs                  173904       0    173904   0% /run/user/0

# モデル名等含めてディスク単位で知りたい場合
sudo parted -l
出力例
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sda: 11.4GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  1075MB  1074MB  primary  xfs          boot
 2      1075MB  11.4GB  10.3GB  primary               lvm


Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/ol-swap: 1145MB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:

Number  Start  End     Size    File system     Flags
 1      0.00B  1145MB  1145MB  linux-swap(v1)


Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/ol-root: 9198MB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:

Number  Start  End     Size    File system  Flags
 1      0.00B  9198MB  9198MB  xfs

参照サイト
https://qiita.com/r_saiki/items/58fd3738ae6aeedfa96e
https://masaoo.blogspot.com/2016/02/parted-2tb-fdisk-parted.html

# /etc/fstab用にUUIDを知りたい場合
ls -la /dev/disk/by-uuid
出力例
total 0
drwxr-xr-x. 2 root root 100 Jan  5 13:29 .
drwxr-xr-x. 5 root root 100 Jan  5 13:29 ..
lrwxrwxrwx. 1 root root  10 Jan  5 14:18 32b1952b-878e-4bec-a4ed-aad66685d588 -> ../../dm-0
lrwxrwxrwx. 1 root root  10 Jan  5 14:18 8eca00c1-3a5f-484c-9f1d-d4a8613096d8 -> ../../sda1
lrwxrwxrwx. 1 root root  10 Jan  5 14:18 fe7057a2-190e-46fe-bfc9-73f16ce455fb -> ../../dm-1

# 利用可能なブロックデバイスの情報を表示する(どのデバイスがどこにマウントされているか確認する)
lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0          11:0    1 1024M  0 rom
sda           8:0    0 10.7G  0 disk
tqsda2        8:2    0  9.6G  0 part
x tqol-swap 252:1    0  1.1G  0 lvm  [SWAP]
x mqol-root 252:0    0  8.6G  0 lvm  /
mqsda1        8:1    0    1G  0 part /boot

# 起動時に自動でマウントするように設定する(fstab:マウントするファイルシステムの情報を記述するファイル)
cat /etc/fstab
ここにviで記載する


参考サイト
https://qiita.com/kihoair/items/03635447591358210772

# ユーザーを作成したい
useradd -m <任意の名前>

# ユーザーにパスワード設定
passwd <ユーザ名>

# 現在ログインしているユーザー確認
who

# ファイルもしくはフォルダの名前を変更する
mv ./<変更対象のファイルもしくはフォルダ名> ./<変更後のファイルもしくはフォルダ名>

# 特定の機関のファイルをまとめて削除
2022-06-08 08:00から2022-06-08 23:59の間に出た.trcとついている今のフォルダ配下にあるファイルを消す。
find . -type f -name "*.trc" -newermt "2022-06-08 08:00" -and ! -newermt "2022-06-08 23:59" | xargs -i rm {}

# 特定の期間のファイルをまとめて表示
2021-07-08 14:30から2021-07-08 15:30の間に出た.trcとついている今のフォルダ配下にあるファイルを表示する
find . -type f -name "*.trc" -newermt "2021-07-08 14:30" -and ! -newermt "2021-07-08 15:30" -ls

# 特定の期間のファイルをまとめてコピー
2021-07-08 14:30から2021-07-08 15:30の間に出た.trcとついている今のフォルダ配下にあるファイルを/tmp配下にコピーする
find . -type f -name "*.trc" -newermt "2021-07-08 14:30" -and ! -newermt "2021-07-08 15:30" | xargs -i cp -p {} /tmp

# 特定の期間のファイルをまとめて容量確認
2022-10-27 00:00から2022-10-28 00:00の間に出た.trcとついている今のフォルダ配下にあるファイルの総容量を確認する
find . -type f -name "*.trc" -newermt "2022-10-27 00:00" -and ! -newermt "2022-10-28 00:00" -exec du -ch {} +

# 特定の名前の付いたファイルを期間指定して、その数を出力する
find . -type f -name "*.log" -newermt "2022-11-01 00:00" -and ! -newermt "2023-02-01 00:00" -ls | wc -l

# OSのリソース使用状況を一通り確認したい
https://qiita.com/maiyama18/items/956ac41c4cf6cf85ae12
以下のコマンドを打っておく
top

sar

CPUの使用状況確認
sar -u

メモリ、スワップの使用状況確認
sar -r

sar -S

ロードアベレージ確認
sar -q

sar -w

sar -p

ディスクI/Oの使用状況確認
sar -b

# OS側のエラーメッセージを確認したい(message:一般的なログファイル)
cat /var/log/messages

参考サイト
https://avinton.com/blog/2017/10/linux-network-troubleshooting/

# 過去のリソース状況を確認したい(sa:定期的に吐き出されるログから過去のリソース状況を遡れるファイルがあるフォルダ)

ls /var/log/sa
⇒表示されるファイルをsarコマンドで確認する

ディスク関連
sar -b -f /var/log/sa/<lsで確認したファイル名>

CPU関連
sar -u -f /var/log/sa/<lsで確認したファイル名>

メモリ関連
sar -r -f /var/log/sa/<lsで確認したファイル名>

ネットワーク関連
sar -n DEV -f /var/log/sa/<lsで確認したファイル名>

# 名前解決（ホスト名からIPアドレスを調べること）の設定されているか確認したい
cat /etc/resolv.conf

# IPアドレスとホスト名の対応設定がされているか
cat /etc/hosts

# 自身のIPアドレスがあっているか確認
ifconfig -a

# 現在の実行しているジョブ一覧を表示したい。
プロセスはLinuxのカーネル(OSの中核部分に位置するソフトウェア)さんから見た時の処理の単位だった。これに対しシェル(ターミナル)から見た時の単位をジョブという。
$ jobs
例)
$ jobs
[1]+  Stopped                 vim test
[2]-  Stopped                 vim test2

# 現在のジョブ一覧とプロセスIDを表示
$ jobs -l
[1]-  2467 Stopped                 vim test
[2]+  2468 Stopped                 vim test2

# fgコマンド~さっき一時停止したのを復活させる~
$ fg %ジョブ番号
例)
$ jobs
[1]+ Stopped                 vim .bashrc
$ fg %1
vim .bashrc

# 実行したコマンドを【一時停止】する
コマンド実行中にctrl + zを押す

# bgコマンド~コマンドの実行をバックグラウンド状態にする~
コマンドを実行
↓
ジョブを一時停止(ctrl + z)
↓
bgコマンドでジョブをバックグラウンドで実行する
$　bg %ジョブ番号
例)
$  cp file1 file2
^z   (Ctrl+zを入力して一時停止)
[1]+ Stopped              cp file1 file2 &  
$ bg %1
$ jobs 
[1]+  Running             cp file1 file2

※[]内の数字がジョブ番号

# 最初からバックグラウンドでコマンドを実行する
コマンドなどの最後に&を付ける

コマンド　オプションなど &
例)
$ cp file1 file2 & 

# ジョブを停止させる。
コマンド実行中にCtrl + cを押す

# バックグラウンドで実行しているジョブを停止させる。
$ kill %ジョブ番号
例)
$ kill %1
[1]+  Stopped                 man bash
$ jobs
[1]+  Terminated              man bash

終了するとTerminatedと表示される。(終了済みという意味)
しばらくしてjobsコマンドで確認するとジョブが消えているのがわかる。

# プロセスを検索する
$ ps -ef | grep <探したいプロセスに入っているワード>
例)
$ ps -ef | grep vim
ユーザー名  2467  2250  0 22:00 pts/0    00:00:00 vim test
ユーザー名  2468  2250  0 22:00 pts/0    00:00:00 vim test2
ユーザー名  2629  2250  0 22:13 pts/0    00:00:00 grep --color=auto vim

# プロセスを終了する。
$ kill プロセスID

# OSのログの格納場所
ログファイルは、/var/logディレクトリ配下に保存されています。



# 継続的にログファイルの中身を監視したい
tail -f [ログファイル]

tailコマンドを使うことで、常にファイルを表示し続け、
ログが追加されると画面にもリアルタイムで表示されます。

# rsyslogについて
systemctlコマンドはrsyslogを再起動や停止させるために使用します。
ログの設定を行うためには、rsyslogパッケージをインストールします
ログファイルの設定は、/etc/rsyslog.confファイルで行います。
このファイルには、どこにどのようなログを出力するのかを設定します。
以下のところで全てのログを/var/log/syslogに出力するという設定がされています。
![スクリーンショット 2024-03-26 21.24.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555220/6d4e9f92-b1e0-3427-801e-2efe9fe1e144.png)

# rsyslogの起動
systemctl start rsyslog

#ディストリビューションを確認する。
cat /etc/issue

Linuxディストリビューションは、Linuxカーネルをベースにして構築されたOSのバージョンやバリエーションです。
entOSやDebian、RHEL(Red Hat)などがあります。


# パッケージをインストールするときに使うコマンド
![スクリーンショット 2024-04-06 12.16.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555220/b7cd867f-7bf0-da87-1304-780d84c2d575.png)

# パッケージのインストールコマンド使用方法
▪️aptコマンドはDebian系のLinuxを使っている場合に使用することができます。

- インストールコマンド
apt-get install [パッケージ名]
例)apt-get install apache2

- パッケージの更新
apt-get upgrade [パッケージ名]
全体をアップグレードしたい場合は以下コマンドを使う
例)apt-get upgrade

- パッケージの削除
apt-get remove [パッケージ名]
例)apt-get remove apache2

- パッケージの検索
apt-cache search [パッケージ名]
例)apt-cache search apache

- パッケージの詳細を見る
apt-cache show [パッケージ名]
例)apt-cache show apache2

▪️yumコマンドはCentOS系のLinuxを使っている場合に使用することができます。

- 最新のパッケージを取得
yum update

yum updateコマンドを実行すると、/etc/yum.repos.d/ディレクトリ配下に設定してある情報からパッケージ情報を取得します。

- パッケージのインストール
yum install [パッケージ名]
例)yum install httpd

- パッケージの更新
yum update [パッケージ名]
全体をアップグレードするときは以下コマンドを使う
例)yum update

- パッケージの削除
yum remove [パッケージ名]
例)yum remove httpd

- パッケージの検索
yum search [パッケージ名]
例)yum search http

- パッケージの詳細情報を知る
yum info [パッケージ名]
例)yum info httpd

RPM（Red Hat Package Manager）は、Red Hat社が開発したパッケージ管理ツールです。
CentOS,RHEL系で動作します。
パッケージをインストールするには、.rpmファイルを準備する必要があります。

- 基本的な使い方
rpm [オプション] [パッケージ名]

![スクリーンショット 2024-04-06 12.37.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555220/ea8fbfe3-2141-d1e6-a8d0-e4071192ebc1.png)

- パッケージのインストール
rpm -i [パッケージ名]

インストール中の詳細を表示したい場合は、”-v”オプションと”-h”オプションを組み合わせます。
rpm -ivh [パッケージ名]

パッケージの検証をしたいときは以下コマンドを使用する
rpm -iVvh [パッケージ名]

- パッケージの更新
rpm -Uvh [パッケージ名]

- パッケージのアンインストール
rpm -e [パッケージ名]

- パッケージの一覧表示
rpm -qa


# ファイルのリンク
Linuxには、異なった名前で同一のファイルにアクセスできる仕組みがあります。これをリンクと呼びます。
種類は以下の通りです
・ハードリンク
 →ハードリンクとは、同じファイルに対して複数の名前をつけることができるリンクの一種です。リンクした別名は、直接ディスク上のデータを参照します。

例)file.txtにhardlink.txtという名前でハードリンクを貼る。
するとcat hardlink.txtとしてもfile.txtが参照されて、その中身が出力される
 ln file.txt hardlink.txt
 ![スクリーンショット 2024-04-06 13.06.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555220/77711d3d-a2a9-2315-3174-e7275643568b.png)


ハードリンクは、同じファイルに対して複数のプログラムでアクセスする場合に便利です。


・シンボリックリンク
→シンボリックリンクは、リンク元のファイルを参照します。
ls -laでどのファイルをシンボリックリンクしてるかわかります。

例)ln -s file.txt synlink.txt

![スクリーンショット 2024-04-06 13.06.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555220/4abe66df-0705-905e-2e17-c4d0d7f00128.png)