bashの最近のブログ記事
外部に固定IP持ったサーバ借りたかったのでそのついで。
やっぱり root 権限貰えるプランはちと高いので妥協。
恵比寿まで行って試験受けてきました。
今回はようやく「三度目の正直」となりました。
1週間ほど前からマカーである。ようやく購入できたのである。メモリを4GBに増量しての初Mac/初Apple Storeである。
売り上げランキング: 17286

WIndowsからの乗り換えですが、大満足。
素晴らしい!『Linux標準教科書』開発プロジェクト - LPI-Japan - エルピーアイジャパン
はてブもかなりの勢いでつけられている『Linux標準教科書』です。アンケート(ちょっと面倒くさい)に答えるとダウンロードページに飛びます。
先日、『LPICレベル2技術解説無料セミナー』開催@東京(9月10日)のお知らせ - LPI-Japan - エルピーアイジャパンに参加してきた。ってことでレポートじみたことをしてみます。
場所は銀座にあります文祥堂イベントホールで行われました。
大きな地図で見る
2Fのブラインドが降りているところ。
全体の流れ
13:20 会場到着
会場は思ったよりも広くて、受付開始から5分後にも関わらず4割くらい座席が埋まっていてびっくりした。LPIってそこまでメジャーなんだ。100人参加のイベントだけど、40人くらいしかこないと思っていたのに。
座席にはPRを含めたプリント類が既に置かれていた。
参考資料ダウンロード - Linux技術者認定機関 LPI-Japan - エルピーアイジャパンにある
『LPICレベル2技術解説無料セミナー(PDF資料:99KB)』からダウンロードできます。前回分のドキュメントということで、今回はコマンドが一部追記されてました。当日にはできなかったNFSに関しての資料は『NFSによるファイルサーバを構築しよう!(PDF資料:169KB)』を見てください、の注記あり。
LPICくんかわいいよ、LPICくん。
13:30 セミナー開始
まずはLPI事務局から各種広報活動。
・LPICの有用性
→IT業界/SKILLの客観評価/ランク
・LPIC国内受験者10万人突破キャンペーン!
→LPIC一回でも受験した人はキャンペーン応募資格あり。
→iPod当たるかもだよ。
・Linux/OSS Business Summit 2008・秋」(2008年10月3日開催)
→副題は「Linux/OSSのビジネスを成功に導くために」」
→DesktopOSとしてのLinuxの普及。
→あとはMysql/PostgreSQLの話らしい。
13:35 講義の開始(以後50分講義-10分休憩の3回繰り返し/学生的にいうと3コマ)
16:40 終了-アンケート提出-各自解散
という感じでした。
では講義の内容に行く前に。
講師紹介(実際に本人が話していたこと)
杉松秀利先生
日本電子専門学校 非常勤講師
教えていること。
・情報セキュリティ(セキュリティマネジメント)
・セキュリティ
→SE-Linux?
・Linuxシステム構築
→SE-Linux?
・コンピュータネットワーク科
→CISCO機器系
セミナーを通して講師、杉松先生に感じたこと。
・話好きの技術屋の典型。コンピュータに関したことが好きで好きでたまらない人。
・本セミナーはLPI試験対策として行われたため、間違い易い点などを、非常に細かいところまで丁寧に教えてくれた。繊細さと誠実さを兼ね備えた人。こういう人の作ったシステムはいいものになるような気がする。最後時間をオーバーしながらも注意点を2~3付け足してくれたのは印象的。
→上記2点から、LPI試験に関しての話しかできないのがちょっと残念そうだった。昔の現場での苦労話とか、ネットワークが形成されていく歴史/文化みたいなものももっと話したそうだったし、実際に聞いてみたいと思った。
・ルートドメインサーバが世界には13台ある。
→ほぼ半数がアメリカにある。
→しかも普通の企業の中にぽつんとあるんだよ。
→うれしそうに語る。
→ルートドメインサーバに関しては本を執筆するときに調べたんだ。杉松先生著作の書籍一覧
LPIC-Level2 試験に関して
メモが箇条書きなのでまんま書きます。発言者はすべて杉松先生と考えてください。
各自脳内補完/対応よろしくお願いします。
・カーネルVerは2.4と考えてOK.
・カーネル再構築なんて今はしないよね。
→昔はNIC差し替えだけでも再構築必要だったんだよ。
→当時のマシンはしょぼくてトロいから、帰りがけに再構築かけて帰ったものさ。
→まあ翌日こけてることもあるよね。
・起動に至るまでの一連の流れを覚えようね。
→エラーがどの時点で発生したのか、何が原因なのか、どういう対処でエラーをつぶせるか理解しようね。
・man は英語がいいよ。 option が単語で説明されているから対応して覚えたら動作が見えやすいよね。
・知人に種子島のロケット打ち上げに関わっている人がいるんだけど、Linuxを改良したOSで開発しているらしいよ。
→ソースを読める-原因を解明できるという利点。
・LPIC-201/202はまとめて学習できる点があるよ。試験勉強だし効率良く行こう。
・TCP/IPに関しての知識も一部問われるよ。
→マスタリングTCP/IP 入門編 第4版-杉松先生おすすめの一冊。
→システムはもはやネットワークとは切り離せないよね。
→てか、Linuxってネットワークありきじゃん。
・試験範囲にでてくるサーバは、実際にできるだけ構築してみよう。
→わたし(杉松先生本人)なんか構築してはつぶしてを繰り返したよ。
→わざとトラブルを起こるように設定してみたり。
→どの設定でエラーがでたか、どういう対処で正常動作に戻ったか、自作ノートに細かに記録するんだ。
→それが学習テキストとして最良のものになるよ。
→試験だから参考書だけ覚えるってのも面白くないじゃない?
・スクリプトは名前(変数)を解決(なにが代入されている/いくのか理解)していくことが攻略の近道。
・ハードウェアはRAIDかなー。
→RAID0~5まで全部理解してる?
・バックアップとかわかってるかな?
・あ、ちなみに試験でいうインストールって rpm とか apt-get とかじゃなくて、source からのインストールだよ。
→ディレクトリがそうなってるんだよね。
→apache だと /usr/local か /var/www/html かの違い。
・DNSサーバは BIND だよ。
・Mailサーバは sendmail だよ。主流は POSTFIX だけどね。
→sendmail は設定はまることあるんだよねー。
→これは初心者じゃなくて慣れている人でもそう。最初からやった方が早いんじゃね?ってことよくあるんだ。
・DHCPサーバと、そのセグメントに参加したDHCPクライアントがする一連のやりとりを知っておこう。
・やっぱりサーバ構築する前には全部のServiceを不許可にしてから始めるよね。
→壁の必要なところに、必要な分だけ穴を開けるんだよ。
・アクセス制御もいろいろあるよね。
→TcpWrapper /etc/hosts.allow /etc/hosts.deny
→/etc/named.conf の allow-transfer allow-query blackhole とかもそうだよね。
・BIND /etc/named.conf なんだけど、zoneファイル名はドメインと絡めると管理が楽だよね。
→これは試験に関係ないけど、実際仕事に役立つよ。
→逆引きならzoneファイル名に、わたし(杉松先生)は "rev" を付け足すようにてるよ。
・プライマリとセカンダリは別のセグメントに設置してね。
→共倒れしちゃうからさ。ははは。
・/etc/named.conf は ";" 大事だよ。
→C言語のたしなみがある人は馴染みがあるかな。{}に関しても。
→ただ {...} のブロックの後にも ";" が必要なんだよ。
→×{...} ○{...};
→"};" なんてみたことないよね。不思議だね。
・ちなみに named.conf の名前解決はいろんなことに応用できるように改良されたんだよ。
とりあえずこんな感じかな。
僕は印刷物をみればわかるようなことに興味はなくて、時折でる先生の主観、経験則の方が重要だと思ったので、このような偏りのあるメモになってしまいました。後、全然関係無いんだけど、杖つきながら散歩してたじいさんが一回目の休憩後いつの間にか紛れ込んでいたのには笑った。
オーム社
売り上げランキング: 5308

まとめ方はうまい
ネットワークの基礎を学ぶ上での教科書
辞書としてはかなり有用
第3版との異同
TCP/IPのバイブル以下結果
得点: 720
必修合格点: 500Linux Kernel 87% Filesystem 77% Hardware 100% File and Service Sharing 80% System Maintenance 77% System Customization and Automation 75% Troubleshooting 70%
という感じでした。
見事合格。
LPIC-level2の勉強をしてるんだ。 - 十返舎.comからみて約3ヶ月で半分か。まあまあなペース。
だから資格なんて意味ないんだな。 個人的に役立ったな、と思ったのは awk かな。 好きなコマンドは cut だったんだけど、 awk の方が数段便利。 後はカーネルの再構築なんて僕には特に必要なかった。 そこまでしなきゃならない環境にないので。 んー、 Raid とかも特に自宅で必要になるほどでは無いし、 まだまだそのレベルまで行ってないから。 さっさと LPIC-Level2 Exam 202 も合格して、Ruby に戻りたいです。
翔泳社
売り上げランキング: 61796

これだけで合格はつらいかな
これしかないのですが...
良書だと思いますよ。
レベル2の入門編的一冊
これに頼るしかないついに LPIC-3 もCrammedia.comで問題集が購入できるようになりました。
・117-301 LPIC-3 Core「301 Core Exam」
・117-302 LPIC-3 Specialty 「302 Mixed Environment Exam」
・ITmedia エンタープライズ:LPICレベル3の登場で変動する認定資格事情
ちょっと古い記事です(2007年02月22日に置き換えてご覧ください)が、ここには、
・現在、日本国内におけるレベル2試験の認定者(約4000人)は、レベル1試験の認定者(約1万9000人)の4分の1にも満たない。
・レベル2試験であっても、システム全体を見通せるスキルを想定したものではない。
・レベル3試験「Core」を認定する「LPIC Level3 301 Core Exam」では、LDAPが特に重視されている。
・レベル3試験「Speciality」については今後、分野ごとの試験が登場する予定。
・レベル3試験「Speciality」については当面は混在環境におけるSMB/CIFS、ファイル共有、プリントサービスなどに関する「LPIC Level3 302 Mixed Environment Exam」のみが提供される。
より実務に即した内容を問われると言うことになりそうです。
同時期によく言われていたのが、
「Linux資格LPIC保持者は給料が高い」---LPI CEO Jim Lacey氏:ITpro
ってなわけですが、そうもうまくいかねーだろというのが僕の感想。
だって取るの自体はCrammedia.comがある限り簡単なんだから。
これ以前に取った人とこれから取った人は明らかに違う目で見られちゃう。
LPIのLPICレベル3概要にはこうあります。
■LPI 301 Core Examに合格するためには、受験生は次の条件を満たしていることが望ましい。
・数年間にわたって、さまざまな用途に使用される複数のコンピュータにLinuxをインストールして保守した経験を有していること。・さまざまな技術やオペレーティングシステムを使って統合した経験を有していること。
・エンタープライズレベルのLinux技術者としての経歴を有しているか、またはそのトレーニングを受けていること。(似たような役割の経験を有していることを含む)
・インストール、管理、セキュリティ、トラブルシューティング、保守など、高度なエンタープライズレベルLinuxを知っていること。
・オープンソースツールを使って、キャパシティプランニングを評価し、リソースの問題のトラブルシューティングを行うことができること
・LDAPを使って、Samba、PAM、電子メール、Active DirectoryなどのUnixサービスとWindowsサービスを統合した経歴を有していること
・SambaとLDAPを使って完全な環境を計画、構成、設計、構築、実装できるほか、これらのサービスのキャパシティプランニングとセキュリティの評価もできること。
・BashあるいはPerlでスクリプトを作成できるか、または最低1つのシステムプログラミング言語(Cなど)の知識を持っていること
■LPI 302 Mixed Environment Examに合格するためには、受験生は次の条件を満たしていることが望ましい。
・LPICレベル3「Core」試験について概説している必要スキルと経験を有していること。・Sambaを使って、ユーザー管理、ドメインコントロール、セキュリティ、パフォーマンス調整など、ファイルサービスとプリントサービスをWindowsと統合した経歴を有すること。
・SambaとLDAPを使って完全な環境を計画、構成、設計、構築、実装できるほか、これらのサービスのキャパシティプランニングとセキュリティの評価もできること。
http://lpi.or.jp/lpic3/index.shtmlより引用
僕にはまだまだ遠い話ですな。
で、日報ってのはめんどくさいです。
だからこそ定型部分は Cygwin なりでぱーっとスクリプトにやらせちゃいましょう。
本当はRubyの方が楽ですが、bashが利用できる環境の方が多いと思ったので。
定型部は
* 氏名
* 日付
* 勤務時間
* 業務内容(ルーティン部)
などになると思います。
とりあえず僕が使っているのをアレンジして書いてみます。
ご指摘ありましたらお願いいたします。
#!/bin/bash
name="YN"
working="業務内容"
time_work="09時~18時"
上記に関してはロジックがいらないのでらくちんです。
問題は日付や曜日の部分。
"当日"を表示するのは楽です。けれどもいわゆるIT業界なら、
てっぺんを越してしまう業務の方も多いと思います。
そういった方は大抵出社時の日付、曜日で日報を提出するので、
日報作成のスクリプトを走らせるタイミング(24時過ぎ)では
日付も曜日も"翌日"のもにになってしまうことがあります。
そこをロジックで調整します。
まず、自分が朝の何時までの勤務か考えます。
残業する可能性をふくめた設定にするのがおすすめです。
今回は翌日の06時までであれば、00時(24時)から9時(33時)までに走らせたスクリプトは、
前日の日付、曜日を返すようif文をまじえて設定するようにします。
そのために現在の時刻を取得する変数も設定する必要があります。
time=`date +"%H"`
if ((${time} < 10)) ;then
today1=`date --date '1 days ago' +"%y%m%d"`
today2=`date --date '1 days ago' +"%y年%m月%d日" `
youbi_num=`date --date '1 days ago' +"%w"`
else
today1=`date +"%y%m%d"`
today2=`date +"%y年%m月%d日"`
youbi_num=`date +"%w"`
fi
これでOKです。
そして曜日を数字から月火水木金土の漢字形式にします。
caseが楽だと思います。
case ${youbi_num} in
0) youbi="日" ;;
1) youbi="月" ;;
2) youbi="火" ;;
3) youbi="水" ;;
4) youbi="木" ;;
5) youbi="金" ;;
6) youbi="土" ;;
esac
あとはファイルとして出力させるだけです。
cat <<-END > ${today1}_nippou.txt
${name} ${today2}(${youbi})日報
業務時間 ${time_work}
業務内容 ${working} END
思い出しながらやってたら結構時間かかったりして。
下記のスクリプトをデスクトップなりにおいて実行すると、
同一のディレクトリ/フォルダにyymmdd_nippou.txtが出来ます。
$ . nippou.sh
$ cat ./080319_nippou.txt
YN 08年03月19日(水)日報
業務時間 09時~18時
業務内容 業務内容はここ
という感じ。
#!/bin/bash
#nippou.sh
name='YN'
working='業務内容はここ'
time_work='09時~18時'
time=`date +'%H'`
if ((${time} < 10)) ;then
today1=`date --date '1 days ago' +'%y%m%d'`
today2=`date --date '1 days ago' +'%y年%m月%d日'`
youbi_num=`date --date '1 days ago' +'%w'`
else
today1=`date +'%y%m%d'`
today2=`date +'%y年%m月%d日'`
youbi_num=`date +'%w'`
fi
case ${youbi_num} in
0) youbi="日" ;;
1) youbi="月" ;;
2) youbi="火" ;;
3) youbi="水" ;;
4) youbi="木" ;;
5) youbi="金" ;;
6) youbi="土" ;;
esac
cat <<-END > ${today1}_nippou.txt
${name} ${today2}(${youbi})日報
業務時間 ${time_work}
業務内容 ${working}
END
日経BP社 (2004/11/25)
売り上げランキング: 238420
Sanmba の他にも Ruby を再学習しているところ。
たのしいRuby 第2版 Rubyではじめる気軽なプログラミング
の50ページにこんなソースが。
#read_txt.rb
filename = ARGV[0]
file = open(filename)
txt = file.read
print txt
file.close
これは read_txt.rb の引数(ファイル名)を
・開いて
・読み込んで
・出力して
・閉じる
っていう挙動をします。
read_txt.rbと同じ階層内に下記のようなファイルを置いて、
#abcd.txt
aaa
bbb
ccc
ddd
eee
で実行。
$ ruby read_txt.rb abcd.txt
#=>
aaa
bbb
ccc
ddd
eee
と出力されるわけなんですな。
でもなんかすっと落とし込めないんだよね。
実際に頭に入ってこない。
っていうのも
1. [ filename、file、txt なんて変数三つも使う理由 ]
2. [ もっと人間的な動作で例えられないのかな ]
という二点から。
実際に試してみる。
まずは1. filename、file、txt なんて変数三つも使う理由から。
先述したread_txt.rbでなるべく変数を使わないで書いてみる。
#kaitemita.rb
print open(ARGV[0]).read
open(ARGV[0]).close
で実行する。
$ ruby kaitemita.rb abcd.txt同じやーん。結局は見易さなの? いやいやそんなはずはない。変数使用の理由は絶対にあるはず。 そこで次の項で扱われている、getsメソッドを使用した gets_txt.rb と 変数を使わないバージョンを続けて書いて試してみる。
#=>
aaa
bbb
ccc
ddd
eee
#tsuduketekaita.rb###gets_txt.rb
filename = ARGV[0]
file = open(filename)
while txt = file.gets do
print txt
end
file.closeprint "\n===========","\n"#区切り
###変数なしで書く。
while open(ARGV[0]).gets do
print open(ARGV[0]).gets
end
open(ARGV[0]).close
実行
$ ruby tsuduketekaita.rb abcd.txt
#=>
aaa
bbb
ccc
ddd
eee
===========
aaa
aaa
aaa
aaa
aaa
(ループするのでCtr + Cで終了)
tsuduketekaita.rb:13: Interrupt
なんか挙動が違いますね。
終了時のメッセージを見ると13行目の処理を行っていたとこでしたとな。
これ何回か繰り返してメッセージをみてみるとわかると思いますけど、
とりあえず変数無しバージョンは while のところを延々と回ってるみたいですね。だからループするわけ。
そして "aaa" ばっかり出力されちゃうのは、毎回 open(ARGV[0]).gets しちゃうからなんですね。
つまり新しくファイルオブジェクトを open してから gets を繰り返すから最初の一行しか print されないんだわ。
で、ずっと一行目だから nil にならねーんでループってわけ。
んー納得、と思ったところでひらめき。もしやこういうこと?
#!/bin/bash
a=`date`
date
sleep 10
date
echo ${a}
なーるほどね。実行してみるべし。
おもったより長くなってしまったので
2. [ もっと人間的な動作で例えられないのかな ]
については次のエントリで。
ソフトバンククリエイティブ (2006/08/05)
売り上げランキング: 4000









