# [forum] Przydatne skrypty w ogole i w szczegole

## fallow

tak jak kiedys byl pomysl utworzenia sticky ze zbiorem how-to na polskim forum : 

 - watek do dyskusji o sticky how-to : https://forums.gentoo.org/viewtopic.php?t=176719

- sticky how-to https://forums.gentoo.org/viewtopic.php?t=177544

tak teraz taki sam pomysl ale ze zbiorem przydatnych skryptow takich jak np. ten ktory pokazuje procent skompilowania emergowanego pakietu : 

```

#!/bin/bash 

#eprogress v0.0.1, July 13, 2004 

#When given a package name this scipt is will track the progress of an ebuild by counting the number of .c and .cpp files in the portage temp directory and comparing it to the number of .o files that have been compiled so far. 

#When run without arguements it's useful for locating previous failed or interrupted ebuilds so they can be attempted again or deleted manually to free space. 

cd /var/tmp/portage 

printf "%40s%8s%8s%8s%9s" "PACKAGE" "TOTAL" "LEFT" "DONE" "PERCENT"; echo 

for i in $1*; do 

   A=`find $i/ -iname "*.c*" | wc -l` 

   if test $A -eq 0; then continue; fi 

   B=`find $i/ -iname "*.o*" | wc -l` 

   C=$[$A-$B] 

   D=`expr $B \* 100 / $A` 

   if test $D -gt 100; then D="??"; fi 

   printf "%40s%8s%8s%8s%7s" "$i" "$A" "$C" "$B" "$D"; echo 

done

```

zalozylem ten watek aby wspolnie przedyskutowac ten pomsyl jeszcze przed utworzeniem sticky o skryptach.

chodzi glownie o to :

1) - czy ma miec to taka budowe jak sticky o how-to , a skrypty zglaszane do niego by w pierwszym poscie byl zbior - nie musza byc wlasnego autorstwa 

2) - czy ma byc to po prostu jeden "ciag" postow

3) - czy ciag postow a w pierwszym poscie sukcesywne wskazania do postow w watku zawierajacych skrypt.

----------

## milu

Wg mnie:

2 sposób odpada już na starcie - ciężko znaleźć skrypt(trzeba przeczesać cały wątek).

Pozostaje więc 1 albo 3. 3 sposób ma jedną wadę - dyskusje na temat różnych skryptów są toczone w tym samym wątku - dyskusje o różnych skryptach poprzeplatane miedzy sobą.

Drogą eliminacji pozostał punkt 1 i typuję go jako zwycięzcę - dyskusje i unowocześnienia skryptów nie będą się plątały pomiedzy sobą bo 1 wątek=1 skrypt i skrypty powinny być dość łatwe do przejrzenia.

----------

## Strus

Tu nie ma co głosować, tylko trzeba robić co napisane w pkt. 1   :Very Happy: 

Pomysł dobry i co najważniejsze sprawdzony.

----------

## madman

oczywiscie pkt. 1

----------

## Poe

"Jedyneczka"  :Wink:  IMHO najlepsza...

----------

## senu

pkt jeden

----------

## fallow

dobra : ostatecznie bedzie tak jak w pkt.1 

po utworzeniu tego sticky podam w nim ze do dyskusji i zglaszania skyptow bedzie sluzyl ten wlasnie watek ktory obecnie czytamy  :Smile: 

cheers  :Smile: 

----------

## Poe

To ja moze juz zapodam skrypcik (od razu mowie, ze nie mojego autrostwa, poki co jeszcze sie za to nie bralem  :Smile:  ), dzieki ktoremu mozna zrobic, np emerge -e world/system "na raty"

```

#!/bin/bash                                                                     

 while true                                                                     

 do                                                                             

         CURRENT_PACKAGE=`head -n 1 file.lst`                                   

         if [ ! -n "$CURRENT_PACKAGE" ]; then                                   

                 exit 0                                                         

         else                                                                   

                 emerge --oneshot =$CURRENT_PACKAGE                             

                 grep -v "$CURRENT_PACKAGE" file.lst > file.ls1                 

                 mv file.ls1 file.lst                                           

         fi                                                                     

 done                                           

```

----------

## nelchael

To ja tez sobie cos zglosze  :Smile:  -> nowy watek  :Smile: 

----------

## Rav70

 *Poe wrote:*   

> To ja moze juz zapodam skrypcik (od razu mowie, ze nie mojego autrostwa, poki co jeszcze sie za to nie bralem  ), dzieki ktoremu mozna zrobic, np emerge -e world/system "na raty"
> 
> ```
> 
> #!/bin/bash                                                                     
> ...

 

Mógłbyś jeszcze dla porządku dodać że listę pakietów tworzy się np przez:

```

emerge -ep world | grep '\[ebuild' | sed -e 's/.*] //' > file.lst

```

Musi on mieć format

```

kategoria/pakiet-wersja

```

po jednym pakiecie w linii.

Pozdr. Rav

----------

## madman

oto prosciutki ale jakze przydatny skrypcik  :Smile: 

```
#! /bin/bash

directory=/path/to/dir/*

find $directory -depth -type d -exec chmod xxx {} \;

find $directory -depth -type f -exec chmod yyy {} \;

```

skypt zmienia uprawnienia osobno do plikow i osobno do katalogow wewnatrz zadanego przez nas katalogu

----------

## Poe

znalazlem u siebie na dysku ciekawy skrypcik, ale niestety nie pamiętam dokladnie na jakiej zasadzie dziala i nie jestem pewien do czego sluzy (o ile dobrze pamietam do zwalaniania miejsca na dysku) 

```

#!/bin/bash 

 # 

 # Author: Ed Catmur <ed@catmur.co.uk> 

 # Licensed under the GNU Public License, version 2. 

 # 

 # Copyright Š Ed Catmur 2004 

 # Contains code believed to be copyright Š Gentoo Technologies, Inc. 

 

 has_version() { 

    if /usr/lib/portage/bin/portageq 'has_version' "${ROOT}" "$1"; then 

       return 0 

    else 

       return 1 

    fi 

 } 

 

 best_version() { 

    if /usr/lib/portage/bin/portageq 'best_version' "${ROOT}" "$1"; then 

       return 0 

    else 

       return 1 

    fi 

 } 

 

 # 

 # name:   python_version 

 # desc:   run without arguments and it will export the version of python 

 #         currently in use as $PYVER 

 # 

 python_version() { 

    local tmpstr 

    python=${python:-/usr/bin/python} 

    tmpstr="$(${python} -V 2>&1 )" 

    export PYVER_ALL="${tmpstr#Python }" 

 

    export PYVER_MAJOR=$(echo ${PYVER_ALL} | cut -d. -f1) 

    export PYVER_MINOR=$(echo ${PYVER_ALL} | cut -d. -f2) 

    export PYVER_MICRO=$(echo ${PYVER_ALL} | cut -d. -f3-) 

    export PYVER="${PYVER_MAJOR}.${PYVER_MINOR}" 

 } 

 

 ROOT="/" 

 

 # Files and directory trees to omit, ordered alphabetically. 

 # If a package drops files or directories in more than one place, move its 

 # definitions to the appropriate stanza. ldconfig symlinks go in the last 

 # stanza. Put large lists of single files next to the CONTENTS listing code. 

 PRUNE=" 

    /boot 

    /dev 

     

 $([ -h /etc/runlevels/boot/clock ]    && echo "/etc/adjtime") 

 $([ -d /proc/asound ]          && echo "/etc/asound.state") 

 $(has_version net-wireless/bluez-utils   && echo "/etc/bluetooth/link_key") 

    /etc/config-archive 

    $(echo /etc/cron.{hourly,daily,weekly,monthly}) 

    /etc/csh.env 

    /etc/dnsdomainname 

    $(echo /etc/env.d/??hostname) 

    $(echo /etc/env.d/??locale) 

 $(has_version dev-java/java-config   && echo "/etc/env.d/20java") 

 $(has_version sys-devel/prelink      && echo "/etc/env.d/99prelink") 

    /etc/gconf/gconf.xml.defaults 

    /etc/gentoo-release 

    /etc/group   /etc/group- 

    /etc/gshadow   /etc/gshadow- 

 $(has_version x11-libs/gtk+      && echo "/etc/gtk-2.0/gtk.immodules") 

    /etc/hostname 

    /etc/hosts 

    /etc/ioctl.save 

    /etc/ld.so.cache 

    /etc/ld.so.conf 

    /etc/localtime 

    /etc/make.conf 

    /etc/make.profile 

    /etc/modprobe.conf   /etc/modprobe.conf.old 

    /etc/modprobe.devfs   /etc/modprobe.devfs.old 

    /etc/modules.conf   /etc/modules.conf.old 

    /etc/motd 

    /etc/mtab 

 $(has_version x11-libs/pango      && echo "/etc/pango/pango.modules") 

    /etc/passwd   /etc/passwd- 

    /etc/portage 

 $(has_version net-dialup/ppp       && echo "/etc/ppp") 

 $(has_version sys-devel/prelink      && echo "/etc/prelink.cache") 

    /etc/profile.env 

    /etc/resolv.conf 

    /etc/runlevels 

 ... 

 $(has_version app-admin/syslog-ng   && echo "/var/run/syslog-ng.pid") 

    /var/run/utmp 

    $(echo /var/spool/cron/crontabs/*) 

    $(echo /var/spool/cron/lastrun/cron.{hourly,daily,weekly,monthly}) 

    /var/tmp/distfiles 

    /var/tmp/portage 

    /var/tmp/portage-pkg 

    /var/tmp/sync 

 " 

 

 # Packages which drop files or directories on more than one place go here, 

 # listed alphabetically by cp. 

 has_version app-text/docbook-sgml-dtd \ 

    && PRUNE="${PRUNE} 

    $(cat /var/db/pkg/app-text/docbook-sgml-dtd-*/SLOT | sed 's:^:/etc/sgml/sgml-docbook-:; s:$:.cat:') 

    /etc/sgml/sgml.cenv 

    /etc/sgml/sgml.env" 

 ... 

 has_version x11-misc/electricsheep \ 

    && PRUNE="${PRUNE} 

    $(echo /usr/share/electricsheep-{frown,smile,splash-{0,1}}.tif) 

    /var/cache/sheep" 

 

 # Packages which omit ldconfig symlinks (to test, delete the symlink and see 

 # if ldconfig recreates it). Specify at least to minor, these are ugly. 

 has_version '=gnome-extra/vfs-menu-applet-0.1*' \ 

    && PRUNE="${PRUNE}          /usr/lib/libvfsmenu-applet.0" 

 has_version '=net-fs/samba-3.0*' \ 

    && PRUNE="${PRUNE}          /usr/lib/libsmbclient.so.0" 

 has_version '=media-libs/xvid-1.0*' \ 

    && PRUNE="${PRUNE}          /usr/lib/libxvidcore.so.4" 

 has_version '=media-video/nvidia-glx-1.0*' \ 

    && PRUNE="${PRUNE}    /usr/X11R6/lib/libXvMCNVIDIA_dynamic.so.1" 

 

 # awk: filter out pyc and pyo files for which the corresponding .py exists 

 find / '(' -false $(echo $PRUNE | xargs -n 1 echo -or -path) \ 

    ')' -prune -or -print \ 

 | sort \ 

 | awk '/\.py$/ { py=$0; } $0 !~ "^"py"[co]$"' \ 

 >/tmp/allfiles 

 

 ( 

    echo "/" 

    # sed code stolen from qpkg 

    cat /var/db/pkg/*/*/CONTENTS \ 

    | sed -e "s:\(^obj \)\(.*\)\( .*\)\{2\}$:\2:; 

       s:\(^sym \)\(.*\)\( -> \)\(.*\)\( .*\)$:\2:; 

       s:\(^dir \)\(.*\)$:\2:" 

    # Generate cached man pages 

    for manx in /usr/share/man/man*; do 

       x=${manx#/usr/share/man/man} 

       for manp in $manx/*; do 

          p=${manp#$manx/}; 

          echo "/var/cache/man/cat$x/${p%.gz}.bz2" 

       done 

    done 

    # The gnome-games ebuild doesn't install scores files that already 

    # exist on the filesystem (silly!) 

    has_version gnome-extra/gnome-games \ 

       && for game in $( 

          cat /var/db/pkg/gnome-extra/gnome-games-*/CONTENTS \ 

          | grep '^obj /usr/bin/'\ 

          | sed "s:\(^obj \)/usr/bin/\(.*\)\( .*\)\{2\}$:\2:" 

       ); do 

          find /var/lib/games/${game}.*.scores /var/lib/games/${game}.scores 2>/dev/null 

       done 

 ) \ 

 | sort \ 

 | uniq \ 

 >/tmp/portagefiles 

 

 comm -2 -3 /tmp/allfiles /tmp/portagefiles 

```

Napewno jest to do czyszczenia niepotrzebnych skladnikow w systemie?... ehh.. tak to jest, jak sie zle podpisze skrypt, a z kodu nie umie sie zbyt wiele wydedukowac.... sorki, pozdrawiam

----------

## nelchael

Zgloszenie: https://forums.gentoo.org/viewtopic.php?t=278634

----------

## milu

Gentoo Linux Cron Update

Autor: Michael Panhorst

Oryginalny post: https://forums.gentoo.org/viewtopic.php?p=1304452#1304452

Wymagania: mailx, esearch, gentoolkit

Sposób instalacji: Najprostszy - umieszczenie skryptu w katalogu /etc/cron.weekly, inny - umieszczenie w crontabie.

Opis: Skrypt służy do automatycznego synchronizowania komputera(zalecane raz na tydzień - chodzi głównie o obciążenie serwerów rsync)

Co robi skrypt:

1. emerge sync

2. fixpackages, jeśli trzeba

3. Sprawdzenie GLSA

4. Jeśli wystąpiły błędy przy emerge sync albo są nowe GLSA, skrypt wysyła email z informacją

5. Sprawdzenie czy są nowe wersje (emerge system or emerge world)

6. Paczkowanie nowych wersji jeśli spełnione są zależności(emerge -B)

7. Wysłanie emaila (jeśli są pakiety do zaktualizowania), a także informacji w jaki sposób tego dokonać (używając juz skompilowanych paczek - emerge -avK)

```
#!/bin/bash 

# 

# 

# glcu - gentoo linux cron update 

# script for keeping your Gentoo linux up to date 

# 

# Version 0.65 - written by Michael Panhorst - Michael [at] untiefe [dot] de 

# 

# put this script in the /etc/cron.weekly directory 

# You need to have mailx, esearch and gentoolkit emerged 

# Set your eMail address first: 

EMAILADRESS=root 

# set if you want to test (and build) emerge 'system' or 'world' 

UPDATE=system 

################################################################ 

# You shouldn't need to change anything below this line 

PKGDIR="/usr/portage/packages" 

source /etc/make.conf  # in case you set PKGDIR different 

SUBJECT="glcu: New ebuilds for emerge $UPDATE on $HOSTNAME" 

FS="" 

EXTRA="" 

# 1. emerge sync ############## (sync first) #################### 

emerge sync 2>/tmp/emergesync.$$ 

# and run fixpackages (if needed) 

grep "Skipping packages. Run 'fixpackages' or set it in FEATURES" /tmp/emergesync.$$ 

if [ $? == 0 ] 

    then 

    echo "" >>/tmp/ecdep.$$ 

    echo "Running fixpackages" >>/tmp/ecdep.$$ 

    echo "" >>/tmp/ecdep.$$ 

    fixpackages 2>>/tmp/ecdep.$$ 

    echo "" >>/tmp/ecdep.$$ 

fi 

# 2. update database for esearch ################################ 

eupdatedb 2>>/tmp/emergesync.$$ 

# 3. glsa-check - check for security updates #################### 

glsa-check -l -n|grep " \[N\] " >/tmp/eupdate.$$ 

if [ $? == 0 ] 

    then 

    echo "" >>/tmp/emergesync.$$ 

    echo "----------------------------------------------------------------------" >>/tmp/emergesync.$$ 

    echo "Important Security updates for $HOSTNAME:" >>/tmp/emergesync.$$ 

    echo "" >>/tmp/emergesync.$$ 

    cat /tmp/eupdate.$$ >> /tmp/emergesync.$$ 

    echo "" >>/tmp/emergesync.$$ 

    echo "" >>/tmp/emergesync.$$ 

    echo "*** Run 'glsa-check --fix new' to auto-apply all security updates" >>/tmp/emergesync.$$ 

    echo "         ====================" >>/tmp/emergesync.$$ 

    echo "" >>/tmp/emergesync.$$ 

    echo "----------------------------------------------------------------------" >>/tmp/emergesync.$$ 

    FS="- SECURITY UPDATES!" 

fi 

# only send a mail if errors ocurred 

if [ -s /tmp/emergesync.$$ ] 

then 

    if [ -s /tmp/ecdep.$$ ] 

   then 

   cat /tmp/ecdep.$$ >> /tmp/emergesync.$$ 

    fi 

   cat /tmp/emergesync.$$ | mail -s "glcu($HOSTNAME): emerge sync $FS" $EMAILADRESS 

fi 

# 4. emerge -pv system/world (check for needed/new ebuilds) ### 

emerge --pretend --deep $UPDATE > /tmp/eupdate.$$ 2>&1 

# prebuild (emerge --buildpkgonly) all needed packages 

grep ebuild /tmp/eupdate.$$ 

if [ $? == 0 ] 

    then 

    echo "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" >> /tmp/ecdep.$$ 

    echo "List of new Packages:" > /tmp/ecdep.$$ 

    echo "---------------------" >> /tmp/ecdep.$$ 

    grep ebuild /tmp/eupdate.$$ >> /tmp/ecdep.$$ 

    echo "---------------------------------------------------------------------" >> /tmp/ecdep.$$ 

    for package in `cat /tmp/eupdate.$$ | grep ebuild | cut -f 2- -d "/" | cut -f 1 -d " "` ; 

      do 

      if [ ! -f $PKGDIR/All/$package.tbz2 ] 

     then 

     echo "" >> /tmp/ecdep.$$ 

     echo "Building binary package for $package :" >> /tmp/ecdep.$$ 

     emerge --pretend --buildpkgonly --oneshot =$package > /tmp/eupdate.$$ 

     if [ ` grep -c ebuild /tmp/eupdate.$$ ` == 1 ] 

         then 

         nice -n +19 emerge --buildpkgonly --oneshot =$package 2>> /tmp/ecdep.$$ 

         if [ $? == 0 ] 

        then 

        PACKAGES="$PACKAGES =$package" 

        else 

        echo "" >> /tmp/ecdep.$$ 

        echo " ***  Error while building $package!" >> /tmp/ecdep.$$ 

        SUBJECT="glcu: DEPENDENCY PROBLEM, COULDN'T PREBUILD ALL PACKAGES ON $HOSTNAME" 

        DEP=1 

         fi 

         else 

         echo " *** Dependencies for $package not met." >> /tmp/ecdep.$$ 

         echo " *** Cannot prebuilt $package!" >> /tmp/ecdep.$$ 

         SUBJECT="glcu: DEPENDENCY PROBLEM, COULDN'T PREBUILD ALL PACKAGES ON $HOSTNAME" 

         DEP=1 

     fi 

      fi 

    done 

    echo "New packages for 'emerge $UPDATE'!" > /tmp/glcu.$$ 

    echo "                  =============" >> /tmp/glcu.$$ 

    echo "" >> /tmp/glcu.$$ 

    if [ -n "$PACKAGES" ] 

   then 

   echo "To update your gentoo linux, execute:" >> /tmp/glcu.$$ 

   echo "" >> /tmp/glcu.$$ 

   echo "  emerge -avK $PACKAGES" >> /tmp/glcu.$$ 

   echo "" >> /tmp/glcu.$$ 

   EXTRA=further 

   SEND=1 

    fi 

    if [ $DEP ] 

   then 

   echo "check for $EXTRA packages with:" >> /tmp/glcu.$$ 

   echo "" >> /tmp/glcu.$$ 

   echo "  emerge -av $UPDATE" >> /tmp/glcu.$$ 

   echo "" >> /tmp/glcu.$$ 

   SEND=1 

    fi 

    cat /tmp/ecdep.$$ >> /tmp/glcu.$$ 

    # send mail, how to update the system 

    if [ $SEND ] 

   then 

   cat /tmp/glcu.$$ | mail -s "$SUBJECT" $EMAILADRESS 

    fi 

# rm all used files 

    rm /tmp/glcu.$$ 

fi 

rm /tmp/emergesync.$$ /tmp/eupdate.$$ /tmp/ecdep.$$
```

----------

## fallow

Dzieki Milu - dodane  :Smile:  :Smile: 

cheers.

----------

## Dawid159

Find old distfiles

Autor: Konstantin Shaposhnikov

Opis: Wyszukuje i wyświetla stare i potencjalnie niepotrzebne już pliki znajdujące się w distfiles

```
#!/bin/bash

function create_portage_list() {

  find $1 -path '*files/digest-*' -type f | xargs -n1 awk '{print $3}' > $2

}

echo "Finding portage distfiles ... "

create_portage_list /usr/portage /tmp/portage-distfiles1

echo "Finding port overlay distfiles ... "

create_portage_list `portageq portdir_overlay` /tmp/portage-distfiles2

echo "Sorting list of distfiles ... "

cat /tmp/portage-distfiles{1,2} | sort > /tmp/portage-distfiles

rm /tmp/portage-distfiles{1,2}

echo "Finding local distfiles ... "

find /usr/portage/distfiles/ -type f | xargs -n1 basename | sort > /tmp/local-distfiles

comm -1 -3 /tmp/portage-distfiles /tmp/local-distfiles

```

----------

## fallow

dodany : thx  :Smile: 

jest kilka minusow  :Smile: 

skyrpt nie bierze pod uwage ze ktos moze miec cvs w swoich distfiles i wywalil mi wszystkie pliki e17 (tysiace) <-> ebuildy cvs.

oraz czasami pokazuje imho potrzebne pliki  :Smile: 

tak czy siak , jest fajny  :Smile: 

cheers.

----------

## moniek

A może ma ktoś taki skrypcik który zmienia wszystkie litery plików i podkatalogów w określonym kalalogu. Oczywiście chodzi mi o to aby działał rekurencyjnie.

----------

## Insenic

 *Dawid159 wrote:*   

> 
> 
> ```
> #
> 
> ...

 

nie lepiej by było

```

echo "Finding local distfiles ... "

find ${DISTDIR} -type f | xargs -n1 basename | sort 

```

nie wszyscy przecierz mają ustawiony katalog distfiles standardowo ;)

----------

## _troll_

 *Insenic wrote:*   

> 
> 
> ```
> echo "Finding local distfiles ... "
> 
> ...

 

tez nie - DISTDIR zdaje sie widac dopiero w procesie emerge.... (jak puscisz set w konsoli to nie widac...  :Smile:  )

jesli juz to moze:

```
echo "Finding local distfiles ... "

find `emerge info | grep "^DISTDIR"` -type f | xargs -n1 basename | sort 
```

hmmmm - ale to sie wylozy przy bialych znakach na poczatku.... no to jeszcze zabezpieczenie na biale znaki na poczatku (nie pamietam... \W* ?) i moze hulac.

Pozdrawiam,

Przemek

----------

## nelchael

```
portageq distdir
```

----------

## _troll_

super! nie wiedzialem nawet, ze cos takiego mamy  :Smile:  thx nelchael - przydatny skrypcik!

tylko dla uscislenia:

```
echo "Finding local distfiles ... "

find `portageq distdir` -type f | xargs -n1 basename | sort 
```

Pozdrawiam,

Przemek

----------

## Insenic

```
portageq distdir
```

Ja tez nie wiedzialem ze cos takiego jest

----------

## quat

chcialbym zglosic skrypt findcruft autorstwa hepta_sean. 

skrypt jest to nastepca skryptu cruft autorstwa ectamur-a, niestety ten ostatni wydaje sie juz nie rozwijany.

jest to skrypt do znajdywania plikow ktore sa zbedne na dysku. skrypt jest w pelni konfigurowalny tzn mozna okreslic jakie katalogi lub plik nie powinien brac pod uwage. sprawdza rowniez dowiazania. 

dziala calkiem dosyc szybko (P4 1.8GHz, 256RAM przy dosyc rozbudowanym systemie sprawdzal nie wiecej niz 3 min).

tutaj jest link do watku o tym skrypcie, a tutaj najnowsza wersja

----------

## ai

przed chwila znalazlem to : https://forums.gentoo.org/viewtopic.php?t=67849/

tu jest dosc sporo przydatnych skryptow =] 

Mam nadzieje, ze jeszcze nikt tego tu nie zamieszczal ale chyba nie  :Razz: 

----------

## fallow

 *Przydatne Skrypty Sticky Thread wrote:*   

> 
> 
> Jak zglosic i zamiescic skrypt ? 
> 
> Skrypty sa przechowywane w tym watku ,  zamiescic skypt w watku ktory sluzy do dyskusji nad skryptami ( link wyzej )  , jesli uznamy ze skrypt nadaje sie do zamieszczenia wowczas zostanie on dodany do watku ktory obecnie czytasz czyli "Przydatne Skrypty na polskim forum" , pozniej zostanie dodany do niego link w pierwszym poscie w tym watku.
> ...

 

to naprawde strasznie ulatwia , ujednolica i usprawnia wszystko.

ai , np. nie wiem ktory chcesz zamiescic ? wszystkie  :Razz:  ? etc.

cheers.

----------

## Dawid159

Kolejny znaleziony skrypcik na forum  :Wink: 

Nazwa: Cleaning out stale distfiles

Autor: kerframil

Opis: Wyświetla pliki z distfiles, które mogą zostać usunięte, gdyż posiadamy nowsze wersje danego pakietu, np będzie chciał usunąć xorg-6.8.1 jeżeli znajdzie xorg-6.8.2  :Wink:  Uruchomiony z opcją --nopretend usuwa te pliki.

```

#!/usr/bin/perl -w

use strict;

my $lastname = 0;

my $lastversion;

my $lastext;

my @stalefiles;

my @files;

# Insert your exclusions here with trailing '-'

my %maskedfiles = (

   'X420src-' => 1,

   'gcc-' => 1,

   'freetype-' => 1

);

# Root check

if ($< != 0) {

   print "You must be root to run this script.\n";

   exit 0;

}

# Determine sources present on the system

print "Determining available tarballs in /usr/portage/distfiles ...\n";

opendir(DIR, "/usr/portage/distfiles");

@files = sort(readdir(DIR));

closedir(DIR);

# Grab names/versions, checking each time whether current distfile

# has been superceded. Push anonymous array ref containing required

# info into @stalefiles array.

print "Determining stale versions ...\n";

foreach (@files) {

   my $name;

   my $version;

   # Only operate on tarballs

   if (/(.+?\-)([0-9r\.\-]+)(\.tar\.gz|\.tgz|\.tar.bz2)/s) {

      $name = $1;

      $version = $2;

      next if ($maskedfiles{$name}); # Ignore "masked" files

      if ($lastname && $name eq $lastname) {

         if ($version gt $lastversion) {

            push (@stalefiles, [$name, $version, $lastversion, $lastext]);

         }

      }

      $lastname = $name;

      $lastversion = $version;

      $lastext = $3;

   }

}

if (@stalefiles == 0) {

   print "\nNo stale distfiles have been detected on your system!\n";

   exit 0;

}

if ($ARGV[0] && $ARGV[0] eq '--nopretend') {

   # User requested deletion so here goes ...

   print "*Nopretend* mode, deleting stale files:\n\n";

   foreach (@stalefiles) {

      my ($name, $version, $lastversion, $ext) = @{$_};

      unlink('/usr/portage/distfiles/' . $name . $lastversion . $ext);

      print "Deleted: $name$lastversion in favour of $name$version\n";

   }

}

else

{

   # Safe mode (default)!

   print "\7*Pretend* mode, will only pretend to delete files.\nTo actually delete the files, reinvoke with the --nopretend parameter.\n\n";

   foreach (@stalefiles) {

      my ($name, $version, $lastversion, $ext) = @{$_};

      print "Would delete: $name$lastversion in favour of $name$version\n";

   }

}

1;

```

----------

## Dawid159

[BUMP]  :Twisted Evil: 

----------

## lazy_bum

Mam nadzieje, że nie było, a znalazłem przypadkiem.

"Opis" tutaj i w zasadzie tyle by wystarczyło... Okazało się, że miałem KUPĘ śmiecia w world file. <-;

----------

## endel

Prosty skrypt, ulatwiajacy edycje plikow konfiguracyjnych z /etc/portage - pierwszy w zyciu jaki napisalem wiec prosze o uwagi.  

```
#!/bin/sh

#

#Created by endel <endel@tlen.pl> 

#

############Podaj nazwe swojego edytora################

         edytor=nano

#######################################################

if [ -f /sbin/functions.sh ]

then

  source /sbin/functions.sh

else

  echo "Brak /sbin/functions.sh"

  exit 1

fi

[[ $EUID != 0 ]] && eerror "Uruchom skrypt z konta administratora" && exit 1

[ -d /etc/portage ] || mkdir /etc/portage

[ -d /etc/portage/profile ] || mkdir /etc/portage/profile

dialog --title "Uzycie plikow  z /etc/portage" \

--backtitle "Msgbox" \

--msgbox "

package.keywords : odmaskowywanie pakietow (~x86 ~sparc ...)

package.mask : maskowanie pakietow

package.unmask : odmaskowywanie pakietow (hard masked)

package.use : flagi use przyporzadkowane do poszczegolnych pakietow

package.provided : pakiety z tego pliku nie beda instalowane/aktualizowane

Created by endel <endel@tlen.pl>" 12 80

a="/etc/portage/package.keywords"

b="/etc/portage/package.mask"

c="/etc/portage/package.unmask"

d="/etc/portage/package.use"

e="/etc/portage/profile/package.provided"

dialog --clear \

--title "Wybierz plik do edycji" \

--backtitle "Lista wyboru" \

--radiolist "" 10 70 5 \

"a" "package.keywords" "off" \

"b" "package.mask" "off" \

"c" "package.unmask" "off" \

"d" "package.use" "off" \

"e" "package.provided" "off" \

2> tmp

wybr=`cat tmp`

case $wybr in

    a) $edytor $a ;;

    b) $edytor $b ;;

    c) $edytor $c ;;

    d) $edytor $d ;;

    e) $edytor $e ;;

    *) exit

esac

rm tmp
```

Last edited by endel on Thu Dec 22, 2005 9:52 am; edited 1 time in total

----------

## endel

I jeszcze jeden prosty skrypt - drugi w zyciu jaki napisalem  :Smile:  prosze o uwagi. Niezwiazany jest bezposrednio z Gentoo ale wydaje mi sie, ze bedzie przydatny dla osob uzwajacych Fluxboxa. Sluzy do edycji plikow konfiguracyjnych fluxboxa, oraz pliku konfiguracyjnego aktualnego tematu fluxboxa 

```
#!/bin/sh

#

#Created by endel <endel@tlen.pl> 

#

############Podaj nazwe swojego edytora################

         edytor=nano

#######################################################

a="$HOME/.fluxbox/apps"

b="$HOME/.fluxbox/groups"

c="$HOME/.fluxbox/init"

d="$HOME/.fluxbox/keys"

e="$HOME/.fluxbox/menu"

f="$HOME/.fluxbox/startup"

th=`grep -i "^.*\.stylefile:.*$" $HOME/.fluxbox/init | cut -d: -f2`

if [ -e `grep -i "^.*\.stylefile:.*$" $HOME/.fluxbox/init | cut -d: -f2`/theme.cfg  ]

then st=`grep -i "^.*\.stylefile:.*$" $HOME/.fluxbox/init | cut -d: -f2`/theme.cfg

else st=`grep -i "^.*\.stylefile:.*$" $HOME/.fluxbox/init | cut -d: -f2`

fi

if [ -e $HOME/.fluxbox/init  ] 

then

dialog --title "Uzycie plikow  z $HOME/.fluxbox" \

--backtitle "Msgbox" \

--msgbox "

  /apps                   specyficzne ustawienia dla uruchamianych aplikacji 

  /groups                 aplikacje dla ktorych okna beda grupowane 

  /init                   podstawowy plik konfiguracyjny Fluxboxa 

  /keys                   definiowanie skrotow klawiszowych 

  /menu                   plik konfiguracji glownego menu 

  /startup                aplikacje uruchamiane przy starcie 

  /`basename $st`         plik konfiguracyjny biezacego stylu (`basename $th`)

     `[ -w $st ] || echo "brak uprawnien do zapisu tego pliku (read-only) !"` 

Created by endel <endel@tlen.pl>" 16 67

dialog --clear \

--title "Wybierz plik do edycji" \

--backtitle "Lista wyboru" \

--radiolist "" 12 70 7 \

"a" "apps" "off" \

"b" "groups" "off" \

"c" "init" "off" \

"d" "keys" "off" \

"e" "menu" "off" \

"f" "startup" "off" \

"g" "style config" "off" \

2> tmp

wybr=`cat tmp`

case $wybr in

    a) $edytor $a ;;

    b) $edytor $b ;;

    c) $edytor $c ;;

    d) $edytor $d ;;

    e) $edytor $e ;;

    f) $edytor $f ;;

    g) [ -w $st ] || 

   dialog --title "Brak uprawnien do zapisu" \

   --backtitle "Msgbox" \

   --msgbox "

Jesli chcesz miec mozliwosc zapisu pliku konfiguracyjnego 

stylu `basename $th` uruchom skrypt z konta root-a" 9 65

       $edytor $st ;;

    *) exit

esac

rm tmp

clear

else

!/bin/bash

dialog --title "Informacja" \

--backtitle "" \

--msgbox "

Brak plikow konfiguracyjnych w

$HOME/.fluxbox - pliki sa tworzone

po pierwszym uruchomieniu fluxboxa" 11 45

dialog --title "Uzycie plikow  z $HOME/.fluxbox" \

--backtitle "Msgbox" \

--msgbox "

  /apps                   specyficzne ustawienia dla uruchamianych aplikacji 

  /groups                 aplikacje dla ktorych okna beda grupowane 

  /init                   podstawowy plik konfiguracyjny Fluxboxa 

  /keys                   definiowanie skrotow klawiszowych 

  /menu                   plik konfiguracji glownego menu 

  /startup                aplikacje uruchamiane przy starcie 

  /`basename $st`         plik konfiguracyjny biezacego stylu (`basename $th`)

     `[ -w $st ] || echo "brak uprawnien do zapisu tego pliku (read-only) !"` 

Created by endel <endel@tlen.pl>" 16 67

dialog --clear \

--title "Wybierz plik do edycji" \

--backtitle "Lista wyboru" \

--radiolist "" 12 70 7 \

"a" "apps" "off" \

"b" "groups" "off" \

"c" "init" "off" \

"d" "keys" "off" \

"e" "menu" "off" \

"f" "startup" "off" \

"g" "style config" "off" \

2> tmp

wybr=`cat tmp`

case $wybr in

    a) $edytor $a ;;

    b) $edytor $b ;;

    c) $edytor $c ;;

    d) $edytor $d ;;

    e) $edytor $e ;;

    f) $edytor $f ;;

    g) [ -w $st ] || 

   dialog --title "Brak uprawnien do zapisu" \

   --backtitle "Msgbox" \

   --msgbox "

Jesli chcesz miec mozliwosc zapisu pliku konfiguracyjnego 

stylu `basename $th` uruchom skrypt z konta root-a" 9 65

       $edytor $st ;;

    *) exit

esac

rm tmp

clear

fi
```

----------

## jgr

Hi, napisałem prosty skrypt który pobiera listę nowych ebuildów z http://www.gentoo-porage.com, może komuś się przyda. Ja osobiście używam tego, że mam ten skrypt w cronie i co jakiś czas dostaję informacje na email o nowych ebuildach, także jak kto to lubi, wynik działania tego skryptu można zobaczyć tutaj http://jagernot.webpark.pl/sasasa.png :) Aby skrypt poprawnie działał potrzeba zrobić jeszcze:

```
emerge dev-perl/libwww-perl
```

Ogólnie kod:

```
#!/usr/bin/perl -w

# gentoo-portage-com.pl

# jgr <jagernot@op.pl>

#

# Depends?

#  dev-perl/libwww-perl

use LWP::Simple;

use POSIX qw (strftime);

use Term::ANSIColor;

sub 

is_pkg ($$)

{

 my ($branch, $package) = @_;

 opendir (DIRPATH, "/var/db/pkg/$branch");

 my @buf = readdir DIRPATH;

 foreach (@buf) {

  if ($_ =~ /$package/) {

    closedir DIRPATH; return $_;

  }

 }

 closedir DIRPATH;

 return "null";

}

my @htmlcode  = split (/\n/, get ('http://www.gentoo-portage.com'));

my $val       = 0;

my $string    = strftime "%Y-%m-%d", localtime;

print ">> New ebuilds ($string) at gentoo-portage.com:\n\n";

foreach (@htmlcode) {

 $val = 1

  if ($_ =~ /$string/);

 $val = 0

  if ($_ =~ /<\/table>/ && $val == 1);

 if ($val == 1 && $_ =~ /<span>([^ ]*-[^ ]*)\/([^ ]*)-([^ ]*)<\/span><br\/>/) {

  if (is_pkg ($1, $2) ne "null") {

    print colored ['bold green on_black' ], "  $1/",

          colored ['bold white on_black'], "$2-$3 ",

          colored ['bold yellow on_black'], "  ** new ebuild available **\n";

  } else {

    print colored ['green on_black'], "  $1/$2-$3\n";

  }

 }

}
```

Peace.

arsen_edit: wątek przeniesiony do  "[forum] Przydatne skrypty w ogole i w szczegole" Last edited by jgr on Tue Dec 27, 2005 9:22 am; edited 1 time in total

----------

## Kajan

Godny polecenia && dobra robota  :Smile: 

Pozdro

----------

## sebad

No niezle jgr. Trzeba bedzie przetestowac.

----------

## BeteNoire

Miły skrypcik ale mi się nie podoba w nim koloryzowanie wyjścia. Na przezroczystych termach nieładnie wygląda to czarne tło.

----------

## jgr

 *BeteNoire wrote:*   

> Miły skrypcik ale mi się nie podoba w nim koloryzowanie wyjścia. Na przezroczystych termach nieładnie wygląda to czarne tło.

 

Wiesz wolna wola, akurat ja osobiście nie korzystam z kolorków, wystarczy tylko usunąć te:

```
use Term::ANSIColor;
```

oraz

```
colored ['bold white on_black'],
```

I po sprawie, zero kolorów albo wedłe gustu ustawić własne :) także jak kto lubi :)

Peace.

----------

