Linux – Shell enzo… deel 4
Aangekomen bij deel 4 zijn we al lekker op weg in de serie en kunnen we al aardig uit de voeten. Deel 4 gaat verder waar we gebleven waren want nu gaan we werken met gebruikers en groepen. Als we dit voor elkaar hebben kijken we naar diverse file editors en volgt er ook nog nadere uitleg over “tar”. Tar is het standaard inpak/uitpak programma van Linux (vergelijkbaar met ZIP en RAR van Windows). Kortom, weer een aantal leuke dingen om te doen dus laten we beginnen.
Gebruikersbeheer
Gebruikersbeheer bestaat uit een aantal onderdelen. Grofweg kunnen we deze opdelen in 2, namelijk gebruikers en groepen. Rechten in Linux (deel 5) kunnen namelijk gegeven worden aan individuele gebruikers en groepen zoals we dat in Windows kennen. Daarnaast kunnen rechten ook toegekend worden aan “Other system user’s access” en “Equivalent op “ugo”, maar daarover dus later mee.
In Linux is een gebruiker altijd lid van een primaire groep en kan een gebruiker lid zijn van 1 of meerdere secundaire groepen. Als een gebruiker bestanden aanmaakt dan worden hebben deze als “owner” waarde de primaire groep van de gebruiker. Een gebruiker kan ook lid zijn van secundaire groepen en de gebruiker heeft daarmee ook toegang tot de bestanden van deze gebruikers.
Groepen en gebruikers hebben een numerieke waarde welke terug te vinden is in de bestanden “/etc/passwd” (gebruikers) en “/etc/group” (groepen).
In het bestand “/etc/group” zijn de GID (Group ID’s) terug te vinden voor verschillende groepen.
De opbouw van dit bestand is als volgt:
- Groepsnaam
- Wachtwoord
- GID – Groep ID
- Gebruikers die lid zijn van deze groep
Zo zien we in dit bestand dat de groep “root” een GID van 0 heeft en dat er 1 gebruiker lid is van deze groep en dat is de gebruiker “root”. Wat opvalt is dat de meeste wachtwoorden aangegeven worden met een “x”. Dit betekend dat het wachtwoord niet op deze locatie wordt weergegeven maar dat het hier gaat om een “shadowed wachtwoord”. Dit is een hashed wachtwoord welke wordt opgeslagen in het bestand “/etc/shadow” welke slechts beperkt toegankelijk is. Om deze reden is het raadzaam om wachtwoorden altijd met behulp van het “passwd” commando veranderen. Het bestand “etc/shadow” ziet er als volgt uit:
Het bestand “/etc/passwd” bevat gebruikers (UID – User ID’s), hun wachtwoorden en toegewezen groepen. Hieronder een voorbeeld:
Dit bestand is als volgt opgebouwd:
- Gebruikersnaam
- Wachtwoord (in het geval van een x, zie uitleg hierboven bij het “/etc/group” bestand
- User ID (UID)
- Primary Group ID (PGID)
- User ID info (extra informatie over de gebruiker)
- Pad naar home directory
- Default shell
Nu we de basis weten wordt het tijd om een groep aan te gaan maken. Het aanmaken van een nieuwe groep genaamd “superhero-users” gaat via het volgende commando:
groupadd superhero-users |
Dit commando kunnen we ook uitbreiden met de –p flag voor het toevoegen van een encrypted wachtwoord aan de groep en de –g flag voor het definiëren van een GID:
groupadd superhero-users –p superveiligWachtw00rd –g 2000 |
Het verwijderen van een groep doen we middels onderstaande commando. Let op, een gebruiker kan nooit zijn “primary group” verwijderen:
groupdel superhero-users |
Alle huidige groepen bekijken:
more /etc/group |
Om alle groepen te bekijken waar een specifieke gebruiker lid van is:
groups %gebruikersnaam% |
Alle beschikbare groepen bekijken (uitleg volgt later) doe je met:
cut -d: -f1 /etc/group |
Nu we kunnen werken met groepen wordt het zaak om ook gebruikers aan te maken. Uiteraard werken we soortgelijke wijze met gebruikers. De gebruiker “batman” maken we dan ook als volgt aan:
useradd batman |
Bovenstaande commando is eigenlijk erg mager en incompleet. Door de –m flag te gebruiken wordt er meteen een home directory voor de gebruiker aangemaakt. De –g flag zorgt ervoor dat de gebruiker lid wordt van een specifieke primaire groep en de –G flag geeft aan van welke secundaire groep(en) de gebruiker lid zal worden. Tenslotte gebruiken we de –p flag voor het toekennen van een wachtwoord. B.v.:
useradd batman -m –g 3 –G 2000 –p BatmanIsEen5uperheld |
Er zijn nog andere belangrijke flags die we mee kunnen geven aan een gebruiker. Een paar interessante flags zijn:
- -e = Geef een vervaldatum aan het nieuwe account (in het geval van een tijdelijk account)
- -f = Maak het account aan maar zet deze op inactief
- -N = Maak geen group aan met dezelfde naam als de nieuwe gebruikersnaam (default Linux actie omdat Linux de primaire groep van de gebruiker default op zichzelf zet)
- -r = Maak een systeemaccount aan
- -u = Kies je eigen waarde voor het UID
Om de default waardes te zien waarmee Linux een user aanmaakt gebruik je de –D flag:
useradd -D |
Vervolgens kun je deze standaarden aanpassen in het “/etc/default/useradd” bestand. Standaardwaarden m.b.t. UID en GID settings en wachtwoord encryptie kun je aanpassen in “/etc/login.defs”.
Toon UID en GID van de huidige gebruiker
id |
Verander het wachtwoord van je eigen account:
passwd |
Verander het wachtwoord van een ander account:
sudo passwd %gebruikersaccount% |
verwijder het wachtwoord van een ander account:
passwd –d %gebruikersaccount% |
Een gebruiker toevoegen aan een andere primaire groep:
usermod –g %gebruikersnaam% %groepsnaam% |
Een gebruiker toevoegen aan een secundaire groep:
usermod –G %gebruikersnaam% %groepsnaam% |
Een gebruiker verwijderen kan via het “userdel” commando. Echter wordt dan de user uit de userdatabase verwijderd maar blijven zijn homefolder en persoonlijke bestanden in tact. Om alles m.b.t. een user te verwijderen gebruik je de de –r flag:
userdel –r %gebruikersnaam% |
Linux Editors
Met bovenstaande uitleg moet je aardig uit de voeren kunnen voor het aanmaken en verwijderen van gebruikers en groepen. Ook zien we in dit hoofdstuk een paar keer het “/etc/groep/” bestand terugkomen.
Linux heeft standaard een 2-tal ingebouwde teksteditors welke te gebruiken zijn vanuit de shell en waarmee we dit bestand dus aan kunnen passen. De volgende 2 editors gaan we kortstondig bekijken:
- Vi / Vim
- Nano
Vi / Vim
Vi is een tekst editor voor Unix welke geschreven is door Bill Joy. Vim staat voor “Vi IMproved” en is geschreven door Bram Moolenaar. Vim is een default tekst editor in veel Linux distributies en kent zowel een “command-line” interface als een grafische interface (gVim).
Omdat Vim niet werkt met icoontjes en menu’s maar met verschillende modes en commando’s is de Vim leercurve wat lastig. Eenmaal onder de knie is Vim een zeer fijne en stabiele editor en dat blijkt wel uit het feit dat Vim tot op de dag van vandaag nog steeds de meest populaire teksteditor is.
Alvorens we beginnen is het goed om te weten dat Vim 6 modes heeft. Vi heeft 3 modes. Zie hieronder de 6 Vim modes. De modes met een sterretje (*) zijn eveneens Vi modes:
- Normal*
Deze mode is voor navigatie en manipulatie van tekst. Vi start in deze mode - Insert*
De insert mode is voor het toevoegen van tekst. De “Insert mode” worde geopend door “i” in te toetsen - Visual
De visuele mode is ook voor navigatie en manipulatie van teksten maar kent wat extra commando’s in vergelijking met de “Normal mode” - Select
Hetzelfde als de “Visual mode” maar dan met een MS-DOS interface - Command-line*
Om editor commando’s te gebruiken - Ex-mode
Gelijk aan de “Command-line mode” maar geoptimaliseerd voor batch processing
*Om een mode te verlaten en terug te keren naar de “Normal Mode” gebruik de
Onderstaande commando’s met een sterretje (*) zijn in “Insert mode”. De overige commando’s zijn in “Normal mode”.
Vi “help” document oproepen:
vi --help |
Het openen van een bestand in Vi:
vi /etc/group |
Het openen van een bestand en de cursor starten op regel 20:
vi +20 /etc/group |
Ander bestand openen (en huidige bestand sluiten) binnen Vi:
:e %path to document% |
Ander bestand openen (in een nieuwe tab):
:tabnew %path to document% |
Het openen van 2 bestanden (split screen) in Vi:
vi –o /etc/group /etc/passwd |
Navigeren tussen beide split-screen bestanden
<CTRL>+W + %pijltje omhoog% of %pijltje omlaag% |
Bestand sluiten zonder op te slaan:
:q <ENTER> |
Bestand sluiten zonder wijzingen te slaan:
:q! <ENTER> |
Alle openstaande documenten sluiten:
:qa <ENTER> |
Karakter verwijderen:
x |
Volledige regel verwijderen:
dd |
Regel toevoegen:
o |
Bestand opslaan:
:wq |
Huidige karakter vervangen voor een nieuw karakter:
r + %nieuw karakter% |
Met cijfers kun je de meeste commando’s herhalen. 5i zal 5x een “insert” instance openen. Om 5x het woord “linux” toe te voegen aan je bestand doe je dus het volgende:
5ihoera + <ESC> |
Tekst toevoegen (insert mode openen):
i |
Insert mode sluiten*:
<ESC> |
Specifieke tekst in een document zoeken:
/ + %zoekwoord% |
Specifieke tekst in een document zoeken en vervangen 1x:
:s/ZOEKWOORD/VERVANGWOORD |
Specifieke tekst in een document zoeken en alles vervangen:
:%s/ZOEKWOORD/VERVANGWOORD |
Aanpassing ongedaan maken:
:u |
Tekst markeren:
v (of V voor hele regels en <CTRL>+v voor hele blokken) |
Tekst kopiëren:
y |
Tekst knippen:
d |
Tekst plakken:
p |
Door document navigeren:
- Pijltje links of h = cursor links
- Pijltje rechts of l = cursor rechts
- Pijltje omhoog of j = cursor omhoog
- Pijltje omlaag of k = cursor omlaag
- ^ = naar begin van regel
- $ = naar eind van regel
+f = pagina omlaag bewegen +b = pagina omhoog bewegen - H = cursor naar begin van scherm
- M = cursor naar midden van scherm
- L = cursor naar onderkant van scherm
- w = 1 woord vooruit springen
- b = 1 woord achteruit springen
- f + %letter% = naar de volgende opgegeven letter in de regel gaan
- F + %letter% = naar de vorige opgegeven letter in de regel gaan
- % terwijl je cursor op een volgend teken staat: (, ), [, ], { or } = bijpassend (openen / sluiten) symbool vinden
- / %zoekwoord% = zoeken
- / %zoekwoord% +
+ n = volgende zoekresultaat - / %zoekwoord% +
+ N = vorige zoekresultaat - :+%line nummer% = spring naar opgegeven line nummer
Nano
Nano emuleert de Pico tekst editor en werd oorspronkelijk ontwikkeld onder de naam TIP, “This Isn’t Pico). Later werd de naam vervangen voor Nano welke afkomstig is van de SI Prefixes waar nano “1000x groter dan Pico” betekend.
Ook Nano heeft geen menu’s en icoontjes maar werkt met keybord sneltoetsen. De leercurve is iets sneller van die van Vim maar dat komt omdat de opties ook iets beperkter zijn en Nano niet met verschillende modes werkt. Nano is een editor voor het “snelle werk” waar Vim een editor is voor het “uitgebreidere (programmeer) werk”.
Het openen van Nano (blanco):
nano |
Het openen van een bestand in Nano:
nano /etc/group |
Het openen van een bestand en de cursor starten op regel 20:
nano +20 /etc/group |
Nano “help” document oproepen in Nano:
<CTRL>+G |
Bestand sluiten zonder op te slaan:
<CTRL>+X --> N --> <ENTER> |
Bestand sluiten en aanpassingen opslaan:
<CTRL>+X -> filenaam aanpassen of bevestigen -> <ENTER> |
Nieuw bestand opslaan:
<CTRL>+O -> filenaam aanpassen of bevestigen -> <ENTER> |
Tekst van een ander bestand toevoegen aan je huidige document op de positie van de cursor:
<CTRL>+R |
Specifieke tekst in een document zoeken:
<CTRL>+W |
Zien waar de cursor zich momenteel bevindt:
<CTRL>+C |
Tekst markeren:
<CTRL>+^ |
Tekst kopiëren:
<ALT>+^ |
Tekst knippen:
<CTRL>+K |
Tekst plakken:
<CTRL>+U |
Tekst zoeken:
<CTRL>+w (gebruik <ALT>+w om door te zoeken) |
Tekst zoeken en vervangen:
<CTRL>+\ |
Tekst opmaak verwijderen en achter elkaar plaatsen:
<CTRL>+J |
Door document navigeren:
- Pijltje links of
+F = cursor links - Pijltje rechts of
+B = cursor rechts - Pijltje omhoog of
+P = cursor omhoog - Pijltje omlaag of
+N = cursor omlaag +V = pagina omlaag bewegen +Y = pagina omhoog bewegen +A = begin van document (HOME) +E = einde van document (END) + = 1 woord vooruit springen + = 1 woord achteruit springen + +%line nummer% = spring naar opgegeven line nummer
Goede alternatieve editors
Verder zijn er nog een aantal zeer goede alternatieve editors welke niet shell-based gebruikt kunnen worden en allen beschikken over een eigen interface. Uiteraard kunnen ze wel vanuit de shell opgeroepen worden en zorgt de “eigen interface” ervoor dat de leercurve van deze editors toch iets sneller is. Deze editors zijn meestal optioneel en niet “by-default” geinstalleert. De beste alternatieve editors zijn voor mij:
- Geany
- GEdit
- GNU Emacs
- Sublime Text (niet-gratis)
Cat
Nog een commando welke zeker niet vergeten mag worden in deze lijst is het “cat” commando. “Cat” is per definitie geen teksteditor maar wel een zeer veelgebruikt commando om bestanden te bekijken, maken en combineren.
Het openen van een bestand met “cat”:
cat /etc/group |
Een groot bestand openen waarvan de tekst niet op het scherm past:
cat /etc/group | more |
Een bestand openen en de output verdelen over pagina’s:
cat /etc/group | pr |
Een bestand openen en de output formatteren:
cat /etc/group | fmt |
Een bestand openen alleen de header tonen (eerste 10 regels):
cat /etc/group | head |
Een bestand openen alleen de footer tonen (laatste 10 regels):
cat /etc/group | tail |
Een groot bestand openen waarvan de tekst niet op het scherm past en regelnummers tonen:
cat /etc/group -n | more |
Het openen van meerdere bestanden:
cat /etc/group /etc/passwd |
Het openen van TAB seperated bestand:
cat –t testbestand.txt |
Een bestand maken (gebruik CTRL+D om het bestand te sluiten):
cat >testbestand.txt |
Content van test2 overschrijven met de content van test:
cat test > test2 |
Content van test toevoegen aan het bestand test2:
cat test >> test2 |
Een bestand (test2.txt) maken waarbij eerst de input van het keybord (-) geplaatst wordt (afsluiten met CTRL+D) en vervolgens de content van test1.txt:
cat – test1.txt > test2.txt |
Content van test, test2 en test3 samenvoegen in het bestand test4:
cat test test2 test3 > test4 |
TAR
Tar (afkorting voor Tape ARchive) is zowel een bestandsformaat (in de vorm van een soort archief bitstream) als de naam van een programma dat gebruikt wordt om dergelijke bestanden te verwerken (vergelijkbaar met ZIP en RAR).
Binnen Linux wordt “Tar” gebruikt om bestanden in te pakken, uit te pakken en om Tar archieven te onderhouden en bewerken. Bestanden en folders behouden hun file attributen, modificatie data als hun gebruikers- en groep permissies.
Bestanden inpakken met Tar gaat als volgt:
tar %opties% %archiefnaam% %bestandsna(a)m(en)% |
Om een succesvol Tar commando uit te voeren ben je verplicht om minimaal 2 opties te gebruiken. Veel voorkomende opties zijn:
- -c = Create (maak een archief)
- -f = Archive Filename
- -r = Append (bestanden toevoegen aan archief)
- -u = Update (voeg alleen nieuwere bestanden aan het archief toe
- -v = Verbose (laat een lijst zien van ingepakte of uitgepakte bestanden)
- -x = eXtract (een archief uitpakken)
- -G = Incremental backup
- -W = Verify archief nadat deze gemaakt is
Inpak voorbeeld (2 bestanden inpakken in archive.tar):
tar –cvf archief.tar bestand1.txt bestand2.txt |
Tar heeft zelf geen compressie. Gelukkig heeft linux ingebouwde compressie mogelijkheden welke aangeroepen kunnen worden.
- -j = bzip2
- -z = gzip
- -Z = compress
Inpak voorbeeld (2 dirs inpakken in archive.tar met gzip compressie):
tar –cvzf archief.tar.gz dir1 dir2 |
Bestanden uitpakken met Tar doe je als volgt:
tar %opties% %archiefnaam% %uitpakpad% |
Je moet voor het uitpakken minimaal 1 optie gebruiken. Let er daarnaast op dat je een lege directory specificeert om de bestanden uit te pakken (zodat je geen bestaande bestanden overschrijft) en dat er voldoende diskspace op de harde schijf is.
Uitpak voorbeeld (archive.tar.gz) in dezelfde directory:
tar -xvzf archive.tar.gz |
Uitpak voorbeeld (archive.tar.gz) naar /home/user/Desktop/newfolder:
tar -xvzf archive.tar.gz –C /home/user/Desktop/newfolder |
Bestanden toevoegen aan een Tar file doe je met de –r flag:
tar -rzf archive.tar.gz bestand1.txt |
Bestanden verwijderen uit een Tar file doe je met de –delete switch:
tar -f archive.tar --delete bestand1.txt |
Als je gewoon wilt kijken naar de inhoud van het Tar archiefbestand dan gebruik je de –t flag:
tar -tf archive.tar |
Conclusie
Zo deel 4 zit erop. Een groot hoofdstuk met veel informatie over hands-on applicaties en handige functionaliteiten maar ook over primair beheer (het aanmaken van gebruikers en groepen binnen Linux). Hopelijk was het leerzaam? In deeltje 5 gaan we aan de slag met rechtenbeheer (chmod) en software installaties. Tot de volgende “Linux – Shell Enzo”!