今回やること
mktempで自分専用の一時フォルダを作り、その中だけで次を練習します。
pwdとlsで現在地と対象を確認する- 相対パスと絶対パスを見分ける
- ファイルを作成、コピー、移動する
ls -lで権限を読み、自作scriptへ実行権限を付ける- 作成物を安全に片付ける
所要時間は約20分です。説明だけでなく、1行ずつ実行して確認する時間も含みます。
前提と役割分担
対象はmacOS、Linux、またはWindowsのWSLで動くshellです。PowerShellは同名commandでも挙動が違う場合があります。
ターミナルを開く方法と最初の操作はターミナル基本操作の実演、command一覧はLinuxチートシートで確認できます。この記事はパス、パーミッション、安全なファイル操作に集中します。
安全ルール
- 実行前後に
pwdとls -laで確認する - 記録した一時フォルダの外にいる、またはmarkerがない場合は止める
- 自分で作った学習用ファイルだけを変更する
- この記事にない強い削除や管理者向け操作へ置き換えない
code blockには入力するcommandだけを載せています。画面のprompt記号は入力しません。
Step 1: sandboxを作る
mktemp -dは、重複しない名前で専用フォルダを作り、その絶対パスを返します。
practice_sandbox="$(mktemp -d)"
cd "$practice_sandbox"
practice_sandbox="$(pwd -P)"
touch .ada-linux-practice-marker
現在地と固有markerをまとめて確認するfunctionを、このターミナルに登録します。
check_sandbox() {
current_path="$(pwd -P)"
printf 'current: %s\n' "$current_path"
test "$current_path" = "$practice_sandbox" &&
test -f .ada-linux-practice-marker &&
printf 'marker: OK\n'
}
check_sandbox
成功確認: current:に一時フォルダの絶対パス、次の行にmarker: OKと表示されます。
以降は各Stepの最初にcheck_sandboxを実行し、marker: OKが出なければ止めます。
Step 2: パスを読む
pwdが表示する、先頭からすべて書かれたパスが絶対パスです。現在地を基準にした短い指定が相対パスです。
| 表記 | 意味 |
|---|---|
. | 現在のフォルダ |
.. | 1つ上のフォルダ |
docs/memo.txt | 現在地から見たファイル |
/から始まるパス | filesystemのrootから始まる絶対パス |
check_sandbox
mkdir docs
mkdir backup
mkdir scripts
ls -la
ls -la ./docs
成功確認: docs、backup、scriptsが表示されます。練習途中では親フォルダへ移動しません。
Step 3: ファイルを作って読む
check_sandbox
touch memo.txt
touch docs/guide.txt
ls -la
ls -la docs
printf 'Linux practice\n' > memo.txt
cat memo.txt
touchは対象がなければ空fileを作ります。>は内容を置き換えるため、自分で作った空のmemo.txtだけに使います。catでLinux practiceと表示されれば成功です。
Step 4: コピー、移動、引用符
cp -iとmv -iは、同名の保存先がある場合に確認します。
check_sandbox
cp -i memo.txt backup/memo-copy.txt
cat backup/memo-copy.txt
mv -i docs/guide.txt docs/commands.txt
ls -la docs
スペースを含む名前は、引用符で1つのパスとして扱います。
touch "study notes.txt"
ls -l "study notes.txt"
cp -i "study notes.txt" backup/
ls -la backup
成功確認: copyの内容が元と同じで、docsにはcommands.txt、backupには2つのfileがあります。
上書き確認の対象が分からなければ、操作をキャンセルしてください。
Step 5: パーミッションを読む
ls -lの先頭は、ファイルの種類と権限です。
-rw-r--r-- 1 user group 15 Jul 25 10:00 memo.txt
| 部分 | 対象 |
|---|---|
| 先頭1文字 | 種類。-は通常file、dはfolder |
| 次の3文字 | ownerの権限 |
| 次の3文字 | groupの権限 |
| 最後の3文字 | othersの権限 |
rは読み取り、wは書き込み、xは実行、-はその権限がないことを表します。
check_sandbox
printf '#!/bin/sh\nprintf "ready\\n"\n' > scripts/check.sh
ls -l scripts/check.sh
chmod u+x scripts/check.sh
ls -l scripts/check.sh
./scripts/check.sh
chmod u+xはownerである自分に実行権限を追加します。2回目のls -lでowner部分にxがあり、実行するとreadyと表示されれば成功です。自分で作っていないfileは変更しません。
よくあるつまずき
No such file or directory
pwd
ls -la
ls -la docs
現在地、名前の大文字と小文字、拡張子、引用符を確認します。sandbox外なら止めます。
Permission denied
pwd
ls -ld .
ls -l scripts/check.sh
自分で作ったsandboxか、ownerは誰か、実行権限があるかを読みます。原因が分からないまま権限を広げず、表示結果を保存して質問してください。
コピーや移動で確認された
同名の保存先があります。別名を使うか、保存先をcatで読んでから判断します。
練習
exercisefolderを作るexercise/original.txtへpath practiceと書くexercise/copy.txtへ確認付きでcopyするcatで2つの内容、ls -lで権限を確認する
check_sandbox
mkdir exercise
touch exercise/original.txt
printf 'path practice\n' > exercise/original.txt
cp -i exercise/original.txt exercise/copy.txt
cat exercise/original.txt
cat exercise/copy.txt
ls -l exercise
クリーンアップ
残したい場合は実行しなくて構いません。片付ける場合も、最初に現在地とmarkerを確認します。
check_sandbox
ls -la
rm -i memo.txt "study notes.txt"
rm -i docs/commands.txt
rm -i backup/memo-copy.txt "backup/study notes.txt"
rm -i scripts/check.sh
rm -i exercise/original.txt exercise/copy.txt
rmdir docs backup scripts exercise
rm -i .ada-linux-practice-marker
ls -la
cd ..
rmdir "$practice_sandbox"
pwd -P
各fileの確認に同意してから削除します。rmdirは空でないfolderではerrorになるため、予想外のfileがあれば止まります。
既知のfileとmarkerがなくなり、一時フォルダが空になった場合だけ、親へ戻って記録済みの絶対パスをrmdirします。
次のステップ
- 基本操作を復習する: ターミナル基本操作の実演
- commandを目的別に探す: Linuxチートシート
- 自動化へ進む: シェルスクリプト入門