Linuxのディレクトリ構成は「/(ルート)」を起点としています。
FHSという規格に基づいてディレクトリ構成が決められています。
各ディレクトリで役割りが異なります。 ここで確認しておきましょう
ディレクトリ名 | 役割り |
---|---|
/ | ルート。Linuxディレクトリ構成の最上位にあたります |
/boot | Linuxカーネルを起動する際に必要なファイルを配置するディレクトリ |
/etc | システムの設定ファイルが配置されているディレクトリ |
/bin | システム管理者とユーザーによって利用されるコマンドを配置するディレクトリ |
/sbin | システム管理者が利用するコマンドが配置されているディレクトリ |
/usr | システムを利用するユーザーで共有するデータを配置するディレクトリ、「User Serivice and Routine」の略 |
/var | 変わりやすいデータを配置するディレクトリ、ログファイルなど |
/dev | 特殊ファイル(デバイスファイル)を配置するディレクトリ |
/tmp | システムが一時的な作業ファイルを配置するときに使用するディレクトリ。 tmpfs という疑似ファイルシステムを使用するのが一般的 |
/proc | Linuxのプロセスを操作したりするディレクトリ「Process File System」の略、システム情報のほかに、全プロセスリストも保持 |
Linuxにはフィルタコマンドというファイルから特定の条件の文字列を抽出するコマンドがあります。
そのコマンドこそがgrepです。
Windowsでもfindstrといったフィルタコマンドがありますが
Linuxのgrepはマスターすると大変便利です。
grepコマンドは以下のように実行します。
grep オプション パターン [ファイル]
「-r」オプションでディレクトリの中を再帰的に検索することができます。
例
grep -r ユーザー名 /etc/ | head -n 10
ユーザー名が含まれているファイル内容をディレクトリを再帰的に検索して10件表示する
「-i」オプションで大文字小文字を問わない検索が可能です。
「-v」オプションでマッチする行以外の行を表示します。
grepのオプションまとめ
オプション | 説明 |
---|---|
-i | 大文字と小文字を区別しない |
-v | マッチしていない文字列 |
-r | フォルダを再帰的に検索 |
-w | 完全一致 |
正規表現とはご存知かもしれませんがメタ文字と呼ぶ特殊文字列で表現する方法です。
以下が主な正規表現の一覧です
正規表現 | 意味 |
---|---|
. | 任意の1文字 |
^ | 行頭にマッチする |
$ | 行末にマッチする |
[ ~ ] | ~に指定した1字(たとえば [ 0-9 ] なら0から9) |
[^] | 「[]」 内に指定した以外の1字(たとえば a-z ならAからZ以外の文字) |
{n} | 直前のパターンをn回繰り返す |
* | 直前のパターンを0回以上繰り返す |
+ | 直前のパターンを1回以上繰り返す |
? | 直前のパターンを0か1回繰り返す |
<> | 完全マッチ |
?や+を使う際はバックスラッシュ「\」を使用してください
$ grep 'ro\{2,\}t' /etc/passwd
と検索するとrootユーザーについて検索した結果が表示されます。
以下がgrepのほかにもテキストをフィルタリングできるコマンドの一覧です
コマンド | 説明 | 例 |
---|---|---|
head | 最初のn行を表示 | head -n5 test.txt #最初の5行を表示 |
tail | 最後のn行を表示 | tail -100f /var/log/apache2/error.log #Apacheのエラーログの最後の行から100行までを出力 |
tr | 文字の変換、削除を行う。-dオプションで特定の文字列の削除ができる | echo "email@test.com" \| tr [:lower:] [:upper:] #メールアドレスを小文字から大文字に置換 |
cut | 指定した範囲を切り出して出力 | cut -d ":" -f 1,6 /etc/passwd #/etc/passwdの「:」で区切った1番目と6番目を出力する |
sort | 行単位で並べ替える | sort -r /var/log/apache2/error.log \| head -n 100 #Apacheのエラーログの最後の100行を表示する |
sedは処理する対象行の位置を示す「アドレス」を含めることができます。 また、行の処理内容を支持することもできます。
ファイル内の文字列を全行置換する
$ sed -e "s/test/line/g" /home/user/test.txt
ファイル内の行のレンジで置換する(この場合だと1行目から3行目)
$ sed '1,3 s/unix/linux/' geekfile.txt
「/etc/hosts」ファイルの1~3行目にsコマンドで行頭に「#」を入れる
$ sed -e "1,3s/^/# /" /etc/hosts
行の最初から2番目だけ文字を置き換える(1行のみ)
$ sed 's/unix/linux/2' filename.txt
最後の行だけ削除する
$ sed '$d' filename.txt
awkはパイプコマンド「|」を使うときに便利なコマンドです。 スクリプトのような複雑なコマンドを組むことができます。
例:3列目が1000以上の行について行番号(NRで表します)を先頭につけて表示する
$ awk -F":" '$3 >= 1000 { print NR, $0 }' /etc/passwd
コマンド名 | 説明 | 例 |
---|---|---|
locate | 定期的に更新されるファイル名データベースを参照し、システムに配置されるファイル名やディレクトリ名を検索する | locate *bashr* \| head -n 3 #bashrにマッチするファイルを検索し3行だけ表示する |
find | ファイルやディレクトリを検索する | $ sudo find /etc -name interfaces* #「interfaces」にマッチしたファイルを表示する |
stat | ファイル状態(ファイルサイズ、ファイルの種類、ファイルのアクセス権限など)を確認する | stat /bin/ls #lsコマンドの情報を一覧する |
ファイルを検索し削除する
find ./foo -name foo.txt --delete
ファイル権限が「読み、書き、実行(777)」のファイルを検索する
find ./foo -perm 777
ディレクトリのファイル権限をすべて「読み、書き、実行(777)」に変更する
find ./foo -type f -name bar -exec chmod 777 {} \;
Q. 「$ sudo grep 'lo?[a-z]{0,1}'」の結果として当てはまらないものはどれでしょうか?