Linux

戻る

目次


Linuxコマンド

GUIショートカットキー

shortcut keyinfo
Alt + F2GUIデスクトップの時、コマンドを実行
gnome-terminalプロンプトを起動する

コマンド一覧

コマンド引数説明
sudo dnf install php8.1 mariadb105-server php-mysqli php-develPHP、mysqlコマンド、MySQL拡張、PHP開発用をインストール
sudo mysql_secure_installationMariaDBを初期化
mysql -h [hostname] -u [username] -pMariaDBまたはMysqlへログイン、起動する
dnf install wget php-mysqlnd httpd php-fpm php-mysqli mariadb105-server php-json php php-devel -y授業でのコマンド。
tar xzvf [filename.tar.gz]tarzipを展開する。
sudo systemctl list-unit-files -t service現在のservice構成の確認
ps -ax-a:全てのプロセスを表示
-x:他の端末に結び付けられているプロセスも表示
実行中のプロセスの確認
exitシェルを終了する。
reboot再起動する
poweroffシャットダウンする(管理者権限が必要)
shutdown -h nowシャットダウンする(管理者権限が必要)
which コマンド名コマンドのパスを表示する。
source [*.sh]shファイルを実行する
manマニュアルの表示
yumダウンロードする。
dnf list installed現在インストールされているプログラムを一覧表示
systemctlstatus サービス名サービスを確認する(Loaded:ユニット設定がsystemdに読み込まれているか。Active:ユニットが現在アクティブかを表示。)
systemctlstart サービス名サービスを開始する(systemdではサービスには.serviceをつける)
systemctlstop サービス名サービスを停止する
systemctlenable サービス名サービスを自動起動に指定する
systemctlis-enabled サービス名自動起動になっているか確認する
firewall-cmd
  • --add-service=[serviceName] :指定サービスのファイアウォールを有効化
  • --zone=[scope] :指定したネットワーク範囲で適用する[scope:http,dns,smtp,imap]
  • --permanent :ファイアウォールをOS起動時に自動的に有効化
  • --reload :ファイアウォールを再起動
  • --list-all :ファイアウォールの設定を表示
  • --reload :再読み込み
ファイアウォールの設定
mail [address]メールを送信する。
ネットワーク系[コマンド一覧]
ipa:全てのIP情報を表示IP情報をすべて表示
ping[adress]
-c:ping送信回数を指定する。
ピングを送る
curl [hostname]http(GETメソッド)を行う
nslookup [domainname] [DNSserveraddress]ドメイン名を解決する
dig [hostaddress]ns:NSレコードを確認
NX:MXレコードを確認
DNSの名前解決の確認。(デフォルトはAレコード)
nmtuiIPアドレスを変更する
ディレクトリ系[コマンド一覧]
treefilepath:どのディレクトリから表示するかを指定
-L:いくつの階層を表示するか
ツリー上ディレクトリ表示
ls-a:システムファイル表示
-l:ロングフォーマット
-d:指定のディレクトリ情報のみ表示
ディレクトリの情報表示
pwd現在のディレクトの表示
cdディレクトリの移動
pushdfilepath:for stacking directory's pathstacking directories.
popdthrow out stacking directory and back before directoryies.
コピー移動[コマンド一覧]
cp-i:既にファイルがあるときは問合せる
-p:ファイルの属性も含めコピー
-R:丸ごとコピー
-v:コピーされたファイル名の表示
ファイルのコピー
mv 元のファイル名 新ファイル名ファイルの移動、ファイル名の変更、
mkdir-p:入れ子のフォルダを一気に作成フォルダの作成
rm-r:ディレクトリとディレクトリ内のすべてのファイルを削除
-i:削除の際に対話で可否を問う
ファイルの削除
rmdir-p:親ディレクトリもまとめて削除ディレクトリの削除
touch-t:タイムスタンプの更新時刻を指定する。(形式 [CC]YY]MMDDhhmm[.SS] )ファイルのタイムスタンプの変更。ファイルが存在しない場合は空のファイルが作成される。
ファイル表示・コマンド[コマンド一覧]
cat-n:行番号を記載するテキストファイルの内容を表示。
more[使用例]
Space:1画面進む
b:1画面戻る
j or EnterKey:1行進む
k,y:1行戻る
g:先頭に移動
G:末尾に移動
/検索ワード:指定文字を検索
テキストファイルの内容を表示。
lessテキストファイルの内容を表示。
find [directoryname] -name [filename]-type:(dディレクトリ、fファイル、lシンボリックリンク)などの種別を指定して検索
-mtime:変更日時(-+日数)
-size:サイズ
-iname:大文字小文字の区別をしない
-name:検索文字列を指定して検索(and条件:-nameオプションを複数つける、or条件:-oオプションを-nameオプションの間につける)
ワイルドカードを使用する場合は'で囲む必要がある。
ファイルの検索
grep [option] 検索条件 [指定ファイル]-e:文字列を検索パターンとして扱う
-i:検索条件と指定ファイルで、大文字小文字の区別をしない
-v:検索パターンとマッチしなかった行を選択する
-E:拡張正規表現を利用する
ファイル中のデータを検索し、ヒットした行を表示する。
or検索時はオプションを二回繰り返す。and検索時はgrepコマンドを二回繰り返す
head [option] filename-n:指定した行を出力
-c:先頭から指定したバイト数を表示
ファイルの先頭から数行表示する。
tail [option] filename-n:指定した行を出力
-c:末尾から指定したバイト数を表示
ファイルの末尾から数行表示する。
tail -f filenameログを出力する
sort [option] filename-r:逆順で表示
-k:指定した列目のデータをソートする
-n:数値としてソートする
ファイルの中身をソートして出力
uniq filename重複行を出力しない
tr 文字列1 文字列2標準出力からのデータを文字ごとに置き換える
diff [option] file1 file2-c:context diff形式で差分を出力する
-u:unified diff形式で差分を出力する
script [出力ファイル]出力を指定ファイルへ追記する。指定ファイルが既に存在する場合は上書きされる。
vi filename
コマンド内容
:w保存
:q終了
:q!強制終了
:wq保存して終了
iカーソルのある位置から入力
I行頭から入力
A行末から入力
oカーソルのある行から改行して次の行から入力
Oカーソルのある行かを改行して前の行から入力
escインサートモード終了
:行番号行移動
x1文字削除
dd1行削除
yy1行コピー
nyyn行コピー
pカーソルの文字の次または次の行にペースト
Pカーソルの文字の前または前の行にペースト
uカット、ペーストを一回取り消し(アンドゥ)
/検索文字列文字列の検索
n下方向へ再検索
N上方向へ再検索
:対象行 s/old/new対象行の最初のoldをnewに変換する
:対象行 s/old/new/g対象行の全てのoldをnewに変換する
:%s/old/new/gファイル全体の検索語句を置換する
:%s/old/new/gc置換のたびに確認を求める
:set number(nonumber)行数表示(非表示)
  • h:←
  • j:↓
  • k:↑
  • l:→
  • ctrl + f :次のページへ移動
  • ctrl + b :前のページへの移動
テキストエディタを開く
グループとユーザ[コマンド一覧]
useradd [option] [username]-c comment:コメントを指定する
-g グループ名:プライマリグループ名を指定するグループ名は/etc/groupファイルで定義したグループ名
-G グループ名:補助グループを指定
-d:ホームディレクトリを指定する
-s:シェルを指定する。デフォルトで/bin/bashが指定されているディストリビューションが多い。ログインしないユーザはnologinを指定する
-u ユーザID番号:ユーザID番号を指定する
ユーザの作成
passwd [username]指定ユーザにパスワードを設定する
su - [username]特定のユーザでログインする。ユーザ名の指定がない場合はrootユーザとなる。-がない場合はカレント、ある場合はホーム
sudo [command]-u:指定したユーザでコマンドを実行スーパーユーザーでコマンドを実行。このコマンドはwheelグループのユーザーのみが利用可能
usermod [username]-c comment:コメントを変更する
-g groupname:プライマリグループ名を変更する。グループ名は/etc/groupファイルで定義したグループ名
-aG:一般ユーザに管理者権限を与える
-G:補助グループ名を変更する
-l username:既存のユーザ名を変更する
-u userIDnumber:ユーザID番号を変更する
ユーザ情報を変更する
userdel [username]-r:ホームディレクトリを削除するユーザを削除する
groupsログインユーザーの所属するグループを表示
historyコマンドの履歴を表示する
groupadd [groupname]-g グループID番号:グループID番号を指定する新しいグループを作成する
groupmod [-g groupid] [-n new-group-name] 変更対象のグループ-g gid:既存のグループIDを変更する。100未満のグループIDはシステムで使われているため、指定できない。-n new-group-name:既存グループ名を変更する
グループの定義を変更する
groupdel [groupname]既存グループを削除する
chmod mode[,mode...] [directory|file]-R:ディレクトリを対象にして、ディレクトリの仮名の子要素全てに適用する。
modeの考え方
ユーザ(u)グループ(g)その他(o)
パーミッションrwxrwxrwx
8進数421421421
設定値合計値合計値合計値
ファイルのアクセス権を変更する
chown user[.group] [directory|file]-R:ファイルの所有者を変更する
chgrp [group] [directory|file]-R:ファイルの所有グループを変更する
umask [8進数のモードのマスク]
デフォルトパーミッション
ファイル(最大666)rw-r--r--(644)
ディレクトリ(最大777)rwxr-xr-x(755)

デフォルトパーミッションから引くマスク値を指定する。(デフォルトは0022)
シェルスクリプト系[コマンド一覧]
echo 'コメント'-n:改行をしない。規定値では改行があると改行される。コメントを表示する
export statement環境変数を作成することができる。
read 変数名標準出力からデータを読み込む。既に変数にデータが格納されている場合は上書き
setシェル変数の一覧を表示
unset 変数名シェル変数を削除
env現在の環境変数を表示
sh -x file.sh-x:引数にシェルスクリプトを指定シェルを起動。-xでシェルスクリプトを指定して実行
サーバー系[コマンド一覧]
インストールコマンド
dnf list installedインストールされているパッケージの確認。
dnf [-y] install [packagename]パッケージのインストール。(-y:すべてyesで応える)
dnf remove [packagename]パッケージをアンインストール
more cmd...
dnf -y install langpacks-ja glibc-langpack-ja.x86_64日本語関連のパッケージをインストール
localectl set-locale LANG=ja_JP.UTF-8システム全体の文字セットを変更
source /etc/locale.conf
特殊なもの
command --help使い方を表示する
コマンドの書式など(コマンドでは標準入力、標準出力、標準エラー出力の外部接続によって運用される)
>実行結果をファイルに上書き
>>実行結果をファイルに追記
2>エラー出力をリダイレクトする。
2>>エラー出力をリダイレクトで追記。
> filename 2>&1標準出力と標準エラー出力を同時に行う。
>> filename 2>> filename2通常は標準出力でリダイレクトし、エラー時はエラー標準出力でリダイレクト
|コマンドをつなげる

サンプルコード

シェルスクリプトの書き方

シェルスクリプトの規則

環境変数に登録しているパスを検索してコマンドを実行する。通常は/usr/binに格納されている

記述説明
変数名=値シェル変数を定義
$変数名シェル変数を利用
変数名[n]=値一次元配列変数を定義
${変数名[n]}一次元配列変数を利用
#コマンドコメントアウト
'(シングルクォート)引用符。変数($)が文字列として認識される
"(ダブルクォート)引用符。変数($)は変数として認識される
`(バッククォート)引用符。コマンドがある場合はそれが実行される
./*.sh 引数1 引数2 引数3.shファイル内に$n(nは任意の数字)の変数がある場合には引数が1から順番に代入される。また$#は引数の数が、$0には実行されたファイル名がそれぞれ入る。
shiftスクリプト内の変数がn+1にずれる
\エスケープシーケンス、改行
'aaaa"$ABC"bbbb'""はエスケープされる
\文字文字のエスケープ(特殊文字、構文)
条件A -o 条件B -o 条件C論理和
[条件A] || [条件B] || [条件C]論理和
条件A -a 条件B -a 条件C論理積
[条件A] && [条件B] && [条件C]論理積
$PATH環境変数

シェルスクリプトにおけるプログラムの要素

日本語入力

システム全体の文字セットを変更する

シェル変数と環境変数

シェル変数
環境変数


トップへ戻る

ディレクトリとプログラム

ディレクトリの表現

current direcotry./
parent direcotry../
home directory~
roote directory/
特殊
trush/dev/null

ルートディレクトリ

/
afs
binbash[user'sShell]
boot
dev
etcpasswd[user'sPasswords]
group[defined groups]
shadow[password]
httpd/conf[ApacheConfFile]
hosts[HOSTSFile]
named.conf[BINDsettingFile]
resolv.conf[resolvsettingFile]
postfix/main.cf[postfixconfigure]
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usrbin[shellscriptfile]
varlog/messages[message at done]
log/httpd[ApacheAccessLog]
www/html[httpdirectory]
named/named.empty[zoneFileTemp]
named/slaves[slaveZoneFile]

プログラムなど

ファイル説明
httpdアパッチ
firewalldファイアウォール
gnome-terminalターミナルシェル
geditテキストエディター
nautilusファイルエクスプローラー
firefoxfirefoxブラウザ
sshdSSHサーバ、いわゆるtelnet
systemdLinuxがOS起動の際、カーネル起動後一番最初に実行されるプロセス、OS全体を制御する。
named,named-chroot(bind,bind-chroot)DNSサーバ
postfixsmtp
phpPHP
mariadb105-servermysqlコマンド
php-mysqlimysqlコマンド
php-develPHP開発用
トップへ戻る

グループとユーザー

インストール段階でSSHサーバのパッケージがインストールされており、SSHサーバとして稼働している。

ユーザの作成

ユーザ作成は管理者の権限が必要となっている。ユーザ作成時にユーザ名と同一のグループ名も作成されプライマリーグループとして所属することになる。

グループに関するファイル一覧

パスワードファイル[/etc/passwd]

フォーマット:

項目内容
accountそのシステムでのユーザ名。大文字を含まないようにする
password以前はユーザの暗号化されたパスワード、現在は'x'
UIDユーザID番号
GIDプライマリグループID番号(100未満のグループIDはシステムで使われている。)
GECOSユーザの名前またはコメントのフィールド
directoryユーザのホームディレクトリ
shellログイン時に起動されるユーザのコマンドインタプリタ(/bin/bashにある)

グループファイル[/etc/group]

フォーマット:

項目内容
group_nameグループの名前
password以前は暗号化されたグループのパスワード、またはパスワードが不要なら空欄
GIDグループID番号
user_listグループに所属するユーザ名のリスト。それぞれのユーザ名はコンマで区切られる

シャドウファイル[/etc/shadow]

ユーザのパスワードが暗号化されて保存されている

フォーマット:

項目内容
account
password
last_changed
may_be_changed
must_be_changed
warned
expires
disabled
reserved

トップへ戻る

ユーザ権限とアクセス権

ファイルとアクセス権

ファイル種別

フォーマット:

ロングタイプのディレクトリ情報

ファイルモード ファイル数 所有ユーザ 所有グループ サイズ タイムスタンプ 名前

ファイルモードの解釈

d rwx rwx rwx タイプ パーミッション
タイプの識別子の意味
項目内容
dディレクトリ
-ファイル
パーミッションの識別子の意味
項目内容
r読み込み
w書き込み
x実行またはディレクトリの移動

所有者、所有グループ、アクセス権の変更


トップへ戻る

Webサーバー構築

Webサーバーの動作の流れ

  1. WebブラウザーでURLを入力
  2. URLにあるホストのIPアドレスをDNSに問い合わせ
  3. DNSサーバーからIPアドレスを取得
  4. Webブラウザーからコンテンツをリクエストする
  5. コンテンツを取得する
  6. コンテンツがWebブラウザーに表示される

パッケージはAlmaLinuxではRPM形式、yumコマンドはRHEL7系までで、ここではdnfコマンド(yumはdnfのエイリアスとして存在する)

ApacheHTTPサーバー

firewall

httpd

ログ

ログには以下のような順序で情報が記載される

  1. アクセス元のIPアドレス
  2. アクセスした時間
  3. アクセスの内容
  4. アクセスの結果(エラー番号)
  5. アクセスした際に入力されたURL
  6. アクセスに利用されたブラウザの種類
Webサーバのディレクトリ

httpDirectory:/var/www/html

ApacheのConfファイル

ApacheConfFile:etc/httpd/conf/httpd.conf

Webページを格納するディレクトリ:

Webページアクセスしたときのルートファイル:


トップへ戻る

DNS(Domain Name Server)

ドメインとゾーン

ICANN(Internet Corporation for Assigned Names and Numbers):ドメイン名を管理している。

ゾーン:DNSを管理する単位、

BIND(Berkeley Internet Name Domain)

Linuxで利用されるDNSサーバーのソフトウェア。DNSキャッシュサーバー(unbound)、DNSコンテンツサーバーとして利用される

コマンド手順

chroot機能

named(BIND)は/var/named/chrootをルートディレクトリとして使用し、アクセスできる範囲が/var/named/chroot/etcに限られる。

BINDのインストール


設定(/etc/named.confファイル)

named.confファイルは大きく分けて以下のような項目となる

ステートメント概要
opionsBIND全体にかかわる設定項目を定義する。optionsステートメントで設定した一部内容はzoneステートメントにも反映される。
loggingDNSサーバーのログ出力に関する設定項目を定義する。
zoneゾーンを宣言し、ゾーンファイルへのパスを設定する。また、そのゾーン固有の各種オプション設定(リカーションの可否、クエリーやゾーン転送の許可など)を設定する。
  1. 行頭optionのlisten-onにサーバーのIPアドレスを追加。
  2. 同じくoptionのallow-queryのlocalhostをanyに変更。
  3. recursion をnoに変更。(コンテンツサーバーの場合はno、キャッシュサーバーの場合はyes)
  4. zone "example1.jp" INを追加し、type master; file "example1.jp.zone"; allow-update {none;};を記入する。
設定例


設定(/var/named/named.emptyファイルを[zonename.zone]ファイルにcopy)

※コピーする際は-pオプションを付けて、所有権(ここではグループ)を継承する必要がある

named.emptyの内容

設定例

名称書式説明
グルーレコードhost2.example2.jp A 192.168.100.1(※これのことかもしれない)管理を委任しているゾーンについての問い合わせに対して、DNSサーバーが委任先のゾーンのDNSコンテンツサーバーのアドレスを返す際に、追加情報として必要となる委任先DNSコンテンツサーバーのAレコードをグルーレコードという。
$TTL$TTL 3HゾーンのTTL
$ORIGIN$ORIGIN address.jp.ゾーンの名前。ゾーンの名前はFQDNで最後が「.」で終わる必要がある。省略された場合にここで指定されたゾーン名で補完される。
SOAレコード@ IN SOA host2 (...)
NSレコード(Name Server)NS hostname.address.jpゾーンのDNSコンテンツサーバーを定義
ゾーンの権威をもつDNSコンテンツサーバーを指定するためのレコード
MXレコード(Mail eXchange)MX [] mailhost.address.jp ドメインのメールサーバー(右側にFQDNを入れるので、最後に必ず「.」)
メールアドレスに利用するドメイン名を定義するためのレコード。メールサーバーの障害にも対応するため複数個のメールサーバーを記述でき、プリファレンス値の低いサーバーにメール配信が優先される。
Aレコードhostname A 192.168.100.1名前とIPアドレスの定義。左にホスト名、右にIPアドレス。名前に対してIPアドレスを指定するためのレコード
PTRレコード192.168.100.1 IN PTR host.example.jp.逆引きのレコード。逆引きはnamed.confで別途zoneファイルを設定する必要がある。

設定ファイルを書き換えたら確認コマンドを実行する。

確認が終わったら、サービスを起動する。サービス名は「named-chroot」ファイアウォールの名前は「dns」

NetworkManager

NATネットワークを停止する

上位jpゾーンの設定

手順
  1. BINDのインストール
  2. named.confファイルにゾーンを追加(DNSキャッシュサーバーとして動作させる必要がある場合はrecursionの設定をyesのままにする。)
  3. ゾーンファイルを作成しレコードを記述(named.emptyをコピーする際は、-pオプションをつける)
  4. 設定ファイルに書式間違いが無いか確認
  5. BINDの起動
  6. BINDの自動起動の設定
  7. ファイアウォールの設定を変更
  8. NATネットワークを無効化
  9. /etc/resolv.confを確認して、参照するDNSサーバーが設定されているかを確認
  10. 名前解決の確認
設定ファイルの例


逆引きゾーンの定義

named.confの例
.revファイルの例

マスターサーバーとスレーブサーバー

スレーブサーバーは自動でゾーンファイルをマスターサーバーから問い合わせて取得する。このため、スレーブサーバー側では、ゾーンファイルの設定は不要である。以下はマスターサーバーとスレーブサーバーを設定するためのnamed.confファイルをそれぞれのサーバー、正引き逆引きごとに示す。

マスター側正引き

ゾーン情報の転送を許可するゾーンサーバー(スレーブ)のIPアドレス:allow-transfer{ ipaddress; };
マスター側からスレーブ側に通知を行う:notify yes;
マスター側から通知を行うサーバ(スレーブサーバ)のIPアドレス:also-notify { ipaddress; };

マスター側逆引き
スレーブ側正引き
スレーブ側逆引き

トップへ戻る

メールサーバーの構築

設定手順

  1. postfix、cyrus-sasl、cyrus-sasl-plain、s-nail、dovecotをインストール
  2. postfixの設定(/etc/postfix/main.cfを編集)
  3. 設定ファイルのチェック
  4. postfix、saslauthdを起動、自動起動の設定、ファイアウォールでsmtpを有効化
  5. dovecotの設定(/etc/dovecot/conf.d/10-mail.conf)(/etc/dovecot/conf.d/10-auth.conf)(/etc/dovecot/conf.d/10-ssl.conf)
  6. dovecotを起動、自動起動の設定、ファイアウォールでimpを有効化

利用ソフト(MTA:MailTransferAgent)

SMTP:メールを送信する際に認証を行う機構。迷惑メール対策としてメール中継の制限を、この認証機能で許可するという利用方法がある。

MTA(MailTransferAgent)メールクライアントから送信されたメールを送信用メールサーバーから宛先の受信メールサーバーに転送する。(ここではPostfix)
MDA(MailDeliveryAgent)受信メールサーバーが受信したメールを宛先アドレスのメールボックスに配送する。(ここではDovecot)
MUA(MailUserAgent)メール利用者がメールの送信や受信を行うプログラム(ここではThunderbird)

Postfixの設定

main.cfの設定

/etc/postfix/main.cf

  1. myhostname:メールサーバーのホスト名(myhostname = hostFQDN)
  2. mydomain:メールサーバーのドメイン名(mydomain = domainname)
  3. inet_interfacesメールを受け付けるネットワークインターフェースのIPアドレス(自身のIPアドレス)。またlocalhostの記述を忘れると自分自身からのメールを受け付けなくなるので注意。(inet_interfaces = localhost,Myipaddress)
  4. mydestination:メールを受信するドメイン名を設定。(mydestination = $mydomain)
  5. smtpd_sasl_auth_enable:SMTP認証用のSASL認証連携を有効にする。(smtpd_sasl_auth_enable = yes)

    ※末尾記載

  6. smtpd_recipient_restrictions:SMTP認証でSASL認証されたクライアントからのメール送信を許可するように設定する。(smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination)

    ※末尾記載

Dovecotの設定

設定ファイル

テストメールの送信

Thunderbirdのインストール設定

設定方法


トップへ戻る

トップへ戻る

トップへ戻る