staging.inyokaproject.org

Shell

Status: Gelöst | Ubuntu-Version: Ubuntu 8.10 (Intrepid Ibex)
Antworten |
Dieses Thema ist die Diskussion des Artikels Shell.

noisefloor Team-Icon

Ehemaliger
Avatar von noisefloor

Anmeldungsdatum:
6. Juni 2006

Beiträge: 28316

Hallo,

War das nicht der urspruengliche Zweck des Artikels Shebang für Shellskripte?

Jain. In dem Artikel geht es eher um die Probleme von Shellskripten, die daraus resultieren könnten.

Textvorschlag:

Bei Linuxsystemen wird zwischen der verschiedenen Arten von Shells unterschieden. Die Standardshell ist die, unter der Skripte direkt vom System (z.B. beim Booten) ausgeführt werden. Mit dieser Shell muss der normale Benutzer nicht unbedingt in Kontakt kommen. Ubuntu verwendet hier die Dash. Eine weitere Shell ist die Login-Shell. Dies sieht der Benutzer, der sich über eine Konsole und nicht über einen graphischen Login-Manager einloggt, wie z.B. auf Servern. Die dritte Shell ist die interaktive Shell. Dies erhält man, wenn man unter einer grafischen Benutzeroberfläche einen Terminal öffnet. Als Login-Shell und interaktive Shell verwendet Ubuntu die Bash.

Verbesserungsvorschläge sind willkommen.

Gruß, noisefloor

kutteldaddeldu Team-Icon

Anmeldungsdatum:
1. Juli 2008

Beiträge: 3586

Finde ich sehr schön! Leicht abgeändert, um die drei Shells formal deutlicher zu unterscheiden:

Bei Linuxsystemen wird zwischen verschiedenen Arten von Shells unterschieden:

  • Unter der Standardshell werden Skripte direkt vom System (z.B. beim Booten) ausgeführt; mit dieser Shell muss der normale Benutzer nicht unbedingt in Kontakt kommen. Ubuntu verwendet dafür die Dash.

  • Die Login-Shell sieht der Benutzer, der sich über eine Konsole und nicht über einen graphischen Login-Manager einloggt. Dies ist bpsw. auf Servern der Fall.

  • Die interaktive Shell erhält man, wenn man unter einer grafischen Benutzeroberfläche ein Terminal öffnet. Als interaktive Shell verwendet Ubuntu – wie auch als Login-Shell – die Bash.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17432

Kuttel Daddeldu schrieb:

Finde ich sehr schön! Leicht abgeändert, um die drei Shells formal deutlicher zu unterscheiden:

Bei Linuxsystemen wird zwischen verschiedenen Arten von Shells unterschieden:

Ist das so? Nicht nur verschiedene Shells, sondern auch verschiedene Arten von Shells? Die Familie der Paarhufer, die Wiederkäuer, ... ☺

Das ist hier einer der Fälle, wo man selbst Begriffe prägt (Standard-Shell) und später feierliche Erklärungen drum herum strickt, aber in Wahrheit zäumt man das Pferd von hinten auf, und verstrickt sich dann immer tiefer in provisorischen Erklärungen.

Das Problem dabei ist, dass man das niemandem recht verklickern kann, der bei der Entstehung der Begriffe und den äußeren Zwängen, die sie begleiteten, nicht dabei war.

* Unter der Standardshell werden Skripte direkt vom System (z.B. beim Booten) ausgeführt; ...

Ein kleiner Ausflug in die Welt der Bootscripte:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
head -n1 /etc/init.d/* | grep '#!'
#!/bin/bash
#!/bin/sh -e
#!/bin/sh -e
#!/bin/sh -e
#!/bin/sh -e
#!/bin/sh
#!/bin/sh
#!/bin/sh -e
#!/bin/sh -e
#!/bin/sh
#! /bin/sh
#!/usr/bin/env python
#! /bin/sh

So sehen die anderen auch aus - nur python kommt kein zweites Mal vor. Fakt ist, dass die Skripte nicht "#! Standardshell" aufrufen, sondern /bin/sh. Das ist bei Ubuntu voreingestellt die Dash. Also schon etwas, dass man Standard nennen kann.

* Die Login-Shell sieht der Benutzer, der sich über eine Konsole ... einloggt.

Das ist auch voreingestellt, und damit auch ein Standard, aber eben ein anderer.

Und so kommen wir wenig überraschend zum 3. Standard:

* Die interaktive Shell erhält man, wenn man unter einer grafischen Benutzeroberfläche ein Terminal öffnet.

Daraus ergibt sich schlüssig, dass es den Standard unter Linux/Ubuntu nicht gibt, sondern für verschiedene Zwecke verschiedene Standards. Am besten gibt man nicht zuviel auf diese Standards, die sowieso flexibel sind. Wer will ändert seine interaktive und die Loginshell auf zsh, und ändert den Link von /bin/sh auf die Bash.

noisefloor Team-Icon

Ehemaliger
Avatar von noisefloor

Anmeldungsdatum:
6. Juni 2006

Beiträge: 28316

Hallo,

wie würdest du denn die hier als "Standardshell" bezeichnet Shell besser benennen? Systemshell?

Gruß, noisefloor

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17432

Um die Standardshell des Benutzers zu wechseln, wendet man den Befehl chsh (change shell) an.

Loginshell - oder?

Shells
Name Beschreibung Paket
Bash Wohl weitestverbreitete Shell bei Linux-Systemen; unter Ubuntu Loginshell und interaktive Shell bash
Dash Shell, mit der die meisten Startscripte Ubuntus gestartet werden dash
  • Standardspalte löschen

  • Wenn man einen ganzen Satz braucht, um einen Sachverhalt zu erläutern, dann braucht man halt einen ganzen Satz. Schön kurz ist es nicht, aber zur Not lieber etwas umständlicher, als den Leuten eine unbrauchbare Vokabel beizubringen.

  • Wenn man etwas ausdrücken will, von dem man nicht weiß, wie man es ausdrücken soll, dann muss man erklären, was man eigentlich ausdrücken will, und damit hat man es dann ausgedrückt. Was sich wehrt ausgedrückt zu werden ist meist - wenn auch nicht immer - Humbug, oder eine Lüge. Ausdrückbarkeit ist oft ein Lackmustest, ein Schnelltest.

noisefloor Team-Icon

Ehemaliger
Avatar von noisefloor

Anmeldungsdatum:
6. Juni 2006

Beiträge: 28316

Hallo,

Loginshell - oder?

Ja, Loginshell. Korrigiert

Ansonsten auch Tabelle +1. Kurz und übersichtlich. ☺

Gruß, noisefloor

kutteldaddeldu Team-Icon

Anmeldungsdatum:
1. Juli 2008

Beiträge: 3586

Ansonsten auch Tabelle +1.

Im Prinzip ich auch, aber das Problem, dass Loginshell und interaktive Shell nicht erklärt sind, bleibt doch weiter bestehen? (Evtl. könnte man auch noch ein Wort oder einen Satz zu „mit der die meisten Startscripte Ubuntus gestartet werden“ verlieren.) Oder habe ich was übersehen?

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17432

Um die Loginshell des Benutzers zu wechseln, wendet man den Befehl chsh (change shell) an.

Vorschlag:

Mit dem Befehl chsh (change shell) ändert man die Loginshell des Benutzers; das ist die shell, die gestartet wird, wenn sich ein User von einem anderen Rechner über das Netzwerk einloggt, also eine Sache, die v.a. Netzwerkadministratoren und Server betrifft, seltener den Desktopuser.

Für den Desktopuser benutzt Ubuntu als interaktive Shell die Bash. Dies ändert man indem ... ¹.


¹ Wie ändert man das eigentlich? ☺

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17432

Achso, und:

Beim Hochfahren des Rechners arbeitet dieser vor allem Scripte aus /etc/init.d ab, und zwar diejenigen, die in /etc/rc2.d verknüpft sind; init.d ist nur der Vorrat.

Die meisten dieser Scripte werden von der Shell gestartet, die als /bin/sh verlinkt ist. Experimente sind hier heikel.

(Aber seit upstart ist das wohl anders. Als 10.04-Nutzer bin ich da noch nicht tiefergehend informiert).

kutteldaddeldu Team-Icon

Anmeldungsdatum:
1. Juli 2008

Beiträge: 3586

Sorry, hatte den Thread aus den Augen verloren!

user unknown schrieb:

Für den Desktopuser benutzt Ubuntu als interaktive Shell die Bash. Dies ändert man indem ... ¹.


¹ Wie ändert man das eigentlich? ☺

Ist dafür nicht auch chsh zuständig? (Oder sind die Grenzen zwischen „interaktiver“ und „Login-Shell“ fließend?) Wenn ich das Vorherige richtig interpretiere, ist die interaktive Shell doch die, die ich erhalte, wenn ich in einer grafischen Desktopumgebung eine Shell in einem Terminal-Emulator aufrufe, oder?

Wenn das so wäre, dann hätte der chsh-Befehl meine interaktive Shell auf die Zsh geändert. (Ich habe mich damals hieran gehalten – und sonst nichts weiter gemacht.)

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17432

Ich frage einfach mal bei S&P - vielleicht weiß es da jemand.

kutteldaddeldu Team-Icon

Anmeldungsdatum:
1. Juli 2008

Beiträge: 3586

Perfekt, danke!

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: Zähle...

Kuttel Daddeldu schrieb:

Perfekt, danke!

Das hatte ich dort geschrieben.

Ciao

robert

kutteldaddeldu Team-Icon

Anmeldungsdatum:
1. Juli 2008

Beiträge: 3586

Herzlichen Dank!

rklm hat im anderen Thread geschrieben:

Technisch gesehen ändert chsh nur die Login-Shell. Aber da das graphische Programm (z.B. gnome-terminal), in dem man mit der Shell unter der graphischen Oberfläche arbeitet, standardmäßig die Login-Shell nimmt, bekommt man dort i.d.R. dann auch die andere Shell (allerdings erst nach dem Aus- und Wiedereinloggen).

Man kann sich natürlich auch einen Launcher anlegen, mit dem man gnome-terminal mit einer anderen Shell startet: gnome-terminal -e /bin/dash startet z.B. eine dash. Vorsicht: die Variable $SHELL kann immer noch den Namen der Login-Shell enthalten. Das hängt davon ab, wie die einzelnen Shells das handhaben. Besser schaut man dann im Terminal mit ps -p $$ nach.

Für mich bleibt jetzt nur die Frage: Ist die Unterscheidung Login-Shell/interaktive Shell dann überhaupt sinnvoll?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: Zähle...

Kuttel Daddeldu schrieb:

Herzlichen Dank!

Danichfür. 😉

Für mich bleibt jetzt nur die Frage: Ist die Unterscheidung Login-Shell/interaktive Shell dann überhaupt sinnvoll?

Aber natürlich: normalerweise ist jede Login-Shell eine interaktive, aber nicht jede interaktive Shell ist auch eine Login-Shell. Im Gegenteil: pro Session hat man normalerweise nur eine Login-Shell. Man könnte sich sogar eine nicht interaktive Login-Shell vorstellen, was allerdings nur in Sonderfällen sinnvoll ist. Für User, die für bestimmte Dienste eingerichtet sind (z.B. Postgres), macht man das öfters, dass man als Login-Shell /bin/true als Login-Shell konfiguriert. Da gibt's keine Interaktion. ☺

Ciao

robert