*この記事は、株式会社Ancarで行っている勉強会のおさらい & 外部発信記事として公開されています。
まえがき
おはこんばんにちは。
社内勉強会第5回目となります。
コロナの影響でリモートでの勉強会となりましたが、負けずに今回もやっていきましょう!!
おしながき
- ディレクトリ操作
- 作業ディレクトリの移動と表示 ( cd , pwd )
- ディレクトリを行き来する ( pushd , popd )
- ディスク使用容量を調べる ( du )
- ディスク容量情報を表示する ( df )
- リンクとiノード
- リンクの設定 ( ln )
※macOSの標準ターミナル使用
ディレクトリ操作
作業ディレクトリの移動と表示 ( cd , pwd )
第2回で触れた内容ですが、おさらいです。
cdコマンド (Change working Directory): カレントディレクトリの位置を変更するコマンド
pwdコマンド (Print Working Directory): カレントディレクトリの名称を表示するコマンド
# 絶対指定で移動する
$ cd /home/una/hoge/fuga
# 現在のディレクトリ表示
$ pwd
/home/una/hoge/fuga
# piyoディレクトリに移動する
$ cd piyo
$ pwd
/home/una/hoge/fuga/piyo
パス指定を容易にするために、特殊なディレクトリ記号が存在します。
~-
は便利なので、学んでからよく利用しています。
もう、cd ../../
をしなくていいですね...!!
# 直前のディレクトリに戻る
cd ~-
# ひとつ上(親)のディレクトリに移る
cd ..
# ホームディレクトリに移る
cd ~
# 同上
cd
ディレクトリを行き来する ( pushd , popd )
pushedコマンド: ワーキングディレクトリの履歴をスタック(積み上げ)式に保存し、指定されたディレクトリ移動するコマンド
popdコマンド: 記録された履歴に従い、フォルダを移動する
$ pwd
/home/una/hoge
# スタック式でディレクトリを積んでいくと....
$ pushd fuga/
~/hoge/fuga ~
# hoge配下に積まれましたね
$ pwd
/home/una/hoge/fuga
# ポップすると....
$ popd
~/hoge ~
# fugaが取り出されたスタック内容になりました
$ pwd
/home/una/hoge
恥ずかしながら、今回初めて知ったコマンドでした。
古代コマンドと思いきや、下記の通りコンピュータの根幹を成す大切な働きをしていました。
スタックは、コンピュータで用いられる基本的なデータ構造の1つで、データを後入れ先出し(LIFO: Last In First Out; FILO: First In Last Out)の構造で保持するものである。
https://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF
ディスク容量情報を表示する ( df )
dfコマンド(Disk Free): ディスクの空き容量を表示するコマンド
後に紹介するduコマンドとセットで利用する機会が多いと思います。
例えば、サーバーがfullに近い状態になったとします。
原因調査をする際に、dfでディスク使用状況を確認し、duでどのファイルがディスクを圧迫しているか調べるという使用方法ができます。
$ df
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
devtmpfs 485712 0 485712 0% /dev
tmpfs 503664 0 503664 0% /dev/shm
tmpfs 503664 624 503040 1% /run
tmpfs 503664 0 503664 0% /sys/fs/cgroup
/dev/xvda1 8376300 1724520 6651780 21% /
tmpfs 100736 0 100736 0% /run/user/1000
# hオプションでは単位を見やすい形にしてくれます
$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 475M 0 475M 0% /dev
tmpfs 492M 0 492M 0% /dev/shm
tmpfs 492M 656K 492M 1% /run
tmpfs 492M 0 492M 0% /sys/fs/cgroup
/dev/xvda1 8.0G 1.7G 6.4G 21% /
tmpfs 99M 0 99M 0% /run/user/1000
ディスク使用容量を調べる ( du )
duコマンド(Disk Usage) : ディスクの使用領域のサイズを表示するコマンド
オプション | カスタマイズ内容 |
---|---|
-a | ディレクトリ内の各ファイルの使用量も表示 |
-b | バイト単位で表示する |
-k | キロバイト単位で表示する ( デフォルト ) |
-s | 総計サイズのみ表示する |
$ du
304 ./dir1 #dir1 の総使用サイズ ( 単位キロ )
656 ./dir2 #dir2 の総使用サイズ
960 . #総計サイズ
#キロバイト単位
$ du -k
152 ./dir1
328 ./dir2
480 .
#ディレクトリ全て
$ du -a
304 ./dir1
656 ./dir2
~省略~
960 .
#総計サイズ
$ du -s
960 .
リンクとiノード
リンクの設定 ( ln )
lnコマンド(LiNk): リンクを設定するコマンド
リンクにはハードリンクとシンボリックリンクという2種類の方法があります。
シンボリックリンク: sample_s は sample1 を指す。 sample1 はファイル実体を指す
ハードリンク: sample_h と sample2 は同じファイル実体を指す
表面的な機能は同じですが、現在は柔軟性のあるシンボリックリンクが主流となっています。
理由は下記の通りです。
- シンボリックリンクはディレクトリのリンクもできる
- シンボリックリンクは別のファイルシステム上のファイルともリンクできる
今回はシンボリックリンクについて触れます。
オプション | カスタマイズ内容 |
---|---|
-s | シンボリックリンクにする ( -s がないとハードリンク ) |
-i | 「別名となるパス名」がすでに存在するとき確認実行する |
-f | 「別名となるパス名」がすでに存在するとき強制実行する |
リンクの設定
# sampleファイル作成
$ echo This is sample1 > sample1
# シンボリックリンクを設定
$ ln -s sample1 sample_s
# シンボリックリンクを使ってファイル表示
$ cat sample_s
This is sample1
リンク方法の確認
# リストを見る
$ ls -F
sample1 sample_s@ #@がシンボリックリンクのマーク
# リスト詳細を見る
$ ls -l
total 8
-rw-r--r-- 1 una staff 16 3 10 06:45 sample1
lrwxr-xr-x 1 una staff 7 3 10 06:45 sample_s -> sample1 #シンボリックリンクはポインタ表示される
ディレクトリ名のリンク
$ cat hoge/fuga
This is sample3
# hogeのリンクであるpiyoを作る
$ ln -s hoge piyo
# piyoを使ってfugaを表示する
$ cat piyo/fuga
This is sample3
ディレクトリ間のリンク
リンク名を現在のディレクトリに作る
# 同一名のリンクを作る
$ ln -s hoge/sample1 .
# sample2 というリンクを作る
$ ln -s hoge/sample1 sample2
# リンク内容
$ ls -l
lrwxrwxrwx 1 una staff 12 3月 10 06:55 sample1 -> hoge/sample1
lrwxrwxrwx 1 una staff 12 3月 10 06:56 sample2 -> hoge/sample1
# 同一名のリンクで表示指定
$ cat sample1
This is sample1. # hoge/sample1を表示している
# sample2というリンク名で表示指定
$ cat dfile2
This is sample1. # こちらも同様
リンク名を異なるディレクトリに作る
$ cat sample3
This is sample3
# piyo を作っておく
$ mkdir piyo
# 相対パスで指定(絶対パスでも問題なし)
$ ln -sf ../sample3 piyo/sample4
# リンク先
$ ls -l piyo
合計 0
lrwxrwxrwx 1 una staff 9 3月 10 07:01 sample4 -> ../sample3
# 表示ができている..!!
$ cat piyo/sample4
This is sample3
リンク設定はlinuxチョットデキルになるためにはマストなコマンドですね。
なんとなく使っていましたが、改めて学習すると新たな気付きが多い....
まとめ
今回取り上げたコマンドも、基礎コマンドといえると思います。
ただ、日頃利用するコマンドでも知らないオプションや背景などがあり、非常に興味深いものでした。
古代コマンドも知らないだけで、便利な使い方もあるやもしれません。
忘れないためにも、積極的に利用して身体に染み込ませたいと思います!!