1ショットずつしか映ってないけどこれはいい。
A Free Lesson With: Novak Djokovic
天は自ら助くる者を助く
1ショットずつしか映ってないけどこれはいい。
A Free Lesson With: Novak Djokovic
あー全然オプションが覚えられない。覚えられない。
netstat [オプション]
実行システム上のネットワーク状態について様々な情報を表示できるコマンド
| -l | 待ち受け状態のソケットのみを表示 |
| -a | 待ち受け状態によらずすべてのソケットを表示 |
| -c | 情報を毎秒更新して最新状態を表示 |
| -i | ネットワークインターフェースの統計を表示 |
| -r | ルーティングテーブルを表示 |
| -n | ホスト名などを名前解決せずに数字(IP)で表示 |
これに関連して、、、ネットワーク関連のユーティリティコマンドの概要
| ping | ターゲットホストまでの疎通を確認 |
| traceroute | ターゲットホストまでの経路を確認 |
| tcpdump | ネットワークを監視してパケットをキャプチャ |
| nc | TCP/UDPを利用して様々な低レベルの操作を行う(telnet的な) |
| nmap | ネットワークのスキャンを行う |
ログインしているユーザへの情報通知方法
| /etc/issue | ログインプロンプトの手前に表示される内容を設定するファイル |
| /etc/motd | ユーザがシステムにログインした直後に、コンソールに表示される内容を設定するファイル |
| wall コマンド | ログインしているユーザ全員のコンソールに、引数で指定したメッセージを表示 |
| shutdown コマンドの -k オプション | wall と同様にログインしているユーザ全員にメッセージを送る |
※-k オプションを指定した場合にはシャットダウン・再起動などの動作はキャンセル
tcpdump [オプション] [監視対象の条件式]
| host | ダンプ対象とするホストを指定 |
| port | ダンプ対象とするポートを指定 |
| tcp | TCPのパケットを対象とする |
| udp | UDPのパケットを対象とする |
| icmp | ICMPのパケットを対象とする |
| arp | ARPのパケットを対象とする |
オートマウントの動作を設定するためのメイン設定ファイル
/etc/auto.master
nmap [スキャンタイプ] [オプション] 対象
スキャンタイプ(何も指定しないとデフォルトでは TCP SYN スキャン)
| -sT | TCPスキャン |
| -sU | UDPスキャン |
| -sP | Pingスキャン |
オプション
| -p | 続けて対象ポート範囲を指定 |
| -F | 有名ポートを対象とした高速スキャン |
| -O | 対象ホストのOS識別を試みる |
メモリ上に配置する特殊なファイルシステム
tmpfs
OpenVPN のメイン設定ファイル
/etc/openvpn/server.conf
/etc/inittab のアクション指定子
| initdefault | デフォルトランレベルを指定 |
| once | 指定ランレベルになったら一度だけ実行 |
| wait | onceと同様。ただしプロセスの終了を待つ |
| boot | ブート時に実行する |
| bootwait | boot時と同様だが、プロセスの終了を待つ |
| sysinit | bootと同様だが、より先に実行する |
| respawn | プロセスが終了しても自動的に再起動 |
/etc/inittab は以下の形式
ID:ランレベル:アクション指定子:コマンド
sysinit, boot, bootwait はランレベルによらない設定のためランレベルは無視される。
※空欄にしておくらしい。
XFS関連のコマンドのややこしさが異常。。
| xfs_check | XFSをチェックする |
| xfs_admin | XFSの設定を行う |
| xfs_info | XFSの情報を表示する |
| mkfs.xfs | XFSを作成する |
| xfsrestore | バックアップから XFS ファイルシステムの復元を行う |
| xfsdump | XFS ファイルシステムのバックアップを行う |
ソースからのカーネルのビルドとインストール(再構築)の基本的な手順
| 1. 設定を初期化 | make mrproper で設定ファイルを含めてディレクトリ内を初期化。 展開したソースにあらかじめ不適切な設定が含まれている可能性や、 古いカーネルの設定が残っている可能性を考慮し、はじめに必ず実行する。 |
| 2. 設定を行う | 初期化された設定を今回の再構築用に設定する。 make oldconfig など。 ほかに make config で対話的に設定する方法、 make menuconfig でコンソール上のメニューから設定する方法などなど。 |
| 3. ビルドを行う | make もしくは make all とすることで、依存関係の解消、 カーネル本体とモジュールのビルド、一時ファイルの削除が自動で行われる。 |
| 4. システムにインストールする | ビルドを行っただけではシステムに配置されてはいないので、インストールを行う。 通常、make modules_install としてモジュールをインストールしてから、 make install としてカーネル本体をインストールする。 make install によって /boot 以下にカーネルイメージが配置され、 ブートローダに新しいカーネルを使う起動設定が追加される。 |
Youtubeの埋め込みテストもかねて。
今のところ一番わかりやすいと思うサーブの動画。
けっこう前のめりになりやすいので軸をしっかりしようと思った。
全然知らなかったのでメモ。
ncコマンド
TCP/UDP を使って任意の通信を行わせることのできる、汎用性の高いコマンド
もともとnetcatだったらしい。
書式
nc [オプション] ホスト ポート
オプションを指定せずにホストとポートを指定するとtelnetのように対話型になる。
標準出力の内容を送信するのでシェルのパイプで自動実行させることも可能。
$ cat ./commandstring | nc mail.example.com 25
ポートスキャンもできる。
$ nc -vz target.com 100-200
代表的オプション
| オプション | 説明 |
| -v | 接続に成功した際のログメッセージなどを出力させるためのオプション |
| -z | 接続のみを試み、データを送信することはしないというオプション |
| n1-n2 | ポートの範囲を指定 |
ncとnmapでポートスキャンができる。
■参考URL
ncコマンド (netcat)
WordPressで手軽に表(table)を作りたい。そんなときのメモ。
今までなにも考えずに記事を書いてきたけど、表組みは無かった。
デフォルトでは表組み用のボタンが無いので、表作りたいときに直で
タグ打つのは無いなーと思ってプラグイン探したら発見。
「TinyMCE Advanced」プラグインで追加できるツールの使い方
WordPressで表組み(テーブル)を作るテキストエディターツール解説
管理画面で「プラグイン」⇒「新規追加」⇒「検索」⇒「TinyMCE Advanced」で検索すればでてくる。
通常通りFTPやらでインストールができます。
■設定画面
■表関連を追加した投稿の編集画面の様子
■表組み実験
| こ | れ | で | 表 | が | か | ん | た | ん | に | つ | く | れ | る | ぜ | ! |
| 色 | 々 | 他 | の | 入 | 力 | も | 出 | 来 | る | し | い | い | ね | ! | ! |
zenbackは、たった1行のコードを埋めるだけで、ブログ記事ののPVが10%向上する魔法のサービス。しかも無料!
本当かな~と疑いつつとりあえず導入。
上記サイトではMTへの導入だったけど
このブログはWordpressなのでWordpress用
に簡単なプラグインが無いか調べてみたらやっぱりあった。
ブログ記事下にzenbackを表示する簡単方法 WordPressプラグイン「EZ zenback」
プラグインの検索で「EZ zenback」を検索してインストール
↓
設定でzenbackのタグを埋め込み
↓
その他項目の調整
↓
設定の保存で終了
zenbackのエリアがちゃんと表示されるには時間がかかるみたい
なので気長に待つ。
./jqをインストールする
MOONGIFT:JSONを使った開発のお供にどうぞ「jq」
JSONデータ構造を見やすくしてくれるコマンド。
jq is like sed for JSON data – you can use it to slice and filter and map and transform structured data with the same ease that sed, awk, grep and friends let you play with text.
■環境確認
# cat /etc/redhat-release CentOS release 5.7 (Final) # uname -a Linux xxxxxxx.com 2.6.32-042stab049.6 #1 SMP Mon Feb 6 19:16:12 MSK 2012 i686 i686 i386 GNU/Linux
■ソースのダウンロード(今回の環境ではDownload source)
# cd /usr/local/src/ # wget http://stedolan.github.com/jq/download/source/jq.tgz --2012-11-02 14:02:39-- http://stedolan.github.com/jq/download/source/jq.tgz stedolan.github.com をDNSに問いあわせています... 204.232.175.78 stedolan.github.com|204.232.175.78|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 450943 (440K) [application/octet-stream] `jq.tgz' に保存中 100%[===================================================================================================================>] 450,943 339K/s 時間 1.3s 2012-11-02 14:02:41 (339 KB/s) - `jq.tgz' へ保存完了 [450943/450943]
■ソースの展開
# tar xzvf jq.tgz stedolan-jq-95a0074/ stedolan-jq-95a0074/.gitignore .....ずらずら..... stedolan-jq-95a0074/testdata
■フォルダに入ってmake
# cd stedolan-jq-95a0074/ # ls COPYING builtin.h compile.h forkable_stack.h jv.c jv_parse.c jv_unicode.h lexer.l opcode.h parser.gen.info Makefile bytecode.c docs frame_layout.h jv.h jv_parse.h jv_utf8_tables.gen.h locfile.h opcode_list.h parser.h README.md bytecode.h execute.c gen_utf8_tables.py jv_dtoa.c jv_print.c lexer.gen.c main.c parser.gen.c parser.y builtin.c compile.c execute.h jq_test.c jv_dtoa.h jv_unicode.c lexer.gen.h opcode.c parser.gen.h testdata # make gcc -Wextra -Wall -Wno-missing-field-initializers -Wno-unused-parameter -std=gnu99 -ggdb -Wno-unused-function -O -DJQ_DEBUG=0 -o jq parser.gen.c lexer.gen.c opcode.c bytecode.c compile.c execute.c builtin.c jv.c jv_parse.c jv_print.c jv_dtoa.c jv_unicode.c main.c # ll 合計 860 -rw-rw-r-- 1 root root 2957 10月 22 03:52 COPYING .... -rwxrwxr-x 1 root root 292707 11月 2 14:04 jq ....
■「jq」が出来たので「/usr/local/bin/」にシンボリックを貼ってコマンドを登録
# cd /usr/local/bin/ # ln -s /usr/local/src/stedolan-jq-95a0074/jq # ll 合計 5932 ..... lrwxrwxrwx 1 root root 37 11月 2 14:05 jq -> /usr/local/src/stedolan-jq-95a0074/jq .....
■サイトのサンプルを試す
# curl 'http://search.twitter.com/search.json?q=json&rpp=5&include_entities=true' | jq '.results[0]'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 5192 100 5192 0 0 11854 0 --:--:-- --:--:-- --:--:-- 2708k
{
"to_user_name": null,
"to_user_id_str": "0",
"to_user_id": 0,
"id": 264231272392581120,
"geo": null,
"from_user_name": "Chris Johnson",
"from_user_id_str": "911210857",
"from_user_id": 911210857,
"from_user": "CHRISpy_Json",
"entities": {
"user_mentions": [],
"urls": [],
"hashtags": [
{
"indices": [
103,
121
],
"text": "accomplishedtweet"
}
]
},
"created_at": "Fri, 02 Nov 2012 05:03:39 +0000",
"id_str": "264231272392581120",
"iso_language_code": "en",
"metadata": {
"result_type": "recent"
},
"profile_image_url": "http://a0.twimg.com/profile_images/2777986607/635aaa3cc2f805fb9f642d6e616e3ce0_normal.jpeg",
"profile_image_url_https": "https://si0.twimg.com/profile_images/2777986607/635aaa3cc2f805fb9f642d6e616e3ce0_normal.jpeg",
"source": "<a href="http://twitter.com/download/iphone">Twitter for iPhone</a>",
"text": "It's 1 in the morning, i just finished all of my hw, i got to skype ailise and i'm not even that tired #accomplishedtweet",
"to_user": null
}
出来たー
■カーネルの再構築を考慮するケース
・必要なデバイスドライバがカーネルに含まれていない
・使用しているハードウェアに最適化したカーネルを利用したい
・カーネルの最新の機能を利用したい
■カーネルコンパイル(再構築)の流れ
ハードウェアの確認
必要な機能の確認
カーネルの確認
コンパイルに必要なツールの準備
カーネルソースの入手
カーネルソースコードの展開
パッチの適用
既存カーネルの設定を反映させる
/usr/src/linuxへのシンボリックリンクを張る
カーネルを設定する
コンパイルを実行する
カーネルに動的に組み込むモジュール(ローダブル・モジュール)を/lib/modules/[カーネルバージョン]以下に格納する
カーネルに導入する
ブートローダに登録する
システムを再起動して起動を確認する
■メモ
・カーネルコンパイルの難所はカーネル・パラメータの指定内容とコンパイル時の依存関係
・静的に組み込む、組み込まない、動的に組み込むモジュールがある
・設定に迷ったらモジュールにする
・入手したカーネルは慣習として/usr/srcディレクトリに展開する
・カーネル・パラメータの設定は「menuconfig」を推奨?
・カーネルを再構築する場合はカーネルモジュールもカーネルにあわせてコンパイルしなおす必要がある
・kernel.orgで配布されているディストリビュータの手が入っていないカーネルのことをvanilla kernelという
■参考URL
Linuxカーネル・コンパイル入門 前編
Linuxカーネル・コンパイル入門 後編
The Linux Kernel Archives(カーネル開発グループが配布しているオリジナルのカーネル・ソース)
■自分でコンパイルしたログ
◇フォルダ移動 # cd /usr/src/ ◇カーネルソースの取得 # wget http://www.kernel.org/pub/linux/kernel/v2.6/longterm/v2.6.32/linux-2.6.32.60.tar.bz2 ◇ソース展開 # tar xjvf linux-2.6.32.60.tar.bz2 ◇フォルダに入る # cd linux-2.6.32.60 ◇現在のカーネルの設定をコピー # cp /boot/config-2.6.18-308.el5 .config ◇現在のカーネルの設定を新しい設定に反映させる # make oldconfig | tee oldconfig.log ◇カーネルコンフィギュレーション これやら無いと起動時にkernel panic出てびっくりした。 # make menuconfig General setup ---> [*] enable deprecated sysfs features to support old userspace too ◇設定が反映されているか確認(yになってることを確認) # cat .config | grep CONFIG_SYSFS_DEPRECATED CONFIG_SYSFS_DEPRECATED=y CONFIG_SYSFS_DEPRECATED_V2=y ◇makeする(カーネルとカーネルモジュールのコンパイル) # make | tee make.log ◇カーネルモジュールのインストール # make modules_install | tee modules_install.log ◇カーネルのインストール # make install | tee install.log ◇起動の順番を変える(default値の変更) # vim /boot/grub/menu.lst ◇再起動 # reboot ◇確認 # uname -r 2.6.32.60
※LPICレベル2の順番だと出来なかったので以下のサイトを参考に実際にコンパイルを行った。
centosのkernel再構築 2.6.18→2.6.37(stable)
vol.71は楽しい記事が多いなぁ~。
WEB+DB PRESSでSymfonyではじめるDIを読んだので実際に写経する。
■まずphpのバージョン確認(Composerの兼ね合いで。。)
$ php -v PHP 5.3.3 (cli) (built: Jul 3 2012 16:40:30) Copyright (c) 1997-2010 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
■Composerのインストール
$ curl -s http://getcomposer.org/installer | php #!/usr/bin/env php Some settings on your machine may cause stability issues with Composer. If you encounter issues, try to change the following: Your PHP (5.3.3) is quite old, upgrading to PHP 5.3.4 or higher is recommended. Composer works with 5.3.2+ for most people, but there might be edge case issues. Downloading... Composer successfully installed to: /path/symfony_DI/composer.phar Use it: php composer.phar
バージョンで文句言われたけど無視。
■Composer用の設定ファイル作成
$ vim composer.json
{
"require":{
"symfony/dependency-injection": "2.1.*",
"symfony/config": "2.1.*",
"symfony/yaml": "2.1.*"
}
}
$ ll total 632 drwxrwxr-x 2 takeuchi takeuchi 4096 Oct 31 15:21 ./ drwxrwxrwx 8 takeuchi takeuchi 4096 Oct 31 15:18 ../ -rw-rw-r-- 1 takeuchi takeuchi 118 Oct 31 15:21 composer.json -rwxr-xr-x 1 takeuchi takeuchi 631264 Oct 31 15:18 composer.phar*
■依存パッケージの取得
$ php composer.phar install
Loading composer repositories with package information
Installing dependencies
- Installing symfony/dependency-injection (v2.1.3)
Downloading: 100%
- Installing symfony/config (v2.1.3)
Downloading: 100%
- Installing symfony/yaml (v2.1.3)
Downloading: 100%
Writing lock file
Generating autoload files
$ ll
total 644
drwxrwxr-x 3 takeuchi takeuchi 4096 Oct 31 15:23 ./
drwxrwxrwx 8 takeuchi takeuchi 4096 Oct 31 15:18 ../
-rw-rw-r-- 1 takeuchi takeuchi 118 Oct 31 15:21 composer.json
-rw-rw-r-- 1 takeuchi takeuchi 4939 Oct 31 15:23 composer.lock
-rwxr-xr-x 1 takeuchi takeuchi 631264 Oct 31 15:18 composer.phar*
drwxrwxr-x 4 takeuchi takeuchi 4096 Oct 31 15:23 vendor/
■依存のないクラスの実装とかそれ以降のコード
$ vim initial.php
namespace App{
class Controller{
private $memberRegistration;
private $router;
private $templating;
public function __construct(){
echo __METHOD__.PHP_EOL;
}
public function registerAction(){
echo __METHOD__.PHP_EOL;
$memberData=$this->getRequestData();
$this->memberRegistration->register($memberData);
$html=$this->templating->render('register');
return $html;
}
public function setMemberRegistration(\Domain\MemberRegistration $memberRegistration){
echo __METHOD__.PHP_EOL;
$this->memberRegistration=$memberRegistration;
}
public function setRouter(\App\Router $router){
echo __METHOD__.PHP_EOL;
$this->router=$router;
}
public function setTemplating(\App\Templating $templating){
echo __METHOD__.PHP_EOL;
$this->templating=$templating;
}
private function getRequestData(){
return array();
}
}
class Templating{
private $router;
public function __construct(){
echo __METHOD__.PHP_EOL;
}
public function render($templateName){
echo __METHOD__.PHP_EOL;
$url=$this->router->generateUrl('test');
}
//セッターインジェクション
public function setRouter(\App\Router $router){
$this->router=$router;
}
}
class Router{
public function __construct(){
echo __METHOD__.PHP_EOL;
}
public function generateUrl(){
echo __METHOD__.PHP_EOL;
}
}
}
namespace Domain{
class MemberRegistration{
public function __construct(){
echo __METHOD__.PHP_EOL;
}
public function register($memberData){
echo __METHOD__.PHP_EOL;
}
}
}
namespace{
require_once 'vendor/autoload.php';
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;
$container=new ContainerBuilder();
$container->register('app.controller', '\App\Controller')
->addMethodCall('setTemplating', array(new Reference('app.templating'),))
->addMethodCall('setRouter', array(new Reference('app.router'),))
->addMethodCall('setMemberRegistration', array(new Reference('domain.member_registration'),));
$container->register('app.templating', '\App\Templating')
->addMethodCall('setRouter', array(new Reference('app.router'),));
$container->register('app.router', '\App\Router');
$container->register('domain.member_registration', '\Domain\MemberRegistration');
$controller=$container->get('app.controller');
$controller->registerAction();
}
■実行結果
$ php initial.php App\Controller::__construct App\Templating::__construct App\Router::__construct App\Controller::setTemplating App\Controller::setRouter Domain\MemberRegistration::__construct App\Controller::setMemberRegistration App\Controller::registerAction Domain\MemberRegistration::register App\Templating::render App\Router::generateUrl
このあとはYAMLにしたりダンプで再利用とか。
■参考URL
PHPの外部ライブラリの管理にComposerを使う
WEB+DB PRESSのvol.71のHeroku特集を見てRailsで試してみたけど
PHPも動くらしいのでやってみた。
Play framework2を試すはずなのに脱線しまくり。
ではHerokuでPHPを動かしてみる。
Herokuのアカウント持ってて、herokuコマンドインストール済みのログイン済みで以下。
$ mkdir myapp
$ cd myapp/
$ git init
Initialized empty Git repository in /path/myapp/.git/
$ vim index.php
<?php echo "Hello Heroku!!";
phpinfo();
?>
$ git add .
$ git commit -m "first commit"
[master (root-commit) 024c43b] first commit
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 index.php
$ heroku create --stack cedar
Creating evening-chamber-8448... done, stack is cedar
http://evening-chamber-8448.herokuapp.com/ | git@heroku.com:evening-chamber-8448.git
Git remote heroku added
$ git push heroku master
Counting objects: 3, done.
Writing objects: 100% (3/3), 252 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
-----> Heroku receiving push
-----> PHP app detected
-----> Bundling Apache version 2.2.22
-----> Bundling PHP version 5.3.10
-----> Discovering process types
Procfile declares types -> (none)
Default types for PHP -> web
-----> Compiled slug size: 9.5MB
-----> Launching... done, v4
http://evening-chamber-8448.herokuapp.com deployed to Heroku
To git@heroku.com:evening-chamber-8448.git
* [new branch] master -> master
今回であれば以下にブラウザでアクセスすれば表示されるはず(もう消したけど)
http://evening-chamber-8448.herokuapp.com/
すっごい簡単。。
※index.php置かないと
-----> Heroku receiving push ! Heroku push rejected, no Cedar-supported app detected To git@heroku.com:laxherokuphptest.git ! [remote rejected] master -> master (pre-receive hook declined) error: failed to push some refs to 'git@heroku.com:laxherokuphptest.git'
とか言われるので注意。
で実際にphpinfoを見てみるとmbstringが無いのでググって調べる。
HerokuのBuildpackを利用してmbstringが有効なPHPサーバを立ててみた
buildpackを使ってみればいいのか。
ということでもう一度再挑戦。
$ mkdir myapp
$ cd myapp/
$ git init
Initialized empty Git repository in /path/myapp/.git/
$ vim index.php
<?php echo "Hello Heroku!!";
phpinfo();
?>
$ git add .
$ git commit -m "first commit"
[master (root-commit) 1dca1f5] first commit
1 files changed, 5 insertions(+), 0 deletions(-)
create mode 100644 index.php
$ heroku create --buildpack https://github.com/winglian/heroku-buildpack-php -s cedar
Creating stark-wildwood-1510... done, stack is cedar
BUILDPACK_URL=https://github.com/winglian/heroku-buildpack-php
http://stark-wildwood-1510.herokuapp.com/ | git@heroku.com:stark-wildwood-1510.git
Git remote heroku added
$ git push heroku master
Counting objects: 3, done.
Writing objects: 100% (3/3), 261 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
-----> Heroku receiving push
-----> Fetching custom git buildpack... done
-----> PHP app detected
-----> Extracting Apache 2.4.3 PHP 5.4.8 build 2.0-a4
-----> from http://vulcan-wlian.herokuapp.com/output/b8bace2a-2a8e-4441-acc3-eb8e6ad608a5
Creating Slug Identifier file with id: c24ac748141520640ed3220f65e2cde0
-----> Discovering process types
Procfile declares types -> (none)
Default types for PHP -> web
-----> Compiled slug size: 10.3MB
-----> Launching... done, v5
http://stark-wildwood-1510.herokuapp.com deployed to Heroku
To git@heroku.com:stark-wildwood-1510.git
* [new branch] master -> master
mbstring入ったーbuildpackすげー。
というかこのbuildpack PHP5.4.8だし
herokuでPHP面白いかも。
こんなのも見つけた。