はじめに

Linuxを使いこなすうえで、ファイルとディレクトリの操作は最も基本的かつ重要なスキルです。GUIのファイルマネージャでは「ドラッグ&ドロップ」で済む操作も、コマンドラインでは専用のコマンドを使って実行します。

本記事では、Linuxでファイル操作を行う際に必須となる基本コマンド(ls、cd、pwd、mkdir、touch、cp、mv、rm)を体系的に解説します。各コマンドの基本的な使い方から実践的なオプションの活用、ワイルドカードによる効率的なファイル指定まで、現場で使えるスキルを身につけられる内容となっています。

本記事で紹介するコマンドは、Ubuntu 24.04 LTS、AlmaLinux 9、Debian 12など、主要なLinuxディストリビューションで共通して使用できます。

動作確認環境

本記事のコマンドは以下の環境で動作確認しています。

項目 内容
OS Ubuntu 24.04 LTS
シェル bash 5.3
カーネル Linux 6.8

WSL2やVirtualBox上のLinux環境でも同様に動作します。

現在地を知る - pwd

pwdコマンドの基本

pwd(print working directory)は、現在作業しているディレクトリの絶対パスを表示するコマンドです。ターミナルで作業中に「今どこにいるのか」を確認したいときに使用します。

1
pwd

実行結果の例:

1
/home/user

pwdコマンドのオプション

オプション 説明
-L シンボリックリンクを含むパスを表示(デフォルト)
-P シンボリックリンクを解決した物理的なパスを表示

シンボリックリンクを含むディレクトリにいる場合、-Pオプションで実際の物理パスを確認できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# シンボリックリンクのディレクトリに移動
cd /var/lock

# 論理パスを表示(シンボリックリンクのまま)
pwd -L
# 出力: /var/lock

# 物理パスを表示(シンボリックリンクを解決)
pwd -P
# 出力: /run/lock

ディレクトリを移動する - cd

cdコマンドの基本

cd(change directory)は、現在の作業ディレクトリを変更するコマンドです。ファイルシステム内を移動するために最も頻繁に使用するコマンドの一つです。

1
2
3
4
5
6
# 指定したディレクトリに移動
cd /var/log

# 確認
pwd
# 出力: /var/log

絶対パスと相対パス

ディレクトリを指定する方法には「絶対パス」と「相対パス」の2種類があります。

種類 説明
絶対パス ルートディレクトリ(/)からの完全なパス /home/user/documents
相対パス 現在のディレクトリを基準としたパス ./documents, ../backup

相対パスでは、以下の特殊な記号を使用します。

記号 意味
. 現在のディレクトリ
.. 親ディレクトリ(1つ上の階層)
~ ホームディレクトリ
- 直前にいたディレクトリ
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 現在地を確認
pwd
# 出力: /home/user

# 絶対パスで移動
cd /var/log
pwd
# 出力: /var/log

# 相対パスで親ディレクトリに移動
cd ..
pwd
# 出力: /var

# ホームディレクトリに戻る
cd ~
pwd
# 出力: /home/user

# 引数なしのcdもホームディレクトリに移動
cd
pwd
# 出力: /home/user

直前のディレクトリに戻る

cd -を使用すると、直前にいたディレクトリに戻れます。2つのディレクトリ間を行き来する際に便利です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
cd /var/log
pwd
# 出力: /var/log

cd /etc
pwd
# 出力: /etc

cd -
# 出力: /var/log
pwd
# 出力: /var/log

cdコマンドの実践的なテクニック

Tab補完を活用する

長いディレクトリ名を入力する際は、Tab補完を活用しましょう。パスの一部を入力してTabキーを押すと、候補が自動補完されます。

1
2
3
# 「doc」まで入力してTabキーを押す
cd ~/doc[Tab]
# → cd ~/documents/ に補完される

複数階層を一度に移動する

複数の階層を一度に指定できます。

1
2
3
4
5
# 3階層上に移動
cd ../../..

# 複数階層下に一度に移動
cd project/src/components

ファイル・ディレクトリを一覧表示する - ls

lsコマンドの基本

ls(list)は、ディレクトリ内のファイルやサブディレクトリを一覧表示するコマンドです。

1
2
3
4
5
# 現在のディレクトリの内容を表示
ls

# 指定したディレクトリの内容を表示
ls /var/log

実行結果の例:

1
Desktop  Documents  Downloads  Pictures  Videos

主要なオプション一覧

lsコマンドには多数のオプションがありますが、実務でよく使用するものを以下にまとめます。

オプション 説明
-l 詳細情報を表示(ロングフォーマット)
-a 隠しファイル(.で始まるファイル)も表示
-h ファイルサイズを人間が読みやすい形式で表示
-R ディレクトリを再帰的に表示
-t 更新日時順にソート
-r 逆順にソート
-S ファイルサイズ順にソート
-d ディレクトリ自体の情報を表示
-i inode番号を表示
-F ファイルタイプを示す記号を付加

詳細表示(-l オプション)

-lオプションを使用すると、ファイルの詳細情報が表示されます。

1
ls -l

実行結果の例:

1
2
3
4
5
total 32
drwxr-xr-x 2 user user 4096 Jan  5 10:30 Desktop
drwxr-xr-x 3 user user 4096 Jan  6 14:20 Documents
-rw-r--r-- 1 user user 8192 Jan  7 09:15 notes.txt
-rwxr-xr-x 1 user user  512 Jan  4 16:45 script.sh

各列の意味は以下のとおりです。

graph LR
    A["drwxr-xr-x"] --> B["ファイルタイプと<br>パーミッション"]
    C["2"] --> D["ハードリンク数"]
    E["user"] --> F["所有者"]
    G["user"] --> H["所有グループ"]
    I["4096"] --> J["ファイルサイズ<br>(バイト)"]
    K["Jan 5 10:30"] --> L["最終更新日時"]
    M["Desktop"] --> N["ファイル名"]
項目 説明
ファイルタイプ d=ディレクトリ, -=通常ファイル, l=シンボリックリンク
パーミッション 所有者/グループ/その他のrwx権限(各3文字)
ハードリンク数 そのファイルへのハードリンクの数
所有者 ファイルを所有するユーザー名
所有グループ ファイルを所有するグループ名
ファイルサイズ バイト単位のサイズ
最終更新日時 最後に変更された日時
ファイル名 ファイルまたはディレクトリの名前

隠しファイルの表示(-a オプション)

Linuxでは、ドット(.)で始まるファイルは「隠しファイル」として扱われ、通常のlsでは表示されません。-aオプションで表示できます。

1
ls -a

実行結果の例:

1
.  ..  .bashrc  .config  .profile  Desktop  Documents

.は現在のディレクトリ、..は親ディレクトリを表します。

人間が読みやすいサイズ表示(-h オプション)

-hオプションを-lと組み合わせると、ファイルサイズがK、M、Gなどの単位で表示されます。

1
ls -lh

実行結果の例:

1
2
3
4
5
total 32K
drwxr-xr-x 2 user user 4.0K Jan  5 10:30 Desktop
drwxr-xr-x 3 user user 4.0K Jan  6 14:20 Documents
-rw-r--r-- 1 user user 8.0K Jan  7 09:15 notes.txt
-rwxr-xr-x 1 user user  512 Jan  4 16:45 script.sh

よく使うオプションの組み合わせ

実務では複数のオプションを組み合わせて使用することが多いです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 隠しファイルを含む詳細表示(人間が読みやすいサイズ)
ls -lah

# 更新日時順に並べ替えて詳細表示(新しい順)
ls -lt

# 更新日時順に並べ替えて詳細表示(古い順)
ls -ltr

# ファイルサイズ順に並べ替えて詳細表示(大きい順)
ls -lS

# 再帰的にすべてのサブディレクトリも表示
ls -lR

# ファイルタイプを識別しやすく表示
ls -F
# ディレクトリには「/」、実行可能ファイルには「*」が付く

lsのエイリアス設定

頻繁に使用するオプションの組み合わせは、エイリアス(別名)を設定しておくと便利です。多くのディストリビューションでは、以下のエイリアスがデフォルトで設定されています。

1
2
3
4
# ~/.bashrcに追加するエイリアスの例
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

ディレクトリを作成する - mkdir

mkdirコマンドの基本

mkdir(make directory)は、新しいディレクトリを作成するコマンドです。

1
2
3
4
5
# 現在のディレクトリにprojectディレクトリを作成
mkdir project

# 絶対パスで指定して作成
mkdir /home/user/documents/reports

主要なオプション

オプション 説明
-p 親ディレクトリも含めて再帰的に作成
-m 作成時にパーミッションを指定
-v 作成したディレクトリを表示

親ディレクトリを含めて作成(-p オプション)

-pオプションを使用すると、中間のディレクトリが存在しない場合も含めて一度に作成できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 親ディレクトリが存在しない場合はエラー
mkdir project/src/components
# mkdir: cannot create directory 'project/src/components': No such file or directory

# -pオプションで親ディレクトリも含めて作成
mkdir -p project/src/components

# 確認
ls -R project
# project:
# src
# 
# project/src:
# components
# 
# project/src/components:

パーミッションを指定して作成(-m オプション)

ディレクトリ作成時にパーミッションを指定できます。

1
2
3
4
5
6
# 所有者のみフルアクセス(700)のディレクトリを作成
mkdir -m 700 private

# 確認
ls -ld private
# drwx------ 2 user user 4096 Jan  7 15:00 private

複数のディレクトリを一度に作成

複数のディレクトリ名を指定して一度に作成することもできます。

1
2
3
4
5
6
7
8
9
# 複数のディレクトリを一度に作成
mkdir dir1 dir2 dir3

# ブレース展開を使用した効率的な作成
mkdir -p project/{src,test,docs,build}

# 確認
ls project
# build  docs  src  test

空のファイルを作成する - touch

touchコマンドの基本

touchコマンドは、主に空のファイルを新規作成するために使用します。本来はファイルのタイムスタンプを更新するコマンドですが、指定したファイルが存在しない場合は空のファイルが作成されます。

1
2
3
4
5
6
# 空のファイルを作成
touch newfile.txt

# 確認
ls -l newfile.txt
# -rw-r--r-- 1 user user 0 Jan  7 15:30 newfile.txt

touchコマンドのオプション

オプション 説明
-a アクセス時刻のみ更新
-m 更新時刻のみ更新
-c ファイルが存在しない場合は作成しない
-d 指定した日時にタイムスタンプを設定
-r 参照ファイルと同じタイムスタンプを設定

タイムスタンプの更新

既存ファイルに対してtouchを実行すると、タイムスタンプが現在時刻に更新されます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 現在のタイムスタンプを確認
ls -l notes.txt
# -rw-r--r-- 1 user user 1024 Jan  5 10:00 notes.txt

# タイムスタンプを更新
touch notes.txt

# タイムスタンプが更新されたことを確認
ls -l notes.txt
# -rw-r--r-- 1 user user 1024 Jan  7 15:35 notes.txt

複数のファイルを一度に作成

1
2
3
4
5
6
7
8
9
# 複数の空ファイルを一度に作成
touch file1.txt file2.txt file3.txt

# ブレース展開を使用
touch test_{a,b,c}.log

# 連番ファイルを作成
touch data_{01..05}.csv
# data_01.csv, data_02.csv, data_03.csv, data_04.csv, data_05.csvが作成される

ファイル・ディレクトリをコピーする - cp

cpコマンドの基本

cp(copy)は、ファイルやディレクトリをコピーするコマンドです。

1
2
3
4
5
6
7
8
# ファイルをコピー(同じディレクトリ内)
cp original.txt copy.txt

# ファイルを別のディレクトリにコピー
cp original.txt /home/user/backup/

# ファイルを別のディレクトリに別名でコピー
cp original.txt /home/user/backup/original_backup.txt

主要なオプション

オプション 説明
-r, -R ディレクトリを再帰的にコピー
-i 上書き前に確認を求める
-f 強制的に上書き
-n 既存ファイルを上書きしない
-p パーミッション、所有者、タイムスタンプを保持
-a -pdr と同等(アーカイブモード)
-v コピーしたファイルを表示
-u コピー先より新しい場合のみコピー

ディレクトリのコピー(-r オプション)

ディレクトリをコピーする場合は、-r(recursive)オプションが必要です。

1
2
3
4
5
6
7
# ディレクトリをコピー
cp -r project project_backup

# 確認
ls -l
# drwxr-xr-x 4 user user 4096 Jan  7 16:00 project
# drwxr-xr-x 4 user user 4096 Jan  7 16:00 project_backup

上書き確認(-i オプション)

-iオプションを使用すると、コピー先にファイルが存在する場合に確認を求められます。

1
2
cp -i original.txt copy.txt
# cp: overwrite 'copy.txt'? y

属性を保持してコピー(-a オプション)

バックアップなど、ファイルの属性(パーミッション、所有者、タイムスタンプ)を保持したい場合は-aオプションを使用します。

1
2
3
4
5
# アーカイブモードでコピー(属性を保持)
cp -a /var/www/html /backup/html_backup

# 詳細表示付き
cp -av project project_backup

複数ファイルを一度にコピー

複数のファイルをディレクトリにコピーできます。

1
2
3
4
5
# 複数ファイルをディレクトリにコピー
cp file1.txt file2.txt file3.txt /home/user/backup/

# ワイルドカードを使用
cp *.txt /home/user/backup/

ファイル・ディレクトリを移動・名前変更する - mv

mvコマンドの基本

mv(move)は、ファイルやディレクトリの移動、または名前変更を行うコマンドです。

1
2
3
4
5
6
7
8
# ファイル名を変更
mv oldname.txt newname.txt

# ファイルを別のディレクトリに移動
mv document.txt /home/user/documents/

# ファイルを別のディレクトリに別名で移動
mv document.txt /home/user/documents/report.txt

主要なオプション

オプション 説明
-i 上書き前に確認を求める
-f 強制的に上書き
-n 既存ファイルを上書きしない
-v 移動したファイルを表示
-u 移動先より新しい場合のみ移動

ディレクトリの移動と名前変更

ディレクトリの移動や名前変更も同様に行えます。cpとは異なり、-rオプションは不要です。

1
2
3
4
5
# ディレクトリ名を変更
mv old_project new_project

# ディレクトリを別の場所に移動
mv project /home/user/workspace/

上書き確認(-i オプション)

1
2
3
# 同名ファイルがある場合に確認
mv -i newfile.txt /home/user/backup/
# mv: overwrite '/home/user/backup/newfile.txt'? y

複数ファイルの移動

1
2
3
4
5
# 複数ファイルをディレクトリに移動
mv file1.txt file2.txt file3.txt /home/user/archive/

# ワイルドカードを使用
mv *.log /var/log/archive/

ファイル・ディレクトリを削除する - rm

rmコマンドの基本

rm(remove)は、ファイルを削除するコマンドです。Linuxのコマンドラインでは、削除したファイルはゴミ箱に移動せず完全に削除されるため、使用には十分注意が必要です。

1
2
3
4
5
# ファイルを削除
rm unwanted.txt

# 複数ファイルを削除
rm file1.txt file2.txt file3.txt

主要なオプション

オプション 説明
-r, -R ディレクトリを再帰的に削除
-i 削除前に確認を求める
-f 強制的に削除(確認なし、エラー無視)
-v 削除したファイルを表示
-d 空のディレクトリを削除

ディレクトリの削除(-r オプション)

ディレクトリとその中身を削除するには、-rオプションを使用します。

1
2
3
4
5
6
7
8
# ディレクトリを再帰的に削除
rm -r old_project

# 確認付きで削除
rm -ri old_project
# rm: descend into directory 'old_project'? y
# rm: remove regular file 'old_project/file.txt'? y
# rm: remove directory 'old_project'? y

強制削除(-f オプション)と危険性

-fオプションは、確認なしで強制的に削除を実行します。便利ですが危険なため、使用には細心の注意が必要です。

1
2
3
4
5
# 強制削除(確認なし)
rm -f file.txt

# ディレクトリを強制的に削除
rm -rf old_directory

rmコマンドの危険なパターン

以下のコマンドは絶対に実行してはいけません。システム全体が破壊されます。

1
2
3
4
# 絶対に実行してはいけないコマンド例
rm -rf /
rm -rf /*
rm -rf ~/*

安全な運用のためのベストプラクティス:

  1. 削除前にlsで対象を確認する
  2. -iオプションで確認を有効にする
  3. 重要なデータは事前にバックアップする
  4. rm -rfを使う際は対象パスを必ず確認する
1
2
3
4
5
6
7
8
9
# 安全な削除パターン
# まず対象を確認
ls old_project

# 確認付きで削除
rm -ri old_project

# または、詳細表示で削除
rm -rv old_project

空ディレクトリの削除 - rmdir

空のディレクトリを削除する場合は、rmdirコマンドも使用できます。ディレクトリが空でない場合はエラーになるため、誤削除防止に役立ちます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 空ディレクトリを削除
rmdir empty_directory

# ディレクトリが空でない場合はエラー
rmdir non_empty_directory
# rmdir: failed to remove 'non_empty_directory': Directory not empty

# 親ディレクトリも含めて削除(-p)
rmdir -p a/b/c
# a/b/c、a/b、aを順番に削除(すべて空の場合)

ワイルドカードの活用

ワイルドカードとは

ワイルドカード(グロブパターン)は、複数のファイルやディレクトリを一括で指定するための特殊文字です。シェルがコマンド実行前にパターンを展開し、マッチするファイル名に置き換えます。

主なワイルドカード

パターン 説明 マッチ例
* 0文字以上の任意の文字列 *.txt → file.txt, notes.txt
? 任意の1文字 file?.txt → file1.txt, fileA.txt
[abc] 角括弧内の任意の1文字 file[123].txt → file1.txt, file2.txt
[a-z] 範囲内の任意の1文字 file[a-c].txt → filea.txt, fileb.txt
[!abc] 角括弧内以外の1文字 file[!12].txt → file3.txt, fileA.txt
{a,b,c} カンマ区切りの選択肢(ブレース展開) {cat,dog}.txt → cat.txt, dog.txt

ワイルドカードの実践例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# すべてのテキストファイルを一覧表示
ls *.txt

# 特定のパターンに一致するファイルをコピー
cp report_202[0-9].pdf /backup/

# 拡張子が3文字のすべてのファイルを表示
ls *.???

# file1.txt、file2.txt、file3.txtを一括コピー
cp file[1-3].txt /backup/

# .logまたは.txtファイルをすべて削除
rm *.log *.txt

# ブレース展開で複数パターンを指定
ls {*.jpg,*.png,*.gif}

ワイルドカード使用時の注意点

ワイルドカードを使用する際は、意図しないファイルにマッチしないよう注意が必要です。

1
2
3
4
5
6
# まずlsで対象を確認
ls *.tmp
# temp.tmp  cache.tmp  data.tmp

# 確認後に削除
rm *.tmp

隠しファイルとワイルドカード

*は隠しファイル(ドットで始まるファイル)にはマッチしません。隠しファイルを含める場合は明示的に指定します。

1
2
3
4
5
6
7
# 通常のファイルのみ表示
ls *

# 隠しファイルを含めるパターン
ls .[!.]* *
# または
ls -a

コマンドの組み合わせ実践例

プロジェクト構造の一括作成

新しいプロジェクトのディレクトリ構造を一括で作成する例です。

1
2
3
4
5
6
7
8
# プロジェクトディレクトリ構造を作成
mkdir -p myproject/{src,test,docs,build,config}
touch myproject/README.md
touch myproject/src/{main,util,config}.js
touch myproject/test/{main,util,config}.test.js

# 構造を確認
ls -R myproject

バックアップ作業

ファイルのバックアップを作成する実践的な例です。

1
2
3
4
5
6
7
8
9
# バックアップディレクトリを作成
mkdir -p ~/backup/$(date +%Y%m%d)

# 設定ファイルをバックアップ
cp -a ~/.bashrc ~/backup/$(date +%Y%m%d)/
cp -a ~/.profile ~/backup/$(date +%Y%m%d)/

# 確認
ls -la ~/backup/$(date +%Y%m%d)/

ログファイルの整理

古いログファイルを整理するパターンです。

1
2
3
4
5
# アーカイブディレクトリを作成
mkdir -p /var/log/archive

# 7日以上前のログファイルを移動(findコマンドとの組み合わせ)
find /var/log -name "*.log" -mtime +7 -exec mv {} /var/log/archive/ \;

コマンド一覧まとめ

本記事で解説したコマンドの一覧です。

コマンド 機能 主要オプション
pwd 現在のディレクトリを表示 -P(物理パス)
cd ディレクトリを移動 -(直前に戻る)
ls ファイル一覧を表示 -l, -a, -h, -R, -t
mkdir ディレクトリを作成 -p, -m, -v
touch 空ファイル作成/タイムスタンプ更新 -c, -d, -r
cp ファイル/ディレクトリをコピー -r, -i, -a, -v
mv ファイル/ディレクトリを移動/名前変更 -i, -f, -v
rm ファイル/ディレクトリを削除 -r, -i, -f, -v
rmdir 空ディレクトリを削除 -p

まとめ

本記事では、Linuxでのファイル操作に必須となる基本コマンド(pwd、cd、ls、mkdir、touch、cp、mv、rm)について解説しました。

これらのコマンドは、日々のLinux作業で最も頻繁に使用するものです。以下のポイントを押さえておきましょう。

  • pwdで現在地を確認し、cdでディレクトリを移動する
  • lsの各種オプションを使いこなして、ファイル情報を効率的に確認する
  • mkdir -pで複数階層のディレクトリを一度に作成できる
  • cp -rcp -aの違いを理解し、適切にファイルをコピーする
  • mvはファイルの移動と名前変更の両方に使用する
  • rmは取り消し不可能なため、削除前に必ず対象を確認する
  • ワイルドカードを活用して、複数ファイルを効率的に操作する

次のステップとして、ファイル内容の閲覧(cat、less、head、tail)やテキスト検索(grep)を学ぶと、より効率的にLinuxを操作できるようになります。

参考リンク