123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490
#!/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 <vh@thc.org>
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 <buffer-size-lg2> 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 <length> Set wipe length to <length> bytes, where <length> 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 <offset> Set wipe offset to <offset>, where <offset> has the
same format as <length>
-P <passes> Set number of passes for filename wiping.
Default is 1.
-Q <number> 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 <tries> 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 <number> Skip this number of passes (useful
for continuing a wiping operation)
-x <pass1,pass2,...> Define pass order
************************************************************************
wipe in ARCH LINUX
Wipe v2.3.1 - released November 1st, 2009
by Tom Vier <nester@users.sf.net>
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 **************************