正規表現で grep 検索を便利に

いろいろと検索するときに使える
grep コマンドですが、オプションや正規表現を使えば
さらに便利になります
とくに、設定スクリプトをつくりたいときに使っています
まずは、文字の検索です
grep “探したい文字” ファイル名
これで、ファイルのなかから任意の文字をさがせます
例えば
SELinuxの設定を無効にするため、
enforcing という場所がどこにあるかをみるには
grep “enforcing” /etc/sysconfig/selinux
で見れます
ただし、該当する行が全部でます
実行結果は
# enforcing – SELinux security policy is enforced.
# permissive – SELinux prints warnings instead of enforcing.
SELINUX=enforcing
となりました
“” で囲んであるのは、*などのメタキャラを含む場合に
シェルに展開されないようにするためです
続いて -c オプションをつけて、該当する行がいくつあるか数えます
今回は SELINUX とかかれている行の数を表示します
grep -c “SELINUX” /etc/sysconfig/selinux
4
これで該当するのは4行ということがわかりました
また、OR検索をするには
-e オプションをつけます
これはいくつか連続してできますが、絞り込みにはなりません
例えば
enforcing と SELINUX を含む行をだすには
grep -e “SELINUX” -e “enforcing” /etc/sysconfig/selinux
としますが
絞り込めていません
両方のうち、どちらかを含む行がでてきます
# SELINUX= can take one of these three values:
# enforcing – SELinux security policy is enforced.
# permissive – SELinux prints warnings instead of enforcing.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
SELINUXTYPE=targeted
このため、絞り込みをするには、一度 grep で検索した結果を
パイプでさらに検索すれば絞り込み可能になります
grep “SELINUX” /etc/sysconfig/selinux | grep “enforcing”
これで
SELINUX=enforcing
となり、目的どおりの絞り込みができました
さらに -n オプションをつければ、行をしらべ
sed コマンドで簡単に書き換えできます
このときに注意するのは
最初のgrep コマンドで -n オプションをつけてから
絞りこみするということです
正解:$ grep -n “SELINUX” /etc/sysconfig/selinux | grep “enforcing”
7:SELINUX=enforcing
誤り:$ grep “SELINUX” /etc/sysconfig/selinux | grep -n “enforcing”
2:SELINUX=enforcing
このように、後にオプションをつけると行が変わってしまうのは
絞り込んだあとで行を数えているからです
このため。本来なら原文の7行めになるはずが
絞り込んだら2行めなので、2行めと表示
というようになってしまいます
sed などで一気に改造したいときには、調べるときに
こういった順番の誤差に気をつけましょう

月曜日はIMMのポジション量発表

IMMのポジション量によれば、一番ロングが積もっているのがポンド
ちなみに円はショートになりつつあるため、円買いの可能性あり
ポンドに関しては、史上最大までもう少しだけど、ドル円がはっきりしないと危険
あとはスイスだけど、これは中東不安からきてるとのこと
よくある有事のスイスフラン買い
金融危機、かつてのリーマンショックのときに、対スイスフランはすごい上昇
カナダは原油高が要因でロング拡大
こちらも中東不安により原油高になり、結果カナダロング拡大につながるようです
ただし、先行きは微妙
NZドルは、金利が人気だけど、金利の先行きが微妙
むしろ、食料輸出国の強みと、最近の食料価格高騰による景気拡大が理由でロング拡大
豪ドルが一番わかりにくく
銀行格下げや、洪水被害、があるけど金利差が人気、そして資源価格高騰が理由でロング拡大らしい
ただ、欧米の金利があがると、金利差はなくなり、レバトリになるリスクもあるかもしれません
毎週 月曜日にはIMMのポジション量発表になりますので
ある程度の参考にはなります
史上最大のロングや、ショートとでてきたら、要注意です
ちなみに、IMMのポジション量は対ドルになりますので
クロス円と間違えないようにしましょう

シェルスクリプトで chown

シェルスクリプトで
chown コマンドを使うようにしてみました
test.txt というファイルをつくり、中身を適当に用意します
vi test.txt
で作成し
aaaaa
bbbbb
という内容にします
今回は、所有権の変更なので、中身は適当です
通常、chown ユーザ名 ファイル名
となりますが
今回は
vi chowntest.sh
でスクリプトを作成してみました
#!/bin/bash
echo “変更するユーザ名を入力”
read name
chown $name. test.txt
という内容です
これを
sh chowntest.sh
とすれば
所有権が入力したユーザ名に変わります
ただし、存在しないユーザを入力するとエラーになります
このスクリプトを使えば、
よくある
chmod ユーザ名. /var/www/html/
のときに簡単に設定できそうです
(通常は root 権限なので、変更は必須ですから)
構文の中にある read は
キーボードからの入力をするために使っています
シェルスクリプト :: read コマンド
そして
【 文字列の入力 】
を参考にしてみました

fedora13 64bit へ Flash plugin

fedora13 64 bit へ flash plugin を入れてみました
参考サイトは
Flash Player “Square” Preview Release 2 on Fedora 13 64bit
Adobe Labs
から
ownload plug-in for 64-bit Linux (TAR.GZ, 4.1 MB)
をダウンロードします
他にもセッティングできるように
cp $HOME/ダウンロード/flashplayer10_2_p3_64bit_linux_111710.tar.gz
でファイルを Dropbox へコピー
その後、
tar zxvf $HOME/Dropbox/flashplayer10_2_p3_64bit_linux_111710.tar.gz -C $HOME/.mozilla/plugins/
を実行することで
$HOME/.mozilla/plugin
へファイルをコピーします
ちなみに、-C オプションは、指定したディレクトリに
ファイルを展開するというものです
これを
vi setup_fedora13_64.sh
で スクリプトを作成し、内容を
#!/bin/bash
tar zxvf $HOME/Dropbox/flashplayer10_2_p3_64bit_linux_111710.tar.gz -C $HOME/.mozilla/plugins/
としてDropbox へ一緒に保存しておけば
ほかの fedora13 64bit へも簡単に適用できます
ただし、セットアップしたら、firefox を再起動しましょう
これで 64bit でも Youtube が見れます

wireshark

サーバー公開とセキュリティの勉強のため、
パケット関連の勉強をはじめようと思います
手始めに、パケット解析などを行えるツール
Wireshark を使ってみます
今回、実験するのは
ubuntu 10.10 です
sudo apt-get -y install wireshark
でインストールできます
これで、準備はできたのですが、起動するときには、
一般ユーザではなく、管理者権限で実行します
端末を開き、
sudo wireshark &
もしくは
sudo su
wireshark &
と実行することで、起動できます
一般ユーザでも起動できたのですが、
解析するインターフェースを選ぶことができませんでした
管理者権限で起動したら、調べたいインターフェースを選択します
すると、キャプチャが開始されますので、
これでネットワーク監視が可能になります
とはいっても。なれないとまったく意味が分かりません
Source はデータの転送元
Destination は データの転送先になるようです
Protocol は TCP や UDPなどの通信プロトコル
info には詳細情報が載ります
このinfo に、ネットに接続して閲覧しているときの情報がでます
PNG などの文字があれば、画像を閲覧していることがわかります
このときにキャプチャした画像は
File > Export > Objects > HTTP で表示されます
この画像を保存しておくには
Save All を選択し、任意の場所を選び、ディレクトリ名を
名前 のところの欄へ入力し。OKを押します
私の場合は、
/home/wiki/ドキュメント

samplechap
というディレクトリ名で保存しました
ただし、すべてのファイルを保存することはできませんでした
画像関連については、ほぼ問題なく保存されていると思われます
Wireshark を終了するときに
Quit without Saving
を選べば、キャプチャ内容を保存せずに終了します
Wireshark に関しては
ネットワークエンジニアを目指して
というサイトに詳しい説明が載っていましたので
参考にしながら勉強していこうと思います

Android アプリ作成(タッチ処理編)その4

Android アプリ作成(タッチ処理編)その3
の続きになります
まず、
public class test2Activity extends Activity {
の下に
SoundPoll sp;
int sound;
を記述し、
赤いラインがでているので、
SoundPoll のところへカーソルを持っていって
import SoundPoll (Android widget)
をクリックし、インポートします
int sound は音声ファイルの読み込みに使うための変数です
次に、
sp = new SoundPool(1,AudioManager.STREAM_MUSIC, 0);
を記述します
例のごとく、自動的に候補がでますので
実際にはかなり楽に書き込めます
続いて
sound = sp.loa
まで書き込むと候補がでてきますので
load(Context context, int resid, int priolity); int – SOundPool
を選択すれば自動的に書き込まれます
context を this へ、
resid を R.raw.dummy-message
と指定しようとしたのですが
[2011-02-19 00:07:17 – Test2] res/raw/dummy-message.wav: Invalid file name: must contain only [a-z0-9_.]
となるため、ファイル名を変更します
Eclipse の raw > dummy-message.wav
を右クリックし
Refactor > Rename 
もしくは
Shift + Alt + R
を押してファイル名を変更します
ファイル名を dum.wav
にして
resid を R.raw.dum
pliority を 1
へ変更します
そして
Button button = (Button)findViewById(R.id.Button02);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sp.play(sound, 1.0f, 1.0f, 0, 0, 1.0f);
}
});
を追加します
sp.play(sound, 1.0f, 1.0f, 0, 0, 1.0f);
は、音声再生の設定です
play()
の中の数値ですが、左から
サウンドの番号
左スピーカーの音量 (0.0~1.0)
右スピーカーの音量 (0.0~1.0)
優先度 (0が最優先数値になる)
再生速度 (1が標準。2で倍速、0.5で半分)
となります
かなりわかりにくくなったので、以下が
main.xml の全文になります
-------------------------------------------------------
package jp.co.nikkeibp.test2;
import android.app.Activity;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class test2Activity extends Activity {
SoundPool sp;
int sound;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sp = new SoundPool(1,AudioManager.STREAM_MUSIC, 0);
sound = sp.load(this, R.raw.dum, 1);
Button button = (Button)findViewById(R.id.Button02);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sp.play(sound, 1.0f, 1.0f, 0, 0, 1.0f);
}
});
}
}

--------------------------------------------------—-

Android アプリ作成(タッチ処理編)その3

Android アプリ作成(タッチ処理編)その2
をさらにカスタマイズし、音がでるように改造します
参考資料は、日経Linux 2011-03 です
新しく res の下に raw というディレクトリを作成します
まず
res ディレクトリの上で右クリックし
New > Folder
で設定ウィンドウがでてきますので
Folder name: の欄へ raw と入力し
Finish
をクリックします
これで、ディレクトリが作成されます
ちなみに、英語なのは
私の場合
DropBox とスクリプトで開発環境
にあるように、スクリプトでインストールしたときに
日本語化処理を行っていないためです
今後、英語のサイトなどを使うときの練習として
なるべくプログラミングは日本語化せずにできそうなものは
英語にしてみようと思っています
幸い、Eclipse は日本語化されて説明されていることが
多いので単語を置き換えながら
進めれば、なんとかなります
習慣化してくれば、気にならなくなります
日経 Linux 2011-03では don.wav
というファイルを使っているそうですが、
ubuntu には入っていませんし、再現性の問題から
デフォルトで入っている音源を使おうと思います
サンプルの音声が
/usr/share/sounds/
の中にありますので、好きなディレクトリの中のファイルから
使うことにします
今回は
ubuntu 10.10
の中の
/usr/share/sounds/speech-dispathcer/
の中にあるダミーメッセージファイルになる
dummy-message.wav
を使います
これをドラッグ&ドロップして、Eclipse の
raw ディレクトリにもっていきます
これで、音声ファイルが用意できましたので
それでは、引き続き java コードの改造をしていきます
今回、追加するのは
SoundPool クラス
(ゲームやボタンクリックの効果音など
 比較的短い音声再生につかうらしいです)
load メソッド
(音声ファイルの読み込みに使用)
playメソッド
(音声ファイルの再生に使用)
今回は、変更するために、いちど
setContentView(R.layout.main);
の下からの部分を切り取ります
切り取るのは
Button button = (Button)findViewById(R.id.Button02);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
TextView textView=(TextView)findViewById(R.id.TextView01);
textView.setText(“ボタンをクリックしたよ”);
}
});

の部分です
念のため、後で直せるように
アプリケーション > 
アクセサリ > Tomboy メモ
で新しいメモを開き、
張り付けておきます
これで、最悪の場合、この部分を張り付けて元に戻します
これで、バックアップもできたので
安心して機能を追記できます

Android アプリ作成(タッチ処理編)その2

Android アプリ作成(タッチ処理編)
の続きになります
ちなみに、参考書籍は 日経 Linux 2011-03です
写真入りの解説なので、わかりやすいです
ここで、main.xml のTexiView01 を取得し、 Text の
内容を変更する処理を追記します
public void onClick(View v) の下に追記します
TextView textView=(TextView)findViewById(R.id.TextView01);
今回もインポートすることが必要になるので
import TextView (Android widget)
をクリックします
これにより、文字列を表示する機能
TextView を使えるようになります
そして、その下へ文字列を表示する設定を記述します
文字列を表示するには
setText()
を使います
textView.setT
まで入力すると、候補がでてきますので
setText(CharSequence text);void
を選びます
そして、() の中を
“ボタンをクリックしたよ”
というように書き換えます
textView.setText(“ボタンをくりっくしたよ”);
という文になります
あとは保存して、実行すればボタンを押すことで
ボタンの下の文字が変わることを実感できるはずです

Android アプリ作成(タッチ処理編)

今度は、簡単な処理をする動作をつくってみます
まず、TextView を追加します
追加するには
Graphical Layout で
TextView をドラッグ&ドロップします
さらに
Show in > Propeties

T3ext の値を @string/hello
へ変更します
また、
main.xml の layout?height を wrap_content
にして文字に合わせ
layout_width を fill_parent にして
画面に合わせました
ここからは処理機能を追加するので、java のソースコードを改造していきます
まず、
src
というディレクトリの2階層下にある
Activity.java
を開きます
もう少し正確にいえば
アプリケーション名(testapplicationなど) >
src >
パッケージ名(jp.co,nikkei.testapplicationなど) >
Activity.java
という階層になっています
今回は Button2 をクリックしたら
TextView の内容が変わるというシンプルなものです
まず、
setContentView(R.layout.main);
の下に
Button button = (Button)findViewById(R.id.Button02);
を追記します
まだButton が java の標準機能に組み込まれていないので
Eclipse で赤い下線が引いてある Button にカーソルを合わせ
import “Button” (Android wodget)
をクリックすることでインポートされます
これを行うことで、
import android.widget.Button;
が追記されます
この次に、ボタンを押したときの処理を書きます
ボタンをクリックしたときの処理は
setOnClickListener() を使いますが
全部入力せずとも
Button.setOnC
まで入力すれば、Eclipse で候補をだしてくれるので
該当するものをダブブクリックすれば自動入力されます
このときできた
Button.setOnclickListener(1)
の1の部分を消し
new View.setOnClickListener
を追記するのですが
new View.OnC
まで入力すれば、さきほどと同じように Eclipse が候補を選別してくれます
これにより、自動的に
public void onClick(View v){
}
が追記されます
Eclipse ってほんとに便利だと思います

Android アプリ作成(ボタン表示編)その3

引き続き。Android プログラミングです
今回は、前回までとは異なり、main.xml ではなく
string.xml
を変更していきます
一般的に、レイアウトはmain,xml
文字列は string.xml で記述するようです
文字列を追加するには
string.xml の
Resource タグをクリックし、GUI で設定するか、もしくは
string.xmlを改造します
Resources で文字列を追加するには
Add > string
で設定画面をだし
Name に button1
Value に ここを押して
と入力します
これで、自動的に string.xml に追記されています
これで、新しくボタンを
Graphical Layout で Button をドラッグ&ドロップし
作成します
プロパティを変更したいので
ボタンの上で 
右クリック ≫ Show in > Properties でプロパティ画面をだします
今回は、 string.xml の設定を反映させてみたいので
Text の部分に @string/button1 を記述します
さらに、
layout width を fill_parent へ変更します
これで、新しくできたボタンには
ここを押して
という文字が表示されています
また、main.xml には
<Button android:id=”@+id/Button02″ android:layout_height=”wrap_content” android:text=”@string/button1″ android:layout_width=”fill_parent”>
というコードが追記されます
今回の例からわかったのは
string.xml ファイルから
<string name=”button1″>ここを押して
を呼び出しているように
string.xml からソースを読み込むには
@string/NAMEの値
を指定するということです
つまり、今回の場合なら
<string name=”button1“>ここを押して
になるというわけです