Wie kann ich eine typische Text-Batch-Befehlsdatei schreiben und anschließend verwenden?
Ich spreche von einer Datei, die die folgenden Befehle enthält:
sudo -i
sudo apt-get update
sudo apt-get upgrade
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get check
exit
Ich denke, ich kann es mit Leafpad schreiben, aber ...
Wo muss ich es speichern?
Welches Format? Welcher Name und welche Erweiterung?
Wie kann ich es anschließend in einer LXTerminal-Sitzung mit nur einer Anweisung verwenden (idealerweise, wenn es eine Möglichkeit gäbe, es bei jedem Systemstart automatisch zu verwenden)?
Vielen Dank für Ihre Zeit!
Antwort1
In der unixähnlichen Welt gibt es keine „Batch“-Dateien. Wir verwenden Skripte, die „She-Bangs“ enthalten. Um ein solches Skript zu erstellen, öffnen Sie einen Texteditor (wie Leafpad) und beginnen Sie mit einer Zeile wie dieser:
#!/path/to/interpreter
Wo /path/to/interpreter
befindet sich die Binärdatei, die zur Interpretation Ihres Skripts verwendet wird? Unter Linux verwenden wir normalerweise „bash“ (Bourne Again SHell), eine „Weiterentwicklung“ der guten alten Bourne Shell. Bash führt im Wesentlichen Binärdateien mit im Skript angegebenen Argumenten aus Pfaden aus, die in der Umgebungsvariable PATH enthalten sind (normalerweise umfasst dies /bin, /sbin, /usr/bin, /usr/sbin und andere).
Sie können aber auch andere Interpreter wie Python, Perl, Ruby, sh, csh, zsh, dash, ksh und viele weitere Optionen verwenden.
Unter dem ganzen Kram kommt Ihr Skript. In Ihrem speziellen Fall können wir zum Ausführen der angegebenen Befehle Bash in einem Skript wie diesem verwenden:
#!/bin/bash
# the line above sets bash as the interpreter
# note that "sudo" is not required here because we will run the script as super user later.
apt-get update
# updates APT repositories
apt-get upgrade
# check for software upgrades and upgrade them
apt-get autoremove
# remove obsolete packages
apt-get autoclean
# remove stored .deb files
apt-get check
# update package cache and check for broken dependencies
Speichern Sie nun Ihre Datei. Eine Erweiterung ist nicht erforderlich, aber aus symbolischen Gründen sollten Sie ihr die Erweiterung .sh geben. Wir führen das Skript als Superuser aus, daher müssen die Dateiberechtigungen nicht geändert werden.
Öffnen Sie ein Terminal und wechseln Sie per CD zu dem Pfad, in dem Sie Ihr Skript gespeichert haben. Nehmen wir an, Sie haben es als script.sh gespeichert. Führen Sie den folgenden Befehl aus:
chmod +x script.sh
chmod
bedeutet "Änderungsmodus" und wird verwendet, um zu ändern, wer was mit Ihrem Skript tun kann. +x
fügt die Ausführungsberechtigung für alle Benutzer hinzu, wodurch jeder das Skript wie ein beliebiges anderes Programm ausführen kann. Ich werde nicht auf eine vollständige Liste der Bedeutungen der verschiedenen Berechtigungen eingehen, aberdiese Fragefasst sie ziemlich gut zusammen. Danach können Sie Folgendes eingeben:
sudo ./script.sh
Vergessen Sie nicht den Teil ./ und lassen Sie keine Leerzeichen zwischen dem ., dem / und dem s. Der sudo
Befehl wird mit Root-Rechten ausgeführt ./script.sh
, daher ist Ihr Passwort erforderlich (Sie müssen natürlich der Systemadministrator sein).
Antwort2
Was in der Windows-Welt als „Batch“-Datei bezeichnet wird, wird in der *NIX-Welt als „Skript“ bezeichnet. In den meisten Fällen sind Skripte Dateien mit mehreren Befehlen oder Befehlen, die auf bestimmte Weise angeordnet sind. Hier sind einige Dinge, die Sie wissen sollten:
Grundstruktur
Normalerweise sehen Sie etwa Folgendes:
#!/bin/sh
# Comments
printf "Hello world"
Die erste Zeile gibt einen Interpreter an (allgemein als Zeile bezeichnet shebang
), die zweite ist ein Kommentar (alles danach #
wird nicht interpretiert, nur einfacher Text), die dritte ist der eigentliche Befehl
Im Terminal können Sie eine Datei ohne die Shebang-Zeile aufrufen. Dadurch wird das Skript von Ihrer aktuellen Shell (auch Befehlsinterpreter genannt) gelesen und interpretiert. Ich verwende beispielsweise mksh
eine Shell. Ich gebe an, dass #!/bin/sh
es von der Standard-Shell von Ubuntu ausgeführt wird - dash
. Jede Shell hat bestimmte Besonderheiten in Bezug auf die Befehlssyntax, daher müssen Sie Ihr Skript entsprechend anpassen.
Skript schreiben
Dies muss in einem Texteditor erfolgen, Sie können es aber auch in LibreOffice Writer schreiben und dann im Klartext speichern. Persönlich verwende ich ( nano
meistens oder vim
) einfach Befehlszeilen-Texteditoren. Eine Analogie hierzu wären edit
Windows-Versionen vor Windows 7.
Dateinamen und Erweiterungen spielen auf *NIX-Systemen keine Rolle, da das System die ersten paar Bytes der Datei liest, um ihren Typ zu bestimmen. Ich habe mir angewöhnt, .sh
Erweiterungen hinzuzufügen, aber eigentlich ist das unnötig.
Skript ausführbar machen
Dies wird mit chmod 755 scriptName.sh
einem Befehl gemacht. Es bedeutet read-write-execute
Berechtigungen für den Eigentümer (Sie), read-execute
für Benutzer, die sich in der Eigentümergruppe befinden (z. B. könnte der Dateieigentümer sein admin
, wenn Sie also zur admin
Gruppe gehören, können Sie die Datei lesen und ausführen) und read-execute
für alle anderen. Geben Sie anderen niemals Schreibberechtigungen! Wenn Sie Superuser-Berechtigungen haben, könnte dies zu bösen Folgen führen (d. h. Sie könnten gehackt werden und böswillige Benutzer könnten Ihre Skripte so ändern, dass Ihre persönlichen Daten geschützt werden).
Ausführen von Skripten
Sie können ein Skript jederzeit ausführen, indem Sie im Terminal zum Skriptspeicherort navigieren und eingeben ./scriptName
.
Um einen Befehl irgendwo ausführen zu können, einschließlich Skripts, müssen diese irgendwo auf dem System gespeichert sein, das in die $PATH
Variable aufgenommen wird. Das meine ich damit:
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/xieerqi/bin
$PATH
Variable sagt mir, dass ich, wenn sich ein Skript oder eine ausführbare Binärdatei in einem dieser Verzeichnisse befindet /usr/local/sbin
, /usr/local/bin
diesen Befehl einfach durch Eingabe in das Terminal ausführen kann.
Jetzt sollten Sie für Ihre eigenen Skripte einen Ordner erstellen und die Skripte dort speichern. Wenn Sie Ihre Konfigurationsdatei bin
verwenden, enthält sie die folgenden Zeilen:bash
.profile
# set PATH so it includes user's private bin if it exists
#if [ -d "$HOME/bin" ] ; then
# PATH="$HOME/bin:$PATH"
#fi
#
Wenn Sie vor den letzten drei Zeilen (von if
bis ) die Auskommentierung entfernen , wird fi
Ihr persönlicher Ordner in die Variable aufgenommen.bin
$PATH