タグ別アーカイブ: linux

grepコマンドについて

タグ: , | 投稿日: 投稿者:

こんにちは。kikuです。

今日はLinuxのgrepコマンドについて書こうと思います。
何かを調べてる時はほぼ使いますよね。grep。

grep "hoge" aaa.txt

これは基本的な使い方です。
これでaaa.txtから”hoge”の文字列を探して引っかかった行を出力していきます。
 

grep -e "hoge" -e "fuga" aaa.txt

or的な使い方
これで”hoge”or”fuga”を探します。
 

grep -i "hoge" aaa.txt

大文字・小文字を区別しない使い方
これで大文字・小文字を区別せず”hoge”を探します。
 

grep -v "hoge" aaa.txt

not的な使い方
これで”hoge”が含まれていない行を探します。
 

grep "hoge" -A 3 aaa.txt

これで”hoge”が含まれていた行と次の3行を探します。
これはちょっと今までのとは違いますね。
 

grep "hoge" -B 3 aaa.txt

これで”hoge”が含まれていた行と前の3行を探します。
 

grep "hoge" -C 3 aaa.txt
grep -3 "hoge" aaa.txt

これで”hoge”が含まれていた行と前後の3行を探します。
 

grep -c "hoge" aaa.txt

これで”hoge”が含まれていた行の数を表示します。
 

grep -n "hoge" aaa.txt

これで行番号を先頭に付けます。
 

ls -l | grep "hoge"

こんな感じにすればコマンドの出力結果から”hoge”が含まれている行のみを表示します。
 
 
まとめ

grep -nie 'aaa' -e 'bbb' -B 2 aaa.txt | grep 'ccc'

これで行番号を先頭に付けて”aaa”と”bbb”を大文字・小文字を区別しないで探して、その行とその前の2行の中から”ccc”が含まれている行のみを表示します。
 
とても使えますね!エディタの検索機能を使っても探し出せないこともこれなら可能かもしれません!!


今更ながらの、権限変更について考える

タグ: | 投稿日: 投稿者:

先日、他の人が権限を変更するところを見る機会があったのですが、お恥ずかしながらそこで初めて数字以外で権限を設定する方法を知りました。

そこで、chmodについてまとめてみたいと思います。

chmod

ファイルやフォルダの権限を変更するコマンドです。当然、どのファイル・フォルダをどのように変更するかという指定が必要になります。

権限変更の指定の前に、権限について説明します。
まず、権限は対象となるユーザと許可するアクションの2つで成り立ってます。
対象となるユーザは、所有者、所有者グループ、その他の3種類となっています。
一方、許可するアクションも読み込み、書き込み、実行の3種類に分かれています。

chmodでは、これを0~7の数字を使い、3桁で表現します。
1桁目は、所有者の
2桁目は、所有者グループの
3桁目は、その他の、許可されているアクションを記しています。

では、0~7でどうやって許可されているアクションを示しているのでしょう。
肝となるのは、対象となるユーザは排他的であるのに対し、許可するアクションは重複するということです。
対象ユーザは、所有者であれば、所有者グループではなく、またその他であることはありません。
しかし、許可するアクションは、読み込み、書き込み、実行、それぞれが独立しており、
読み込み、実行が許可されているが、書き込みが許可されていないということもありえます。
実は、0~7の数字はそのままで考えるのではなく、2進法にして考えます。
許可・不許可を0と1で、各項目(読み込み、書き込み、実行)を桁に置き換えているのです。

例:

読み込み(r) 書き込み(w)  実行(x) 
許可 不許可 許可
1 0 1

上記のような場合、2進法で101に置き換えられ、さらに10進法に変えて、5と表現されます。
全て許可する場合は、111になるので、7になるということです。

これが、ユーザの種類毎に繰り返され、3桁の数字となります。
777の場合、全てのユーザに全ての権限があるということです。
700の場合、所有者のみ全てのアクセスが可能だということになります。

 

chmod 777 [ファイル・フォルダ名]

とすれば対象のファイル・フォルダに全てのユーザの全てのアクセスを許可することになります。

数字で権限を指定する以外にも、対象のユーザを指定して権限を変更できます。
その場合、対象ユーザや権限の種類などをちゃんと指定する必要があります。

対象ユーザ 指定方法
所有者 u
所有者グループ g
その他 o
すべて a

 

権限の種類 指定方法
読み込み r
書き込み w
実行 x

 

変更の種類 指定方法
指定した権限の追加 +
指定した権限の削除
指定した権限に変更 =

 

個人的には、最初の設定では、数字の方が指定しやすく、
既に使用中のファイルの権限を変える必要がある場合は、文字での指定が安全で良いのかなと思います。

 

権限の対応表

読み込み(r) 書き込み(w)  実行(x)    10進数
0 0 0   0
0 0 1   1
0 1 0   2
0 1 1   3
1 0 0   4
1 0 1   5
1 1 0   6
1 1 1   7

 


[pgrep][pkill]と言うコマンド・・・

タグ: | 投稿日: 投稿者:

どうもshiraneです。

今まで知りませんでしたが使って見たら、かなり便利なコマンドでした・・・・

◆何が便利なのか?
今まで私は、実行中プロセスの確認やkillする時に、
以下のような流れで行ってました。

                $ ps aux | grep hoge

                プロセスIDを確認する。


                $ kill プロセスID

                IDを指定してプロセスをkill!

また、複数動いている[hoge]というプロセスを纏めてkillする時は、
以下のようにしてました。

                $ ps aux | grep hoge

                hogeの一覧を表示し確認する。

                $ kill `ps aux | grep hoge | awk '{print $2;}'`

                hogeと名前の付いたプロセスを纏めてkill!

◆pgrepの場合

                $ pgrep hoge
                11111           
                22222           
                33333           

                プロセス名[hoge]にマッチするプロセスのIDが表示されます。

                $ pgrep -l hoge
                11111 hoge
                22222 hoge
                33333 hoge

                オプション[-l]を付けると、プロセスIDの後ろにプロセス名が表示されます。
                [-lf]にする事でプロセスのパスも表示させる事ができます。

◆pkillの場合

                $ pkill hoge

                プロセスIDを確認して指定しなくても、hogeというプロセスを全てkillできます。

                ※複数あるhogeプロセスでkillしたくない物があっても、
                 問答無用でkillされてしまうので注意が必要です。


pkillは状況次第でしょうがpgrepは凄く重宝してます。


vim カスタマイズ

タグ: , , | 投稿日: 投稿者:

こんにちは最近、寒波続きで寒いので帰宅途中でコーンポタージュを飲むのが日課になっているモリです。

今回はよく使用しているvimを自分仕様にカスタマイズしているので紹介しようと思います。

紹介する内容はLinux系のOSです。

Windows系ですとやり方が異なるので注意して下さい。

私はカラースキーマ(コードの色分け)と入力、検索の設定をしています。

簡単にできるので、是非してみては如何でしょうか。

注意点として、共有ユーザに対して適用しないようにしましょう~!

やる事

1.vim設定

 a.まずはサーバにログインして、自身のホームディレクトリへ移動します。

 b.「.vimrc」ファイルの作成

  このファイルが設定ファイルになります。

  作成は「vim .vimrc」で作成します。

  c.好みの設定を記述

  基本的に[set]コマンドにて設定していきます。

     設定する内容はたくさんあるので割愛させてもらいますが(汗

  私の設定は以下のようなオーソドックスな感じです。

" ##### 表示設定 #####
" 行番号を表示する
set number
" 編集中のファイル名を表示
set title
" 括弧入力時の対応する括弧を表示
set showmatch
" インデントをスペース4つ分に設定
set tabstop=4
" オートインデント
set smartindent

" ##### カラースキーマ設定 #####
 colorscheme molokai
" コードの色分け
syntax on

" ##### バックスペース設定 #####
" eol    => 行頭で[Backspace]を押したときに行の連結
" indent => オートインデントモードのインデントも削除
set backspace=start,eol,indent

" ##### 入力補完 #####
" コマンドラインモードで[Tab]を押すと、適切な文字を補完したり、補完候補を一覧表示
set wildmenu wildmode=list:full

" ##### 検索設定 #####
" 大文字/小文字の区別なく検索する
set ignorecase
" 検索文字列に大文字が含まれている場合は区別して検索する
set smartcase
" 検索時に最後まで行ったら最初に戻る"
set wrapscan

2.カラースキーマ

 a.カラースキームのダウンロード

  こちらは「vim カラースキーム」等で検索するといっぱい出てきます。

  好みのカラースキームが見つかったら「xxx.vim」ファイルをGETします。

 b.ファイルの設置

  「xxx.vim」ファイルの設置場所はホームディレクトリの「.vim/colors」ディレクトリ配下に置いて終了

 c.適用

  適用は先ほどの「.vimrc」ファイルに記述します。

  ファイル名は拡張子を省いて記載します。

" ##### カラースキーマ設定 #####
 colorscheme [ファイル名]
" コードの色分け
syntax on

★適用前

a

★適用後

b

 

これだけです。

でわでわ!よいvimライフを!!


コマンド履歴

タグ: , , , , | 投稿日: 投稿者:

こんにちは、モリです。

忘れっぽい自分の為に、またまた備忘録を書いていきます。

今回はLinuxコマンドで使用する「コマンド履歴」です。

■一覧

まず単純にコマンド履歴を見るなら[history]コマンドで一覧表示。

■直近

直近なら[↑][↓]でhistoryを遡るまたは戻る

■検索

[ctrl] + [r]

上記のコマンドで検索。

さらに使用したいコマンドをある程度入力して[ctrl] + [r] すると直近の類似候補を表示。

遡りすぎて目的のコマンドを過ぎてしまった場合[ctrl] + [s]で戻ることが可能

ただ、デフォルトの設定では戻るコマンド[ctrl] + [s]が画面のロックに割り当てられている為、動かない。

解除するには以下のコマンドで外してやれば可能になる。

[stty stop undef]

解除出来たか確認するには[ssty -a]で[stop]に割り当てられている値が[undef]であることを確認すればOK。

ちなみに、初期値は[^S]なので戻したいと思ったら再度割り当てればOK

頻繁に使用する人は結構重宝するかも。

 

 


Video For Linux(v4l)について

タグ: , | 投稿日: 投稿者:

Webカメラなどから撮影した動画を取り込んで××するんならWindowsなら今時はMedia Foundationでしょうか?いまだにDirectShowが便利なんでしょうか?
以前にDirectShowでフィルターを書いて色々実装しましたが、フィルターグラフの接続とかが面倒だったりしました。最近の私の場合はLinux(Ubuntu)なので、DirectShowのお世話になっていません。

以前Linuxでカメラでキャプチャした画像を××するのに実際に私が行ったのは、BlackMagicDesign社のビデオボードDecklink/Intensityシリーズにカメラを接続する形で行いました。BlackMagic Decklink/IntensityにはBlackmagic DeckLink SDKを利用してアクセスし、画像の生データを得ました。

BlackMagic Decklink/Intensityにカメラをさしても/dev/videoXが生えてくるわけじゃないので使えませんでしたが、今度はV4lです

※実際にはOpenCvでキャプチャ処理とかも書きましたが、これはOpenCv内部からv4lを呼んでるんですね

1.オープン

 int open(const char *pathname, int flags);
 で行う。pathnameに"/dev/video0"とか、flagsにはO_RDONLY, O_RDWR
 とか設定

2.カメラ操作
※カメラで操作可能な設定をいじったり、バッファを関連付けたり、画素データを取り込んだりします

int ioctl(int fd, int request, ...);
で行う。リクエスト(request)については下に例示

リクエストの例

VIDIOC_QUERYCAP カメラデバイスに保有する機能を問い合わせます
VIDIOC_S_FMT カメラデバイスに画像データのフォーマットを設定
VIDIOC_G_FMT カメラデバイスに画像データのフォーマットを取得
VIDIOC_REQBUFS 画像データ用のバッファをカメラデバイスに要求
VIDIOC_QUERYBUF VIDIOC_REQBUFSで要求したバッファの情報を取得
VIDIOC_QBUF バッファをエンキューします
VIDIOC_DQBUF バッファをデキューします
VIDIOC_STREAMON キャプチャ開始
VIDIOC_STREAMOFF キャプチャ停止

3.select()で待つ(ってことはpoll()も使えんのか)ことで、キューにデータ入ったか確認する
4.(カメラの)バッファをユーザープログラムにマッピングする

void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
で行う

※ユーザー定義のポインタにバッファアドレスをマッピングする

★で、手順的には

  1. カメラデバイスオープン
  2. 設定(解像度など)
  3. バッファ要求
  4. バッファにポインタ割り当て
  5. バッファをキュー(あらかじめ)
  6. キャプチャ開始
  7. デキュー/エンキュー繰り返し→フレームデータの処理
  8. キャプチャ終了
  9. 後始末

となります。

以上ですが、今度は、ちゃんと何かつくりますね。これとffmpegのlibで何か作るとか、OpenCvと組み合わせるとかで・・・・


LVMでVGを変更したら再起動後にKernel panicになった

タグ: | 投稿日: 投稿者:

こんにちは。工藤です。

Linuxのバックアップやリストアに便利ツール「Mondorescue」を使用する事が良くあり、P2Vなどに重宝したりする事もあるのですが、バックアップは簡単だけど、リストアってホント面倒だよね。
「リストアなんて事が発生しませんように!」
って毎回祈ってバックアップ取ってますから。

で、今回もハマったポイントについて。(CentOS版)

バックアップしたマシンとリストアするマシンが異なる場合などに起こり得やすい。
HDDのサイズなんかが異なっていて、手動でLVMを作成し、そこへバックアップデータをリストアした時なんかに特に注意。
grubのdevice.map、grub.confとかfstabとかmtabとかは比較的ちゃんと書き直すのですが、いざ起動しようと思うと

Volume Group not found

Kernel Panic

ってなってヤな感じです。ホント、起動中にコケるのが一番嫌いです。やる気が削がれ「あーーーーー」ってなるから。

で、気を取り直して問題解決へ。
Linuxの起動プロセスを考えるに、どうやらinitrdというヤツがキモらしい。
ここを変更したLVMの内容に書き換えなくてはならない。

Rescue CDなんかで起動させて、いつもの

# chroot /mnt/sysimage

やって

# cd /boot
# mkinitrd initrd-2.6.18-308.13.1.el5.img 2.6.18-308.13.1.el5
など実施し、initrdを再作成する。(もしアレならgrub-installしなおしても可)
そして再起動!

NGポイントがここだったらこれで回復。ここ以外だったらそれはまた別のお話。


OOM killerを消極的方法で回避

タグ: , | 投稿日: 投稿者:

こんにちは工藤です。

Linuxの運用をしているとたまにやってくるoom-killer。
詳しい説明は割愛しますが、簡単に言うとメモリ不足が発生しシステムダウンを防ぐため、無差別にプロセスを殺してゆく機能です。不要なプロセスなら問題ないのですが(そもそも不要なら立ち上げないけど)重要なプロセスの場合は殺されてはたまったものではありません。いくらシステムダウンを防ぐためとはいえ、サービスの提供できないサーバなんか死んだも同然。本末転倒ですわ。

っつう事でoom-killerが発動する場合はそれはすでにシステムとして正常に稼働していない。という事にして、とっととシステムを再起動させます。その方がきっと傷口は小さくて済むはず。原因調査より復旧が優先だから!原因調査なんて賢い人がやってくれるハズです。

oomの発生時に直接再起動というプロセスは踏めないため、oom時にkernel panicになるように設定します。

/etc/sysctl.confに下記を追記しましょう。

vm.panic_on_oom=1

さらにいつも通りkernel panicになったら再起動するアレを入れておきます。

kernel.panic=60 (秒数はお好みで)

上記2行を追記したら

# sysctl -p

で適用します。

こうする事で、oom発動→kernel panic→再起動となります。

もう一度念のために

oomの原因調査は賢い人がやってくれるハズ!


tmuxのちょと便利な設定

タグ: , | 投稿日: 投稿者:

nor です。

今日は CUI LOVE な人間必須の「tmux」のちょと便利な設定を紹介します。
※ tmux? というかたは、ググってください。

tmux (or screen) を活用しているかたは、C-t [1-9] ですいすいウィンドウを移動しているに違いない今日この頃ですが、screen ですとウィンドウ数が 10 を超えた場合、ウィンドウ移動が極端にめんどくさくなります。
ええ、引越しの梱包くらいめんどくさいです。

そこで、登場! 素敵な tmux !

なんと、↓の設定を$HOME/.tmux.conf に追加するだけで、C-t space⏎ [ウィンドウ番号] で移動できちゃうんです!
すごく楽なんです。

 unbind space
bind space command-prompt "select-window -t '%%'"

↑の設定を保存したら、tmux 起動

tmux

C-t space !!!

tmux

ウィンドウ名 11 を入力

tmux

キタコレ!

tmux

一気にウィンドウ11に移動です!(まあ 1 からなんで C-t p でも移動できるんですが……)

これであなたも、tmux に夢中ですね!

ちなみに、nor の .tmux.conf は↓な感じです。

unbind C-b
set -g prefix C-t
bind C-t last-window

set-window-option -g utf8 on

set-option -g base-index 1
set-option -g default-shell /bin/zsh
set-option -g status-fg white
set-option -g status-bg colour18
set-option -g status-interval 5

setw -g window-status-current-fg red
setw -g window-status-current-bg colour18
setw -g window-status-current-attr bold
setw -g mode-keys vi

set -g pane-active-border-fg black
set -g pane-active-border-bg cyan

bind s split-window -v
bind v split-window -h
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

unbind space
bind space command-prompt "select-window -t '%%'"

unbind r
bind r source-file ~/.tmux.conf