はじめに
この記事はAWSに自作アプリをデプロイするための学習記録です。
筆者の自己紹介
- 異業種、実務未経験からフルスタックエンジニアを目指して転職活動中
- 2024年10月から学習を開始、オンラインスクール卒業を経て、現在も学習を継続中
ポートフォリオアプリ:https://github.com/geek-3340/Fameal_app/tree/main
今回の内容
Dockerやwebサーバー(Nginxなど)を操作する際に、必須の知識となるLinuxコマンドについて
学習記録
準備 : WSLディストリビューションに接続する
WindowsのCLIを開いて、以下のコマンドでWSLディストリビューションに入る
wsl
WSL2、Ubuntuがインストール済みの前提
セットアップ方法 >> WSL開発環境を設定する
WSLでのWindowsディレクトリのパスについて
ターミナルでWindowsのディレクトリからWSLへ接続すると
ユーザー名@マシン名:/mnt/c/Users/ユーザー名$
のように表示されることがある
これはWindowsターミナルからWSLを起動した際、起動時のディレクトリが
Windows側のパスだった場合、WSL2がそれをLinux側から見えるパスに自動変換
することで起こる挙動
つまりユーザー名@マシン名:/mnt/c/Users/ユーザー名$はwslコマンドを
実行したwindows側のC:\Users\ユーザー名である
windows、Linuxの境界を跨いでのコマンド実行は内容によって動作が激重になるので、以下のコマンドでLinuxのホームディレクトリに移動しておく
# ~とはホームディレクトリのこと
cd ~
プロンプトが ユーザー名@マシン名:~$ となればOK!
基本コマンド
# 現在のディレクトリを出力
pwd
# 現在のディレクトリの中身を返す
ls
ls -a # 隠しファイル含めて表示
# ディレクトリ移動
cd /etc # etc = システム設定ファイルがある場所
cd ../ # 1つ前のディレクトリへ
# ファイルの中身を出力
cat /etc/os-release # os-release = wslのバージョン等の詳細情報を含むファイル
less /etc/passwd # ターミナルを汚さず別ウインドウで参照 qで終了(長いファイル)
# ディレクトリ・ファイルの作成・削除
mkdir mydir # mydirというディレクトリを作成
rmdir mydir # 削除(空のディレクトリのみ)
rm -r mydir # 中身ごと再帰的に削除
echo "hello" > test.txt # test.txtというファイルを作成し、helloという文字列を入れる
rm test.txt # 削除
# ユーザー情報の出力
whoami # 現在のユーザー名
id # 現在のユーザーのUID/GID/所属グループを出力
id username # 指定ユーザーの情報を出力
cat /etc/passwd # 全ユーザーの一覧を確認したいとき
# ネットワーク関連
ip addr # IPアドレス確認
curl <URL> # HTTPリクエストを送る
# パッケージ管理
sudo apt update # パッケージのリストを最新版に更新
sudo apt install -y htop # topの強化版をインストール
# プロセスの参照
ps # 自分が起動したプロセスだけ
ps aux | head -20 # aux =システム全体のプロセス から上位20件参照
# システム全体のプロセスをリアルタイム監視(qで終了)
top
パイプとリダイレクト
リダイレクト(>, >>):出力先をターミナルからファイルに変える
echo "log1" > app.log # 上書き保存
echo "log2" >> app.log # 追記
command 2>> error.log # 標準出力がエラーの場合、error.logへ出力を追記
command > out.log 2>&1 # 標準出力・エラーを両方同じファイルへ
パイプ(|):前のコマンドの出力を次のコマンドの入力に渡す
ls | grep .html # 現在のディレクトリから.htmlを含む行だけ抽出
cat access.log | wc -l # 行数をカウント
ls -la | less # 出力結果をlessで見る
ポイントは「> はファイルへ書き出し、| は次のコマンドへ渡す」で覚えること
ファイル権限について
LinuxというOSはサーバーのように複数人でリソースを共有する前提で設計されている
そのためLinuxにおけるリソースの管理では、ディレクトリやファイルに対して 誰が 何をできるか を権限として割り当てる仕様となっている
もっと具体的に言うと…
管理者 管理グループ その他(すべてのユーザー)が、それぞれディレクトリやファイルに対して、read(読み取り) write(書き込み) execute(実行)できるかを権限として割り当てる仕様となっている
権限の確認方法
# 現在のディレクトリ配下を参照(-lの後にパスの指定も可)
ls -l
# 例:現在のディレクトリ配下に4つのディレクトリ、ファイルがあった場合
-rw-r--r-- 1 root root 2556 Apr 19 00:48 file1.txt
-rw-r--r-- 1 root root 2425 Apr 18 00:26 file2.txt
drwxr-xr-x 3 user group 4096 Apr 19 01:12 dir-a
drwxr-xr-x 2 user group 4096 Apr 19 01:13 dir-b
先頭の-rw-r--r--部分が権限を表す
一文字目はファイルの種類を表し、2文字目以降は権限を表す
| 1文字目 | 意味 |
|---|---|
- |
ファイル |
d |
ディレクトリ |
l |
ショートカット |
| - | - |
| 2文字目以降 | 意味 |
|---|---|
r |
読み取り |
w |
書き込み |
x |
実行 |
- |
権限なし |
また、2文字目以降ではrwxの権限が3つ横並びで出力され、先頭から管理者 管理グループ その他(すべてのユーザー)の順に権限を表している
権限の変更
権限の変更にはchmodコマンドを使用する
例えばtest.txtというファイルの権限を以下のように変更したいとする
- 所有者:全権限有り
- グループ:読み書き可能
- その他:読み取りだけ
権限の変更は以下のコマンドとなる
chmod 764 test.txt
ここで権限を表しているのが764という数字表記。rwxは2進数3桁で表せるため、それを8進数で表記するのが慣習
| 記号 | 2進数 | 8進数 |
|---|---|---|
| --- | 000 | 0 |
| --x | 001 | 1 |
| -w- | 010 | 2 |
| -wx | 011 | 3 |
| r-- | 100 | 4 |
| r-x | 101 | 5 |
| rw- | 110 | 6 |
| rwx | 111 | 7 |
コマンドの3桁の数値は、この8進数を所有者・グループ・その他の順で表記したものであり、上記コマンドの764はrwx rw- r--という意味になる
上記の表は暗記する必要なし
読み=4、書き=2、実行=1、足し算
rw- なら 4+2 = 6、rwx なら 4+2+1 = 7
のように覚えると良い
所有者の変更
所有者の変更にはchownコマンドを使用する
# 単一ファイルの所有者をrootに
sudo chown root file.txt
# 所有者とグループを同時に
sudo chown user:group file.txt
# ディレクトリ以下を再帰的に
sudo chown -R user:user mydir/
userやgroupの部分に変更したいユーザー名やグループ名を指定し、file.txtやmydir/の部分に所有者を変更したいファイルやディレクトリを指定する
-Rを使ってディレクトリの所有者を変更することで、そのディレクトリ配下全ての権限も同様に変更できる
sudoについて
sudo = “superuser do”(スーパーユーザーとして実行)の略
Linuxには root(ルート)ユーザー という「何でもできる管理者」がいるが、その一方、普段使っている自分のユーザー(whoami で出てくる名前)は一般ユーザーで、できることが制限されている
sudo コマンド と書くと、「このコマンドだけ、一時的にroot権限で実行してください」という意味になる
sudoが必要な操作
ざっくり言うと「自分のホーム(~)の外を触る操作」には大体sudoがいるという認識でOK
# Linuxのパッケージリストを更新する操作
sudo apt update
パッケージ管理
パッケージ管理にはaptコマンドを使用する
aptとはAdvanced Package Toolの略でLinuxのパッケージマネージャー
ソフトのインストール・更新・削除を管理できる
# よく使うコマンド
sudo apt update # パッケージリストの更新
sudo apt upgrade # インストール済みパッケージを最新版に更新
sudo apt install -y <パッケージ名>
sudo apt remove -y <パッケージ名>
apt list --installed # インストール済み一覧
apt search <キーワード> # パッケージ検索
updateとupgradeは別物
update: これはソフト自体を更新するのではなく、「世の中に出回ってる最新のソフト一覧」をローカルに取り直すコマンド
インストールや更新前にこれを1回やっておかないと、古いリストを参照して「そのバージョン、もう存在しないよ」とエラーになることがあるupgrade: リストを元に、実体のパッケージを更新するコマンド-yとは「本当にインストールしますか? [y/n]」の確認を自動でyesにする
update と upgrade はセットで使うことが多い
sudo apt update && sudo apt upgrade -y
おわりに
今回はLinuxコマンドの基礎を学習しました。
次回はさらに深ぼってプロセス、systemd、エラー・ログ管理について書いていきたいと思います!
ご覧いただきありがとうございました🔥