Terminalen: Filer og mapper

Denne side er skrevet som en manual du kan køre igennem fra start til slut.

Filsystemet

I Linux er alt filer. Selv din harddisk bliver behandlet som om det var en fil. Sådan er det faktisk også i Windows, men det godt skjult for brugeren, og det er svært tilgængeligt.

Uanset om du sidder på en Ubuntu workstation eller server, så har de nøjagtig samme filstruktur. Filstrukturen følger FHS (Filesystem Hierarchy Standarden) som bliver vedligeholdt af Linux Foundattion. Alle Linuxsystemer har samme opbygning og placering af filer.

/ ├── bin -> usr/bin ├── boot ├── cdrom ├── dev ├── etc ├── home ├── lib -> usr/lib ├── lib32 -> usr/lib32 ├── lib64 -> usr/lib64 ├── libx32 -> usr/libx32 ├── lost+found ├── media ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin -> usr/sbin ├── snap ├── srv ├── sys ├── tmp ├── usr └── var

Her kommer en gennemgang af de mapper, som du mest sandsynligt vil komme til at arbejde i:

/bin
Her ligger systemkommandoerne. Laver du egne scripts og de skal være tilgængelig for alle, så skal de ligge her
/dev
Her ligger alle blok enheder (harddisk)
/etc
Konfigurationsfiler til systemet
/home
Brugernes hjemmemapper
/media
Her monteres eksterne harddiske, USBdrev og CD/DVD/BR-drev
/mnt
Her monteres netværksdrev
/srv
Her lægges (server))drev der deles med andre
/var
Variable filer der ændrer sig ofte. Det kan være logfiler, men også www filer.

Alt er filer

Til forskel fra Windows der har en registreringsdatabase, styres Linux af konfigurations filer. Så hvis der f.eks. skal ændres i opsætningen af et netværkskort, så skal man gå ind i filen og lave ændringer.

Fordelen er, at denne ene fil kan kopieres videre til andre computere, der skal sættes op på samme måde. Og det kan gøres over SSH, som er en tekstbaseret adgang til computere.

Filtyper

Man kan se filtypen når man kigger på det første tegn ved rettighederne

-rwx--x--x 1 tj tj 841 okt 26 2018 backup.sh

De mest relevante typer er:

-
Almindelig fil
d
Mappe
b
Blok enhed (block device)
l
Symbolsk link

Du kan læse mere om Linux-filtyper her Wikipediaside om Linuxfiltyper

Mappestruktur

Herunder er mappestrukturen for /home på en Ubuntu workstation.

/
└── home
	└── tj
		├── Billeder
		├── Dokumenter
		├── Hentet
		├── Musik
		├── Offentligt
		├── Skabeloner
		├── Skrivebord
		├── Videoklip

Stien til mappen Hentet er: /home/tj/Hentet.

  1. niveau - / (roden)
  2. niveau - home
  3. niveau - tj
  4. niveau - Hentet

Filer

Linux skelner mellem store og små bogstaver. Det betyder at brugerne tj og TJ er forskellige og filen data er forskellig fra Data.

Rettigheder

Der er 3 grundlæggende filrettigheder: read (r), write (w) og execute (x). Execute betyder at filen kan køres som et program. Rettighederne kan sættes på 3 niveauer: brugeren, gruppe og alle.

Vi kan se rettigehederne på de første 10 tegn. Vi tager eksemplet fra før.

-rwx--x--x 1 tj tj 841 okt 26 2018 backup.sh

Tegnene skal læses på følgende måde:

-
Viser filtypen
rwx
Viser brugerens rettigheder - her read, write og execute
--x
Viser gruppens rettigheder - gruppen kan køre filen som et udføre programmet
--x
Viser alles rettigheder - Alle kan køre filen som et program.

Terminalen bruger vi til at udføre grundlæggende systemarbejde med filer. Det kan være at:

  • Navigation
  • Oprette og slette
  • Flytte og kopiere
  • Hente
  • finde
  • Se og redigere rettigheder
  • Se og redigere indhold
  • pipes og redirect
  • Pakning af filer
  • genstarte og slukke

Grundlæggende terminal brug

cd
Skift mappe
pwd
Viser det bibliotek man står i
clear
Renser kommandovinduet
ls
Viser indholdet af mappen
tree
se træstruktur
Piping
Overførsel output til anden kommando

cd og pwd

Når vi åbner en terminal står du i din personlige mappe. Den ligger i /home/*BRUGERNAVN*.

Det kan vi se når vi kigger på kommandolinien

tj@server1:~$

Tegnet ~ (kaldes en tilde) viser at vi står i vores egen mappe

Lad os se hvor vi står. Det bruger vi pwd til.

pwd
/home/tj

Vi vil gerne flytte os til mappen med indstillinger. Den hedder /etc/apt

cd /etc/apt
tj@server1:/etc/apt$

Nu kan vi se at ~ har ændret sig til /etc/apt

Vi flytter os lige tilbage til vores egen mappe:

cd ~
tj@server1:~$
cd /etc/apt
Skift til mappen /etc/apt
cd /
Skift til roden af filstrukturen
cd ..
Gå et mappeniveau ned
cd ~
Skift til din hjemmemappe

clear

Bliver terminalvinduet for rodet kan man rense det med kommandoen clear

clear

ls

Lad os se på indholdet i en mappe. Her vil vi kigge på mappen vi lige besøgte: /etc/apt

ls /etc/apt
apt.conf.d preferences.d sources.list.curtin.old trusted.gpg.d auth.conf.d sources.list sources.list.d

De blå filer er mapper og de hvide er almindelige filer.

Læg mærke til at vi kigger på filerne i en anden mappe end den vi står i.

Der er ingen grund til at navigere til den mappe man vil se eller gøre noget i.

Vi vil gerne have flere deltaljer om den mappe vi kigger i, så vi bruger ls med optionen -ls

ls -al /etc/apt
total 36 drwxr-xr-x 7 root root 4096 Dec 14 09:02 . drwxr-xr-x 94 root root 4096 Dec 17 09:51 .. drwxr-xr-x 2 root root 4096 Dec 14 10:00 apt.conf.d drwxr-xr-x 2 root root 4096 Apr 9 2020 auth.conf.d drwxr-xr-x 2 root root 4096 Apr 9 2020 preferences.d -rw-r--r-- 1 root root 2777 Dec 14 09:02 sources.list -rw-r--r-- 1 root root 2743 Jul 31 16:30 sources.list.curtin.old drwxr-xr-x 2 root root 4096 Apr 9 2020 sources.list.d drwxr-xr-x 2 root root 4096 Jul 31 16:28 trusted.gpg.d

Dette er den udskrift du vil komme til at bruge oftest, da den giver dig information om filtype, rettigheder og ejerskab

Læg mærke til at der som første tegn er et d ved dokumenter og en - ved filerne. Så kan alle se hvad det er ;).

En smart ting som bliver gennemgået senere er at man kan pipe (en lodret streg)det og søge ud i resultaterne. Lad os sige vi kun vil have vist filer og mapper hvor ordet sources indgår.

ls -al /etc/apt | grep sources
-rw-r--r-- 1 root root 2777 Dec 14 09:02 sources.list -rw-r--r-- 1 root root 2743 Jul 31 16:30 sources.list.curtin.old drwxr-xr-x 2 root root 4096 Apr 9 2020 sources.list.d

Så kan man designe sin visning til nøjagtigt det man leder efter.

Eksempler

li
Viser filer og mappenavne
ls -l
Udvidet visning (rettigheder, ejerskab, størrelse og dato)
ls -al
Udvidet visning med skulte filer/mapper
ls -al /etc/log
Udvidet visning af /etc/log
ls -d
viser kun filer
ls -d .*
viser kun skjulte
ls -d */
viser kun skjulte mapper

tree

En anden måde at få overblik er ved hjælp af tree. tree skal først installeres. tree bliver gennemgået senere.

sudo apt install tree -y

Lad os kigge på /etc/apt med tree

tree /etc/apt
/etc/apt ├── apt.conf.d │   ├── 01autoremove │   ├── 01autoremove-kernels │   ├── 01-vendor-ubuntu │   ├── 10periodic │   ├── 15update-stamp │   ├── 20archive │   ├── 20auto-upgrades │   ├── 20packagekit │   ├── 20snapd.conf │   ├── 50command-not-found │   ├── 50unattended-upgrades │   ├── 70debconf │   └── 99update-notifier ├── auth.conf.d ├── preferences.d ├── sources.list ├── sources.list.curtin.old ├── sources.list.d └── trusted.gpg.d ├── ubuntu-keyring-2012-archive.gpg ├── ubuntu-keyring-2012-cdimage.gpg └── ubuntu-keyring-2018-archive.gpg 5 directories, 18 files

Her får vi en visning med træstruktur.

Vil vi kun have mapper sætter vi -d på.

tree -d /etc/apt
/etc/apt ├── apt.conf.d ├── auth.conf.d ├── preferences.d ├── sources.list.d └── trusted.gpg.d

Et sidste eksempel er at begrænse visningen kun til undermapper.

tree -d /usr -L 1
/usr ├── bin ├── games ├── include ├── lib ├── lib32 ├── lib64 ├── libexec ├── libx32 ├── local ├── sbin ├── share └── share

Effekten kan du se ved at køre kommandoen med -L 2.

Avancerede visninger

Visning med fulde stier:

tree -fid /etc/apt
/etc/apt /etc/apt/apt.conf.d /etc/apt/auth.conf.d /etc/apt/preferences.d /etc/apt/sources.list.d /etc/apt/trusted.gpg.d

Visning med rettigheder, bruger og gruppe.

tree -fidpug /etc/apt
/etc/apt [drwxr-xr-x root root ] /etc/apt/apt.conf.d [drwxr-xr-x root root ] /etc/apt/auth.conf.d [drwxr-xr-x root root ] /etc/apt/preferences.d [drwxr-xr-x root root ] /etc/apt/sources.list.d [drwxr-xr-x root root ] /etc/apt/trusted.gpg.d

læs mere om tree: http://manpages.ubuntu.com/manpages/focal/en/man1/tree.1.html

Eksempler

tree
Viser filer og mapper i træstruktur
tree /usr
Viser filerne i mappen /usr
tree /usr -d
Viser kun mapper i /usr
tree /usr -d -L 1
Viser kun mapper i /usr i et niveau
tree /usr -du -L 1
Viser kun mapper i /usr i et niveau med ejerskab
tree /usr -du -L 1
Viser kun mapper i /usr i et niveau med filstørrelse
tree /usr -dirsfirst -L 1
Viser alle filer i /usr med mapperne først
tree /usr -pua -dirsfirst
viser filerne med rettigheder og ejer ... og sætter mapperne først

Piping

Piping er en metode der oftes anvendes i terminalen. Ved hjælp af piping kan vi overføre output en kommando til en anden kommando. Det skrives på følgende måde:

Kommando_1 | Kommando_2

Output fra Kommando_1 bliver brugt som input i Kommando_2.

Lad os se på eksemplet ovenfor

ls -al /etc/apt | grep sources

Kommando 1 siger: vis en liste over alle filer i /etc/apt

total 36 drwxr-xr-x 7 root root 4096 Dec 14 09:02 . drwxr-xr-x 94 root root 4096 Dec 17 09:51 .. drwxr-xr-x 2 root root 4096 Dec 14 10:00 apt.conf.d drwxr-xr-x 2 root root 4096 Apr 9 2020 auth.conf.d drwxr-xr-x 2 root root 4096 Apr 9 2020 preferences.d -rw-r--r-- 1 root root 2777 Dec 14 09:02 sources.list -rw-r--r-- 1 root root 2743 Jul 31 16:30 sources.list.curtin.old drwxr-xr-x 2 root root 4096 Apr 9 2020 sources.list.d drwxr-xr-x 2 root root 4096 Jul 31 16:28 trusted.gpg.d

Dette bliver overført til kommando 2

Kommando 2 siger: vælg alle linier hvor tekststrengen sources står

-rw-r--r-- 1 root root 2777 Dec 14 09:02 sources.list -rw-r--r-- 1 root root 2743 Jul 31 16:30 sources.list.curtin.old drwxr-xr-x 2 root root 4096 Apr 9 2020 sources.list.d

Piping i flere niveauer

Man kan gøre det i flere niveauer.

Kommando_1 | Kommando_2 | Kommando_3 | ... | Kommando_N

Vi tager eksemplet ovenfor, hvor vi kun vil have dem hvor der står .old ved. Den fulde kommando vil være:

ls -al /etc/apt | grep sources | grep .old
-rw-r--r-- 1 root root 2743 Jul 31 16:30 sources.list.curtin.old

Oprette og slette

mkdir
Opretter mapper
touch
Opretter filer og opdaterer tidsstempel på allerede eksisterende filer og mapper
rm
Sletter mapper og filer

mkdir

Opretter mapper

Til at oprette mapper bruges kommandoen mkdir.

Vi starter med at oprette en øvemappe i vores egen mappe. den ligger i /home/*brugernavn*, men kan også tilgås med ~.

Her opretter vi en mappe til at lave vores øvelser i. Vi opretter den med den fulde sti, og flytter os op i mappen:

mkdir ~/øvelser
cd ~/øvelser
tj@server1:~/øvelser$

Alle eksemplerne her bliver installeret i mappen ~/øvelser. Derfor er der ikke en fuld sti på mappenavnene.

Enkelt mappe

Her opretter vi mappe1.

mkdir mappe1
tree -d
. └── mappe1 1 directory

Flere mapper på en gang

Her opretter vi to mapper på en gang (mappe2 og mappe3).

mkdir mappe2 mappe3
tree -d
. ├── mappe1 ├── mappe2 └── mappe3 3 directory

Med undermapper

Her opretter vi vi en hel struktur: mappe4/um1/uum1

Læg mærke til at jeg tilføjer -p, for at kunne oprette mapper i flere niveauer

mkdir -p mappe4/um1/uum1
. ├── mappe1 ├── mappe2 ├── mappe3 └── mappe4 └── um1 └── uum1 7 directories
Avanceret anvendelse

Med flere undermapper

Her opretter vi mappe5, med flere undermapperne i samme niveauum1, um2,um3.

mkdir -p mappe5/{um1,um2,um3}
. ├── mappe1 ├── mappe2 ├── mappe3 ├── mappe4 │ └── um1 │ └── uum1 └── mappe5 ├── um1 ├── um2 └── um3

Med flere undermapper

Her opretter vi mappe5, med flere undermapperne i samme niveauum1, um2,um3.

mkdir -p mappe6/{um1,um2,um3}/{uum1,uum2,uum3}
. ├── mappe1 ├── mappe2 ├── mappe3 ├── mappe4 │ └── um1 │ └── uum1 ├── mappe5 │ ├── um1 │ ├── um2 │ └── um3 └── mappe6 ├── um1 │   ├── uum1 │   ├── uum2 │   └── uum3 ├── um2 │   ├── uum1 │   ├── uum2 │   └── uum3 └── um3 ├── uum1 ├── uum2    └── uum3

touch

Opretter filer og opdaterer tidsstempel på allerede eksisterende filer og mapper

touch anvendes til 2 ting:

  • Oprette nye filer
  • Forny tidsstempel på eksisterende filer

Her opretter vi filen testfil i vores personlige mappe. ~ er en smart måde at fortælle, at vi bruger /home/*brugernavn*

touch ~/testfil1

Vi kigger på file vi lige har oprettet

ls -al testfil1 | grep testfil
-rw-rw-r-- 1 tj tj 0 Dec 18 14:03 testfil1

Man kan også oprette en række af filer på en gang:

touch testfil2 testfil3

Vi kigger.

ls -al testfil1 | grep testfil
-rw-rw-r-- 1 tj tj 0 Dec 18 14:03 testfil1 -rw-rw-r-- 1 tj tj 0 Dec 18 14:10 testfil2 -rw-rw-r-- 1 tj tj 0 Dec 18 14:10 testfil3

Som vi kan se har filerne forskellige tidsstempler. Vi vil gerne have at de alle bliver opdatere til nu.

touch testfil*

Vi kigger.

ls -al testfil1 | grep testfil
-rw-rw-r-- 1 tj tj 0 Dec 18 14:16 testfil1 -rw-rw-r-- 1 tj tj 0 Dec 18 14:16 testfil2 -rw-rw-r-- 1 tj tj 0 Dec 18 14:16 testfil3

rm

Sletter filer og mapper

Nar man sletter filer og mapper med kommandolinien, så bliver de slettet for alvor. Dvs. man kan ikke hente dem i en skraldespand. Filerne er væk.

Så kontroller at du sletter de rigtige filer.

Lad os slette testfil3

rm testfil3

Vi kigger.

ls -al testfil1 | grep testfil
-rw-rw-r-- 1 tj tj 0 Dec 18 14:16 testfil1 -rw-rw-r-- 1 tj tj 0 Dec 18 14:16 testfil2

Vi kan slette flere filer på engang ved at bruge samme fremgangsmåde som ovenfor:

rm testfil2 testfil3

Vi kigger.

ls -al testfil1 | grep testfil

Vi kan også slette ved hjælp af at bruge * (asterisk).

Vi starter med at oprette 3 filer igen:

touch testfil1 testfil2 testfil3

Vi kigger.

ls -al testfil1 | grep testfil
-rw-rw-r-- 1 tj tj 0 Dec 18 14:52 testfil1 -rw-rw-r-- 1 tj tj 0 Dec 18 14:52 testfil2 -rw-rw-r-- 1 tj tj 0 Dec 18 14:52 testfil3

For at slette alle laver vi følgende kommando

rm test*

Den kommando sletter alle filer der starter med test. Tjek selv efter.

Sletning af mapper

For at slette mapper skal man tilføje -R. Når man sletter en mappe, så skal alt indholdet også slettes. Derfor skal det gøres recursivt (-R).

Lad os slette mappe6

rm -R mappe6

Lad os slette mappe3 til mappe5

rm -R mappe[3-6]

For at slutte af sletter vi øvelsesmappen

rm -R ~/øvelser

Nu sker der noget underligt ... vi står i en slettet mappe:

tj@server1:~/øvelser$ rm -R ~/øvelser tj@server1:~/øvelser$

Så vi skifter tilbage til vores hjemmemappe

cd ~

Vær forsigtig

Som skrevet ovenfor, så sletter rm alt. Hvis man nu kommer at skrive:

sudo rm -R /

... så beder man faktisk rm om at slette hele harddisken

tj@server1:~$ sudo rm -R / [sudo] password for tj: rm: it is dangerous to operate recursively on '/' rm: use --no-preserve-root to override this failsafe

Heldigvis er systemet sat på så det forhindrer det ... men det betyder ikke at du ikke kan komme til at slette andre vitale dele af systemet med rm.

Brug rm med omtanke.

Flytte og kopiere

cp
Kopierer filer og mapper
mv
Flytter filer og mapper

cp

Kopiere filer og mapper

Først opretter vi en øvelsesmappe med en undermappe og en fil, for til sidst at navigere over til den.

mkdir -p øvelse2/mappe1
touch ~/øvelse2/fil1
ls -al ~/øvelse2
cd øvelse2

Vi tjekker mappen

tree
. ├── fil1 └── mappe1 1 directory, 1 file

Herunder laver vi følgende:

  • Vi kopierer fil1 til fil2
  • Vi laver en kopi af fil1 i mappen mappe1
  • vi laver en kopi af mappe1 til mappe2
cp fil1 fil2
cp fil1 mappe1
cp -R mappe1 mappe2

Vi ser på resultatet

tree
. ├── fil1 ├── fil2 ├── mappe1 │   └── fil1 └── mappe2 └── fil1 2 directories, 4 files

backup af systemfiler

Når man arbejder med systemfiler, så er det normalt, at man tager en backup af filen før man laver ændringer. På den måde kan man altid komme tilbage til en oprindelig opsætning.

Man plejer at gøre det ved at kopiere filen og sætte .backup bagpå -evt. med dato.

Så hvis vil skulle lave ændringer i fil1 ville vi først gøre følgende:

cp fil1 fil1.backup

mv

Bruges til at flytte eller ændre navn på filer og mapper

Herunder laver vi følgende

  • Vi flytter fil2 til fil3
  • Vi flytter mappe2 til mappe3
mv fil2 fil3
mv mappe2 mappe3
trte

Vi ser på resultatet

tree
. ├── fil1 ├── fil3 ├── mappe1 │   └── fil1 └── mappe3 └── fil1 2 directories, 4 files

Filstørrelse

du
Viser mappestørrelsen
dd
Viser plads på filsystemet

du

du bruges til at vise størrelsen på mapper.

Her undersøger vi /etc/apt

du -h /etc/apt
4.0K /etc/apt/sources.list.d 60K /etc/apt/apt.conf.d 4.0K /etc/apt/preferences.d 4.0K /etc/apt/auth.conf.d 16K /etc/apt/trusted.gpg.d 100K /etc/apt

For at se alle filer og det samlede pladsforbrug anvendes -ch

du -ch /etc/apt
4.0K /etc/apt/sources.list.d 60K /etc/apt/apt.conf.d 4.0K /etc/apt/preferences.d 4.0K /etc/apt/auth.conf.d 16K /etc/apt/trusted.gpg.d 100K /etc/apt 100K total

For kun at se mappens størrelsen bruger vi -hs

du -hs /etc/apt
100K /etc/apt

df

df bruges for at se den brugte plads på partitioner.

df -h /dev/sda
Filesystem Size Used Avail Use% Mounted on udev 952M 0 952M 0% /dev

-ht ext4 giver et komplet overblik over alle partitioner med filsystemet ext4.

df -ht ext4
Filesystem Size Used Avail Use% Mounted on /dev/mapper/ubuntu--vg-ubuntu--lv 30G 4.9G 24G 18% / /dev/sda2 976M 104M 806M 12% /boot /dev/sdb2 69G 53M 66G 1% /srv/data /dev/sdb1 30G 45M 28G 1% /srv/backup
df -h
Viser brugt plads på alle monterede partitioner
df -h /
Viser brugt plads på /
df -h -t ext4
Viser informationer om partitioner der er formateret med ext4
df -ht
Viser alle blok enheder
df -hT
Viser alle blok enheder + deres filsystem

Hente

wget
Henter filer fra Internetet

wget

Henter filer på Internettet

Der ligger en fil på min hjemmeside med følgende adresse.

http://www.vidas.dk/guides/files/wget_testfil

Vi vil nu hente den ned i øvelsesmappen, som vi står i.

wget -c http://www.vidas.dk/guides/files/wget_testfil
--2020-12-18 16:07:08-- http://www.vidas.dk/guides/files/wget_testfil Resolving www.vidas.dk (www.vidas.dk)... 185.199.110.153, 185.199.108.153, 185.199.111.153, ... Connecting to www.vidas.dk (www.vidas.dk)|185.199.110.153|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 63 [application/octet-stream] Saving to: ‘wget_testfil’ wget_testfil 100%[===================>] 63 --.-KB/s in 0s 2020-12-18 16:07:08 (2.81 MB/s) - ‘wget_testfil’ saved [63/63]

-c sikrer, at filhentningen kan genoptages hvis der bliver afbrudt.

Overblik

wget -c *filadresse*
Henter filen, med mulighed for at genstarter hentningen.
wget -P ~/*mappe* *filadresse*
Henter filen, men gemmer den i mappen ~/*mappe*
wget -o ~/*hentetfil* *filadresse*
Henter filen, men gemmer den som "hentetfil*
wget -b *filadresse*
Henter filen i baggrunden - frigiver kommandolinien med det samme.

Optionerne kan stackes. På den måde vil wget -cob minfil *filadresse* hente i baggrunden, gemme den som minfil og sikre at download kan genoptages ved afbrydelse.

man-page wget: http://manpages.ubuntu.com/manpages/focal/man1/wget.1.html

Finde

find
Finder filer og mapper
grep
finde tekstrenge i filer

find

find bruges til at finde filer

Lad finde filer med navnet fstab, på computeren. Vi skal bruge sudo, så vi kan nå alle steder hen

sudo find / -type f -name fstab
/usr/share/doc/util-linux/examples/fstab /etc/fstab /snap/core/10577/etc/fstab /snap/core/10444/etc/fstab /snap/core18/1932/etc/fstab /snap/core18/1944/etc/fstab

Overblik

find / -type f -name fstab
Finder alle filer der hedder fstab
find . -type d -name apt
Finder alle mapper der hedder noget med apt i den mappe du står i.
find . -type f -perm /a=x
Finder alle filer der kan køres som programmer i den mappe du står i
find . -type d -empty
Finder alle tomme mapper i den mappe du står i.

Avanceret brug

Kommandoen kan også bruges til at udføre kommandoer filer der findes.

Her er et eksempel hvor alle filer med endelsen .log får opdateret deres tidsstempel.

find . -type f -name "*.log" -exec touch {} \;

man-page more: http://manpages.ubuntu.com/manpages/focal/en/man1/find.1.html

grep

Anvendes til at finde tekststrenge i en fil.

grep backup /etc/passwd
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin

Du kan også søge på mere end en tekststreng.

grep "*TEKSTSTRENG1* \| *TEKSTSTRENG2*"

Her vil jeg f.eks. finde både backup og tj

grep "backup\|tj" /etc/passwd

Der må ikke være mellemrum mellem i backup\|tj

Hvis du skal finde en tekststrenge i en række dokumenter (f.eks. i html-filer på din hjemmeside) kan du gøre følgende:

grep alert  -r ~/hjemmeside --include=*.css

Erstattes stien med et . (punktum), så søges der i den mappe du laver kommandoen.

grep alert  -r . --include=*.css

Her er en god artikel om find: http://www.jcgonzalez.com/ubuntu-find-string-files-example

man-page grep: http://manpages.ubuntu.com/manpages/focal/man1/grep.1.html

Se og redigere rettigheder

chown
Ændrer ejerskab på grupper
chmod
Ændret rettigheder på filer og mapper

chown - change owner

chown bruges til, at ændre ejer og gruppe på en fil eller en mappe.

Det er kun root der kan ændre ejerskab på filer.

Ændring af ejerskab

Her ændres ejeren af ~/testfil til brugeren tj.

sudo chown tj ~/testfil

Ændring af ejerskab og gruppe

Herunder ændres filen til at have ejeren og gruppen tj

sudo chown tj:tj ~/testfil

Man kan også anvende følgende "shorthand"

sudo chown tj: ~/testfil

Ved at sætte et kolon, så antager chown, at gruppen er den samme.

Ændring af ejerskab på mapper og undermapper

Skal man ændre rettigheder på alle filer i en mappe anvender man -R (recursive). Nedestående kommando ændrer ejerskab på alle filer i mappen /data

sudo chown -R tj: /data
tj@server1:~$ sudo touch testfil [sudo] adgangskode for tj: tj@server1:~$ ls -al testfil -rw-r--r-- 1 root root 0 jun 2 10:41 testfil tj@server1:~$ udo chown tj:tj testfil -rw-r--r-- 1 tj tj 0 jun 2 10:41 testfil

man-page chown: http://manpages.ubuntu.com/manpages/focal/man1/chown.1.html

chmod - change mode

chmod ændrer rettighederne på filen.

chmod [-R][rettigheder] [fil/mappe]

Skal det gælde alle undermapper indsættes -R (recursiv)

Når vi sætter rettigheder anvender vi en anden skrivemåde end rwx. Vi anvender binære værdier som du kan se herunder.

  • 0 - Rettigheder: ingen (---)
  • 1 - Rettigheder: Udføre (--x)
  • 2 - Rettigheder: Skrive (-w-)
  • 3 - Rettigheder: Skrive og udføre (-wx)
  • 4 - Rettigheder: Læse (r--)
  • 5 - Rettigheder: Læse og udføre (r-x)
  • 6 - Rettigheder: Læse og skrive (rw-)
  • 7 - Rettigheder: Læse, skrive og udføre (rwx)

Her kan du se beregningerne for de binære værdier: beregninger af binære værdier.

På denne måde skal vi kun angive et tal for henholdsvis brugeren, gruppen og alle. Herunder er nogle praktiske eksempler.

700
Brugeren har alle rettigheder. Bruges f.eks. når man laver script filer og har brug for at køre dem. Ingen andre brugere kan altså se eller anvende dem.
705
Brugeren har alle rettigheder, og alle andre kan se og udføre dem. Bruges f.eks. til webserverens filer, da webserveren skal have fulde rettigheder, men alle andre skal kunne se og udføre filerne
660
Brugeren og gruppen skal kunne læse og skrive i filen, men ikke udføre den. Kan f.eks. være tekstfiler man skla kunne redigere.

Tallet 705 skal læses som syv nul fem, hvor det første tal sætter rettigheden for brugeren, det andet tal for gruppen og det sidste for alle.

Uanset hvordan du sætter rettigheder og ejerskab har root-brugeren altid mulighed for at ændre disse.

root kan give og fjerne adgang til alle filer.

Eksempel med fil

Et eksempel, hvor rettighederne sættes til at brugeren har alle rettigheder (rwx) og alle har ret til at læse og udføre (r-w) svarende til rettigheder for html-filerne på en webserver:

chmod 705 testfil
tj@server1:~$ ls -al | grep testfil -rw-rw-r-- 1 tj tj 0 jun 3 17:02 testfil' tj@server1:~$ chmod 705 testfil tj@server1:~$ ls -al | grep testfil -rwx---r-x 1 tj tj 0 jun 3 17:02 testfil

Eksempel med mapper (recursiv)

Dette eksempel viser hvordan man omdøber alle filer og undermapper.

chmod -R 705 /var/www/html

705 kombinationen er meget anvendt på systemer hvor brugeren skal have alle rettigheder, men alle skal kunne se filerne og udføre programmerne UDEN at kunne ændre på dem. F.eks. på en webserver som har filerne i mappen /var/www/html og dennes undermapper.

man-page chmod: http://manpages.ubuntu.com/manpages/focal/man1/chmod.1.html

Se og redigere indhold

nano
Redigering af filer
cat
Output af hele filen (sammenkædning)
more
Output af filen - en side af gangen
head/tail
Output af starten eller slutningen af filen
sort
sortere filen før visning
Uniq
Viser kun unikke linier (fjerner gentagelser)

nano

På en Linuxserver bliver alle tjenester og hardware initialiseret og konfigureret igennem tekstfiler. Derfor skal du kende nano, et effektiv terminal tekstredigeringsprogram. Programmet har også opmærkning med farver, hvis det genkender formatet. nano startes med kommandoen:

nano *filnavn*

Du navigerer i filen ved hjælp af piletasterne, og du kan bruge Ctrl og kd

Herefter bliver ændres terminalen til nedestående, hvor menuen ligger i bunden af skærmen.

GNU nano 2.2.6 New Buffer ^G Få hjælp ^O Gem ^W Hvor er ^K Klip ud ^J Ombryd ^C Position ^X Afslut ^R Læs fil ^\ Erstat ^U Indsæt tekst ^T Stavetjek ^_ Til linje

Du navigerer rundt i nano med piletaster ligesom i alle andre tekstbehandlingsprogrammer.

Herunder er de meste basale funktioner

^ står for Ctrl og m- for Alt

Ctrl+w
find
Ctrl+y
en side op
Ctrl+v
En side ned
Ctrl+w+v
Til filens sidste linie
Ctrl+k
Klip
Ctrl+u
Indsæt
Ctrl+x
Afslut nano
Alt+u
Fortryd
Alt+e
Annuller fortryd
Alt+a
Marker tekst
Alt+6
kopier tekst

Når du har redigeret din tekst færdig afslutter du med Ctrl+x, hvorefter nano i bunden svarer:

Gem ændret buffer (AT SVARE "Nej" VIL ØDELÆGGE ÆNDRINGER)? J Ja N Nej ^C Annullér

Når du svarer y vil nano skrive filnavnet med den fulde sti, hvortil du taster Enter.

Får du en fejlmelding om at du ikke kan gemme skyldes det oftest, at man redigerer i en fil man ikke har rettigheder til. Oftes skyldes det at man glemmer at anvende sudo når man redigerer i systemfiler.

cat

cat laver et output af filen, men stopper ikke når skærmen er fyldt. Derfor er cat ikke velegnet til at vise indholdet af store filer.

vi vil se indholdet af /etc/hosts

cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 server1 # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters

man-page cat: http://manpages.ubuntu.com/manpages/focal/man1/cat.1.html

more

more laver en udskrift af filen, et skærmbillede ad gangen. Man fortsætter visningen ved at trykke Enter eller mellemrum.

Enter
En linie ad gangen
mellemrum
En side ad gangen

Neders på siden står der hvor langt i filen man er angivet i procent.

more /etc/passwd
.... mange linier..... gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologi n nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin systemd-network:x:100:102:systemd Network Management,,,:/run/systemd:/usr/sbin/n ologin systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin systemd-timesync:x:102:104:systemd Time Synchronization,,,:/run/systemd:/usr/sbi --More--(63%)

man-page more: http://manpages.ubuntu.com/manpages/focal/man1/more.1.html

head/tail

head viser de første 10 linier af en fil og tail viser de sidste 10

Kommandoen er god til at se om noget er blevet korrekt tilføjet til en fil.

tail /etc/passwd
_apt:x:105:65534::/nonexistent:/usr/sbin/nologin tss:x:106:111:TPM software stack,,,:/var/lib/tpm:/bin/false uuidd:x:107:112::/run/uuidd:/usr/sbin/nologin tcpdump:x:108:113::/nonexistent:/usr/sbin/nologin landscape:x:109:115::/var/lib/landscape:/usr/sbin/nologin pollinate:x:110:1::/var/cache/pollinate:/bin/false sshd:x:111:65534::/run/sshd:/usr/sbin/nologin systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin tj:x:1000:1000:Thomas Jensen:/home/tj:/bin/bash lxd:x:998:100::/var/snap/lxd/common/lxd:/bin/false

Overblik

tail /etc/passwd
viser de 10 sidste linier af /etc/passwd
tail -5 /etc/passwd
viser de sidste 5 linier af /etc/passwd
head -5 /etc/passwd
viser de første 5 linier af /etc/passwd

man-page tail: http://manpages.ubuntu.com/manpages/focal/en/man1/tail.1.html

man-page head: http://manpages.ubuntu.com/manpages/focal/man1/head.1.html

sort

sort sortere i outputtet.

Her bruger vi sort til at filtrere de sidste 5 linier af /etc/passwd

tail -5 /etc/passwd | sort
lxd:x:998:100::/var/snap/lxd/common/lxd:/bin/false pollinate:x:110:1::/var/cache/pollinate:/bin/false sshd:x:111:65534::/run/sshd:/usr/sbin/nologin systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin tj:x:1000:1000:Thomas Jensen:/home/tj:/bin/bash

Som du kan se er lxd nu blevet flyttet øvers.

Det ændrer ikke på filen, men giver os et bedre overblik.

man-page sort: http://manpages.ubuntu.com/manpages/focal/man1/sort.1.html

uniq

Nogle gang kan vi have filer der har gentagelser i sig - det kan f.eks. være logfiler. uniq kan hjælpe os med det når filen er sorteret (se sort ovenfor)

Her har jeg en fil1 der viser hvem der har været inde i et rum

cat fil1
Hans Grethe Anders Grethe Anders Grethe

Jeg vil gerne se hvem der har været derinde

sort fil1 | uniq
Anders Grethe Hans

Jeg vil gerne se hvor mange gange de har været derinde

sort fil1 | uniq -c
2 Anders 3 Grethe 1 Hans

Jeg vil gerne se hvem der har været derinde mere end engang, og hvor mange gange.

sort fil1 | uniq -cd
2 Anders 3 Grethe

Jeg vil gerne se hvem der kun har været derinde 1 gang.

sort fil1 | uniq -u
Hans

man-page sort: http://manpages.ubuntu.com/manpages/focal/man1/uniq.1.html

Redirect

Redirect
Overførsel af output
echo
Udskrivning af tekststreng
tee
skriv input til output
sed
Ændring af tekststrenge

Redirect -omdirigering

I linux bruges tegnet > (større end) eller >> til at omdirigere indhold. I denne sammenhæng skal det ses som en pil der peger til højre.

Anvender vi 1 pil (>), så erstattes alt indholdet i filen med output. Anvendes der 2 pile (>>), så tilføjes ouput til slutningen af filen.

Som standard vises output i terminalen. Men det kan være at man gerne vil have output i en fil, så man kan arbejde videre med den.

Output kan have 2 former:

  • stdout - Output fra en kommando
  • stderr - Fejlmeddelelse fra kommando

Det kan bruges på følgende måder:

> file
omdirigerer stdout til file
1> file
omdirigerer stdout til file
2> file
omdirigerer stderr til file
&> file
omdirigerer stdout og stderr til file

Hvis man bare vil fjerne meddelelser fra kommandoer (f.eks. i scripts) kan man i stedet for en fil vælge /dev/null. Det er reelt en mappe på computeren der ikke er der - et sort hul.

Eksempel: Vi vil gerne have træstrukturen fra /etc/aptlagt ind i en fil.

tree -d > træstruktur
tj@server1:~$ tree -d > træstruktur tj@server1:~$ cat træstruktur /etc/apt ├── apt.conf.d ├── auth.conf.d ├── preferences.d ├── sources.list.d └── trusted.gpg.d 5 directories

Eksempel: Vi vil gerne have lagt fejlmeddelser fra en kommando ind i en filen fejlmeddelelser:

cat fil_findes_ikke 2>fejlmeddelelser
tj@server1:~$ cat fil_findes_ikke 2>fejlmeddelelser tj@server1:~$ cat fejlmeddelelser cat: fil_findes_ikke: No such file or directory

Eksempler

cat fil1 > fil2
Erstatter indholdet af fil2 med indholdet af fil1
cat fil1 >> fil2
Tilføjer indholdet af fil1 til indholdet af fil2
cat -n fil1 > fil2
Erstatter indholdet af fil2 med indholdet fra fil1, med linienumre

Læs mere: http://askubuntu.com/questions/350208/what-does-2-dev-null-mean

echo

echo er bashfortolkerens printfunktion

echo "Hej med dig"
Hej med dig

Vi kan f.eks. bruge den til at indsætte datoen i slutningen af en fil (fejlmeddelelser fra før)

echo $(date) >> fejlmeddelelser
tj@server1:~$ echo $(date) >> fejlmeddelelser tj@server1:~$ cat fejlmeddelelser cat: fil_findes_ikke: No such file or directory Sun 20 Dec 2020 12:21:29 PM UTC

man-page echo: http://manpages.ubuntu.com/manpages/focal/man1/echo.1.html

tee

tee bruges til omdirigering, og fungerer ligesom >. Ved at indsætte -a fungerer den lige som >> og indsætter i bunden af filen.

Tee skal bruges sammen med piping.

Eksempler

date | tee ny_fil
Indsætter datoen i ny_fil
date | tee -a ny_fil
indsætter datoen i bunden af ny_fil

tee giver os mulighed for at indsætte tekstrenge i filer vi ikke selv ejer. Det kan vi gøre ved at indsætte sudo foran tee

man-page sort: http://manpages.ubuntu.com/manpages/focal/man1/tee.1.html

sed

sed anvendes til at ændre tekst.

Kommandoen fungerer på følgende måde:

sed -i s/*NUVÆRENDE_TEKST*/*NY_TEKST*/g

Her vil vi ændre alle forekomster af Anders til Thomas:

touch sedfil
echo "Mit navn er Anders" > sedfil
cat sedfil
Mit navn er Anders
sed -i s/Anders/Thomas/g sedfil
cat sedfil
Mit navn er Thomas

Et eksempel på en kommando der erstatter en tekststreng

find . -type f | xargs sed -i 's/tocify({ selectors: "h1, h2, h3, h4" })/tocify({ selectors: "h2, h3, h4" })/g'

man-page tail: http://manpages.ubuntu.com/manpages/focal/en/man1/sed.1.html

Pakke programmer

På Linux pakker man filer ved hjælp af tar. De pakkede filer kaldes for tarballs.

Som standard pakker man mapper med filer. På den måde sikrer man sig også at filerne ligger i den samme mappestruktur, som det blev pakket ned i.

Når man pakker tarballs, så navngiver man den på følgende måde: *PAKKENAVN*.tar.*PAKKEFORMAT*

Tar anvendes på følgende måde:

tar *OPTIONER* *NAVN_PÅ_PAKKET_FIL* *FILER_DER_SKAL_PAKKES*

Eksempel

tar cvfz gif_backup.tar.gz gif

Optioner

c
lav (create) et arkiv
x
udpak (extract)
v
vis fremgang
f
filarkivets navn
t
se indholdet af filen
j
opret en bzip2 pakket fil
z
opret en gzip pakket fil

Pakning af filer

Her vil vi gennemgå komprimeringsformaterne gzip og lzma.

Pakning med gzip

tar cvfz gif_backup.tar.gz gif

gzip-filer navngives tar.gz som afslutning.

Pakning med lzma

tar cvf gif_backup.tar.lz --lzma gif

lzma-filer navngives tar.lz som afslutning.

Til daglig brug bør du anvende gzip, som komprimere ca. til ⅓ (33%)af den oprindelige størrelse. gzip har den bedste størrelse/hastigheds ratio.

lzma anvendes til større backup opgaver. lzma pakker meget mere effektiv til ca. ¼ (25%) af den oprindelige størrelse, men bruger også længere tid på det. Selvom lzma bruger længere tid på at pakke, så pakker det ud hurtigt.

Eksempel med Libreoffice

Her er et eksempel hvor jeg har har pakket Llibreoffice ned usr/lib/libreoffice. Det fylder ialt 316,6 MB

Algoritme Størrelse forskel i MB forskel i % Tid indpak Tid udpak
gz 111,4 205,2 35% 11s 1,7s
lz 84 MB 232,6 MB 26% 1m37s 4,8s

Se indhold

For at se indholdet af tar filer anvendes optionerne tvf

tar tvf gif_backup.tar.gz
drwxr-xr-x tj/tj 0 2016-07-10 12:26 gif/ -rw-r----- tj/tj 805949 2016-07-10 12:26 gif/slow_clap_citizen_kane.gif drwxr-xr-x tj/tj 0 2016-07-10 12:26 gif/tegnefilm/ -rw-r----- tj/tj 986614 2016-07-10 12:26 gif/tegnefilm/run_simpson_run.gif drwxr-xr-x tj/tj 0 2016-07-10 12:26 gif/the bird/ -rw-r----- tj/tj 3080999 2016-07-10 12:26 gif/the bird/thebird02.gif -rw-r----- tj/tj 1890379 2016-07-10 12:26 gif/the bird/thebird01.gif -rw-r----- tj/tj 121990 2016-07-10 12:26 gif/the bird/thebird03.gif -rw-r----- tj/tj 6313886 2016-07-10 12:26 gif/the bird/thebird04.gif -rw-r----- tj/tj 954706 2016-07-10 12:26 gif/mordor.gif -rw-r----- tj/tj 137685 2016-07-10 12:26 gif/lachifre.gif

Man kan også bruge grep

tar tvf gif_backup.tar.gz | grep simpson
-rw-r----- tj/tj 986614 2016-07-10 12:26 gif/tegnefilm/run_simpson_run.gif

Udpakning af filer

Man kan vælge mellem at udpakke alle filer eller blot enkelte

Man udpakker filer på følgende måde - uanset komprimeringsformat.

tar xvf *PAKKEFIL*

Her udpakkes filen gif_backup.tar.lz

tar xvf gif_backup.tar.lz
gif/ gif/slow_clap_citizen_kane.gif gif/tegnefilm/ gif/tegnefilm/run_simpson_run.gif gif/the bird/ gif/the bird/thebird02.gif gif/the bird/thebird01.gif gif/the bird/thebird03.gif gif/the bird/thebird04.gif gif/mordor.gif gif/lachifre.gif

Udpak enkeltfiler

For pakke en enkelt fil ud sætter man blot filnavnet til sidst med den fulde sti.

tar -xvf gif_backup.tar.gz gif/tegnefilm/run_simpson_run.gif

Hvis man vil udpakke flere filer sætter man blot hvert filnavn ind som en tekststreng:

tar -xvf gif_backup.tar.gz gif/tegnefilm/run_simpson_run.gif gif/mordor.gif

Du kan også udpakke alle filer der hedder noget med bird

tar -xvf gif_backup.tar.gz --wildcards *bird*

Læs mere: http://www.tecmint.com/18-tar-command-examples-in-linux/

Lukning af computeren

reboot

reboot genstarter computeren. Den skal køres med root-rettigheder.

sudo reboot

man-page reboot: http://manpages.ubuntu.com/manpages/focal/man8/reboot.8.html

shutdown

shutdown lukker computeren ned. Kommandoen fungerer på følgende måde

sudo shutdown [Optioner] tid [besked]
shutdown -h 0
Computeren lukkes ned nu
shutdown -h 10 Computeren lukkes ned om 10 minutter
Computeren lukkes ned om 10 minutter med budskabet ”Computeren lukkes ned om 10 minutter”
shutdown -r 0
Computeren genstartes om 0 minutter

man-page shutdown: http://manpages.ubuntu.com/manpages/focal/en/man8/shutdown.8.html