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”が含まれている行のみを表示します。
 
とても使えますね!エディタの検索機能を使っても探し出せないこともこれなら可能かもしれません!!

Share on Google+Tweet about this on TwitterShare on StumbleUponShare on Facebook

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

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

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

そこで、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

 

Share on Google+Tweet about this on TwitterShare on StumbleUponShare on Facebook

Vimって☆Emmetさん

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

どうも、ニタです。先日、社内でEmmet(Zen Conding)を紹介する機会がありました。
当日は、IDEやテキストエディタのアプリ上でデモを行ったのですが、vimmerが多いせいか、そもそもHTMLコーディングをする機会が少ないのか、あまり採用されてない感じです(´・ω・`)
そこで今回は、vimでEmmetを使えるようにしてみます。

Emmetって何?

Emmetは、HTMLやCSSのコーディングを効率化してくれるツールです。
テキストエディタやIDE上でショートカットコードを打つと、HTMLやCSSに転換されます。

Emmet

Zen Codingというのもあります

Emmentで検索すると「Zen Coding」というのも出てきます。これはEmmetの前身となるプロジェクトで、EmmetはZen Codingを基に作られており、Zen Codingの改良版と言って良いでしょう。

閑話休題。実際にEmmetを使ってみましょう。

html:5

Emmetのプラグインが入ったエディター上で、こんな感じに入力して展開させると…

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    
</body>
</html>

こんな感じに一気にHTMLコードができちゃう!
更に…

(div#content-id$$$.page-content-class>h1+h2)*2

独自記法を使ってタグのidやクラスを指定したり、同じ要素をくり返したりも出来ます。

<div id="content-id001" class="page-content-class">
    <h1></h1>
    <h2></h2>
</div>
<div id="content-id002" class="page-content-class">
    <h1></h1>
    <h2></h2>
</div>

繰り返しはループ処理でも書ける場合もありますが、コーディングの高速化と閉じタグや属性を書く手間を最小限に抑えられるのが気に入っています。

VimでEmmetを使えるようにする

さていよいよ本題。
VimでEmmetを使えるようにするには「emmet-vim」というプラグインをインストールします。
このプラグインは、Vimのプラグイン管理ツールのNeoBundleで管理します。NeoBundleに関しては、後日改めて紹介するかもしれません。
取り急ぎ、以下の様にしてNeoBundleとemmet-vimをインストールします。

NeoBunbleとemmet-vimのインストール

NeoBundleは以下のように

# 配置先のディレクトリを作成する
mkdir -p ~/.vim/bundle
cd ~/.vim/bundle

# NeoBundleをgitHubのリポジトリから取得する
git clone git://github.com/Shougo/neobundle.vim

# emmet-vimをgitHubのリポジトリから取得する
git clone https://github.com/mattn/emmet-vim.git 

その後、vimの設定ファイル~/.vimrcを作成してNeoBundleをインストールします。

set nocompatible
filetype plugin indent off

if has('vim_starting')
  set runtimepath+=~/.vim/bundle/neobundle.vim
  call neobundle#rc(expand('~/.vim/bundle'))
endif 

NeoBundleFetch 'Shougo/neobundle.vim'

# 以下は必要に応じて追加
NeoBundle 'Shougo/unite.vim'
NeoBundle 'Shougo/neosnippet.vim'

filetype plugin indent on

また、Mac OSX El Capitanの場合、上記の設定だとインストールできないようです。

# インストール用シェルファイルをダウンロードし、実行
$ curl https://raw.githubusercontent.com/Shougo/neobundle.vim/master/bin/install.sh > install.sh
$ sh ./install.sh

.vimrcの表記も変わります。

" Note: Skip initialization for vim-tiny or vim-small.
 if 0 | endif

 if has('vim_starting')
   if &compatible
     set nocompatible               " Be iMproved
   endif

   " Required:
   set runtimepath+=~/.vim/bundle/neobundle.vim/
 endif

 " Required:
 call neobundle#begin(expand('~/.vim/bundle/'))

 " Let NeoBundle manage NeoBundle
 " Required:
 NeoBundleFetch 'Shougo/neobundle.vim'

 " My Bundles here:
 " Refer to |:NeoBundle-examples|.
 " Note: You don't set neobundle setting in .gvimrc!

 call neobundle#end()

 " Required:
 filetype plugin indent on

 " If there are uninstalled bundles found on startup,
 " this will conveniently prompt you to install them.
 NeoBundleCheck
NeoBundle 'mattn/emmet-vim'

上記を~/.vimrcに追記し、vim上で:NeoBundleInstallというコマンドを実行してプラグインをインストールします。

VimでEmmetしてみる

Vim上でEmmetを実行するには、<C-y>,で行います。control + yのあとカンマ「,」をタイプします。
キーバインドの設定は~/.vimrcで設定します。

# 実行時のキーバインド変更する場合(ここではYからEに変更)
let g:user_emmet_leader_key = '<C-E>'

これでVim上でも高速HTMLコーディングが可能になりました。

それではまた来年!

Share on Google+Tweet about this on TwitterShare on StumbleUponShare on Facebook

[PHP]エクセルで文字化けさせないCSVの作り方

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

おはこんばんにちは、いい年してモンハンしちゃってるモリです。

さて、今回はCMSの1機能としてよくあるCSVダウンロード機能に関する記事を書きたいと思います。
PHPで生成したCSVをエンドユーザーがダウンロードしてエクセルで開いたら文字化けしてる!って
事を無くす為のやり方です。

結論から言うとファイルの先頭にBOMを付与する事で文字化けを回避させることが出来ます。
エクセルにUnicodeと識別させるために付与します。
これがあるとエクセルは自動的に判別してくれます。
SIJISに変換する方法もありますが、UTF8のまま文字化け対応させるやり方です。

元データはこんな感じ
blog1

BOMなしのPHPソース

 
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=sample.csv");
$fp = fopen('php://output','w');
$data = array(
		array('項目1','項目2','項目3','項目4'),
		array('データ1','データ2','データ3','データ4'),
		array('データ5','データ6','データ7','データ8'),
		array('データ9','データ10','データ11','データ12')
);
foreach($data as $output){
	fputcsv($fp, $output, ',','"');
}
fclose($fp);

これをエクセルで見てみると見事に文字化け
blog2

さっきのソースのデータ書き込み前にBOMを付与します。

 fwrite($fp, '\xEF\xBB\xBF'); 

BOMありバージョンで見てみるとちゃんと読み込めていますね。
blog4

おまけ:BOMありのPHPソース

header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=sample.csv");
$fp = fopen('php://output','w');
fwrite($fp, "\xEF\xBB\xBF");
$data = array(
		array('項目1','項目2','項目3','項目4'),
		array('データ1','データ2','データ3','データ4'),
		array('データ5','データ6','データ7','データ8'),
		array('データ9','データ10','データ11','データ12')
);
foreach($data as $output){
	fputcsv($fp, $output, ',','"');
}
fclose($fp);

では。。。

Share on Google+Tweet about this on TwitterShare on StumbleUponShare on Facebook

HYPER-Vのレプリケーション設定について

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

前回HYPER-Vのレプリケーション設定を行うにあたって下準備を下記URLに記載しました。

http://dev.blog.fairway.ne.jp/hyper-v%e3%81%ae%e3%83%ac%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e8%a8%ad%e5%ae%9a%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6%ef%bc%88%e4%b8%8b%e6%ba%96%e5%82%99%ef%bc%89/

 

今回はレプリケーション設定を行います。

1.HYPER-Vマネージャーを開きます。

2.対象仮想サーバを右クリックします。

3.レプリケーションを有効にするをクリックします。

4.レプリカサーバのホスト名を要求されましたらセカンダリサーバのホスト名を入力します。

5.※IPアドレスでは出来ないため、hostsファイルにセカンダリサーバのホスト名とIPアドレスを記入してください。

6.証明書の選択をクリックし、前回作成した証明書を選択します。

7.証明書ベース認証を使用するを選択します。

8.そのまま次へをクリックし続けます。

9.完了をクリックします。

完了をクリックしましたら以下設定でセカンダリサーバとレプリケーションが行われます。

 ・すぐにレプリケーションを開始

 ・レプリケーション同期間隔:5分

 ・ネットワーク経由でセカンダリサーバにコピー

  ※上記パラメータの調整については8の部分で行います。

これでセカンダリサーバに仮想サーバがコピーされます。

使用している回線、マシンの性能、仮想サーバが既に使用している容量次第でコピー時間は変わっていきます。

以上です。

下準備が本当に苦労しました。

 

Share on Google+Tweet about this on TwitterShare on StumbleUponShare on Facebook

今度はノコギリ波をつくろう

毎度、いかおです。

前回はサイン波を作成してならせてみせましたが今度はノコギリ波を作ります。

先ず、ノコギリ波はどんな波形かというと・・・・

そこはグーグル先生に聞いて下さい。

【その原理】

「キャリアとモジュレータとの周波数を1:1にするとノコギリ波が作れる」

ということなので、いわゆるFM音源的アプローチで(サイン波はできてるので)作ってみます

先ず、1サイクルのサイン波を作成する。コレは前回の私の投稿であるここを参考にして・・・・

例えば1サイクルのサイン波はこんな感じで作れるかな?

static const float PI = 3.141592f;
static const float SamplingRate = 48000.0f;
static const float Heltz = 440.0f; //ラ〜♪
static const float DegBase = 360.0f;
float width = DegBase / (SamplingRate / Heltz);

float vals[360];
floart deg = 0.0f;
int n = n;
for(int i=0;i < 360){
    if(deg > DegBase)break;
    vals[i] = sin(deg * PI / 180);
    deg = deg + width;
   n++;
}

そしてアドレステーブルを作成する。FM音源はこのアドレステーブルを他のサイン波と加算したりして変調し変調された順番で元のサイン波を取り出す。なんだか無茶な方法に見えるけどしょせん楽器なんでいいか・・・

int addresTable[360];
// アドレステーブルはintにしとこう
for(int i=0;i < n;i++){
    addressTable[i]=i;
}

そして変調だ。元のサイン波と混ぜてしまう

int editedAddressTable[360];
//これもint
for(int i=0;i < n;i++){
    editedAddressTable[i] = vals[i] + addressTable[i];
}

そして取り出す・・・

float answer[360]:
for(int i=0;i < n;i++){
    answer[i] = vals[editedAddressTable[i]];
}
// このanswerがFM変調後の音です

これが本当にノコギリ波になるのか?

次回、作ってみます

Share on Google+Tweet about this on TwitterShare on StumbleUponShare on Facebook

FreeNASでスタートアップスクリプトを設定する方法

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

こんにちは、hosoです。

今回はFreeNAS環境で、スタートアップスクリプト(のようなもの)を実行する方法をご紹介したいと思います。


きっかけ

FreeNASサーバにて、サーバ側でOpenVPN接続を実施し、バックアップ先の領域をSambaマウントする案件がありました。
Sambaマウントの用途としては、Cronによる定期バックアップが主になります。
ただ要件として、万が一サーバの電源が落ち復電後に自動起動した際、マウントまで自動で行うことが条件として上げられていました。


概要

サーバの環境は以下のとおりです。

- FreeNAS 9.3
- OpenVPN(pkg コマンドでインストールされるもの, version 2.3.6)

設定方法

1. 起動スクリプトで実行することはできない

当初、 rc.conf に起動スクリプトを記載して実行しておりました。
しかし、この方法では

「 Sambaのマウントが行えない 」

起動完了後にroot権限で実行できても、 rc.conf の中ではマウントできない状態に悩まされました。

2. 「Init/Shutdown Script」という起動スクリプトの存在

FreeNAS 9.3 では、「Init/Shutdown Script」というものが利用できるようになっていました。
これは、起動時・終了時に任意のコマンドやスクリプトを実行できる、というものです。

FreeNASのWeb GUI画面では、
システム -> Init/Shutdown Script -> Init/Shutdown Scriptの追加 で設定することができます。

151209-0001

151209-0002

また今回はCUIにて操作をしていましたが、 /conf/base/etc/ix.rc.d/ に起動スクリプトを配置することで、設定をすることができました。

#!/bin/sh
#
# $FreeBSD$
#

# PROVIDE: ix-postinit
# REQUIRE: LOGIN
# BEFORE: cron

. /etc/rc.subr

mount_start()
{
    while :
    do
    /sbin/ping -c 10 10.8.0.1 > /dev/null
    status=$?
        if [ $status -eq 0 ] ; then
            /usr/sbin/mount_smbfs -N -I 10.8.0.1 -g (ユーザのGID) -u (ユーザのUID) //(Sambaユーザ名)@10.8.0.1/workgroup /mnt/(マウントポイント)
            break
        fi
    done    
}

name="ix-mount"

start_cmd='mount_start'
stop_cmd=':'

load_rc_config $name
run_rc_command "$1"

これで、もしサーバが落ちても自動でマウントする条件をクリアすることができました。


余談

Init/Shutdown Script の説明は、オフィシャルドキュメントに記載があります。

また、いつ実行するかも次の中から選ぶことが可能です。

– Pre Init
– Post Init
– Shutdown

今回はFreeNASでの設定でしたが、CentOSなどでもその仕組みがあるようですので、
いろいろと知識を深めて実践していきたいと思っております。

Share on Google+Tweet about this on TwitterShare on StumbleUponShare on Facebook

OMSAインストール(CentOS)についての備忘録

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

最近、急に寒くなってきましたね。shiraneです。

DELL OMSA(OpenManage Server Administrator)は、
webブラウザからサーバのハードウェア状態などを
確認できるモニタリングツールです。

【インストール手順】

1.root権限で下記コマンドを実行しレポジトリを追加します。

#wget -q -O http://linux.dell.com/repo/hardware/latest/bootstrap.cgi | bash


2. OMSAをインストールします。
インストール場所は「/opt/dell/srvadmin/」となります。

# yum -y install srvadmin-all


3.インストールしたOMSAを起動します。

# /opt/dell/srvadmin/sbin/srvadmin-services.sh start


4.自動起動の設定をします。

# /opt/dell/srvadmin/sbin/srvadmin-services.sh enable
racsvc 0:off 1:off 2:on 3:on 4:on 5:on 6:off
instsvcdrv 0:on 1:off 2:off 3:on 4:off 5:on 6:on
dataeng 0:off 1:off 2:off 3:on 4:off 5:on 6:off
dsm_om_shrsvc 0:off 1:off 2:off 3:on 4:off 5:on 6:off
dsm_om_connsvc 0:off 1:off 2:off 3:on 4:off 5:on 6:off


以上まで完了したらwebブラウザで、
「 https://サーバアドレス:1311/ 」へアクセスしてrootログインする事で
サーバのハードウェア状態を確認んできます。

 

【アンインストール】

1.アンインストール専用のスクリプトを使用します。

# /usr/bin/srvadmin-uninstall.sh

  上記コマンドを実行すると、アンインストールするパッケージ一覧が表示され
アンインストールするか聞かれるので「yes」を指定すればアンインストール完了と
なります。


以上となります。

 

Share on Google+Tweet about this on TwitterShare on StumbleUponShare on Facebook

CSSの単位 vw, vh, vmin, vmax

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

こんにちは、kikuです。

最近知ったCSSの単位について記載していきます。
vw, vh, vmin, vmax, この4つです。

よくレスポンシブデザインで使うのは%(パーセント)ですかね。

<style>
div {
  width: 50%;
}
img {
  width: 50%;
}
</style>
<div>
  <img src="img/hoge.jpg" />
</div>

これだとimgは親のdivのwidthに対して50%のサイズで表示します。
つまりimgのサイズは画面の横幅の25%で表示されますね。

続いてwvはこんな感じです。

<style>
div {
  width: 50%;
}
img {
  width: 50wv;
}
</style>
<div>
  <img src="img/hoge.jpg" />
</div>

これだとimgは親のdivのwidthに影響されません。
100wv=ビューポートのサイズ となってます。
つまりimgのサイズは50wvなのでビューポートの横幅の50%で表示されますね。

他のも同じようにビューポートに対する割合となっています。

wv ビューポートの幅に対する割合
wh ビューポートの高さに対する割合
vmin ビューポートの幅と高さのうち、値が小さい方に対する割合
vmax ビューポートの幅と高さのうち、値が大きい方に対する割合

ちょうど使いたい場面があったのですが、ブラウザの対応バージョンの関係で断念しました。。。。
対応バージョンはこんな感じ。

  wv wh wmin wmax
chrome 20.0〜 20.0〜 20.0〜 26.0〜
FireFox 19.0〜 19.0〜 19.0〜 19.0〜
IE 9.0〜 9.0〜 9.0〜 11.0〜
Opera 15.0〜 15.0〜 15.0〜 15.0〜
Safari 6.0〜 6.0〜 6.0〜 6.1〜
Androidブラウザ 4.4〜 4.4〜 4.4〜 4.4〜
iOS Safari 6.0〜 6.0〜 6.1〜 7.0〜

Androidブラウザのところが敷居高いですね。
Android4.4未満のユーザを切り捨てるのはまだ早いかと思います。

というわけで、PCなら普通に使われるかもしれない、スマートフォン向けサイトでもそのうち普通に使われるかもしれない単位の紹介でした。

Share on Google+Tweet about this on TwitterShare on StumbleUponShare on Facebook

設定以外の理由でメールが送れなくなる場合

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

Cisco(www.senderbase.org)によると過去1カ月に送信されたメールの86%以上がSPAMだったらしいですね。
4千億通以上のSPAMが送られているということなので如何にメールを仕分けるのかというのが重要になってくるということです。

キーワードを設定して、この単語があったらSPAMだと判別するのもありですが、それだと個人に頼るしかありません。
1人1人が設定するのであれば、サービスではないですね。

つまり、何らかの方法で、このメールは信用できる、信用できないという判断を下さないといけないということです。

その判断の基準となるのがドメインを含めたIPの情報になります。

 

SPAM業者もSPAM送付を生業としているだけに、バカばかりではありません。読む人を信用させようと一見、信用が高いドメイン名を騙ることがあります。

銀行からのメールだと偽装し、偽のウェブサイトに誘導するという事件が話題になったりしました。

ドメイン名だけで判断するのは心もとないということです。

そのため、IPの情報も追加することで、より正確な判断をすることができるようになります。

 

判断するのは良いのですが、判断するには過去の情報が必要になります。このドメインからは、過去3カ月SPAMが送られているというような。

そういった情報をベースにメールは評価され、SPAMかSPAMでないかという判断がくだされます。

では、どこがそのような判断を下しているのでしょう?

1つの会社が独占的に判断を下しているのではなく、複数の会社がサービスの一環として提供していたり、SPAMを撲滅しようとする有志が情報共有したりしています。

ですので、この相手には問題なく送れるけど、別の相手には送れないということがたまにおきます。

 

最大クラスの情報を確認できるサイトがあります。

http://www.senderbase.org/

ここは、ネットワーク機器の最大手であるCiscoが運営しており、有用な情報を取得できます。

 

右上に検索ボックスがあるので、そこにIPを入力すればそのIPやドメイン、ネットワークを入力すればそこがどれだけ信用に足るのかが分かります。

もし、Poorが表示されるようなことがあれば色々と調査の必要があります。

気を付けないとどこにメールを送ってもメールの受信を拒否されるということになりかねません。

Share on Google+Tweet about this on TwitterShare on StumbleUponShare on Facebook