Schlagwort-Archive: Script

ECHO‘ is not recognized as an internal or external command,

Hin und wieder verwende ich zum Bearbeiten von Scripts die Software „Visual Studio Code“. Schlicht und ergreifend, weil ich diesen Editor umstellen kann, sodass der Hintergrund dunkel ist, was für die Augen ganz angenehm ist.

Wenn man allerding mit Code ein neues Batchfile erstellt, kann es passieren, dass man beim späteren Ausführen auf folgenden Fehler stösst:

C:\Windows\system32>´++@ECHO OFF
‚´++@ECHO‘ is not recognized as an internal or external command, operable program or batch file.

Nach einigem Gesuche bin ich dann schnell auf die Ursache gestossen:
Microsoft Visual Code verwendet utf-8 als Standardcodierung. Somit ist das Batch nicht richtig lesbar.
Abhilfe schafft man dadurch, dass man das Batch mit Notepad öffnet und bei „Speichern als…“ die Codierung auf ANSI umstellt.

ANSI Echo offBeim Öffnen bestehender Batchfiles habe ich das Problem noch nicht gehabt.
Wenn man möchte, kann man das umgehen, indem man in „Visual Studio Code“ die Standardcodierung umstellt:
Unter Files –> Preferences –> Settings findet man folgenden Eintrag:

// The default character set encoding to use when reading and writing files.
„files.encoding“: „utf8“,

Hat man die Zeile ausgewählt, kann man links auf ein Stiftsymbol klicken und hat dann die Auswahl aus den einstellbaren Zeichensätzen.

Bei ssh Verbindungen werden die Kennworte lesbar dargestellt

Problem:
Wenn man beim Kunden sitzt und sich per ssh auf einen Server verbindet, möchte man in der Regel nicht, dass die eingegebenen Kennworte lesbar dargestellt werden.

Bei folgenden Beispielen ist dies aber der Fall:

Beipiel1:
ssh benutzer@server ‚mysql -u benutzer -p‘

Beispiel2:
ssh benutzer@server „sudo ls“

In der jetzt kommenden Kennwortabfrage  wird in beiden Fällen das Kennwort gut lesbar angezeigt.

Lösung:
Um die Passworteingabe wieder zu verstecken, muss man lediglich die Option ‚-t‘ mitgeben.  Also:
ssh -t benutzer@server ‚mysql -u benutzer -p‘
bzw.
ssh -t benutzer@server „sudo ls“

Dadurch wird die Kennworteingabe wieder „unsichtbar“ gemacht.

In dem Manpages zu ssh findet man folgende Beschreibung:
-t      Force pseudo-terminal allocation.  This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when
             implementing menu services.  Multiple -t options force tty allocation, even if ssh has no local tty.

Normalerweise wird bei einer ssh-Verbindung kein Pseudoterminal geöffnet, welche die Ein- und Ausgabe mit einem Prozess verbindet.
Daher werden die Kennworteingaben auch nicht maskiert.

Wenn man das dauerhaft haben möchte, ohne jedes Mal das ‚-t‘ eingeben zu müssen, kann man die ‚~/.ssh/config‘ entsprechend bearbeiten. Mehr dazu ist in den Manpages zu lesen:
man 5 ssh_config im Bereich RequestTTY

Linux: Plattenplatz überwachen ohne Nagios/Icinga

Manchmal benötigt man eine Benachrichtigung über den Plattenplatz, ohne ein großes Monitoring Tool wie Nagios/Icinga zur Verfügung zu haben.
Im konkreten Fall war es eine Linux-Appliance, die nach und nach die Systemplatte vollgeschrieben hat.
Leider war hier Icinga nicht nutzbar, da man auf dem System kein snmpd oder die Nagios Clients installieren konnte.

Lösung:
Auf dem Server (Debian) konnte der Konsolen-Mailer „mail“ installiert werden.

  1. Falls nicht schon vorhanden, den ‚mail‘ Konsolenclient installieren
    apt-get install mailutils
  2.  Exim konfigurieren, damit die Mails auch ausserhalb des Systems empfangen werden können:
    dpkg-reconfigure exim4-config
  3. Jetzt benötigen wir noch ein kleines Script:
    vi diskmailer
    Und dann folgenden Text einfügen:

    #!/bin/bash
    CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
    THRESHOLD=90
    
    if [ "$CURRENT" -gt "$THRESHOLD" ] ; then
        mail -s 'Disk Space Alert' mailid@domainname.com << EOF
    Der Plattenplatz deiner root Partition läuft voll. Verwendet: $CURRENT%
    EOF
    fi

    Erklärung:

    Mit CURRENT und TRESHOLD werden zwei Variablen erzeugt, bzw. gesetzt.
    Bevor man das Script einsetzt, kann man die Funktion für die Variable CURRENT überprüfen, in dem man den Befehl in den Klammern in der Shell absetzt:

    df / | grep / | awk '{ print $5}' | sed 's/%//g'

    Dabei sollte jetzt eine ganze Zahl gezeigt werden. Das sind die belegten Prozent der root Partition ‚/‘
    Man kann natürlich auch andere Partitionen so überwachen.
    Mit THRESHOLD gibt man die Warnschwelle an, ab der eine Mail gesendet werden soll. Die Zahl entspricht der belegten Prozent der Partition. Also 90 für eine 90% volle Partition.

    Mit der ‚if‘-Bedingung wird jetzt geprüft, ob die Warnschwelle erreicht wurde:

    if [ "$CURRENT" -gt "$THRESHOLD" ] ; then

    Also wenn der Wert für CURRENT größer ist (-gt) als der Wert für THRESHOLD, dann führe den Mail-Teil aus.
    Der weitere Teil des Scripts ist mehr oder weniger selbsterklärend. Dort wird dann der Betreff (Subject), der Empfänger und der Inhalt der Mail angegeben.

  4. Das Script kann man jetzt z.B. nach /etc/cron.daily legen.
    Nicht vergessen:
    Mit ‚chmod +x‘ ausführbar machen und keine Endung wie ‚.sh‘ in dem Verzeichnis verwenden.
  5. Alternativ kann man das Script auch woanders ablegen und als cronjob laufen lassen.

Hoffe es hilft …

Script-Quelle: linuxjournal

Ubuntu: Shellscript per Doppelklick starten

Eigentlich eine ganz banale Angelegenheit:

In einem Ordner liegen mehrere Scripte, die man gelegentlich ausführen muss.
In alten Ubuntu/Lubuntu Versionen konnte man per Doppelklick ein Script starten und nach einer Bestätigung wurde es dann ausgeführt.

In aktuellen Versionen ist es momentan so, dass man Scripte per Doppelklick lediglich mit anderen Anwendungen öffnen kann. Also z.B. im Editor.

Lösung:

Variante1:
Um das alte Systemverhalten wieder als default zu setzen, öffnet man ein Terminal-Fenster und gibt folgendes ein:
gsettings set org.gnome.nautilus.preferences executable-text-activation ask

Folgende Parameter sind möglich:
ask      = Nachfragefenster, bei dem man die Ausführung bestätigen muss
launch = Ausführung ohne Nachfrage
display = Scriptinhalt wird angezeigt

Variante 2:

Sofern man Nautilus verwendet, geht man auf die Einstellungen (Zahnrad –> Preferences) und dort auf den Karteireiter ‚Behavior‘.
Dort gibt es den Bereich ‚Executable Text Files‘ – hier wird festgelegt, wie sich Nautilus bei ausführbaren Scripten verhält.
Hier gibt es auch wieder die Punkte, die ich in Variante 1 schon genannt habe.
Ich habe da die Nachfragen wieder eingedreht.

Nautilus Preferences