grepの拡張正規表現

grepコマンドの-Eオプションを利用することで、拡張正規表現を用いることが出来る


  • 1回以上の繰り返し
    ‘+'で直前の文字の一回以上の繰り返しを意味する
    grep -E 'Be+r' = Ber,Beer,Beeeer …

  • 0回または1回の繰り返し
    ‘?'は直前の文字の0または1回の繰り返しを意味する
    grep -E 'Be?r' = Br or Ber

  • 特定回数の繰り返し
    {m,n}でm回以上n回以下の繰り返しを意味する
    {n}はちょうどn回の繰り返しを意味する
    {n,}はn回以上の繰り返しを意味する
    例:10桁の数字を抽出
    grep -E '[0-9]{10}'

  • 正規表現をグループ化する
    ()で囲うとその単語をグループ化出来る
    (abc|def)でabc または defにマッチする文字列を検索できる

grepやvimで使える正規表現

$ grep [オプション] <検索パタン> <ファイル名>で、ファイルからパタンに一致する内容がある行を抽出
例: /etc ディレクトリから'cron'に一致する内容を抽出

$ ls /etc | grep cron
anacrontab
cron.d
cron.daily
cron.hourly
cron.monthly
crontab
cron.weekly

正規表現まとめ

  • 任意の一文字にマッチ
    ‘.’(ドット) で任意の一文字にマッチングする
    ‘.'自体を検索したい場合は’\.‘を用いる
    例:/etc 内にある ’.conf'ファイルを検索
$ ls /etc | grep '\.conf'
adduser.conf
apg.conf
appstream.conf
brltty.conf
ca-certificates.conf
debconf.conf

  • 特定の一文字にマッチ
    []で囲った中に文字を入れると、その中いずれか一文字に一致するものを検索する。
    例えば kato と sato を同時に検索したければ
    [ks]ato になる。
    [a-z]でa,b,c…zのいずれか一文字
    [^ ]で [ ] の中に含まれない一文字

  • 行頭・行末でマッチ
    ‘^'で行頭、’$‘で行末にあるパタンを検索できる
    例:ホームディレクトリにある隠しファイル(行頭が’.‘)を抽出
$ ls ~ | grep '^\.'
.
..
.adobe
.bash_history
.bash_logout
.bashrc
.cache

grep ^$ で空行を抽出


  • 繰り返しをマッチ
    ‘*'で前の文字の任意回の繰り返しを意味する
    例:Be*r = Ber,Beer,Beeeeer,Beeeeeeeeeeeeeeeer…
    .* はあらゆる文字列にマッチする

便利なフィルタコマンド覚え書き

  • head
    標準入力の先頭数行を表示
    -n <数字> : 指定した行数を出力

  • tail
    標準入力の末尾数行を出力
    -n <数字> : 指定した行数を出力
    -f <ファイル名> : 指定したファイルにリダイレクトで追記(>>)があるとリアルタイムで表示

  • grep
    指定した検索パタンに一致する行を出力
    -n:行番号付きで結果を出力
    -i:大文字・小文字を区別せずに検索
    -v:一致しなかった行を出力
    -o:一致した部分のみを表示

  • sort
    入力をアルファベット順に並び替える
    -n:数字順に並び替える
    -k <数字>:<数字>番目のフィールドをソートに用いる
    -r:逆順にソート

  • tac
    入力を逆順に出力する

  • wc
    行数・単語数・バイト数を出力する
    -l:行数のみ出力
    -w:単語数のみ出力
    -c:バイト数のみ出力

  • uniq
    入力から、隣り合った重複する行を取り除いて出力
    -c:重複がいくつあるか数えて表示

  • cut -d <区切り文字> -f <フィールド番号> <ファイル名>
    <区切り文字>で指定した文字で入力を分割し、<フィールド番号>で指定したフィールドの内容だけを出力
    環境変数 $PATH のうち10個目を表示
$ echo $PATH | cut -d : -f 10  
/usr/local/games

  • tr<文字(置換元)> <文字(置換先)>
    入力の特定の文字を置き換える
    例 入力をすべて大文字にする$ tr a-z A-Z
    例2 アルファベットをすべて伏せ字にする
$ ls | tr A-z '*'
*******
*********
*********
*******
********.*******
******

-d <文字> : 指定した文字を削除


  • diff <比較元> <比較先>
    ファイルの差分を表示
    差分がない場合は何も表示しない

リダイレクトやパイプラインにエラーを渡す

標準入力元・標準出力先に何らかのファイルを指定するのがリダイレクト

  1. 標準出力先をfileにする > file
  2. 標準エラー出力先をfileにする 2> file
  3. 標準出力・標準エラー出力先をfileにする > file 2>&1

標準出力を別のコマンドに渡すのがパイプライン

1.標準エラー出力もパイプラインに渡す $ ls xxxx 2>&1 | less

linux ジョブとプロセス覚え書き

用語集

  • プロセス メモリ上で実行状態にあるプログラムで、カーネルから見た処理の単位
  • デーモン バックグラウンドで実行される、ターミナルに接続されていないプロセス
  • ジョブ シェルから見た処理の単位

プロセスの確認

$ psコマンドでプロセスの一覧を確認
オプション
x 現在ユーザが実行しているすべてのプロセスを表示
a すべてのユーザのプロセスを表示
f プロセスの親子関係を表示
u 詳細情報を表示
ハイフンをつけると意味が変わるらしい

$ ps xf 
 PID TTY      STAT   TIME COMMAND
 1393 tty1     S+     0:00 -bash
 1684 ?        Ss     0:00 /sbin/upstart --user
 1752 ?        S      0:00  \_ upstart-udev-bridge --daemon --user
 1762 ?        Ss     0:01  \_ dbus-daemon --fork --session --address=unix:abstr
 1774 ?        Ss     0:00  \_ /usr/lib/x86_64-linux-gnu/hud/window-stack-bridge
 1796 ?        S      0:05  \_ /usr/bin/fcitx
 ・
 ・
 ・

ジョブの操作

$ jobsコマンドで現在のジョブ一覧やジョブ番号を確認
ctrl + z で現在操作中のジョブを中断
$ fg %<ジョブ番号>ジョブをフォアグラウンド(操作可能な状態)に戻す
$ bg %<ジョブ番号>ジョブをバックグラウンド(操作はできないが処理は続行中)にする
$ <コマンド> & コマンドの末尾に&をつけると最初からバックグラウンドで実行する


ジョブ・プロセスの終了

$ kill %<ジョブ番号> ジョブを終了させる
$ kill <プロセスID> プロセスを終了させる

tmuxキーバインド

ctrl+b -> c : 新しいウィンドウを作成
ctrl+b -> n : 次のウィンドウへ移動
ctrl+b -> p : 前のウィンドウへ移動
ctrl+b -> 数 : 指定した番号のウィンドウへ移動
ctrl+b -> & : ウィンドウを閉じる
ctrl+b -> % : ウィンドウを左右分割
ctrl+b -> “ : ウィンドウを上下分割
ctrl+b -> o : 分割されたウィンドウ中を移動 矢印キーでも可
ctrl+b -> [ : 矢印キーでスクロール (qで戻る)

linuxのファイルパーミッション覚え書き

linuxが提供するファイルパーミッション機能によって、ファイルの読み書きや実行、ディレクトリへの書き込みや削除をコントロール出来る。

1.ファイルのオーナーとグループ、パーミッションを確認

コマンド$ ls -lで、ファイルのオーナー(所有者)と、ファイルが所属しているグループ、パーミッションを確認することが出来る

$ ls -l /etc/wgetrc
-rw-r--r-- 1 root root ...  

意味: ファイルのオーナー=root ファイルのグループ=root で、 オーナーはファイルの読み込み・書き込みができる
ファイルのグループと同じグループに所属するユーザはファイルの読み込みだけが出来る
その他のユーザもファイルの読み込みだけができる

自分が所属しているグループは$ groups コマンドで確認する


rwx     rwx      rwx  
オーナー  グループ  その他のユーザ

2.ディレクトリのパーミッション

コマンド $ls -ldで、ディレクトリのパーミッションを確認することが出来る

$ ls -ld ~
drwxr-xr-x 30 user-name user-name ...

ディレクトリの場合は、r,w,xの意味が少し異なる。
r: そのディレクトリに含まれるファイル一覧を取得
w: そのディレクトリの下にファイル・ディレクトリを新規作成 または削除
x: そのディレクトリをカレントディレクトリにする


3.chmodコマンドでパーミッションの変更

r(読み込み):4
w(書き込み):2
x(実行):1
とし、その合計値を用いてファイルパーミッションを変更できる。

例:あるファイルについて、オーナー・グループ・その他のすべてのユーザに読み込みと書き込みを許可したい場合は
sudo chmod 666 file-nameと実行すれば良い
例2:オーナーのみ読み込み・書き込み・実行の許可を出したい場合
sudo chomod 700 file-name