Dette er så anden del af "bash-kommandoer for begyndere af begyndere". Enkelte steder vil denne artikel forudsætte, at man har en svag erindring om kommandoerne fra 1. del, og hvad de gør.
Igen er denne artikel egentligt en billedebog, hvor teksten kan supplere billederne.
Jeg har fået et par enkelte e-mail med, hvordan man ændre konsollens udsende. Så det starter jeg med hurtigt at gennemgå :-)
I konsollen (i SuSE RED.) vælges punktet Opsætning → Skema og her vælger man så det udsende man ønsker.
Et par trick før vi går i gang, i stedet for at skrive hele kommandoen, filnavnet eller andet, kan man nøjes med at skrive lidt af ordet og så trykke på tabulator-tasten (TAB), det medføre normalt at man får det rigtige ord frem. Fx "mount /media/floppy", kan gøres sådan "mou (TAB) /me(TAB) f(TAB)". Hvis der er mere end en kommando passer på det man har skrevet, lyder "dumme-klokken", to tryk på TAB vil så vise mulighederne.
Med kommandoen "clear" renser du konsolen for alt gammel tekst, der er ganske rart at kunne gøre når det begynder at blive for rodet!
Den praktiske og den besværlige, ps og ps aux | grep
Med kommandoen "ps" kan man se hvilke processer der er i gang, "ps" har dog den begrænsning, at den kun kan se "konsol-startede" programmer.
Mens jeg skriver dette, køre jeg "ps" i konsolen, og den oplyser intet om at OpenOffice er i gang.
Men den kan sagtens se det parti "sænke slagskibe" jeg startede i linjen før.
Skal man holde styr på sine konsol startede programmer er "ps" udmærket
Den vigtigste oplysning man får med "ps" er processernes PID (Proces Identifier), den skal om lidt bruges til at slå processerne ihjel. PID er det tal der står i kolonnen yderst til venstre.
Men hvordan får man fat i alle de processer man har startet?
Man kan bruge kommandoen "ps aux" men, i hert fald hos mig, levere den mange flere oplysninger end jeg skal bruge eller kan overskue :-). Så i stedet bruger jeg kommandoen "ps aux | grep dexter". Grep er, her vil jeg gerne rettes hvis jeg sigere noget forkert! et program der undersøger outputtet fra et andet program for indholdet af et bestem søge ord, og viser det der indeholder ordet. "|" er en pipe, det leder outputtet fra en proces over i en anden. På denne måde får jeg sorteret i "ps aux" outputtet, så kun det der er startet af mig (bruger dexter) bliver vist. Og så kan jeg pludselig også se at jeg bruger OO.o.
Jeg vil ikke forsøge at forklare ret meget af outputtet fra "ps aux | grep dexter", kun at yderste venstre kolonne viser brugeren der har startet processen, her er det sorteret så kun dem jeg har startet er vist. Anden kolonne viser PID, og den yderste højre kolonne viser programnavnet.
Tre ting på en gang - det går virkelig ikke, & dog
Hvad gør man hvis man vil starte et program op fra konsolen, så er konsolen jo spæret indtil man, med musen lukker programmet? Man kunne selvfølgelige starte endnu en konsol op, men det bliver hurtigt noget rod, hvis man starter flere programmer. Men kunne jo også sende programmet om i baggrunden så man stadig har forgrunden (proceslinjen) fri. Det var det jeg gjorde på billede to, hvor jeg satte et & efter "kbattleship". På denne måde starter man programmet, men holder proceslinjen fri til andre ting.
På billedet herunder, køre jeg "ps" så man kan se hvad jeg har startet fra konsolen. "bash" er konsolen selv, og "ps" er "ps"-processen selv. Det ses at jeg har kbattleship i gang.
Så starter jeg først skrive programmet kwrite, og med et & sender jeg det til baggrunden. Der kommer nu to tal fra [2] og 1520, det første er baggrundsproces nummeret, jeg har nu to processer liggende i baggrunden, det andet er PID'et. Nu gør jeg det samme med emacs (et udvidet teksteditor). Til slut køre jeg "ps" igen, så jeg kan se hvad jeg har i gang i.
Hvad gør man, hvis man glemte at dømme en proces til baggrunden?
Man suspendere den :-)
På billedet starter jeg "gimp" (et billederedigerings program), men glemmer at sætte & bagefter det. Så jeg trykker ctrl+z og giver kommandoen "bg" (BackGround eller på dansk (BagGrund) nu står der "gimp &" og der dukker et baggrundsnummer op.
På den sidste "ps" ses alle de processer der er startet fra konsolen.
Flere processer efter hinanden, med ; og &&
Nogle gange kan det være irriterende, at man skal skrive på en masse proceslinjer efter hinanden, kunne man ikke bare bruge én? Jo det kan man sagtens. I stedet for fx at skrive "mount /media/floppy" "cd /media/floppy" ls , kan man skrive "mount /media/floppy ; cd /media/floppy ; ls".
Ulæmpen ved ";" er at den næste kommando bliver kørt uden hensyn til hvordan den forrige gik. Hvis mountningen ikke gik god vil computeren stadig forsøge at skifte til disketten, og vise indholdet af katalog.
Det problem kan løses med "&&". Nu køre den næste proces kun hvis den forrige gik godt.
Men denne har selvfølgelig også sine begrænsninger . . .
Man kunne fx sidde med en fil man vil have lavet et par kopier af. Hvis man stadig skriver på filen vil man med jævne mellemrum kopieren den - bare for en sikkerheds skyld, så med pil op gentager man linjen i konsolen.
Men i den jeg har lave på billedet, glemmer jeg at unmounte floppy igen. Derfor får jeg en fejlmelding hvis jeg bare køre linjen igen (bruger pil op).
Dette kunne være undgået ved enten at tilføje "&& umount /media/floppy" til sidst, eller ved at kombinere ";" og "&&". Hvis jeg fx skriver ";" i stedt for det første "&&", og tilføjer "ls /media/floppy &&", så ser det helt anderledes ud når den køres to gange i træk.
Jeg ændre "&&" til ";" for at undgå at det hel stopper bare fordi jeg ikke har unmounted floppy, og til "ls /media/floppy &&" for at sikre mig at disketten er i drevet, hvis disken ikke er i, så stopper processen her - hvilket er fint da jeg ikke kan kopiere en fil til en diskette der ikke er tilstede :-)
Stop dem, kill og kill -9
Jeg har nu startet en frygtelig masse processer op, og nu skal de lukkes igen. I unix/linux-sprog hedder det at slå processen ihjel. Under normale omstændigheder bruger man kommandoen "kill ". På billedet har jeg kørt "ps2 for at finde PID på mine baggrundsprocesser.
Jeg begynder nu at "myrde løs" fra en ende af.
Man får først meldingen om at processen er dræbt, når næste kommando eksekveres.
Til sidst køre jeg "ps" for at se om der er noget der har overlevet - det er der ikke her.
Men hvis jeg nu starter min ynglings aversion "vi" op i baggrunden, så ser det meget sjovere ud :-)
Den nægter at være flink og dø! Så det kraftige skyts må i brug. Kommandoen "kill -9 " er lige det der skal til, og nej, jeg ved ikke om -9 står for 9mm :-)
Bemærk ændringen i sproget. Ved "kill" bliver processen "termineret", men ved "kill -9" bliver den dræbt!
Exit
Den sidste kommando - som egentligt skulle have været bragt i sidste artikel, lukker (dræber) konsolen, der er kommandoen "exit". (det er svært at tage et screenshot af den :-)
Gode forslag til indholdet af næste artikel modtages gerne, enten som kommentar eller på gekko _AT_ sol.dk - det er også alle frit at skrive en fortsættelse :-)
Jeg vil stadig anbefale http://www.sslug.dk/linuxbog : Linux - friheden til at lære UNIX til alle der har fået blod på tanden :-)