shred funktioniert abhängig vom Dateisystem und Medium ggf. nur eigeschränkt (man denke an Dateisysteme mit Copy-on-Write, SSDs, bei denen Blöcke, die das Betriebssystem sieht, nur eine Abstraktionsebene sind, die dann intern zum besseren Wear-leveling auf bestimmte Speicherzellen gemapped werden usw.).
Mein Ansatz wäre eher eines oder mehrere verschlüsselte Images zu erstellen, in denen die sensiblen Dateien liegen (und zwischen denen man Daten kopieren kann) und den Schlüssel für ein Image wegzuwerfen, wenn die Daten darin nicht mehr benötigt werden (diese Images kann man dann regulär löschen) - das geht z.B. mit LUKS: LUKS/Containerdatei. Alternativ kann man z.B. mit ext4 auch Subtrees verschlüsseln lassen: Fscrypt, wobei es da noch einige Fallstricke gibt.
Je nach Programm, Dateimanager usw. mit dem man die Daten nutzt, muss man dann noch aufpassen, wo das ggf. Temporäre Dateien, Wiederherstellungs-/Sicherungskopien und gecachte Inhalte ablegt, die sensible Daten enthalten könnten. Diese Daten landen ja üblicherweise nicht mal im Papierkorb, sondern werden bei Bedarf angelegt und irgendwann wieder ohne direkten Benutzereinfluss gelöscht. Ähnliches gilt für Coredumps bei Crashes, die - je nachdem wie das System konfiguriert ist - z.B. von Apport bzw. journald eingesammelt werden könnten - also lohnt es sich ggf. die komplette Programmumgebung in einen Container (z.B. mit systemd-nspawn, lxc, Docker usw.) in dem Image zu packen, der sich leichter wieder komplett abräumen lässt.