Nützliche selbstgestrickte Scripte für die Alltagsadministration

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
heisenberg
Beiträge: 1945
Registriert: 04.06.2015 01:17:27

Nützliche selbstgestrickte Scripte für die Alltagsadministration

Beitrag von heisenberg » 19.03.2021 17:51:10

Welche Eure eigenen Scripte helfen Euch in der Alltagsadministration? Welche wären echt nütztlich, gibt es aber noch nicht?

Schreibt es hier rein!

Ich fange mal an:

Anzeigen wieviel Platz alle Pakete brauchen mit einem bestimmten Muster von Paketnamen

Zeigt z. B. an, wievel alle Pakete mit Namen "perl","ruby","php" oder "python" im Paketnamen:

Code: Alles auswählen

# program: pkgsize (function)
#
# purpose: summarize installed size of all packages with a given pattern
#                output in KB
#
# usage: pkgsize <regex>
#
# regex is embedded in .* for a wildcard match

pkgsize() {
        dpkg-query --show --showformat '${Package} ${Installed-Size} \n' \
                | awk -v muster=".*$1.*" '

                        function readable( input,     v,s )
                          {
                                split( "KiB MiB GiB TiB" , v )
                                if( input + 0.0 == input )   #confirms that the input is a number
                                   {
                                        while( input > 1024 ) { input /= 1024 ; s++ }
                                        return sprintf( "%0.2f %s" , input , v[s] )
                                   }
                                else
                                   {
                                        return input
                                   }
                          }

                        BEGIN {sum=0} 
                        match($0,"^"muster" "){sum=sum+$2} 
                        END {print readable(sum*1024)}'

}
Beispielaufrufe:

Code: Alles auswählen

$ pkgsize perl
147.35 MiB
$ pkgsize php
208.94 MiB
$ pkgsize ruby
12.56 MiB
$ pkgsize apache
638.00 KiB
Nachtrag: Die Zahlenformatierung kann man natürlich robuster mit numfmt umsetzen.
Zuletzt geändert von heisenberg am 26.03.2021 14:18:14, insgesamt 1-mal geändert.
Ich biete keine Lösungen sondern gebe Hilfe zur Selbsthilfe.

Benutzeravatar
whisper
Beiträge: 2677
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: Nützliche selbstgestrickte Scripte für die Alltagsadministration

Beitrag von whisper » 25.03.2021 20:13:35

1+ für den Thread!

Ich hatte mal vor Jahren einen Rechte Gau. Das damals verwendete Backup hatte beim Restore die Rechte der Dateien versaut.
Ich war selber schuld, weil ich halt direkt zurück gesichert hatte.
Deshalb läuft auf dem Server nun das hier:

Code: Alles auswählen

#!/bin/bash
#dateirechte.sh
DATUM=$(date +%d-%m-%Y)

nice getfacl -R -n / >/home/backup/dateirechte-$DATUM.txt
 
# wieder herstellen mit
#setfacl --restore=dateirechte.txt
Die Datei dateirechte.txt wird täglich mitgesichert und hilft versehentliche Änderungen zu reparieren
Ausserdem bei evtl. forensichen Vorfällen

mcb
Beiträge: 778
Registriert: 25.06.2020 17:28:49

Re: Nützliche selbstgestrickte Scripte für die Alltagsadministration

Beitrag von mcb » 25.03.2021 21:11:58

Spannend !

Ich versuche gerade ein Script zu basteln das mir ein Kernelmodul nach dem Update signiert... Work in progress :oops:

Benutzeravatar
whisper
Beiträge: 2677
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: Nützliche selbstgestrickte Scripte für die Alltagsadministration

Beitrag von whisper » 27.03.2021 11:56:37

Zählt ein Script, welches den Status der mailq anzeigt auch?
Also sowas als HTML

Code: Alles auswählen

Detaillierte Liste der Ziel-Domains

				             1Tag           2Tage     3Tage  länger 
				 6h 12h  18h  24h  30h  36h  42h  48h  54h  >54h
                              T 360 720 1080 1440 1800 2160 2520 2880 3240 3240+
                       TOTAL 17   3   1    0    1    1    0    0    3    2     6
               froscraft.com  1   0   0    0    0    0    0    0    0    1     0
              rattlebang.com  1   1   0    0    0    0    0    0    0    0     0
              shookstone.com  1   0   0    0    0    0    0    0    0    0     1
              rickylawns.com  1   0   0    0    0    0    0    0    0    0     1
             echienerart.com  1   0   0    0    1    0    0    0    0    0     0
            betterricher.com  1   0   0    0    0    0    0    0    0    0     1
            friarsonbase.com  1   0   1    0    0    0    0    0    0    0     0
          thehippyplanet.com  1   0   0    0    0    0    0    0    0    0     1
          solarsafepools.com  1   0   0    0    0    1    0    0    0    0     0
         onlynaturalepet.com  1   0   0    0    0    0    0    0    0    0     1
         farmvillemotels.com  1   0   0    0    0    0    0    0    1    0     0
        compositenations.com  1   1   0    0    0    0    0    0    0    0     0
       bluecareanywherea.com  1   1   0    0    0    0    0    0    0    0     0
      intractiveadvisers.com  1   0   0    0    0    0    0    0    1    0     0
      downtowntempetides.com  1   0   0    0    0    0    0    0    0    0     1
   marvincleaningservice.com  1   0   0    0    0    0    0    0    1    0     0
 abisiniaspecialtycoffee.com  1   0   0    0    0    0    0    0    0    1     0
Also nur für Leute, die einen Server mit postfix betreiben...
Egal, hier kommt es.
:mrgreen:

Code: Alles auswählen

#!/bin/bash
# Script zum Aufruf aus Cron heraus
# C GPL2 whisper 2021.03.27
# Crontab:
# 1 6,8,10,12,14,16,18,20,22 * * * /usr/local/sbin/mailq-2html.sh >/var/www/das.web.de/mailq.html 2>/dev/null
# Gibt eine Übersicht über die Postfix Mail Queue
#

echo ""
echo "<!DOCTYPE html>"
echo '<html lang="de">'
echo '<head>'
echo '<meta charset="UTF-8"/>'
echo '<title>Übersicht über die Mail queue</title>'
echo '<body>'
echo "<h1>Übersicht über die Mail queue</h1>"
echo -n "Stand: "
date
echo '<pre>'
for q in active  bounce  corrupt  deferred  flush  "hold  " incoming  maildrop saved

    do
        count=$(find /var/spool/postfix/$q ! -type d -print | wc -l)
        printf "$q   \t$count<br>"
    done

echo '</pre>'
echo '<hr>'
echo "<h1>Detaillierte Liste der Ziel-Domains</h1>"
echo '<pre><b>'
echo "                                       1Tag           2Tage     3Tage  länger "
echo "                           6h 12h  18h  24h  30h  36h  42h  48h  54h  >54h</b>"

# der export von PATH ist notwendig, weil das perl-script qshape intern noch postconf ausführt welches sonst nicht gefunden wird
# gezielt  /usr/sbin/qhape aufrufen reicht also nicht.
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

qshape -t 360 -l deferred

echo '</pre>'
echo "<b>Hinweis:</b> <i>Nach 4 Tagen wird der Zustellungsversuch abgebrochen und die E-Mail gelöscht.</i>"
echo '</body></html>'


Benutzeravatar
whisper
Beiträge: 2677
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: Nützliche selbstgestrickte Scripte für die Alltagsadministration

Beitrag von whisper » 21.04.2021 20:45:48

Ein Fragment zum Thema Datumsberechnung

Code: Alles auswählen

GESTERN="$(date -d @$(($(date +%s) - 86400)) +%Y-%m-%d)"
In einem shell Script brauche ich manchmal das gestrige Datum, durch den Umweg über Unixtime bin ich den Ärger mit Monats- und Jahresgrenzen los.

tobo
Beiträge: 1023
Registriert: 10.12.2008 10:51:41

Re: Nützliche selbstgestrickte Scripte für die Alltagsadministration

Beitrag von tobo » 21.04.2021 21:21:00

Date bietet da aber auch ein bisschen was:

Code: Alles auswählen

date -d yesterday "+%Y-%m-%d"

Benutzeravatar
whisper
Beiträge: 2677
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: Nützliche selbstgestrickte Scripte für die Alltagsadministration

Beitrag von whisper » 21.04.2021 21:47:43

Mist! verdammter, kannte ich schon mal. lange her.
Super, gut das wir drüber geredet haben :facepalm: :mrgreen:

Benutzeravatar
heisenberg
Beiträge: 1945
Registriert: 04.06.2015 01:17:27

Re: Nützliche selbstgestrickte Scripte für die Alltagsadministration

Beitrag von heisenberg » 04.05.2021 09:36:49

Wenn man schauen will, wann ein entfernter Host nach einem reboot wieder da ist:

upcheck

Code: Alles auswählen

#!/bin/bash

#
#      program:         upcheck
#
#      purpose:         run an host upcheck continuously to see when a host is reachable again
#                       for example after issuing a reboot
#
#      usage:           upcheck <hostname> <additional ssh-arguments> 
#      
#      prerequisites:   passwordless ssh login should be configured from the current invoking account
#                       into the target system
#

mylog() { echo "$(date) : $*"; }

main() { 

        local myhost=$1
        shift
        while :;do 

                if ping -c1 -w3 $myhost &>/dev/null ; then 
                        if ssh_out="$(timeout 10 ssh $myhost "$@" date 2>&1)" ;then
                                mylog "  OK: host $myhost reachable"
                        else
                                mylog "FAIL: host $myhost ssh failed: $ssh_out"
                        fi
                else
                        mylog "FAIL: host $myhost ping failed"
                fi
                sleep 10
        done
}

main "$@"
Ausgabe

Code: Alles auswählen

$ upcheck fai -p1234
Di 4. Mai 09:27:00 CEST 2021 :   OK: host fai reachable
Di 4. Mai 09:27:10 CEST 2021 : FAIL: host fai ssh failed: ssh: connect to host fai port 1234: Connection refused
Di 4. Mai 09:27:20 CEST 2021 : FAIL: host fai ssh failed: ssh: connect to host fai port 1234: Connection refused
Di 4. Mai 09:27:31 CEST 2021 : FAIL: host fai ssh failed: ssh: connect to host fai port 1234: Connection refused
Di 4. Mai 09:27:43 CEST 2021 : FAIL: host fai ping failed
Di 4. Mai 09:27:56 CEST 2021 : FAIL: host fai ping failed
Di 4. Mai 09:28:07 CEST 2021 :   OK: host fai reachable
Di 4. Mai 09:28:18 CEST 2021 :   OK: host fai reachable
Ich hatte vor kurzem eine Linux-VM in einer total überlasteten VMWare Umgebung in Arbeit. Da hat der reboot mehrere Minuten gedauert. Da war es ganz besonders nützlich mit einem Blick zu sehen, wenn(bzw. ob) die VM wieder erreichbar ist.
Ich biete keine Lösungen sondern gebe Hilfe zur Selbsthilfe.

Antworten