質問: rootとしてファイルを削除できません 定期的なシステムアップデート(linux mint 19)が失敗し、ファイルのバックアップを作成できないというエラーが発生しました。ファイルの所有者とグループは非常に奇妙で、lsattrの動作は奇妙です。 rootとしてファイルを削除できません。$ ls -lah total 64k drwxr-xr-x 2 root root 4.0k sep 14 00:41 . drwxr-xr-x 15 root root 4.0k jul 20 06:18 .. -rw-r--r-- 1 root root 18k jul 17 03:41 cs-xlet-danger.svg -rw-r--r-- 1 root root 13k jul 17 03:41 cs-xlet-running.svg -rw-r--r-- 1 root root 19k jul 17 03:41 cs-xlet-system.svg -rw-r--r-- 1 2558197760 2848915456 0 jul 17 03:41 cs-xlet-update.svg $ sudo rm -f cs-xlet-update.svg rm: cannot remove 'cs-xlet-update.svg': operation not permitted $ lsattr . --------------e--- ./cs-xlet-danger.svg --------------e--- ./cs-xlet-system.svg lsattr: no data available while reading flags on ./cs-xlet-update.svg --------------e--- ./cs-xlet-running.svg 次に、ライブcdを起動して、ファイルシステムを確認します。$ sudo e2fsck -f /dev/sda1 e2fsck 1.44.1 (24-mar-2018) pass 1: checking inodes, blocks, and sizes pass 2: checking directory structure pass 3: checking directory connectivity pass 4: checking reference counts pass 5: checking group summary information /dev/sda1: 291836/1310720 files (0.4% non-contiguous), 2935417/5242624 blocks ファイルシステムに問題がないことを確認したら、ドライブをマウントして、live cd os(linux mint)からファイルを削除しようとします。$ ls -lah total 64k drwxr-xr-x 2 root root 4.0k sep 14 04:41 . drwxr-xr-x 15 root root 4.0k jul 20 10:18 .. -rw-r--r-- 1 root root 18k jul 17 07:41 cs-xlet-danger.svg -rw-r--r-- 1 root root 13k jul 17 07:41 cs-xlet-running.svg -rw-r--r-- 1 root root 19k jul 17 07:41 cs-xlet-system.svg -rw-r--r-- 1 2558197760 2848915456 0 jul 17 07:41 cs-xlet-update.svg $ sudo rm -f cs-xlet-update.svg rm: cannot remove 'cs-xlet-update.svg': operation not permitted $ lsattr . --------------e--- ./cs-xlet-danger.svg --------------e--- ./cs-xlet-system.svg lsattr: no data available while reading flags on ./cs-xlet-update.svg --------------e--- ./cs-xlet-running.svg 最後に、iノードで削除しようとしましたが成功しませんでした。$ ls -i cs-xlet-update.svg 220926 cs-xlet-update.svg $ find . -inum 220926 -exec sudo rm -i {} \; rm: remove regular empty file './cs-xlet-update.svg'? y rm: cannot remove './cs-xlet-update.svg': operation not permitted どうすればこのファイルを取り除くことができますか?
回答: fsckを強制した後(それは-fフラグ)そしてそれはまだきれいに見えます...ユーザー/グループ番号は珍しいです、一般的にそれらは10000未満だと思います、20億は正しく見えません、そしてそれらはゼロバイトです...何か面白いです。これらが機能しない場合は、チェックする拡張属性もあるかもしれません。たぶんiノードでリストしてみてくださいls -il 次に、findとrmを使用してiノードで削除しますfind . -inum [inode-number] -exec rm -i {} \; または別の例では、「安全性」を見つけて「-delete」を見つけることを推奨していますfind . -maxdepth 1 -type f -inum [inode-number] -delete さらに「安全性」を高めるには、最初に、デフォルトの「印刷」を使用して、-deleteを省略して、どのファイル検索が見つかったかを確認します。find . -inum [inode-number] それでも機能しない場合は、debugfsに必要なコマンドがいくつかあり、そのコマンドの多くはiノードを引数として取ります rm pathname unlink pathname. if this causes the inode pointed to by pathname to have no other references, deallocate the file. this command functions as the unlink() system call. または多分 unlink pathname remove the link specified by pathname to an inode. note this does not adjust the inode reference counts. また、拡張属性が問題を引き起こしている場合でも、getfaclを試してそれらを一覧表示し、setfaclを変更して-b, --remove-allオプションは便利に聞こえます。または、attrパッケージには、getfattrとsetfattrもあります。または、debugfsには次のような拡張属性コマンドがいくつかあります。 ea_get [-f outfile] filespec attr_name retrieve the value of the extended attribute attr_name in the file file‐ spec and write it either to stdout or to outfile. ea_list filespec list the extended attributes associated with the file filespec to stan‐ dard output. ea_set [-f infile] filespec attr_name attr_value set the value of the extended attribute attr_name in the file filespec to the string value attr_value or read it from infile. ea_rm filespec attr_names... remove the extended attribute attr_name from the file filespec.