Linuxとコマンドラインの基礎

$ ls
a.log  b.log  notes.txt
$ for f in *.log; do mv "$f" "${f%.log}.txt"; done

上の操作の後で、ディレクトリにあるファイルとして、正しいものはどれか。

  1. Aa.log.txt、b.log.txt、notes.txt
  2. Ba.log、b.log、notes.txt のままで、a.log と b.log の中の「.log」という文字列が「.txt」に置き換わる
  3. Ca.txt、b.txt、notes.txt
答えと解説を見る

正解:C. a.txt、b.txt、notes.txt

for f in *.log は、*.log に一致する a.log と b.log を1つずつ変数 f に入れて、do と done の間を繰り返します。${f%.log} は、f の値の末尾から .log を取り除いた文字列なので、a.log なら a になり、mv "$f" "${f%.log}.txt" は a.log を a.txt に名前を変えます。notes.txt は *.log に一致しないので、そのまま残ります。"$f" を二重引用符で囲むのは、名前に空白が含まれていても1つの引数として mv に渡すためです。

  • A. mv "$f" "$f.txt" と書いたときの結果です。${f%.log} は末尾の .log を取り除きます。
  • B. mv はファイルの名前を変えるコマンドで、中身は変えません。中身を置き換えるのは sed などです。
  • C. 正しい。末尾の .log を取り除いて .txt を付けた名前に変わります。
この分野を解く 分野ページへ

Linuxとコマンドラインの基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

Linuxとコマンドラインの基礎のほかの問題

  1. カレントディレクトリにある実行の権限が付いたスクリプト run.sh を、「run.sh」と入力して実行しようとすると「command not found」になり、「./run.sh」と入力すると実行できた。理由として、正しいものはどれか。
  2. 上のコマンドを順に実行したときの、2つの bash -c の出力の組み合わせとして、正しいものはどれか。
  3. Linuxのパッケージ管理システム(Debian系の apt、Red Hat系の dnf など)の主な働きとして、正しいものはどれか。
  4. systemd を使うLinuxで、サービス license.service に対する「systemctl start license.service」と「systemctl enable license.service」の違いとして、正しいものはどれか。
  5. cron に「30 2 * * 1 /home/alice/backup.sh」と登録した。backup.sh が実行されるタイミングとして、正しいものはどれか。