Linux har ett filsystem, vilket betyder "katalog-strukturen och filerna i den", som liknar DOS väldigt mycket. Filer har filnamn som följer vissa regler, lagras i kataloger, vissa är körbara och vissa av dem har har kommando-parametrar. Vidare kan du använda "wildcard- tecken", omdirigering och "piping". Det finns bara några små skillnader:
NOTENOUG.TXT
.
Under Linux har vi det bättre. Om du installerade Linux, med ett fil-
system som ext2 eller umsdos, så kan du använda längre filnamn (upp
till 255 tecken) och med mer än en punkt i dem: t.ex.
This_is.a.VERY_long.filename
. Observera att jag använde både stora
och små bokstäver: faktiskt...
FILENAME.tar.gz
och filename.tar.gz
är därför två olika filer.
ls
är ett kommando, LS
är en felskrivning;
o Windows 95-användare kommer naturligtvis att vilja använda långa fil-
namn under Linux. Om ett filnamn innehåller mellanslag (vilket inte
rekommenderas, men är möjligt), så måste du innesluta filnamnet i
citationstecken när du vill referera till det. T.ex.:
$ # följande kommando skapar en katalog som heter "Mina gamla filer"
$ mkdir "Mina gamla filer"
$ ls
Mina gamla filer bin tmp
Vidare så finns det vissa tecken som inte bör användas: några av dessa är
!*$&
.
*
, på slutet av namnet, när du kör kommandot ls -F
.
T.ex.:
$ ls -F
I_am_a_dir/ cindy.jpg cjpg* letter_to_Joe my_1st_script* old~
Filerna cjpg*
och my_1st_script*
är körbara; "program". Under DOS
slutar säkerhetskopiornas namn med .BAK, medan de under Linux slutar
med ett tilde, "~
", som gömda filer. Exempel: filen
.I.am.a.hidden.file
dyker inte upp efter ls
-kommandot;
/parameter
, medan
Linux använder
-parameter
eller --parameter
. Exempel: dir /s
blir
ls -R
. Observera
att många DOS-program, som PKZIP
och ARJ
, använder UNIX-liknande
parametrar.
UNIX har en filtyp som inte existerar under DOS: den symboliska länken.
Du kan tänka på den som en pekare till en fil eller en katalog, och den
kan användas istället för filen eller katalogen den pekar på; det
liknar genvägarna i Windows 95. Exempel på symboliska länkar är
/usr/X11
, vilken pekar på /usr/X11R6
, och
/dev/modem
, vilken pekar på
antingen /dev/cua0
eller /dev/cua1
.
För att skapa en symbolisk länk:
$ ln -s <fil_eller_katalog> <länknamn>
Exampel:
$ ln -s /usr/doc/g77/DOC g77manual.txt
Nu kan du hänvisa till g77manual.txt
istället för
/usr/doc/g77/DOS
. Länkar ser ut så här i katalog-listningar:
$ ls -F
g77manual.txt@
$ ls -l
(diverse saker...) g77manual.txt -> /usr/doc/g77/DOC
DOS-filer och -kataloger har följande attribut: A (arkiv), H (dolda), R (endast läsbara) och S (system). Endast H och R finns under Linux: dolda filers namn börjar med en punkt, och för R-attributet, läs vidare.
Under UNIX har en fil "rättigheter" och en ägare, som i sin tur till- hör en "grupp". Titta på det här exemplet:
$ ls -l /bin/ls
-rwxr-xr-x 1 root bin 27281 Aug 15 1995 /bin/ls*
Det första fältet innehåller rättigheterna för filen /bin/ls
, vilken
tillhör root, gruppen är bin. Om vi bortser från den återstående
informationen, lägg på minnet
vad -rwxr-xr-x
betyder, från vänster till höger:
-
är filtypen (- = vanlig fil, d = katalog, l = länk osv.); rwx
är
rättigheterna för filens ägare (läs (read), skriv (write) och kör
(execute)); r-x
är rättigheterna för filägarens grupp (läs, kör);
(Jag kommer inte att avhandla grupp-begreppet, du kan överleva utan
det, så länge du är nybörjare ;-) r-x
är rättigheterna för alla
andra användare (läs, kör).
Katalogen /bin
har också rättigheter: see avsnitt
Katalogers rättigheter för
mer detaljer.
Det är p.g.a. detta som du inte kan radera filen /bin/ls
, om du
inte är
root: du har inte skriv-rättighet att göra detta. För att ändra en
fils rättigheter, använd kommandot:
$ chmod <vemXrättighet> <file>
där vem är u
(användare (user), alltså användaren), g
(grupp),
o
(annan
(other)), X är antingen +
eller -
, rättighet är r
(läs),
w
(skriv)
eller x
(kör). Vanliga exempel på chmod
är de följande:
$ chmod +x fil
vilket sätter kör-rättighet för filen.
$ chmod go-rw fil
Det här tar bort läs- och skriv-rättigheterna för alla utom ägaren.
$ chmod ugo+rwx fil
Detta ger alla läs-, skriv- och kör-rättigheterna.
# chmod +s fil
det här skapar en så kalla "setuid"- eller "suid"-fil---en fil som alla kan köra med dess ägares rättigheter. Dessa kommer du typiskt att stöta på som root-suid-filer.
Ett kortare sätt att referera till rättigheter är med nummer: rwxr-xr-x
kan uttryckas som 755 (varje bokstav korresponderar till en bit: ---
är
0, --x
är 1, -w-
är 2, -wx
är 3 osv.). Det ser svårt ut, men
med en del träning kommer du att förstå konceptet.
root, som super-användare, kan ändra allas filers rättigheter. LMS.
Till vänster finns DOS-kommandona; till höger finns deras motsvarigheter under Linux.
ATTRIB: chmod
COPY: cp
DEL: rm
MOVE: mv
REN: mv
TYPE: more, less, cat
Omdirigerings- och rörlednings-operatorer: < > >> |
"Wildcards": * ?
nul: /dev/null
prn, lpt1: /dev/lp0 or /dev/lp1; lpr
DOS Linux
---------------------------------------------------------------------
C:\GUIDO>ATTRIB +R FILE.TXT $ chmod 400 file.txt
C:\GUIDO>COPY JOE.TXT JOE.DOC $ cp joe.txt joe.doc
C:\GUIDO>COPY *.* TOTAL $ cat * > total
C:\GUIDO>COPY FRACTALS.DOC PRN $ lpr fractals.doc
C:\GUIDO>DEL TEMP $ rm temp
C:\GUIDO>DEL *.BAK $ rm *~
C:\GUIDO>MOVE PAPER.TXT TMP\ $ mv paper.txt tmp/
C:\GUIDO>REN PAPER.TXT PAPER.ASC $ mv paper.txt paper.asc
C:\GUIDO>PRINT LETTER.TXT $ lpr letter.txt
C:\GUIDO>TYPE LETTER.TXT $ more letter.txt
C:\GUIDO>TYPE LETTER.TXT $ less letter.txt
C:\GUIDO>TYPE LETTER.TXT > NUL $ cat letter.txt > /dev/null
n/a $ more *.txt *.asc
n/a $ cat section*.txt | less
Notes:
*
är smartare under Linux: *
matchar alla filer, utom de
dolda; .*
matchar alla dolda filer (men också den aktuella katalogen,
.
, och föräldra-katalogen, ..
: varning!); *.*
matchar endast
de som har en punkt i mitten, följt av andra tecken; p*r
matchar både
"peter" och "piper"; *c*
matchar både "picked" och "peck";
more
, tryck <SPACE> för att bläddra
genom filen, "q" för att avsluta. less
är mer intuitivt och låter dig
använda pil-tangenterna.
UNDELETE
, så tänk dig för innan du tar
bort något;
< > >>
, så har Linux 2>
för
att omdirigera felmeddelanden (stderr); vidare så omdirigerar 2>&1
stderr till stdout, medan 1>:&2
omdirigerar stdout till stderr;
[]. Användning:
[abc]*matchar filer som börjar med a, b och c;
*[I-N1-3]matchar filer som slutar med I, J, K, L, M, N, 1, 2 och 3;
lpr
<fil> skriver ut en fil i bakgrunden. För att kolla
statusen på utskriftskön, använd lpq
; för att ta bort en fil från
utskriftskön, använd lprm
;
RENAME
; mv
*.xxx *.yyy fungerar
alltså inte. Du skulle kunna pröva följande enkla skal-program; se avsnittet
Skal-program: .BAT-filer på anabola för
detaljer.
#!/bin/sh # ren: byt namn på flera filer enligt flera regler if [ $# -lt 3 ] ; then echo "användning: ren \"mönster\" \"ersättning\" filer..." exit 1 fi OLD=$1 ; NEW=$2 ; shift ; shift for file in $* do new=`echo ${file} | sed s/${OLD}/${NEW}/g` mv ${file} $new done
REN
, eftersom det använder
reguljära mönster (regular expressions), som du fortfarande inte
vet något om. Om du bara vill byta ut filändelser, använd det så
här: ren "htm$" "html" *htm
. Glöm inte $
-tecknet.
cp -i
och mv -i
för att få en varning när en fil
kommer att bli överskriven.
För att köra ett program, skriv in dess namn, som du skulle göra
under DOS. Om katalogen (avsnittet
Kataloger)
där programmet är
lagrat finns med i din sökväg (avsnittet
System-initiering), så
kommer programmet att startas. Undantag: i motsats till DOS, så
startas inte ett program i den aktuella katalogen, under Linux, om
den katalogen inte finns med i sökvägen. Lösning: om prog
är ditt
program, skriv ./prog
.
Så här ser en typisk kommando-rad ut:
$ command [-s1 [-s2] ... [-sn]] [par1 [par2] ... [parn]] [< input] [> output]
där -s1
, ..., -sn
är program-"switchar", par1
,
..., parn
är program-
parametrar. Du kan ge flera kommandon på en rad:
$ kommando1 ; kommando2 ; ... ; kommandon
Det var allt för denna gång om att köra program, men det är lätt att gå bortom detta. En av huvudanledningarna till att använda Linux är att det är ett multi-taskande operativsystem: det kan köra flera program (från och med nu: processer) samtidigt. Du kan köra igång processer i bakgrunden och fortsätta arbeta med en gång. Vidare låter dig Linux ha flera sessioner: det är som att ha flera datorer som arbetar samtidigt!
su - <loginnamn>
. Exempel:
su - root
. Detta är användbart t.ex. när du behöver utföra något, som
bara root kan göra.
exit
. Om det finns stoppade
jobb (mer om det senare), så blir du varnad.
&
" på slutet av kommando-raden:
$ prognamn [-switchar] [parametrar] [< indata] [> utdata] &
[1] 123
skalet identifierar processen med ett jobb-nummer (t.ex.
[1]; se nedan), och med en PID (Process identification Number; 123 i vårt exempel).
ps -ax
. Detta
kommer att visa en lista på den aktuella processerna.
kill <PID>
. Du kanske
behöver döda en process, om du inte vet hur man ska stänga den på rätt sätt...
Om du är root, så kan du döda andras processer. Ibland kan en process endast
dödas med kill -SIGKILL <PID>
.
Utöver detta låter dig skalet stoppa eller tillfälligt pausa en
process, skicka en process till bakgrunden och hämta fram en process
från bakgrunden till förgrunden. I denna kontext kallas processer för
"jobb".
jobs
. Här identifieras
jobben med sina jobb-nummer, inte sina PID.
bg <jobb>
(den blir ett jobb).
fg <jobb
gt;/. För att förgrunda det senast bakgrundade (är mitt
språk underligt?) jobbet, skriv bara fg
.
kill <%jobb>
, där
<jobb> kan vara 1, 2, 3...
Om du använder dessa kommandon kan du formattera en disk, zippa en bunt filer, kompilera ett program och packa upp ett arkiv, allt på samma gång, och fortfarande ha prompten tillgänglig. Försök med det under DOS! Och försök med Windows, bara för att se skillnaden i prestanda (om det inte krashar, naturligtvis).
För att köra ett program på en avlägsen maskin, vars IP-adress är
remote.machine.edu
, skriver du:
$ telnet remote.machine.edu
Efter att du loggat in är det bara att starta ditt favoritprogram. Jag behöver naturligtvis inte ens nämna att du måste ha ett användar- konto på den andra maskinen.
Om du har X11 så kan du till och med köra X-applikationer på en
avlägsen dator, och visa det på din X-skärm. Säg att remote.machine.edu
är den avlägsna X-datorn och local.linux.box
är din Linux-maskin. För
att, från local.linux.box
, köra ett X-program, som finns på
remote.machine.edu
, kan du göra följande:
xterm
eller annan terminal-emulator,
och skriv sedan:
$ xhost +remote.machine.edu
$ telnet remote.machine.edu
remote:$ DISPLAY=local.linux.box:0.0
remote:$ prognamn &
(istället för DISPLAY...
, kan du bli tvungen att skriva:
setenv DISPLAY local.linux.box:0.0
. Det beror på den andra maskinens
skal.)
Och voila! Nu kommer prognamn
startas på remote.machine.edu
och visas
på din maskin. Försök dock inte med det här över en PPP-lina, det är
alldeles för långsamt för att vara användbart.