scriptek

Programozás, programnyelvek, kiegészítők, alkalmazások, programnyelvek, programfejlesztéssel kapcsolatos témák, közvetlenül a programozással összefüggő kérdések
Avatar
KuLuSz
Adminisztrátor
Hozzászólások: 606
Csatlakozott: 2014.06.17. 21:19

Re: scriptek

Hozzászólás Szerző: KuLuSz »

ez volna a szkript lényege hogy csak olyan fájlok törlődjenek , amik nem kellenek . a szkript átvizsgálja az összes binárisan futtatható fájl függőségeit a saját és beéptett csomag logok alapján, és a csomag törlésénél szüri azokat a függőségeket ami kell vagy épp nem kell a többi csomaghoz. Ez volt a legelső szempont amit felállítottam a "program" kiötlésekor. Nem mellesleg néztem a beépített "csomagokat" és ha megnézed a busybox -ot benne van az összes alap parancs , ebből arra következtetek hogy abszolut lehetséges mindent törölni a rendszerből . persze a te problémád egyedi ... viszont ennek fényében vagy szerkeszteni kell a remaszter programot hogy a telepített program log-okat is tegye be a remaszterbe , vagy manuálisan bemásolni azt , amennyiben a későbbiekben törölni szeretnéd a remaszterből...:)
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.u.L.u.S.z.[)>-
-----------------------------------------------
Elérhetőségeim: Angol irc csevegő, (reg mentes) Discord, YouTube

Avatar
nocsak
Hozzászólások: 408
Csatlakozott: 2014.09.29. 15:01
Kapcsolat:

Re: scriptek

Hozzászólás Szerző: nocsak »

Mindeközben KuLuSszal egyetértettem abban amit utóbb írt hirtelen fellángolásból közzé tett hozzászolásomhoz. A helyzet nem olyan vészes mint amilyennek látszik, de ha lehet, aki abba a hibába esik mint én, és sok hosszú ősz hajszál tépkedéstől szeretne megmenekülni annak azt javaslom, ha egy remaszterbe új csomagokat telepít amiket később meggondol hogy mégsem tett volna bele, azt lehetőleg ne utólag bányássza ki a puppyból, mert akkor csak a következő félautomata megoldás játszik. Vagy készítsen több változatot és őrizze meg a telepítő csomagokat, mert sosem lehet tudni....

...én se tudtam :D

Körmöltem egy aprócska szkriptet, amivel létrehozhatunk egy kvázi-adatbázist pl.: jelen esetben a skype csomagról. Mindenek előtt a módszert írnám le:

1.: pfind keresővel indítunk egy rendszerfájlok közti keresést a skype -ra.
2.: a kilistázott találatok alapján megvizsgáljuk mely mappákban szerepel a név
3.: módosítjuk a szkriptet amit lentebb taglalok ha kell, a találatok alapján
4.: futtatjuk a szkriptemet és leellenőrizzük az így kapott fájlt, hogy találatilag stimmelnek e mennyiségek.
5.: pfind keresővel teszünk még egy full keresést is, és átböngésszük minden maradhat e.
6.: ha további mappákban is van találat, pl.: root könyvtárban írjuk be a kapott fájlba elérését.
7.: nevezzük át a kapott fájlt, skype.files -ra.
8.: másoljuk a /root/.packages könyvtárba
9.: ha kész lesz KuLuSz az ő szkriptjével akkor pedig azon futtatása után jelöljük törlésre a már ott szereplő saját csomagot a skype -ot.

Jelenleg KuLuSz általam tesztelt szkriptje könyvtárakat nem, csak fájlokat töröl, így ha megmarad pl.: az /usr/share/skype mappa akkor azt rox filerrel “csendesen” törljük.

A kvázi-adatbázis készítő szkript valahányszor átírandó ha a fent taglalt lépések és csomagok szerint szükséges:
(mentsük el fájlként és terminálból futtassuk)

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
Frugal módban mentésfájl mellett dolgoztam. Ha lesz remaszter amihez ezt a módszert alkalmazom sikerrel, arról mindenképp írok még, jelenleg az utólagos törlés volt a szempont.

Avatar
KuLuSz
Adminisztrátor
Hozzászólások: 606
Csatlakozott: 2014.06.17. 21:19

Re: scriptek

Hozzászólás Szerző: KuLuSz »

No úgy néz ki hogy kész van a szkript , de korán sem biztos hogy tökéletes . Csak úgy tudom ajánlani mint kísérleti verzió. A szkriptről csak annyit hogy : régóta probléma a puppyban a csomagok eltávolítása . Ezen probléma alapján nekiálltam írni 1 szkriptet, ami valószínüleg fényévekkel jobb a mostani "Beépített csomag eltávolító" -nál . A szkriptben tudjuk törölni a "beépített" és a programban úgy nevezett "saját csomag"-jainkat . A saját csomagok azok amiket a felhasználó telepít legyen az pet ,deb vagy akármi... a lényeg hogy a csomag a csomag kezelő által települjön. Mert a szkript ezeknek a csomagoknak vizsgálja és törli a könyvtárait fájljait , már amelyiket szabad. A szkript elviekben ellenörzi a csomagok függőségeit és a szerint különíti el a fájlokat hogy melyik törölhető és melyik nem.
1 kis részlet a program leírásáról a szkriptben:
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.
FIGYELEM: A programmal súlyos károkat tehetünk a rendszerben!
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 fogalmazzak :D De aki nem értené annak leírom : a busybox-ban van az összes olyan parancs amit a szkript és az egész rendszer használ mindentéren . Tehát ezt vehetjük amolyan fő függőségnek , bár még gondolkoztam azon is hogy a fontosabb dolgokat is kiveszem mint például :X , xorg , gtkdialog és hasonszőrü barátai amit ha eltávolítunk azonnal csak konzol felületünk lesz ...

Na de ennyit a rizsáról. Bárkinek bármilyen bajavan (a szkriptel) , tesenek szólni , vagy kézzel inteni . :lol:
Mellesleg próbáltam optimalizálni a sebességét, de egyenlőre minden egyes csomag törlésénél várni kell géptől függően (nálam 48 mp) kb 1-2 percet míg a szkript kilistázza a függőségeket ... eleinte 6 perceket vártam :D . Gondolkoztam még nagyobb volumenü műveleten is , de ahoz bele kellett volna nyulnom a csomagkezelőbe, vagy ha nem az, akkor még kellett volna a szkript mellé 2 fájllista hogy tudjon mihez viszonyítani a szkript ... de olyan ötlet is volt hogy 1 egész adatbázist csinálna a szkript de azt meg sokallom ide ... viszont akkor valószínüleg sokkal gyorsabb lenne ... na de e-van jelenleg

Mj.: A .tgz kiterjesztést távolítsuk el, azaz nevezzük át a fájlt remove_packages -re, vagy rp -re!
Csatolmányok
remove_packages.tgz
A .tgz kiterjesztést távolítsuk el, azaz nevezzük át a fájlt remove_packages -re , vagy rp -re!
(6.74 KiB) Letöltve 251 alkalommal.
A hozzászólást 4 alkalommal szerkesztették, utoljára KuLuSz 2017.11.20. 20:09-kor.
-<(].K.u.L.u.S.z.[)>-
-----------------------------------------------
Elérhetőségeim: Angol irc csevegő, (reg mentes) Discord, YouTube

Avatar
KuLuSz
Adminisztrátor
Hozzászólások: 606
Csatlakozott: 2014.06.17. 21:19

Re: scriptek

Hozzászólás Szerző: KuLuSz »

hupsz , most gondolkozok hogy valamit rosszul írtam benne , majd este kicserélem a csatolmányt . :)
-<(].K.u.L.u.S.z.[)>-
-----------------------------------------------
Elérhetőségeim: Angol irc csevegő, (reg mentes) Discord, YouTube

Avatar
KuLuSz
Adminisztrátor
Hozzászólások: 606
Csatlakozott: 2014.06.17. 21:19

Re: scriptek

Hozzászólás Szerző: KuLuSz »

no kicseréltem a szkriptet , mosmá 'elvileg ' okés lesz a dolog :)
-<(].K.u.L.u.S.z.[)>-
-----------------------------------------------
Elérhetőségeim: Angol irc csevegő, (reg mentes) Discord, YouTube

Avatar
nocsak
Hozzászólások: 408
Csatlakozott: 2014.09.29. 15:01
Kapcsolat:

Re: scriptek

Hozzászólás Szerző: nocsak »

Mai napon KuLuSz kollegát megkértem, hogy javítson az eredeti remove_packages beépített és csomageltávolító szkriptjén, amit készséggel megtett. Erről írnék most és arról a módszerről, amivel már ily módon sem törölhető csomagok mégis törlését lehet megoldani arra az esetre, ha már remasztereltünk a rendszerbe már elavult vagy felesleges helyfoglaló csomagokat újragondolt formában (ez arra az esetre is érvényes, ha új remasztert készítünk a meglévőből és a feleslegessé vált csomagoktól megszabadulnánk):


Példának okáért az elsőként felhízlalt NOS-LX7 remaszteremre gondolok ahol pl.: a skype is így járt. Elavult, nem kell de benne van, ehhez konkrét példa:

1.: pfind keresővel indítunk egy rendszerfájlok közti keresést pl.: a skype -ra.
2.: a kilistázott találatok alapján megvizsgáljuk mely mappákban szerepel a név
3.: módosítjuk a szkriptet amit lentebb taglalok ha kell, a találatok alapján
4.: futtatjuk a szkriptemet és leellenőrizzük az így kapott fájlt, hogy találatilag stimmelnek e mennyiségek.
5.: pfind keresővel teszünk még egy ellenőrző keresést is, és átböngésszük minden maradhat e.
6.: ha további mappákban is van találat, pl.: root könyvtárban írjuk be a kapott fájlba elérését vagy módosítsuk a szkriptet, hogy ott is keressen.
7.: KuLuSz szkriptjével pedig azon futtatása után jelöljük törlésre a már ott szereplő saját csomagot a skype -ot.


példaszkriptem módosítva a skype csomaghoz:
nocsak_skype_remover.sh

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
A nocsak_skype_remover.sh működése:

Terminált nyitunk a szkript elérési útvonalába, majd futtatjuk abból. Elsőre megkérdi milyen csomag nevével szeretnénk fájlokat keresni, beírjuk, majd ha ezzel a csomagnévvel ő találkozik a /root/.packages/ útvonalon akkor figyelmeztet, hogy már van ott ilyen adatbázis fájl, ha nem talál akkor létrehoz.

Ha KuLuSznak elérhetővé válik a fórum, vélhetően közzé teszi a javított friss csomageltávolítóját.

Megjegyzés:

A jövőben inkább már csak csomagok készítésével bővítem a készletet, remasztert épp ebből az okból kifolyólag nem biztos, hogy készítek. Én legalábbis nem minden esetben dolgozom időtálló alkalmazásokkal például a böngészőt és egyéb kommunikációs alkalmazást vagy irodai csomagot is ideértve. Ahogy a világ is változik én ezt a csomagok készítésével látom értelmét bővíteni. Azok telepíthetők eltávolíthatók ugyanúgy begyűjthetők és archiválhatók.

Avatar
KuLuSz
Adminisztrátor
Hozzászólások: 606
Csatlakozott: 2014.06.17. 21:19

Re: scriptek

Hozzászólás Szerző: KuLuSz »

No kicseréltem a fentebb található "csomagot/fájlt" , lehet töltögetni , akár ide kattintva is :D . A probléma leírása amit nekem jelzett nocsak , az volt hogy , a szkriptben beállítottam azt a funkciót/feltételt, hogy ha található .desktop fájl a csomagban akkor frissítse a menüt , igenám csakhogy amikor írtam a szkriptet én fikarcnyit se törődtem azzal (nem is gondoltam erre) hogy 1 csomagban lehet több desktop fájl is , ezért amikor nocsak törölt 1 olyan csomagot ahol volt 8-10 db .desktop fájl is , akkor a szkript elindította 10x a menüfrissítést , és kb hazavágta a mentésfájlt (bár erről, inkább ő tudna mesélni) . Szóval ez a probléma lett javítva , mostmár csak 1x fut le minden eggyes csomag törlése után . ha van .desktop fájl ( melynek száma végtelen is lehet :D )
-<(].K.u.L.u.S.z.[)>-
-----------------------------------------------
Elérhetőségeim: Angol irc csevegő, (reg mentes) Discord, YouTube

Avatar
KuLuSz
Adminisztrátor
Hozzászólások: 606
Csatlakozott: 2014.06.17. 21:19

Re: scriptek

Hozzászólás Szerző: KuLuSz »

Arra gondoltam, hogy tovább írom a szkriptet a sebesség végett. Beleírnék pár cuccot meg az eddig eldobott tmp fájlokból megtartanék egyet , és létre hoznék még 1 fájlt . Ami alapján a szkript érzékelné ha új csomag települt és csak akkor futtatná le a függőség kiíratást (na meg persze első indításnál) . Ez azért kellene ,mert így még mindig független lenne a csomagkezelőtől a szkript. Viszont akkor ezeket a fájlokat meg kellene tartani valahol a rendszerben . Persze akkor már csinálnék neki menü bejegyzést is , meg külön könyvtárat , és betenném csomagba .
Kérdésem annyi hogy megéri-e szöszölni vele nekem ?
Van-e igény a sebesség javításra vagy nincs ? :)
-<(].K.u.L.u.S.z.[)>-
-----------------------------------------------
Elérhetőségeim: Angol irc csevegő, (reg mentes) Discord, YouTube

Avatar
KuLuSz
Adminisztrátor
Hozzászólások: 606
Csatlakozott: 2014.06.17. 21:19

Re: scriptek

Hozzászólás Szerző: KuLuSz »

no teleírtam kommenttel az egész szkriptet hátha segít valakinek a programozásban valamicskét :D
a kommentek a # jel után olvashatók , előttük maga a parancs halmaz

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
Amikor if -el kezdődő sort láttok az 1 feltétel ami a fi -vel záródik be ...
ha for -al kezdődő sort láttok, az 1 ismétlődő feladat, mindaddig tart míg a bemenetén van érték , amikor nincs érték , a done -al bezáródik a metódus.
a folyamatok oszloposan el vannak különítve egymástól hogy , jól látható legyen melyiknek hol a vége .
A hozzászólást 2 alkalommal szerkesztették, utoljára KuLuSz 2017.11.05. 16:16-kor.
-<(].K.u.L.u.S.z.[)>-
-----------------------------------------------
Elérhetőségeim: Angol irc csevegő, (reg mentes) Discord, YouTube

Avatar
nocsak
Hozzászólások: 408
Csatlakozott: 2014.09.29. 15:01
Kapcsolat:

Re: scriptek

Hozzászólás Szerző: nocsak »

Én értékelem a fáradozásod és köszönöm, hogy közzé tetted így a szkriptet! Jó módszer egy éles példa magyarázata, mintsem ha valaki kapásból elküld az alapokhoz. Persze az esetemben nem ismeretlen a téma, láttam én már shell szkriptet jó sok évvel ezelőtt is, de a motiváció mellett a te interaktív segítségeddel jutottam el a jelenlegi szintre. Továbbá jó módszer, ha a már mögöttünk hagyott szkripteket archiváljuk, mivel azokhoz ismétlés emlékeztetés céljából mindig támpontként vissza lehet nyúlni és emlékzeni fogunk hogy mit miért úgy csináltunk ahogy.

Válasz küldése

Vissza: “Programozás, alkalmazásfejlesztés”