Kapitel 10 - Unix

10. Unix på Algonet
Algonets maskiner kör med operativsystem Unix som lämpar sig väl när man kör en server med stor belastning. Unix är inget som man lär sig i en handvändning, men de enklare sakerna lär man sig rätt snabbt. En sak som man skall tänka på när man använder Unix är att Unix skiljer på stora och små bokstäver i filnamnen. T.ex. så är Kalle.txt och kalle.txt två olika filer.


10.1 Hur ändrar jag en fil på Algonet?
Det finns ett par olika texteditorer som man kan köra på Algonet. Den vanligaste är pico, som är den editor som används tillsammans med mailprogrammet Pine. Sedan finns xemacs som är en Emacsvariant. För de som är självmordsbenägna finns även vi :). Jag kommer här att beskriva hur man ändrar en fil med pico, eftersom den är enklast att lära sig.

Telnetta till en av Algonets maskiner. När du har fått upp prompten så skriver du:

pico MinFil.txt

om du vill ändra filen som heter MinFil.txt. Sedan är det bara att skriva. När du vill spara trycker du Control-X och följer frågorna som kommer upp längst ner på skärmen.

Om man måste använda långa rader och inte vill att pico skall wrappa raderna så kan man starta pico med en switch, -w, så wrappar den inte texten.


10.2 Chmod
Chmod står för change mode och är ett Unixkommando som man använder för att sätta rättigheterna på en fil. Rättigheterna är indelade i tre grupper: Ägaren, gruppen och andra (user, group och other). Dessa flaggor har olika värden som man lägger ihop för att få fram rätt värde.

Typ Värde
Ägare, läsrättigheter: 400
Ägare, skrivrättigheter: 200
Ägare, körrättigheter: 100
Gruppen, läsrättigheter: 40
Gruppen, skrivrättigheter:  20
Gruppen, körrättigheter: 10
Andra, läsrättigheter: 4
Andra, skrivrättigheter: 2
Andra, körrättigheter: 1

Det finns andra flaggor också, men dessa är de vanligaste. Om man t.ex. vill ha läs- och skrivrättigheter för ägaren och läsrättigheter för alla andra så sätter man 644 som filrättigheter. För att sätta filrättigheterna kör man:

chmod VÄRDE FILNAMN

där VÄRDE är de filrättigheter som du vill sätt och FILNAMN är namnet på filen som du vill sätta rättigheterna på.

Några vanliga filrättigheter är:

755 för en katalog som alla skall kunna läsa och gå in i (t.ex. en katalog i public_html/).
644 för en vanlig fil som alla skall kunna läsa (t.ex. en HTML fil i public_html/).
700 för ett CGI skript i cgi-bin/ katalogen samt för själva katalogen cgi-bin/.

Om man vill spärra så mycket som möjligt så skall man ha följande rättigheter:

711 ~/
711 ~/public_html/ samt alla underkataloger (bortsett från cgi-bin/)
700 ~/public_html/cgi-bin/
700 på alla andra kataloger

Alla filerna i hemkatalogen skall vara 700 eller 600 beroende på om filen är exekvarbar eller inte. Undantaget är .remote filen som skall vara 400. Publika optionella filer som .plan eller .project skall vara 644. Filerna under ~/public_html/ och dess underkataloger skall vara 644.

För den som vill lära sig mer om chmod hänvisas till man-sidan för chmod (kör 'man chmod' när du är inloggad på en Unixburk).

Det går också att använda en vanlig FTP klient för att ställa in rättigheterna. Här följer en kort förklaring hur det fungerar med WS_FTP. För övriga FTP klienter, se dokumentationen för respektive klient. Sök på 'change right', 'file permissions', 'permissions' eller 'chmod', så borde ni hitta det.

Börja med att koppla upp er mot ftp.algonet.se och logga in på ert konto. Markera därefter den fil eller katalog som ni vill sätta rättigheterna på. Högerklicka därefter och välj chmod (UNIX) från menyn. Klicka därefter i de rättigheter ni vill sätta (se ovan för en förklaring för vad de betyder). Klicka på OK, så det är färdigt.


10.3 Vanliga Unixkommandon
För att ge er en snabbstart så listas här några olika vanliga Unixkommandon.

ls - listar filerna i en katalog. Ls kan ta lite olika flaggor. Om man anger -l så får man en lista som liknar dir i DOS.
cp - kopierar en fil till ett annat ställe.
mv - flyttar en fil till ett annat ställe. Detta kommando används även när man vill byta namn på en fil.
cd dir - byter aktuell katalog till dir. Om man enbart skriver cd så hoppar man till sin hematalog.
chmod - sätter rättigheterna på en fil eller katalog.
rm - tar bort en fil.
man - titta på en manualsida.
more - läsa en textfil. Den stannar efter en skärm, sedan får man trycka mellanslag för att få fram nästa sida.
less - som more, men klarare lite mer saker.
cat - visar en fil, men väntar inte efter en sida som more gör.
mkdir dir - skapar en katalog som heter dir.


10.4 Man-sidor
Nästan varje Unixkommando har sin egen manualsida. För att titta på en manualsida använder man kommandot man. Om man vill titta på manualsidan för t.ex. kommando ls så skriver man:

man ls

så får du upp sidan. Det fungerar på samma sätt för andra kommandon. Det är bara att ersätta ls med det kommando som man vill ha upp manualsidan för.

Om man letar manualsidor så kan det vara bra att använda följande rad:

man -k KEYWORD | more

där KEYWORD är det sökord du letar efter.

Om du vill få upp alla manualsidor som finns i en viss sektion, t.ex. 3c, så skriver du:

man -k '(3c' | more

Om du vill få upp en lista på alla manualsidor som finns, så skriver du:

man -k '' | more

Tack till Stefan Wikström för uppdateringen av det här avsnittet.

"| more" betyder att resultatet pipas till more, som är en visare som stannar upp när den visat en skärm med text, så att man hinner läsa klart texten. Det går också bra att använda less istället för more.


10.5 Vad är cron, och hur använder jag det?
Cron är ett program som körs på Unixmaskinerna och med hjälp av en crontab fil kan man då köra program vid specificerade tidpunkter.

För tillfället så delar inte Algonet ut cronrättigheter till användare. Övriga delen av detta avsnitt lämnas dock kvar, för de som vill läsa om crontab. Förhoppningsvis låter Algonet användarna få tillgång till crontab igen vid ett senare tillfälle.

När du fått cronrättigheter så kan du lägga in kommandon som skall köras. Detta görs med programmet crontab. För att editera din crontab fil skriver du:

crontab -e

Formatet på crontab filen är:

<minut> <timme> <dag i månaden> <månad> <veckodag> <kommando>

Minuterna räknas från 0 till 59, timmarna från 0 till 23, dag i månaden från 1 till 31, månad från 1 till 12 och veckodag från 0 till 6, där 0 motsvarar söndag. Om vi t.ex. vill köra programmet test kl 03:00 varje dag skriver man:

0 3 * * * test

Här ser du att vi använder * för att beteckna att den skall ta med alla värdena för det fältet. Det går även att använda komma och bindstreck för att tala om när ett program skall köras. Om vi t.ex. vill att programmet test skall köras vid minuttalet 0, 15, 30 och 45 vid timmarna 0, 2, 5, 6, 7 och 10 den första och femtonde i varje månad så kan man skriva:

0,15,30,45 0,2,5-7,10 1,15 * * test

Notera att det inte får finnas några mellanslag efter kommatecknen eller bindestrecket.

Om du vill ha en kommentar i din crontabfil skriver du ett # tecken först på raden. Det får inte finnas några tomma rader i crontab filen, för då får du felmeddelanden.

Om du bara vill se vad din crontabfil har för innehåll kan du använda kommandot:

crontab -l


10.6 Vad är en symbolisk länk, och hur skapar jag en?
En symbolisk länk är en koppling från ett filnamn till en annan fil eller katalog. Det kan användas till mycket, t.ex. så kan man länka in olika filer i sin bin/ katalog så att man slipper ha en massa olika sökvägar i sin PATH variabel. Om man t.ex. vill att filen Kalle.html skall peka på filen Pelle/Olle.html så kan man skriva så här (förutsatt att man står i den katalog som filen Kalle.html finns i och katalogen Pelle/ ligger i den katalogen):

ln -s Pelle/Olle.html Kalle.html

Om man skriver en punkt (.) som sista argumentet (Kalle.html i det här fallet) så får länken samma namn som filen som den pekar på. Om vi istället för raden ovan hade skrivit:

ln -s Pelle/Olle.html .

så hade vi fått en länk i den aktuella katalogen som hette Olle.html.

Det får givetvis inte finnas någon fil med det namnet i den katalogen när du skapar länken, för i så fall lyckas inte skapandet av länken.

Tack till Bengt Larsson för förslaget om detta avsnitt.


10.7 Vad är alla dessa filer som börjar med en punkt?
I roten på ditt konto finns det ett antal filer som börjar med en punkt och som inte syns när man kör en vanlig ls. Dessa filer är konfigurationsfiler för olika Unixprogram. Här är en lista på de vanligast och vad de gör.

Namn Funktion
.addressbook Adressbok för mailprogram, t.ex. Pine.
.addressbook.lu  En extra fil för adressboken.
.cshrc Inställningsfil för ditt shell, i det här fallet csh/tcsh. Denna fil används enbart om du använder csh/tcsh som shell på ditt konto.
.bashrc Samma sak som .cshrc, men för bash shell.
.history Kommandohistorik för csh/tcsh shell.
.bash_history Kommandohistorik för bash shell.
.login Fil som körs när du loggar in med telnet på ditt konto med telnet/SSH.
.logout Fil som körs varje gång du loggar ut från ditt csh/tcsh konto.
.newsrc Fil som innehåller alla newsgroups som du läser (om du läser dem på någon av Algonets Unixmaskiner vill säga, inte om du läser dem hemma). Denna använda av bl.a. Tin och Pine.
.oldnewsrc Backup av din .newsrc fil.
.newsrc.bak Backup av din .newsrc fil. Dessa backupfiler kan du ta bort.
.pinerc Konfigurationsfil för Pine.
.pine-debugX Debugfiler för Pine (X kan ha värdet 1-4). Dessa kan man lugnt ta bort om man tycker att de tar upp för mycket plats.
.plan En textfil som innehåller vad du vill. Denna visas när du kör finger på någon.
.project En enraders textfil som talar om vad du håller på med just nu. Denna visas när du kör finger på någon.
.qmail-default Denna fil talar om för Qmail (programmet som sköter sändning av alla e-post på Algonet) vart den skall skicka brev som default (ifall adressen inte finns). Denna fil påverkar bara adresser på ditt konto. Om du t.ex. har ett konto som heter kalle och någon försöker skicka ett brev till kalle-pelle@algonet.se och det inte finns någon Qmail fil för den adressen, så skickas det till den/de adresser som står i .qmail-default. Mer om Qmail hittar ni i avsnittet om mail.
.qmail-* Övriga Qmail filer, t.ex. extra adresser som du satt upp. Om du vill ha en adress som heter kalle-pelle (om ditt konto heter kalle), så skapar du en fil som heter .qmail-pelle. Mer om Qmail hittar ni i avsnittet om mail.
.remote Denna fil talar om vilka IP adresser som får telnetta in till ditt konto på Algonet utifrån. Mer info om .remote hittar du här.
.signature Din signatur, som bl.a. används av Pine. Försök att hålla den under fyra rader.
.ssh/ I denna katalog sparas information som används av SSH när man vill använda SSH för att logga in på Algonets maskiner.
.tin/ I denna katalog sparar newsläsaren Tin sina konfigurationsfiler.
.trn/ Samma som .tin/, men för newsläsaren Trn.
.inputrc GNU readline konfigureringsfil. Om man vill ha åäö i bl.a. bash så skall man konfigurera i denna fil.
.emacs Konfigurationsfil för GNU Emacs eller XEmacs.
.pgp/ I denna katalog finns dina publika samt hemliga PGP nycklar.
.ncftp/ I denna katalog finns filer skapade av FTP klientprogrammet ncftp.
.netrc Konfigurationsfil för att exempelvis automatisera FTP inloggningar.
.exrc Konfigurationsfil för vi editorn.
.Xauthority X server behörighetsfil. Uppdateras automatiskt av SSH.
.article.NNNN NNNN är ett nummer. Artiklar skapade av Tin mellanlagras i dessa filer.

10.8 Vad är /usr/usr, och vad finns där?
/usr/usr är en katalog där vissa Algonetanvändare har lagt upp program som kan vara nyttiga för andra Algonetanvändare. Denna katalog underhålls av några Algonetanvändare och är inget som Algonet sköter om. För att se vilka program som finns installerade kan ni använda ls -l /usr/usr/modules.

För att få tillgång till dessa så kör du bara:

.  /usr/usr/lib/addUsrUsr.sh (om du kör sh/ksh/bash som shell)

eller

source /usr/usr/lib/addUsrUsr.csh (om du kör csh/tcsh som shell)

Om du vill använda dessa jämt så är kan det vara idé att stoppa in den raden sist i din .cshrc/.bashrc fil.

Ni kan själva se vad det finns för filer genom att hoppa till /usr/usr katalogen.


10.9 Shellalias, vad är det?
Ett shellalias är ett makrokommando som används för att minimera skrivandet av vanliga kommandon.

För att lista vilka aliases du har definierade så skriver du följande i ditt shell:

alias

För att definiera ett alias i csh/tcsh så skriver du följande på kommandoraden:

alias ALIASNAMN "kommando och parametrar"

där ALIASNAMN är namnet på aliaset som du skapar. Här följer ett enkelt exempel som skapar aliaset lt vilket visar alla filer i kronologisk ordning:

alias lt ls -lAFt
alias m more

Det andra aliaset skapar ett alias för kommandot more. Om du nu skriver följande rad:

lt | m

så kommer shellet att expandera aliasarna lt samt m och exekvera följande kommandosträng:

ls -lAFt | more

Här följer nu ett lite mer avancerat exempel som visar att man kan ha parametrar i alias:

alias mann "nroff -man \!^ | less -s"

Om du nu skriver t.ex:

mann /usr/man/man1/ls.1

så kommer shellet att expandera detta till:

nroff -man /usr/man/man1/ls.1 | less -s

Om du vill ha aliasarna permanenta (så att de fungerar även vid nästa inloggning) så lägger du in dem i din .cshrc fil.

Om du vill exekvera ett kommando som heter likadant som ett alias så kan du ange en backslash framför kommandot. Då kommer inte aliaset att exekveras. T.ex:

\rm kalle.txt

Här är en lista på vanliga alias:

alias m more
alias pine pine -d 0
alias ls ls -F
alias ll ls -l
alias mv mv -i
alias cp cp -i
alias rm rm -i
alias md mkdir
alias rd rmdir

För mer information om alias i csh/tcsh läs csh man sidan (kör 'man csh').

Om du använder ett annat shell än csh/tcsh så se man sidan för respektive shell. Alla shells har sin egna alias trix. Bourne shell gruppen (ksh/bash/zsh) definierar alias så här:

alias ls="ls -F"

- Skrivet av Stefan Wikström


10.10 Tar och gzip
Tar och gzip är två vanliga kommandon under Unix. Tar står för Tape ARchive och är ett sätt att skapa ett arkiv med flera filer i, liknande det som WinZip och LHa gör, men med den skillnaden att tar inte packar filerna, utan bara lägger ihop dem i en fil. Tar kan även skriva till streamers och lite annat också, men oftast använder man den för att skapa arkiv med filer som skall distribueras. GZip, eller GNU Zip som den också kallas, packar eller packar upp filer. Den klarar inte av att arkivera flera filer till ett arkiv, så när man skapar arkiv under Unix använder man först tar och sedan gzip.

För att skapa ett nytt tar arkiv skriver man:

tar cvf MITTARKIV.tar fil1 fil2 ...

där MITTARKIV är namnet på arkivet som du vill skapa. Man behöver inte har extension .tar på arkivet, men det är bra att ha det så att man vet att det är ett tar arkiv. Fil1, fil2 osv (de tre punkterna skall inte vara med, de visar bara att man kan ange flera filer) är de filer som du vill skall finnas med i arkivet. Det kan vara en hel katalog, filnamn med wildcards i eller bara vanliga filnamn. Notera att raden ovan skapar ett helt nytt arkiv, så om det finns ett sådant redan så skrivs det över. Om du däremot har ett befintligt arkiv som du vill lägga till filer i använder du kommandot:

tar rvf MITTARKIV.tar nyfil1 nyfil2 ...

För att titta vilka filer som finns i ett arkiv används kommandot:

tar tvf MITTARKIV.tar

och för att plocka fram filerna ur arkivet används:

tar xvf MITTARKIV.tar

Om du inte vill ha verbose mode påslaget (dvs mycket information), så plockar du bort bokstaven v ur kommandona ovan (cvf blir cf, rvf blir rf osv).

För att packa en fil med GZip skriver man (låt oss säga att vi vill packa vårat arkiv från exemplet ovan):

gzip MITTARKIV.tar

När GZip är färdig kommer du att ha en fil som heter MITTARKIV.tar.gz. För att packa upp en GZip fil så kan man antingen använda:

gzip -d MITTARKIV.tar.gz

eller

gunzip MITTARKIV.tar.gz

GZip klarar även av att packa upp filer som är packade med compress (dessa filer slutar med .Z).


10.11 Vad är ~ och vad har jag för nytta av den?
~ är ett specialtecken (uttalas tilde) som ditt shell använder. Om man t.ex. skriver 'cd ~/' så hoppar man till rotkatalogen på sitt konto. ~ (utan något namn efter) pekar på hemkatalogen till ditt konto. Om man skriver ett loginnamn efter ~tecknet så betyder det hemkatalogen för den användaren. T.ex. så pekar ~matax på min hemkatalog.

Detta är väldigt användbart om man t.ex. vill hoppa till någons hemkatalog, men inte vet sökvägen till deras hemkatalog, eller om man vill kopiera en fil till sin hemkatalog men står i någon helt annan katalog. Säg att du står i /usr/usr/lib och vill kopiera filen readme.txt till din hemkatalog. Då skriver du:

cp readme.txt ~/

så kopieras filen till rotkatalogen på ditt konto.


10.12 Varför kan jag inte ta bort en fil som finns?
Det finns två förklaringar. Antingen så är filrättigheterna satta så på filen att de inte går att ta bort. Kör:

chmod 644 FILENAME

på filen, där FILENAME är namnet på filen, och prova att ta bort filen igen. Fungerar inte det, så har du troligen mellanslag eller andra konstiga tecken i filnamnet. Om du har mellanslag i filnamnet, och vill ta bort filen, så måste du ange alla mellanslag med ett \ tecken före. Detta betyder att ditt shell inte skall tolka det som ett mellanslag, utan som en del av filnamnet. En annan variant är att innesluta filnamnet med citationstecken, t.ex. "min fil.html", om man tycker att det är knepigt att använda \. Ett bra sätt när man har lång, eller konstiga, filnamn, är att använda filename completion. Det finns i de flesta shell. Skriv in början på filnamnet och tryck TAB så fyller shellet på filnamnet så långt det är unikt. Därefter kan man skriva in fler tecken i filnamnet och trycka TAB igen, tills filnamnet är komplett.

En annan variant, som man dock skall vara försiktig med, är att använda wildcards. Då kan man matcha på en del av filnamnet och radera filen. Om man har ett par filer som heter något med nisse i, och vill ta bort dem, kan man skriva:

rm -i *nisse*

Notera att det är viktigt med -i flaggan, eftersom du då måste bekräfta varje fil innan de raderas. Det kan vara rätt bra så man inte råkar radera för mycket. Svara y om du vill ta bort filen, och n om du inte vill ta bort den.