
Mellesleg azt is néztem hogy a woofpackages lista nem egyezik a builtin könyvtár tartalmával , ezt csak onnan szürtem le hogy kevesebb fájl van a builtin könyvtárban mint a woofpackages sorainak száma ...
Kód: Egész kijelölése
#!/bin/sh
echo "Type the name of package, followed by [ENTER]:"
read package
rm /tmp/$package.txt
cd /
rekesz1=$(find /usr -name *"$package"* && find /etc -name *"$package"* && find /bin -name *"$package"* && find /dev -name *"$package"* && find /lib -name *"$package"* && find /opt -name *"$package"* && find /sbin -name *"$package"* && find /selinux -name *"$package"* && find /sys -name *"$package"* && find /var -name *"$package"*)
echo "$rekesz1" >> /tmp/$package.txt
Nos . A fentiek alapján szerintem nem kell hangsúlyoznom hogy , odafigyelős a dolog , tehát csak olyan ember használja a programot, aki tudja mit csinál. A busybox csomagot ignoráltam,mer ugye "b*szni nem lehet f*sz nélkül" ... hogy szépen fogalmazzakFRUGAL telepített rendszer esetén, csak a saját csomagjaidat tudod fizikailag eltávolítani a mentésfájlodból, a beépített csomagok csak látszólag törlődnek a rendszerből (ezzel nem tudsz helyet felszabadítani a mentésfájlból ). Amennyiben új rendszert (remaster) készítesz vagy FULL azaz teljes telepítésed van, tudod törölni a beépített csomagokat is.
FIGYELEM: A programmal súlyos károkat tehetünk a rendszerben!
Kód: Egész kijelölése
#!/bin/sh
echo "Type the name of package, followed by [ENTER]:"
read package
if [ ! -f /root/.packages/$package.files ];then
cd /
rekesz1=$(find /usr -name *"$package"* && find /etc -name *"$package"*)
echo "$rekesz1" >> /root/.packages/$package.files
else
echo "Already there is $package.files in /root/.packages/"
fi
Kód: Egész kijelölése
#!/bin/sh
# Made by KuLuSz at y2017 m06 d11
# for correct remove used librarys in own and based pkgs...
if [ ! -f /tmp/installed_pkg_list ];then # ha nem létezik a /tmp/installed_pkg_list fájl akkor ...
for i in `ls /root/.packages | grep '\.files$'` # .files fájlok listázása
do
PKGS=$(basename "$i" | sed 's/.files//') # sztring a beillesztéshez > fájlok átnevezése , kit. eltávolítás
echo "<item>$PKGS|Saját csomag</item>" >> /tmp/installed_pkg_list # lista elem létrehozása a csomag nevével a fenti sztringet beillesztve
done
for i in `ls /root/.packages/builtin_files` # builtin_files fájlok listázása
do
[ "$i" != "busybox" ] && echo "<item>$i|Beépített csomag</item>" >> /tmp/installed_pkg_list # feltétel a busybox eltüntetéséhez, lista elem létrehozása
done
INSTALLEDPKGS=$(cat /tmp/installed_pkg_list) # sztring beállítása a GUI felé , a fenti kész lista alapján
else
INSTALLEDPKGS=$(cat /tmp/installed_pkg_list) # sztring beállítása a GUI felé , a már meglevő lista alapján
fi
function lister (){ # funkció egy egyedi szkripten belüli parancs megadásával (lister)
for PKG in $(ls /root/.packages/ | grep '\.files$') # .files fájlok lista olvasása soronként
do
for x in $(cat /root/.packages/"$PKG") # 1 .files fájl olvasása soronként
do
if [ -x "$x" ];then # feltétel , ha a sorban futtatható fájl szerepel akkor...
SEND=$(file "$x" | grep 'executable,' | cut -f1 -d':') # sztring a beillesztéshez , szűri a szkripteket
if [ ! -z "$SEND" ];then # ha a sztring értéke nem semmi, akkor ...
for dep in $(ldd "$SEND" | cut -f3 -d' ') # futtatható fájl függőségeinek kiolvasása soronként
do
[ ! "$dep" = "not" -a ! "$dep" = "dynamic" ] && echo "$dep" >> /tmp/installed_pkg_dep_list # hamis értékek eltüntetése a listából, függőség kiírása a /tmp/installed_pkg_dep_list fájlba
done
fi
fi
done
done
for PKG in $(ls /root/.packages/builtin_files/) # builtin_files fájlok lista olvasása soronként
do
for x in $(cat /root/.packages/builtin_files/"$PKG") # builtin_files fájl olvasása soronként
do
if [ -d "$x" ];then # ha a sorban könyvtár szerepel,akkor...
DIR=$x # sztring létrehozása a könyvtárból , a fájlhoz
else
if [ -x "$DIR/$x" ];then # a fentebbi sztring használata , hogy megtudjuk a fájl futtatható-e
SEND=$(file $DIR/$x | grep 'executable,' | cut -f1 -d':') # sztring a beillesztéshez , szűri a szkripteket
if [ ! -z "$SEND" ];then # ha a sztring értéke nem semmi, akkor ...
for dep in $(ldd "$SEND" | cut -f3 -d' ') # futtatható fájl függőségeinek kiolvasása soronként
do
[ ! "$dep" = "not" -a ! "$dep" = "dynamic" ] && echo "$dep" >> /tmp/installed_pkg_dep_list # hamis értékek eltüntetése a listából, függőség kiírása a /tmp/installed_pkg_dep_list fájlba
done
fi
fi
fi
done
done
}
lister & # a lister parancs elindítása szkripten kívül
PID0=$! # a lister parancs pid-jének megjegyzése sztringben
export MAIN_DIALOG="
<window title=\"Csomag eltávolító\">
<vbox>
<text><label>Az alábbi listában találod az általad, és a fejlesztő által telepített csomagokat. FRUGAL telepített rendszer esetén, csak a saját csomagjaidat tudod fizikailag eltávolítani a mentésfájlodból, a beépített csomagok csak látszólag törlődnek a rendszerből (ezzel nem tudsz helyet felszabadítani a mentésfájlból ). Amennyiben új rendszert (remaster) készítesz vagy FULL azaz teljes telepítésed van, tudod törölni a beépített csomagokat is.</label></text>
<text><label>Megjegyzés: Az általad telepített csomagokat a lista tetején találod (Saját csomag)-ként kategorizálva.</label></text>
<text><label>FIGYELEM: A programmal súlyos károkat tehetünk a rendszerben!</label></text>
<table><width>340</width><height>150</height><variable>LIST</variable><label>Csomag neve |Kitől</label> ${INSTALLEDPKGS}</table>
<hbox>
<button><input file stock=\"gtk-remove\"></input><label>Csomag törlése</label></button>
<button><input file stock=\"gtk-quit\"></input><label>Kilépés</label></button>
</hbox>
</vbox>
</window>
"
RETSTUFF="$(gtkdialog --program=MAIN_DIALOG --center)" # a gtk gui értékének kinyerése a retstuff sztringgel
eval "$RETSTUFF" # a sztring értékének exportálása , hogy a szkript is olvasni tudja
if [ "$EXIT" = "Csomag törlése" ];then # feltétel , ha a kapott érték csomag törlése (gomb), akkor...
export MAIN_DIALOG2="
<window title=\"Csomag eltávolító\">
<vbox>
<text><label>Biztosan törölni szeretnéd a kiválasztott</label></text>
<text><label>${LIST} csomagot?</label></text>
<hbox homogeneous=\"true\">
<button><input file stock=\"gtk-clear\"></input><label>Igen</label></button>
<button><input file stock=\"gtk-redo\"></input><label>Nem</label></button>
</hbox>
</vbox>
</window>
"
RETSTUFF2="$(gtkdialog --program=MAIN_DIALOG2 --center)" # a gtk gui értékének kinyerése a retstuff2 sztringgel
eval "$RETSTUFF2" # a sztring értékének exportálása , hogy a szkript is olvasni tudja
if [ "$EXIT" = "Igen" ];then # feltétel , ha a kapott érték igen (gomb), akkor...
yaf-splash -close never -icon /usr/local/lib/X11/pixmaps/info.xpm -text "Függőségek kilistázása/szűrése. (Eltarthat egy ideig. kb 1-2 perc)" & # felugró üzenet
PID1=$! # a felugró üzenet pid-jének megjegyzése sztringben
wait $PID0 # megvárja a már korábban elindított lister parancs végét
kill $PID1 # kilép a felugró üzenetből
yaf-splash -close never -icon /usr/local/lib/X11/pixmaps/info.xpm -text "Fájlok és könyvtárak törlése a rendszerből." & # felugró üzenet 2
PID2=$! # a felugró üzenet 2 pid-jének megjegyzése sztringben
DESKTOP_FILE="" # sztring a menüfrissítéshez , az értéke semmi marad ha nincs desktop fájl
if [ "$(cat /tmp/installed_pkg_list | grep $LIST | cut -f2 -d'|' | cut -f1 -d'<' )" = "Saját csomag" ];then # feltétel , ha a kiválasztott elem saját csomag, akkor...
for x in $(cat /root/.packages/$LIST.files) # a listában kiválasztott saját csomag fájl olvasása soronként
do
if [ -L $x ];then # ha a sor 1 link, akkor...
if [ ! $(cat /tmp/installed_pkg_dep_list | grep '$x' | grep -c -m 2 -v '$x[.-_]') -gt "1" ];then # lista átnézése ha nincs több mint 1, akkor...
rm -rf $x # fájl törlése
fi
else
if [ -f $x ];then # ha a sor 1 fájl,akkor ...
SO=$(basename "$x" | cut -f1 -d".") # string létrehozása , kiterjesztés eltávolítása
if [ ! "$(cat /tmp/installed_pkg_dep_list | grep -c -m 2 "$SO")" -gt "1" ];then # a fenti sztring fájl ellenőrzése a listában, ha nincs több mint 1,akkor...
[ $(echo "$x" | grep "\.desktop$") ] && DESKTOP_FILE="1" # ha a fájl egy desktop fájl , akkor a sztring értéket kap , hogy fusson a menü frissítés később
rm -rf $x # fájl törlése
fi
fi
fi
done
for x in $(tac /root/.packages/$LIST.files) # a kiválasztott saját csomag fájl visszafele olvasása
do
if [ -d $x ];then # ha a sor 1 könyvtár,akkor...
SPACE=$(echo "$x" | sed 's/ /\\ /') # sztring a szóközös könyvtárak megbuherálásához
rmdir $SPACE 2>/dev/null # törli a könyvtárat, ha üres
fi
done
grep -v "$LIST" /root/.packages/user-installed-packages > /tmp/user-installed-packages-cut2 # a csomag eltávolítása a /root/.packages/user-installed-packages listából
mv -f /tmp/user-installed-packages-cut2 /root/.packages/user-installed-packages # az új lista beillesztése a rendszerbe
rm -rf /root/.packages/$LIST.files # a kiválasztott csomag log fájljának eltávolítása
elif [ "$(cat /tmp/installed_pkg_list | grep $LIST | cut -f2 -d'|' | cut -f1 -d'<' )" = "Beépített csomag" ];then # feltétel , ha a kiválasztott elem beépített csomag, akkor...
for x in $(cat /root/.packages/builtin_files/$LIST) # a listában kiválasztott beépített csomag fájl olvasása soronként
do
if [ -d $x ];then # ha a sor könyvtár,akkor...
DIR="$x" # sztring létrehozása a könyvtárból , a fájlhoz
else
if [ -L $DIR/$x ];then # ha a sor 1 link, akkor...
if [ ! $(cat /tmp/installed_pkg_dep_list | grep '$DIR/$x' | grep -c -m 2 -v '$DIR/$x[.-_]') -gt "1" ];then # lista átnézése ha nincs több mint 1, akkor...
rm -rf $DIR/$x # fájl törlése
fi
else
if [ -f $DIR/$x ];then # ha a sor 1 fájl,akkor ...
SO=$(basename "$DIR/$x" | cut -f1 -d".") # string létrehozása , kiterjesztés eltávolítása
if [ ! "$(cat /tmp/installed_pkg_dep_list | grep -c -m 2 "$SO")" -gt "1" ];then # a fenti sztring fájl ellenőrzése a listában, ha nincs több mint 1,akkor...
[ $(echo "$DIR/$x" | grep "\.desktop$") ] && DESKTOP_FILE="1" # ha a fájl egy desktop fájl , akkor a sztring értéket kap , hogy fusson a menü frissítés később
rm -rf $DIR/$x # fájl törlése
fi
fi
fi
fi
done
for x in `tac /root/.packages/builtin_files/$LIST` # a kiválasztott beépített csomag fájl visszafele olvasása
do
if [ -d "$x" ];then # ha a sor 1 könyvtár akkor...
SPACE=$(echo "$x" | sed 's/ /\\ /') # sztring a szóközös könyvtárak megbuherálásához
rmdir $SPACE 2>/dev/null # törli a könyvtárat, ha üres
fi
done
grep -v "$LIST" /root/.packages/woof-installed-packages > /tmp/woof-installed-packages-cut2 # a csomag eltávolítása a /root/.packages/woof-installed-packages listából
mv -f /tmp/woof-installed-packages-cut2 /root/.packages/woof-installed-packages # az új lista beillesztése a rendszerbe
rm /root/.packages/builtin_files/$LIST # a kiválasztott csomag log fájljának eltávolítása
fi
rm /tmp/installed_pkg_list # a felhasznált csomag fájllista törlése
rm /tmp/installed_pkg_dep_list # a felhasznált függőség lista törlése
kill $PID2 # felugró üzi 2 bezárása
export MAIN_DIALOG3="
<window title=\"Csomag eltávolító\">
<vbox>
<text><label>A(z) ${LIST} csomag el lett távolítva a fájlrendszerből.</label></text>
<hbox homogeneous=\"true\">
<button><input file stock=\"gtk-redo\"></input><label>Másik csomag törlése</label></button>
<button><input file stock=\"gtk-quit\"></input><label>Kilépés</label></button>
</hbox>
</vbox>
</window>"
RETSTUFF3="$(gtkdialog --program=MAIN_DIALOG3 --center)" # a GUI értékének kinyerése
eval "$RETSTUFF3" # a retstuff3 értékek exportálása a szkript számára
if [ "$EXIT" = "Kilépés" ];then # ha a kimeneti érték "kilépés", akkor...
[ ! -z $DESKTOP_FILE ] && fixmenus & # ha a desktop_file sztring értéke nem semmi akkor , menüfrissítés
exit # kilépés a programból
else
[ ! -z $DESKTOP_FILE ] && fixmenus & # ha a desktop_file sztring értéke nem semmi akkor , menüfrissítés
"$0" && exit # szkript újraindítása
fi
else
"$0" && exit # szkript újraindítása
fi
else
rm /tmp/installed_pkg_list # a felhasznált csomag fájllista törlése
rm /tmp/installed_pkg_dep_list # a felhasznált függőség lista törlése
exit
fi