1

tcl を使用して、Linux PC のある宛先から別の宛先に特定のファイルをコピーしようとしています。私が使用しているコマンドは

{file copy -force $fileToCopy $destination}

ただし、これを行うための適切な権限がありません。次を使用して権限を変更しようとしました:

{file attributes $fileToCopy -permissions rwxrwxrwx}

私は所有者ではないため、アクセス許可を変更できないというエラー メッセージが表示されました。だから、私はファイルの所有者を変更しようとしました

{file attributes $fileToCopy -owner ${::tcl_platform(user)}}

私は所有者ではないため、所有者を変更できないという同じエラー メッセージを受け取りました。

この問題を回避するにはどうすればよいですか? ファイルをコピーできるように、tcl で sudo の下でこのコマンドを実行する方法はありますか?

4

1 に答える 1

2

ファイルに対する読み取り権限 (および、そのファイルを含むルート ディレクトリまでのすべてのディレクトリに対する読み取り権限と実行権限の両方) がある限り、それを実行できるはずですfile copy。また、宛先に対する書き込み権限も必要です。(明らかに!) ファイルのパーミッションを設定するには、ファイルの所有者または root である必要があり、ファイルの所有権を設定するには、さらに高度な権限が必要です (ほとんどの場合、root または setuid されたコードによってのみ行われます)。根)。内部file copy的に、ファイルのこれらの機能と内容をコピーしようとしますが、失敗してもエラーはスローされません。

(TclX 拡張機能のidコマンドを使用して) setuid 作業を行うことは可能ですが、これにはかなり特殊な構成が必要です。root として実行されている Tcl インタープリターを起動するには、sudo を使用する方が実際にははるかに簡単です。

ファイルを読み取れないか、宛先に書き込めないかのどちらかだと思います。最初のものはfile readable $fileToCopy(念のため!) で、後者は で確認してくださいfile writable $destination。(これらは、競合状態の可能性と、一部のファイルシステムでのシステムコールの不可解な奇妙さのために、決定的な答えを与えないことに注意してくださいaccess()。しかし、何が起こっているのか、何が本当の問題なのかをかなり示しています。)

于 2013-06-03T20:07:17.193 に答える