Usernamen in die richtige Zeile anhängen (/etc/group)

J

Janine

Eroberer
Hallo Jungs,

frage und zwar ne zeile in eine datei unten azuhängen ist np

echo "Text" >> Dateiname dann hängt er ja den text unten an

wie mach ich es aber das ich eine bestimmte zeile ausfindig machen will, weil ich muss einen Usernamen in die /etc/group kriegen und dafür muss ich ja erstmal die richtige zeile ausfindig machen und dann den usernamen dahinter anhängen but how? ^^

Mfg Janine
 
Ich würd sagen das Stichwort heisst 'sed'
man sed
Gruss
d22
 
jo bin gerade mal was am lesen über sed und awk ist aber echt was wirwar ^^
 
Hier habe ich dir doch schon eine Möglichkeit gezeigt.
Muss halt nur noch ein wenig verfeinert werden. ;-)
 
warum fügst du den benutzer nich einfach der entsprechenden gruppe zu?der steht doch dann da, oder habe ich jetzt was falsch verstanden?
 
hmm ja will das es mein script macht und nicht einfach mit useradd ;)
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

zu NoXqs

STRING=$(grep ${grp_name}:: /etc/group)

sed -e s/${STRING}/"${STRING},${user_name}"/ /etc/group > /etc/group.sed ; mv /etc/group.sed /etc/group


damit geht es nicht wirklich und so ganz versteh ich auch nicht was damachen willst bis auf das Ende ^^ naja ich werd mal weiter min Tutorila lesen.

Aber wenn jemand weiss wie ich es schreibe wäre ich für eine Lösung sehr dankbar.

MfG Janine
 
Zuletzt bearbeitet:
wie wärs wenn du useradd im script benutzt? du übergibst den namen usw. an dein script und fertig.
 
So, mit gruppe findest du die Gruppe die du willst (die Zeile) musst du halt angeben welche Gruppe du suchst / welche Zeile.
benutzer_ans_ende ist der benutzer der mit nem Komma hinten an die Zeile angehängt wird. Falls du Variablen im sed Ausdruck verwenden willst musst du die ' ' durch " " ersetzen.
Hast du ein GNU sed kannst du das hier machen, natürlich mit root Privilegien.
sed -i '/gruppe/s/$/,benutzer_ans_ende/' /etc/group
Fallst du kein GNU sed hast:
sed '/gruppe/s/$/,benutzer_ans_ende/' < /etc/group > /etc/group.new && mv /etc/group.new /etc/group

Viel Spass.

P.S.: getestet und funktionierend.
 
Zuletzt bearbeitet:
Na ja, eine Möglichkeit wäre z.B
Code:
sed -e "s/^${group_name}:.*/&,${user_name}/" <group >group.$$
cmp -s group group.$$ || { cp -p group group.OLD; cp group.$$ group; }
rm -f group.$$

Allerdings kann ich spoensche nur zustimmen; "useradd" (oder "usermod", wenn der Login schon existiert) würde ich immer lieber verwenden, als direkt in Systemdateien rumzueditieren.

Grüße, floyd62
 
Floyd, ich muss leider mecker, dein sed Ausdruck ist _scheisse_. :) Du substituierst die ganze Zeile, das ist garnicht nötig, du matchst einfach auf die Zeilen die mit ^$group beginnen und substituierst dann das Zeilenende $ mit nem Komma + User, wie ichs oben gepostet hab, effizienter und schöner.

P.S.: Dein & im Sed Ausdruck ist GNU Feature, d.h. wenn sie kein GNU sed hat kann man den Ausdruck in die Tonne kloppen.
 
danke erstmal an smg werd ich gleich mal testen.

Und dann nochmal für alle ich weiss das es useradd gibt aber ich will ja nicht einfach mit dem befehl arbeiten oder just im script nen parameter an useradd übergeben sondern pratisch den ganzen befehl nachscripten und per hand sozusagen in den dateien fummeln ;) fummel halt gerne :D
 
Hi smg,

hui, harte Worte ... will hier jetzt keinen Flamewar starten :D, bin mir aber nicht ganz sicher, ob ich Dir da bei allem so 100%ig zustimmen kann:

Zum einen, OK, der Match auf die gesamte Zeile und das '&' im Replacement führen wahrscheinlich zu einigen sed-internen Kopieraktionen; effizienter wäre wohl etwas wie
Code:
sed -e "/^${group_name}:/s/$/,${user_name}/" <group >group.$$
(als praktisch Deine Lsg.)

Wo ich Dir definitiv widersprechen muss, ist allerdings, daß das '&' im Replacement GNU-spezifisch sei: das ist ein Feature in sed, solange ich ihn kenne, auch z.B in der "System V Interface Definition" so beschrieben, und sollte daher wirklich auf allem funktionieren, was sich "UNIX" oder so ähnlich nennen darf.

Die '-i'-Option allerdings, die Du in Deinem sed-Kommando anführst, wird nicht nur von sed auf einigen Nicht-Linux-Systemen nicht unterstützt, sondern ist nicht mal in allen GNU-sed-Releases verfügbar, die ich hier (immer noch :() am Laufen habe:
Code:
$ sed --version
GNU sed version 3.02.80
                             # Steinzeit-Version, klar ...
$ sed -i
sed: invalid option -- i
...
Daher führt also wohl - wenn's denn portabel sein soll -- kein Weg an dem Gehampel mit den temporären Dateien vorbei.

Und, um nochmal auf die ursprüngliche Aufgabe zurück zu kommen (also einen Benutzer in eine Gruppe aufzunehmen) -- Hi Janine, sorry, ich will hier auf keinen Fall Deinen Thread hijacken --:

Wenn man das mit "usermod" erledigt (und die bisherigen Gruppen vorher mit "groups" oder zur Not "awk" einsammelt etc.), hat man nicht hinterher das Problem, überflüssige Kommata (wieder mit sed?) entfernen zu müssen, die mit einer so einfach gestrickten sed-Notlösung entstehen, wenn man einen User zu einer bisher leeren Gruppe hinzufügt.

Grüße. floyd62
 
floyd62: he, das war nicht böse gemeint :)
Also auf *bsd Systemen geht's mit -i"" und bei allen GNU seds geht's mit -i, mit nicht sed Varianten halt nicht, aber dafür haben wir ja auch ne lösung.
& ist tatsächlich nicht GNU spezifisch - sorry.
 
Naja habs aufjedenfall jetzt so wie ich es haben wollte danke für die Hilfe Jungs :)
 
Hallo Janine,

ich finde es immernoch ziemlich umständlich, wie du das machen möchtest.
Du möchtest im prinzip einen Benutzer einrichten und den gleich einer Gruppe zuordnen, wenn ich das richtig verstanden habe, korrekt?

#!/bin/bash
read -p "Username: " username
read -p "Gruppe: " gruppe
read -p "Passwort: " passwort
useradd -m $username -s /bin/bash -g $gruppe
echo $username:$passwort |chpasswd
#---------

würde alles erledigen!

Gruß Nils
 
ich glaub hier sind einige nicht so die leuchten.... sry ^^

aber ich sagte doch ich will das nicht mit dem useradd befehl machen es geht darum ein script zu schreiben was den befehl useradd nachstellt, und das auch nicht nur so das man parameter an den useradd weitergibt sondern wirklich alles per "hand" sozusagen macht.

Mein gott ^^ verstanden :D und ps mein script ist fertig auch das delscript welches den befehl userdel nachstellt hihi freu :D
 
Achso, dann habe ich es verstanden!

Stell dein Script doch anderen zur Verfügung, werden sich sicherlich einige freuen!

Gruß Nils
 

Ähnliche Themen

Zeile an txt anhängen

Server-Monitoring mit RRDTool

Zurück
Oben