Linuxファイル操作コマンド解説

ファイル操作コマンド

ファイルやディレクトリの作成、削除、移動、コピーなどを行うコマンドです。

ls - ファイルとディレクトリの一覧表示

ディレクトリの内容を一覧表示します。

オプション 説明
-l 詳細な情報を表示(権限、所有者、サイズ、更新日時など)
-a 隠しファイル(.で始まるファイル)も含めて全てのファイルを表示
-h ファイルサイズを人間が読みやすい形式で表示(KB, MB, GBなど)
-t 更新日時順にソート
-r 逆順にソート

例:

ls -la - 隠しファイルを含む全てのファイルを詳細情報付きで表示
ls -lh - 詳細情報を人間が読みやすいサイズ形式で表示
ls -lt - 更新日時順に詳細情報を表示
ls -la | grep "^d" - ディレクトリのみを表示(パイプとgrepを使用)
ls -la | grep "^-" | sort -k 5 -n - 通常ファイルをサイズ順にソートして表示
find . -type f -name "*.log" | xargs ls -lh - すべてのlogファイルの詳細情報を表示
ls -la --color=auto - ファイルタイプごとに色分けして表示
ls -R - サブディレクトリも含めて再帰的に表示

tree - ディレクトリ構造をツリー形式で表示

ディレクトリとファイルの階層構造をツリー形式で視覚的に表示します。

オプション 説明
-a 隠しファイル(.で始まるファイル)も表示
-d ディレクトリのみを表示(ファイルは表示しない)
-L [level] 指定した階層レベルまでのみ表示
-p ファイル名の後にパーミッションを表示
-s ファイルサイズを表示
-h ファイルサイズを人間が読みやすい形式で表示(KB, MB, GBなど)
-C ファイルとディレクトリをカラー表示
-P [pattern] 指定したパターンに一致するファイルのみを表示
-I [pattern] 指定したパターンに一致するファイルを除外
--du 各ディレクトリのディスク使用量を表示

例:

tree - カレントディレクトリの構造をツリー形式で表示
tree -L 2 - 2階層までのディレクトリ構造を表示
tree -d - ディレクトリのみをツリー形式で表示
tree -a - 隠しファイルを含むすべてのファイルとディレクトリを表示
tree -sh - ファイルサイズを人間が読みやすい形式で表示
tree -C | less -R - カラー表示でページャーを使用して閲覧
tree -P "*.py" - Pythonファイルのみを表示
tree -I "node_modules|.git|*.tmp" - 特定のディレクトリやファイルを除外
tree -J - JSON形式で出力
tree --du -h - ディレクトリごとのディスク使用量を人間が読みやすい形式で表示

cd - ディレクトリの移動

カレントディレクトリを変更します。

引数/オプション 説明
ディレクトリパス 移動先のディレクトリパス
~ ホームディレクトリに移動
.. 親ディレクトリに移動
- 直前にいたディレクトリに移動

例:

cd /usr/local/bin - 指定したディレクトリに移動
cd ~ - ホームディレクトリに移動
cd .. - 一つ上の親ディレクトリに移動
cd - - 直前にいたディレクトリに移動
cd $(find . -name "target" -type d | head -1) - 「target」という名前のディレクトリを検索して最初に見つかったものに移動
cd "$(dirname "$(find . -name "*.conf" | head -1)")" - 最初に見つかった.confファイルがあるディレクトリに移動
for dir in */; do (cd "$dir" && pwd && ls -la | head -5); done - 各サブディレクトリに移動して内容を表示(サブシェルを使用)
OLDPWD=/tmp && cd - - OLDPWD変数を設定して特定のディレクトリに移動

mkdir - ディレクトリの作成

新しいディレクトリを作成します。

オプション 説明
-p 必要に応じて親ディレクトリも作成(階層的なディレクトリ作成)
-m 作成するディレクトリのパーミッションを設定
-v 作成したディレクトリの情報を表示(詳細モード)

例:

mkdir new_directory - 新しいディレクトリを作成
mkdir -p parent/child/grandchild - 階層的なディレクトリ構造を一度に作成
mkdir -m 755 secure_dir - パーミッション755でディレクトリを作成
mkdir dir1 dir2 dir3 - 複数のディレクトリを一度に作成
mkdir -p project/{src,lib,doc,test} - ブレース展開を使用して複数のサブディレクトリを一度に作成
mkdir -p project/{src/{main,test}/{java,resources},lib,doc} - 複雑な階層構造を一度に作成
find . -type f -name "*.txt" | xargs dirname | sort | uniq | xargs mkdir -p - テキストファイルが存在するパスと同じディレクトリ構造を作成

rm - ファイルとディレクトリの削除

ファイルやディレクトリを削除します。

オプション 説明
-r, -R ディレクトリとその中身を再帰的に削除
-f 確認なしで強制的に削除
-i 削除前に確認を求める
-v 削除の進行状況を表示

例:

rm file.txt - ファイルを削除
rm -r directory - ディレクトリとその中身を削除
rm -rf directory - 確認なしでディレクトリとその中身を強制的に削除(注意して使用)
rm -i *.txt - すべてのテキストファイルを削除する前に確認を求める
find . -name "*.tmp" -type f -delete - すべての.tmpファイルを再帰的に検索して削除
find . -name "*.log" -type f -mtime +30 -exec rm {} \; - 30日以上前のログファイルを削除
find . -type f -size +100M -exec rm -i {} \; - 100MB以上のファイルを対話的に削除
ls | grep -E "^temp.*\.txt$" | xargs rm - "temp"で始まるテキストファイルをパイプを使って削除
rm -v !(*.txt|*.pdf) - テキストファイルとPDFファイル以外をすべて削除(拡張グロブを使用)

注意: rm -rf は非常に強力なコマンドで、誤って使用すると重要なファイルやシステムファイルを削除してしまう可能性があります。特に rm -rf /rm -rf /* などのコマンドは絶対に実行しないでください。

cp - ファイルとディレクトリのコピー

ファイルやディレクトリをコピーします。

オプション 説明
-r, -R ディレクトリとその中身を再帰的にコピー
-i 上書き前に確認を求める
-u コピー先のファイルがない場合、または元のファイルより古い場合のみコピー
-v コピーの進行状況を表示
-p ファイルの属性(パーミッション、タイムスタンプなど)を保持

例:

cp file.txt backup.txt - ファイルをコピー
cp -r source_dir destination_dir - ディレクトリとその中身を再帰的にコピー
cp -rp source_dir destination_dir - ディレクトリとその中身を属性を保持してコピー
cp -a source_dir destination_dir - アーカイブモードでコピー(-dpr と同等、シンボリックリンクや特殊ファイルも保持)
cp -u *.txt backup/ - 更新されたファイルのみをコピー(バックアップに便利)
find . -name "*.jpg" -exec cp {} /backup/images/ \; - すべてのJPGファイルを検索してバックアップディレクトリにコピー
find . -mtime -7 -type f | xargs cp -t /backup/recent/ - 過去7日以内に変更されたファイルをバックアップ
cp --parents src/config/app.conf /backup/ - ディレクトリ構造を保持してコピー
ls *.log | xargs -I{} cp {} backup/{}.bak - すべてのログファイルを拡張子を変更してバックアップ

mv - ファイルとディレクトリの移動・名前変更

ファイルやディレクトリを移動したり、名前を変更したりします。

オプション 説明
-i 上書き前に確認を求める
-f 確認なしで強制的に移動・名前変更
-u 移動先のファイルがない場合、または元のファイルより古い場合のみ移動
-v 移動・名前変更の進行状況を表示

例:

mv file.txt new_name.txt - ファイル名を変更
mv file.txt /path/to/directory/ - ファイルを別のディレクトリに移動
mv directory new_directory - ディレクトリ名を変更または移動
mv -i *.txt /backup/ - すべてのテキストファイルを移動(上書き前に確認)
mv -u *.log /archive/ - 更新されたログファイルのみを移動
find . -name "*.tmp" -exec mv {} /tmp/ \; - すべての一時ファイルを/tmpディレクトリに移動
find . -type f -name "*.jpg" | xargs -I{} mv {} photos/ - すべてのJPGファイルをphotosディレクトリに移動
for f in *.txt; do mv "$f" "${f%.txt}.bak"; done - すべてのテキストファイルの拡張子を.txtから.bakに変更
ls -1 | grep -E "^[0-9]+" | xargs -I{} mv {} numbered/{} - 数字で始まるファイルをnumberedディレクトリに移動

touch - ファイルの作成・更新日時の変更

空のファイルを作成したり、既存ファイルのタイムスタンプを更新したりします。

オプション 説明
-a アクセス時間のみ変更
-m 更新時間のみ変更
-c ファイルが存在しない場合、新しいファイルを作成しない
-t [[CC]YY]MMDDhhmm[.ss] 指定した時間に設定

例:

touch new_file.txt - 空のファイルを作成(存在する場合はタイムスタンプを更新)
touch -a file.txt - ファイルのアクセス時間のみを更新
touch -t 202507190200 file.txt - ファイルのタイムスタンプを2025年7月19日2時00分に設定
touch file{1..10}.txt - file1.txtからfile10.txtまでの10個のファイルを一度に作成
find . -name "*.log" -exec touch {} \; - すべてのログファイルのタイムスタンプを現在時刻に更新
find . -type f -mtime +30 | xargs touch - 30日以上前のファイルのタイムスタンプを更新
ls -1 *.txt | xargs -I{} touch -r reference.txt {} - すべてのテキストファイルのタイムスタンプをreference.txtと同じに設定
for i in {1..12}; do touch -d "2025-$i-01" "report-$(printf '%02d' $i).txt"; done - 各月の1日の日付を持つレポートファイルを作成
find . -type f -name "*.bak" | xargs touch -d "$(date -d '-1 year')" - すべてのバックアップファイルのタイムスタンプを1年前に設定