|
初めて書き込みします。 質問なのですが、ローカルマシンからリモートマシンへコピー(移送)した場合、コピーしたファイルやディレクトリのユーザーID/グループIDがその時の実行ユーザーID/グループIDに変わってしまいます。 これをそのままの設定のままコピーする事はできないでしょうか? ちなみにrcpとftp(ディレクトリのコピー(移送)自体が既に無理)では無理でした。 出来ればUNIXコマンドかPerlで可能な方法があれば教えて下さい。 これらでは無理でも他の方法でなら可能だと言うご意見でも構いませんので、よろしくお願いします。 使用環境:solaris8 使用言語:Perl5.0、csh |
|
>>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 も同じで、ログイン時にどのユーザ名で 認証を行うかで決まります。 |
|
お答えありがとうございます。 >「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ファイルを展開できるのでしょうか? |
|
>>1538 ゆきえ > tar -xvfpがうまくいきません f の直後に tar ファイル名を指定しないといけません。 だから、いつも f は最後と覚えてください。 tar -xvpf hogehoge.tar |
|
>>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 とも引数を取らないので。 |
|
>>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 権限でやってるならルートディレクトリでいいのかも。 |
|
初めて書き込みします。 質問なのですが、DBの接続はDBIで行っています。使用言語はPERLです。 DBへの接続は通常DBIの場合、connectにより行っていますが、 現時点でconnectがされているか、されていないかをコーディング上で 確認する方法はありますでしょうか? ご存知の方がいらっしゃいましたらご回答のほうをお願いします。 |
|
>>1542 の > 現時点でconnectがされているか、されていないかを > コーディング上で確認する方法はありますでしょうか? ping ちうのがありますね。$rc = $dbh->ping; |
|
>>1538 ゆきえ 断りなしにマルチポストする人は、うちの掲示板に 書き込まないで下さい。 http://www.parkcity.ne.jp/~chaichan/qanda/qa539.htm?01-01-11-10-57 今後は向こうでどうぞ。 |
|
>>1540 68user > > f の直後に tar ファイル名を指定しないといけません。 > 今回は問題ないんじゃないですかね。x,v,p とも引数を取らないので。 はずかしながら今まで、知りませんでした。 御指摘ありがとうございます。 |
|
> > > 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 さんのおっしゃるとおり 関係なくファイルを取り出せます。これも知りませんでした。 |
|
>>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. 続けて処理をすることはできないのでしょうか? それとも根本的に何かが違うのでしょうか? よろしくお願いします。 |
|
>>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. 続けて処理をすることはできないのでしょうか? それとも根本的に何かが違うのでしょうか? よろしくお願いします。 |
|
同じ内容を2度送信してしまいました。 どうもすみません。 |
|
>>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 がこけまくってるようです (だからサーバエラーが頻発している)。 普通は二度書きチェックを行っていますが、ちょうど二度書き チェック用ファイルのオープンに失敗したくさいですね。 |
|
>>1547 68user 回答ありがとうございます。 私もif文で確かめてみましたが、not connect! と表示されず、 処理が途中で止まってしまいました。 やはり、記述の通り環境の問題があると思われます。 ただ、確認の方法が分かったので助かりました。 ありがとうございました。 |
|
>>1551 の > 私もif文で確かめてみましたが、not connect! と表示されず、 > 処理が途中で止まってしまいました。 なるほど。うちの環境では、他のエラーは全てトラップできるのに、 ブレースホルダ `?' の数より多く bind_columns すると、エラーと なって perl が終了してしまうという問題があります。 perl や DBI/DBD のバージョンによっては、ping も同様に トラップできないエラーを発生することがあるのかも しれませんね。 # perl+DBI 暦は3ヶ月程度なので、全体的によくわかってません。 ## が、Pro*C や PL/SQL より100倍使いやすいということは ## よく理解できました。 |