Hallo,
Ich arbeite gerade mit dem Buch Linux - Das distributionsunabhängige Handbuch! http://openbook.galileocomputing.de/linux/
Ich bin bei Kapitel 4 ...... also arbeite mich gerade in die Shell ein, was auch sehr gut klappt.
Das Problem ist, das Befehle nur anhand eines Beispieles erklärt werden (welche ich auch nachmache!) - damit eine Savhe aber auch richtig fluppt, muss man mit ihr spielen (in dem Fall mit Shellkommandos!).
Mir fehlen aber die dazu nötigen Aufgaben um hier und da was auszuprobieren .......
Wie in der Überschrift schon genannt arbeite ich mit der bash .... vllt nützt diese Angabe etwas, falls nicht .... vergesst es!:)
natürlich könnt ihr hier Sachen reinposten für jedes x beliebiges Kapitel (nicht nur bis Kapitel 4)
danke schonmal für die Hilfe!
mfg Strauss
Linux 15.036 Themen, 107.107 Beiträge
Mit sed, grep, awk, sort, uniq etc kann man prima Logfile-Analyzer basteln. Versuch dich doch mal an sowas :-)
Also,
sich das selber beizubringen ist nicht gerade leicht und
Beispiele fallen einem doch erst ein wenn man schon etwas weiter ist.
Ein Buch mit Übungen und Lösungsvorschlägen gibt es bei Mathematik viele,
bei Linux vielleicht auch.
Wichtig ist es das an einem Laufenden System zu machen. Theoretisch allein reicht nicht. Durch praktisches Testen wird das Verständnis ganz wesentlich erleichtert.
Hat man geeignetes ein Buch.
nicht sofort nach den Lösungen schauen..
Backupscripte kann man mit einem Shellscript gut programmieren. Bei Unix/Linux gibt es das rsync Programm um backups zu machen.
rsync ist dazu gedacht in einem Shellscript gestartet zu werden.
Du kannst dir ja mal diese Backupscripte anschauen und für deine Rechner anpassen:
http://www.heinlein-support.de/web/support/wissen/rsync-backup/
Das ist auf jeden Fall besser als diese Imageprogramme, weil man an die gesicherten Daten mit einem normalen Dateimanager wie Midnight Commander rankommt.
Vielleicht solltest du dir mal ein einfaches Buch über Shellprogrammerung besorgen.
Ich fand dieses Buch von Reiner Krienke lesenswert:
http://www.amazon.de/Shell-Programmierung-Unix-Linux-Rainer-Krienke/dp/3446217223/ref=sr_1_6?ie=UTF8&s=books&qid=1238601490&sr=8-6
oder andere Bücher über Shellprogrammierung:
http://www.amazon.de/s/ref=nb_ss_w?__mk_de_DE=%C5M%C5Z%D5%D1&url=search-alias%3Daps&field-keywords=Shellprogrammierung&x=0&y=0
Aufgabenstellung :
Shell Script erstellen. welche folgende Aufagbe löst:
Anlegen eines temporären Swapfiles in /tmp
Name der Swapdatei = swapfile
Das Ganze soll nur als root funktionieren, ansosten Warnung ausgbenen
Script soll bei Aufruf prüfen, ob es diese Datei ggf. schon gibt, dann mittels swapoff trenne und Plattenplattz löschen. Wenn Datei nicht existiert Datei anlegen, und mittels swapon zum Swap hinzufügen.
Defaultwert soll 32 MB sein, welcher aber als Startoption anders festgelegt werden kann.
Des Weiteren soll eine Prüfung erfolgen, ob der gesamte vefügbare Plattenplatz größer 10% vom Gesamtplattenplatz ist.
Hier die Lösung zum Üben: (leider ist die Strukturierung verloren gegangen)
#!/bin/sh
###########################################################################
# Bash-Shell-Script Anlage eines temporaeren Swapfiles
# zur Erweiterung des Swapbereiches
###########################################################################
# Syntax ./newswap <optional Groesse der Swapdatei als integer>
# Default als Groesse der Swapdatei ist 32 MB
###########################################################################
# Version
# 1.0 Ersterstellung 29.10.2001
# 1.1 User-Abfrage eingebaut 10.04.2004
###########################################################################
# Anlagen eines zusaetzlichen Swapfiles als Datei
ver="1.1"
swapdir="/tmp/" # Ablageort der Swapdatei ggf. anpassen
#swapdir="/mnt/dosf/" # Ablageort der Swapdatei ggf. anpassen
swapfilename="swapfile"
swaptarget=$swapdir$swapfilename
blocksize=1024
isroot=$(whoami)
swapcount=$[$blocksize * 32] # Defaultgroesse = 32MB
if [ $isroot = "root" ]; then
freespace="free -o -k -t"
helptxt="\n\n(C) 2001-04 by repi newswap V $ver\n=================================
\nVergroessern des Swapbereiches mittels zusaetzliche temporaerer Swapdatei
\nUsage: $0 (Speicher in MB als integer = 32MB default)\n-(fh)
--help\n-f Anzeige Speicherbelegung\n-h oder --help diese Hilfe\n"
case "$1" in
-f ) echo -e "\nSpeicher und Plattenbelegung im Zielverzeichniss : $swaptarget";
eval $freespace ;eval df $swapdir; exit ;;
-h | --help ) echo -e $helptxt; exit ;;
* ) ;;
esac
# Neue Dateigroesse bei optionaler Eingabe berechnen
if [ "$1" ] ; then
swapcount=$[$blocksize * $1]
fi
# Pruefen, ob Swapdatei existiert, dann anlegen, sonst
# Swapfile ausser Betrieb nehmen und loeschen
if test -e $swaptarget; then
# Swapfile ausser Betrieb nehmen
swapoff $swaptarget
# Swapfile loeschen
rm $swaptarget
#Speicheranzeige
free -o -k -t
else
# Ermitteln, ob Plattenplatz reicht
countall=$(df $swapdir | grep dev | awk '{print $2}')
countcheck=$(df $swapdir | grep dev | awk '{print $4}')
countnew=$[$countcheck - $swapcount]
usepercentnew=$[($countnew * 100) / $countall]
# Bei Plattenplatz < 10 % wird kein Swapdatei angelegt
if [ $usepercentnew -lt 10 ]; then
echo -e "\007Plattenplatz kleiner 10 % !, Swapfile kann nicht angelet werden !!"
else
echo "Bleiben freier Plattenspeicher: " $usepercentnew "%"
# Leerdatei gewuenschter Groesse erzeugen
dd if=/dev/zero of=$swaptarget bs=$blocksize count=$swapcount
# Initialisierung des Swapfiles
mkswap $swaptarget $swapcount
# Zurueckschreiben aller Aenderungen im Dateisystem
sync
# Swapfile in Betrieb nehmen
swapon $swaptarget
# Speicheranzeige
free -o -k -t
fi
fi
else
echo
echo "Dieses Tool funktioniert nur als root..."
echo "... Sie sind hingegen als "$isroot" angemeldet !"
echo
fi
Was mir daran nur grad so schnell auffällt:
isroot=$(whoami)
if [ $isroot = "root" ]; then
könnte man eleganter und sicherer gestalten. Da die Möglichkeit besteht, den root-Account umzubenennen, sollte man besser die UID abfragen, welche für den root-Account immer 0 ist. Ausserdem kann man das ganze sowieso auf eine Zeile verkürzen. Summa summarum kommt dann raus:
if [ "$(id -u)" = "0" ]; then
Lediglich die drittletzte Zeile müsste dann halt
echo "... Sie sind hingegen als "$(whoami)" angemeldet !"
lauten :-)
Als weitere Finesse könnte man den Namen der Swapdatei randomisieren und z.B. mittels mktemp generieren lassen. Man könnte auch noch drauf eingehen, was denn derzeit alles an Swap eingebunden wird, die Info steht in /proc/swaps. Zumindest diese zwei Anregungen wären doch Ansätze für Frank-Strauss, um Repis Skript etwas zu erweitern.
mir geht es nicht nur um die programmierung, sondern das ich die shellbefehle in meinen Kopf bekomm .......
das Buch ist sehr gut - aber wenns um die Befehle geht - sehr sehr trocken ...........
naja ich pprobier mal lfs und gentoo aus ........ das Kind ins kalte Wasser schmeißen :D
Mein Hauptziel ist es Linux zu verstehen und später nicht nur die shell zu beherschen sondfern auch in c und c++ programmieren können .... Linux von der Picke aus lernen eben ....... (Für alle die sagen, es sei zu schwer - verschont mich mit eurem Gerede!)
mfg Strauss
Das kommt nur mit der Übung und Anwendung :-) Das ist wie Vokabeln lernen.
Für das Lernen der Shellprogrammierung gibt es bessere Bücher .
Jetzt lerne ich Shellprogrammierung u.s.w.
Wenn du C lernen willst, dann kann ich dir auch ein gutes Buch empfehlen:
http://www.amazon.de/Programmieren-C-ANSI-2-C-Reference/dp/3446154973/ref=sr_1_1?ie=UTF8&s=books&qid=1238661696&sr=8-1
oder das Original (vom Erfinder der Programmiersprache C)
http://www.amazon.de/Programming-Language-Prentice-Hall-Software/dp/0131103628/ref=sr_1_2?ie=UTF8&s=books-intl-de&qid=1238661696&sr=8-2
Dazu gibt es auch noch ein Lösungsbuch für die Aufgaben.
Die Programmiersprache C ist eng mit der Entwicklung des Unix Betriebsystems verbunden. Die Funktionen aus der C Standardbibliothek sind auch im POSIX Standard (oder in der Single Unix Spezifikation) definiert.
Hallo the_mic,
wie Du ja ersehen kannst habe ich den Script 2001 Ersterstellt. Da habe ich mich mit der Materie ein halbes Jahr beschäftigt. Das Teil habe ich seither auf alle meine Linuxinstallationen "mitgeschleppt" und da es bisher überall auf Anhieb funktioniert hat, habe ich nicht wieder groß reingeschaut.
Als Abwandlung des bekannten Spruchs gilt hier: "never touch a running file"
Gruß
repi