Telepített csomagok törlése dátum szerint

Rclone használataBizonyos időpontban telepített Debian csomagok eltávolítása egyszerűen. Sok programot telepítek a rendszeremre, így sokat el is távolítok, ha valami nem tetszik. Így örömmel olvastam egy ostechnix cikket a témában. Ha szeretsz kipróbálni új programokat, de amit nem akarsz használni, azt le is akarod szedni, akkor hasznos lehet ez a módszer neked is. A legnagyobb probléma, hogy sok esetben nem emlékszem az összes tesztként felrakott programra, így az eltávolításuk sem egyszerű. Így jó lenne egy adott időpontban (napon) felrakott csomagokat kilistázni, hogy képbe kerüljek az összes egy időpontban telepített csomaggal.

Erre két módszer van. Az egyik kicsit macerásabb, de nagyon jól használható. Amikor telepítesz, akkor kimented a terminál kimenetet egy szövegfájlba, így minden információd megmarad. A terminál kimenetet simán kimásolhatod, vagy ha yakuake-t használsz utólag is megteheted, mert van erre menüpontja. Szuper. A probléma ezzel nem is kicsit: rendszeresen elfejeltem a kimenetet lementeni. Így jó lenne utólag is gyorsan megkapni az adott napon telepített csomagok listáját. Erre a legtöbb csomagkezelő alkalmas, bár a kényelmi funkcióik eltérhetnek. Mivel én MX Linux alatt vagyok , így csak a Debian lehetőségeit mutatom be.

Alap: telepítési dátum lekérdezése

grep " install " /var/log/dpkg.log

2022-10-05 06:14:33 install qml-module-org-kde-kcmutils:amd64  5.98.0-1~np2
2022-10-05 16:09:11 install xmonad:amd64  0.15-4+b1
2022-10-08 07:07:51 install python3-sniffio:all  1.1.0-1
2022-10-08 07:07:51 install python3-typing-extensions:all  3.7.4.3-1

Valami ilyen kimenete fogsz kapni, és már máris megoldottad a problémát. Már csak a kért dátumra kell grep-elni és kidobja a napi telepítést. Ezt már meg is oldottuk!

grep "2022-10-05.*.install " /var/log/dpkg.log

A megfelelő dátummal futtass le egy tesztet, hogy valóban jól megy minden.

Oké, de nekem csak a csomagnév kell semmi több. Ilyenkor logikus az awk használata. Ha nem használtál még awk műveletet, akkor sincs gond. Ha érdekel, akkor olvass utána! Az egyik legnagyszerűbb program…

grep "2022-10-16.*.install " /var/log/dpkg.log /var/log/dpkg.log | awk '{ print $4 }' | cut -d: -f1

Itt az awk csak annyit tesz, hogy a negyedik oszlopot kivágja (pld. npm:all), a cut pedig a kettőspont előtti részt adja vissza. Első pillantásra ez nagyon összetett. de pontosan illeszkedik a Linux és az Unix filozófiához: egy program egy feladatot lásson el, de azt jól, majd a műveletet egy másik fojtassa.
Megvan az összes telepített csomag neve a megadott napon.

Adott napi telepítések eltávolítása

A fenti lista simán egy szöveges fájlba irányítható, majd a csomagok neve elé simán berakható a törlési utasítás. Szuper, de nem elegáns. Ha már „csövezünk” akkor adjuk ki a parancsot röptében a törlésre is. Vedd figyelembe, hogy az apt parancsok nem feltétlen kérnek felhasználói megerősítést a csomagok törlése előtt ha hosszabb parancsláncban kapjuk meg őket másolásra! Ezért mindig célszerű száraz futtatást végrehajtani annak ellenőrzésére, hogy mely csomagok kerülnek eltávolításra, mielőtt a tényleges parancsot futtatnák. Sok kellemetlenséget megelőzhetünk, ha előbb látjuk is, amit csinálunk, és nem csak egybefűzött parancsokat automatikusan másolgatunk!
Az apt is ismeri a szimulációs parancsot, -s kapcsolóval tehetjük ezt meg. Nem csak most!

grep "20-09-14.*.install " /var/log/dpkg.log | awk '{ print $4 }' | cut -d: -f1 | xargs sudo apt purge -y -s

A maradék rész értelmezése: xargs parancs feladata, hogy az apt purge azaz a tisztító eltávolításnak átadja értelmezhető formában a kapott listát. Az -y biztosítja, hogy amikor majd élesben fut ne kérdezzen semmit. Ez azért fontos, mert így gyorsabb, és valóban csal lefut a parancs. Az -s a szimulációs mód bekapcsolása. Így minden úgy fut le, mintha élesben menne, a kimeneteket látod, és ha gond van, akkor azt észleled. De nem töröl semmit, csak úgy csinál!
Logikusan, ha nincs probléma (nem szokott), akkor a végéről a szimuláció kapcsolót kivéve már le is törölheted a napi csomagtelepítést.

Na és a régiek?

Előfordulhat, hogy régebbi, sok napja felrakott csomagokat akarsz leszeni. De az első parancs csak pár naposakat mutat.
Ilyenkor bekapcsoltad (vagy a disztribútorod más bekapcsolta alapból) a log fájlok „forgatását”, azaz bizonyos ütem szerinti archiválását, majd törlését. Nekem ötödikéig visszamenőleg van meg így a mai nap. Ha negyedikei kell, akkor a parancs kicsit módosul:

grep "2022-10-04.*.install " /var/log/dpkg.log.1

Kitérő: a /var/log/ az a könyvtár, amiben jó eséllyel megtalálod a log fájlokat, amik a rendszeredet érintik. Itt nézz körbe, a fájlnevek beszélő nevek, értelmesen vannak elnevezve. Így az adott terület, amit tartalmaznak gyorsan beazonosítható. Párba belenézve az első pillanatban egy káosz az egész, de ha a grep parancsot a fentiek szerint használod, akkor gyorsan megtalálod a kívánt szövegeket.

Ennyi! Nem napi feladat, de jól behatárolható időben telepített csomagok kikereséséhez hasznos lehet.