テストやダミーファイル、または存在確認用の「空ファイル(0バイトファイル)」を作りたいことはありませんか?
Linuxでは、わざわざエディタで新規ファイルを開かなくても、コマンド一発で0バイトファイルを作成できます。
この記事では、touch
コマンドを使って0バイトファイルを作成する方法、すでにファイルがあった場合の動き、複数ファイルを一気に作る例をわかりやすく解説します。
これを読めば、Linuxでのちょっとしたテストやスクリプト処理がもっと便利になりますよ!
0バイトファイルが必要な場面

よくある使用場面
用途 | 具体例 | 理由 |
---|---|---|
テストファイル | プログラムのテスト用データ | 処理確認のためのダミーファイル |
フラグファイル | .lock 、.done ファイル | プロセス状態の管理 |
テンプレート | 設定ファイルの雛形 | 初期状態のファイル作成 |
ログファイル初期化 | app.log 、error.log | ログローテーション後の空ファイル |
プレースホルダ | ディレクトリ構造の維持 | Gitなど空ディレクトリ対策 |
システム管理での活用
バックアップスクリプト:
- 処理開始を示すフラグファイル
- バックアップ完了の確認用ファイル
監視システム:
- プロセス生存確認用のハートビートファイル
- エラー発生時の通知用ファイル
開発環境:
- テスト用の空データファイル
- 設定ファイルのテンプレート
touchコマンドによる基本的な作成方法
基本的な使い方
単一ファイルの作成
touch filename.txt
実行例:
touch testfile.txt
ls -la testfile.txt
出力結果:
-rw-r--r-- 1 user user 0 Mar 15 14:30 testfile.txt
ファイルサイズの確認
# ファイルサイズを確認
ls -lh testfile.txt
stat testfile.txt
du -h testfile.txt
touchコマンドの詳細動作
既存ファイルがない場合
新規作成:
- 0バイトの空ファイルを作成
- 現在時刻をタイムスタンプに設定
- デフォルトのファイル権限を適用
既存ファイルがある場合
タイムスタンプ更新:
- ファイルサイズは変更しない
- アクセス時刻と更新時刻を現在時刻に更新
- ファイル権限は変更しない
確認例:
# ファイル作成
touch example.txt
ls -l example.txt
# 数秒後に再実行
sleep 5
touch example.txt
ls -l example.txt # タイムスタンプが更新される
touchコマンドのオプション
よく使うオプション
オプション | 機能 | 使用例 |
---|---|---|
-a | アクセス時刻のみ更新 | touch -a file.txt |
-m | 更新時刻のみ更新 | touch -m file.txt |
-c | ファイルが存在しない場合は作成しない | touch -c file.txt |
-t | 指定した時刻に設定 | touch -t 202403151430 file.txt |
-r | 他のファイルと同じ時刻に設定 | touch -r ref_file new_file |
実用的なオプション使用例
特定の日時に設定:
# 2024年3月15日 14:30:00 に設定
touch -t 202403151430.00 oldfile.txt
# 日時フォーマット: YYYYMMDDhhmm.ss
他のファイルと同じタイムスタンプ:
# reference.txt と同じタイムスタンプでnewfile.txtを作成
touch -r reference.txt newfile.txt
存在確認後の作成:
# ファイルが存在する場合のみタイムスタンプ更新
touch -c important.log
# 存在しない場合は何もしない(エラーも出ない)
複数ファイルの一括作成

複数ファイルの並列指定
基本的な並列作成
touch file1.txt file2.log file3.conf file4.data
ディレクトリを跨いだ作成:
touch /tmp/test1.txt ~/documents/test2.txt ./local/test3.txt
異なる拡張子での作成
# 同じベース名で異なる拡張子
touch readme.txt readme.md readme.pdf
# プロジェクトファイル一式
touch index.html style.css script.js config.json
ブレース展開を使った連番作成
数値連番
基本的な連番:
touch file{1..5}.txt
結果:
- file1.txt
- file2.txt
- file3.txt
- file4.txt
- file5.txt
ゼロパディング:
touch file{01..10}.txt
結果:
- file01.txt
- file02.txt
- …
- file10.txt
文字列連番
アルファベット連番:
touch file{a..e}.txt
結果:
- filea.txt
- fileb.txt
- filec.txt
- filed.txt
- filee.txt
複雑なパターン
複数の変数を組み合わせ:
touch {test,prod,dev}_{config,log,data}.{txt,json}
結果:
- test_config.txt, test_config.json
- test_log.txt, test_log.json
- test_data.txt, test_data.json
- prod_config.txt, prod_config.json
- (以下同様…)
年月日のファイル:
touch log_2024{01..12}{01..31}.txt
ディレクトリ構造と同時作成
ディレクトリも同時に作成
# ディレクトリが存在しない場合はエラー
touch dir/file.txt # エラーが発生する可能性
# ディレクトリを作成してからファイル作成
mkdir -p project/{src,docs,tests}
touch project/src/{main,utils,config}.{c,h}
touch project/docs/{readme,api,tutorial}.md
touch project/tests/{unit,integration}.test
階層的なファイル作成
# プロジェクト構造の作成例
mkdir -p webapp/{frontend,backend,config}
touch webapp/frontend/{index.html,style.css,app.js}
touch webapp/backend/{server.py,database.py,api.py}
touch webapp/config/{dev,prod,test}.json
リダイレクションを使った作成方法

基本的なリダイレクション
空の出力をリダイレクト
> filename.txt
動作説明:
- 何も出力しない状態でファイルにリダイレクト
- ファイルが存在しない場合は0バイトで作成
- 既存ファイルの場合は内容を削除(切り詰め)
nullコマンドとの組み合わせ
: > filename.txt
動作説明:
:
は何もしないnullコマンド- より明示的で可読性が高い
- スクリプトでよく使用される
リダイレクションの特徴
touchとの違い
項目 | touch | リダイレクション |
---|---|---|
新規作成 | ○ | ○ |
既存ファイル | タイムスタンプ更新 | 内容削除 |
権限 | デフォルト権限 | デフォルト権限 |
エラー処理 | ファイル作成失敗時エラー | 同左 |
可読性 | 直感的 | コマンドに慣れが必要 |
用途の使い分け
touchを使う場面:
- 単純に空ファイルを作成したい
- タイムスタンプを操作したい
- 複数ファイルを一括作成したい
リダイレクションを使う場面:
- 既存ファイルの内容を確実に削除したい
- スクリプト内で簡潔に書きたい
- ファイルの初期化が目的
高度なリダイレクション技法
複数ファイルへのリダイレクション
# シェルの機能を使って複数ファイル作成
for file in file{1..5}.txt; do
> "$file"
done
# またはサブシェルで
(for i in {1..5}; do > "file$i.txt"; done)
条件付きファイル作成
# ファイルが存在しない場合のみ作成
[ ! -f "config.txt" ] && > config.txt
# ファイルサイズが0でない場合に初期化
[ -s "data.txt" ] && > data.txt
その他の0バイトファイル作成方法
truncate コマンド
基本的な使い方
truncate -s 0 filename.txt
特徴:
- 既存ファイルのサイズを指定サイズに変更
- ファイルが存在しない場合は新規作成
- タイムスタンプは更新される
複数ファイルの処理
# 複数ファイルを0バイトに
truncate -s 0 file1.txt file2.log file3.conf
# ワイルドカードも使用可能
truncate -s 0 *.log
dd コマンド
0バイトファイルの作成
dd if=/dev/null of=filename.txt bs=1 count=0
パラメータ説明:
if=/dev/null
:入力ソース(空)of=filename.txt
:出力ファイルbs=1
:ブロックサイズcount=0
:コピーするブロック数
echo コマンド
空の内容を出力
echo -n > filename.txt
-n
オプション:
- 改行文字を出力しない
- 完全に0バイトのファイルを作成
# 改行ありの場合(1バイトファイル)
echo > filename.txt
# 改行なしの場合(0バイトファイル)
echo -n > filename.txt
実用的な応用例

スクリプトでの活用
ログファイルの初期化
#!/bin/bash
# log_rotate.sh - ログローテーションスクリプト
LOG_DIR="/var/log/myapp"
DATE=$(date +%Y%m%d)
# 古いログをバックアップ
mv "$LOG_DIR/app.log" "$LOG_DIR/app.log.$DATE"
# 新しい空ログファイルを作成
touch "$LOG_DIR/app.log"
# 適切な権限を設定
chmod 644 "$LOG_DIR/app.log"
chown appuser:appgroup "$LOG_DIR/app.log"
フラグファイルによるプロセス制御
#!/bin/bash
# process_control.sh
LOCK_FILE="/tmp/myprocess.lock"
DONE_FILE="/tmp/myprocess.done"
# プロセス開始時にロックファイル作成
if [ -f "$LOCK_FILE" ]; then
echo "プロセスは既に実行中です"
exit 1
fi
touch "$LOCK_FILE"
# 実際の処理
echo "処理を開始します..."
sleep 10 # 何らかの処理
# 処理完了時
rm "$LOCK_FILE"
touch "$DONE_FILE"
echo "処理が完了しました"
テスト環境での活用
テスト用データファイル作成
#!/bin/bash
# create_test_files.sh
TEST_DIR="./test_data"
mkdir -p "$TEST_DIR"
# 様々なサイズのテストファイル
touch "$TEST_DIR/empty.txt" # 0バイト
echo "small" > "$TEST_DIR/small.txt" # 小さいファイル
dd if=/dev/zero of="$TEST_DIR/medium.bin" bs=1K count=100 # 100KB
dd if=/dev/zero of="$TEST_DIR/large.bin" bs=1M count=10 # 10MB
echo "テストファイルを作成しました:"
ls -lh "$TEST_DIR"
設定ファイルテンプレート
#!/bin/bash
# init_config.sh - 設定ファイル初期化
CONFIG_DIR="./config"
mkdir -p "$CONFIG_DIR"
# 各環境の設定ファイル雛形
for env in dev staging prod; do
cat > "$CONFIG_DIR/$env.json" << EOF
{
"environment": "$env",
"database": {
"host": "",
"port": 5432,
"name": "",
"user": "",
"password": ""
},
"logging": {
"level": "info",
"file": "/var/log/app-$env.log"
}
}
EOF
done
# 空のログファイルも作成
touch "$CONFIG_DIR"/{dev,staging,prod}.log
バックアップとメンテナンス
ディスク容量テスト
#!/bin/bash
# disk_space_test.sh
TEST_DIR="/tmp/disktest"
mkdir -p "$TEST_DIR"
echo "ディスク容量テストを開始..."
# 大量の小さなファイルを作成してinode使用量をテスト
for i in {1..1000}; do
touch "$TEST_DIR/small_file_$i.txt"
done
echo "小さなファイル1000個を作成しました"
df -h "$TEST_DIR"
df -i "$TEST_DIR" # inode使用量も確認
# クリーンアップ
rm -rf "$TEST_DIR"
echo "テストファイルを削除しました"
システム監視用ファイル
#!/bin/bash
# system_monitor.sh
MONITOR_DIR="/var/monitor"
mkdir -p "$MONITOR_DIR"
# 各種ステータスファイル
touch "$MONITOR_DIR/cpu_ok"
touch "$MONITOR_DIR/memory_ok"
touch "$MONITOR_DIR/disk_ok"
touch "$MONITOR_DIR/network_ok"
# 監視スクリプトでこれらのファイルの存在や更新時刻をチェック
# 問題がある場合はファイルを削除し、正常時に再作成
エラー対処とトラブルシューティング

よくあるエラーと対処法
権限不足エラー
エラー例:
touch /etc/test.txt
# touch: cannot touch '/etc/test.txt': Permission denied
対処法:
# 適切な権限で実行
sudo touch /etc/test.txt
# または適切なディレクトリで実行
touch ~/test.txt
ディスク容量不足
エラー例:
touch large_file.txt
# touch: cannot touch 'large_file.txt': No space left on device
確認方法:
# ディスク使用量確認
df -h
# inode使用量確認
df -i
# 大きなファイル検索
find / -size +100M -type f 2>/dev/null
ファイルシステムの読み取り専用
エラー例:
touch test.txt
# touch: cannot touch 'test.txt': Read-only file system
確認方法:
# マウント状態確認
mount | grep "$(pwd -P)"
# 読み書き可能な場所で実行
cd /tmp
touch test.txt
デバッグとトラブルシューティング
ファイル作成の確認
# ファイル作成前後の状態確認
ls -la before_test.txt 2>/dev/null || echo "ファイルは存在しません"
touch before_test.txt
ls -la before_test.txt
# ファイルサイズの確認
stat before_test.txt
権限とオーナーシップの確認
# 詳細情報表示
ls -la filename.txt
stat filename.txt
# 権限の数値表示
stat -c "%a %n" filename.txt
# オーナーとグループ確認
stat -c "%U %G" filename.txt
パフォーマンスと最適化
大量ファイル作成の効率化
効率的な一括作成
# 非効率な方法(ループでtouch)
for i in {1..10000}; do
touch "file$i.txt"
done
# 効率的な方法(xargs使用)
printf "file%s.txt\n" {1..10000} | xargs touch
# さらに効率的(並列処理)
printf "file%s.txt\n" {1..10000} | xargs -P 4 -n 250 touch
ディスクI/Oの最適化
# ディスクI/Oを減らすため、一時的にディスクキャッシュを活用
sync # 既存の書き込みを完了
echo 3 > /proc/sys/vm/drop_caches # キャッシュクリア(要root権限)
# 大量ファイル作成
time (printf "file%s.txt\n" {1..1000} | xargs touch)
メモリ効率の考慮
大量ファイル名の生成
# メモリ効率的な方法(パイプ使用)
seq 1 100000 | sed 's/^/file/' | sed 's/$/\.txt/' | xargs touch
# ディスク効率的な方法(一時ファイル使用)
seq 1 100000 | sed 's/^/file/' | sed 's/$/\.txt/' > /tmp/filelist.txt
xargs touch < /tmp/filelist.txt
rm /tmp/filelist.txt
まとめ
Linuxでの0バイトファイル作成について、重要なポイントをまとめます:
基本的な作成方法
- touch:最も標準的で直感的
- リダイレクション:
> filename
または: > filename
- truncate:既存ファイルの確実な初期化
- echo -n:シンプルな代替手段
効率的な作成手法
- 複数ファイル:
touch file1 file2 file3
- 連番作成:
touch file{1..100}.txt
- 複雑なパターン:ブレース展開の活用
- 並列処理:xargsとの組み合わせ
実用的な応用場面
- テスト環境:ダミーファイル、テンプレート作成
- システム管理:ログ初期化、フラグファイル
- スクリプト処理:プロセス制御、状態管理
- 開発作業:プロジェクト構造の初期化
トラブル回避のポイント
- 権限確認:適切なディレクトリでの実行
- ディスク容量:事前の容量確認
- ファイルシステム:読み書き権限の確認
- パフォーマンス:大量ファイル作成時の最適化
touchとリダイレクションの使い分け
- 新規作成中心:touchが適している
- 既存ファイル初期化:リダイレクションが確実
- 複数ファイル:touchが便利
- スクリプト内:目的に応じて選択
コメント