68user's page 掲示板

Prev< No. 1536〜1552> Next  [最新発言に戻る] [過去ログ一覧]
No. 1536 # ゆきえ 2001/01/10 (水) 21:25:29
初めて書き込みします。
質問なのですが、ローカルマシンからリモートマシンへコピー(移送)した場合、コピーしたファイルやディレクトリのユーザーID/グループIDがその時の実行ユーザーID/グループIDに変わってしまいます。
これをそのままの設定のままコピーする事はできないでしょうか?
ちなみにrcpとftp(ディレクトリのコピー(移送)自体が既に無理)では無理でした。
出来ればUNIXコマンドかPerlで可能な方法があれば教えて下さい。
これらでは無理でも他の方法でなら可能だと言うご意見でも構いませんので、よろしくお願いします。
使用環境:solaris8
使用言語:Perl5.0、csh

No. 1537 # 68user 2001/01/10 (水) 22:39:18
>>1534 68user
> sh・bash なら
>  CBA=`echo $ABC | sed 's/aaa/bbb/g'`
sh・bash で他の方法があったら教えてください。

>>1536 ゆきえ
> ユーザーID/グループIDがその時の実行ユーザーID/グループIDに
> 変わってしまいます。
というのが既に誤解ではないかと思います。
    % rcp ~/a.txt userA@host:~/b.txt … host:~userA/b.txt のオーナーは userA
    % rcp ~/a.txt userB@host:~/b.txt … host:~userB/b.txt のオーナーは userB
となります。

ですから、ファイルのオーナー/グループが誰になるかは
    「その時の実行ユーザID/グループID」
で決まるのでなく、
    「rcp するとき どのユーザで認証を行うか」
によります。ftp も同じで、ログイン時にどのユーザ名で
認証を行うかで決まります。

No. 1538 # ゆきえ 2001/01/11 (木) 09:31:50
お答えありがとうございます。

>「rcp するとき どのユーザで認証を行うか」
ですと、認証したユーザーに結局は変更されてしまいますよね?
ディレクトリの配下には色々なユーザーIDやグループIDが存在していますのでそれを変更したくはないのです。
調べていますとfilename.tar.zをrcpで移送して、rshでuncompress、tar -xvfpをすろ事でこの問題が回避されそうなのですが、tar -xvfpがうまくいきません。
マシンAのルートディレクトリにある./usr.tarをマシンBからrshで
rsh A tar xvfp ./usr.tar
rsh A tar xvfp ./usr.tar ./.
rsh A tar xvfp ./usr.tar -C ./.
いずれの場合も展開されませんでした。
どうすればtarファイルを展開できるのでしょうか?

No. 1539 # rosegarden 2001/01/11 (木) 10:10:47
>>1538 ゆきえ
> tar -xvfpがうまくいきません
f の直後に tar ファイル名を指定しないといけません。
だから、いつも f は最後と覚えてください。

tar -xvpf hogehoge.tar

No. 1540 # 68user 2001/01/11 (木) 10:14:16
>>1538 ゆきえ
> ディレクトリの配下には色々なユーザーIDやグループIDが
> 存在していますのでそれを変更したくはないのです。
ああ、なるほど。理解しました。

1. ファイルのオーナーを調べ、その権限で rcp する
    foreach file (*)
        set owner=`ls -l $file | awk '{print $3}'`
        rcp $file ${owner}@host:~
    end

2. root で tar xvfp する。
    ただし、展開時のファイルのオーナーは、ユーザ名でなく uid に
    従うので、ローカルとリモートの uid の割り振り (/etc/passwd) が
    同じである必要がある。

てなところですか。

> マシンAのルートディレクトリにある./usr.tarをマシンBからrshで
> rsh A tar xvfp ./usr.tar
rsh の前に マシンA に rcp で usr.tar をコピーしましたか?

>>1539 rosegarden
> f の直後に tar ファイル名を指定しないといけません。
今回は問題ないんじゃないですかね。x,v,p とも引数を取らないので。

No. 1541 # 68user 2001/01/11 (木) 10:26:34
>>1540 68user
>> マシンAのルートディレクトリにある./usr.tarをマシンBからrshで
>> rsh A tar xvfp ./usr.tar
> rsh の前に マシンA に rcp で usr.tar をコピーしましたか?
ああ失礼、マシンAにファイルはあるのね。で、「ルート
ディレクトリ」は「ホームディレクトリ」の間違いですか?
    % rsh A tar xvfp ./usr.tar
だと、~/usr.tar を読みにいってしまいますので。
# root 権限でやってるならルートディレクトリでいいのかも。

No. 1542 # [E-mail] 2001/01/11 (木) 11:07:40
初めて書き込みします。
質問なのですが、DBの接続はDBIで行っています。使用言語はPERLです。
DBへの接続は通常DBIの場合、connectにより行っていますが、
現時点でconnectがされているか、されていないかをコーディング上で
確認する方法はありますでしょうか?
ご存知の方がいらっしゃいましたらご回答のほうをお願いします。

No. 1543 # 68user 2001/01/11 (木) 11:11:39
>>1542
> 現時点でconnectがされているか、されていないかを
> コーディング上で確認する方法はありますでしょうか?
ping ちうのがありますね。$rc = $dbh->ping;

No. 1544 # 68user 2001/01/11 (木) 11:14:56
>>1538 ゆきえ
断りなしにマルチポストする人は、うちの掲示板に
書き込まないで下さい。
    http://www.parkcity.ne.jp/~chaichan/qanda/qa539.htm?01-01-11-10-57
今後は向こうでどうぞ。

No. 1545 # rosegarden 2001/01/11 (木) 12:15:39
>>1540 68user
> > f の直後に tar ファイル名を指定しないといけません。
> 今回は問題ないんじゃないですかね。x,v,p とも引数を取らないので。
はずかしながら今まで、知りませんでした。
御指摘ありがとうございます。

No. 1546 # rosegarden 2001/01/11 (木) 12:28:26
> > > f の直後に tar ファイル名を指定しないといけません。
> > 今回は問題ないんじゃないですかね。x,v,p とも引数を取らないので。
> はずかしながら今まで、知りませんでした。
たびたびすみません。知らなかったのは事実なのですが、GNU tar だと
ハイフン付けて tar するとだめみたいです。
GNU tar 1.13 の場合
% tar -xvfp hoge.tar
tar: Cannot open p: ファイルもディレクトリもありません。
tar: Error is not recoverable: exiting now
一方、Solaris の /bin/tar は 68user さんのおっしゃるとおり
関係なくファイルを取り出せます。これも知りませんでした。

No. 1547 # 2001/01/11 (木) 13:40:02
>>1543 68user
>> 現時点でconnectがされているか、されていないかを
>> コーディング上で確認する方法はありますでしょうか?
> ping ちうのがありますね。$rc = $dbh->ping;
ご回答ありがとうございます。
実際に試してみたんですが、disconnectされている状態で
$rc = $dbh->ping;を実行すると以下のようなエラーが出力されました。

DBD::Oracle::db ping failed: ERROR Database disconnected at ****.pl line ****.
For help, please send mail to this site's webmaster, giving this error message and the time and date of the error.
  
続けて処理をすることはできないのでしょうか?
それとも根本的に何かが違うのでしょうか?
よろしくお願いします。

No. 1548 # 2001/01/11 (木) 13:48:09
>>1543 68user
>> 現時点でconnectがされているか、されていないかを
>> コーディング上で確認する方法はありますでしょうか?
> ping ちうのがありますね。$rc = $dbh->ping;
ご回答ありがとうございます。
実際に試してみたんですが、disconnectされている状態で
$rc = $dbh->ping;を実行すると以下のようなエラーが出力されました。

DBD::Oracle::db ping failed: ERROR Database disconnected at ****.pl line ****.
For help, please send mail to this site's webmaster, giving this error message and the time and date of the error.
  
続けて処理をすることはできないのでしょうか?
それとも根本的に何かが違うのでしょうか?
よろしくお願いします。

No. 1549 # 2001/01/11 (木) 14:03:22
同じ内容を2度送信してしまいました。
どうもすみません。

No. 1550 # 68user 2001/01/11 (木) 14:48:12
>>1546 rosegarden
> % tar -xvfp hoge.tar
> tar: Cannot open p: ファイルもディレクトリもありません。
なるほど。tar -x -v -f p hoge.tar と同じ扱いになるわけですね。
いつも - を付けないので知りませんでした。

>>1547
うーん、SunOS5.6 + perl-5.004_04 + DBD-Oracle-1.06 + Oracle8.0.5.0.0(?) では
    use DBI;
    $o_DB = DBI->connect("dbi:Oracle:", "username", "passwd")
        or die "connect error";
    $o_DB->{RaiseError} = 0;
    $o_DB->disconnect;

    if ( $o_DB->ping ){
        print "connect!\n";
    } else {
        print "not connect!\n";
    }
で、not connect! と表示されました。標準エラー出力には
    DBD::Oracle::db ping failed: ERROR Database disconnected at a line 7.
と表示されますが、その後も処理は続けることができました。

> 同じ内容を2度送信してしまいました。
> どうもすみません。
いえいえ。

おそらくどこかのロボットが がんがんアクセスしているので、
OS の最大数以上のディスクリプタを開こうとして OS や apache や
perl がこけまくってるようです (だからサーバエラーが頻発している)。

普通は二度書きチェックを行っていますが、ちょうど二度書き
チェック用ファイルのオープンに失敗したくさいですね。

No. 1551 # 2001/01/11 (木) 16:35:02
>>1547 68user
回答ありがとうございます。
私もif文で確かめてみましたが、not connect! と表示されず、
処理が途中で止まってしまいました。
やはり、記述の通り環境の問題があると思われます。
ただ、確認の方法が分かったので助かりました。
ありがとうございました。

No. 1552 # 68user 2001/01/11 (木) 19:44:31
>>1551
> 私もif文で確かめてみましたが、not connect! と表示されず、
> 処理が途中で止まってしまいました。
なるほど。うちの環境では、他のエラーは全てトラップできるのに、
ブレースホルダ `?' の数より多く bind_columns すると、エラーと
なって perl が終了してしまうという問題があります。

perl や DBI/DBD のバージョンによっては、ping も同様に
トラップできないエラーを発生することがあるのかも
しれませんね。

# perl+DBI 暦は3ヶ月程度なので、全体的によくわかってません。
## が、Pro*C や PL/SQL より100倍使いやすいということは
## よく理解できました。

Prev< No. 1536〜1552> Next  [最新発言に戻る] [過去ログ一覧]