Linux 15.027 Themen, 107.035 Beiträge

systeminfos über linux ermitteln

Alekom / 33 Antworten / Baumansicht Nickles

hallo liebe Kollegen,

Als Laie habe ich mir gerade ein Skript im wahrsten Sinne gebastelt.

Zweck vom Skript soll nur ein schneller Überblick sein was man im PC  hat.

Im Hintergedanken auch nicht schlecht, für Leute, die im Nickles-Forum ihre Hardware posten sollen.

Die wichtigsten Befehle lauten: uname -a, lspci, lsusb, lsmod, ifconfig -a

Und jetzt das Skript (wenn wer kopieren möchte, einfach nur übernehmen)

------- Ab hier ----- (Diese Zeile aber nicht mitkopieren!!!)
#!/bin/sh
# Skript fuer Auslesen der Hardware
echo ++++++++++++++ > hardware.txt
echo +++ System +++ >> hardware.txt
echo ++++++++++++++ >> hardware.txt
uname -a >> hardware.txt
echo +++++++++++++ >> hardware.txt
echo +++ lspci +++ >> hardware.txt
echo +++++++++++++ >> hardware.txt
lspci >> hardware.txt
echo +++++++++++++ >> hardware.txt
echo +++ lsusb +++ >> hardware.txt
echo +++++++++++++ >> hardware.txt
lsusb >> hardware.txt
echo +++++++++++++ >> hardware.txt
echo +++ lsmod +++ >> hardware.txt
echo +++++++++++++ >> hardware.txt
lsmod >> hardware.txt
echo ++++++++++++++++ >> hardware.txt
echo +++ ifconfig +++ >> hardware.txt
echo ++++++++++++++++ >> hardware.txt
ifconfig -a >> hardware.txt
------- Bis hier --------(Diese Zeile auch nicht mitkopieren!!!)

Dateiname war bei mir ./hardware.sh, Dateirechte mit chmod +x unter root vergeben.

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
Borlander Alekom „systeminfos über linux ermitteln“
Optionen

Ich war mal so frei und habe das etwas flexibler weiter gebastelt:

#!/bin/sh

run_fancy () {
  COMMAND="$1"
  TITLE="${2:-$1}"
  echo
  echo '+++'
  echo "+++ $TITLE"
  echo '+++'
  $COMMAND
}

run_all() {
  run_fancy 'uname -a' 'System' 
  run_fancy lspci 
  run_fancy lsusb
  run_fancy lsmod
  run_fancy 'ifconfig -a' ifconfig  
}

LOGFILE="hardware.`date +%F`.`uuidgen`.txt"
run_all > $LOGFILE
echo "Ausgabe erfolgte in $LOGFILE"
bei Antwort benachrichtigen
Alekom Borlander „Ich war mal so frei und habe das etwas flexibler weiter ...“
Optionen

hallo Borlander,

danke für deine Bemühungen. für mich zum lernen wie man sowas schreibt natürlich ideal.

Wie kommt man auf run_fancy? und das mitn $1 kapier ich auch noch, denn das ist ja nur eine Variable

Aber das 2: innerhalb {} löst bei mir Fragezeichen auf.

Der Rest ist klar.

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
KarstenW Alekom „hallo Borlander, danke für deine Bemühungen. für mich zum ...“
Optionen

Die Variable $1 ist der erste Parameter von einem Shellscript. Das ist bei jedem BASH Shellscript immer gleich.
Die Variable $0 ist der Name des Shellscriptes und $1 ist der erste Parameter der dem Shellscript in der Kommandozeile übergeben wird.

run_fancy () ist eine Funktion genau so wie run_all (), in der verschiedene Befehle zusammengefasst sind, die immer zusammen ausgeführt werden sollen.




Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
Alekom KarstenW „Die Variable $1 ist der erste Parameter von einem ...“
Optionen

Hallo KarstenW,

danke für deine Antwort, $1 erster Parameter, danke für die Info.

und was hat das mit dem 2: auf sich?...das kapier ich nicht.

ich nehme an, das run_fancy ist eine funktion die man selbst nennen kann wie man möchte?

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
Borlander Alekom „hallo Borlander, danke für deine Bemühungen. für mich zum ...“
Optionen
Wie kommt man auf run_fancy?

Durch scharfes nachdenken bis Dir ein Funktionsname einfällt der kurz und knackig ist und grob beschreibt was die - selbst definierte - Funktion tut. Du köntest die Funktion auch xyz nennen, aber das wäre wenig zweckmäßig ;-)

Aber das 2: innerhalb {} löst bei mir Fragezeichen auf.

http://de.wikibooks.org/wiki/Linux-Kompendium:_Shellprogrammierung#Variablen-Substitution entfernt das die Fragezeichen? Wobei diese WikiBook-Seite als ganzes lesesnswert ist, da sie eine schöne Übersicht über Shell-Scripting liefert :-)

Gruß
Borlander

bei Antwort benachrichtigen
Alekom Borlander „Durch scharfes nachdenken bis Dir ein Funktionsname ...“
Optionen

hallo Borlander,

welch kesse Antwort! Durch scharfes nachdenken *g*

danke für den Link zur Shellprogrammierung, schaut sehr gut aus, ich werde mir mal das Book auf den Laptop runterladen und bei einer Kanne Kaffee mal screenreaden *inklusiver einer packung schokokeksi*

Gruß Alekom

Edit:

${Variable:-Wert} Nutzt den Wert von Variable. Falls die Variable nicht gesetzt ist, wird der Wert benutzt.

ich denke du meinst diese Zeile !

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
Borlander Alekom „hallo Borlander, welch kesse Antwort! Durch scharfes ...“
Optionen

Nabend Alekom

welch kesse Antwort! Durch scharfes nachdenken *g*

Das beschreibt den Vorgang der Namensfindung jedoch einfach am besten. So hatte im ersten Entwurf hatte ich auch noch einen anderen Namen verwendet, der jedoch eher unpassend war. Habe den inzwischen allerdings schon wieder vergessen. Etwas kurzes (und dadurch tendenziell recht praktisches) wie run wäre zu unspezifisch gewesen und run_logged hätte nicht gepasst da die Ausgabe in die Log-Datei erst außerhalb der Funktion erfolgt. Mit run_fancy gibt es zumindest einen kleinen Hinweis darauf, dass die Ausführung etwas schöner erfolgt. Vollkommen glücklich bin mich mit diesem Namen allerdings auch noch nicht. Gibt bestimmt noch eine schönere Möglichkeit ;-)

${Variable:-Wert} […] ich denke du meinst diese Zeile !

Exakt.

Gruß
Borlander

bei Antwort benachrichtigen
gelöscht_189916 Borlander „Durch scharfes nachdenken bis Dir ein Funktionsname ...“
Optionen

Ich finde das hier witzig (until-beispiel.sh)Zwinkernd

http://de.wikibooks.org/wiki/Linux-Kompendium:_Shellprogrammierung#until

@Alekom

Wenn Du Dein Skript nicht explizit als root laufen lassen willst oder kannst, kannst Du für die ganze Sache auch einen Eintrag in die /etc/sudoers vornehmen und dabei auch die Paßwortabfrage deaktivieren. Es ist natürlich aus Sicherheitsgründen nicht unbedingt sinnvoll, aber es funktioniert. Denn unter Opensuse benötigst Du für ifconfig und lspci root-Rechte und so kann das Skript auch als normaler User die komplette Ausgabe anzeigen.

fakiauso

bei Antwort benachrichtigen
Borlander gelöscht_189916 „Ich finde das hier witzig ...“
Optionen
Eintrag in die /etc/sudoers vornehmen und dabei auch die Paßwortabfrage deaktivieren. Es ist natürlich aus Sicherheitsgründen nicht unbedingt sinnvoll, aber es funktioniert.

Das kann sogar richtig gefährlich sein: Wenn das Script noch von Usern ohne root-Account editiert werden darf!

Ggf. wäre es sinnvoll im Script zu Testen ob die Ausführungsrechte vorhanden sind…

Gruß
bor

bei Antwort benachrichtigen
Alekom Borlander „Das kann sogar richtig gefährlich sein: Wenn das Script ...“
Optionen

also meine bescheidene meinung ist die, das ein normaler user keine root-rechte haben sollte.

passwortabfrage hat schon einen sinn. gibt ja viele user die brain 1.0 nicht nutzen.

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
Acader Alekom „also meine bescheidene meinung ist die, das ein normaler ...“
Optionen

Hallo Alekom,

definiere mal -----> normaler user



MfG Acader
bei Antwort benachrichtigen
Alekom Acader „Hallo Alekom, definiere mal -----> normaler user MfG Acader“
Optionen

Hallo Acader,

für mich ist ein normaler User, der Briefe in der Textverarbeitung tippt, seine Haushaltskassa am Pc erledigt, mailt, surft. usw... das übliche halt. (Gut, das mach ich ja auch und die meisten im Nickles-Forum auch.)

aber ein "normaler" User WILL sich nicht mit der Kommandozeile beschäftigen, wenn das System mal läuft.

Denn zum Lernen gibts immer was. Mit Lernen ist man nie fertig.

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
gelöscht_189916 Borlander „Das kann sogar richtig gefährlich sein: Wenn das Script ...“
Optionen

Hi

Ich bin halt nur darübergestolpert, weil beim einfachen Aufruf die Meldung kam "Befehl nicht gefunden" (Ausführungsrechte waren gesetzt). Aber das ist ja völlig klar, wenn ein Skript als User erstellt und ausgeführt wird, aber eben Aufrufe enthält, die unter der Susi root-Rechte voraussetzen, in dem Fall eben sbin/lspci und sbin/ifconfig.
Unter Ubuntu z.B. ist das kein Problem, weil das dort der normale User ebenfalls aufrufen darf.

Und da es mir keine Ruhe gelassen hat, wie das ohne Anmeldung als root trotzdem als User funzt, habe ich eben etwas herumprobiert. Erst Aufruf mit sudo, aber da war halt die Paßwortabfrage noch im Weg, auch wenn es nur ein paar Tipper mehr sind. Die /etc/sudoers habe ich dann so eingerichtet, das dieses Skript explizit nur ein User per sudo ohne Paßwort ausführen darf.

Als Szenario passend zu diesem Ansatz stelle ich mir zum Beispiel ein Live-Linux von Stick vor, das als Hardwarecheck für Katastrophenfälle und vermutlich kaputte Rechner immer dabei ist, in diesem Fall ist der Sicherheitsaspekt auch eher unrelevant, da es kein Produktivsystem ist, auch wenn es auf das eine Mal Paßwort eingeben eigentlich nicht ankommt. Auf einem richtigen Rechner macht man solche Spielchen selbstverständlich nicht. Mir ging es da eher um das prinzipielle Ob und Wie.

fakiauso

bei Antwort benachrichtigen
the_mic gelöscht_189916 „Hi Ich bin halt nur darübergestolpert, weil beim einfachen ...“
Optionen

Kannst du ifconfig als normaler User unter SUSE nicht aufrufen, wenn du den kompletten Pfad angibst, d.h. /sbin/ifconfig in der Konsole eintippst? Zumindest unter Debian funktioniert das. /sbin ist zwar nicht in $PATH des normalen Users gelistet, aber /sbin/ifconfig ist rechtemässig nicht eingeschränkt:
$ ls -l /sbin/ifconfig
-rwxr-xr-x 1 root root 72296 Sep  7 09:54 /sbin/ifconfig

Unter Ubuntu ist iirc auch /sbin und /usr/sbin in $PATH des normalen Users eingetragen. Daher kann man dort auch einfach nur ifconfig eintippen.

Die Interfaces ändern kann trotzdem nur root, aber das liegt daran, dass die entsprechenden Kernel-Aufrufe wiederum zwingend Rootrechte verlangen :-)

cat /dev/brain > /dev/null
bei Antwort benachrichtigen
gelöscht_189916 the_mic „Kannst du ifconfig als normaler User unter SUSE nicht ...“
Optionen
Kannst du ifconfig als normaler User unter SUSE nicht aufrufen, wenn du den kompletten Pfad angibst

Guten Morgen, Herr fakiauso;-)

Ja, das klappt bei mir auch. Das habe ich jetzt gar nicht bedacht, den vollen Pfad statt des einfachen Befehls in´s Skript zu setzen, weil ich eigentlich nur auf das Ausführen als root fixiert war.

Frühschichten und tiefgründiges Denken harmonieren wohl doch nicht immer.
bei Antwort benachrichtigen
Borlander gelöscht_189916 „Hi Ich bin halt nur darübergestolpert, weil beim einfachen ...“
Optionen
[…] Live-Linux […] ist der Sicherheitsaspekt auch eher unrelevant […] das eine Mal Paßwort eingeben eigentlich nicht ankommt.

Auf entsprechenden Live-Systemen hast Du aber häufig überhaupt kein Passwort gesetzt. Da kannst Du dann sudo ohne Passwort-Eingabe nutzen ;-)

Gruß
bor

bei Antwort benachrichtigen
KarstenW gelöscht_189916 „Ich finde das hier witzig ...“
Optionen

Ich würde die Ausführungsrechte prüfen:

#!/bin/sh

# Script braucht root Rechte

if [ "$UID" != 0 ] ; then
        echo
        echo "Script $0 braucht root Rechte !"
        echo
        exit 1
fi


run_fancy () {
  COMMAND="$1"
  TITLE="${2:-$1}"
  echo
  echo '+++'
  echo "+++ $TITLE"
  echo '+++'
  $COMMAND
}

run_all() {
  run_fancy 'uname -a' 'System'
  run_fancy lspci
  run_fancy lsusb
  run_fancy lsmod
  run_fancy 'ifconfig -a' ifconfig  
}

LOGFILE="hardware.`date +%F`.`uuidgen`.txt"
run_all > $LOGFILE
echo "Ausgabe erfolgte in $LOGFILE"

Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
Borlander KarstenW „Ich würde die Ausführungsrechte prüfen: #!/bin/sh # ...“
Optionen

Da wir hier ja auch ein wenig schön Skripten wollen würde ich in diesem Fall vorschlagen die Prüfung zu verschieben, sonst würden der ausgeführte Code unschön zerstückelt. Und wenn wir schon dabei sind auch die Fehlerausgabe nutzen:

#!/bin/sh

run_fancy () {
  COMMAND="$1"
  TITLE="${2:-$1}"
  echo
  echo '+++'
  echo "+++ $TITLE"
  echo '+++'
  $COMMAND
}

run_all() {
  run_fancy 'uname -a' 'System' 
  run_fancy lspci 
  run_fancy lsusb
  run_fancy lsmod
  run_fancy 'ifconfig -a' ifconfig  
}


# root-Rechte vor beginn der Ausführung sicherstellen:
if [ "$UID" != 0 ] ; then
  echo >&2
  echo "Script $0 braucht root-Rechte!" >&2
  echo >&2
  exit 1
fi
# Die wirkliche Arbeit erledigen:
LOGFILE="hardware.`date +%F`.`uuidgen`.txt"
run_all > $LOGFILE
echo "Ausgabe erfolgte in $LOGFILE"
bei Antwort benachrichtigen
Alekom Borlander „Da wir hier ja auch ein wenig schön Skripten wollen würde ...“
Optionen

eigentlich wollt ich nur einen schnellen überblick haben *g*

aber das würde auch mit den einzelnen befehlen auch gehen.

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
KarstenW Borlander „Da wir hier ja auch ein wenig schön Skripten wollen würde ...“
Optionen

Hast ja Recht .

Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen
markus.1 Borlander „Durch scharfes nachdenken bis Dir ein Funktionsname ...“
Optionen

Danke für Deine Antwort. klingt als hätten wir den gleichen Matheprofessor!

bei Antwort benachrichtigen
Acader markus.1 „Danke für Deine Antwort. klingt als hätten wir den ...“
Optionen
markus1 schrieb:
klingt als hätten wir den gleichen Matheprofessor!

Und was hat das Ganze mit einem Matheprofessor zu tun ?
** natürlich nichts ! **



MfG Acader
bei Antwort benachrichtigen
Borlander Acader „markus1 schrieb: klingt als hätten wir den gleichen ...“
Optionen
Und was hat das Ganze mit einem Matheprofessor zu tun ? ** natürlich nichts ! **
Scharfen Hinsehen (verwandt mit dem scharfen Nachdenken) gehört zum allgemein anerkannten mathematischen Handwerkszeug, mit dem jeder der an der Uni eine Mathematik Grundlagenvorlesung besucht hat in Berührung kommen müsste. In sofern also tatsächlich nicht spezifisch für einen bestimmten Dozenten…
bei Antwort benachrichtigen
Acader Alekom „systeminfos über linux ermitteln“
Optionen
Alekom schrieb:
Zweck vom Skript soll nur ein schneller Überblick sein was man im PC  hat.

Das ist ja auch alles gar nicht so schlecht wenn man das im Überblick mit einemal dann hat.
Falls du dich weiter in dieser Hinsicht damit beschäftigen möchtest gebe ich dir mal einen interessanten Link --->  klick und hier noch gleich das kleine Handbuch für die Shell-Programmierung.
Wenn du Zeit hast kannste ja mal bisschen basteln und dann berichten.


MfG Acader
bei Antwort benachrichtigen
Alekom Acader „Alekom schrieb: Zweck vom Skript soll nur ein schneller ...“
Optionen

danke Acader,

das kleine Handbuch für die Shell-Programmierung, da hab ich schon mal reingeguckt.

das andere ist mir total fremd.

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
Alekom Acader „Alekom schrieb: Zweck vom Skript soll nur ein schneller ...“
Optionen

Hallo Acader,

habe soeben mal etwas probiert im Terminal unter Root-Rechte:
#!/bin/sh
# Demonstriert die select-Anweisung
# aselect1

select auswahl in Punkt1 Punkt2 Punkt3 Punkt4
do
echo "Ihre Auswahl war : $auswahl"
done

natürlich alles unter einem dateinamen mit ./aselect1.sh abgespeichert, chmod a+x vergeben und die datei aufgerufen.

terminal zeigt mir an:
./aselect1.sh: 5: ./aselect1.sh: select: not found
./aselect1.sh: 6: ./aselect1.sh: Syntax error: "do" unexpected

ähm, alles abgetippt so wie es steht mal als probe...dann hätte ich meine eigenen wörter verwendet und hätte geguckt warum das so ist.

aber so?...pffff

wo liegt mein denkfehler, das mit dem 5 und 6 nach dem sh, ja das sind die zeilen, schon klar. aber wenn dort nix von etwaiger deklarierung im script steht oder so, dann weiss ich nicht wo der fehler liegt.

habe ich übrigens vom buch shell-programmierung:

http://openbook.galileocomputing.de/shell_programmierung/shell_007_006.htm#RxxKap00700604004E771F038172

Edit:
Habe gerade den Fehler entdeckt, habe aber obigen Text absichtlich nicht gelöscht, um Euch meine Denkweise darzustellen *g*

habe das Script wieder abgetippt, DIESMAL das gewohnte #!/bin/sh weggelassen und siehe da, es hat sofort funktioniert. jetzt frage ich mich, wann das mit dem #!/bin/sh gilt ?

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
Acader Alekom „Hallo Acader, habe soeben mal etwas probiert im Terminal ...“
Optionen
Alekom schrieb:
jetzt frage ich mich, wann das mit dem #!/bin/sh gilt ?

Lese bitte unter Shebang Verwendung nach.


MfG Acader

bei Antwort benachrichtigen
Alekom Acader „Alekom schrieb: jetzt frage ich mich, wann das mit dem ...“
Optionen

hallo Acader,

danke für den Link, habe es mir durchgelesen.

alleine, ich bin schlau wie zuvor.

das system ist ja das gleiche, wo ich geskriptet habe.

bei einem skript funktioniert es und beim anderen skript nur wenn man die zeile entfernt.

logisch ist das für mich nicht.

beim skript wo es mit der #!/bin/sh funktioniert hat, auch dort habe ich es dann probehalber entfernt, gespeichert und ausgeführt

hat dann auch funktioniert.

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
Alekom Nachtrag zu: „hallo Acader, danke für den Link, habe es mir durchgelesen. ...“
Optionen

mir lässt, wie bekanntlich, nie etwas eine ruh.

habe soeben das skript geändert, welches mit #!/bin/sh nicht funktioniert hatte, und zwar mit #!/bin/bash.

Hat sofort funktioniert, das andere Skript welches mit sh funktioniert hatte, hab ich auch geändert auf bash, hat auch funktioniert.

man würde mich jetzt mit einem ratlosen Gesicht sehen *g*

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
Borlander Alekom „mir lässt, wie bekanntlich, nie etwas eine ruh. habe soeben ...“
Optionen

Gehe mal davon aus, dass select ein Befehl ist der in bash integriert ist… ;-)

bei Antwort benachrichtigen
Alekom Borlander „Gehe mal davon aus, dass select ein Befehl ist der in bash ...“
Optionen

ja im terminal wenn ich help eingebe, scheint dieser befehl select auf.

wenn ich aber im terminal sh eingebe, erscheint ja dieses $ und unter root # dort ist der befehl select scheinbar unbekannt, weil not found

ok, ich kapiere, guter hinweis, danke

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen
Borlander Alekom „ja im terminal wenn ich help eingebe, scheint dieser befehl ...“
Optionen
wenn ich help eingebe, scheint dieser befehl select auf.

Dann bekommst Du (bzw. ich zumindest) in der ersten Zeile jedoch auch folgenden Hinweis:

GNU bash, Version 4.1.5(1)-release (i486-pc-linux-gnu)
Die Shell Kommandos sind intern definiert. […]
bei Antwort benachrichtigen
Alekom Borlander „Dann bekommst Du (bzw. ich zumindest) in der ersten Zeile ...“
Optionen

ja diese meldung bekomm ich auch..version 4.2.24(1)

alles klar !

Danke übrigens

Alles hat seinen Sinn, auch das scheinbar Sinnlose, denn es gibt nichts ohne Sinn.
bei Antwort benachrichtigen