このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

LinuC入門|コマンド演習06

LinuCコマンド演習06の概要

LinuCコマンド演習06では、1章で登場したコマンドについて学んだ流れを踏まえ、2章で登場したls、touch、ワイルドカード、ブレース展開の基本操作を練習します。

今回の演習では、ファイルやディレクトリを表示するだけでなく、複数のファイルを効率よく作成したり、ファイル名のパターンを使って目的のファイルを絞り込んだりします。

操作主な役割基本例
lsファイルやディレクトリを一覧表示するls -l
touch空のファイルを作成したり、タイムスタンプを更新したりするtouch memo.txt
ワイルドカード既存のファイル名をパターンで指定するls report*.txt
ブレース展開規則的な文字列をまとめて生成するtouch report{1..3}.txt

この表から分かるように、lsとtouchは実際に処理を行うコマンドです。一方、ワイルドカードとブレース展開は、Bashがコマンドを実行する前にファイル名や文字列を展開する仕組みです。

lsコマンド

lsは、ファイルやディレクトリの情報を一覧表示するコマンドです。

引数を指定しない場合は、現在いるディレクトリの内容を表示します。ファイル名やディレクトリ名を指定すると、その対象の情報を表示できます。

基本書式

ls [オプション] [ファイルまたはディレクトリ]

基本的な使用例

コマンド説明
ls現在のディレクトリの内容を表示する
ls /etc/etcディレクトリの内容を表示する
ls report.txtreport.txtの情報を表示する
ls -lファイルの詳しい情報を表示する
ls -a隠しファイルを含めて表示する
ls -hファイルサイズを読みやすい単位で表示する
ls -Fファイルの種類を表す記号を付ける
ls -Rサブディレクトリの内容も再帰的に表示する
ls -t更新時刻の新しい順に表示する
ls -iiノード番号を表示する
ls -dディレクトリの内容ではなく、ディレクトリ自身を表示する

-hはファイルサイズを読みやすくするオプションなので、通常は-lと組み合わせてls -lhのように使います。

よく使うオプションの組み合わせ

コマンド確認できる内容
ls -lパーミッション、所有者、サイズ、更新日時など
ls -la隠しファイルを含む詳しい一覧
ls -lhサイズをKiB、MiB、GiBなどで表示
ls -lah隠しファイルを含む詳しい一覧を読みやすい単位で表示
ls -ltr更新時刻の古い順に詳しく表示
ls -ld DocumentsDocumentsの中身ではなく、Documents自身の情報を表示

この表では、lsのオプションを組み合わせたときの使い方を整理しています。例えばls -laの-lと-aは、それぞれ詳しい表示と隠しファイルの表示を意味します。

ls -lの表示内容

suzuki@AlmaLinux:~$ ls -l report.txt
-rw-r--r--. 1 suzuki suzuki 1845  8月 15 01:20 report.txt
表示内容意味
-ファイルの種類
rw-r--r--パーミッション
1ハードリンク数
suzuki所有者
suzuki所有グループ
1845ファイルサイズ
8月 15 01:20最終更新日時
report.txtファイル名

先頭が-の場合は通常のファイル、dの場合はディレクトリです。AlmaLinuxではSELinuxに関係する情報がある場合、パーミッションの後ろに.が表示されることがあります。

touchコマンド

touchは、ファイルのアクセスタイムや更新タイムを変更するコマンドです。

指定したファイルが存在しない場合は、内容が空の新しいファイルを作成します。すでに存在する場合は、標準ではアクセスタイムと更新タイムを現在時刻に変更します。

基本書式

touch [オプション] ファイル名

基本的な使用例

コマンド説明
touch memo.txtmemo.txtがなければ空のファイルを作成する
touch memo1.txt memo2.txt2つのファイルを作成または更新する
touch -a memo.txtアクセスタイムだけを更新する
touch -m memo.txt更新タイムだけを更新する
touch -c memo.txtファイルが存在するときだけタイムスタンプを更新する
touch -t 202608150900 memo.txt2026年8月15日9時00分に設定する
touch -r base.txt memo.txtbase.txtと同じタイムスタンプにする

touchで扱う主な時刻

時刻意味touchのオプション
アクセスタイムファイルへ最後にアクセスした時刻-a
更新タイムファイルの内容を最後に変更した時刻-m
ステータス変更時刻所有者やパーミッションなどを変更した時刻直接指定できない

touchは、すべての時刻を自由に変更できるわけではありません。touchで主に扱うのはアクセスタイムと更新タイムです。

touch -tの日時形式

touch -t [[CC]YY]MMDDhhmm[.ss] ファイル名
部分意味
CC西暦の上2桁
YY西暦の下2桁
MM
DD
hh
mm
ss

例えば、次のコマンドはreport.txtのタイムスタンプを2026年8月15日9時30分に設定します。

suzuki@AlmaLinux:~$ touch -t 202608150930 report.txt

ワイルドカード

ワイルドカードは、特殊な記号を使って複数のファイル名をパターンで指定する仕組みです。

ワイルドカードを処理するのはlsやtouchではなくBashです。Bashがパターンに一致する既存のファイル名を探し、その結果をlsなどのコマンドへ引数として渡します。

基本的なワイルドカード

記号意味使用例
*0文字以上の任意の文字ls report*.txt
?任意の1文字ls report?.txt
[123]1、2、3のいずれか1文字ls report[123].txt
[1-3]1から3までのいずれか1文字ls report[1-3].txt
[!12]1と2以外の任意の1文字ls report[!12].txt
[^12]1と2以外の任意の1文字ls report[^12].txt

この表で特に大切なのは、*と?の違いです。

  • *は0文字以上に一致する
  • ?は必ず1文字に一致する
  • [1-3]は指定した範囲の中から1文字に一致する

* の動作

次のファイルが存在するとします。

report.txt
report1.txt
report12.txt
memo.txt

次のコマンドを実行します。

suzuki@AlmaLinux:~$ ls report*.txt
report.txt  report1.txt  report12.txt

*は0文字以上に一致するため、report.txt、report1.txt、report12.txtが対象になります。memo.txtはreportで始まらないため対象外です。

?の動作

suzuki@AlmaLinux:~$ ls report?.txt
report1.txt

?は任意の1文字だけに一致します。

  • report1.txtはreportと.txtの間に1文字あるため一致する
  • report.txtは間に文字がないため一致しない
  • report12.txtは間に2文字あるため一致しない

[ ]の動作

suzuki@AlmaLinux:~$ ls report[1-3].txt
report1.txt  report2.txt  report3.txt

[1-3]は、1、2、3のいずれか1文字に一致します。report10.txtのように数字が2文字あるファイルは対象外です。

隠しファイルとワイルドカード

通常のBashでは、*だけを指定しても先頭が.の隠しファイルには一致しません。

suzuki@AlmaLinux:~$ touch .secret.txt
suzuki@AlmaLinux:~$ ls *.txt

この場合、.secret.txtは表示されません。先頭の.も明示して、次のように指定します。

suzuki@AlmaLinux:~$ ls .*.txt
.secret.txt

ブレース展開

ブレース展開は、{ }の中に指定した文字列や連続する値から、複数の文字列を生成するBashの機能です。

ワイルドカードとの大きな違いは、対象となるファイルが存在しなくても展開されることです。

基本的なブレース展開

形式展開結果
file{1,2,3}.txtfile1.txt file2.txt file3.txt
file{1..3}.txtfile1.txt file2.txt file3.txt
file{a,b,c}.txtfilea.txt fileb.txt filec.txt
file{a..c}.txtfilea.txt fileb.txt filec.txt
{red,blue}-file.txtred-file.txt blue-file.txt
chap{01..03}chap01 chap02 chap03

ブレース内のカンマの前後には、空白を入れません。

file{1,2,3}.txt

次のように空白を入れると、意図したブレース展開になりません。

file{1, 2, 3}.txt

touchとブレース展開の組み合わせ

suzuki@AlmaLinux:~$ touch report{1..3}.txt

Bashは、まず次の3つの文字列に展開します。

report1.txt report2.txt report3.txt

その後、touchへ3つのファイル名を渡します。結果として、3つのファイルが作成されます。

ワイルドカードとの違い

比較項目ワイルドカードブレース展開
主な目的既存のファイル名を検索する複数の文字列を生成する
ファイルの存在一致する既存ファイルを探すファイルがなくても展開する
代表的な記号*、?、[ ]{ }
使用例ls report*.txttouch report{1..3}.txt
処理するものBashBash

ワイルドカードもブレース展開もBashが処理しますが、目的が異なります。

ワイルドカードは既存のファイルを探す機能です。ブレース展開は、コマンドへ渡す文字列をまとめて作る機能です。

ブレース展開とワイルドカード展開の順番

Bashでは、ブレース展開がワイルドカードによるファイル名展開より先に行われます。

次のコマンドを例に考えます。

suzuki@AlmaLinux:~$ ls report{1,2}*.txt

まず、ブレース展開によって次の2つのパターンが生成されます。

report1*.txt
report2*.txt

その後、それぞれの*がワイルドカードとして展開されます。

処理段階展開内容
入力ls report{1,2}*.txt
ブレース展開ls report1*.txt report2*.txt
ワイルドカード展開ls report1.txt report12.txt report2.txt report21.txt
コマンド実行lsが4つのファイルを表示する

この表は、ブレース展開とワイルドカードを同じ文字列で使用した場合の処理順序を表しています。ブレース展開で文字列を増やした後、それぞれの文字列に含まれるワイルドカードが既存のファイル名と照合されます。

演習問題+模範解答例

演習では、ホームディレクトリの下にlinuc06-workという専用ディレクトリを作成します。既存のファイルへ影響を与えないように、各演習ではex01、ex02のように個別のディレクトリを使用します。

演習01:lsコマンド(ファイルの一覧表示)

問題

次の手順で演習用のディレクトリとファイルを作成してください。

  1. ~/linuc06-work/ex01ディレクトリを作成する
  2. 作成したディレクトリへ移動する
  3. touchを使ってreport.txt、memo.txt、data.txtを作成する
  4. lsを使って、現在のディレクトリにあるファイルを一覧表示する
模範解答例
suzuki@AlmaLinux:~$ mkdir -p ~/linuc06-work/ex01
suzuki@AlmaLinux:~$ cd ~/linuc06-work/ex01
suzuki@AlmaLinux:~/linuc06-work/ex01$ touch report.txt memo.txt data.txt
suzuki@AlmaLinux:~/linuc06-work/ex01$ ls
data.txt  memo.txt  report.txt
解説

引数を指定せずにlsを実行すると、現在いるディレクトリの内容が表示されます。

touchには3つのファイル名を指定しているため、report.txt、memo.txt、data.txtが作成されます。lsの表示順序は、基本的に現在のロケールに基づく名前順です。

演習02:lsコマンド(隠しファイルを含む詳細表示)

問題

次の手順で演習用ファイルを作成し、隠しファイルを含む詳しい一覧を表示してください。

  1. ~/linuc06-work/ex02ディレクトリを作成する
  2. 作成したディレクトリへ移動する
  3. touchを使ってreport.txtと.configを作成する
  4. ls -laを使って一覧を表示する
模範解答例
suzuki@AlmaLinux:~$ mkdir -p ~/linuc06-work/ex02
suzuki@AlmaLinux:~$ cd ~/linuc06-work/ex02
suzuki@AlmaLinux:~/linuc06-work/ex02$ touch report.txt .config
suzuki@AlmaLinux:~/linuc06-work/ex02$ ls -la
合計 0
drwxr-xr-x. 2 suzuki suzuki 39  8月 15 02:10 .
drwxr-xr-x. 4 suzuki suzuki 32  8月 15 02:10 ..
-rw-r--r--. 1 suzuki suzuki  0  8月 15 02:10 .config
-rw-r--r--. 1 suzuki suzuki  0  8月 15 02:10 report.txt
解説

先頭が.のファイルは隠しファイルとして扱われ、通常のlsでは表示されません。

-aを指定すると、.configだけでなく、現在のディレクトリを表す.と、1つ上のディレクトリを表す..も表示されます。-lによってパーミッション、所有者、ファイルサイズ、更新日時なども確認できます。

演習03:touchコマンド(複数ファイルの作成)

問題

次の手順で3つの空ファイルを作成し、詳しい情報を表示してください。

  1. ~/linuc06-work/ex03ディレクトリを作成する
  2. 作成したディレクトリへ移動する
  3. touchを使ってmemo1.txt、memo2.txt、memo3.txtを一度に作成する
  4. ls -lで作成結果を確認する
模範解答例
suzuki@AlmaLinux:~$ mkdir -p ~/linuc06-work/ex03
suzuki@AlmaLinux:~$ cd ~/linuc06-work/ex03
suzuki@AlmaLinux:~/linuc06-work/ex03$ touch memo1.txt memo2.txt memo3.txt
suzuki@AlmaLinux:~/linuc06-work/ex03$ ls -l
合計 0
-rw-r--r--. 1 suzuki suzuki 0  8月 15 02:15 memo1.txt
-rw-r--r--. 1 suzuki suzuki 0  8月 15 02:15 memo2.txt
-rw-r--r--. 1 suzuki suzuki 0  8月 15 02:15 memo3.txt
解説

touchには複数のファイル名を指定できます。存在しないファイル名を指定したため、内容が空のファイルが3つ作成されます。

ls -lのファイルサイズが0になっていることから、内容が空であることを確認できます。

演習04:touchコマンド(タイムスタンプの指定)

問題

次の手順で、指定した日時を持つファイルを作成してください。

  1. ~/linuc06-work/ex04ディレクトリを作成する
  2. 作成したディレクトリへ移動する
  3. touch -tを使って、report.txtのタイムスタンプを2026年8月15日9時30分に設定する
  4. ls -l --time-style=long-isoで日時を確認する
模範解答例
suzuki@AlmaLinux:~$ mkdir -p ~/linuc06-work/ex04
suzuki@AlmaLinux:~$ cd ~/linuc06-work/ex04
suzuki@AlmaLinux:~/linuc06-work/ex04$ touch -t 202608150930 report.txt
suzuki@AlmaLinux:~/linuc06-work/ex04$ ls -l --time-style=long-iso report.txt
-rw-r--r--. 1 suzuki suzuki 0 2026-08-15 09:30 report.txt
解説

202608150930は、次のように読み取ります。

  • 2026が年
  • 08が月
  • 15が日
  • 09が時
  • 30が分

report.txtが存在しない場合でも、新しい空ファイルが作成され、指定したタイムスタンプが設定されます。

演習05:ワイルドカード(*によるファイル指定)

問題

次の手順で演習用ファイルを作成し、reportで始まり.txtで終わるファイルだけを表示してください。

  1. ~/linuc06-work/ex05ディレクトリを作成する
  2. 作成したディレクトリへ移動する
  3. report.txt、report1.txt、report12.txt、memo.txtを作成する
  4. *を使って、reportで始まり.txtで終わるファイルを表示する
模範解答例
suzuki@AlmaLinux:~$ mkdir -p ~/linuc06-work/ex05
suzuki@AlmaLinux:~$ cd ~/linuc06-work/ex05
suzuki@AlmaLinux:~/linuc06-work/ex05$ touch report.txt report1.txt report12.txt memo.txt
suzuki@AlmaLinux:~/linuc06-work/ex05$ ls report*.txt
report.txt  report1.txt  report12.txt
解説

*は0文字以上の任意の文字に一致します。

そのため、次のすべてが対象になります。

  • report.txtはreportと.txtの間が0文字
  • report1.txtは間が1文字
  • report12.txtは間が2文字

memo.txtはreportで始まっていないため対象外です。

演習06:ワイルドカード(?による1文字指定)

問題

次の手順で演習用ファイルを作成し、reportと.txtの間にちょうど1文字だけあるファイルを表示してください。

  1. ~/linuc06-work/ex06ディレクトリを作成する
  2. 作成したディレクトリへ移動する
  3. report.txt、report1.txt、report2.txt、report12.txtを作成する
  4. ?を使って対象のファイルを表示する
模範解答例
suzuki@AlmaLinux:~$ mkdir -p ~/linuc06-work/ex06
suzuki@AlmaLinux:~$ cd ~/linuc06-work/ex06
suzuki@AlmaLinux:~/linuc06-work/ex06$ touch report.txt report1.txt report2.txt report12.txt
suzuki@AlmaLinux:~/linuc06-work/ex06$ ls report?.txt
report1.txt  report2.txt
解説

?は任意の1文字に一致します。

report1.txtとreport2.txtは、reportと.txtの間に1文字だけあるため一致します。

report.txtは間が0文字、report12.txtは間が2文字なので対象外です。

演習07:ワイルドカード(文字範囲による指定)

問題

次の手順で演習用ファイルを作成し、番号が1から3までのファイルだけを表示してください。

  1. ~/linuc06-work/ex07ディレクトリを作成する
  2. 作成したディレクトリへ移動する
  3. file1.txt、file2.txt、file3.txt、file4.txt、fileA.txtを作成する
  4. [1-3]を使って対象のファイルを表示する
模範解答例
suzuki@AlmaLinux:~$ mkdir -p ~/linuc06-work/ex07
suzuki@AlmaLinux:~$ cd ~/linuc06-work/ex07
suzuki@AlmaLinux:~/linuc06-work/ex07$ touch file1.txt file2.txt file3.txt file4.txt fileA.txt
suzuki@AlmaLinux:~/linuc06-work/ex07$ ls file[1-3].txt
file1.txt  file2.txt  file3.txt
解説

[1-3]は、指定した位置に1、2、3のいずれか1文字があるファイル名に一致します。

file4.txtは範囲外であり、fileA.txtは数字ではないため対象外です。

演習08:ブレース展開(連続するファイル名の作成)

問題

次の手順で、report1.txtからreport5.txtまでの5つのファイルを作成してください。

  1. ~/linuc06-work/ex08ディレクトリを作成する
  2. 作成したディレクトリへ移動する
  3. ブレース展開とtouchを使って、5つのファイルを1回の操作で作成する
  4. lsで作成結果を確認する
模範解答例
suzuki@AlmaLinux:~$ mkdir -p ~/linuc06-work/ex08
suzuki@AlmaLinux:~$ cd ~/linuc06-work/ex08
suzuki@AlmaLinux:~/linuc06-work/ex08$ touch report{1..5}.txt
suzuki@AlmaLinux:~/linuc06-work/ex08$ ls
report1.txt  report2.txt  report3.txt  report4.txt  report5.txt
解説

Bashはreport{1..5}.txtを次の5つの文字列へ展開します。

report1.txt
report2.txt
report3.txt
report4.txt
report5.txt

展開された5つのファイル名がtouchへ渡されるため、1回のコマンド入力で5つのファイルを作成できます。

演習09:ブレース展開とワイルドカードの組み合わせ

問題

次の手順で演習用ファイルを作成し、report1またはreport2で始まる.txtファイルだけを表示してください。

  1. ~/linuc06-work/ex09ディレクトリを作成する
  2. 作成したディレクトリへ移動する
  3. report1.txt、report12.txt、report2.txt、report21.txt、report3.txtを作成する
  4. ブレース展開と*を組み合わせて対象のファイルを表示する
模範解答例
suzuki@AlmaLinux:~$ mkdir -p ~/linuc06-work/ex09
suzuki@AlmaLinux:~$ cd ~/linuc06-work/ex09
suzuki@AlmaLinux:~/linuc06-work/ex09$ touch report1.txt report12.txt report2.txt report21.txt report3.txt
suzuki@AlmaLinux:~/linuc06-work/ex09$ ls report{1,2}*.txt
report1.txt  report12.txt  report2.txt  report21.txt
解説

最初にブレース展開が行われ、次の2つのパターンが作られます。

report1*.txt
report2*.txt

その後、*によるワイルドカード展開が行われます。

  • report1*.txtはreport1.txtとreport12.txtに一致する
  • report2*.txtはreport2.txtとreport21.txtに一致する
  • report3.txtはどちらのパターンにも一致しない

このように、ブレース展開で複数のパターンを作り、それぞれにワイルドカードを適用できます。

まとめ

LinuCコマンド演習06では、lsによるファイル一覧の表示、touchによる空ファイルの作成とタイムスタンプの設定、ワイルドカードによる既存ファイルのパターン指定、ブレース展開による複数文字列の生成を演習しました。特に、ワイルドカードは既存のファイル名を検索し、ブレース展開はファイルの存在に関係なく文字列を生成するという違いが大切です。touchで練習用ファイルを作成し、ワイルドカードやブレース展開で対象を指定し、lsで結果を確認する流れを繰り返すと、ファイル操作の基本がしっかり身に付きます。