はじめに
Linux のシェル操作には「cd」と「ls」というコマンドが欠かせません。
これらは「ディレクトリを移動する」「ファイルやディレクトリの一覧を表示する」という基本操作に対し、最も頻繁に呼ばれるツールです。
本記事では、初心者でも直感的に使用できるよう、cd と ls の動作原理、主なオプション、よくあるミス、実際の例を徹底的に解説します。
これを読めば、ターミナルでのファイル操作が格段にスムーズになり、作業効率が向上することでしょう。
cd コマンド:ディレクトリを移動する
1. 基本的な使い方
cd DIRECTORY
- DIRECTORY: 移動したいパス。
- 相対パス(
../folder、./subdir) - 絶対パス(
/home/user/Documents) - 特殊文字(
~はホームディレクトリ、.は現在のディレクトリ)
- 相対パス(
例
cd /usr/local/bin # 絶対パスで移動
cd .. # 親ディレクトリへ
cd - # 前にいたディレクトリへ戻る
2. cd に関するよくある質問
| 質問 | 回答 |
|---|---|
cd だけを入力したら、どこへ戻る? | ホームディレクトリ($HOME)へ戻ります。 |
cd - を入れたら何が起きる? | 直前にいっていたディレクトリへ戻ります(履歴が一つだけ保存される)。 |
cd でエラーになる理由は? | 指定したパスが存在しない、あるいはアクセス許可が無い場合です。 |
3. 環境変数を利用したカスタマイズ
3‑1. ~ の展開
~user の形式で他人のホームディレクトリへ移動可能です。
cd ~root # ルートユーザーのホームへ
3‑2. CDPATH で検索ディレクトリを増やす
シェルに検索パスを追加し、cd でパスを省略しても探し出せるようにします。
export CDPATH=~/projects:/opt/tools
cd projXYZ # ~/projects/projXYZ を自動検索
4. 迷わないためのディレクトリ構造確認
pwd(Print Working Directory)で現在のフルパスを確認し、ls -d */ で現在のディレクトリ内のサブディレクトリだけをリスト表示できます。
pwd
# /home/user/projects
ls -d */
# backend/ docs/ frontend/
5. 典型的なミスと対処法
| 話題 | 問題 | 回避策 |
|---|---|---|
cd /var/tmp で失敗 | パーミッション不足 | sudo cd /var/tmp は無効。sudo で別シェルを起動するか、su - で root に切り替える。 |
cd ../ が思った場所に行かない | シンボリックリンクの中にいる | cd -P(物理的パス)を使うことでリンク経由でないパスへ移動。 |
cd で予期せぬディレクトリへ戻る | CDPATH が設定されている | unset CDPATH で一時的に解除。 |
ls コマンド:ファイルやディレクトリの一覧表示
1. ls の基本
ls [オプション] [パス]
- パスを省略すると現在ディレクトリ内を表示。
ls
ls -l
ls -a
2. 主なオプション一覧と効果
| オプション | 説明 |
|---|---|
-a / --all | ドットで始まる隠しファイルも表示 |
-l | 長いフォーマット(パーミッション・オーナー・サイズ・日時) |
-h | ファイルサイズを人間が読みやすい単位に変換 |
-R | 再帰的にサブディレクトリも表示 |
-t | 最終更新時刻でソート |
-S | ファイルサイズでソート |
-r | ソート順を逆に |
-i | iノード番号を表示 |
-d | ディレクトリ自体を対象にリスト |
-F | ファイル種別の識別文字を末尾に付ける (/=ディレクトリ、*=実行ファイル等) |
-x | 行単位で横に並べて表示 |
--color | カラー表示(デフォルトで有効) |
-1 | 1列表示 |
例:詳細・カラー・隠しファイルを同時に表示
ls -la --color
3. リストのカスタマイズ:別名エイリアス
頻繁に使うオプションをエイリアスにして、ワンクリックで実行できるようにします。
alias ll="ls -la --color"
alias la="ls -aF"
4. ls でよくある誤解と真実
| 誤解 | 実際 |
|---|---|
ls -l でファイルサイズがバイト単位のみ | 実はサイズはバイト。-h で K, M, G 付かす。 |
| ソートはデフォルトで名前順 | デフォルトは名前順で大小文字を区別しない(設定により異なる)。-r で逆順、-t で更新順。 |
ls -a で全てが表示される | . と .. も含まれる。 -A で .. を除外。 |
5. 失敗例とデバッグ
5‑1. 大きなディレクトリで ls が遅い
- 原因: 何十万ものファイルがあると処理が重い。
- 対処:
ls -lhSでサイズ順に表示して、先頭で大きいものを把握。 - 補助ツール:
find . -maxdepth 1 | wc -lでファイル数を数える。
5‑2. ls がエラーになる
- 典型的なメッセージ:
ls: cannot access 'xxx': No such file or directory - 原因: 指定パスが無い、権限が無い、またはバイナリ自体が壊れている。
- 確認:
stat xxxでメタ情報を確認。
6. 高度な利用シーン
| シーン | コマンド例 |
|---|---|
| 特定拡張子の全検索 | find . -type f -name "*.log" -exec ls -l {} + |
| 更新日時で絞り込み | find . -mtime -1 -type f -print |
| 磁力のないファイルのみ | find / -type f -empty -print |
| ディレクトリ構造をツリー形式で表示 | tree -L 2(tree は別途インストールが必要) |
6‑1. find と ls の連携
find は大量検索に、ls は表示に特化したツールです。以下のように組み合わせると、効率的に情報を抽出できます。
# 1GB 超過ファイルを一覧表示
find . -type f -size +1G -print0 | xargs -0 ls -lh --color
6‑2. 色付き出力で視覚的に分かりやすくする
多くのディストリビューションでデフォルトで --color=auto が有効です。カスタム色を設定したい場合は LS_COLORS 環境変数を変更します。
# 例:実行ファイルを赤で表示
export LS_COLORS=$LS_COLORS:'ex=31:'
cd と ls の組み合わせ:実務でよく利用されるワークフロー
| コマンドシーケンス | 目的 |
|---|---|
cd ~/documents && ls -la | 文書フォルダへ移動し、全リストを確認 |
| `ls -R | grep "^total "` |
| `cd /var/log && ls -lt | head -n 10` |
cd .. && ls -d */ | 親ディレクトリのサブディレクトリを一覧 |
mkdir -p projects/${YEAR}/${MONTH} && cd projects/${YEAR}/${MONTH} | 年月ごとにディレクトリを作成して移動 |
1. 効率的にフォルダ構造を把握する
# 1. ディレクトリツリー表示
tree -L 2
# 2. 大容量ディレクトリのみ抽出
du -h --max-depth=1 | sort -hr | head -n 10
2. ファイルを検索し、直感的に確認する流れ
# 1. テキストを含むファイルを検索
grep -rl "TODO" .
# 2. 検索結果を詳細リストで表示
xargs ls -lh < <(grep -rl "TODO" .)
まとめ:cd と ls のマスターに必要なポイント
cd- ホームへ戻る (
cd ~、cdだけ) - 過去のディレクトリへ戻る (
cd -) - 環境変数
CDPATHで検索パスを拡張 - パーミッション・シンボリックリンクの理解
- ホームへ戻る (
ls- フィルタリングとソートオプションを組み合わせ(
-laSthなど) - 隠しファイル・色付き表示を活用
findと連携し、検索結果を即座に表示
- フィルタリングとソートオプションを組み合わせ(
実務への応用
- 大規模なプロジェクトでサブディレクトリを高速でナビゲート
- ログ分析・ファイルサイズ監視でリソース管理
- ターミナル作業を効率化するエイリアスやスクリプト活用
Linux のターミナルはテキストベースでありながら、非常にパワフルです。cd と ls はその入り口に位置し、これらを使いこなすことで、ファイルシステムの裏側に潜む情報を瞬時に掴むことができるようになります。
今回解説した内容を土台に、さらに高度なツール(tree、ncdu、find など)やテキストエディタと組み合わせて、自分だけの効率化スキームを構築してみてください。

コメント