Linuxでファイルを作成する最も簡単な方法は、touch コマンドです。存在しないファイル名を指定して実行するだけで、中身が空のファイルが一瞬で作成できます。
一方、あらかじめ中身のあるファイルを作りたい場合は cat や echo によるリダイレクト、じっくり編集したい場合はテキストエディタ(vi・nano)を使います。この記事では、目的別にLinuxでのファイル作成方法を整理し、touch コマンドの構文・オプション・実行例まで詳しく解説します。
Linuxでファイルを作成する4つの方法
やりたいことによって、使うべきコマンドは変わります。まずは全体像を比較表で確認してください。
| 方法 | コマンド例 | 特徴 | こんな時に使う |
|---|---|---|---|
| touch | touch file.txt | 最速。中身は空になる | 空ファイル・目印ファイルを作りたい |
| catとリダイレクト | cat > file.txt | ターミナルに入力した内容がそのままファイルになる | 複数行のテキストを一気に書きたい |
| echoとリダイレクト | echo "text" > file.txt | 1行だけのファイルを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 の方が安全です。
テキストエディタでファイルを作成する
内容を確認・修正しながら作りたい場合は、vi(vim) や nano でファイルを開きます。存在しないファイル名を指定すると、保存した時点で新規ファイルとして作成されます。
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.txt や truncate -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で更新日時比較)
参考
- manページ: man7.org touch(1)
- GNU Coreutils: https://www.gnu.org/software/coreutils/

コメント