Yanonoblog!

こつこつと

Linux操作(ファイルやコマンド探索、ヘルプの活用)

はじめに

多少実践的にLinux使えるようになりたいと思い書籍「新しいLinuxの教科書」を読み進めています。

本記事では「新しいLinuxの教科書」で学んだ内容と別途気になって調べた内容や知識も含めアウトプットしていきます。

前回の記事の続きとなっております。

ファイル操作コマンド、シンボリックリンクについてまとめてみる

今回は、Linuxにおけるファイルを探すコマンドやコマンド探索、ヘルプの活用方法についてまとめます。

findコマンド - 名前検索

findは、指定されたディレクトリから条件に基づいてファイルを検索し、アクションを実行してファイルやディレクトリを検索することができるコマンドです。

名前、サイズ、タイムスタンプ、パーミッションなど、さまざまな条件で検索できます。

オプション指定の方法が少し難しいですが使いこなせるととても便利なコマンドです。

findコマンド - 基本構文

基本的な形式は以下のようになります。

find [検索開始ディレクトリ] [検索条件] [アクション]

引数で指定した[検索開始ディレクトリ]を起点として、[検索条件]を満たすファイルを探し、[アクション]を実行します。

検索条件になにも指定しなかった場合は、すべてのファイルとディレクトリが対象となります。

findコマンド - オプション

名前で検索 -nameオプション

以下は名前検索をして表示を行っています。

ちなみにデフォルトでは-printという表示のみを行うオプションが使われています。省略可能です。

~/w/r/source ❯❯❯ ls
hukai.txt

# 同じ階層を指定して、名前検索で hukai.txtを検索
~/w/r/source ❯❯❯ find . -name hukai.txt -print(省略可)
./hukai.txt

# ワイルドカードを使って曖昧一致検索など
~/w/r/source ❯❯❯ find . -name *.txt
./hukai.txt
名前で検索 (大文字・小文字の区別なし) inameオプション

-iname オプションは、findコマンドでファイル名を大文字・小文字を区別せずに検索する際に使用されます。

"file.txt" という名前のファイルを検索する場合、次のように find コマンドを使用します。

find . -iname "file.txt"

このコマンドは、"file.txt"、"File.txt"、"FILE.TXT" など、大文字・小文字の違いを無視してファイルを検索します。

controllerのみを名前検索する例

controller.rbに該当するファイルがapp/配下以降のパスも含め列挙されています。

これは便利です。

# 実行
~/w/goenbako ❯❯❯ find . -name *controller.rb

# 結果
./app/controllers/application_controller.rb
./app/controllers/mylink_shares_controller.rb
./app/controllers/admin/letters_controller.rb
./app/controllers/admin/application_controller.rb
./app/controllers/admin/authentications_controller.rb
...略

大きさで検索 -sizeオプション

以下は-sizeオプションを使用して10MBより大きいファイルを検索する例です。

find . -size +10M

指定した条件にマッチするファイルのパスが列挙されています。

# 実行
~ ❯❯❯ find . -size +10M

# 結果
./.config/yarn/global/node_modules/typescript/lib/tsserverlibrary.js
./.config/yarn/global/node_modules/typescript/lib/tsserver.js
./Music/Music/Media.localized/Unknown Artist/Unknown Album/GMT20220819-045931_Recording.m4a
./Music/Music/Media.localized/Unknown Artist/Unknown Album/画面収録 2022-08-05 17.40.31.mov

タイムスタンプで検索 -mtimeオプション

以下は-mtimeオプションを使用して7日以内に変更されたファイルを検索する例です。

find . -mtime -7

ファイル種別で検索 -typeオプション

以下は-typeオプションを使用して読み取り権限のないファイルを検索する例です。

find . -type d

上記は-typeオプションでd(ディレクトリ)を指定していますが他にも-typeに渡す引数はあります。

以下は表と解説です。

ファイル種別 説明
b ブロックデバイス(block device)
c キャラクターデバイス(character device)
d ディレクトリ(directory)
f 通常のファイル(regular file)
l シンボリックリンク(symbolic link)
p 名前付きパイプ(named pipe, FIFO
s ソケット(socket)

複数条件で指定 -aオプション

上記で説明しているオプションを複数指定したい場合は-a(AND)オプションで複数の検索条件を同時に指定するAND検索ができます。

-pathオプションと-nameオプションをかけ合わせて"api" ディレクトリ内で、ファイル名が *controller.rbに一致するファイルを検索する例です。

# 実行
~/w/goenbako ❯❯❯ find . -path */api/* -name *controller.rb

# 結果
./app/controllers/api/letters_controller.rb
./app/controllers/api/twitter_data_controller.rb
./app/controllers/api/visits_controller.rb
./app/controllers/api/twitter_follow_list_controller.rb
./app/controllers/api/users_controller.rb
./app/controllers/api/share_images_controller.rb
./app/controllers/api/oauths_controller.rb
./app/controllers/api/searches_controller.rb
./app/controllers/api/user_sessions_controller.rb
略

locateコマンド - ファイルDB検索

ファイルやディレクトリを高速に検索するためのコマンドです。

ファイル名を含むパターンを指定することで、システム全体または特定のディレクトリを対象に検索できます。

locateコマンドは環境によってはインストールされていない

以下のコマンドなどでインストールされているか確認できます。

恐らくMacであれば入っているかと思います。

locate --version

locateコマンド - 基本構文

基本的な形式は以下のようになります。

指定した [検索パターン] に一致するファイルやディレクトリのパスを表示します。

locate [オプション] [検索パターン]

findコマンド - オプション

locate コマンドにはいくつかのオプションがあります。以下は、よく使われるオプションの一部です。

  • i:大文字・小文字を区別せずに検索します。
  • c:検索結果のファイル数を表示します。
  • l [数値]:検索結果を指定した数値に制限します。

findと比較したメリット・デメリット

メリット

  • 予め作成されたファイル名データベースを使用して検索するため、find コマンドに比べて検索速度が非常に速いです。
  • システム全体を対象に検索を行うため、特定のディレクトリに限定されずにファイルを探すことができます。

デメリット

ファイル名データベースが定期的にしか更新されないため、新しく作成されたファイルや削除されたファイルがデータベースに即時反映されないことです。

  • **locate**コマンドは予め作成されたファイル名データベースを使用して検索するため、検索速度を効率的に行うことができる
  • **find**コマンドはリアルタイムにファイルシステムをスキャンするため、特定の条件に合致するファイルやディレクトリを柔軟に探す際に適している。
  • コマンドの使い方を調べる -

    数記事に渡りコマンドの概要や使い方について解説してきましたが、コマンドは膨大な種類とさらにはオプションが存在しているため、すべて解説することは難しいです。

    使い方を知りたい場合には検索したり、ChatGPTに聞くこともできますが、Linuxの機能としてコマンドの使い方を調べる機能があります。

    -- helpオプション

    --help オプションを使うと、コマンドに関する簡単な説明や使用方法が表示されます。

    コマンドの使い方を素早く確認したい場合に便利です。

    # 実行
    ~/w/goenbako ❯❯❯ grep --help                                                                                                               
    
    # 結果
    usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]]
        [-e pattern] [-f file] [--binary-files=value] [--color=when]
        [--context[=num]] [--directories=action] [--label] [--line-buffered]
        [--null] [pattern] [file ...]

    ただ、日本語で解説がついていたりするわけでもないのである程度使い方が頭に入っていないと使いづらい気がします。

    コマンドを探す

    コマンドが省略出来る仕組み - $PATH

    実行可能なコマンドは、LinuxUnix系システムのいくつかのbinディレクトリに保管されています。

    PATH環境変数は実行ファイルやスクリプトを検索するためにシステムが参照するディレクトリの一覧を保持しています。

    コマンドを実行するとシステムはディレクトリを順番に調べ、最初に見つかった実行ファイルを実行するため、以下のディレクトリにあるコマンドはパスを入力してコマンドを指定せずに実行することができます。

    # 実行
    ~/w/goenbako ❯❯❯ echo $PATH                                                                                                                  
    
    # 結果
    /Users/yano/.yarn/bin 
    :/Users/yano/.config/yarn/global/node_modules/.bin
    :/Users/yano/.rbenv/shims
    :/Users/yano/.rbenv/bin
    :/usr/local/bin
    :/usr/local/sbin
    :/usr/bin
    :/bin
    :/usr/sbin
    :/sbin

    新しいプログラムやカスタムスクリプトをインストールする際には、これらのディレクトリのいずれかに配置することで、全てのLinuxユーザーが簡単にアクセスできるようになります。

    解説は以下です。

    PATH環境変数の各ディレクトリについて表形式で解説します。

    ディレクト 説明
    /Users/yano/.yarn/bin Yarnパッケージマネージャーでインストールされたプログラムの実行ファイルが格納されています。
    /Users/yano/.config/yarn/global/node_modules/.bin YarnでグローバルにインストールされたNode.jsモジュールの実行ファイルが格納されています。
    /Users/yano/.rbenv/shims rbenv(Rubyバージョン管理ツール)がインストールしたRubyの実行環境やGemの実行ファイルが格納されています。
    /Users/yano/.rbenv/bin rbenvの実行ファイルが格納されています。
    /usr/local/bin ローカルにインストールされたカスタムプログラムやスクリプトが格納されています。
    /usr/local/sbin ローカルにインストールされたシステム管理用のプログラムが格納されています。
    /usr/bin システム全体で利用可能な追加のコマンドが格納されています。
    /bin 基本的なシステムコマンドが格納されています。
    /usr/sbin システム管理用のコマンドが格納されています。
    /sbin システム管理用のコマンドが格納されています。

    whichコマンド - 基本構文

    指定した実行可能ファイル(コマンド)のフルパスを検索し表示するために使われます。

    環境変数PATHに設定されたディレクトリを検索し、その中に指定したコマンドが存在する場所を調べることができます。

    which [オプション] コマンド名

    以下はcatコマンドのフルパスを知りたい場合の例です。/bin配下にあることがわかります。

    # 実行
    ~/w/goenbako ❯❯❯ which cat
    
    # 結果
    /bin/cat

    続く…

    コメント

    本記事の内容は以上になります!

    書籍の続きのアウトプットも随時更新したいと思います。


    プログラミングスクールのご紹介 (卒業生より)**

    お世話になったプログラミングスクールであるRUNTEQです♪

    https://runteq.jp/r/ohtFwbjW

    ご不明な点ありましたらお気軽にコメントか、TwitterのDMでお答えします♪

    https://twitter.com/outputky

    参考