Terminal-Befehle aus Datei?

W

warumauchnicht

Mitglied
Thread Starter
Dabei seit
06.01.2004
Beiträge
20
Reaktionspunkte
1
Terminal-Befehle aus Datei

Hallo,

ich probiere gerade die ersten Schritte mit dem Terminal, habe eigentlich auch zu fast jeder Frage schon etwas gefunden ;-)
Leider stehe ich aber immer noch vor einem Problem:
Ich will mehrere Befehle hintereinander ausführen, ohne sie immer einzelnd einzugeben bzw. hintereinander per Copy&Paste einzufügen.

Als Beispiel:
cp -R /Volumes/meineCD/meineDir/ /usr/local/mysql/data/
cp /Volumes/meineCD/meinePHP.ini /usr/local/php/lib/php.ini


Gibt es eine Möglichkeit, Befehle in einer Datei zu speichern und diese dann auszuführen oder etwas ähnliches?

Grüße,
Tino

Add: Weil die Frage ja beantwortet ist, habe ich den Titel geändert ;-)
 
Zuletzt bearbeitet:
Ja das geht und ist auch ganz einfach. Du legst einfach eine Datei an zb. bla.sh und schreibst das so hinein:

PHP:
#!/bin/sh

cp -R /Volumes/meineCD/meineDir/ /usr/local/mysql/data/
cp /Volumes/meineCD/meinePHP.ini /usr/local/php/lib/php.ini


Du kannst das Skript dann via Terminal ausführen. Falls er dir sagt Permissions Denied, musst du nur chmod +x bla.sh machen um es ausführen zu können.
 
Thanks ;-)

Und wie lautet der Befehl zum ausführen? Mit open bekomme ich die Datei nur im Editor (SubEthaEdit) geöffnet - logisch aber nicht erwünscht ;-)

Grüße,
Tino
 
wenn die Datei ausfuehrbare Kommandos enthaelt und auf .sh endet (also ein script ist) wird dieses script durch Eingeben des Namens mit der Endung .sh und anschl. "enter" ausgefuehrt.

Cheers,
Lunde
 
Über .sh-Datei einloggen?

Danke euch allen, funktioniert auch!

Jetzt habe ich aber noch eine Frage, die sich daran anschließt:
Kann ich mich auch automatisch in dieser Datei einloggen?

Das ganze soll zu einer Datensicherung dienen, wobei die Daten aber nur über root zu erreichen sind. Der Benutzer ist jedoch nicht so firm, dass ich ihm jedesmal zumuten will, sich über root einzuloggen (nachher macht er etwas kaputt ;-)).

Ich würde es mir so vorstellen, es klappt aber leider nicht:
PHP:
# Einlogbefehl
login root

# Normalerweise wird ja jetzt das Passwort abgefragt,
# deswegen geb' ich's
musterpasswort

# jetzt die restlichen Befehle
cp usw...

Gibt es hierfür eine Lösung?

Thanx, Tino
 
Hallo, ich frag mal einfach noch mal nach, ich hoffe, ihr verzeiht das ;-)

Also: Gibt es eine Möglichkeit, sich in einer .sh - Datei als User x einzuloggen, wenn man sein Passwort kennt?

Thanx, Tino
 
hallo zusammen,

du brauchst nicht in der Datei einen login befehl auszuführen, sondern kannst das ganze über die Rechtevergabe regeln.

Lass mich mal kurz überlegen kopfkratz

also zuerst machst du

sudo chown root <name_des_scripts>
dann
sudo chgrp admin <name_des_scripts> (unter Panther)
oder
sudo chown wheel <name_des_scripts> (unter Jaguar)

Bei sudo wirst du beim erstenmal innerhalb fünf minuten nach einem passwort gefragt, da gibst du DEIN Passwort ein (funktioniert nur, wenn Du ein Admin-Benutzer bist)

Die Folge ist, dass der Eigentümer der Skriptdatei nun root und die Gruppe admin bzw. wheel ist.
Alternativ kannst du das Skript gleich in einer rootshell schreiben

nun machst du

sudo chmod 4755 <name_des_scripts>

Deiser Befehl hat zur Folge, dass das Script von jedem ausgeführt werden darf, aber mit den Rechten des Eigentümers (hier also von root) ausgeführt wird.
voila:
Ziel erreicht

btw
ein Skript kann, aber muss nicht mit dem suffix .sh enden.
Der Name ist beliebig, wichtig ist aber der headbang (#!/bin/sh oder #!/bin/tcsh oder auch #!/bin/bash - je nachdem).
Wenn du in deinem Home ein Verzeichnis bin anlegst, musst du noch nicht einmal den kompletten Pfad angeben, sondern das Skript ist direkt von der Kommandozeile aus ausführbar.
Wenn dd das Skript unter /bin oder /usr/bin ablegst ist es für jeden User ausführbar.
 
Skript für Backup von SQL Daten

halo nochmal,

jetzt hab ich erst die Befehle gelesen, die Du in Deinem Skript haben möchtest. :D

Sieht ein bisschen so aus, als ob du ein backup deiner SQL Datenbank durchführen möchtest,
Dafür hab ich unter Jaguar mal ein Skript geschrieben, das ich per Cronjob täglich ausgeführt habe.
Dann brauchst du noch nicht einmal mehr einen Benutzer damit zu belasten.

Das Skript macht folgendes:

1. Es legt 7 durchnummerierte backups der sql-Datenbanken an.
2. Die backups werden getar´t und gezip´t
3. Bei jedem Durchlauf werden die bereits vorhandenen Backups um eine Nummer erhöht, das siebte fliegt jeweils raus

Auf diese Weise hat man immer eine Woche Backups in Reserve, ist also auch ein bisschen gegen schleichenden Datenverlust (User macht jeden Tag Blödsinn in der SQL-Datenbank) geschützt.

Wenn jemand Interesse hat, poste ich das Skript hier.
 
Danke maceis,

mit sudo klappt's wunderbar und auch mit deiner Datensicherung liegst du nicht daneben ;-)

Bin allerdings mittlerweile auf die mitgelieferte Routine mysqldump gekommen (handelt sich um mySQL) - geht auch prima per Terminal und ist einfacher zu handeln.

Aber trotzdem vielen Dank, da sudo nun nur noch eine Passworteingabe nötig macht und der Rest von alleine läuft.

Tino
 
prima warumauchnicht

die o. g. Prozedur ermöglich allerdings, dass ein Skript auch ohne Eingabe von sudo mit root-Rechten abläuft.

Das bewirkt, dass man Benutzern, die keine Adminrechte haben, erlauben kann, bestimmte Skripts oder Befehle mit root-Rechten auszuführen.

Vorteil: jemand braucht kein root-Passwort zu kennen, um bestimmte genau definierte Wartungsaufgaben auszuführen
 
Re: Skript für Backup von SQL Daten

Original geschrieben von maceis
Wenn jemand Interesse hat, poste ich das Skript hier.

ja bitte ;)
 
hallo [MN]n0b0dy

sorry, hat etwas gedauert, aber ich bin etwas im Stress.
Trotzdem wollte ich das Skript erst testen, ob es auch unter Panther wie erwartet läuft.

damit es funktioniert müssen folgende Voraussetzungen geschaffen sein:

Es muss ein Verzeichnis "/sqlbakd" geben oder einen gleichnamigen link, der auf das Verzeichnis zeigt, in dem die Backups gespeichert werden sollen.
Schreibrecht für root ist in diem/n Verzeichnis erforderlich.
Das Skript sollte den Eigentümer root, die Gruppe admin (oder wheel unter Jaguar) haben und die Rechte 4755.

Wenn das Skript in einem Suchpfad liegt, kann es per Cronjob gestartete werden (z B täglich).
Eine Option zum restore ist bisher nicht implementiert, ist aber möglich.

Code:
#!/bin/sh

#################################################################################
#                                                                               #
# Dieses Skript erstellt eine siebenfaches numeriertes Backup der sql Datenbank #
#     Es wurde auf der Grundlage der Standard rollups von Mac OS X entwickelt   #
#                    Die Verwendung und Weitergabe ist frei                     #
#                      'maceis' alias 'Doc MacRebennack'                        # 
#              feedback: doc_mac_rebennack [at] chaos-net.de                    #
#                                   2004-02-11                                  #
#                                                                               #
#################################################################################


#################################################################################
#                                                                               #
#           Es ist erforderlich ein Verzeichnis /sqlbakd anzulegen              #
#                Altenativ kann ein link verwendet werden                       #
#             der auf das Zielverzeichnis des Backups zeigt                     #
#                                                                               #
#################################################################################

# Suchpfad setzten (Standard fuer sh-Skripts)
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
# Hostnamen automatisch bestimmen
host=`hostname`
# Augabe am prompt
echo "Subject: $host Backup der SQL-Datebank"

# Variablen initialisieren
# Quelle des backups
sqld=data
# Ziel des Backups
sqlbakd=/sqlbakd/

# Ausgabe am prompt
echo ""
echo -e "BackUp der SQL-Datebanken: "

# Wechsel ins sql-Verzeichnis
cd /usr/local/mysql/

# Beginn for-Schleife
for i in $sqld; do
# If Ebene 1
    if [ -d "${i}" ]; then

        echo "Verzeichnis \""${i}"\" existiert."
        echo `ls  ${sqlbakd}`

# wenn /usr/bin/tar existiert, dann wird die Erweiterung ".tgz angehaengt"
        if [ -x /usr/bin/tar ]; then gzext=".tgz"; else gzext=""; fi

# Pr?ºfen ob scho Archive mit Nummernendungen vorliegen
# Falls ja werden diese jeweils um eines erh??ht
        if [ -f "${sqlbakd}${i}.6${gzext}" ]; then mv -f "${sqlbakd}${i}.6${gzext}" "${sqlbakd}${i}.7${gzext}"; fi
        if [ -f "${sqlbakd}${i}.5${gzext}" ]; then mv -f "${sqlbakd}${i}.5${gzext}" "${sqlbakd}${i}.6${gzext}"; fi
        if [ -f "${sqlbakd}${i}.4${gzext}" ]; then mv -f "${sqlbakd}${i}.4${gzext}" "${sqlbakd}${i}.5${gzext}"; fi
        if [ -f "${sqlbakd}${i}.3${gzext}" ]; then mv -f "${sqlbakd}${i}.3${gzext}" "${sqlbakd}${i}.4${gzext}"; fi
        if [ -f "${sqlbakd}${i}.2${gzext}" ]; then mv -f "${sqlbakd}${i}.2${gzext}" "${sqlbakd}${i}.3${gzext}"; fi
        if [ -f "${sqlbakd}${i}.1${gzext}" ]; then mv -f "${sqlbakd}${i}.1${gzext}" "${sqlbakd}${i}.2${gzext}"; fi
# Flag-echo zur Fehlersuche
# echo "${sqlbakd}${i}.0${gzext}"
        if [ -f "${sqlbakd}${i}.0${gzext}" ]; then mv -f "${sqlbakd}${i}.0${gzext}" "${sqlbakd}${i}.1${gzext}"; fi

# Anlegen des neuen Backups
        if [ -d ${i} ]; then echo "Alles ok"; rmdir $sqlbakd/data ; mkdir $sqlbakd/data && if [ -x /usr/bin/tar ]; then tar -czvpf $sqlbakd/data.0$gzext $sqld; fi ; fi

# Ende if Ebene 1
    fi

# Ende for-Schleife
done

#echo ""

ls -l $sqlbakd/
 
mist, so hats nicht funktioniert.
mal versuchen, ob ich ne textdatei anhängen kann:
---> siehe letzten post
---> irgendwie ist das hier murks ; naja was solls
 
Zuletzt bearbeitet:
ah jetzt hats geklappt -

noch eine kurze erläuterung,
das skript erzeugt eine ausgabe welche am Terminal ausgegeben wird, wenn es manuell gestartet wird-

das ganze ist aber so gedacht, dass eine mail an root (oder nach extern) gesendet werden soll (mit sendmail bzw postfix), wenn das skript von cron ausgeführt wird.
dazu muss man aber Cron und seinen mailserver entsprechend konfigurieren.

Ich hab mir damals immer emails schicken lassen, in denen ich sehen konnte, welche dateien gesichert worden waren und wie es vorher und hinterher im /sqlbakd aussieht.

Viel Spass damit
 
Zuletzt bearbeitet:
hier die datei.
die endung txt ist erforderlich, damit ich sie hier hochladen kann

----> erst beim letzten mal hats gelpappt -
ich kenn mich halt mit computern nicht so gut aus ;)
 
cool - Danke Maceis für die Mühe ;)

Werde das dann mal testen.... THX
 
hallo loits,

würde mich über feedbak freuen,
vor allem dann, wenn ich noch was verbessern kann - ich nutz das jetzt nämlich auch wieder und lass mir das ergebnis von Postfix an meine E-mail addi schicken
 
hallo zusammen

das Skript wird derzeit von mir überarbeitet, so dass das backup beliebiger Verzeichnisse in beliebigen Zielen möglich ist.

wird dann so sein

back-me-up [ -h ]
oder
back-me-up [ -s ] quell-Verzeichnis ziel-Verzeichnis

-h für Hilfe
-s für silent mode

---

Wer weiss, vielleicht schreib ichs mal in c++
kann nicht schaden :D

.(*>... Interesse ?
.//\
V_/___
 
Zurück
Oben Unten