Linuxでファイルを作成する方法|touch・cat・echoコマンドの使い分け

コマンドリファレンス

Linuxでファイルを作成する最も簡単な方法は、touch コマンドです。存在しないファイル名を指定して実行するだけで、中身が空のファイルが一瞬で作成できます。
一方、あらかじめ中身のあるファイルを作りたい場合は catecho によるリダイレクト、じっくり編集したい場合はテキストエディタ(vinano)を使います。この記事では、目的別にLinuxでのファイル作成方法を整理し、touch コマンドの構文・オプション・実行例まで詳しく解説します。

  1. Linuxでファイルを作成する4つの方法
  2. touchコマンドで空ファイルを作成する
    1. 構文(Syntax)
    2. 主なオプション一覧
    3. 実行例:空ファイルを作成
    4. 実行例:複数ファイルを同時に作成
  3. 中身のあるファイルを作成する方法
    1. catコマンド+リダイレクトで複数行のファイルを作る
    2. echoコマンド+リダイレクトで1行だけのファイルを作る
    3. リダイレクトだけで空ファイルを作る(touchを使わない方法)
    4. テキストエディタでファイルを作成する
  4. ディレクトリごと作成したい場合
  5. touchコマンドの応用:タイムスタンプを操作する
    1. アクセス時刻だけ更新
    2. 更新時刻だけ更新
    3. 日時を指定して変更
    4. -t 形式で日時を指定
    5. 参照ファイルと同じ時刻に変更
    6. 作成せずに既存ファイルのみに適用
    7. シンボリックリンク自体のタイムスタンプを変更
    8. エラー例(権限不足)
  6. 実務での活用例
    1. find と組み合わせて更新日時を比較する
    2. ビルドツールの再実行を強制する
    3. シェルスクリプトでロックファイル・目印ファイルを作る
  7. よくある質問
    1. Linuxで空のファイルを作るコマンドは?
    2. 中身ありのファイルを1コマンドで作るには?
    3. ファイルをまとめて複数作成するには?
    4. touchで既存ファイルの中身は消えますか?
    5. touchでディレクトリのタイムスタンプも変更できますか?
    6. -a を指定してもアクセス時刻が変わらないのはなぜですか?
  8. 注意点
  9. 関連コマンド
  10. 参考
  11. 関連記事

Linuxでファイルを作成する4つの方法

やりたいことによって、使うべきコマンドは変わります。まずは全体像を比較表で確認してください。

方法コマンド例特徴こんな時に使う
touchtouch file.txt最速。中身は空になる空ファイル・目印ファイルを作りたい
catとリダイレクトcat > file.txtターミナルに入力した内容がそのままファイルになる複数行のテキストを一気に書きたい
echoとリダイレクトecho "text" > file.txt1行だけのファイルを1コマンドで作成短い設定値・メモを1行だけ書きたい
テキストエディタvi file.txt / nano file.txt画面上で編集しながら保存できる内容を確認・修正しながら作成したい

touchコマンドで空ファイルを作成する

touch は、指定したファイルの「最終アクセス時刻」と「最終更新時刻」を現在時刻に更新するコマンドです。ファイル名を指定するだけで実行でき、次の2つの動作のいずれかになります。

  • 指定したファイルが存在する場合:タイムスタンプ(atime・mtime)を現在時刻に更新する
  • 指定したファイルが存在しない場合:サイズ0バイトの空ファイルを新規作成する

つまり touch は本来「タイムスタンプ変更コマンド」ですが、ファイルが存在しない場合の副作用として空ファイルが作られるため、Linuxでファイルを新規作成する定番コマンドとして使われています。

構文(Syntax)

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

ファイルは複数まとめて指定でき、スペース区切りで並べると一度にすべて処理されます。

主なオプション一覧

オプション説明使用例
(なし)存在する場合はタイムスタンプ更新、なければ空ファイル作成touch file.txt
-c / --no-create新規作成せず、既存ファイルがある場合のみタイムスタンプ変更touch -c file.txt
-aアクセス時刻(atime)のみ更新touch -a file.txt
-m更新時刻(mtime)のみ更新touch -m file.txt
-d TIME指定した日時に変更(相対表現も可)touch -d "2025-08-21 10:00" file.txt
-t STAMP[[CC]YY]MMDDhhmm[.ss] 形式で時刻を指定touch -t 202508211030.45 file.txt
-r FILE参照ファイルと同じタイムスタンプに変更touch -r ref.txt target.txt
-h / --no-dereferenceシンボリックリンク自体のタイムスタンプを変更(リンク先ではなく)touch -h symlink.txt

実行例:空ファイルを作成

touch newfile.txt
ls -l newfile.txt

出力例:

-rw-rw-r-- 1 user user 0 Jul 20 01:14 newfile.txt

実行例:複数ファイルを同時に作成

ファイル名をスペース区切りで並べると、まとめて空ファイルを作成できます。

touch a.txt b.txt c.txt
ls -l a.txt b.txt c.txt

タイムスタンプの詳細な確認方法は stat コマンドの記事も参照してください。

中身のあるファイルを作成する方法

touch で作成できるのは空ファイルだけです。あらかじめ内容を書き込んだ状態でファイルを作りたい場合は、次の方法を使います。

catコマンド+リダイレクトで複数行のファイルを作る

cat の出力先をリダイレクト(>)でファイルに向けると、ターミナルに入力した内容をそのままファイルに書き込めます。Ctrl+D で入力を終了します。

cat > note.txt
1行目
2行目
(Ctrl+D で終了)

スクリプトの中で使う場合は、ヒアドキュメント(<<EOF)と組み合わせると入力を自動化できます。

cat > note.txt <<'EOF'
1行目
2行目
EOF

echoコマンド+リダイレクトで1行だけのファイルを作る

1行だけの内容であれば、echo を使う方が1コマンドで完結します。> は上書き、>> は追記です。

echo "hello" > hello.txt
cat hello.txt
echo "world" >> hello.txt
cat hello.txt

出力例:

hello
world

リダイレクトだけで空ファイルを作る(touchを使わない方法)

touch を使わなくても、次のように何も出力しないコマンドをリダイレクトすれば空ファイルを作成できます。

: > empty.txt

ただしこの方法は既存ファイルの中身を消して空にする(truncate -s 0 と同じ)動作になるため、既存ファイルを保持したまま新規作成したいだけなら touch の方が安全です。

テキストエディタでファイルを作成する

内容を確認・修正しながら作りたい場合は、vivimnano でファイルを開きます。存在しないファイル名を指定すると、保存した時点で新規ファイルとして作成されます。

nano memo.txt
# 内容を入力後 Ctrl+O で保存、Ctrl+X で終了

vi memo.txt
# i で編集モードに入り、Esc の後 :wq で保存終了

ディレクトリごと作成したい場合

ファイルではなくディレクトリ(フォルダ)を作成したい場合は touch ではなく mkdir を使います。詳しいオプションは mkdir の記事を参照してください。

mkdir newdir

touchコマンドの応用:タイムスタンプを操作する

touch は新規作成用途だけでなく、既存ファイルのタイムスタンプを狙った日時に変更する目的でもよく使われます。

アクセス時刻だけ更新

touch -a file.txt

更新時刻だけ更新

touch -m file.txt

日時を指定して変更

touch -d "2025-08-21 10:00" file.txt

-d は日付そのものだけでなく、「1日前」「2時間後」のような相対表現も解釈できます。

touch -d "1 day ago" file.txt
touch -d "2 hours" file.txt

-t 形式で日時を指定

touch -t 202508211030.45 file.txt

→ 2025年8月21日10時30分45秒

参照ファイルと同じ時刻に変更

touch -r old.txt new.txt

作成せずに既存ファイルのみに適用

touch -c notfound.txt

→ ファイルが存在しないので何も起こらない(新規作成もされない)

シンボリックリンク自体のタイムスタンプを変更

通常 touch はシンボリックリンクの参照先(実体)のタイムスタンプを変更します。リンク自体を変更したい場合は -h を付けます。

ln -s newfile.txt symlink.txt
touch -h symlink.txt

エラー例(権限不足)

touch /root/secret.txt

出力例:

touch: cannot touch '/root/secret.txt': Permission denied

実務での活用例

find と組み合わせて更新日時を比較する

touch で基準となる日付のファイルを作っておくと、find -newer でそれより新しいファイルだけを一覧できます。バックアップ対象の絞り込みなどに便利です。

touch -d "2026-01-01" baseline.txt
find . -newer baseline.txt

find コマンドの詳しい使い方は find の記事を参照してください。

ビルドツールの再実行を強制する

make などのビルドツールは、依存ファイルの更新時刻を見てタスクを再実行するかどうかを判断します。ファイルの中身を変更せずに再ビルドだけ強制したい場合、touch でタイムスタンプだけを更新すると意図した通りに動きます。

touch src/main.c
make

シェルスクリプトでロックファイル・目印ファイルを作る

「処理が実行中かどうか」を判定するロックファイルや、ディレクトリの存在確認用の空ファイルを作る場面でも touch がよく使われます。

if [ -e /tmp/job.lock ]; then
  echo "既に実行中です"
  exit 1
fi
touch /tmp/job.lock
# 処理本体
rm -f /tmp/job.lock

よくある質問

Linuxで空のファイルを作るコマンドは?

touch ファイル名 が最も簡単で標準的な方法です。指定したファイルが存在しなければ、サイズ0バイトの空ファイルが新規作成されます。

中身ありのファイルを1コマンドで作るには?

1行だけなら echo "内容" > file.txt、複数行なら cat > file.txt <<EOF ... EOF のようにヒアドキュメントを使うと、エディタを開かずに1コマンド(またはスクリプト内)で内容ごとファイルを作成できます。

ファイルをまとめて複数作成するには?

touch a.txt b.txt c.txt のようにスペース区切りで複数指定すると、一度にまとめて作成できます。連番のファイルを作りたい場合は touch file{1..5}.txt のようにブレース展開と組み合わせると効率的です。

touchで既存ファイルの中身は消えますか?

消えません。touch はタイムスタンプだけを更新するコマンドで、ファイルの中身(内容)には一切手を加えません。中身を空にしたい場合は : > file.txttruncate -s 0 file.txt など別の方法を使います。

touchでディレクトリのタイムスタンプも変更できますか?

できます。touch はファイルだけでなくディレクトリにも使え、touch mydir のように指定するとディレクトリ自体の更新時刻が変わります。ただしディレクトリ内のファイルには影響しません。ディレクトリ自体を新規作成したい場合は mkdir を使います。

-a を指定してもアクセス時刻が変わらないのはなぜですか?

ファイルシステムが noatime(アクセス時刻を記録しない)オプションでマウントされている場合、atimeの更新自体が無効化されており touch -a を実行しても値が変わらないことがあります。性能向上のため、SSD搭載サーバーなどで意図的に設定されているケースが多いです。

注意点

  • > によるリダイレクトは既存ファイルを上書き(内容を消去)します。追記したい場合は >> を使います。
  • -d は可読性が高く相対時間指定もできて便利ですが、POSIX 互換を厳密に意識するなら -t を使うとよいです。
  • ファイルシステムによっては atime の更新が無効化されている場合があります(noatime マウントオプションなど)。
  • シンボリックリンクに touch を実行すると、既定ではリンク先の実体が更新されます。リンク自体を更新したい場合は -h を付けます。
  • 書き込み権限のないディレクトリ・ファイルに対しては Permission denied エラーになります。

関連コマンド

  • cat : ファイルの表示・結合、リダイレクトと組み合わせたファイル作成
  • echo : テキストや変数を表示、リダイレクトでファイルに書き込み
  • mkdir : ディレクトリを新規作成
  • vim / nano : ファイルを編集しながら作成できるテキストエディタ
  • stat : ファイルの詳細情報(atime, mtime, ctime)を表示
  • date : システムの日時を表示・設定
  • find : ファイルやディレクトリを検索(-newer で更新日時比較)

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント