16

sed を使用して index.php ファイルを上書きしようとしていますが、エラーが発生します。

$ sed -i 's@<head>@<head><script type="text/javascript" src="new.js"></script>@' index.php
sed: couldn't open temporary file ./sedmZNx8T: Permission denied

これを修正する方法を知っている人はいますか?

4

10 に答える 10

5

ディレクトリにアクセス許可の問題があるようです/tmp。(以下で説明するように、 でコマンドを実行するphpshellため、TMP dir以外の場所に設定できます/tmp)

次のようになります。

$ ls -ld /tmp
drwxrwxrwx 333 root root 32768 12 oct.  03:13 /tmp/

説明

flag で呼び出すsedと、 dirに一時ファイルが作成されます。-ised/tmp


証明strace:

$ strace -f -e trace=file sed -i 's/a/z/' /tmp/a
execve("/bin/sed", ["sed", "-i", "s/a/z/", "/tmp/a"], [/* 94 vars */]) = 0
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
(...)
open("/tmp/sedPSBTPG", O_RDWR|O_CREAT|O_EXCL, 0600) = 4
rename("/tmp/sedPSBTPG", "/tmp/a")      = 0
+++ exited with 0 +++
于 2012-10-12T01:13:14.110 に答える
2

index.phpが保存されているディレクトリへの書き込みアクセス権がない場合、通常はindex.php...?へのアクセス権はありません。これが「非標準」のケースであり、書き込みアクセス権があると仮定するとsed -i、同じディレクトリに一時ファイルを作成しようとしていますindex.php(チェックしたところ、CWD ではなく同じディレクトリです)。sedなしで実行し、結果をホームディレクトリのファイルに書き込む-iようなもので行を終了します。> ~/sed.out次に、そのファイルで必要なことを行います。

sed 's@<head>@<head><script type="text/javascript" src="new.js"></script>@' index.php > ~/sed.out

cp ~/sed.out index.phpできるのにできないことに注意してくださいmv ~/sed.out index.php。ディレクトリを変更しようとしている間(書き込み権限がないディレクトリを変更するのではなく)cpにコンテンツを配置するようです(書き込み権限がない)。index.phpmv

于 2012-10-14T17:12:12.727 に答える