$ /var/lib/php/sessions$ sudo ls -la total 20 drwx-wx-wt 2 root root 12288 May 20 14:26 . drwxr-xr-x 4 root root 4096 Feb 26 21:15 .. -rw------- 1 www-data www-data 0 May 20 14:26 sess_716a24lf4tsnmfucpq50uf1pk7 -rw------- 1 www-data www-data 124 May 20 14:26 sess_fkif8ed8k85olh53q9so1cd6s3 -rw------- 1 www-data www-data 0 May 20 14:25 sess_ov6nrn16gg81i44u9angk3bls6
$ /var/lib/php/sessions$ sudo rm -rf ./*
$ /var/lib/php/sessions$ sudo ls -la total 20 drwx-wx-wt 2 root root 12288 May 20 14:26 . drwxr-xr-x 4 root root 4096 Feb 26 21:15 .. -rw------- 1 www-data www-data 0 May 20 14:26 sess_716a24lf4tsnmfucpq50uf1pk7 -rw------- 1 www-data www-data 124 May 20 14:26 sess_fkif8ed8k85olh53q9so1cd6s3 -rw------- 1 www-data www-data 0 May 20 14:25 sess_ov6nrn16gg81i44u9angk3bls6
这里的问题是path名称扩展在sudo之前发生 。 ./*的path名称扩展没有查看目录内容的权限。 因此,它不会扩展到rm -rf ./sess_716a24lf4tsnmfucpq50uf1pk7 ./sess_fkif8ed8k85olh53q9so1cd6s3 ./sess_ov6nrn16gg81i44u9angk3bls6正如假设 – 如果整个命令是以root身份运行的话。
你可以在sudo里面启动一个新的terminal。 尝试:
sudo sh -c "rm -rf /var/lib/php/sessions/*"
请注意,我使用完整path,因为它比相对path安全得多。 一旦一个同事键入/而不是./ sudo rm -rf里面。 你可以想象发生了什么事情:对我来说不必要的恢复任务…和一个用户less在sudoers列表。
这很奇怪,也许新的会话是在删除之后创build的?
如果您尝试删除单个文件,会发生什么情况?
sudo rm sess_716a24lf4tsnmfucpq50uf1pk7
文件是否被删除?
你没有指出你正在运行哪个用户。 但是, $提示符表示您正在以标准用户身份运行,这很可能不是www-data 。
所以,问题是文件系统权限会阻止你删除这些文件,正如你从ls -l输出中看到的那样。