« 2005年09月 | メイン | 2005年11月 »

2005年10月24日

rsync

便利なrsync manページが英語なので他から転載!あくまでも個人用!

-v, --verbose 転送情報を詳しく表示
-q, --quiet 転送情報を表示しない
-c, --checksum 常にチェックサムを行う
-a, --archive アーカイブモード(-rlptgoD オプションと同義)
-r, --recursive ディレクトリで再帰的に実行する
-R, --relative 相対パス名を使う
-b, --backup バックアップを作成する (デフォルトで ~ が付く)
--suffix=SUFFIX バックアップのサフィックスを変更
-u, --update アップデートのみ許可 (上書き禁止)
-l, --links ソフトリンクを維持する
-L, --copy-links ファイルのようにソフトリンクを扱う
--copy-unsafe-links 送信側ツリー外のリンクをコピー
--safe-links 受信側ツリー外のリンクを無視
-H, --hard-links ハードリンクを維持する
-p, --perms パーミッションを維持する
-o, --owner オーナーを維持する (root のみ)
-g, --group グループを維持する
-D, --devices デバイスを維持する (root のみ)
-t, --times タイムスタンプを維持する
-S, --sparse 密度の低いファイルを効率的に扱う
-n, --dry-run 実行時の動作だけを表示
-W, --whole-file rsync アルゴリズムを使わない
-x, --one-file-system 再帰的に実行された時にファイルシステムの境界を横断しない
-B, --block-size=SIZE rsync アルゴリズムのチェックサムブロックサイズの制御(default 700)
-e, --rsh=COMMAND rsh の代替を指定
--rsync-path=PATH リモートのマシーンで rsync のコピーへのパスを指定
-C, --cvs-exclude システム間で転送したくない広範囲のファイルを除外(CVSの方法と同じ)
--delete 送信側にないファイルを削除
--delete-excluded 受信側にある exclud ファイルも削除
--partial 転送途中のファイルを保存します
--force ディレクトリが空でなくても削除
--numeric-ids ユーザとグループの id 番号を転送して、転送後にマッピング
--timeout=TIME IO タイムアウトを設定(秒)
-I, --ignore-times タイムスタンプとファイルサイズのチェックをしない
--size-only タイムスタンプのチェックをしないで、ファイルサイズのチェックだけをする
 -T --temp-dir=DIR tmp ファイルのディレクトリを指定
--compare-dest=DIR 受信側のファイルと比較するための追加ディレクトリ
  -z, --compress 受信ファイルを圧縮compress file data
--exclude=PATTERN パターン一致するファイルを除外
--exclude-from=FILE ファイルに記述されたパターンと一致するファイルを除外
--include=PATTERN パターン一致するファイルを除外しない
--include-from=FILE ファイルに記述されたパターンと一致するファイルを除外しない
--version rsync のバージョンを表示する
--daemon rsync をデーモンとして走らせる
--config=FILE 別の rsyncd.conf ファイルを指定
--port=PORT 別の rsync ポート番号を指定
--stats rsync アルゴリズムの転送効率を表示
--progress 転送中の情報を表示
--log-format=FORMAT ログフォーマットを指定
--password-file=FILE ファイルからパスワードを得る
 -h, --help このヘルプを表示する

投稿者 muuming : 17:36 | コメント (0)

touch

-a file のアクセス時刻のみを変更する。

-c file を作成しない。

-m file の修正時刻を変更する。

-r ref_file
ref_file で指定したファイルの時刻を使い変更する。
-t time
time で指定した時刻を使い変更する。引数は次のような明確な意味を持つ10進数の形式で指定する。
[[CC]YY]MMDDhhmm[.SS]


他にもあるぽん 詳しくはman見よう

投稿者 muuming : 13:28 | コメント (0)

2005年10月17日

シングルモード起動 ランレベル1

GRUB で シングルユーザーモード 『ランレベル1』でのログインのしかた。
まさかの時のために、たいへん参考になリましたので写しを投稿します。

GRUBでは、最初の画面が表示されたところで[E]キーを押す。
複数のOSが登録されている場合は、起動したいOSを選択してから
[E]キーを押す。

選択したOSの起動コマンドが表示されるので、「kernel~」の行を選択して、
再び[E]キーを押す。
OSの起動コマンド画面。「kernel~」の行を選択して[E]キーを押す

起動コマンドの編集画面になるので、コマンドの末尾に
「 single」(先頭にスペースを入れる)と入力して
[Enter]キーを押す。
起動コマンドの編集画面。末尾に「 single」と入力して
[Enter]キーを押す

すると、先ほどの起動コマンド画面に戻る。「kernel~」の行末に
「 single」が追加されていることを確認したら[b]キーを押す。
これで、シングルユーザーモードによる起動が始まる。

投稿者 muuming : 18:00 | コメント (0)

2005年10月14日

リファレンス

strictなどでグローバル変数を使わない場合、サブルーチンやクラス側では
わざわざ値を渡せしてあげないと、受け渡しが出来ないらすいぃ。

それは、変数名がかぶったりする、危険性を回避するため かな?

でもいちいち引き渡したりするのが、面倒なときがある。
ので、 リファレンス変数でメモリの番地を引き渡す事ができる。
これは便利

C言語ではポインタっていうんだって

使い方 変数(スカラーでもハッシュでもひいてはリファレンス変数自体でもOK)の前に#をつけるだけ。

反対にリファレンス変数から値自体を取り出したりするときは $hogeをリファレンス変数とすると
スカラー変数のリファレンス変数なら $moto = $$hoge
ハッシュの場合 %moto = %$hoge
配列(リスト)の場合 @moto = @$hoge
で 元の値がとれまっする (デリファレンスという)

------------------------------------------------------------
$word = "A";
$ref_word = \$word;

print "リファレンス $ref_word
";

print "リファから参照 $$ref_word";
------------------------------------------------------------

投稿者 muuming : 17:52 | コメント (0)

変数に値代入時の変則的な?書き方

変数に条件毎に代入したいときは

$hoge = (($hoge eq "0") ? "shin": "gi" );

$hoge が 0の場合 shin を代入 偽の場合 gi を代入。

これは便利かもかも

投稿者 muuming : 17:45 | コメント (0)

2005年10月13日

sprintf

print sprintf( "%02d", $num );
こんな感じで形式を指定して表示ね

以下 形式
%c 文字 -Character
%d 10進数 -Deximal
%e 浮動少数(指数形式) -Exponential
%E 浮動少数(大文字のEを使った指数形式)
%f 浮動小数(固定小数点形式) -Floating
%g 浮動小数(浮動少数または指数形式のうち、少ないスペースで表現できる方)
%G %g の指数表示をEにしたもの
%ld 倍精度10進数 -Long
%lo 倍精度8進数
%lu 倍精度符号なし10進数
%lx 倍精度16進数
%n すでに出力した文字数を次の変数に格納
%o 8進数 -Octal
%p ポインタ (16進数での値のアドレス)
%s 文字列 -String
%u 符号なし10進数 -Unsigned
%x 符号なし16進数 -heXadecimal
%X %x と同じだが大文字を使う

投稿者 muuming : 17:49 | コメント (0)

配列の要素数

@hoge という配列があったら
$num=$#hoge

で配列の最後の数字がとれる

print $hoge[$#hoge];

これで配列の最後の要素が取れます。

投稿者 muuming : 17:06 | コメント (0)

$::LOG_DIR_PATH 変数?

変数のうち定義ファイルなどでPG内にて変更をしない定数をこんな形の変数に
入れているだけらしい。取り決めだって。

投稿者 muuming : 13:12 | コメント (0)

コンストラクタ

オブジェクト指向言語で作成したプログラムにおいて、データとそれを操作するための手続きを一体化した「オブジェクト」の生成時に呼び出される特殊な関数。オブジェクトが扱うデータの初期化などをここで行なう。

投稿者 muuming : 13:11 | コメント (0)

スーパークラスの継承

@SESSION::ISA = qw(LOG);

スーパークラスで定義したメソッドは、そのままサブクラスで使うことができるんだ。また、上書きしちゃうこともできる。

package ClassA; というのがあって
中にnew print_x というメソッドがあったとして

@ISA = qw ( ClassA );

クラスBを以下のように書けば敬称できるらしいが よーわからんの

# ClassB のコンストラクタ
sub new {
my $class = shift;

# ClassA のコンストラクタを呼び出す
my $self = new ClassA;
return bless $self;
}

投稿者 muuming : 13:05 | コメント (0)

shift 関数 unshift関数

リストの先頭要素を取り除いたり 先頭に入れたり

@menu = ("ラーメン","チャーハン","ぎょうざ")
shift @menu

これで@menu は@menu=("チャーハン","ぎょうざ")へ

$del = shift @menu
とすれば $del は ラーメン

unshift "コーラ" @menu で
@menu の先頭に コーラ が入るっと

投稿者 muuming : 10:54 | コメント (0)

環境変数

$ENV{'環境変数名'}; で環境変数がとれる

CONTENT_LENGTH 標準入力に格納された、POSTによるフォームデータのバイト数を格納している。
GATEWAY_INTERFACE Webサーバーが実行しているCGIのバージョンを格納している。大抵はCGI/1.1である。
HTTP_ACCEPT Webブラウザが直接扱えるContent-typeの一覧。
HTTP_COOKIE クッキー情報を格納している。
HTTP_HOST ドメイン名を格納している。
HTTP_REFERER CGIを起動したWebページのURLを格納している。
HTTP_USER_AGENT CGIのページを要求したWebブラウザの情報。WebブラウザとOSを特定できるような情報を格納している。
PATH パスを格納している。
QUERY_STRINGS GETにおけるWebサーバーに送られる情報が格納されている。URlにおける「?」の後ろの部分を格納している。
REMOTE_ADDR 訪問者のIPアドレスを格納している。
REMOTE_HOST 訪問者のホスト名を格納している。ただし、ホスト名が分からない場合は、IPアドレスを格納している。
REQUEST_METHOD スクリプトへのデータの受け渡し方法が格納されている。GETかPOST
SCRIPT_NAME CGIスクリプト名(URL)を格納している。
SERVER_ADMIN Webサーバーの管理者に関する情報を格納している。
SERVER_NAME CGIスクリプトを実行しているマシンのホスト名、またはIPアドレスを格納している。
SERVER_PROTOCOL Webサーバーが実行しているHTTPプロトコルのバージョンを格納している。大抵はHTTP/1.0である。
SERVER_PORT Webサーバーが使用しているTCP/IPのポート番号を格納している。大抵は80である。
SERVER_SOFTWARE CGIスクリプトを起動したWebサーバーの名称が格納されている。

$ENV{"HTTP_COOKIE"} で実際どんな値が取れるのか?

1、クッキーのセット
-------------------------------------------------------------------------------
print 'Set-Cookie: CookieTest1=%83e%83X%83g; expires=Tue, 01-May-2001 11:32:58 GMT;';
print 'Set-Cookie: CookieTest2=%83e%83X%83g; expires=Tue, 01-May-2001 11:32:58 GMT;'
print 'Content-Type: text/html',"\n";
print "\n";
print "以下、HTMLが続く\n";
----------------------------------------------------------------------

セットの形式は
Set-Cookie: クッキー名=クッキー値; expires=有効期限; domain=ドメイン名(サーバ名); path=パス; secure

んでもって $cookie=$ENV{"HTTP_COOKIE"}
の値は
CookieTest1=%83e%83X%83g%82P; CookieTest2=%83e%83X%83g%82Q

と;刻みのもの

値はURLエンコードされている 以下エンコードスクリプト
-----------------------------------------------------------------------------
$CookieValue = 'テスト';
$CookieValue =~ s/([^\w\=\& ])/'%' . unpack("H2", $1)/eg;
$CookieValue =~ tr/ /+/;
-----------------------------------------------------------------------

以下デコードスクリプト
-----------------------------------------------------------------------------
$CookieValue =~ s/\+/ /g;
$CookieValue =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
-------------------------------------------------------------------------------
まぁ これは◎覚えというかそういうもんだと思うしか・・・・

投稿者 muuming : 10:30 | コメント (0)

2005年10月12日

ローカル変数 my と local

ローカル変数 my と local があるがこの違い

表面上は使い方に違いはないが、処理のされ方に違いあり。
local ダイナミックスコープ変数 と呼びます。そして、local を使って変数を宣言することをダイナミックスコープ宣言と呼びます。

my を使って定義された変数は、レキシカルスコープ変数 と呼びます。そして、my を使って変数を宣言することをレキシカルスコープ宣言と呼びます。

local では、変数名は別々に保持されません。言い換えると、local は、グローバル変数に一時的な値を付けるといえます。Perl 内部では、それぞれの $var は、同じ変数として認識しており、コードの場所によって、値を付け替えるという作業をしています。そしてどこからその変数が呼び出されたかによって、適用する値が異なってくるのです。それがダイナミックスコープと呼ばれるゆえんです。

だそうです。
myはperl5から使えるそです。メモリの使い方かな?

投稿者 muuming : 19:39 | コメント (0)

use Jcode;

○ 構文

use Jcode;

Jcode::convert(\$str[, $outcode, $incode, $option]);
→ $str を $outcode で指定された文字コードに変換。
  旧来の方式だが jcode.pl を置き換える場合これが一番手っ取り早い。

$str = Jcode($str)->[sjis|euc|jis|utf8];
→ $str を指定された文字コードに変換(※コード名は必ず定数で指定)

$length = $Jcode->jlength();
→ 文字列の「日本語での」長さを返す。

以下、$j=Jcode->new($str[, $incode]); 後に使うもの:

$j->euc; ... EUCに変換
$j->jis; ... JISに変換
$j->sjis; ... SJISに変換
$j->ucs2; ... UCS2に変換
$j->utf8; ... UTF8に変換
$j->h2z([$keep_dakuten]); ... 半角カナを全角カナに直す
(※$keep_dakuten を立てると濁点が単一文字として残される(例)ガ→カ゛)
$j->tr($from, $to); ... 日本語(EUC)を含む文字の置換。$j->nmatch でマッチ件数を取り出せる。
$j->set($str[, $incode]) ... 文字列を$strに変更

はい全部パクッてます。

投稿者 muuming : 19:03 | コメント (0)

use CGI;

フォームからのデータの受け渡し用の便利くんのようです。
-------------------------------------------------
use CGI;
my $query = CGI->new;
my $user = $query->param('user');
-------------------------------------------------

これで フォームの user というフィールドに入れられた値が $user に入るらしい。

便利ね

全てのパラメータ名を取得するには、param()を引数なしで呼びます。
----------------------------------------------------------------------------
use CGI;
my @params = $query->param();
foreach my $param (@params) {
print $param, "\t", $query->param($param), "\n";
}
-----------------------------------------------------------------------------
うーん 便利


同様に、Cookieを取得するにはcookieというメソッドを使う

----------------------------------------------------------------------------
use CGI;
my $query = CGI->new;
my $session = $query->cookie('session_id');
----------------------------------------------------------------------------


CGIモジュールによるアップロード・ファイルの受け取りとかもできるそうな
----------------------------------------------------------------------------

use CGI;
my $buffer;
my $query = CGI->new;
my $file = $query->param('file');
my $file_name = ($file =~ /([^\\\/:]+)$/) ? $1 : 'uploadedd.bin';
open(OUT, ">$file_name") or die(qq(Can't open "$file_name".));
binmode OUT;
while (read($file, $buffer, 1024)) {
print OUT $buffer;
}
close OUT;
---------------------------------------------------------------------------------------


ちとよーわからんが まあとで・・・

投稿者 muuming : 18:36 | コメント (0)

use strict;

use strict;

これなんだ・・・・
strict  厳しい; 厳密な; 絶対的ならしい(英語は

strict - 安全ではないコンストラクトを制限する Perl プラグマ

どうやら変数の扱いを厳しくするものらしい。
、"subs"、"vars"、"refs" の 3つの制約
use strict 'refs';

use strict 'vars';

use strict 'subs';

内容はわかり次第かきまそ

#今のところの理解
変数定義しないと変数が使えない
ソフトリファレンスが使えない
  ソフトリファレンス $NAME="MURA"
            ${$NAME}="HOGE" → これは $MURA="HOGE" と同等
  これがソフトリファレンスらしいが、使うとメモリを食うので使わないほうが

投稿者 muuming : 18:26 | コメント (0)

KCatch.pm

perlは良くわからないので、他のサイトの転載ばかりになるでしょう!

まずは、KCatch.pm

KCatch.pm ファイルをウェブサーバの 動作するCGIと同じディレクトリ(または @INC なディレクトリ)にアップロード

動作させるCGIに一行加える
---------------------------------------------------------
#!/usr/bin/perl

use KCatch;  #加える
うんたらかんたら ・・・・
---------------------------------------------------------

これで、CGI スクリプト実行中のエラーだけでなく HTTPヘッダを出力する前に発生したエラーについても捕捉らしい。

便利いいのあるのね・・・・

んで、代表的な使い方

use KCatch qw( source );
開発時に便利ですが、一般公開後に何らかのエラーが発生した場合、一般ユーザにもコードが見えてしまう。公開前には外そうねとの事。

投稿者 muuming : 18:20 | コメント (0)

2005年10月11日

expr 計算 掛け算*の場合

expr 計算 掛け算*の場合
expr 45 * 55 では エラーになる

そりゃそうだ * でひっかかる。 でも以外に忘れる

expr 45 \* 55 でエスケープしないとね

投稿者 muuming : 19:28 | コメント (0)

2進数 16進数 10進数 変換

10進数 → 16進数
printf %x 255 結果 ff


16進数から 10進数
print %d 0xff 結果 255

シェルでは16進数の初めには ゼロ エックスを つけるらすぃ 知らなかった・・・


2進数はなんとつけるのかいな・・

投稿者 muuming : 17:21 | コメント (0)

FTP 通常モードとPASVモード

FTPの通常モードとPASVモードの違いについて

1、通常モード
   サーバの21番ポートに制御用のコネクションを確立 
   このコネクションは切断するまで確立されたまま
  (192.168.1.88 ポートランダム → サーバIP ポート21)
   内容はこんな感じ
----------------------------------------------------------------------------------
USER user_ID
PASS password
CWD /hoge
XPWD
CWD /hoge/hoge
PORT 192,168,1,88,7,91
NLST -alL
TYPE A
PORT 192,168,1,88,7,92
RETR /hoge/1.txt
--------------------------------------------------------------------------------
  この PORTの 後の数字の意味は次のようになっている。
  192,168,1,88 → 192.168.1.88 ローカルIP
  7,91 → それぞれ16 及び 2進数で 
   7 → 07 → 00000111
    91 → 5B → 01011011
  これをくっつけると 
  075B (2進数では 0000011101011011

  これは =1883
  この 1883にNLST -alL の結果を投げてくださいとのこと

  これを受けてFTPサーバはサーバの20番ポートから一方的にこのポートにパケットを投げつける。

2、PASVモードの場合
   サーバの21番ポートに制御用のコネクションを確立 
   このコネクションは切断するまで確立されたまま
  (192.168.1.88 ポートランダム → サーバIP ポート21)
   とここまでは、同じ しかし通信するポートを指定する主人公が異なる。

   21番にローカルIPより通信する内容は以下のよう

-----------------------------------------------------------------------
USER hoge
PASS hogepass
XPWD
TYPE A
PASV
RETR /home/hoge/1.txt
-----------------------------------------------------------------------

通常は RETRのコマンド前にクライアント側がポートを指定してたが、PASVモードの場合はPASVコマンドだけです。
このコマンドに対して サーバより返答があります。 それは以下のよう

----------------------------------------------------------------------------
220 Pro Server
331 Password required for hoge
230 User hoge logged in.
257 "/hoge" is current directory.
200 Type set to A
227 Entering Passive Mode (202,226,240,210,15,0).
150 Opening ASCII mode data connection for /hoge/1.txt (596017 bytes)
226 Transfer complete.
---------------------------------------------------------------------------

  227 Entering Passive Mode (202,226,240,210,15,0). にてサーバがこのポートに投げてください!と言ってます。
  ポートは 15,0 ですので 0F00 = 3840

ということで、クライアントはこのポートに要求をだし、それに答えてそのポートに返事を(ファイルを)返す事になります。

要はどちらが主体になって相手をオープンするかです。
通常モードの時はサーバのデータポートはほとんど20番ですが、PASVモードの時のポートはクライアントもサーバもランダムです。これを判別するには21番ポートのやり取りを眺めた上で判断するしかなさそうです。。。。

投稿者 muuming : 14:42 | コメント (0)

2005年10月07日

FTPコマンド一覧

以下 FTPコマンドを記す解らないのもあり

USER ユーザー名の入力
PASS パスワードの入力
CWD カレントディレクトリの変更
XPWD カレントディレクトリの表示
CDUP 一階層上のディレクトリに移動
QUIT 接続の終了
PORT
PASV パッシブモードへ移行
TYPE バイナリ、アスキーモードの変更
MODE Modeコマンドは完全ではありません。
stream mode だけが使われます。
RETR ファイル名の変更
STOR ファイルの受信
RNFR ファイル名の変更
RNTO ファイル名の変更
ABOR 送信の中断
DELE ファイルの削除
MKD ディレクトリの作成
PWD カレントディレクトリの表示
LIST ディレクトリの一覧
NLST ディレクトリの一覧
SYST システム名の送信
STAT
HELP ヘルプ
RMD
NOOP 何もしません
RNFR   ファイル名を変更 (存在するファイル名を送信)
RNTO   ファイル名を変更 (新しいファイル名を送信)
MDTM   ファイルの最終更新時刻を取得
SIZE    ファイルのサイズを取得
RETR    ファイルを取得 (get)
SITE 特別なコマンドを送信 (chmod・umask・idle など) SITE CHMOD 755 filename

投稿者 muuming : 13:49 | コメント (0)

2005年10月06日

出力を全部捨てる! エラーも全部

ls > /dev/null 2>&1


多分これでいいかと

投稿者 muuming : 13:26 | コメント (0)

find 検索結果に! 便利なxargs

検索結果に対してコマンドを実行したいときは

find ./hoge -name *.svn -exec ls -al "{}" \;

なんて使い方をするが 、要は "{}" に検索結果が入っている感じ
\;はおまじない

ところが -exec で渡すと全て一気に "{}"に値が渡されるので、
多分こんな使い方はできないはず

find ./hoge -name *.svn -exec mv "{}" /home/hoge \;

rm とかなら rm 1 2 3 4 と一気にファイルを並べられるが
mv はそういうわけにもいかなさそ

そういう時は

find ./hoge -name | xargs -i mv "{}" /home/hoge

-i がポイント 
xargsは次のコマンドにデフォルト1つずつ値を渡すので、こんな芸当ができるっぽい

投稿者 muuming : 10:04 | コメント (0)

2005年10月03日

他のユーザーでの実行

su - postgres -c '/usr/local/pgsql/bin/postmaster -S -i'
といった書き方

sudo -u nobody echo "hhh"
これもありか

違いは・・・ 後で調べる

投稿者 muuming : 15:03 | コメント (0)