TDP001 Handhavande av datormiljö
Terminalkommandon v36
Nu är det fredag och här kommer nästa terminalmail!
Användare, grupper och rättigheter
På ett linux-baserat operativsystem finns det flera användare som alla tillhör en eller flera grupper. Du kan med kommandot groups ta reda på vilka grupper just du är medlem i. Alla filer på filsystemet har en ägare och en grupptillhörighet. De har även en uppsättning rättigheter. Med väljaren-l till ls kan man se massor av spännande
information om filer. Nedan följer ett kort utdrag av min hemkatalog
på undervisningsdomänen:
   $ ls -l
   -rwxr-xr-x 1 eriel18 ida  15045 aug 19 15:58 a.out
   drwxr-xr-x 2 eriel18 ida   1024 jan 20  2015 Desktop
   -rw-r--r-- 1 eriel18 ida   1265 feb 20  2015 Direction.cc
   -rw-r--r-- 1 eriel18 ida    492 feb 20  2015 Direction.h
d för att
visa att det är en katalog och - för en vanlig fil. Därefer kommer tre
uppsättningar av vardera tre tecken. Första uppsättningen är
rättigheter för filens ägare, därefter följer gruppens rättigheter och
till slut övriga. Varje uppsättning visar om man får läsa (r), skriva
till (w) eller köra/visa innehåll (om katalog) (x) filen. Här listas
några kommandon för hantering av ägare och rättigheter:
kommando	Betyder			Beskrivning
chmod		Change Mode		Ändrar rättigheter. 
chown		Change owner		Byt ägare på en fil
chgrp		Change Group		Byt grupp på fil
  $ chmod ug+x fil.py
fil.py
  $ chmod u=rwx fil.py
  $ chown eriel18:admin fil.py
eriel18 och grupp till admin på fil.py
Rättigheter kan även sättas med ett oktalt tal. r motsvarar värdet 4,
w är värt 2 och x är 1. Sedan kan man addera de bitar man vill ha för
att få hela rättigheten. Exempelvis motsvarar 765 uppsättningen
rwxrw-r-x.
Variabler i terminalen
I det första mailet skrev jag att terminalen styrs av ett fullständigt programmeringsspråk. Där har vi såklart tillgång till variabler. Precis som i python kan vi skapa en variabel när vi känner för det med en enkel tilldelning. Dock måste vi använda ett $-tecken för att komma åt ett värde:
  $ X=hejsan
  $ echo $X
  $ namn=Eric
  $ echo "Denna sak är ${namn}s"
Variabler kan man hantera på väldigt spännande sätt. Exempelvis kan
man lätt ta bort ett suffix från ett ord med %-tecknet:
  $ file='test.py'
  $ echo ${file%.py} # skriver ut test
Process- och kommandosubstitution
Förra veckan visade vi hur man kan skicka resultatet av ett kommando som indata till ett annat. Här kommer vi presentera två andra sätt att göra detta.
Med kommandosubstitution ersätts ett helt kommando med dess resultat
(nästan som ett normalt funktionsanrop). Man innesluter kommandot man
vill ha resultatet av på formatet $( kommando )
  $ name=$(grep 'on ' -m 1 resultat.txt)
resultat.txt
och sparar raden i variabeln name.
Processsubstitution skapar en temporär fil innehållandes utskriften
från ett kommando. Skrivs på formatet <( kommando )
  $ paste <( echo "Anna" ) <( echo "kalle" )
Här följer lösningar på förra veckans utskick
Uppgift 1: Hur kan man med grep hitta alla rader med namn (förnamn
	   eller efternamn) som slutar med tecknen "on"?
Ett enkelt sett är att söka efter tecknen följt av ett mellanslag:
    $ grep 'on ' resultat.txt
För att få tag på endast efternamn kan vi dela på avgränsaren ' ' med
cut. Tar vi kolumn 2-3 får vi ett mellanslag i slutet och kan använda
knepet från föregående uppgift (man kan även använda exempelvis >
eller $ för att söka efter slut av ett ord/text). Här vill vi dock ha
namn som inte avslutas med son och därför använder vi väljaren
-v. Därefter kan man använda head för att begränsa resultatet till 5
(eller använda väljaren -m till grep)
    $ cut -d' ' -f 2-3 resultat.txt | grep -v 'son ' | head -n 5
/usr/lib finns det flera filer som har namn på
	   formatet xxx.so.d, där xxx är dess namn och d är ett (eller
	   flera separerade med .) heltal. Skriv ut alla dessa filers
	   namn (dvs xxx-delen) till en fil med valfritt namn.
Med ls kan man använda väljaren -1 (en etta) för att få varje fil på
en rad, därefter kan vi skicka resultatet till grep för att plocka ut
namn med ".so." och cut två gånger för att ta bort /usr/lib och .so.*
(jag vet att vi även plockar bort delar av vissa namn som har punkter
för .so). Därefter använder vi omdirigering för att skriva ut resultatet
    $ ls -1 /usr/lib/* | grep '.so' | cut -d. -f1 | cut -d'/' -f3 > filer.txt
En del hittade reguljära uttryck, men de behövs faktiskt inte. grep
kan ta väljaren -i för att söka utan att bry sig om det är versaler
eller gemener. Därefter kan vi använda väljaren -c till grep för att
skriva ut antal träffar
      $ grep -ic an resultat.txt
             Sidansvarig: Eric Elfving
Senast uppdaterad: 2016-08-02
	  
 English web site
English web site 
          
           
           
        