Linuxを使いこなすためには、ファイルやディレクトリの操作、さらにはテキスト操作を正確に理解することが不可欠です。これらの操作は、システム管理者から初心者まで、すべてのLinuxユーザーが日常的に行う基本的な作業です。このガイドでは、ファイルの作成や移動、ディレクトリの管理、そしてテキストファイルの編集や検索といった重要な操作方法を、具体例を交えながらわかりやすく解説します。これを読めば、Linuxの操作がより直感的で効率的に行えるようになるでしょう!
ITエンジニア基礎スキル 🟢 Linux の基礎知識
📌 サーバー運用の基盤となるOSの仕組みを理解する
├─【Linuxの基礎知識】Linuxとは?基本概要と仕組みをわかりやすく解説!
├─【Linuxの基礎知識】インストールからログインまでの完全マニュアル
├─【Linuxの基礎知識】カーネルの役割と起動プロセスをわかりやすく解説!
├─【Linuxの基礎知識】ファイルシステムを極める!ディレクトリ構造とその関連性を解説
├─【Linuxの基礎知識】ディレクトリとファイル操作を完全マスター!初心者向けガイド
├─【Linuxの基礎知識】初心者向け!Linux管理に役立つ基本コマンド完全ガイド
├─【Linuxの基礎知識】ユーザー管理を極める!アクセス権との連携で強固なシステム構築
├─【Linuxの基礎知識】リンクとiノードについて理解を深めよう!
├─【Linuxの基礎知識】LVMとは? LVMを理解しよう!
├─【Linuxの基礎知識】再起動時に入れ替わるデバイス名「sdX」を固定したい
├─【Linuxの基礎知識】過去事例から学ぶ!システムセキュリティの基本
├─【Linuxの基礎知識】ディスク管理の完全ガイド!初心者から実践までを徹底解説
├─【Linuxの基礎知識】ネットワーク設定とトラブルシューティングを徹底解説!
├─【Linuxの基礎知識】リソース監視ツールの使い方を徹底解説!
├─【Linuxの基礎知識】パッケージ管理の応用テクニックをマスター!
├─【Linuxの基礎知識】仮想化とコンテナの基本を学ぶ!仕組みと違いを解説!
├─【Linuxの基礎知識】バックアップとリストア!スナップショット活用も紹介!
└─RAIDとディスク管理を徹底解説!
ディレクトリの基本概念を理解しよう
ディレクトリはLinuxでファイルを整理・管理するための重要な仕組みです。Linuxのディレクトリ構造を理解することは、効率的にシステムを操作するための第一歩となります。このセクションでは、以下の基本的なディレクトリの概念について説明します。


Linuxにおいてのディレクトリとは、WindowsやMacのような「容れ物」単体を表す名称と言うよりも、「所在」や「階層」など、「位置」の概念を強く含んだ意味合いを持ちます。まずは、Unix系OS特有のディレクトリ表現方法を見ていきましょう。
ルートディレクトリ
LinuxOSのディレクトリ階層を上へ上へと辿っていけば、どこからいっても必ず「/(root)」に辿り着きます。ルートディレクトリとは、最上位「/(root)」のディレクトリを指します。
ちょっと紛らわしいですが、ディレクトリの最上層を「root(木の根っこ)」ディレクトリと呼びます。これと似た呼び方で「root(スーパーユーザー:最上位の権限保有者)」が存在します。「root(スーパーユーザー)」は、もともと、UNIX系OSでログイン時のホームディレクトリがシステムのルートディレクトリ(/)であることからこのように呼ばれるようになっています。紛らわしい・・
カレントディレクトリ
カレントディレクトリとは、現在自分のいるディレクトリ(現在位置)を指しています。「pwd」コマンドで表示されるディレクトリです。ちなみに「.(ドット)」を用いて表現することもできます。
# カレントディレクトリへ移動(現在位置から現在位置へ移動、つまりそのまま)
$ cd .
ホームディレクトリ
ホームディレクトリとは、ログインした際に、最初に移動するディレクトリを指します。通常は、ユーザー作成時にユーザーと同一名が付与されます。「~(チルダ)」を用いて表現することもできます。
# ホームディレクトリへ移動
$ cd ~
ここでいうホームディレクトリとは、「/home」の事ではありません。自身のログイン時に最初に移動するディレクトリです。
親ディレクトリ
親ディレクトリとは、特定のディレクトリから見て、一つ上(上層)にあるディレクトリを指します。「..(ドット*2)」を用いて、用いて表現することもできます。
# ひとつ上の階層(親ディレクトリ)へ移動
$ cd ..
# 二つ上の階層(親の親ディレクトリ)へ移動
$ cd ../..
サブディレクトリ
サブディレクトリとは、特定のディレクトリから見て、下位(下層)にあるディレクトリを指します。
# 下位の階層へ移動
cd <サブディレクトリ名>
相対パスと絶対パス
ディレクトリを移動する際には、「相対パス」と「絶対パス」という考え方が役に立ちます。

相対パスと絶対パスのイメージ図
「相対パス」は、現在のディレクトリを基準にしたディレクトリの位置を示します。
例えば、現在ディレクトリが「/home/geeks」の場合、「/boot」ディレクトリを相対パスで指定するには「cd ../../boot」となります。つまり、現在のディレクトリから見て「../..」というコマンドを入力して、上層へ2回遡り「/boot」を指定します。
パス | 説明 |
---|---|
./file | カレントディレクトリ(現在地)内のファイル |
../file | 親ディレクトリ内のファイル |
/home/geeks/file | ルートディレクトリから指定した絶対パスのファイル |
~/file | 現在のユーザーのホームディレクトリ内のファイル |
現在地「/home/geeks」からの「/boot」への 相対パス
cd ../../boot
一方の「絶対パス」とは、現在自分がどこにいるかに関わらず、ツリー構造のトップのディレクトリから見て、どの位置に移動するのかという、位置をすべて入力して決め打ちで移動するという方法です。
「/boot」への 絶対パス
cd /boot
絶対パスを指定する場合には、「/」によってディレクトリを下っていきます。たとえば、「/boot」のディレクトリに移動したい場合、「/boot」と入力します。住所地番のような入力方法と考えてもよいでしょう。
ディレクトリ操作の基本を学ぶ
ディレクトリ操作は、Linuxでファイルを効率的に管理するための基本的なスキルです。ディレクトリ構造を理解し、適切に操作することで、作業の効率を大幅に向上させることができます。このセクションでは、新しいディレクトリを作成して整理する方法、不要なディレクトリを安全に削除する手順、そしてディレクトリを移動してシステムを最適化する技術について学びます。
ディレクトリを作成する「mkdir」
「mkdir」コマンドは、ディレクトリを新規作成するコマンドです。
コマンドの書式
mkdir[オプション] ディレクトリ
コマンドの主なオプション
- -m(--mode):作成するディレクトリのパーミッションを設定する
- -p(--parents):必要に応じて親ディレクトリも作成する
- -v(--verbose):経過を表示する
下記コマンドを実行することにより、カレントディレクトリに「test01」ディレクトリを作成できます。作成できたことを確認するためには、前述した「ls」コマンドを実行してみましょう。「test01」と表示されているはずです。
# mkdir -m 777 test01
1 2 3 4 | [root@CentOS7 ~]# mkdir -m 777 test01 [root@CentOS7 ~]# ls -l drwxrwxrwx. 2 root root 6 4月 2 12:25 test01 [root@CentOS7 ~]# |
ディレクトリ「test01」を パーミッション「777」で作成しました。
なお、次の「-p」オプションを使うとこにより、親ディレクトリ「parent」と、そのなかに含まれるディレクトリ「test02」を同時に作成することが出来ます。
通常「mkdir」コマンドでは、存在しないディレクトリの配下へサブディレクトリを作成することは出来ません。
「-p」オプションを使用することで、必要に応じてディレクトリの作成及び、サブディレクトリの作成を同時に行うことができます。
# mkdir -p parent/test02
実際に上記コマンドをコンソール上で実行してみます。
1 2 3 4 5 6 7 8 9 10 | [root@CentOS7 ~]# mkdir -p parent/test02 [root@CentOS7 ~]# ls -lR drwxr-xr-x. 3 root root 20 4月 2 12:47 parent ./parent: 合計 0 drwxr-xr-x. 2 root root 6 4月 2 12:47 test02 ./parent/test02: 合計 0 [root@CentOS7 ~]# |
親ディレクトリ「parent」と、そのなかに含まれるディレクトリ「test02」を同時に作成しました。
ディレクトリを削除する「rmdir」
「rmdir」コマンドを用いることにより、ディレクトリを削除することができます。ただし、削除できるのは中身が空のディレクトリのみです。
コマンドの書式
rmdir[オプション] ディレクトリ
コマンドの主なオプション
- -p(--parents):必要に応じて親ディレクトリも削除する
- -v(--verbose):経過を表示する
下記コマンドを実行することにより、親ディレクトリ「parent」と、そのなかに含まれるディレクトリ「test02」を削除できます。
# rmdir -p parent/test02
※ 「rmdir」コマンドでは、削除対象のディレクトリ内が空でなければ削除はできません。
中のファイルごと削除したい場合は、rmコマンドを使用します。
1 2 3 4 5 6 7 8 9 | [root@CentOS7 ~]# ls -l 合計 0 drwxr-xr-x. 3 root root 20 4月 2 12:53 parent drwxrwxrwx. 2 root root 6 4月 2 12:52 test01 ------------------------------------------------------------ [root@CentOS7 ~]# rmdir -p parent/test02 [root@CentOS7 ~]# ls -l 合計 0 drwxrwxrwx. 2 root root 6 4月 2 12:52 test01 |
ファイルの一覧表示「ls」
「ls」コマンドはファイルを一覧表示や、ファイルの詳細情報を表示するコマンドです。
コマンドの書式
ls[オプション] ファイル or ディレクトリ
コマンドの主なオプション
- -l:リスト形式で表示する
- -o:「-l」と同じだが、グループ情報は表示しない
- -h(--human-readable):「-l」と併用したとき、人が読みやすい形式で表示する
- -c:「-l」と併用したとき、更新日の代わりに「ctime」を表示する
- -u:「-l」と併用したとき、更新日の代わりに最終アクセス日を表示する
- -i(--inode):各ファイルの前にファイルの「iノード番号」を表示する
- -s(--size):各ファイルの前にファイルのブロック数を表示する
- -t:ファイルの更新日が新しい順に表示する
- -r(--reverse):並び順を反転させる
- -a(-all):ドットファイルも表示する
- -d(--directory):ディレクトリそのものの情報を表示する
通常、Unix系のOSでは、ユーザー毎の設定ファイルは「.(ドット)」から始まる「隠しファイル」としてユーザー毎のホームディレクトリへ格納されています。Linuxでは「.(ドット)」から始まるファイル名は、「隠しファイル」となり、通常の「ls」コマンドでは一覧表示の対象になりません。
実際に下記のコマンドを実行してみます。
# ls -l
# ls -la
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | [root@CentOS7 ~]# ls -l 合計 0 👈 なにも表示されていない ------------------------------------------------------------ [root@CentOS7 ~]# ls -la dr-xr-x---. 5 root root 232 4月 1 13:05 . dr-xr-xr-x. 17 root root 224 3月 30 11:25 .. -rw-------. 1 root root 369 3月 31 14:35 .bash_history -rw-r--r--. 1 root root 18 12月 29 2013 .bash_logout -rw-r--r--. 1 root root 176 12月 29 2013 .bash_profile -rw-r--r--. 1 root root 176 12月 29 2013 .bashrc drwx------. 4 root root 31 3月 30 16:14 .cache drwxr-xr-x. 3 root root 18 3月 30 16:14 .config -rw-r--r--. 1 root root 100 12月 29 2013 .cshrc drwx------. 3 root root 25 3月 30 11:27 .dbus -rw-r--r--. 1 root root 129 12月 29 2013 .tcshrc [root@CentOS7 ~]# |
「ls -l」では見えなかった設定ファイル(隠しファイル群)が「ls -la」では表示されている。
ディレクトリを移動「cd」
「cd」コマンドは、現在ディレクトリを位置を変更するコマンドです。「cd」コマンドは非常に使用頻度の多いコマンドです。
コマンドの書式
cd ディレクトリ
現在の自分のディレクトリの場所がどこになっているのかを確認するためには「pwd」と入力します。現在のユーザーのホームディレクトリに移動したいときには、「cd」だけ、もしくは、「cd ~」(チルダ)を入力します。ちなみに現在のディレクトリを表す記号は「.(ドット)」、一つ上の階層へ上がるには「..(ドット2つ)」で表します。
# cd /home
# cd ~
下記は「cd」の実行例です。ここでは、一度「/home」へ移動後「pwd」コマンドでカレントディレクトリを確認、その後「cd ~」(チルダ)を使ってホームディレクトリへ戻ります。
1 2 3 4 5 6 7 | [root@CentOS7 ~]# cd /home [root@CentOS7 home]# pwd /home ------------------------------------------------------------ [root@CentOS7 home]# cd ~ [root@CentOS7 ~]# pwd /root |
カレントパスの表示「pwd」
「pwd」コマンドは、カレントディレクトリの名称を表示するコマンドです。一般的には前述の「cd」コマンドと組み合わせて使用されます。
コマンドの書式
pwd[オプション]
コマンドの主なオプション
- -P:物理的なディレクトリ名を表示する
- -L:論理的なディレクトリ名を表示する(デフォルト)
下記は「pwd」の実行例です。
# pwd
1 2 3 | [root@CentOS7 ~]# pwd /root [root@CentOS7 ~]# |
カレントディレクトリのパスが表示されまています。
ディレクトリを行き来する「pushd, popd」
「pushd, popd」コマンドは、「ディレクトリスタック」を使い、複数のディレクトリの行き来することが出来るコマンドです。
通常、ディレクトリを行き来する際には「cd」コマンドを用いますが、ディレクトリ階層が複雑な箇所を行ったり来たりする場合、パスを打つ手間が大きくなってしまいます。その場合、パスを「ディレクトリスタック」に積み、ショートカットのようにディレクトリを簡単に行き来できる方法があります。
- pushd
「ディレクトリスタック」へディレクトリパスを保存するコマンドです。さらにカレントディレクトリをそのディレクトリに変更します。 - popd
「ディレクトリスタック」からディレクトリパスを取り出すコマンドです。カレントディレクトリを最後に保存した場所に変更し、ディレクトリスタックから登録を削除します。

コマンドの書式
pushd[オプション] または ディレクトリ
popd [オプション]
pushdコマンドの主なオプション
- +番号:「+3」でディレクトリスタックの左から4番目が先頭になるように保存内容をローテートして、先頭になったディレクトリをカレントディレクトリに変更する
- -番号:同様に右から数えてローテート後、カレントディレクトリを変更する
- -n:スタックの操作のみを実行する。カレントディレクトリは変更しない
popdコマンドの主なオプション
- +番号:「+3」でディレクトリスタックの左から4番目を削除しその場所をカレントディレクトリとする
- -番号:右から数えて削除後、その場所に変更する
- -n:スタックからの削除のみを実行、カレントディレクトリは変更しない
前提条件として、「/root/scrpts/bin」と「/root/scripts/log」というディレクトリを頻繁に行き来するケースを想定します。そして、カレントディレクトリは「/root/scripts/bin」とします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | [root@CentOS7 bin]# pwd 👈 カレントディレクトリ確認 /root/scripts/bin ------------------------------------------------------------ [root@CentOS7 bin]# pushd ../log 👈 「ディレクトリスタック」へ登録 ~/scripts/log ~/scripts/bin [root@CentOS7 log]# pwd /root/scripts/log ------------------------------------------------------------ [root@CentOS7 log]# pushd 👈 登録と同時に「/root/scripts/log」へ移動(以降:行き来します) ~/scripts/bin ~/scripts/log [root@CentOS7 bin]# pwd /root/scripts/bin ------------------------------------------------------------ [root@CentOS7 bin]# popd 👈 「ディレクトリスタック」からパス情報を削除 ~/scripts/log [root@CentOS7 log]# pwd /root/scripts/log ------------------------------------------------------------ [root@CentOS7 log]# pushd -bash: pushd: 他のディレクトリはありません [root@CentOS7 log]# |
pushd +[n]で「ディレクトリスタック」内の登録パス情報をローテートすることが出来ます。交互の飛び先を変更する場合に操作します。
ディレクトリの操作コマンドは、「ls」コマンド、「cd」コマンドなどと組み合わせで使用することが基本になります。コマンド操作によってディレクトリなどの移動ができれば、まずはCUIでのディレクトリ操作の第一歩といえるでしょう。
ファイル操作の基本を学ぶ
Linuxサーバーを扱う場合、GUI操作を期待する現場はありません。サーバーの構築や設定、ファイルの取り扱いには、100%CUI操作が原則となります。ファイルの操作には、作成、削除、移動、コピーなどが含まれます。Linuxコマンドを活用することで効率的に作業を行えます。
ファイルの新規作成「touch」
touchコマンドはファイルの修整日付を現在の時刻に設定し直すものですが、touchコマンドに指定したファイルが存在しない場合には、サイズが0パイトのファイルが新規に作成されます。この特性を使い「touch」コマンドで手っ取り早く新規にファイルを作成することが出来ます。
コマンドの書式
touch[オプション]ファイル1 ファイル2……
コマンドの主なオプション
- -d(--date):文字列で指定した日時に変更する
- -r(--reference):指定したファイルのタイムスタンプと同じ日時にする
- -m:最終更新日時のみ変更する
下記はtouchの実行例です。「test-file」が作成されています。
$ touch test-file
※「$ : > test_file 」👈 と同じ意味です。
1 2 3 | [root@CentOS7 ~]# touch test-file [root@CentOS7 ~]# ls -l -rw-r--r--. 1 root root 0 4月 1 14:43 test-file |
ファイルの削除「rm」
rmコマンドは「remove」の略で、削除コマンドです。ファイルやディレクトリを削除します。ファイルやディレクトリは複数指定できます。
コマンドの書式
rm[オプション]ファイル(※1)
rm -r ディレクトリ(※2)
(※1)指定されたファイルを削除します。
(※2)指定されたディレクトリを保存されているファイルこと削除します。
コマンドの主なオプション
- -f(--force):存在しないファイルを無視する
- -i(--interactive):削除前に確認する
- -r(--recursive):ディレクトリを再帰的に削除する
下記は「rm」の実行例です。
$ rm -i test-file.old
思わぬトラブルを避けるために「-i」オプションを付けた状態で削除を行いましょう。
1 2 3 4 5 6 7 8 | [root@CentOS7 ~]# ls -l -rw-r--r--. 1 root root 0 4月 1 14:43 test-file -rw-r--r--. 1 root root 0 4月 1 15:03 test-file.old ------------------------------------------------------------ [root@CentOS7 ~]# rm -i test-file.old rm: 通常の空ファイル `test-file.old' を削除しますか? y [root@CentOS7 ~]# ls -l -rw-r--r--. 1 root root 0 4月 1 14:43 test-file |
「test-file.old」が削除されています。
※ 「rm ./*」と指定すると、カレントディレクトリのファイルが全て削除されます。
万が一「rm /*」を実行してしまうと、「/(root)」配下すべてが対象になってしまうので注意してください!「.(ドット)」の有無で、まったく異なるパスとなります。
ファイルのコピー「cp」
「cp」コマンドは、コピーを行うコマンドです。GUI操作でのコピー&ペーストを行う場合には、まずコピー元のファイルを右クリックでコピー、あるいは「Ctrl + C」を押下後、再度右クリックでペースト、もしくは「Ctrl+V」を押下します。
CUI操作では「cp」コマンドを使用して、下記の様に記述します。
コマンドの書式
cp[オプション][コピー元][コピー先]
コマンドの主なオプション
- -r(--recursive):再帰的にサブディレクトリも含めてコピーする
- -t(--target-directory):「-t」で指定したディレクトリにコピーする
下記は「cp」の実行例です。「test-file」を「test-file.old」としてコピーします。
$ cp test-file test-file.old
1 2 3 4 | [root@CentOS7 ~]# cp test-file test-file.old [root@CentOS7 ~]# ls -l -rw-r--r--. 1 root root 0 4月 1 14:43 test-file -rw-r--r--. 1 root root 0 4月 1 15:03 test-file.old |
「test-file」が「test-file.old」としてコピーされています。
同じファイル名でコピー&ペーストするケースは考えにくいので、ペーストする際には後に「_copy」や「_2」、「_old」など、わかりやすい名前をつけると便利でしょう。
ファイル名の変更「mv」
「mv」は、ファイルやディレクトリを移動したり、リネームしたりするコマンドです。異動先にファイル名を指定した場合は、「ファイルからファイルへの移動=リネーム」となります。既存のファイルを指定すると「上書き」となります。
コマンドの書式
mv[オプション][移動元][移動先]
ファイル1で指定されたファイルの名前を、ファイル2で指定された名前に変更します。
コマンドの主なオプション
- -f(--force):移動先に同名ファイルがあっても確認せずに上書きする
- -i(--interactive):上書き前に確認する
- -n(--no-clobber):既存のファイルを上書きしない
- -u(--update):移動先ファイルのタイムスタンプが同じ or 新しい場合は移動しない
- -t(--target-directory):「-t」で指定したディレクトリに移動する
- -v(--verbose):経過を表示する
下記は「mv」の実行例です。
$ mv test-file test-file.old
「cp」コマンドとは異なり、変更元のファイル「test-file」は削除されます。正しくは、変更名「test-file.old」で移動した。つまり変更名で上書きされます。
1 2 3 4 | [root@CentOS7 ~]# mv test-file test-file.old [root@CentOS7 ~]# ls -l -rw-r--r--. 1 root root 0 4月 1 14:43 test-file -rw-r--r--. 1 root root 0 4月 1 15:03 test-file.old |
ファイルの閲覧「cat」
catコマンドは、本来ファイルを連結するためのコマンドですが、ファイルの内容を表示する際にもよく使われます。catコマンドで表示されたファイルは、上書きすることが出来ません。不必要な変更を避けるためにファイルの参照はcatコマンドで行うのが良いでしょう。
コマンドの書式
cat[オプション] ファイル1 ファイル2…
コマンドの主なオプション
- -n(--number):行番号を付け加える
- -b(--number-nonblank):行番号を付け加える。空白行には番号を付けない
- -A(--show-all):全ての非表示文字を表示する
下記は、一度「echo」コマンドにより"abcdefg"文字列を「test-file1」へ書き込み「cat」コマンドでコンソールへ表示します。
$ cat test-file
1 2 3 | [root@CentOS7 ~]# echo "abcdefg" > test-file1 [root@CentOS7 ~]# cat test-file1 abcdefg |
ファイルの中身が表示されています。
下記は「cat」の本来の使いかたである「ファイル連結」です。「test-file2」を新たに作成して、「test-file1」と「test-file2」中身を連結します。
$ cat test-file1 test-file2
1 2 3 4 | [root@CentOS7 ~]# echo "hijklmn" > test-file2 [root@CentOS7 ~]# cat test-file1 test-file2 abcdefg 👈 「test-file1」の中身 hijklmn 👈 「test-file2」の中身 |
ファイルの検索「find」
「find」は、場所を指定してファイルを検索するコマンドです。ファイル名だけではなく、ファイルの種類や更新日時など、細かい条件を指定して検索することができます。
コマンドの書式
find[オプション][検索パス] [検索式]
findはファイルを検索するコマンドですが、「検索式」を使うことで複数の条件を組み合わせた検索が出来ます。
コマンドの主なオプション
- -P:シンボリックリンクをたどらない
- -L:全てのシンボリックリンクをたどる
- -H:コマンドラインで指定したシンボリックリンクをたどる
検索式
- -group:指定したグループ名のファイルを検索
- -name:指定した文字列のファイル名を検索
- -type:指定した「ファイル・タイプ」を検索
「d」:ディレクトリ、「f」:通常ファイル、「l」:シンボリックリンク - -user:指定したユーザー名のファイルを検索
実行ユーザー「root」のホームディレクトリ内の「-type f(ファイル)」を表示します。
$ find ./ -type f
ホームディレクトリ下でファイルだけを検索する場合は、「find ~/ -type f」と指定します。「~/」は実行ユーザーのカレントディレクトリを表します。
※ 「find」コマンドでの検索では「.(ドット)」から始まる隠しファイルも検索の対象となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [root@CentOS7 ~]# find ~/ -type f /root/.bash_logout /root/.bash_profile /root/.bashrc /root/.cshrc /root/.tcshrc /root/.cache/dconf/user /root/.cache/abrt/lastnotification /root/.dbus/session-bus/b1352911570a492789bdd494f14cafdf-9 /root/.bash_history /root/test.txt /root/test.sh /root/CentOS-7-x86_64-DVD-1810.iso /root/testLink [root@CentOS7 ~]# |
ファイル内容をソートする「sort」
ファイルに記述された内容をソートするには「sort」コマンドを利用します。
コマンドの書式
sort[オプション][ファイル1 ファイル2...]
コマンドの主なオプション
- -f(--ignore-case):並び替え時に大文字/小文字を区別しない
- -V(--version-sort):バージョンを数字順で並べ替える
- -n(--numeric-sort):文字列を数値と見なして並べ替える
- -h(--human-numeric-sort):人が読むことのできる形式の数値で並べ替える
- -g(--general-numeric-sort):一般的な数値として並べ替える
- -M(--month-sort):月名で並べ替える
- -b(--ignore-leading-blank):先頭の空白を無視して並べ替える
- -i(--ignore-nonprinting):表示可能な文字だけを対象に並べ替える
- -r(--reverse):逆順で並べ替える
カレントディレクトリに下記の数字が記述された「test01.txt」が作成されているとします。
test01.txt
1
5
75
50
10
この内容を、ソートしてみましょう。
$ sort test01.txt
$ sort -n test01.txt
$ sort -r test01.txt
$ sort -nr test01.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | [root@CentOS7 ~]# cat << EOF > test01.txt 👈 書き込み 1 5 75 50 10 EOF ---------------------------------------------------------------------- [root@CentOS7 ~]# sort test01.txt 👈 オプションなしだとデフォルトで昇順ソート 1 10 5 50 75 ---------------------------------------------------------------------- [root@CentOS7 ~]# sort -n test01.txt 👈 数値として並べ替え 1 5 10 50 75 ---------------------------------------------------------------------- [root@CentOS7 ~]# sort -r test01.txt 👈 降順で並べ替え 75 50 5 10 1 ---------------------------------------------------------------------- [root@CentOS7 ~]# sort -nr test01.txt 👈 オプションを組み合わせ 75 50 10 5 1 |
「sort」コマンドは、ファイル内容を文字列として認識している為「10」と「5」では「10」のほうが先に表示されます。
「5」と「10」を比較した場合、「sort」コマンドは、一見「数値」に見える値を「文字列」として判断します。「10」の1文字目を取って「1」と認識し、その結果「5」と「1」では「1」の方がい小さいと判断するのです。
オプション(-nr等)を組み合わせれば「数値」として「降順」ソートも可能となります。
※ コマンドオプションを付与することで、降順ソートで表示させたり数値としてソートさせることが可能になります。
ファイル内の重複行を削除する「uniq」
ファイルに記述された内容から重複した行を削除するには、「uniq」コマンドを使用します。
コマンドの書式
uniq[オプション]入力ファイル[出力ファイル]
コマンドの主なオプション
- -c(--count):各行の前に出現回数を出力する
- -u(--unique):重複していない行だけを出力する
- -d(--repeated):重複した行だけを出力する
- -D(--all-repeated):重複する行を全て出力する
- -i(--ignore-case):比較時に大文字と小文字の違いを無視する
カレントディレクトリに昇順ソートされた「test02.txt」が作成されているとします。
※ uniqコマンドは隣り合った行しか比較しないため、予めsortコマンドでソートしておくことが前提となります。
test02.txt
1111
1234
1234
5678
ここから、重複行を削除してみましょう。
$ uniq test02.txt
$ uniq -c test02.txt
$ uniq -d test02.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | [root@CentOS7 ~]# cat << EOF > test02.txt 👈 書き込み 1111 1234 1234 5678 EOF ---------------------------------------------------------------------- [root@CentOS7 ~]# uniq test02.txt 👈 重複していた「1234」が削除 1111 1234 5678 ---------------------------------------------------------------------- [root@CentOS7 ~]# uniq -c test02.txt 👈 重複した行数を表示 1 1111 2 1234 1 5678 ---------------------------------------------------------------------- [root@CentOS7 ~]# uniq -d test02.txt 👈 重複した内容のみ表示 1234 |
重複していた「1234」が削除され、一つにまとまりました。オプションのなかには、重複した行数を表示したり、重複した内容のみを表示させたりする機能もあります。
文字を置換する「tr」
ファイルに記述された内容をある文字へ置換するには、「tr」コマンドを使用します。
コマンドの書式[
tr[オプション]文字列1[文字列2]
コマンドの主なオプション
- -d(--delete):[文字列1]に含まれる文字があったら削除する
- -s(--squeeze-repeats):[文字列1]に含まれる文字が連続していたらまとめる
- -t(--truncate-set1):[文字列1]を[文字列2]の長さに切り詰めて処理を行う
- -c(--complement):[文字列1]に含まれない文字全てを対象とする
カレントディレクトリに「test03.txt」が作成されているとします。
test03.txt
AAABBBCCDD
ここから、「A」を「Z」に置換してみます。
$ tr A Z < test03.txt
$ tr -d B < test03.txt
1 2 3 4 5 6 7 8 9 | [root@CentOS7 ~]# cat << EOF > test03.txt 👈 書き込み AAABBBCCDD EOF ---------------------------------------------------------------------- [root@CentOS7 ~]# tr A Z < test03.txt 👈 「A」を「Z」に置換 ZZZBBBCCDD ---------------------------------------------------------------------- [root@CentOS7 ~]# tr -d B < test03.txt 👈 指定した文字列を削除 AAACCDD |
特定の文字列を削除したい場合は、「-d」オプションを付与することで可能となります。
文字列を検索する「grep」
ファイルの記述のなかにある特定の文字列が含まれているかどうかを判別し、抽出するには「grep」コマンドを使用します。
コマンドの書式[
grep[オプション] 検索パターン ファイル
コマンドの主なオプション
- -e(--regexp):検索パターンを指定する
- -G(--basic-regexp):検索に基本正規表現を使う
- -E (--extended-regexp):検索に拡張正規表現を使う
- -P (--perl-regexp):検索にPerl正規表現を使う
- -f (--file):ファイルに書かれているパターンを検索する
- -i (--ignore-case):大文字と小文字を区別しない
- -w (--word-regexp):単語全体でパターンと一致するものを検索する
- -x (--line-regexp):行全体がパターンと一致するものを検索する
- -v (--invert-match):パターンに一致しない行を表示する
- -s (--no-messages):エラーメッセージを表示しない
- -q(--quiet):結果を表示しない
- -L(--files-without-match):一致するものが含まれていないファイル名のみ表示
- -I(--files-with-matches):一致するものが含まれているファイル名のみ表示
- -c(--count):一致するものが含まれている回数のみ表示
- -n(--line-number):行番号を併せて表示する
- -H(--with-filename):ファイル名を併せて表示する
- -h(--no-filename):ファイル名を表示しない
workディレクトリのなかに「test04.txt」と「test05.txt」の2ファイルがあるとします。
/work/test04.txt
Orange
/work/test05.txt
Grape
workディレクトリの中から、「ra」という文字列が含まれているファイルを抽出するには、下記のようにコマンドを実行します。
※「work/*」は、work配下のファイルをすべて対象として検索を実行します。
$ grep ra work/*
$ grep -i g work/*
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [root@CentOS7 ~]# cat << EOF > work/test04.txt 👈 書き込み Orange Orange EOF ---------------------------------------------------------------------- [root@CentOS7 ~]# cat << EOF > work/test05.txt 👈 書き込み Grape Grape EOF ---------------------------------------------------------------------- [root@CentOS7 ~]# grep ra work/* 👈 「ra」という文字列が含まれているファイルを抽出 work/test04.txt:Orange work/test05.txt:Grape ---------------------------------------------------------------------- [root@CentOS7 ~]# grep -i g work/* 👈 小文字を区別せずに検索 work/test04.txt:Orange work/test05.txt:Grape |
ちょっと分かりずらい為、実機で実行したイメージを下記に張り付けておきます。
※ 最近のLinuxでは、該当箇所を強調表示してくれます!

テキストをページ単位で表示する「more , less」
ファイルの内容をページ単位で表示するには、moreコマンド、もしくはlessコマンドを用います。moreとlessはほぼ同じ機能ですが、moreは末尾まで参照すると自動的にプロンプトへ戻るのがlessとの違いです。
しかしながら、両者とも使用頻度はそれほど高くはありません。何故なら、通常、ファイルの中身を参照する場合は「cat」コマンドを使うことが一般的だからです。複数ページにわたる長文以外は、「cat」コマンドで事足りてしまうことが多いのです。
一応、知識として頭の片隅に置いておく程度で良いと思います。
コマンドの書式[
more[オプション]ファイル名
less [オプション] ファイル名
moreコマンドの主なオプション
- +数値:数値で指定した行から表示する
- +/文字列:指定した文字列を検索して、見つけた行の2行上から表示する
- -s:連続した空行を1行にする
- -l:改ページを無視する
- -u:下線の処理を行わない
- -数値:画面の行数を指定する
- -f:画面での行数ではなく、データの行数を表示する
- -d:無効なキーが入力された場合に、ヘルプを表示する
lessコマンドの主なオプション
- +行数,-行数:指定した行から表示する
- +/文字列:指定文字列を検索し、見つけた行から表示する(正規表現可)
- -p文字列(--pattern):指定文字列を検索し、見つけた行から表示する(正規表現可)
類似コマンドとしてはcatコマンド、vimコマンドなどがありますが、それぞれ用途で使い分けると良いでしょう。
「cat」:一気に最後まで表示させます。ファイルを機械的に連結させる、コマンドライン引数にファイルの中身を機械的に渡す等の時に使います。
「vim」:ファイル編集をするときに使用します。参照するだけなら、「cat」コマンドを使用しましょう。
この記事を読んだら、次は 「【Linuxの基礎知識】初心者向け!Linux管理に役立つ基本コマンド完全ガイド」 を読むのがおすすめです!