#!/bin/bash # ------------------------------------------------------------------------------ # A script neve: 1_atrsdel # # Fájlok és könyvtárak biztonságos törlése # # A scriptet a /bin könyvtárba másold, mert az alapértelmezett könyvtár, # és ezért futtatáskor elég megadni a fájlnevet elérési út nélkül. # A fájlnév csak azért kezdődik 1-gyel, hogy a /bin könyvtárban mindig a # lista tetején legyen. Ez a script írásakor volt hasznos :-). # # A scriptet beillesztve a Thunar fájlkezelő jobb-klikk menüjébe, # ( Szerkesztés / Egyéni művelet beállítása... ) a kijelölt fájl vagy # könyvtár a jobb klikk menüből biztonságosan törölhető ezzel a # script-tel. # A Thunar egyéni művelet Parancs mezőjébe ezt írd be: # exo-open --launch TerminalEmulator 1_atrsdel %f # # Ellenőrizd le, hogy a törlést végző parancsok telepítve vannak-e. # A leírások megjelenítése a terminálban: # $ srm --help # $ wipe --help # $ shred --help # Ha pl. nincs telepítve az srm, ezt az üzeneted kapod: # „srm” parancs nem található, de telepíthető így: # sudo apt install secure-delete # # Atrasko # 2026. február 25. # ------------------------------------------------------------------------------ clear LINAK=0 # a Linux alap kódja Debian = 1 Arch = 2 LINDN="_" # a Linux disztribúció neve OBJ_N=$* # a törlendő objektum (fájl vagy könyvtár) neve OBJFN="_" # az objektum fajta neve ("fájl" vagy "könyvtár") OBJFK="_" # az objektum fajta kódja (F = fájl vagy K = könyvtár) YES_NO="_" # kérdésre adott válasz betűvel (I vagy N) DLC_R="_" # a törlést végző parancs argumentumaival együtt function xwait { local WAITING WAITING="x" echo read -p "Tovább bármelyik billentyűleütésre ... " -s -n 1 WAITING echo } function end_of_script { xwait exit 0 } function yes_or_no { while true; do YES_NO="0" echo -e -n "\r$1 " read -r -p " (i / n) " -n 1 YES_NO case $YES_NO in i | I ) YES_NO="I" ;break;; n | N ) YES_NO="N" ;break;; *) echo -n -e "\b " ;; esac done } function chk_obj_name { # A szóköz karakterek cseréje a könyvtár vagy a fájl nevében -------- SUBSTRING=" " if [[ $OBJ_N = *"$SUBSTRING"* ]]; then echo "A "$OBJFN "neve szóköz karaktert tartalmaz." echo "A script nem futtatható az ilyen nevű "$OBJFN"ra. :-(" echo "A szóköz karaktereket aláhúzás karakterekre kell cserélni." yes_or_no "A script kicserélje-e a szóközöket? " echo if [ $YES_NO = "N" ]; then echo echo "A törlési folyamat megszakítva." end_of_script fi mv "$OBJ_N" "${OBJ_N// /_}" & OBJ_N=${OBJ_N// /_} echo "A törlésre jelölt " $OBJFN ": " $OBJ_N else echo "A "$OBJFN "neve nem tartalmaz szóköz karaktert. :-)" fi } function get_lin_base { local SOR while IFS= read -r SOR; do case $SOR in # Debian = 1 Arch = 2 "ID=debian") LINAK=1; LINDN="Debian "; break;; "ID=linuxmint") LINAK=1; LINDN="Linux Mint "; break;; "ID=\"endeavouros\"") LINAK=2; LINDN="EndeavourOS "; break;; "ID=cachyos") LINAK=2; LINDN="CachyOS "; break;; # "ID=...........") LINAK= ; LINDN=" "; break;; *) LINAK=0; LINDN="Linux "; ;; esac done < /etc/os-release if [ $LINAK == 0 ]; then echo " A script nem tudta meghatározni az /etc/os-release fájlból, hogy melyik alapra épülő Linuxot használsz. Bár az 'ID_LIKE=' kezdetű sorban van megadva a Linux alapja, sajnos nem minden disztribúció írja bele ezt a sort az /etc/os-release fájlba. Ez a script ezért keres rá inkább az 'ID=' kezdetű sorra, mert az mindig megtalálható az eddigi tapasztalatok szerint. Ellenőrizheted, itt az /etc/os-release fájl tartalma:" echo cat /etc/os-release echo " Ha tudod, hogy ez a Linux melyik alapra lett fejlesztve, akkor választhatsz a listából, illetve beírhatod a script 104. sorába a saját Linuxod adatait, hogy a legközelebbi futtatáskor a script már felismerje azt. ┌──────────────────────────────────────────────────────────────┐ │ Linux alap: │ │ │ │ 1 Debian │ │ 2 Arch │ │ │ │ X Kilépés │ └──────────────────────────────────────────────────────────────┘" while true; do LINAK="0" echo -e -n "\rA választott funkció :" read -r -p " ? " -n 1 LINAK case $LINAK in 1 | 2) break;; x | X ) exit 0;; *) echo -n -e "\b " ;; esac done fi } function set_del_mode { local MTX_1 MTX_2 MTX_3 MTX_4 MTX_5 MTX_6 MTX_7 MTX_8 local DLC_1 DLC_2 DLC_3 DLC_4 DLC_5 DLC_6 DLC_7 DLC_8 local DMODE NTS_1 NTS_2 local LINAN="_" # a Linux alap neve case $LINAK in 1) LINAN="Debian Linux" MTX_1="Egyszerű 2x 1QM Véletlen"; DLC_1="wipe -fiqQ2 " MTX_2="Egyszerű 4x 3QM Véletlen"; DLC_2="wipe -fiqQ4 " MTX_3="Biztonságos 11x 10QM Véletlen"; DLC_3="wipe -fiqQ11 " MTX_4="Biztonságos 34x Véletlen"; DLC_4="wipe -fi " MTX_5="Egyszerű 2x Véletlen"; DLC_5="srm -vl " MTX_6="Egyszerű 2x Nulla "; DLC_6="srm -vlz " MTX_7="Biztonságos 38x Véletlen"; DLC_7="srm -v " MTX_8="Biztonságos 38x Nulla "; DLC_8="srm -vz " NTS_1="Könyvtár esetén hozzá lesz adva az -r rekurzív kapcsoló." NTS_2="xQM jelentése: az összes írásból x Quick módban történt." ;; 2) LINAN="Arch Linux " MTX_1="Egyszerű 1x Véletlen"; DLC_1="wipe -vz " MTX_2="Egyszerű 1x Nulla "; DLC_2="wipe -v " MTX_3="Biztonságos 10x Véletlen"; DLC_3="wipe -vz -x1 -p10" MTX_4="Biztonságos 10x Nulla "; DLC_4="wipe -v -x1 -p10" MTX_5="Egyszerű 3x Véletlen"; DLC_5="shred -fvu " MTX_6="Egyszerű 3x Nulla "; DLC_6="shred -fvuz " MTX_7="Biztonságos 10x Véletlen"; DLC_7="shred -fvu -n10 " MTX_8="Biztonságos 10x Nulla "; DLC_8="shred -fvuz -n10 " NTS_1="Könyvtár esetén hozzá lesz adva az -r rekurzív kapcsoló." NTS_2="Figyelem! A shred CSAK FÁJLOKAT tud törölni! " # A shred parancs nem tud könyvtárat törölni if [[ $OBJFK == "K" && $LINAK == 2 ]]; then MTX_5="--- "; DLC_5=" " MTX_6="--- "; DLC_6=" " MTX_7="--- "; DLC_7=" " MTX_8="--- "; DLC_8=" " NTS_2=" " fi ;; esac echo " ┌──────────────────────────────────────────────────────────────┐ │ OS: $LINDN Linux alap: $LINAN " "│ │ │ │ Felűlírás Karakter Parancs │ │ │ │ 1 $MTX_1 $DLC_1 " "│ │ 2 $MTX_2 $DLC_2 " "│ │ 3 $MTX_3 $DLC_3 " "│ │ 4 $MTX_4 $DLC_4 " "│ │ │ │ 5 $MTX_5 $DLC_5 " "│ │ 6 $MTX_6 $DLC_6 " "│ │ 7 $MTX_7 $DLC_7 " "│ │ 8 $MTX_8 $DLC_8 " "│ │ │ │ X Kilépés törlés nélkül │ │ │ │ $NTS_1 " "│ │ $NTS_2 " "│ └──────────────────────────────────────────────────────────────┘" echo DLC_R="0" while true; do DMODE="0" echo -e -n "\rA választott funkció : " read -r -p " ? " -n 1 DMODE if [[ $OBJFK == "K" && $LINAK == 2 && $DMODE -gt 4 ]]; then DMODE="0" fi case $DMODE in 1) DLC_R=$DLC_1; break;; 2) DLC_R=$DLC_2; break;; 3) DLC_R=$DLC_3; break;; 4) DLC_R=$DLC_4; break;; 5) DLC_R=$DLC_5; break;; 6) DLC_R=$DLC_6; break;; 7) DLC_R=$DLC_7; break;; 8) DLC_R=$DLC_8; break;; x | X ) exit 0;; *) echo -n -e "\b "; ;; esac done if [[ $OBJFK == "K" ]]; then DLC_R=$DLC_R" -r" fi } # ************************* Itt indul a script ************************* if [ "$#" = 0 ]; then echo " ┌──────────────────────────────────────────────────────────────┐ │ Nem adtál meg sem fájlt sem könyvtárat! │ │ Argumentum nélkül a script futtatása értelmetlen. │ │ A leírás megjelenítése: 1_atrsdel --help vagy 1_atrsdel -h │ │ A script futtatása megszakítva. │ └──────────────────────────────────────────────────────────────┘" end_of_script fi if [ "$1" = $PWD ]; then echo echo "Figyelem! Az argumentum az aktuális könyvtár!" echo $1 echo " ┌──────────────────────────────────────────────────────────────┐ │ Az aktuális könyvtár törlése tiltva van, annak az esetnek a │ │ kizárására, ha Thunar-ból indítod a scriptet a jobb klikk │ │ menüből, de elfelejtettél elötte fájlt vagy könyvtárat │ │ kijelölni. A script futtatása megszakítva. │ └──────────────────────────────────────────────────────────────┘" end_of_script fi if [[ $1 = '--help' || $1 = '-h' ]]; then echo " ************************************************************************ A scriptet a /bin könyvtárba másold, mert az alapértelmezett könyvtár, és ezért futtatáskor elég megadni a fájlnevet elérési út nélkül. A fájlnév csak azért kezdődik 1-gyel, hogy a /bin könyvtárban mindig a lista tetején legyen. Ez a script írásakor volt hasznos :-). A scriptet beillesztve a Thunar fájlkezelő jobb-klikk menüjébe, ( Szerkesztés / Egyéni művelet beállítása... ) a kijelölt fájl vagy könyvtár a jobb klikk menüből biztonságosan törölhető ezzel a script-tel. A Thunar egyéni művelet Parancs mezőjébe ezt írd be: exo-open --launch TerminalEmulator 1_atrsdel %f Ellenőrizd le, hogy a törlést végző parancsok telepítve vannak-e. A leírások megjelenítése a terminálban: $ srm --help $ wipe --help $ shred --help Ha pl. nincs telepítve az srm, ezt az üzeneted kapod: „srm” parancs nem található, de telepíthető így: sudo apt install secure-delete ************************************************************************ srm in DEBIAN LINUX srm v3.1 (c) 1997-2003 by van Hauser / THC Syntax: srm [-dflrvz] file1 file2 etc. Options: -d ignore the two dot special files "." and "..". -f fast (and insecure mode): no /dev/urandom, no synchronize mode. -l lessens the security (use twice for total insecure mode). -r recursive mode, deletes all subdirectories. -v is verbose mode. -z last wipe writes zeros instead of random data. srm does a secure overwrite/rename/delete of the target file(s). Default is secure mode (38 writes). You can find updates at http://www.thc.org Az eredeti srm parancs leírása itt: https://linuxcommandlibrary.com/man/srm Figyelem! Az eredeti srm parancs leírásában felsorolt opciók nem azonosak a fent megado$tt srm v3.1 (c) 1997-2003 van Hauser féle verzióval. Ahhoz csak a felsorolt hat opció használható. ************************************************************************ wipe in DEBIAN LINUX Usage: wipe [options] files... Options: -a Abort on error -b Set the size of the individual i/o buffers by specifying its logarithm in base 2. Up to 30 of these buffers might be allocated -c Do a chmod() on write-protected files -D Dereference symlinks (conflicts with -r) -e Use exact file size: do not round up file size to wipe possible junk remaining on the last block -f Force, i.e. don't ask for confirmation -F Do not attempt to wipe filenames -h Display this help -i Informative (verbose) mode -k Keep files, i.e. do not remove() them after overwriting -l Set wipe length to bytes, where is an integer followed by K (Kilo:1024), M (Mega:K^2) or G (Giga:K^3) -M (l|r) Set PRNG algorithm for filling blocks (and ordering passes) l Use libc's random() library call a Use arcfour encryption algorithm -o Set wipe offset to , where has the same format as -P Set number of passes for filename wiping. Default is 1. -Q set number of passes for quick wipe -q Quick wipe, less secure, 4 random passes by default -r Recurse into directories -- symlinks will not be followed -R Set random device (or random seed command with -S c) -S (r|c|p) Random seed method r Read from random device (strong) c Read from output of random seed command p Use pid(), clock() etc. (weakest) -s Silent mode -- suppresses all output -T Set maximum number of tries for free filename search; default is 10 -v Show version information -Z Do not attempt to wipe file size -X Skip this number of passes (useful for continuing a wiping operation) -x Define pass order ************************************************************************ wipe in ARCH LINUX Wipe v2.3.1 - released November 1st, 2009 by Tom Vier Usage is wipe [options] [file-list] Default: wipe -ZdNTVEAkO -S512 -C4096 -l1 -x1 -p1 Options: -h -- help - display this screen -u -- usage -c -- show copyright and license -w -- show warranty information -i and -I -- enable (-i) or disable (-I) interaction - overrides force -f -- force file wiping and override interaction -r and -R -- recursion - traverse subdirectories -s -- silent - disable percentage and error reporting -v -- force verbose - always show percentage -V -- verbose - show percentage if file is >= 25K -e and -E -- enhance (-e) percentage accuracy or faster writes (-E) -d and -D -- delete (-d) or keep (-D) after wiping -n and -N -- delete (-n) or skip (-N) special files -k and -K -- lock (-k) or don't lock (-K) files -z -- zero-out file - single pass of zeroes -Z -- perform normal wipe passes -t and -T -- enable (-t) or disable (-T) static passes -a and -A -- write until out of space (-a) or don't (-A) -o[size] -O -- write to stdout (-o) or use files (-O) -B(count) -- block device sector count -S(size) -- block device sector size - default 512 bytes or stdout write length when used with -A -C(size) -- chunk size- maximum file buffer size in kilobytes(2^10) -l[0-2] -- sets wipe s$ecure level -x[1-32] -X -- sets number of random passes per wipe or disables -p(1-32) -- wipe file x number of times -b(0-255) -- overwrite file with this value byte ************************************************************************ shred in ARCH LINUX Használat: shred [KAPCSOLÓ]… FÁJL… A megadott FÁJLT többször egymás után felülírja, így még nagyon költséges hardver megoldásokkal sem lehet könnyen visszaállítani az adatokat. Ha a FÁJL a -, akkor a szabványos kimenetet semmisíti meg. A hosszú kapcsolók kötelező argumentumai a rövid kapcsolókhoz is kötelezők. -f, --force jogosultságok megváltoztatása, ha akadályozzák az írást -n, --iterations=N N-szer írja felül az alapértelmezett 3 helyett --random-source=FÁJL véletlenszerű bájtok olvasása -s, --size=N ennyi bájt megsemmisítése (a k, M, G utótagok megengedettek) -u, fájl foglalásának megszüntetése és törlése felülírás után --remove[=ÍGY] mint a -u, de a törlés módja befolyásolható, lásd alább -v, --verbose folyamat előrehaladásának mutatása -x, --exact nem kerekíti fel a fájlméretet a következő teljes blokkra ez az alapértelmezés nem szabályos fájlok esetén -z, --zero a végén nullákkal írja felül a fájlt, így álcázva a megsemmisítést --help display this help and exit --version output version information and exit Delete FILE(s) if --remove (-u) is specified. The default is not to remove the files because it is common to operate on device files like /dev/hda, and those files usually should not be removed. The optional HOW parameter indicates how to remove a directory entry: 'unlink' => use a standard unlink call. 'wipe' => also first obfuscate bytes in the name. 'wipesync' => also sync each obfuscated byte to the device. The default mode is 'wipesync', but note it can be expensive. CAUTION: shred assumes the file system and hardware overwrite data in place. Although this is common, many platforms operate otherwise. Also, backups and mirrors may contain unremovable copies that will let a shredded file be recovered later. See the GNU coreutils manual for details. ************************************************************************ " end_of_script fi if test -d "$1"; then OBJFN="könyvtár" OBJFK="K" else OBJFN="fájl" OBJFK="F" fi echo echo "A törlésre jelölt "$OBJFN": "$OBJ_N chk_obj_name get_lin_base set_del_mode echo echo $DLC_R $OBJ_N echo " ┌──────────────────────────────────────────────────────────────┐ │ Figyelem! A kiválasztott fájl vagy könyvtár │ │ véglegesen és visszaállíthatatlanul törlésre kerül! │ │ │ │ A könyvtár törlése rekurzív, azaz a beágyazott │ │ alkönyvtárak és azok tartalma is törölve lesz! │ └──────────────────────────────────────────────────────────────┘" echo yes_or_no "Valóban törlöd....?" if [ $YES_NO = "N" ]; then echo echo "A törlési folyamat megszakítva." end_of_script fi echo echo "A törlési folyamat elindítva." echo " ────────────────────────────────────────────────────────────────" $DLC_R $OBJ_N echo " ────────────────────────────────────────────────────────────────" echo "A törlési folyamat befejezve." end_of_script # ************************* Itt a script vége **************************