• ベストアンサー

unlink 、renameが使えない理由

Redhat linux + Perl(↓バージョン) This is perl, v5.6.1 built for i386-linux Copyright 1987-2001, Larry Wall でunlinkとrenameがうまく使えないのは何故でしょうか? mkdirやmvも使えなかったように思います。rmやmkdirなどの linuxコマンドの権限は700にいじってあります。 関係あるのでしょうか?ただ755に戻してmvをしてみましたが やっぱり使えませんでした。私のミスでなければrootで 実行してもうまく動きませんでした。使える関数使えない関数 あるのでしょうか。もしそうだとしたら、その環境使える関数の リストを列挙するスクリプトやコマンドはあるのでしょうか? よろしくお願いします

  • Perl
  • 回答数3
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

パーミッションの問題と言うよりもそのファイルの所有者の問題じゃないですか? unlinkやrenameがきかないファイルの所有者が「nobody」になっていませんか? 例えば open D, "> a.txt"; print D ''; close D; unlink "a.txt"; これでファイルが作れて削除できるのであれば所有者の問題です。

ZeroWorld
質問者

お礼

ありがとうございます。こちらのテストコードを実行してみてファイルも出力されない事に気づいたので、ためしにこのフォルダの所属している親フォルダ、祖先フォルダのパーミッションを全て777にしてやってみたらファイルが出力され、そしてunlinkもすることができました。次に他のフォルダでは祖先ホルダのパーミッションが755などでも書き込みができていたので何かしっくりこなかったので、親フォルダだけを777にしてみたところこちらもファイルを作成、削除、リネームすることができました。とりえずこれで質問の件の理由は分かったのですけど、祖先フォルダが影響するのはどんな時なのでしょうか。 実行属性は祖先まで影響するのですよね?混乱してしまいました。ファイルの属性については分かりやすいのですけど、フォルダの属性がよく分からないです。フォルダの実行属性ってプログラムがフォルダの中身を見る権限なのでしょうか?Rとの違いもよくわからないです。。

ZeroWorld
質問者

補足

よく見ると質問文自体間違っていて意味不明ですね。パーミッションの適応範囲については少し調べてみることにします。皆様こんな質問に付き合っていただきましてありがとうございました。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

mv, mkdir などのコマンドのパーミッションは全然関係ないです. ちょっと気になるのは当該ディレクトリのパーミッションですかねぇ. まあ気になるといえば Perl のバージョンも気になりますが....

ZeroWorld
質問者

お礼

やっぱりコマンドのパーミッションは関係なかったのですね。ずばり当該ディレクトリのパーミッションが駄目だったみたいです。あほな質問をしてしまいなさけなく思ってます。すみません。ご返信ありがとうございました

回答No.1

具体的にunlinkやrenameをどのように記述していますか? ファイルの構成やディレクトリの構成とかも書いて頂けるとより詳しく解説できます。

ZeroWorld
質問者

お礼

構成を書き忘れました。 ファイルは全て同じフォルダにおいています。

ZeroWorld
質問者

補足

ありがとうございます。テストしてみたのは 以下の様なシンプルなものと #!/usr/bin/perl print "Content-Type: text/plain\n\nOk!"; rename ("./guest.htm", "./guest.bak"); こちらのソースに$lockfileを設定したものなどです $lockfile ="./filename";や $lockfile ="filename";等を加えて http://homepage1.nifty.com/glass/tom_neko/web/web_04.html

関連するQ&A

  • Perlccを使ったCGIプログラムのバイナリ化

    こんにちは Perlを使ったデータベースをselectするCGIプログラムをバイナリ化したいと考えております。 環境:RedHat, postgreSQL Perl: v5.8.0 built for i386-linux-thread-multi # perlcc target.cgi とコマンド実行したところ、バイナリ化はできるものの、WEBから実行すると、以下のエラーがでてしまいます。 Undefined subroutine &DBI::dr::disconnect_all called at /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/DBI.pm line 575. 解決策をご存知の方、お願いいたします。

  • STDIN に関わる動作の違いについて

    幾つかのホストでPerl を使っているのですが STDIN の回りで動作に違いがあり困っています。 test.pl ----- #!/hogehoge/perl print -s STDIN; ----- $ echo 'abcde' | ./test.pl とした場合に、返ってくる結果が違っており 困っております。 この違いは、どこから来るのでしょうか? v5.8.2 built for i386-linux-thread-multi では「0」となりますし v5.8.2 built for i686-linux や version 5.005_03 built for i386-linux では「6」となります v5.8.2 built for i386-linux-thread-multi の時の動作がおかしいようなのですが.... ご教示いただければと思います。

    • ベストアンサー
    • Perl
  • Perl モジュールのアンインストールの仕方

    ソースからインストールしたPerlモジュールと CPANからインストールしたPerlモジュールの アンインストール方法を探しています。 ■環境 OS:RedHat Linux ES4 Perl:5.8.8 ※perldoc perllocalにインストール履歴が残ります。 インターネットで検索してみますと、Linuxは慣習的に 一度インストールしたものは削除しないように感じます。 自分で、インストールしたファイルをrmコマンドで消していくしかないのでしょうか。

    • ベストアンサー
    • Perl
  • Linuxでユーザー毎に実行出来るコマンドを制限

    Linux初心者です。 今、あるユーザーにrmとかmkdirコマンドを実行させたくないとか、 あるユーザーにはコアなディレクトリを見せたくないといった ことをしたいのですが、どのように設定したらいいか さっぱりわからず困っています。。 環境はCentOS5.3です。 何かアドバイスいただけると助かります。

  • ディレクトリ(フォルダ)の作成方法

    WindowsのC++で使われる『CreateDirectory』と 同等の関数を Linuxで使用したいのですが 調べても出てきません・・・ コマンドではなく(mkdir) ソース内で実行する形を取りたいと思っています。 (mkdirでも作成できるのでしょうか?) 知っている方いましたらご教授お願いします。

  • C言語でのディレクトリ作成についての質問です。

    C言語でのディレクトリ作成についての質問です。 Linuxコマンドのmkdir -pコマンドのようなことをC言語で実現したいのですが、 mkdir(dir1/dir2)のようにすると、エラーになってしまいます。 mkdir(dir1)のように階層でないディレクトリを指定した場合はうまくいくのですが・・・ mkdir関数では階層ディレクトリを1度で作成できないのでしょうか。 ディレクトリをたどってmkdirを1回ずつ使用しなければいけないのか、 階層ディレクトリを指定できる関数がほかにあるのか、 ご教授お願いいたします。

  • ニフティでメールフォームを使用する方法

    ニフティの無料HPサービスでメールフォームを使いたいのですがsendmailが使えません。 以下の説明書きがありましたが、シェルスクリプトは知識がなく、ちょっと困っています。 シェルスクリプトでも可能なものなんでしょうか? ---------------------------------------------- perlについて perlのバージョンは5です。 (ただし、perl5での標準的なモジュールは使用できません) パスは、「/usr/local/bin/perl」となります。 スクリプトの1行目は「#!/usr/local/bin/perl」と記述してください。 シェルスクリプト(sh)について シェルスクリプト(sh)に関しては、以下のコマンドがご利用可能となっております。 awk, chmod, date, egrep, expr, grep, mkdir, rmdir, sh, cat, cp, echo, env, find, ls, mv, rm, sed なお、sendmailはご利用いただけません。 --------------------------------------------------

    • ベストアンサー
    • CGI
  • Pg.pmモジュールがロードできない

    現在、Webサーバが古くなったため、新しいWebサーバにアプリケーションを移行しようとしています。PerlもPostgreSQLもインストールし、プログラムを実行するのですが、以下のエラーメッセージが表示されます。 エラーメッセージ表示: Can't locate Pg.pm in @INC (@INC contains: /usr/lib/perl5/5.8.5/i386-linux-thread-multi (中略)BEGIN failed--compilation aborted at mgdbrest.pl line 37. でエラーになってしまいます。 環境: パッケージのインストール確認をすると問題なく、Pg.pmパッケージもインストール済みです。またPg.pmファイルも存在します。 またperl -Vコマンド実行でも@INCも表示されます。 OS: MiracleLinux4.0 %rpm -qaの結果 perl-DBD-Pg-1.31-6.1AX postgresql-libs-8.0.8-1.2AX postgresql-pl-8.0.8-1.2AX %Pg.pmファイルの登録状況 /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi/DBD/Pg.pm %perl -Vの結果(一部抜粋) Characteristics of this binary (from libperl): Compile-time options: DEBUGGING MULTIPLICITY USE_ITHREADS USE_LARGE_FILES PERL_IMPLICIT_CONTEXT Built under linux Compiled at Aug 23 2006 01:53:27 @INC: /usr/lib/perl5/5.8.5/i386-linux-thread-multi /usr/lib/perl5/5.8.5 /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi 質問: 対処方法を御存知の方がみえたら教えてください。やはり再インストールしなければならないのでしょうか。

    • ベストアンサー
    • Perl
  • rootでもファイルを削除できない

    RedHat Linux 7.2です。 クラッカーに入られました。 /etc/rc.d/rc.local に killall -9 rpc.statd lpd と書き込まれていて、再起動できない状態になっています。 rc.localをrmコマンドで削除しようとしたら “許可されていない操作です"というエラーがでて削除できません。 viでの修正もmvもだめです。 -rwxr-xr-x 1 root root 25 Jun 30 17:22 /etc/rc.d/rc.local になっているのですが、rootで操作しているのに削除できないってどういう事でしょうか?

  • フォームの送信ボタンを押すと

    どなたか、お助けいただければ幸いです。 メールフォームを設置し、いざ送信テストをしようと 思ったのですが、送信をする際に下記のようなエラーがでます。 対処方法を教えてください(@´_`@)フエーン □エラーメッセージ□ Software error: Can't locate Jcode.pm in @INC (@INC contains: /usr/lib/perl5/5.6.1/i386-linux /usr/lib/perl5/5.6.1 /usr/lib/perl5/site_perl/5.6.1/i386-linux /usr/lib/perl5/site_perl/5.6.1 /usr/lib/perl5/site_perl/5.6.0/i386-linux /usr/lib/perl5/site_perl/5.6.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.6.1/i386-linux /usr/lib/perl5/vendor_perl/5.6.1 /usr/lib/perl5/vendor_perl .) at mailform.cgi line 8. BEGIN failed--compilation aborted at mailform.cgi line 8. というような、エラーです。このエラーは当方は初めて見るエラーでして、どのように対処すればわかりません。。。 □8行目記載内容□ use Jcode; のみです。 □フォーム設置ツリー□ ../inquiry/index.html ../cgi/toiawase/mailform.cgi ../cgi/jcode.pl   ↓ここから下は同ディレクトリーです。 ../cgi/cgi-lib.pl という中身で設定しております。 □環境□ IBM Xserver(Xeon 2.4GHz) Redhat Linux DirectAdmin Apache1.3.29 もし、この件でこの内容がなければ対処ができないとのことであれば、 何なりとおっしゃってください。 よろしくお願いします。。。

    • ベストアンサー
    • CGI

専門家に質問してみよう