Linuxの再学習をしたので備忘録としてまとめていきます。第2回はディレクトリの操作についてです。
再学習の理由
- Dockerに入門した際に、改めてLinuxの基礎から整理をする必要が出てきたから
- Ubuntuを触ってみたかったから
- Webサービス系のシステムのOSの大半はLinuxのため
学習内容をまとめるにあたって、以下のUdemy教材を参考にさせていただきました。筆者は15年以上実務でLinuxを使っていますが、新しい発見がたくさんありました。初学者の方にも、ミドル以上のエンジニアの方にもおすすめの教材です。
【参考資料/Udemy】
- 【Udemy】【3週間で学ぶ】Amazon Linux Bash シェルスクリプト実践講座!!
- 【Udemy】もう怖くないLinuxコマンド。手を動かしながらLinuxコマンドラインを5日間で身に付けよう
【参考資料/書籍など】
【参考資料/ChatGPT】
また、情報収集にChatGPTを使用しました。
かなり強力な情報収集ツールになるという印象です。
(ただし、出力結果は鵜呑みにせず、随時公式ドキュメントなどで裏どりする必要があります)
【関連記事】
ディレクトリとは
- ファイルが保存されている場所
- WindowsやMacのフォルダと一緒
- 入れ子構造になっている
- 一階層上のディレクトリを「親ディレクトリ」、一階層下のディレクトリを「子ディレクトリ」と呼ぶ場合がある
- 1番上のディレクトリを「/」(ルートディレクトリ)と呼ぶ
- 「/」を頂点とした階層構造になっている
- 各ディレクトリ毎に役割がある
- cf) WindowsはCドライブやDドライブなど、ドライブから入れ子構造が始まる
主なディレクトリの役割
/bin
- 一般ユーザー、管理ユーザーの両方が使用するコマンドの実行ファイルが格納されている
- 特に、Linuxの動作に最低限必要な重要度が高いコマンドが格納されている
- ex) cat, cp, dateなど
/dev
- デバイスファイル(ハードウェアをファイルとして扱う)を格納
/home
- ホームディレクトリ(Linuxのユーザー毎に割り当てられる個人ディレクトリ)が配置される
- ユーザーはホームディレクトリ内に自由にファイルやディレクトリを作成可能
/sbin
- 管理ユーザー向けのコマンドの実行ファイルが格納されている
- ex) shutdown, ifconfig, rebootなど
/tmp
- 一時的なファイルやアプリケーションの実行中の結果を保存するのに利用される
/usr
- 各種アプリケーション
- 上記に付随するデータ
/var
- 重要
- 変化するデータ
- アプリケーションの動作ログなど
- メールやプリンタのスプール(処理データの一時保存領域)
- 頻繁に書き変わるファイルが配置される
- ディレクトリ配下は細分化されている
以下に主なファイルを記載
/var/log
- ログファイルが書き出される
- システムのログファイル(messages)
- メールのログファイル(maillog)
- ミドルウェアやアプリケーションのログ
- apacheの場合
/var/log/httpd/error_log
/var/log/httpd/access_log
/var/lock
排他制御に使うためのロックファイルが配置される
/var/spool
印刷待ちのデータなどの処理待ちのデータが配置される
/opt
- パッケージ管理(yum, RPM, dpkg, apt)を使って、プログラムがインストールされるディレクトリ
- パッケージによっては配置されない場合もある
/root
- スーパーユーザー rootのディレクトリ
/boot
- 起動に必要な設定
- カーネルイメージなどが配置されている
/etc
- 重要
- システムやアプリケーションの設定情報、スクリプトファイルなどが配置される
/lib
- /binや/sbinにあるコマンドが必要なライブラリやカーネルモジュールが配置される
Linuxにログイン
DockerでUbuntuにログイン
# ubuntuのコンテナ起動
$ docker run -it ubuntu:20.04 bas
# ユーザーを作成
# adduser conti
password conti
# su - conti
conti@f5d655a116ca:~$
# ユーザープロンプトに変更されたことを確認
$
主なコマンド
cd
- change directory
- ディレクトリの移動
特別な使用方法
. # カレントディレクトリ(今いるディレクトリ)
.. # 親ディレクトリ(一階層上)
~ # ホームディレクトリ
/ # ルートディレクトリ
pwd
- print name of working directory
- 現在のディレクトリ(カレントディレクトリ)を確認する
cd と pwdを試す
# sample
# cd
$ cd
$ pwd
/home/conti
# $ cd .
$ pwd
/home/conti
# ..
# 1階層上に移動
cd ../
$ pwd
/home
# ~
# チルダ ホームディレクトリに移動
cd ~
conti@nnnnnnnnnnnn:~$ pwd
/home/conti
# /
# ルートディレクトリに移動
$ cd /
conti@nnnnnnnnnnnn:/$ pwd
/
ls
- list
- ディレクトリの中身を確認する
# sample
$ pwd
/
$ ls
bin dev home media opt root sbin sys usr
boot etc lib mnt proc run srv tmp var
パス名展開
# fから始まる4文字のディレクトリをリストする
$ pwd
/bin
$ ls /bin/f????
/bin/false /bin/fgrep /bin/flock
# 拡張子が.phpのファイルを表示する
$ pwd
/tmp/tmp
$ ls -l
total 0
-rw-rw-r-- 1 conti conti 0 Mar 5 22:41 aaa.html
-rw-rw-r-- 1 conti conti 0 Mar 5 22:41 aaa.php
-rw-rw-r-- 1 conti conti 0 Mar 5 22:41 bbb.html
-rw-rw-r-- 1 conti conti 0 Mar 5 22:41 bbb.php
-rw-rw-r-- 1 conti conti 0 Mar 5 22:41 ccc.html
-rw-rw-r-- 1 conti conti 0 Mar 5 22:41 ccc.php
$ ls -l *.html
-rw-rw-r-- 1 conti conti 0 Mar 5 22:41 aaa.html
-rw-rw-r-- 1 conti conti 0 Mar 5 22:41 bbb.html
-rw-rw-r-- 1 conti conti 0 Mar 5 22:41 ccc.html
主なオプション
ls -l # ファイルの詳細情報表示
ls -a # 隠しファイルを含めた全てを表示
ls -f # ファイル種別を表示
ls -F
- ファイルやディレクトリのリストを表示する際に、それぞれの名前に特定のマークを付ける
- それぞれのファイルやディレクトリの種類が一目でわかるようになる
マークの意味
/ # ディレクトリ
@ # シンボリックリンク
* # 実行可能ファイル
なし #通常ファイル
※圧縮されたファイルには、その拡張子に応じたマークが付く場合もある
ハンズオン
conti@nnnnnnnnnnnn:/$ pwd
/
conti@nnnnnnnnnnnn:/$
conti@nnnnnnnnnnnn:/$ ls -F
bin@ boot/ dev/ etc/ home/ lib@ media/ mnt/ opt/ proc/ root/ run/ sbin@ srv/ sys/ tmp/ usr/ var/
conti@nnnnnnnnnnnn:/$
---
mkdir
- make directory
- ディレクトリを作成する
# sample
# -pオプション : 深いディレクトリを一括で作成する
# mkdir -p dir1/dir2/dir3
conti@nnnnnnnnnnnn:~$ pwd
/home/conti
conti@nnnnnnnnnnnn:~$ mkdir -p work/test1/test2
conti@nnnnnnnnnnnn:~$ ls -l work/test1/test2/
total 0
conti@nnnnnnnnnnnn:~$
rmdir
- remove directory
- 空のディレクトリを削除
- 中にファイルが残っているディレクトリを削除する事故を防げる
ハンズオン
conti@nnnnnnnnnnnn:/$ cd
conti@nnnnnnnnnnnn:~$ pwd
/home/conti
conti@nnnnnnnnnnnn:~$ ls
work
conti@nnnnnnnnnnnn:~$ cd ./work
conti@nnnnnnnnnnnn:~/work$ pwd
/home/conti/work
conti@nnnnnnnnnnnn:~/work$ rmdir ./test1/test2/
conti@nnnnnnnnnnnn:~/work$ ls -l ./test1/
total 0
conti@nnnnnnnnnnnn:~/work$
絶対パスと相対パス
Linuxにおいて、ファイルやディレクトリのパスを表現するには、絶対パスと相対パスがある
絶対パス
- ルートディレクトリ(/)から始まるパスのこと
- ファイルやディレクトリを一意に指定することができる
相対パス
- 現在のディレクトリを基準にしたパスのこと
- ルートディレクトリを指定する必要はない
- 注意点:相対パスは現在のディレクトリに依存するため、場合によっては実行場所が異なるとパスが解決されないことがある
.. # 親ディレクトリ
. # カレントディレクトリ
help と man
help
- –helpオプションでコマンドヘルプメッセージを表示する
man
- manual
- コマンドのマニュアルを表示する
- man <コマンド名>