入社1week目でわからなかったポイントを調べたもの。個人的メモ。
findコマンド
引用元:https://www.atmarkit.co.jp/ait/articles/1607/12/news021.html
ファイルを名前で検索する
出力内容を変更する(lsコマンドを実行する)
基本文法
find [オプション] [検索パス] [検索式]
「find」だけを実行するとカレントディレクトリ以下の全ファイルが表示される。
「find /etc」では「/etc」ディレクトリにある全てのファイルが表示される。
検索したいファイル名を指定
検索したいファイル名を指定する場合は、**「-name」オプション
**を使う。
(ディレクトリも検索対象。)
ホームディレクトリ上**~
で、ファイル名に「bash」を含むファイルを検索する場合は以下。
ワイルドカード*
をbashの前後に付けると、●●_bash.js や .bash●●といったファイルも検索対象に含むことができる。
ワイルドカードを指定しない場合はダブルクオート"
**をつけなくてもOK。
ワイルドカードを使った場合
find ~ -name "*bash*"
ワイルドカードを使わずファイル名決め打ちの場合
find ~ -name .bash_profile
※ この場合、ファイル名は完全一致にする必要あり。
例えば .bash_profile の . を入れ忘れていたり、拡張子がなかったりすると検索に引っかからない。
オプション
ディレクトリは含まず、ファイルだけを検索する
-type f
オプション
例)hogeディレクトリ内の「profile.txt」を検索したい場合
find /hoge -name profile.txt -type f
ディレクトリを検索対象としたい場合は
-type d
オプション
シンボリックリンクを対象とする場合は
**-type l
**オプション
"Operation not permitted" のエラーメッセージを表示させないようにする
findを実行したところ、こんな感じの実行結果がたくさん出て実行結果が非常にわかりにくい。
sudo find ~ で実行しても同じだった。
find: /Users/ユーザー名/Library/Caches/CloudKit/com.apple.Safari: Operation not permitted
これは、検索場所に「/」を指定すると、権限のない場所も検索されて大量のエラーメッセージが表示されるので、「2>/dev/null
」でエラーメッセージを“捨てる”(ヌルデバイスにリダイレクト)とよいでしょう。とのこと。
2>/dev/null
でエラーメッセージを捨てる例
find /hoge -name profile.txt -type f 2>/dev/null
これで、権限のない場所の検索エラーメッセージは破棄され、純粋な検索結果のみが表示される。
出力内容を変更する(lsコマンドを実行する)
検索式の他に「アクション」を指定して実行できる。
-print
アクション(デフォルト)
ファイル名を表示する
-ls
アクション
ファイルの詳しい情報が表示される。
「ls -dils」コマンド相当で表示される情報で、ファイルサイズなどが含まれるためにかなり長くなる。
例)
find ~ -name .bash_profile -type f -ls 2>/dev/null
実行結果
12902229406 8 -rw-r--r-- 1 ユーザー名 staff 629 Nov 24 17:56 /Users/ユーザー名/.bash_profile
「ls -dF」くらいの情報量でよい場合は「-exec」アクションを使い、「-exec ls -dF {} ;」のように指定します。
..とのこと。詳しくは引用元参照。
grepコマンド
引用元:
https://www.atmarkit.co.jp/ait/articles/1604/07/news018.html
https://eng-entrance.com/linux-command-grep
実行結果から必要な箇所だけを抽出する
単語単位で検索する
前後の行も検索する
行番号付きで表示する
基本文法
grep [オプション] 検索パターン ファイル
もしくは
コマンド | grep [オプション] 検索パターン
※[ ]は省略可能な引数
例) 「work」ディレクトリ内のファイルすべての中から「a」という文字を検索する場合
grep a work/*
grepでand(なおかつ)検索する
grep 検索文字列 ファイル名 | grep 検索文字列2
行番号付きで表示する
grepコマンドの検索結果に行番号を付けて表示したい場合は**-nオプション
**を使用する。
grep -n 検索文字列 テキストファイル
例)「~/.ssh/hoge.txt」ファイルから「EA」という文字列を含む文字列を検索し、存在したらその行番号を表示する
grep -n EA ~/.ssh/hoge.txt
実行結果
2:asfasdfasdasdfasEAasdasdfasf