【问题标题】:How to delete a file on Linux using exec如何在 Linux 上使用 exec 删除文件
【发布时间】:2012-03-04 19:18:19
【问题描述】:

我正在尝试删除以前创建的名为 a\ 的文件。

我尝试使用:

1)

rm -rf a\\

2)

rm -rf a\\/

但两者都不起作用。我尝试登录终端,但无法删除。我写了a,然后单击tab,它显示a\\/,但它仍然无法正常工作。既不是从终端。我明白了:

 sudo rm -rf a\\/
 rm: cannot remove `a\\': Operation not permitted

有什么建议吗?

【问题讨论】:

  • 输入 a 并按下 TAB 键 - 让 shell 为您完成。
  • “不允许操作”表示您没有删除文件的权限。以 root 或拥有该文件的用户身份执行此操作。
  • hsz 请阅读问题。我按下了标签按钮。
  • Wooble 请检查命令。我正在使用 sudo!
  • 我在本地测试过,rm 'a\' 和 "rm a\\" 都对我有用。

标签: php bash filesystems escaping


【解决方案1】:
  1. 确保您有删除权限

  2. 创建文件夹:

    mkdir -m777 myFolder;

  3. 从 php 代码中删除文件:

    $file = escapeshellarg("/root/myFolder/1.txt");
    $del = shell_exec("rm -rf $file");

【讨论】:

    【解决方案2】:

    由于 sudo,我假设您使用 Ubuntu?

    首先确保您与要删除的文件位于同一目录中,执行以下操作:

    print(getcwd());
    

    其次,尝试将您要删除的文件的所有者更改为 www-data(或 apache,具体取决于您的服务器),然后查看是否可以从 php 脚本中删除该文件。

    如果这可行,那么您遇到的问题与权限有关。

    有很多方法可以解决这个问题。

    1. 确保您要删除的文件归 Web 服务器进程所有(最安全)。
    2. 授予文件 777 权限,以便任何用户都可以删除它们。
    3. 将 Web 服务器用户添加到 sudoers (/etc/sudoers)(最不安全)

    【讨论】:

      【解决方案3】:

      您应该尝试使用/path/to/file./a\\ 指定文件的完整路径。逃生的东西已经解释过了。

      【讨论】:

        【解决方案4】:

        你应该在你的 php 代码中使用exec("rm -rf a\\\\");

        php使用\\转义\,系统使用相同,所以需要两次转义\

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-11
          • 1970-01-01
          • 1970-01-01
          • 2019-08-10
          • 1970-01-01
          相关资源
          最近更新 更多