ファイルやディレクトリの作成、削除、移動、コピーなどを行うコマンドです。
ディレクトリの内容を一覧表示します。
オプション | 説明 |
---|---|
-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
- サブディレクトリも含めて再帰的に表示
ディレクトリとファイルの階層構造をツリー形式で視覚的に表示します。
オプション | 説明 |
---|---|
-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 /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変数を設定して特定のディレクトリに移動
新しいディレクトリを作成します。
オプション | 説明 |
---|---|
-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
- テキストファイルが存在するパスと同じディレクトリ構造を作成
ファイルやディレクトリを削除します。
オプション | 説明 |
---|---|
-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 /*
などのコマンドは絶対に実行しないでください。
ファイルやディレクトリをコピーします。
オプション | 説明 |
---|---|
-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
- すべてのログファイルを拡張子を変更してバックアップ
ファイルやディレクトリを移動したり、名前を変更したりします。
オプション | 説明 |
---|---|
-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ディレクトリに移動
空のファイルを作成したり、既存ファイルのタイムスタンプを更新したりします。
オプション | 説明 |
---|---|
-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年前に設定