Göm menyn

TDP001 Handhavande av datormiljö

Terminalkommandon v38


Hejsan
Det är äntligen fredag och det är dags för ett nytt terminalmail!

Idag ska vi behandla verktyget find och samtidigt få öva på grep igen.

Kopiera, klipp ut, klistra in och navigera i terminalen

Först kommer lite information om hur man navigerar i text i terminalen, detta kommer vara extra enkelt för er som använder emacs. Kommandon för att hantera text och navigera i terminalen är nämligen exakt samma som i emacs! För att friska upp minnet kommer här en kort tabell:

C = Control
M = Meta (windows eller alt)

Tangenter	Betyder
C-f / M-f	Nästa tecken / ord (forward)
C-b / M-b	Föregående tecken / ord (backward)
C-a / C-e	Början / Slutet av raden 

C-d   		Tag bort tecken 
M-d    		Klipp ut ord
C-k		Klipp ut resten av raden
C-y		Klistra in
M-y		Klistra in tidigare utklipp (görs efter C-y)

Find

Verkyget find används (kanske inte helt oväntat) för att hitta filer som matchar givna villkor. Find är ett ganska komplext verktyg och här beskriver vi vissa av de ingående delarna, som vanligt finns det massor att läsa i manualsidorna för find.

Ett anrop till find följer normalt sett följande syntax:
    find sökväg uttryck
sökväg är en katalog där vi vill att find ska utgå ifrån när den börjar söka. uttryck är ett logiskt uttryck som måste vara sant för att find ska lista markera en fil som hittad.

Uttrycket är en serie av "väljare" (option), "test" (test) och "åtgärder" (action), alla separerade med operatorer. väljare anses alltid ha värdet sant medan test och åtgärder ger antigen sant eller falskt beroende på den fil verktyget undersöker för tillfället. Det finns två huvudsakliga operatorer; -a (and) och -o (or), om ingen operator anges antas det att man menar -a. Alla uttryck är kortslutande, det är alltså viktigt att ha sina test och åtgärder i rätt ordning för att få rätt resultat.
Man kan även använda , för att utföra flera uttryck (resultatet är det sista) och -not för att negera ett resultat. Man kan innesluta uttryck med parenteser för att ändra beräkningsordning.

Numeriska värden kan vara på formatet 
+n   Värden större än n
-n   Värden mindre än n
n    Exakt värdet n

Några exempel på test:

Test		Beskrivning
-name "namn"	Ger sant om filnamnet matchar strängen (glob-mönster ok)
-size sz	Ger sant om filstorleken matchar sz (kan anges med suffix, 
      		exempelvis betyder +4M mer än 4 megabyte)
-mmin n		Filen ändrades för n minuter sedan
-type c		Kontrollerar filtyp, några exempel på c:
      		f  Vanlig fil
		d  katalog
-user uname	Filen ägs av användare uname
-executable	Sant om filen är körbar (för dig)
-readable	Sant om filen är läsbar (för dig)
-writable	Sant om filen är skrivbar (för dig)
Några åtgärder:
Åtgärd		Beskrivning
-delete		Tar bort filen, ger sant om den lyckas (farlig!)
-exec cmd \;	Anropa programmet cmd, sant om cmd lyckas (returnerar 0)
      	  	Aktuell fil kan anges med {} (se exempel senare)
-ok cmd \;	Precis som exec fast frågar användaren först
-ls		listar aktuell fil likt "ls -dils"
-print		Skriv ut fullständig sökväg till filen
-prune		Om filen är en katalog: gå inte djupare ner i katalogen

Väljare:

Väljare		Beskrivning
-maxdepth n	Gå maximalt ner n nivåer av kataloger
-mount	  	Gå inte ner i kataloger som är monterade på andra filsystem
Exempel
	find . -name "*.py"
Hittar alla filer i nuvarande katalog som slutar på .py
       find /data/files -name "*.txt" -exec grep katt {} \;
Hittar alla txt-filer som ligger någonstans under /data/files och innehåller texten katt.

Uppgifter

Uppgift 1: Använd find för att lista alla python-filer som går att köra (har x-flaggan satt samt har med #! /usr/bin/env python3).

Uppgift 2: Använd find för att hitta alla filer under din hemkatalog som är större än 5Mb stora. (detta är bra att kunna om man skulle få slut på quota på IDAs filsystem!)


Sidansvarig: Pontus Haglund
Senast uppdaterad: 2019-05-29