1-3. 演習問題
問題1:選択問題
Section titled “問題1:選択問題”1-1. 現在いるディレクトリを確認するコマンドはどれか。
- A.
ls - B.
pwd - C.
cd
1-2. 以下のコマンドの説明として正しいのはどれか。
$ cat access.log | grep "ERROR" | wc -l- A.
access.logの全行数を数える - B.
access.logの中で “ERROR” を含む行の数を数える - C.
access.logに “ERROR” という文字を追加する
1-3. rm -r mydir コマンドの説明として正しいのはどれか。
- A.
mydirを空にする - B.
mydirディレクトリとその中身を全て削除する - C.
mydirを別の場所へ移動する
問題2:コマンドを答えよう
Section titled “問題2:コマンドを答えよう”以下の操作を行うコマンドを書いてください。
- 現在のディレクトリに
workというディレクトリを作成する workディレクトリに移動するnotes.txtという空のファイルを作成するnotes.txtに “Hello, World!” という文字を書き込むnotes.txtの内容を表示する- 1つ上のディレクトリに戻る
workディレクトリを中身ごと削除する
問題3:パスを答えよう
Section titled “問題3:パスを答えよう”現在地が /c/Users/student/practice/demo のとき、以下のパスが指す絶対パスを答えてください。
./README.md../../../Documents~/Desktop(~は/c/Users/studentとする)
問題4:パイプとリダイレクト
Section titled “問題4:パイプとリダイレクト”以下のコマンドを見て、それぞれ何をするコマンドか説明してください。
# (1)$ ls -la | grep "^d"
# (2)$ echo "start" > log.txt && echo "end" >> log.txt
# (3)$ find . -name "*.java" | wc -l問題5:記述問題
Section titled “問題5:記述問題”5-1. PATH 環境変数の役割を説明してください。
5-2. パイプ(|)を使うメリットを説明してください。
5-3. > と >> の違いを説明してください。
問題6:ハンズオン課題
Section titled “問題6:ハンズオン課題”実際にターミナルで以下の操作を行ってください。
課題1:ディレクトリ構成を作る
以下のディレクトリ構成を、ホームディレクトリの下に1つのコマンドで作成してください(ヒント:mkdir -p)。
~/practice/├── src/└── docs/課題2:ファイルを操作する
~/practice/docs/にmemo.txtを作成し、“学習中” と書き込む~/practice/docs/memo.txtの内容を確認する~/practice/docs/memo.txtを~/practice/src/にコピーする
課題3:検索する
~/practice以下で.txt拡張子のファイルを全て検索して表示する~/practice/docs/memo.txtの中に “学習” という文字が含まれているかgrepで確認する
課題4:環境変数
PRACTICE_DIRという環境変数に~/practiceのパスを設定する- 設定した環境変数の値を表示する
問題1の解答(クリックで開く)
1-1. 正解:B. pwd
解説
- A の
lsは現在のディレクトリの**中身(ファイル一覧)**を表示するコマンド。「今どこにいるか」ではなく「今いる場所に何があるか」を確認するもの。- B の
pwd(Print Working Directory)が現在地のパスを表示する正解。- C の
cd(Change Directory)はディレクトリを移動するコマンドで、表示はしない。Terminal window $ pwd/c/Users/student/practice/demo ← 現在地のフルパスが出力される
1-2. 正解:B. access.log の中で “ERROR” を含む行の数を数える
解説:パイプを追いかける
Terminal window cat access.log | grep "ERROR" | wc -lパイプ(
|)は左のコマンドの出力を右のコマンドの入力に渡す。cat access.log → ファイル全行を出力↓ パイプgrep "ERROR" → "ERROR" を含む行だけを絞り込む↓ パイプwc -l → 行数を数える(-l は lines の意味)↓ 最終出力42(など、該当行数)A(全行数)は
wc -l < access.logまたはcat access.log | wc -l。C(追加)はecho "ERROR" >> access.log。
1-3. 正解:B. mydir ディレクトリとその中身を全て削除する
解説
- A は誤り。ディレクトリを空にするコマンドは標準では存在しない(中身を個別に削除するか
rm -rで一括削除)。- B が正しい。
rm -rの-rは「再帰的(recursive)」の意味で、ディレクトリの中身も含めて全て削除する。- C の移動は
mvコマンド。注意:
rm -rは元に戻せない。エクスプローラーのごみ箱とは異なり、削除は即時・永続的。Terminal window rm -r mydir # 危険:確認なしに削除rm -ri mydir # 安全:削除前に確認を求める(-i = interactive)
問題2の解答(クリックで開く)
mkdir work # (1) work ディレクトリを作成cd work # (2) work に移動touch notes.txt # (3) 空のファイルを作成echo "Hello, World!" > notes.txt # (4) 文字を書き込む(上書き)cat notes.txt # (5) 内容を表示cd .. # (6) 1つ上へ戻るrm -r work # (7) work ごと削除各コマンドの補足
touchは本来「ファイルの更新日時を現在時刻に変更する」コマンドだが、ファイルが存在しない場合は空のファイルを新規作成する。そのため「空のファイルを作る」用途によく使われる。
echo "..." > fileは「文字列を標準出力に出し、それをファイルにリダイレクトする」という2段階の動作。echo自体には書き込む機能はなく、>がファイルへの書き込みを担当している。
cd ..の..は「1つ上のディレクトリ」を表す特殊な記法。cd ../..で2つ上など連結できる。
問題3の解答(クリックで開く)
現在地:/c/Users/student/practice/demo
1. ./README.md → /c/Users/student/practice/demo/README.md
.は「現在のディレクトリ」を表す記号。./README.mdは「今いる場所にある README.md」という意味。
2. ../ → /c/Users/student/practice/
..は「1つ上のディレクトリ」を表す記号。demoの1つ上はpractice。
3. ../../Documents → /c/Users/student/Documents
../../で2つ上へ遡る(demo→practice→student)。そこからDocumentsに入る。/c/Users/student/practice/demo (現在地)↑ .. → /c/Users/student/practice↑ ../.. → /c/Users/student/c/Users/student/Documents ← そこへ Documents をつなぐ
4. ~/Desktop → /c/Users/student/Desktop
~(チルダ)はホームディレクトリ(/c/Users/student)の省略記法。現在地に関わらず常に同じ場所を指す。
問題4の解答(クリックで開く)
(1) ls -la | grep "^d"
ls -laの出力例:drwxr-xr-x 1 student 197121 0 Mar 20 10:00 site ← d で始まる(ディレクトリ)-rw-r--r-- 1 student 197121 512 Mar 20 10:00 README.md ← - で始まる(ファイル)
grep "^d"の^は「行頭」を意味する正規表現。先頭がdの行(=ディレクトリ)だけを絞り込む。 結果:ディレクトリ一覧のみ表示する。
(2) echo "start" > log.txt && echo "end" >> log.txt
記号 意味 >上書きリダイレクト(既存内容は消える) >>追記リダイレクト(既存内容は保持される) &&左のコマンドが成功したら右を実行する 実行後の
log.txtの内容:startend
(3) find . -name "*.java" | wc -l
find . -name "*.java"はカレントディレクトリ以下のすべての.javaファイルのパスを1行ずつ出力する。wc -lでその行数(= ファイル数)を数える。 結果:カレントディレクトリ以下にある.javaファイルの総数を表示する。
問題5の解答例(クリックで開く)
5-1. PATH 環境変数の役割
コマンドを入力すると、シェルは
PATHに含まれるディレクトリを左から順に探してプログラムを実行する。Terminal window $ echo $PATH/mingw64/bin:/usr/bin:/c/Program Files/nodejs$ git# → /mingw64/bin/git を探す → なければ /usr/bin/git → なければ /c/Program Files/nodejs/git# → 見つかったものを実行
PATHに含まれていないディレクトリのプログラムはフルパスで指定しないと実行できない。新しいツールをインストールしたあと「コマンドが見つからない」エラーが出る場合、そのツールのディレクトリがPATHに含まれていないことが原因の代表例である。
5-2. パイプ(|)を使うメリット
① 複数のコマンドを組み合わせて複雑な処理を実現できる 単一のコマンドでは難しい処理も、小さなコマンドを組み合わせることで実現できる。Unix の設計哲学「一つのことをうまくやれ(Do one thing well)」を体現している。
② 中間ファイルが不要で効率的
Terminal window # パイプなし(中間ファイルが必要)cat access.log > /tmp/tmp1.txtgrep "ERROR" /tmp/tmp1.txt > /tmp/tmp2.txtwc -l /tmp/tmp2.txtrm /tmp/tmp1.txt /tmp/tmp2.txt# パイプあり(1行で完結)cat access.log | grep "ERROR" | wc -l
5-3. > と >> の違い
記号 動作 既存内容 >上書き 消える >>追記 保持される Terminal window echo "1行目" > file.txtecho "2行目" > file.txtecho "3行目" >> file.txtログファイルへの記録には
>>を使う。>を使うと古いログが消えてしまう。
問題6の解答例(クリックで開く)
課題1:ディレクトリ構成を一度に作る
mkdir -p ~/practice/src ~/practice/docs
-pオプションの役割:
- 中間ディレクトリ(
practice)が存在しない場合でも自動的に作成する- 既にディレクトリが存在してもエラーにならない
-pなしでmkdir ~/practice/srcを実行すると、~/practiceがない場合にエラーになる。
課題2:ファイル操作
echo "学習中" > ~/practice/docs/memo.txtcat ~/practice/docs/memo.txtcp ~/practice/docs/memo.txt ~/practice/src/
cp 元ファイル 先ディレクトリ/と書くと、同じファイル名でコピー先に配置される。cp ~/practice/docs/memo.txt ~/practice/src/memo_copy.txtのように名前を変えてコピーすることもできる。
課題3:検索
find ~/practice -name "*.txt"grep "学習" ~/practice/docs/memo.txt
grepが一致した場合はその行を出力する。一致しなかった場合は何も出力しない。find ~/practice -name "*.txt"なら、今回作成したmemo.txtを含む.txtファイル一覧を確認できる。
課題4:環境変数
export PRACTICE_DIR=~/practiceecho $PRACTICE_DIR
exportは環境変数を設定するためのコマンドである。PRACTICE_DIR=~/practiceのように値を代入すると、後から$PRACTICE_DIRで参照できる。 ここでは講義で学んだexportと~を組み合わせており、$(...)のような別の構文は使っていない。