1. 列出会话目录中的文件
$ /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
2. sudo 删除所有文件
$ /var/lib/php/sessions$ sudo rm -rf ./*
3.但会话文件仍然存在!
$ /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
答案1
这里的问题是路径名扩展发生在sudo
。 的路径名扩展./*
无权查看目录内容。因此,它不会rm -rf ./sess_716a24lf4tsnmfucpq50uf1pk7 ./sess_fkif8ed8k85olh53q9so1cd6s3 ./sess_ov6nrn16gg81i44u9angk3bls6
像预期的那样扩展为 – 如果整个命令以 的形式运行,它就会扩展为root
。
您可以在里面启动一个新终端sudo
。尝试:
sudo sh -c "rm -rf /var/lib/php/sessions/*"
请注意,我使用了完整路径,因为它比相对路径安全得多。一旦同事在里面输入了/
而不是。您可以想象会发生什么:对我来说,这是不必要的恢复任务……并且 sudoers 列表中少了一个用户。./
sudo rm -rf
答案2
这很奇怪,也许在您删除它们之后立即创建了新的会话?
如果您尝试删除单个文件会发生什么情况?
sudo rm sess_716a24lf4tsnmfucpq50uf1pk7
文件被删除了吗?
答案3
您没有指出以哪个用户身份运行。但是,$
提示表明您以标准用户身份运行,这很可能不是www-data
。
因此,问题是文件系统权限阻止您删除文件,正如您从ls -l
输出中看到的那样。
答案4
作为@Esa Jokinen 说通常,即使使用类似的命令也无法删除会话文件,sudo rm -rf /var/lib/php/sessions/*
因为路径名扩展发生在 sudo 之前。
您可以尝试另一个命令,sudo sh -c "rm -rf /var/lib/php/sessions/*"
但如果您有大量文件,您将得到类似的响应,rm: Argument list too long
因为会话文件列表通常非常庞大(多达数百万个文件)。
我建议一个非常简单的方法:
- 新建一个文件夹会话_新:
mkdir /var/lib/php/sessions_new
- 设置与旧版本相同的权限会议目录:
sudo chmod --reference=sessions sessions_new
- 对所有权也采取同样的做法:
sudo chown --reference=sessions sessions_new
- 杀了它!
sudo rm -rf /var/lib/php/sessions
- 你不需要等待很长时间才能得到结果。你可以立即在新的终端窗口中通过 来查看结果
sudo find /var/lib/php/sessions/. -type f|wc -l
。此命令会统计你的会议文件夹。运行两次。如果第二次运行该命令时得到的数字低于第一次,则表示进程正在朝着正确的方向进行。 - 等了好久了:P
- 当过程完成后只需重命名会话新目录:
sudo mv /var/lib/php/sessions_new /var/lib/php/sessions