Kapitel 1. GNU/Linux handledning

InnehÄllsförteckning

1.1. Grunderna i konsolen
1.1.1. Shell-prompten
1.1.2. Shell-prompten under GUI
1.1.3. Rotkontot
1.1.4. Prompten för root-grÀnssnittet
1.1.5. GUI-verktyg för systemadministration
1.1.6. Virtuella konsoler
1.1.7. SÄ hÀr lÀmnar du kommandotolken
1.1.8. SÄ hÀr stÀnger du av systemet
1.1.9. Återskapa en sund konsol
1.1.10. Ytterligare paketförslag för nybörjaren
1.1.11. Ett extra anvÀndarkonto
1.1.12. sudo konfiguration
1.1.13. Speltid
1.2. Unix-liknande filsystem
1.2.1. Grunderna för Unix-filer
1.2.2. Internt i filsystemet
1.2.3. Behörigheter i filsystemet
1.2.4. Kontroll av behörigheter för nyskapade filer: umask
1.2.5. Behörigheter för grupper av anvÀndare (group)
1.2.6. TidsstÀmplar
1.2.7. LĂ€nkar
1.2.8. Namngivna pipes (FIFO)
1.2.9. Uttag
1.2.10. Enhetsfiler
1.2.11. SĂ€rskilda enhetsfiler
1.2.12. procfs och sysfs
1.2.13. tmpfs
1.3. Midnight Commander (MC)
1.3.1. Anpassning av MC
1.3.2. Starta MC
1.3.3. Filhanterare i MC
1.3.4. Trix pÄ kommandoraden i MC
1.3.5. Den interna redaktören i MC
1.3.6. Den interna tittaren i MC
1.3.7. Funktioner för automatisk start av MC
1.3.8. Virtuellt filsystem för MC
1.4. Den grundlÀggande Unix-liknande arbetsmiljön
1.4.1. Inloggningsskal
1.4.2. Anpassa bash
1.4.3. SĂ€rskilda tangenttryckningar
1.4.4. Operationer med musen
1.4.5. Personsökaren
1.4.6. Textredigeraren
1.4.7. Ange en standardtextredigerare
1.4.8. AnvÀnda vim
1.4.9. Registrering av skalets aktiviteter
1.4.10. GrundlÀggande Unix-kommandon
1.5. Det enkla shell-kommandot
1.5.1. Kommandokörning och miljövariabler
1.5.2. Variabeln "$LANG"
1.5.3. Variabeln "$PATH"
1.5.4. Variabeln "$HOME"
1.5.5. Alternativ för kommandoraden
1.5.6. Skal glob
1.5.7. ReturvÀrde för kommandot
1.5.8. Typiska kommandosekvenser och omdirigering av skal
1.5.9. Kommando alias
1.6. Unix-liknande textbehandling
1.6.1. Unix textverktyg
1.6.2. Vanliga uttryck
1.6.3. ErsÀttningsuttryck
1.6.4. Global substitution med reguljÀra uttryck
1.6.5. Extrahera data frÄn textfilstabell
1.6.6. Skriptavsnitt för piping-kommandon

Jag tycker att lĂ€ra sig ett datorsystem Ă€r som att lĂ€ra sig ett nytt frĂ€mmande sprĂ„k. Även om handledningsböcker och dokumentation Ă€r till stor hjĂ€lp, mĂ„ste du öva sjĂ€lv. För att hjĂ€lpa dig att komma igĂ„ng pĂ„ ett smidigt sĂ€tt tar jag upp nĂ„gra grundlĂ€ggande punkter.

Den kraftfulla utformningen av Debian GNU/Linux kommer frÄn operativsystemet Unix, dvs. ett operativsystem för flera anvÀndare och flera arbetsuppgifter. Du mÄste lÀra dig att dra nytta av kraften i dessa funktioner och likheter mellan Unix och GNU/Linux.

Var inte rÀdd för Unix-orienterade texter och förlita dig inte enbart pÄ GNU/Linux-texter, eftersom du dÄ gÄr miste om mycket anvÀndbar information.

[Notera] Notera

Om du har anvÀnt nÄgot Unix-liknande system ett tag med kommandoradsverktyg kÀnner du förmodligen till allt jag förklarar hÀr. AnvÀnd det hÀr som en verklighetskontroll och uppfrÀschning.

NÀr du startar systemet visas en teckenbaserad inloggningsskÀrm om du inte har installerat nÄgon GUI-miljö som t.ex. skrivbordssystemet GNOME eller KDE. Anta att ditt vÀrdnamn Àr foo, sÄ ser inloggningsprompten ut pÄ följande sÀtt.

Om du har installerat en GUI-miljö kan du fortfarande komma till den teckenbaserade inloggningsprompten med Ctrl-Alt-F3, och du kan Ă„tergĂ„ till GUI-miljön med Ctrl-Alt-F2 (se Avsnitt 1.1.6, ”Virtuella konsoler” nedan för mer information).

foo login:

Vid inloggningsprompten skriver du ditt anvÀndarnamn, t.ex. pingvin, och trycker pÄ Enter-tangenten, sedan skriver du ditt lösenord och trycker pÄ Enter-tangenten igen.

[Notera] Notera

Enligt Unix-traditionen Àr anvÀndarnamn och lösenord för Debian-systemet skiftlÀgeskÀnsliga. AnvÀndarnamnet vÀljs vanligtvis endast frÄn gemener. Det första anvÀndarkontot skapas vanligtvis under installationen. Ytterligare anvÀndarkonton kan skapas med adduser(8) av root.

Systemet startar med det hÀlsningsmeddelande som finns lagrat i "/etc/motd" (Message Of The Day) och visar en kommandotolk.

Debian GNU/Linux 12 foo tty3

foo login: penguin
Password:

Linux foo 6.5.0-0.deb12.4-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.5.10-1~bpo12+1 (2023-11-23) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

Last login: Wed Dec 20 09:39:00 JST 2023 on tty3
foo:~$

Nu befinner du dig i skalet. Skalet tolkar dina kommandon.

Om du installerade en GUI-miljö under installationen visas den grafiska inloggningsskÀrmen nÀr du startar systemet. Du skriver in ditt anvÀndarnamn och ditt lösenord för att logga in pÄ det icke-privilegierade anvÀndarkontot. AnvÀnd fliken för att navigera mellan anvÀndarnamn och lösenord, eller anvÀnd musens primÀra klick.

Du kan fÄ skalprompten under GUI-miljö genom att starta ett x-terminal-emulatorprogram som gnome-terminal(1), rxvt(1) eller xterm(1). Under GNOME-skrivbordsmiljön trycker du pÄ SUPER-tangenten (Windows-tangenten) och skriver in "terminal" i sökprompten.

Under vissa andra skrivbordssystem (som fluxbox) kanske det inte finns nÄgon uppenbar startpunkt för menyn. Om detta hÀnder kan du prova att (höger)klicka pÄ bakgrunden pÄ skrivbordsskÀrmen och hoppas att en meny dyker upp.

Kontot root kallas Àven superuser eller privilegierad anvÀndare. FrÄn det hÀr kontot kan du utföra följande systemadministrativa uppgifter.

  • LĂ€sa, skriva och ta bort alla filer pĂ„ systemet oavsett deras filbehörigheter

  • Ange filĂ€garskap och behörigheter för alla filer pĂ„ systemet

  • Ange lösenordet för alla icke-privilegierade anvĂ€ndare i systemet

  • Logga in pĂ„ alla konton utan deras lösenord

Den hÀr obegrÀnsade kraften i root-kontot krÀver att du Àr hÀnsynsfull och ansvarsfull nÀr du anvÀnder det.

[Varning] Varning

Dela aldrig med dig av root-lösenordet till andra.

[Notera] Notera

FilrĂ€ttigheterna för en fil (inklusive maskinvaruenheter som CD-ROM etc. som bara Ă€r en annan fil för Debiansystemet) kan göra den oanvĂ€ndbar eller otillgĂ€nglig för anvĂ€ndare som inte Ă€r root. Även om anvĂ€ndningen av root-kontot Ă€r ett snabbt sĂ€tt att testa den hĂ€r typen av situation, bör den lösas genom korrekt instĂ€llning av filbehörigheter och anvĂ€ndarens gruppmedlemskap (se Avsnitt 1.2.3, ”Behörigheter i filsystemet”).

Om skrivbordsmenyn inte startar GUI-verktyg för systemadministration automatiskt med rĂ€tt behörighet kan du starta dem frĂ„n root shell-prompten i en terminalemulator, t.ex. gnome-terminal(1), rxvt(1) eller xterm(1). Se Avsnitt 1.1.4, ”Prompten för root-grĂ€nssnittet” och Avsnitt 7.9, ”Anslutning till X-server”.

[Varning] Varning

Starta aldrig GUI-display/sessionshanteraren under root-kontot genom att skriva root i displayhanterarens prompt, t.ex. gdm3(1).

Kör aldrig ett opÄlitligt GUI-program under X-fönstret nÀr kritisk information visas, eftersom det kan avlyssna din X-skÀrm.

I Debians standardsystem finns det sex omkopplingsbara VT100-liknande teckenkonsoler tillgĂ€ngliga för att starta kommandoraden direkt pĂ„ Linux-vĂ€rden. Om du inte befinner dig i en GUI-miljö kan du vĂ€xla mellan de virtuella konsolerna genom att trycka pĂ„ vĂ€nster-Alt-tangenten och en av tangenterna F1 — F6 samtidigt. Varje teckenkonsol tillĂ„ter oberoende inloggning till kontot och erbjuder fleranvĂ€ndarmiljön. Den hĂ€r fleranvĂ€ndarmiljön Ă€r en fantastisk Unix-funktion och mycket beroendeframkallande.

Om du befinner dig i GUI-miljön fÄr du tillgÄng till teckenkonsolen 3 genom att trycka pÄ Ctrl-Alt-F3, dvs. vÀnster Ctrl-tangent, vÀnster Alt-tangent och F3-tangenten trycks in samtidigt. Du kan komma tillbaka till GUI-miljön, som normalt körs pÄ den virtuella konsolen 2, genom att trycka pÄ Alt-F2.

Alternativt kan du byta till en annan virtuell konsol, t.ex. konsol 3, frÄn kommandoraden.

# chvt 3

Precis som alla andra moderna operativsystem dÀr filoperationen innebÀr att data cachas i minnet för förbÀttrad prestanda, behöver Debiansystemet en korrekt avstÀngningsprocedur innan strömmen kan stÀngas av pÄ ett sÀkert sÀtt. Detta för att bibehÄlla filernas integritet genom att tvinga alla Àndringar i minnet att skrivas till disken. Om programvarans strömkontroll Àr tillgÀnglig, stÀnger avstÀngningsproceduren automatiskt av strömmen till systemet. (I annat fall kan du behöva trycka pÄ strömbrytaren i nÄgra sekunder efter avstÀngningsproceduren)

Du kan stÀnga av systemet i det normala fleranvÀndarlÀget frÄn kommandoraden.

# shutdown -h now

Du kan stÀnga av systemet i enanvÀndarlÀge frÄn kommandoraden.

# poweroff -i -f

Se Avsnitt 6.3.8, ”Hur man stĂ€nger av fjĂ€rrsystemet pĂ„ SSH”.

Även om Ă€ven den minimala installationen av Debian-systemet utan nĂ„gra skrivbordsmiljöuppgifter ger de grundlĂ€ggande Unix-funktionerna, Ă€r det en bra idĂ© att installera nĂ„gra ytterligare kommandorads- och curses-baserade teckenterminalpaket som mc och vim med apt-get(8) för nybörjare för att komma igĂ„ng med följande.

# apt-get update
 ...
# apt-get install mc vim sudo aptitude
 ...

Om du redan har dessa paket installerade installeras inga nya paket.


Det kan vara en bra idé att lÀsa nÄgra informativa dokumentationer.


Du kan installera nÄgra av dessa paket pÄ följande sÀtt.

# apt-get install package_name

För den typiska arbetsstationen för en anvÀndare, t.ex. Debian-systemet pÄ den bÀrbara datorn, Àr det vanligt att anvÀnda en enkel konfiguration av sudo(8) enligt följande för att lÄta en icke-privilegierad anvÀndare, t.ex. pingvinen, fÄ administrativa rÀttigheter bara med sitt anvÀndarlösenord men utan root-lösenordet.

# echo "penguin  ALL=(ALL) ALL" >> /etc/sudoers

Alternativt Àr det ocksÄ vanligt att göra pÄ följande sÀtt för att lÄta en icke-privilegierad anvÀndare, t.ex. pingvinen, fÄ administrativa rÀttigheter utan lösenord.

# echo "penguin  ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

Detta trick bör endast anvÀndas för den arbetsstation som du administrerar och dÀr du Àr den enda anvÀndaren.

[Varning] Varning

Skapa inte konton för vanliga anvÀndare pÄ en arbetsstation med flera anvÀndare pÄ det hÀr sÀttet eftersom det skulle vara mycket dÄligt för systemsÀkerheten.

[Observera] Observera

Lösenordet och kontot för pingvinen i exemplet ovan krÀver lika mycket skydd som root-lösenordet och root-kontot.

Administrationsbehörighet i det hÀr sammanhanget tillhör nÄgon som Àr behörig att utföra systemadministrationsuppgifter pÄ arbetsstationen. Ge aldrig nÄgon chef pÄ företagets administrativa avdelning eller din chef sÄdana rÀttigheter om de inte Àr behöriga och kompetenta.

[Notera] Notera

För att ge Ätkomstbehörighet till begrÀnsade enheter och begrÀnsade filer bör du övervÀga att anvÀnda grupp för att ge begrÀnsad Ätkomst i stÀllet för att anvÀnda root-behörighet via sudo(8).

Med en mer genomtĂ€nkt och noggrann konfiguration kan sudo(8) ge begrĂ€nsade administrativa behörigheter till andra anvĂ€ndare pĂ„ ett delat system utan att dela root-lösenordet. Detta kan hjĂ€lpa till med ansvarsskyldigheten för vĂ€rdar med flera administratörer sĂ„ att du kan se vem som gjorde vad. Å andra sidan kanske du inte vill att nĂ„gon annan ska ha sĂ„dana privilegier.

I GNU/Linux och andra Unix-liknande operativsystem Àr filer organiserade i kataloger. Alla filer och kataloger Àr ordnade i ett stort trÀd med rot i "/". Det kallas ett trÀd eftersom filsystemet ser ut som ett trÀd om man ritar det, men det Àr upp och ner.

Dessa filer och kataloger kan vara utspridda över flera enheter. mount(8) anvÀnds för att koppla filsystemet som finns pÄ en enhet till det stora filtrÀdet. OmvÀnt kopplar umount(8) loss det igen. PÄ de senaste Linux-kÀrnorna kan mount(8) med vissa alternativ binda en del av ett filtrÀd nÄgon annanstans eller montera filsystemet som delat, privat, slav eller obindbart. Vilka monteringsalternativ som stöds för varje filsystem finns i "/usr/share/doc/linux-doc-*/Documentation/filesystems/".

Kataloger i Unix-system kallas mappar i vissa andra system. Observera ocksÄ att det inte finns nÄgot begrepp för enhet som "A:" pÄ nÄgot Unix-system. Det finns ett filsystem och allt Àr inkluderat. Detta Àr en enorm fördel jÀmfört med Windows.

HÀr följer nÄgra grunderna för Unix-filer.

[Notera] Notera

Även om du kan anvĂ€nda nĂ€stan vilka bokstĂ€ver eller symboler som helst i ett filnamn Ă€r det i praktiken en dĂ„lig idĂ© att göra det. Det Ă€r bĂ€ttre att undvika tecken som ofta har speciella betydelser pĂ„ kommandoraden, t.ex. mellanslag, tabbar, nya rader och andra specialtecken: { } ( ) [ ] ' ` " \ / > < | ; ! # & ^ * % @ $ Om du vill separera ord i ett namn Ă€r punkt, bindestreck och understreck bra val. Du kan ocksĂ„ skriva varje ord med stor bokstav, "LikeThis". Erfarna Linux-anvĂ€ndare brukar undvika mellanslag i filnamn.

[Notera] Notera

Ordet "root" kan betyda antingen "root user" eller "root directory". Det bör framgÄ av sammanhanget dÀr de anvÀnds.

[Notera] Notera

Ordet path anvÀnds inte bara för fullt kvalificerade filnamn enligt ovan utan Àven för kommandots sökvÀg. Den avsedda betydelsen framgÄr vanligtvis tydligt av sammanhanget.

Detaljerad bÀsta praxis för filhierarkin beskrivs i Filesystem Hierarchy Standard ( "/usr/share/doc/debian-policy/fhs/fhs-2.3.txt.gz" och hier(7)). Du bör komma ihÄg följande fakta som start.


I enlighet med Unix-traditionen tillhandahÄller Debian GNU/Linux-systemet det filsystem under vilket fysiska data pÄ hÄrddiskar och andra lagringsenheter finns, och interaktionen med hÄrdvaruenheter som konsolskÀrmar och seriella fjÀrrkonsoler representeras pÄ ett enhetligt sÀtt under "/dev/".

Varje fil, katalog, named pipe (ett sÀtt för tvÄ program att dela data) eller fysisk enhet pÄ ett Debian GNU/Linux-system har en datastruktur som kallas inode som beskriver dess associerade attribut, t.ex. anvÀndaren som Àger den (owner), gruppen som den tillhör, tidpunkten för senaste Ätkomst osv. Idén att representera nÀstan allt i filsystemet var en Unix-innovation, och moderna Linux-kÀrnor har utvecklat denna idé Ànnu mer. Nu kan till och med information om processer som körs i datorn hittas i filsystemet.

Denna abstrakta och enhetliga representation av fysiska enheter och interna processer Àr mycket kraftfull eftersom den gör det möjligt för oss att anvÀnda samma kommando för samma typ av operation pÄ mÄnga helt olika enheter. Det Àr till och med möjligt att Àndra hur kÀrnan fungerar genom att skriva data till speciella filer som Àr kopplade till pÄgÄende processer.

[Tips] Tips

Om du behöver identifiera korrespondensen mellan filtrÀdet och den fysiska enheten, kör mount(8) utan argument.

Filsystembehörigheter för Unix-liknande system definieras för tre kategorier av berörda anvÀndare.

  • AnvĂ€ndaren som Ă€ger filen(u)

  • Andra anvĂ€ndare i den grupp som filen tillhör(g)

  • Alla andra anvĂ€ndare(o) Ă€ven kallad "vĂ€rlden" och "alla"

För filen tillÄter varje motsvarande behörighet följande ÄtgÀrder.

  • Behörigheten read(r) ger Ă€garen rĂ€tt att undersöka innehĂ„llet i filen.

  • SkrivrĂ€ttigheten(w) ger Ă€garen rĂ€tt att Ă€ndra filen.

  • Behörigheten execute(x) ger Ă€garen rĂ€tt att köra filen som ett kommando.

För katalogen tillÄter varje motsvarande behörighet följande ÄtgÀrder.

  • Behörigheten read(r) tillĂ„ter Ă€garen att lista innehĂ„llet i katalogen.

  • SkrivrĂ€ttigheten(w) ger Ă€garen rĂ€tt att lĂ€gga till eller ta bort filer i katalogen.

  • Behörigheten execute(x) ger Ă€garen Ă„tkomst till filer i katalogen.

HÀr innebÀr exekveringsbehörigheten för en katalog inte bara att man fÄr lÀsa filer i katalogen utan ocksÄ att man fÄr visa deras attribut, t.ex. storlek och Àndringstid.

ls(1) anvÀnds för att visa behörighetsinformation (med mera) för filer och kataloger. NÀr den anropas med alternativet "-l" visas följande information i den ordning som anges.

  • Typ av fil (första tecknet)

  • Åtkomstbehörighet för filen (nio tecken, bestĂ„ende av tre tecken vardera för anvĂ€ndare, grupp och annan i denna ordning)

  • Antal hĂ„rda lĂ€nkar till filen

  • Namnet pĂ„ den anvĂ€ndare som Ă€ger filen

  • Namnet pĂ„ den grupp som filen tillhör

  • Filens storlek i tecken (bytes)

  • Datum och tid för filen (mtime)

  • Filens namn


chown(1) anvÀnds frÄn rotkontot för att Àndra filens Àgare. chgrp(1) anvÀnds frÄn filens Àgare eller rotkontot för att Àndra filens grupp. chmod(1) anvÀnds frÄn filens Àgare eller rotkontot för att Àndra fil- och katalogÄtkomstbehörigheter. GrundlÀggande syntax för att manipulera en foo-fil Àr följande.

# chown newowner foo
# chgrp newgroup foo
# chmod  [ugoa][+-=][rwxXst][,...] foo

Du kan t.ex. skapa ett katalogtrÀd som Àgs av anvÀndaren foo och delas av gruppen bar pÄ följande sÀtt.

# cd /some/location/
# chown -R foo:bar .
# chmod -R ug+rwX,o=rX .

Det finns ytterligare tre speciella behörighetsbitar.

  • Den instĂ€llda anvĂ€ndar-ID-biten(s eller S istĂ€llet för anvĂ€ndarens x)

  • Den instĂ€llda grupp-ID-biten(s eller S istĂ€llet för gruppens x)

  • Den kladdiga biten(t eller T istĂ€llet för andras x)

HÀr skrivs utdata frÄn "ls -l" för dessa bitar med stor bokstav om exekveringsbitar som döljs av dessa utdata Àr avaktiverade.

Om du anger set user ID för en körbar fil kan en anvÀndare köra den körbara filen med filens Àgar-ID (t.ex. root). PÄ samma sÀtt gör instÀllningen set group ID för en körbar fil att en anvÀndare kan köra den körbara filen med filens grupp-ID (t.ex. root). Eftersom dessa instÀllningar kan medföra sÀkerhetsrisker bör du vara extra försiktig nÀr du aktiverar dem.

Om du anger set group ID för en katalog kan du anvÀnda BSD-liknande filskapande dÀr alla filer som skapas i katalogen tillhör katalogens grupp.

Genom att stĂ€lla in sticky bit pĂ„ en katalog förhindras att en fil i katalogen tas bort av en anvĂ€ndare som inte Ă€r Ă€gare till filen. För att sĂ€kra innehĂ„llet i en fil i kataloger som kan skrivas av alla, sĂ„som ”/tmp”, eller i kataloger som kan skrivas av gruppen, mĂ„ste man inte bara Ă„terstĂ€lla skriv-behörigheten för filen utan ocksĂ„ stĂ€lla in sticky bit pĂ„ katalogen. Annars kan filen tas bort och en ny fil med samma namn skapas av vilken anvĂ€ndare som helst som har skrivbehörighet till katalogen.

HÀr Àr nÄgra intressanta exempel pÄ filbehörigheter.

$ ls -l /etc/passwd /etc/shadow /dev/ppp /usr/sbin/exim4
crw------T 1 root root   108, 0 Oct 16 20:57 /dev/ppp
-rw-r--r-- 1 root root     2761 Aug 30 10:38 /etc/passwd
-rw-r----- 1 root shadow   1695 Aug 30 10:38 /etc/shadow
-rwsr-xr-x 1 root root   973824 Sep 23 20:04 /usr/sbin/exim4
$ ls -ld /tmp /var/tmp /usr/local /var/mail /usr/src
drwxrwxrwt 14 root root  20480 Oct 16 21:25 /tmp
drwxrwsr-x 10 root staff  4096 Sep 29 22:50 /usr/local
drwxr-xr-x 10 root root   4096 Oct 11 00:28 /usr/src
drwxrwsr-x  2 root mail   4096 Oct 15 21:40 /var/mail
drwxrwxrwt  3 root root   4096 Oct 16 21:20 /var/tmp

Det finns ett alternativt numeriskt lÀge för att beskriva filbehörigheter med chmod(1). Detta numeriska lÀge anvÀnder 3- till 4-siffriga breda oktala (radix=8) tal.


Det hÀr lÄter komplicerat men Àr faktiskt ganska enkelt. Om du tittar pÄ de första kolumnerna (2-10) i kommandoutmatningen frÄn "ls -l" och lÀser dem som en binÀr (radix=2) representation av filbehörigheter ("-" Àr "0" och "rwx" Àr "1"), bör de sista 3 siffrorna i det numeriska lÀgesvÀrdet vara begripliga som en oktal (radix=8) representation av filbehörigheter för dig.

Försök till exempel med följande

$ touch foo bar
$ chmod u=rw,go=r foo
$ chmod 644 bar
$ ls -l foo bar
-rw-r--r-- 1 penguin penguin 0 Oct 16 21:39 bar
-rw-r--r-- 1 penguin penguin 0 Oct 16 21:35 foo
[Tips] Tips

Om du behöver komma Ät information som visas av "ls -l" i ett skalskript, bör du anvÀnda relevanta kommandon som test(1), stat(1) och readlink(1). Skalets inbyggda kommandon som "[" eller "test" kan ocksÄ anvÀndas.

[Varning] Varning

Se till att spara osparade Àndringar innan du startar om eller gör liknande ÄtgÀrder.

Du kan lÀgga till en anvÀndarpingvin till en gruppfÄgel i tvÄ steg:

  • Ändra gruppkonfigurationen med hjĂ€lp av nĂ„got av följande:

    • Kör "sudo usermod -aG bird penguin".

    • Utför "sudo adduser penguin bird". (endast pĂ„ typiska Debian-system)

    • Kör "sudo vigr" för /etc/group och "sudo vigr -s" för /etc/gshadow för att lĂ€gga till penguin i raden för bird.

  • TillĂ€mpa konfigurationen med hjĂ€lp av nĂ„got av följande:

    • Kall omstart och inloggning. (BĂ€sta alternativet)

    • Logout via GUI menu and login. (This may not work under the modern Desktop environment.)

Du kan ta bort en anvÀndarpingvin frÄn en gruppfÄgel i tvÄ steg:

  • Ändra gruppkonfigurationen med hjĂ€lp av nĂ„got av följande:

    • Kör "sudo usermod -rG bird penguin".

    • Utför "sudo deluser penguin bird". (endast pĂ„ typiska Debian-system)

    • Kör "sudo vigr" för /etc/group och "sudo vigr -s" för /etc/gshadow för att ta bort penguin i raden för bird.

  • TillĂ€mpa konfigurationen med hjĂ€lp av nĂ„got av följande:

    • Kall omstart och inloggning. (BĂ€sta alternativet)

    • Kör "kill -TERM -1" och gör nĂ„gra korrigeringsĂ„tgĂ€rder, t.ex. "systemctl restart NetworkManager.service".

    • Logga ut via GUI-menyn Ă€r inte ett alternativ för Gnome Desktop.

Alla försök till varm omstart Àr brÀckliga ersÀttningar för den riktiga kalla omstarten under det moderna skrivbordssystemet.

[Notera] Notera

Alternativt kan du dynamiskt lÀgga till anvÀndare i grupper under autentiseringsprocessen genom att lÀgga till raden "auth optional pam_group.so" i "/etc/pam.d/common-auth" och stÀlla in "/etc/security/group.conf". (Se Kapitel 4, Autentisering och Ätkomstkontroll.)

The hardware devices are just another kind of file on the Debian system. If you have problems accessing devices such as USB flash drive and CD-ROM from a user account, you should make that user a member of the relevant group.

Vissa grupper som tillhandahÄlls av systemet gör det möjligt för medlemmarna att komma Ät vissa filer och enheter utan root-behörighet.


[Tips] Tips

Du mÄste tillhöra dialout-gruppen för att konfigurera om modemet, ringa upp var som helst osv. Men om root skapar fördefinierade konfigurationsfiler för betrodda peers i "/etc/ppp/peers/" behöver du bara tillhöra dip-gruppen för att skapa en uppringd IP-anslutning till dessa betrodda peers med kommandona pppd(8), pon(1) och poff(1).

Vissa grupper som tillhandahÄlls av systemet gör det möjligt för medlemmarna att utföra vissa kommandon utan root-behörighet.


En fullstÀndig lista över anvÀndare och grupper som tillhandahÄlls av systemet finns i den senaste versionen av dokumentet "AnvÀndar och grupper" i "/usr/share/doc/base-passwd/users-and-groups.html" som tillhandahÄlls av paketet base-passwd.

Se passwd(5), group(5), shadow(5), newgrp(1), vipw(8), vigr(8) och pam_group(8) för kommandon för hantering av anvÀndar- och gruppsystemet.

Det finns tre typer av tidsstÀmplar för en GNU/Linux-fil.


[Notera] Notera

ctime Àr inte filens skapelsetid.

[Notera] Notera

Det faktiska vÀrdet pÄ atime i GNU/Linux-system kan skilja sig frÄn det i den historiska Unix-definitionen.

  • Om du skriver över en fil Ă€ndras alla attribut mtime, ctime och atime för filen.

  • Om du Ă€ndrar Ă€garskap eller behörighet för en fil Ă€ndras filens attribut ctime och atime.

  • NĂ€r du lĂ€ser en fil Ă€ndras filens atime-attribut i det historiska Unix-systemet.

  • LĂ€sning av en fil Ă€ndrar atime-attributet för filen pĂ„ GNU/Linux-systemet om dess filsystem Ă€r monterat med "strictatime".

  • Om du lĂ€ser en fil för första gĂ„ngen eller efter en dag Ă€ndras filens atime-attribut pĂ„ GNU/Linux-systemet om filsystemet Ă€r monterat med "relatime". (standardbeteende sedan Linux 2.6.30)

  • LĂ€sning av en fil Ă€ndrar inte atime-attributet för filen pĂ„ GNU/Linux-systemet om filsystemet Ă€r monterat med "noatime".

[Notera] Notera

Monteringsalternativen "noatime" och "relatime" införs för att förbÀttra filsystemets lÀsprestanda i normala anvÀndningsfall. Enkel fillÀsning med alternativet "strictatime" Ätföljs av en tidskrÀvande skrivoperation för att uppdatera atime-attributet. Men atime-attributet anvÀnds sÀllan förutom för filen mbox(5). Se mount(8).

AnvÀnd kommandot touch(1) för att Àndra tidsstÀmplar för befintliga filer.

För tidsstÀmplar skriver kommandot ls ut lokaliserade strÀngar under icke-engelsk locale ( "fr_FR.UTF-8").

$ LANG=C  ls -l foo
-rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo
$ LANG=en_US.UTF-8  ls -l foo
-rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo
$ LANG=fr_FR.UTF-8  ls -l foo
-rw-rw-r-- 1 penguin penguin 0 oct. 16 21:35 foo
[Tips] Tips

Se Avsnitt 9.3.4, ”Anpassad visning av tid och datum” för att anpassa utdata frĂ„n "ls -l".

Det finns tvÄ metoder för att associera en fil "foo" med ett annat filnamn "bar".

Se följande exempel för förÀndringar i lÀnkantal och de subtila skillnaderna i resultatet av kommandot rm.

$ umask 002
$ echo "Original Content" > foo
$ ls -li foo
1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 foo
$ ln foo bar     # hard link
$ ln -s foo baz  # symlink
$ ls -li foo bar baz
1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 bar
1450180 lrwxrwxrwx 1 penguin penguin  3 Oct 16 21:47 baz -> foo
1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 foo
$ rm foo
$ echo "New Content" > foo
$ ls -li foo bar baz
1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 bar
1450180 lrwxrwxrwx 1 penguin penguin  3 Oct 16 21:47 baz -> foo
1450183 -rw-rw-r-- 1 penguin penguin 12 Oct 16 21:48 foo
$ cat bar
Original Content
$ cat baz
New Content

Den hÄrda lÀnken kan göras inom samma filsystem och delar samma inodnummer som alternativet "-i" med ls(1) avslöjar.

SymlÀnken har alltid den nominella filÄtkomstbehörigheten "rwxrwxrwx", som visas i exemplet ovan, medan den faktiska Ätkomstbehörigheten bestÀms av behörigheten för den fil som den pekar pÄ.

[Observera] Observera

Det Àr i allmÀnhet en bra idé att inte skapa komplicerade symboliska lÀnkar eller hÄrda lÀnkar alls om du inte har en mycket god anledning. Det kan orsaka mardrömmar dÀr den logiska kombinationen av de symboliska lÀnkarna resulterar i loopar i filsystemet.

[Notera] Notera

Det Àr i allmÀnhet att föredra att anvÀnda symboliska lÀnkar framför hÄrda lÀnkar, sÄvida du inte har ett gott skÀl att anvÀnda en hÄrd lÀnk.

Katalogen "..." lÀnkar till den katalog den finns i, vilket innebÀr att lÀnkantalet för en ny katalog börjar pÄ 2. Katalogen "..." lÀnkar till den överordnade katalogen, vilket innebÀr att katalogens lÀnkantal ökar nÀr nya underkataloger lÀggs till.

Om du precis har gÄtt över till Linux frÄn Windows blir det snart tydligt hur vÀl utformad Unix filnamnslÀnkning Àr, jÀmfört med Windows nÀrmaste motsvarighet till "genvÀgar". Eftersom det Àr implementerat i filsystemet kan applikationer inte se nÄgon skillnad mellan en lÀnkad fil och originalet. NÀr det gÀller hÄrda lÀnkar Àr det verkligen ingen skillnad.

En named pipe Àr en fil som fungerar som ett rör. Du lÀgger in nÄgot i filen och det kommer ut i andra Ànden. DÀrför kallas det FIFO, eller First-In-First-Out: det första du stoppar in i röret Àr det första som kommer ut i andra Ànden.

Om du skriver till en namngiven pipe avslutas inte den process som skriver till pipen förrÀn den information som skrivs har lÀsts frÄn pipen. Om du lÀser frÄn en namngiven pipe vÀntar lÀsprocessen tills det inte finns nÄgot att lÀsa innan den avslutas. Storleken pÄ pipen Àr alltid noll --- den lagrar inte data, den lÀnkar bara samman tvÄ processer pÄ samma sÀtt som skalets "|"-syntax. Men eftersom pipen har ett namn behöver de tvÄ processerna inte finnas pÄ samma kommandorad eller ens köras av samma anvÀndare. Pipes var en mycket inflytelserik innovation inom Unix.

Försök till exempel med följande

$ cd; mkfifo mypipe
$ echo "hello" >mypipe & # put into background
[1] 8022
$ ls -l mypipe
prw-rw-r-- 1 penguin penguin 0 Oct 16 21:49 mypipe
$ cat mypipe
hello
[1]+  Done                    echo "hello" >mypipe
$ ls mypipe
mypipe
$ rm mypipe

Enhetsfiler hÀnvisar till fysiska eller virtuella enheter i systemet, t.ex. hÄrddisk, grafikkort, skÀrm eller tangentbord. Ett exempel pÄ en virtuell enhet Àr konsolen, som representeras av "/dev/console".

Det finns 2 typer av enhetsfiler.

  • Teckenenhet

    • Åtkomst till ett tecken i taget

    • 1 tecken = 1 byte

    • T.ex. tangentbordsenhet, serieport, 


  • Blockenhet

    • nĂ„s i större enheter som kallas block

    • 1 block > 1 byte

    • T.ex. hĂ„rddisk, 


Du kan lÀsa och skriva enhetsfiler, Àven om filen mycket vÀl kan innehÄlla binÀr data som kan vara en obegriplig rappakalja för mÀnniskor. Att skriva data direkt till dessa filer Àr ibland anvÀndbart för felsökning av maskinvaruanslutningar. Du kan t.ex. dumpa en textfil till skrivarenheten "/dev/lp0" eller skicka modemkommandon till lÀmplig serieport "/dev/ttyS0". Men om detta inte görs noggrant kan det orsaka en stor katastrof. SÄ var försiktig.

[Notera] Notera

För normal Ätkomst till en skrivare anvÀnder du lp(1).

Enhetens nodnummer visas genom att köra ls(1) pÄ följande sÀtt.

$ ls -l /dev/sda /dev/sr0 /dev/ttyS0 /dev/zero
brw-rw---T  1 root disk     8,  0 Oct 16 20:57 /dev/sda
brw-rw---T+ 1 root cdrom   11,  0 Oct 16 21:53 /dev/sr0
crw-rw---T  1 root dialout  4, 64 Oct 16 20:57 /dev/ttyS0
crw-rw-rw-  1 root root     1,  5 Oct 16 20:57 /dev/zero
  • "/dev/sda" har det större enhetsnumret 8 och det mindre enhetsnumret 0. Detta Ă€r lĂ€s-/skrivĂ„tkomligt för anvĂ€ndare som tillhör diskgruppen.

  • "/dev/sr0" har det stora enhetsnumret 11 och det lilla enhetsnumret 0. Den Ă€r lĂ€s/skriv-Ă„tkomlig för anvĂ€ndare som tillhör cdrom-gruppen.

  • "/dev/ttyS0" har det större enhetsnumret 4 och det mindre enhetsnumret 64. Detta Ă€r lĂ€s-/skrivĂ„tkomligt för anvĂ€ndare som tillhör dialout-gruppen.

  • "/dev/zero" har det större enhetsnumret 1 och det mindre enhetsnumret 5. Detta Ă€r lĂ€s-/skrivĂ„tkomligt för alla.

PĂ„ ett modernt Linux-system fylls filsystemet under "/dev/" automatiskt av udev(7)-mekanismen.

Procfs och sysfs som Àr monterade pÄ "/proc" och "/sys" Àr pseudofilsystem och exponerar interna datastrukturer i kÀrnan för anvÀndarutrymmet. Med andra ord Àr dessa poster virtuella, vilket innebÀr att de fungerar som ett bekvÀmt fönster in i operativsystemets funktion.

Katalogen "/proc" innehÄller (bland annat) en underkatalog för varje process som körs i systemet och som har fÄtt sitt namn efter process-ID (PID). Systemverktyg som hÀmtar information om processer, t.ex. ps(1), hÀmtar sin information frÄn denna katalogstruktur.

Katalogerna under "/proc/sys/" innehÄller grÀnssnitt för att Àndra vissa kÀrnparametrar under körning. (Du kan göra samma sak genom det specialiserade sysctl(8)-kommandot eller dess förladdnings-/konfigurationsfil "/etc/sysctl.d/*.conf")

MÄnga fÄr panik nÀr de upptÀcker en fil - "/proc/kcore" - som i allmÀnhet Àr enorm. Det hÀr Àr (mer eller mindre) en kopia av innehÄllet i datorns minne. Den anvÀnds för att felsöka kÀrnan. Det Àr en virtuell fil som pekar pÄ datorminnet, sÄ oroa dig inte för dess storlek.

Katalogen under "/sys" innehÄller exporterade datastrukturer för kÀrnan, deras attribut och lÀnkarna mellan dem. Den innehÄller ocksÄ grÀnssnitt för att Àndra vissa kÀrnparametrar under körning.

Se "proc.txt(.gz)", "sysfs.txt(.gz)" och andra relaterade dokument i dokumentationen för Linux-kÀrnan ("/usr/share/doc/linux-doc-*/Documentation/filesystems/*") som tillhandahÄlls av paketet linux-doc-*.

Tmpfs Àr ett temporÀrt filsystem som förvarar alla filer i det virtuella minnet. Data frÄn tmpfs i sidcachen i minnet kan vid behov swappas ut till swaputrymmet pÄ disken.

Katalogen "/run" monteras som tmpfs i den tidiga uppstartsprocessen. Detta gör det möjligt att skriva till den Àven nÀr katalogen "/" Àr monterad som skrivskyddad. Detta Àr den nya platsen för lagring av transienta tillstÄndsfiler och ersÀtter flera platser som beskrivs i Filesystem Hierarchy Standard version 2.3:

  • "/var/run" → "/run"

  • "/var/lock" → "/run/lock"

  • "/dev/shm" → "/run/shm"

Se "tmpfs.txt(.gz)" i dokumentationen för Linux-kÀrnan ( "/usr/share/doc/linux-doc-*/Documentation/filesystems/*") som tillhandahÄlls av paketet linux-doc-*.

Midnight Commander (MC) Àr en "schweizisk armékniv" frÄn GNU för Linux-konsolen och andra terminalmiljöer. Detta ger nybörjare en menystyrd konsolupplevelse som Àr mycket lÀttare att lÀra sig Àn standard Unix-kommandon.

Du kan behöva installera Midnight Commander-paketet som heter "mc" enligt följande.

$ sudo apt-get install mc

AnvÀnd kommandot mc(1) för att utforska Debian-systemet. Detta Àr det bÀsta sÀttet att lÀra sig. Utforska nÄgra intressanta platser bara med hjÀlp av markörknapparna och Enter-tangenten.

  • "/etc" och dess underkataloger

  • "/var/log" och dess underkataloger

  • "/usr/share/doc" och dess underkataloger

  • "/usr/sbin" och "/usr/bin"

Den interna editorn har ett intressant klipp-och-klistra-system. Genom att trycka pÄ F3 markeras början av ett urval, ett andra F3 markerar slutet av urvalet och markerar urvalet. Sedan kan du flytta markören. Om du trycker pÄ F6 flyttas det markerade omrÄdet till markörens plats. Om du trycker pÄ F5 kopieras det markerade omrÄdet och infogas pÄ markörens plats. F2 sparar filen. F10 tar dig ut ur programmet. De flesta markörknappar fungerar intuitivt.

Denna editor kan startas direkt pÄ en fil med hjÀlp av nÄgot av följande kommandon.

$ mc -e filename_to_edit
$ mcedit filename_to_edit

Detta Ă€r inte en editor för flera fönster, men man kan anvĂ€nda flera Linux-konsoler för att uppnĂ„ samma effekt. För att kopiera mellan fönster anvĂ€nder du Alt-Fn-tangenterna för att vĂ€xla mellan virtuella konsoler och anvĂ€nder "File→Insert file" eller "File→Copy to file" för att flytta en del av en fil till en annan fil.

Denna interna editor kan ersÀttas med valfri extern editor.

MÄnga program anvÀnder ocksÄ miljövariablerna "$EDITOR" eller "$VISUAL" för att bestÀmma vilken editor som ska anvÀndas. Om du inte kÀnner dig bekvÀm med vim(1) eller nano(1) frÄn början kan du stÀlla in dessa till "mcedit" genom att lÀgga till följande rader i "~/.bashrc".

export EDITOR=mcedit
export VISUAL=mcedit

Jag rekommenderar att du stÀller in dessa pÄ "vim" om möjligt.

Om du inte kÀnner dig bekvÀm med vim(1) kan du fortsÀtta att anvÀnda mcedit(1) för de flesta systemunderhÄllsuppgifter.

Även om du kan göra nĂ€stan allt med MC Ă€r det mycket viktigt att du lĂ€r dig att anvĂ€nda kommandoradsverktygen frĂ„n skalprompten och blir bekant med den Unix-liknande arbetsmiljön.

Eftersom inloggningsskalet kan anvÀndas av vissa systeminitialiseringsprogram Àr det klokt att behÄlla det som bash(1) och undvika att byta inloggningsskal med chsh(1).

Om du vill anvÀnda en annan interaktiv shell-prompt kan du stÀlla in den i GUI-terminalemulatorns konfiguration eller starta den frÄn ~/.bashrc, t.ex. genom att placera "exec /usr/bin/zsh -i -l" eller "exec /usr/bin/fish -i -l" i den.


[Tips] Tips

Även om POSIX-liknande skal delar den grundlĂ€ggande syntaxen kan de skilja sig Ă„t i beteendet för sĂ„ grundlĂ€ggande saker som skalvariabler och glob-expansioner. Kontrollera deras dokumentation för detaljer.

I det hÀr handledningskapitlet betyder det interaktiva skalet alltid bash.

Musoperationer för text pÄ Debian-system blandar 2 stilar med nÄgra vÀndningar:

  • Traditionella musoperationer i Unix-stil:

    • anvĂ€nd 3 knappar (klicka)

    • anvĂ€nd PRIMARY

    • anvĂ€nds av X-program som xterm och textprogram i Linux-konsolen

  • Moderna musoperationer i GUI-stil:

    • anvĂ€nd 2 knappar (dra + klicka)

    • anvĂ€nda PRIMARY och CLIPBOARD

    • anvĂ€nds i moderna GUI-program som gnome-terminal


HĂ€r Ă€r det PRIMÄRA valet det markerade textomrĂ„det. I terminalprogrammet anvĂ€nds istĂ€llet Shift-Ctrl-C för att undvika att avsluta ett pĂ„gĂ„ende program.

Det mellersta hjulet pÄ en modern hjulmus betraktas som den mellersta musknappen och kan anvÀndas för mittklick. Om du klickar pÄ vÀnster och höger musknapp tillsammans fungerar det som ett mittklick i ett mussystem med 2 knappar.

För att kunna anvÀnda en mus i Linux teckenkonsoler mÄste du ha gpm(8) igÄng som daemon.

Du bör bli skicklig i en av varianterna av Vim- eller Emacs-programmen som Àr populÀra i det Unix-liknande systemet.

Jag tror att det Àr rÀtt att vÀnja sig vid Vim-kommandon, eftersom Vi-editor alltid finns dÀr i Linux/Unix-vÀrlden. (Egentligen Àr original vi eller nya nvi program som du hittar överallt. Jag valde Vim istÀllet för nybörjare eftersom det erbjuder dig hjÀlp via F1-tangenten medan det Àr tillrÀckligt liknande och kraftfullare.)

Om du valde antingen Emacs eller XEmacs istÀllet som ditt val av redigerare Àr det ett annat bra val, sÀrskilt för programmering. Emacs har en uppsjö av andra funktioner ocksÄ, inklusive att fungera som en nyhetslÀsare, katalogredigerare, e-postprogram etc. NÀr det anvÀnds för programmering eller redigering av skalskript kÀnner det pÄ ett intelligent sÀtt igen formatet pÄ det du arbetar med och försöker ge hjÀlp. En del mÀnniskor hÀvdar att det enda program de behöver pÄ Linux Àr Emacs. Tio minuters inlÀrning av Emacs nu kan spara timmar senare. Att ha GNU Emacs-manualen som referens nÀr du lÀr dig Emacs rekommenderas starkt.

Alla dessa program levereras vanligtvis med handledningsprogram sÄ att du kan lÀra dig dem genom övning. Starta Vim genom att skriva "vim" och tryck pÄ F1-tangenten. Du bör Ätminstone lÀsa de första 35 raderna. Gör sedan online-utbildningskursen genom att flytta markören till "|tutor|" och trycka pÄ Ctrl-].

[Notera] Notera

Bra editorer, som Vim och Emacs, kan hantera UTF-8 och andra exotiska kodningstexter korrekt. Det Àr en god idé att anvÀnda GUI-miljön i UTF-8-lokalen och att installera nödvÀndiga program och teckensnitt i den. Redigerare har alternativ för att stÀlla in filkodningen oberoende av GUI-miljön. Se deras dokumentation om multibyte-text.

Den nya vim(1) startar sig sjÀlv med det sunda alternativet "nocompatible" och gÄr in i NORMAL-lÀget.[1]


AnvÀnd programmet "vimtutor" för att lÀra dig vim genom en interaktiv handledningskurs.

Programmet vim Ă€ndrar sitt beteende för inmatade tangenttryckningar baserat pĂ„ lĂ€ge. Att skriva in tangenttryckningar till bufferten görs mest i INFOGNING-lĂ€ge och ERSÄTT-lĂ€ge. Flyttning av markören görs mestadels i NORMAL-lĂ€ge. Interaktiva val görs i VISUELLT-lĂ€ge. Om du skriver ":" i NORMAL-lĂ€ge Ă€ndras lĂ€get till Ex-lĂ€get. Ex-lĂ€get accepterar kommandon.

[Tips] Tips

Vim levereras med Netrw-paketet. Netrw stöder lÀsning av filer, skrivning av filer, blÀddring i kataloger över ett nÀtverk och lokal blÀddring! Prova Netrw med "vim ." (en punkt som argument) och lÀs dess manual pÄ ":help netrw".

För avancerad konfiguration av vim, se Avsnitt 9.2, ”Anpassa vim”.

LÄt oss lÀra oss grundlÀggande Unix-kommandon. HÀr anvÀnder jag "Unix" i dess generiska betydelse. Alla Unix-klonade operativsystem erbjuder vanligtvis motsvarande kommandon. Debian-systemet Àr inget undantag. Oroa dig inte om vissa kommandon inte fungerar som du önskar nu. Om alias anvÀnds i skalet Àr motsvarande kommandoutgÄngar annorlunda. De hÀr exemplen Àr inte avsedda att utföras i den hÀr ordningen.

Prova alla följande kommandon frÄn det icke-privilegierade anvÀndarkontot.

Tabell 1.17. Lista över grundlÀggande Unix-kommandon

kommando beskrivning
pwd visningsnamn för aktuell katalog/arbetskatalog
whoami visa aktuellt anvÀndarnamn
id visa aktuell anvÀndaridentitet (namn, uid, gid och tillhörande grupper)
file foo visa en filtyp för filen "foo"
type -p commandname visa en filplats för kommandot "kommandonamn"
which commandname , ,
type commandname visa information om kommandot "kommandonamn"
apropos nyckelord hitta kommandon relaterade till "nyckelord"
man -k nyckelord , ,
whatis kommandonamn visa en förklaring pÄ en rad för kommandot "kommandonamn"
man -a commandname visa förklaring till kommandot "kommandonamn" (Unix-stil)
info kommandonamn visa en ganska lÄng förklaring pÄ kommandot "kommandonamn" (GNU-stil)
ls lista innehÄllet i en katalog (icke-dot-filer och kataloger)
ls -a lista innehÄllet i en katalog (alla filer och kataloger)
ls -A lista innehÄllet i en katalog (nÀstan alla filer och kataloger, d.v.s. hoppa över "..." och ".")
ls -la lista allt innehÄll i katalogen med detaljerad information
ls -lai lista allt innehÄll i katalogen med inode-nummer och detaljerad information
ls -d lista alla kataloger under den aktuella katalogen
tree visa innehÄllet i filtrÀdet
lsof foo lista öppen status för filen "foo"
lsof -p pid lista över filer som öppnats av process-ID: "pid"
mkdir foo skapa en ny katalog "foo" i den aktuella katalogen
rmdir foo ta bort en katalog "foo" i den aktuella katalogen
cd foo Àndra katalog till katalogen "foo" i den aktuella katalogen eller i den katalog som anges i variabeln "$CDPATH"
cd / Àndra katalog till rotkatalogen
cd Àndra katalog till den aktuella anvÀndarens hemkatalog
cd /foo Àndra katalog till den absoluta sökvÀgen katalog "/foo"
cd .. Àndra katalog till den överordnade katalogen
cd ~foo Àndra katalog till hemkatalogen för anvÀndaren "foo"
cd - Àndra katalog till föregÄende katalog
</etc/motd pager visa innehÄllet i "/etc/motd" med hjÀlp av standard personsökaren
touch junkfile skapa en tom fil "skrÀpfil"
cp foo bar kopiera en befintlig fil "foo" till en ny fil "bar"
rm skrÀpfil ta bort en fil "skrÀpfil"
mv foo bar byta namn pÄ en befintlig fil "foo" till ett nytt namn "bar" ("bar" fÄr inte existera)
mv foo bar flytta en befintlig fil "foo" till en ny plats"bar/foo" (katalogen "bar" mÄste existera)
mv foo bar/baz flytta en befintlig fil "foo" till en ny plats med det nya namnet "bar/baz" (katalogen "bar" mÄste finnas men katalogen "bar/baz" fÄr inte finnas)
chmod 600 foo gör en befintlig fil "foo" till att vara icke-lÀsbar och icke-skrivbar av de andra personerna (icke-exekverbar för alla)
chmod 644 foo gör en befintlig fil "foo" sÄ att den blir lÀsbar men inte skrivbar för andra personer (ej exekverbar för alla)
chmod 755 foo gör en befintlig fil "foo" sÄ att den blir lÀsbar men inte skrivbar av andra personer (körbar för alla)
find . -name pattern hitta matchande filnamn med hjÀlp av shell "mönster" (lÄngsammare)
locate -d . pattern hitta matchande filnamn med hjÀlp av shell "mönster" (snabbare med hjÀlp av regelbundet genererad databas)
grep -e "mönster" *.html hitta ett "mönster" i alla filer som slutar med ".html" i den aktuella katalogen och visa dem alla
top visa processinformation i helskÀrm, skriv "q" för att avsluta
ps aux | pager visa information om alla processer som körs med BSD-stil
ps -ef | pager visa information om alla processer som körs med hjÀlp av Unix system-V-stil
ps aux | grep -e "[e]xim4*" visa alla processer som körs "exim" och "exim4"
ps axf | pager visa information om alla processer som körs med ASCII-bildutskrift
kill 1234 döda en process som identifieras av process-ID:"1234"
gzip foo komprimera "foo" för att skapa"foo.gz" med hjÀlp av Lempel-Ziv-kodning (LZ77)
gunzip foo.gz dekomprimera"foo.gz" för att skapa "foo"
bzip2 foo komprimera "foo" för att skapa"foo.bz2" med Burrows-Wheeler blocksorteringsalgoritm för textkomprimering och Huffman-kodning (bÀttre komprimering Àn gzip)
bunzip2 foo.bz2 dekomprimera"foo.bz2" för att skapa "foo"
xz foo komprimera "foo" för att skapa"foo.xz" med hjÀlp av Lempel-Ziv-Markov-kedjealgoritmen (bÀttre komprimering Àn bzip2)
unxz foo.xz dekomprimera"foo.xz" för att skapa "foo"
tar -xvf foo.tar extrahera filer frÄn arkivet"foo.tar"
tar -xvzf foo.tar.gz extrahera filer frÄn gzippat"foo.tar.gz"-arkiv
tar -xvjf foo.tar.bz2 extrahera filer frÄn arkivet"foo.tar.bz2"
tar -xvJf foo.tar.xz extrahera filer frÄn arkivet"foo.tar.xz"
tar -cvf foo.tar bar/ arkivera innehÄllet i mappen"bar/" i arkivet"foo.tar"
tar -cvzf foo.tar.gz bar/ arkivera innehÄllet i mappen"bar/" i det komprimerade arkivet"foo.tar.gz"
tar -cvjf foo.tar.bz2 bar/ arkivera innehÄllet i mappen"bar/" i arkivet"foo.tar.bz2"
tar -cvJf foo.tar.xz bar/ arkivinnehÄllet i mappen"bar/" i arkivet"foo.tar.xz"
zcat README.gz | pager visa innehÄllet i den komprimerade filen "README.gz" med hjÀlp av standardsökaren
zcat README.gz > foo skapa en fil "foo" med det dekomprimerade innehÄllet i "README.gz"
zcat README.gz >> foo lÀgg till det dekomprimerade innehÄllet i "README.gz" i slutet av filen "foo" (om den inte finns, skapa den först)

[Notera] Notera

Unix har en tradition att dölja filnamn som börjar med ".". Det Àr vanligtvis filer som innehÄller konfigurationsinformation och anvÀndarinstÀllningar.

För cd-kommando, se builtins(7).

Standard personsökaren i Debian-systemet med bara ben Àr more(1) som inte kan rulla tillbaka. Genom att installera less-paketet med kommandoraden "apt-get install less", blir less(1) standard personsökare och du kan blÀddra tillbaka med markörknapparna.

"[" och "]" i det reguljĂ€ra uttrycket i kommandot "ps aux | grep -e "[e]xim4*"" ovan gör att grep undviker att matcha sig sjĂ€lv. "4*" i det reguljĂ€ra uttrycket betyder 0 eller fler upprepningar av tecknet "4", vilket gör att grep kan matcha bĂ„de "exim" och "exim4". Även om "*" anvĂ€nds i skalets filnamnsglob och i det reguljĂ€ra uttrycket har de olika betydelser. LĂ€r dig det reguljĂ€ra uttrycket frĂ„n grep(1).

GÄ igenom kataloger och kika in i systemet med hjÀlp av ovanstÄende kommandon som trÀning. Om du har frÄgor om nÄgot av konsolkommandona kan du lÀsa manualsidan.

Försök till exempel med följande

$ man man
$ man bash
$ man builtins
$ man grep
$ man ls

Stilen pÄ man pages kan vara lite svÄr att vÀnja sig vid, eftersom de Àr ganska kortfattade, sÀrskilt de Àldre, mycket traditionella. Men nÀr man vÀl har vant sig kommer man att uppskatta deras kortfattade form.

Observera att mÄnga Unix-liknande kommandon, inklusive de frÄn GNU och BSD, visar kortfattad hjÀlpinformation om du anropar dem pÄ nÄgot av följande sÀtt (eller utan nÄgra argument i vissa fall).

$ commandname --help
$ commandname -h

Nu har du en viss kÀnsla för hur man anvÀnder Debian-systemet. LÄt oss titta djupt in i mekanismen för kommandokörning i Debiansystemet. HÀr har jag förenklat verkligheten för nybörjaren. Se bash(1) för den exakta förklaringen.

Ett enkelt kommando Àr en sekvens av komponenter.

  1. Tilldelning av variabler (valfritt)

  2. Kommando namn

  3. Argument (valfritt)

  4. Omdirigeringar (valfritt: >, >>, <, <<, etc.)

  5. Kontrolloperator (valfritt: && , ||, nyrad, ;, &, (, ) )

VÀrdena pÄ vissa miljövariabler Àndrar beteendet hos vissa Unix-kommandon.

StandardvÀrdena för miljövariablerna faststÀlls initialt av PAM-systemet och sedan kan vissa av dem ÄterstÀllas av vissa tillÀmpningsprogram.

  • PAM-systemet, t.ex. pam_env, kan stĂ€lla in miljövariabler med /etc/pam.conf", "/etc/environment" och "/etc/default/locale".

  • Displayhanteraren, t.ex. gdm3, kan Ă„terstĂ€lla miljövariablerna för GUI-sessionen med "~/.profile".

  • Den anvĂ€ndarspecifika programinitialiseringen kan Ă„terstĂ€lla miljövariabler genom "~/.profile", "~/.bash_profile" och "~/.bashrc".

Standardlokalen definieras i miljövariabeln "$LANG" och konfigureras som "LANG=xx_YY.UTF-8" av installationsprogrammet eller av den efterföljande grafiska grĂ€nssnittskonfigurationen, t.ex. "InstĂ€llningar" → "Region och sprĂ„k" → "SprĂ„k" / "Format" för GNOME.

[Notera] Notera

Jag rekommenderar att du för tillfÀllet bara konfigurerar systemmiljön med variabeln "$LANG" och hÄller dig borta frÄn variablerna "$LC_*" om det inte Àr absolut nödvÀndigt.

Det fullstÀndiga locale-vÀrdet som ges till variabeln "$LANG" bestÄr av 3 delar: "xx_YY.ZZZZ".



Ett typiskt kommando utförs med en skalradsekvens enligt följande.

$ echo $LANG
en_US.UTF-8
$ date -u
Wed 19 May 2021 03:18:43 PM UTC
$ LANG=fr_FR.UTF-8 date -u
mer. 19 mai 2021 15:19:02 UTC

HÀr körs programmet date(1) med olika locale-vÀrden.

De flesta kommandokörningar har vanligtvis inte nÄgon föregÄende miljövariabeldefinition. I exemplet ovan kan du alternativt köra kommandot pÄ följande sÀtt.

$ LANG=fr_FR.UTF-8
$ date -u
mer. 19 mai 2021 15:19:24 UTC
[Tips] Tips

NÀr du lÀmnar in en felrapport Àr det en bra idé att köra och kontrollera kommandot under "en_US.UTF-8"-lokal om du anvÀnder en icke-engelsk miljö.

För mer detaljerad information om locale-konfigurationen, se Avsnitt 8.1, ”Lokalen”.

LÄt oss försöka komma ihÄg följande shell-kommandon som skrivs pÄ en rad som en del av shell-kommandot.

Tabell 1.23. Idiom för Shell-kommandon

kommando idiom beskrivning
command & bakgrundskörning av kommando i underskalet
kommando1 | kommando2 AnvÀnd pipe för standard ut frÄn kommando1 till standard in frÄn kommando2 (samtidig körning)
command1 2>&1 | command2 skicka bÄde standardutdata och standardfel frÄn kommando1 till standardinmatningen för kommando2(samtidig körning)
command1 ; command2 utföra kommando1 och kommando2 sekventiellt
command1 && command2 kör kommando1; om det lyckas, kör kommando2 sekventiellt (returnerar success om bÄde kommando1 och kommando2 lyckas)
command1 || command2 kör kommando1; om det inte lyckas, kör kommando2 sekventiellt (returnerar success om kommando1 eller kommando2 lyckas)
command > foo omdirigera kommandots standardutdata till en fil foo (överskriva)
command 2> foo omdirigera kommandots standardfel till en fil foo (överskriva)
command >> foo omdirigera standardutdata frÄn kommandot till en fil foo (append)
command 2>> foo omdirigera kommandots standardfel till en fil foo (append)
kommando > foo 2>&1 omdirigera bÄde standardutdata och standardfel för kommandot till en fil foo
command < foo omdirigera kommandots standardinmatning till en fil foo
command << delimiter omdirigera kommandots standardinmatning till följande rader tills "delimiter" uppfylls (hÀr dokument)
command <<- delimiter omdirigera kommandots standardinmatning till följande rader tills "delimiter" uppfylls (hÀr dokument, de inledande tabbtecknen tas bort frÄn inmatningsraderna)

Debian-systemet Àr ett multitasking-system. Bakgrundsjobb gör det möjligt för anvÀndare att köra flera program i ett enda skal. Hanteringen av bakgrundsprocessen involverar skalets inbyggda funktioner: jobs, fg, bg och kill. LÀs avsnitten i bash(1) under "SIGNALER" och "JOBBKONTROLL" och builtins(1).

Försök till exempel med följande

$ </etc/motd pager
$ pager </etc/motd
$ pager /etc/motd
$ cat /etc/motd | pager

Även om alla fyra exemplen pĂ„ omdirigeringar av skal visar samma sak, kör det sista exemplet ett extra cat-kommando och slösar resurser utan anledning.

Med skalet kan du öppna filer med hjÀlp av den inbyggda funktionen exec med en godtycklig filbeskrivare.

$ echo Hello >foo
$ exec 3<foo 4>bar  # open files
$ cat <&3 >&4       # redirect stdin to 3, stdout to 4
$ exec 3<&- 4>&-    # close files
$ cat bar
Hello

Filbeskrivarna 0-2 Àr fördefinierade.


I Unix-liknande arbetsmiljöer sker textbearbetningen genom att texten skickas genom kedjor av standardverktyg för textbearbetning. Detta var en annan viktig Unix-innovation.

Det finns ett fÄtal standardverktyg för textbehandling som anvÀnds mycket ofta i Unix-liknande system.

Om du inte Àr sÀker pÄ exakt vad dessa kommandon gör kan du anvÀnda "man command" för att ta reda pÄ det sjÀlv.

[Notera] Notera

Sorteringsordning och intervalluttryck Ă€r lokalberoende. Om du vill att ett kommando ska fungera pĂ„ traditionellt sĂ€tt ska du anvĂ€nda C locale eller C.UTF-8 locale i stĂ€llet för normala UTF-8 locale (se Avsnitt 8.1, ”Lokalen”).

[Notera] Notera

ReguljÀra uttryck i Perl(perlre(1)), Perl Compatible Regular Expressions (PCRE) och reguljÀra uttryck i Python som erbjuds av modulen re har mÄnga gemensamma tillÀgg till den normala ERE.

ReguljÀra uttryck anvÀnds i mÄnga textbehandlingsverktyg. De Àr analoga med shell globs, men de Àr mer komplicerade och kraftfulla.

Det reguljÀra uttrycket beskriver matchningsmönstret och bestÄr av texttecken och metatecken.

Ett metatecken Àr bara ett tecken med en speciell betydelse. Det finns tvÄ huvudstilar, BRE och ERE, beroende pÄ textverktygen enligt beskrivningen ovan.


Det reguljÀra uttrycket för emacs Àr i princip BRE men har utökats till att behandla "+" och "?" som metatecken som i ERE. Det finns alltsÄ inget behov av att undkomma dem med "\" i det reguljÀra uttrycket i emacs.

grep(1) kan anvÀndas för att utföra en textsökning med hjÀlp av ett reguljÀrt uttryck.

Försök till exempel med följande

$ egrep 'GNU.*LICENSE|Yoyodyne' /usr/share/common-licenses/GPL
GNU GENERAL PUBLIC LICENSE
GNU GENERAL PUBLIC LICENSE
Yoyodyne, Inc., hereby disclaims all copyright interest in the program

För ersÀttningsuttrycket har vissa tecken sÀrskilda betydelser.


För ersÀttningsstrÀngar i Perl anvÀnds "$&" i stÀllet för "&" och "$n" i stÀllet för "\n".

Försök till exempel med följande

$ echo zzz1abc2efg3hij4 | \
sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/=&=/'
zzz=1abc2efg3hij4=
$ echo zzz1abc2efg3hij4 | \
sed -E -e 's/(1[a-z]*)[0-9]*(.*)$/=&=/'
zzz=1abc2efg3hij4=
$ echo zzz1abc2efg3hij4 | \
perl -pe 's/(1[a-z]*)[0-9]*(.*)$/=$&=/'
zzz=1abc2efg3hij4=
$ echo zzz1abc2efg3hij4 | \
sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/\2===\1/'
zzzefg3hij4===1abc
$ echo zzz1abc2efg3hij4 | \
sed -E -e 's/(1[a-z]*)[0-9]*(.*)$/\2===\1/'
zzzefg3hij4===1abc
$ echo zzz1abc2efg3hij4 | \
perl -pe 's/(1[a-z]*)[0-9]*(.*)$/$2===$1/'
zzzefg3hij4===1abc

HÀr bör du vara extra uppmÀrksam pÄ stilen för det parentesförsedda reguljÀra uttrycket och hur de matchade strÀngarna anvÀnds i textutbytesprocessen i olika verktyg.

Dessa reguljÀra uttryck kan ocksÄ anvÀndas för markörrörelser och textutbyte i vissa redigeringsverktyg.

Det bakre snedstrecket "\" i slutet av raden i shell-kommandoraden undviker newline som ett tecken för vitt utrymme och fortsÀtter inmatningen i shell-kommandoraden till nÀsta rad.

LÀs alla relaterade manualsidor för att lÀra dig dessa kommandon.

LÄt oss betrakta en textfil som heter "DPL" i vilken nÄgra Debian-projektledares namn frÄn före 2004 och deras startdatum listas i ett mellanslagsseparerat format.

Ian     Murdock   August  1993
Bruce   Perens    April   1996
Ian     Jackson   January 1998
Wichert Akkerman  January 1999
Ben     Collins   April   2001
Bdale   Garbee    April   2002
Martin  Michlmayr March   2003

Awk anvÀnds ofta för att extrahera data frÄn den hÀr typen av filer.

Försök till exempel med följande

$ awk '{ print $3 }' <DPL                   # month started
August
April
January
January
April
April
March
$ awk '($1=="Ian") { print }' <DPL          # DPL called Ian
Ian     Murdock   August  1993
Ian     Jackson   January 1998
$ awk '($2=="Perens") { print $3,$4 }' <DPL # When Perens started
April 1996

Skal som Bash kan ocksÄ anvÀndas för att analysera den hÀr typen av filer.

Försök till exempel med följande

$ while read first last month year; do
    echo $month
  done <DPL
... same output as the first Awk example

HÀr anvÀnder det inbyggda kommandot read tecken i "$IFS" (internal field separators) för att dela upp rader i ord.

Om du Àndrar "$IFS" till ":" kan du analysera "/etc/passwd" pÄ ett snyggt sÀtt med shell.

$ oldIFS="$IFS"   # save old value
$ IFS=':'
$ while read user password uid gid rest_of_line; do
    if [ "$user" = "bozo" ]; then
      echo "$user's ID is $uid"
    fi
  done < /etc/passwd
bozo's ID is 1000
$ IFS="$oldIFS"   # restore old value

(Om Awk anvÀnds för att göra motsvarande, anvÀnd "FS=':'" för att ange fÀltseparatorn)

IFS anvÀnds ocksÄ av skalet för att dela upp resultat av parameterutvidgning, kommandosubstitution och aritmetisk utbyggnad. Dessa förekommer inte inom dubbel- eller enkelciterade ord. StandardvÀrdet för IFS Àr mellanslag, tabb och ny rad kombinerat.

Var försiktig med att anvÀnda detta shell IFS-trick. Konstiga saker kan hÀnda, nÀr skalet tolkar vissa delar av skriptet som dess input.

$ IFS=":,"                        # use ":" and "," as IFS
$ echo IFS=$IFS,   IFS="$IFS"     # echo is a Bash builtin
IFS=  , IFS=:,
$ date -R                         # just a command output
Sat, 23 Aug 2003 08:30:15 +0200
$ echo $(date -R)                 # sub shell --> input to main shell
Sat  23 Aug 2003 08 30 36 +0200
$ unset IFS                       # reset IFS to the default
$ echo $(date -R)
Sat, 23 Aug 2003 08:30:50 +0200

Följande skript gör trevliga saker som en del av en pipe.


Ett skalskript pĂ„ en rad kan loopa över mĂ„nga filer med hjĂ€lp av find(1) och xargs(1) för att utföra ganska komplicerade uppgifter. Se Avsnitt 10.1.5, ”Idiom för urval av filer” och Avsnitt 9.4.9, ”Upprepa ett kommando loopa över filer”.

NĂ€r det blir för komplicerat att anvĂ€nda det interaktiva lĂ€get i skalet kan du övervĂ€ga att skriva ett skalskript (se Avsnitt 12.1, ”Shell-skriptet”).



[1] Även den Ă€ldre vim kan starta i det sunda lĂ€get "nocompatible" genom att starta den med alternativet "-N".