よく使うコマンド(その1)

2016年8月1日(更新: 2016年9月3日)

ls

あるディレクトリ(フォルダ)に存在するファイル・サブディレクトリの情報を表示します。ターミナルで処理を行う場合はディレクトリ内にどんなファイルがあるかを視覚的に見ることはできません。そこで、このコマンドを使って存在するファイルを確認します。

使い方

カレントディレクトリの構成が以下のようであるとします。

    .
    ├── directory1
    │   ├── directory1-1
    │   ├── directory1-2
    │   └── directory1-3
    ├── directory2
    │   ├── directory2-1
    │   ├── directory2-2
    │   └── directory2-3
    ├── test1.txt
    ├── test2.txt
    └── test3.txt

カレントディレクトリ内の状態を調べるには、次のように入力します。(ドットは省略できます)

    ls .

すると下のようにディレクトリ内のファイル名とディレクトリ名が表示されます。

結果

directory1 directory2 test1.txt test2.txt test3.txt

カレントディレクトリではなく、あるディレクトリを指定してその中身を調べたいという場合は、次のようにディレクトリのパスを書いてコマンドを実行します。

    ls directory1

結果

directory1-1 directory1-2 directory1-3

directory1には3つのサブディレクトリがあるので、上のように表示されます。

よく使うオプション

隠しフォルダを表示する -a

ファイル名が.(ドット)から始まる隠しファイルも表示する。

    ls -a

結果

. .. directory1 directory2 test1.txt test2.txt test3.txt

詳細情報も表示する -l

ファイル名以外にもファイルの詳細情報を出力する。

    ls -l

結果

    total 0
    drwxr-xr-x  5 Iden  staff  170  8  7 17:35 directory1
    drwxr-xr-x  5 Iden  staff  170  8  7 17:36 directory2
    -rw-r--r--  1 Iden  staff    0  8  7 17:37 test1.txt
    -rw-r--r--  1 Iden  staff    0  8  7 17:37 test2.txt
    -rw-r--r--  1 Iden  staff    0  8  7 17:37 test3.txt

詳細情報は左から順に、

  1. 「ファイルタイプおよびアクセス権」
  2. 「ディレクトリ内のディレクトリ数(./と../も含む)」
  3. 「所有者名」
  4. 「グループ名」
  5. 「ファイルサイズ(単位はバイトでディレクトリであれば0)」
  6. 「作成月」
  7. 「作成日」
  8. 「作成時間」
  9. 「ファイル名またはディレクトリ名」

となっています。また一番上の行の total とは、512バイトブロック単位での、ディレクトリの容量の合計です。今回の例ではファイルサイズが小さいので0となっています。

ディレクトリ名の末尾に / を付ける -f

表示された名前がファイルかディレクトリかを見分けやすくするために / をつけます。お使いのシェルの設定によっては、このオプションを使わなくても / が付けられる場合があります。

    ls -F

結果

. .. directory1/ directory2/ test1.txt test2.txt test3.txt

今回の例で使用しているディレクトリ構成では、元々アルファベット順なので違いがわかりませんが…

一行ずつ表示する -1

-1(数字の一)オプションを使うと、ファイル名やディレクトリ名の表示を一行に1つとします。

    ls -1

結果

directory1
directory2
test1.txt
test2.txt
test3.txt

grep

あるキーワードを含んでいるファイルの名前や場所、何行目にそのキーワードが登場するかなどを調べたい時に便利なコマンドが grep です。

使い方

以下のようなファイル構造であるとします。

    .
    ├── directory1
    │   ├── directory1-1
    │   │   └── test3.txt
    │   └── test1.txt
    ├── directory2
    │   └── test2.txt
    └── test.java

また、各テキストファイルの中身が次のようになっているとします。

test.java

    apples
    APPLE

test1.txt

    apple
    banana

test2.txt

    apple and banana
    lemon

test3.txt

    apples
    bananas
    lemon
    peach

カレントディレクトリとサブディレクトリの中で apple を含んでいるファイルを調べるには、次のように入力します。

    grep -r "apple" *

結果

    directory1/directory1-1/test3.txt:apple
    directory1/test1.txt:apple
    directory2/test2.txt:apple and banana
test.java:apples

このように、apple を含んでいるファイルの名前と、その行が表示されます。apples のように他の文字がくっついていても検索できます。

grep の基本文法は以下のようになります。

    grep [オプション...] [検索キーワード] [検索対象]

検索キーワードは基本的にはクオテーションで囲います。囲わなくてもいい場合もありますが、囲っておく方が見やすく安全です。

よく使うオプション

サブディレクトリの中も検索する -r

先ほどの例のように、検索対象としているディレクトリの中に存在するディレクトリ内も検索したい場合に使うオプションです。このオプションを付けない場合、ディレクトリは検索対象とはならず、カレントディレクトリ内のファイルのみを検索します。

    grep "apple" *

結果

    grep: directory1: Is a directory
    grep: directory2: Is a directory
test.java:apples

このように、「Is a directory」と表示され、ディレクトリは検索対象外となっています。

大文字・小文字を区別せずに検索する -i

通常は大文字と小文字は別の文字として認識されますが、このオプションをつけることで同じものとして検索できます。

    grep -r -i "apple" *

結果

    directory1/directory1-1/test3.txt:apple
    directory1/test1.txt:apple
    directory2/test2.txt:apple and banana
    test.java:apples
test.java:APPLE

大文字の APPLE も検出できていることが確認できます。

検索キーワードを含むファイル名だけを表示する -l

もしファイル名だけ分かればで十分であれば、-l オプションを使います。

    grep -r -l "apple" *

結果

    directory1/directory1-1/test3.txt
    directory1/test1.txt
    directory2/test2.txt
test.java

ファイル名にあるキーワードを含むファイルだけを検索対象にする –include

例えば、拡張子が .txt のファイルだけを検索対象としたい場合は次のようにします。

    grep -r --include="*.txt" "apple" *

結果

    directory1/directory1-1/test3.txt:apple
    directory1/test1.txt:apple
directory2/test2.txt:apple and banana

拡張子が .txt でないファイルは除外されていることが確認できます。

find

grep がファイル内のキーワードを検索できるのに対し、find はファイル名やファイルタイプ、ファイルサイズ、更新日時などの条件を指定した検索ができます。

使い方

以下のようなファイル構造であるとします。

    .
    ├── directory1
    │   ├── directory1-1
    │   │   └── test3.txt
    │   └── test1.txt
    ├── directory2
    │   └── test2.txt
    ├── test.java
    ├── test4.txt
    └── test5.txt

次のコマンド例は、カレントディレクトリ以下に存在するファイルで、拡張子が .txt のものを検索します。find は自動的にサブディレクトリの中も検索します。

    find . -name "*.txt"

結果

    ./directory1/directory1-1/test3.txt
    ./directory1/test1.txt
    ./directory2/test2.txt
    ./test4.txt
./test5.txt

find の基本文法は以下のようになります。

    find [検索開始ディレクトリ] [オプション...]

よく使うオプション

ファイル名に含まれるキーワードを指定して検索 -name

上記の例のように使います。

ファイルタイプを指定して検索 -type

検索対象をファイルやディレクトリに絞りたいときに便利なオプションです。ディレクトリを検索する場合は、-type と書いた後に d を、ファイルを検索対象にする場合は f を書きます。

  find . -type d

結果

    .
    ./directory1
    ./directory1/directory1-1
    ./directory2
  find . -type f

結果

    ./directory1/directory1-1/test3.txt
    ./directory1/test1.txt
    ./directory2/test2.txt
    ./test.java
    ./test4.txt
    ./test5.txt

ファイルサイズを指定して検索 -size

次のコマンドはファイルサイズが1KB以下のファイルを検索します。

  find . -size -1k

-size と書いた後にファイルサイズを指定します。ファイルサイズの前に – をつけると、その数値以下のファイルサイズのファイルを検索します。また、使える単位は

単位 意味
c バイト
k キロバイト
M メガバイト

です。大文字、小文字はこの通りでなければなりません。

ファイルサイズの前に + をつけた場合、指定したファイルサイズ以上のファイルを検索します。次の例はファイルサイズが1KB以上のファイルを検索します。

  find . -size +1k

複数の条件を組み合わせる -and と -or

拡張子が .txt で、かつファイルサイズが 10KB のファイルを検索する といった場合は -and を使います。

  find . -name "*.txt" -and -size 10k

名前が directory.txt のファイル、またはディレクトリを検索する という場合は -or を使います。

  find . -name "directory.txt" -or -type d

diff

2つのファイルの違いを行ごとに調べたいときに便利なコマンドです。例えば、次の2つのテキストファイルの違いを調べたいとします。

test1.txt

    abcdefg
    hijklmn
    opqrstu
    vwxyz

test2.txt

    abcdefg

    hijkLMN
    vwxyz

次のようにコマンドを使います。

    diff test1.txt test2.txt

結果、次のように表示されます。

結果

    2,3c2,3
    < hijklmn
    < opqrstu 
    --- 
    >
    > hijkLMN

変化のあった2,3行目が表示されています。行頭に < が書かれているのが、コマンド実行時に1つ目に指定したファイルです。区切り線の後で > が行頭に表示されているのが2つ目のファイルの中身となっています。

よく使うオプション

スペースを無視する -w

デフォルトでは、スペースの違いも文章の違いとして認識されます。スペースの違いを無視していい場合は -w をつけます。次の二つのファイルを例に動作を確認します。

test1.txt

    abcdefg
    hijklmn
    opqrstu
    vwxyz

test2.txt

    abcdefg
    hijklmn

     opqrstu
    vwx yz

次のようにコマンドを使います。

    diff -w test1.txt test2.txt

結果

    2a3
    >

スペースの違いを無視すれば、3行目に空行が追加されただけに見えますので、そのように表示されます。

空行を無視する -B

空行の違うを無視したい場合は -B オプションをつけます。次のファイルを例に動作を確認します。

test1.txt

    abcdefg
    hijklmn
    opqrstu
    vwxyz

test2.txt

    abcdefg
    hijklmn

    opqrstu
    vwxyz

次のようにコマンドを使います。

    diff -B test1.txt test2.txt

結果

何も表示されません。

test2.txt の 3行目にある空行を無視した場合、2つのファイルの違いはありません。違っているところがないため結果は何も表示されません。

コメントを残す

メールアドレスが公開されることはありません。