Jag vill in i terminalen.

Tråden skapades och har fått 17 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • 2007-04-18 15:38

Hej alla terminal/unix/os x/kod/programmerings-fenor på 99.se!

Jag har nyligen läst om allt hackande som pågår på appleTV:n och många rader kod har flimrat förbi på skärmen. Många, för mig, intetsägande rader av konstiga kombinationer av bokstäver och ord: sudo, make, ls, dd, cp, allt vad det är, som tydligen är komandon för att fixa och dona bakom kulisserna här på mitt OS X.

HUR GÖR MAN?

Ja, det är det som är frågan, jag vill lära mig koda, och jag har sökt och letat och pulat och pillat, men jag vet ju inte riktigt vad jag ska leta efter. Är det Unix-programmering som jag tittar på? Vilken "version" är det som används i 10.4 av språken? Jag kan INGENTING om detta. Absolut nada. Så hjälp mig på traven. Var börjar jag? Ska jag köpa en bok? Finns där några bra hemsidor?

Släpp in mig i den där mystiska terminalen.

  • Medlem
  • Uppsala
  • 2007-04-18 16:01

Du vill lära dig Terminalen, kärnan i alla riktiga operativsystem. Ha gott mod, det tar lång tid att lära sig det till fullo, men nytta kan man ha av det redan från början!

Dessa kommandon skrivs alltså i Terminalen, som jag antar att du hittat. Där skriver man ett kommando, som sedan datorn utför och presenterar resultatet av på skärmen. De kommandon som finns är i stort sett lika i alla Unix-system (Mac OS, Linux, BSD etc) och har varit det sedan 70-talet.
Ett exempel på ett kommando är ls, som listar innehållet i den katalog man tittar på. Kommadon kan förses med "växlar" som justerar deras betydelse lite. Till exempel ls -S som visar innehållet sorterat efter storlek.
Eftersom varje kommando utför en liten och specialiserad uppgift kan man skicka vidare resultatet till ett annat genom ett "rör", tecknet | (alt+7). Exempel: kommandot grep går igenom det den får och letar efter den textsträng som angetts. Då ger ls | grep foobar en lista på alla filer eller mappar som innehåller "foobar" i namnet. Namnen "foo" och "bar" är vanliga i exempel.

Det finns mängder med listor på kommandon, använd Google! Några resultat:
http://www.indiana.edu/~uitspubs/b017/
http://mally.stanford.edu/~sr/computing/basic-unix.html

Ett annat tips är att använda man, det är en inbyggd handbok som finns till varje kommando. Exempelvis man ls ger alla möjliga växlar och funktioner med ls. Använd q för att lämna man.

Lek och se vad du får fram!

PS. Prova telnet towel.blinkelights.nl

  • Medlem
  • 2007-04-18 16:15

Ser man på ser man på, det var ju ganska enkelt! Så det finns listor med kommandon att tillgå, men vad ska jag göra med dom då? Vad är det som är smidigare med att skriva

mv mapp1 mapp2

istället för att klicka på en mapp i finder och döpa om där? Då behöver jag ju till och med bara skriva ett mappnamn. Jag är inte kritisk, det jag undrar är, vart finns kraften? Vad finns det för verktyg som gör mitt liv som glad terminal-amatör lite lättare genom att kunna unix gentemot att använda aqua?

MVH, swek

  • Medlem
  • Uppsala
  • 2007-04-18 16:23

Aqua är ju ett väldigt effektivt gränssnitt, så där går det nog snabbare att göra det med musen. Men säg att du vill jämföra innehållet i två mappar. Hur gör du det i Findern? Ställer upp två fönster brevid varandra och går igenom vilka filer som finns vart?
I terminalen kan man göra så här t.ex.:

ls mapp1 > lista1
ls mapp2 > lista2
comm lista1 lista2

Så får du en lista i tre kolumner på vilka filer som finns i mapp1, mapp2 och i båda. Det finns säkert bättre sätt att göra detta än vad jag kom på nu.

En annan sak, drar du en fil in i terminalen så skrivs dess sökväg ut. Och om du håller på att skriva något långt så kan du trycka Tab så kompletterar den automatiskt.

/lobben, själv glad amatör

Visst finns det många saker som är smidiga att göra i fönstren på operativsystemet, men i terminalen så har man en helt annan kontroll över det man gör, vilket är både bra och dåligt. Även om man inte ser det till en början så finns det nämligen en hel del begränsningar i fönstermiljön vilka man kan köra över i terminalen.

Ex. Du kopplar in kompisens iPod till din dator och vill ha hans musik-filer, dessa kan du inte kopiera i Findern. Några kommandon i terminalen och du har hela hans musikbibliotek på din dator.

Sen så är det ju så att du kan göra så sjukt mycket mer i terminalen än att kopiera filer, och när man sedan lägger ihop olika kommandon till ett arbetsflöde så händer det verkligen saker.

Det som jag dock använder terminalen till mest är att kommunicera med andra datorer. Fördelen med att jobba i terminalen är att allt du kan göra på din mac i terminalen kan du i princip göra på samma sätt på vilken UNIX dator som helst som du kopplar dig mot.

På det hela kan man nog sammanfatta det med att det är svårt att förklara på ett bra sätt allt man kan ha terminalen till och den är lite knepig att lära sig, men när man väl har börjat förstå så blir man mer och mer fast.

Har dock två tips till dig om du vill försöka lära dig en del på egen hand.
1. man
Hitta du ett kommando som du inte vet vad det gör i någon text, tillexempel "cp", gå då till terminalen och skriv "man cp" så får du upp manualen för kommandot "cp". (tryck ctrl+z för att lämna manualen)
2. apropos
Om du söker ett kommando som gör något speciellt, tillexempel kopiera en fil, skriv då "apropos copy" så får du upp alla kommandon som har något med copy att göra. Sen är det bara att undersöka de kommandon som verkar bra med "man".

  • Medlem
  • Stockholm
  • 2007-04-18 19:48
Ursprungligen av m_beckman:

(tryck ctrl+z för att lämna manualen)

Nej, tryck q för att lämna manualen.

ctrl-Z gör normalt så att det program man använder läggs i bakgrunden ("job control"). Kommandot jobs listar de jobb man har. Använd kommandot fg för att återgå till ett jobb man lämnat.

Ursprungligen av pesc:

Nej, tryck q för att lämna manualen.

ctrl-Z gör normalt så att det program man använder läggs i bakgrunden ("job control"). Kommandot jobs listar de jobb man har. Använd kommandot fg för att återgå till ett jobb man lämnat.

Sorry, gick lite snabbt när jag skrev där.

Ett komando som de flesta här använder men jag inte såg om vi hade nämnt eller inte, men som definitivt är något som man ska lära sig är "ssh", det är det som man oftast använder sig av för att kominucera med andra servrar.

Om man ska prata om kraft i terminalen så har en utav mina kompisar ett praktexempel. Hans hemmaserver skulle bytas ut, och han skulle då säkerhetskopiera allt. Dock fanns det en del problem, t ex så var han inte hemma när han skulle göra det. Dessutom så fanns det inte plats på hårddisken i servern att packa ner allt för att sedan överföra det.

Lösningen? Han körde ett kommando (rättare sagt en kedja med kommandon) som först packade ner allt på datorn, men istället för att lagra det i en fil på servern tunnlade det till en fil på datorn han satt vid. Att göra det med ett grafiskt gränssnitt hade tagit mycket längre tid, om det ens hade gått.

  • Medlem
  • 2007-04-19 09:47

Det verkar onekligen finnas mycket att lära sig om terminalen och alla funktioner. Problemet verkar vara att sätta kommandon i sammanhang. Vad ska jag t.ex. använda "sudo" tillsammans med? Jag vet att jag kan använda mv -n för att inte råka skriva över filer, men det är ju inte så jätteskoj att bara sitta och flytta filer fram och tillbaka.

Säg att jag t.ex. skulle vilja bränna en skiva med filer, skulle jag kunna göra det i terminalen?

  • Medlem
  • Tyresö
  • 2007-04-19 14:37
Ursprungligen av swek:

Det verkar onekligen finnas mycket att lära sig om terminalen och alla funktioner. Problemet verkar vara att sätta kommandon i sammanhang. Vad ska jag t.ex. använda "sudo" tillsammans med?

Finns man-sidor på allt så det är bara att läsa. Kör tex

man sudo

och du har lite att grotta ned dig i.

Saken är väl att det gäller att använda terminalen till det som den gör effektivare än det grafiska gränssnittet. Bränna skivor är nog inte en av dessa uppgifter.

Själv använder jag sällan terminalen till saker på min Desktop, förutom lite filupppackning osv. Dock använder jag den flitigt till att fjärradministrera linux och OSX servrar.

sudo använder du för att tillfälligt bli "superuser" (root) och uträtta uppgifter som bara denna användare har rättigheter att göra.

Johan S har utan tvekan en poäng, att arbeta i ett shell för sakens skull känns mest kontraproduktivt, utan bör göras när behovet finns. Precis som han så använder jag det huvudsakligen för att administrera och ansluta till främst andra Linuxdatorer, men givetvis också om jag ska ändra något i roten på min Mac.

Ett tips är att skaffa GeekTool, då kan du visa output från terminalen på din desktop, och det kan ju vara allt möjligt. Det är ett ganska konkret, och roligt, sätt att lära sig lite kommandon tror jag.

Bränna skivor generellt är väl inte det terminalen är gjord till, men att t ex automatiskt bränna en skiva med alla filer som är under 300kb och nyare än 3 veckor en gång i månaden är mera handen i handsken.

(har ingen aning om varför man skulle vilja göra det, men ändå)

  • Medlem
  • 2007-04-19 14:12

om jag har en mac hemma och en mac på jobbet. Kan jag komma åt filer på min dator hemma med hjälp at ssh då?

  • Medlem
  • Stockholm
  • 2007-04-19 14:19

http://en.wikipedia.org/wiki/Ssh

Ja. Först startar du SSH-servern på din hem-mac, samt ser till att brandvägg/router öppnar så att SSH-porten är åtkomlig från det externa nätet.

På jobbet kan du sedan använda kommandot ssh för att skapa en terminalsession till din hem-mac. Här använder du dina cd, ls, mv -färdigheter för att leta runt i katalogerna.

Vill du sedan kopiera filer från hem-macen kan du använda terminalkommandot scp.

Eller så använder du en grafisk klient på jobbdatorn som visar filerna i hemdatorn över ssh-protokollet.

Eller så installerar du FUSE på din jobbdator. Då kan du montera katalogerna på hemdatorn så att de kommer upp som diskar så de går att använda som om de vore lokala.

  • Medlem
  • 2007-04-19 14:21

Så terminalen är tämligen värdelös även där...?

EDIT: Okej. innan ni krossar mig, inte värdelös, men för enkla grepp som t.ex. att mount:a mappar från en annan dator, så funkar gränssnitt som FUSE minst lika bra. Sen verkar det ju finnas drösvis med saker man kan göra med SSH i olika former.

Senast redigerat 2007-04-19 14:32
  • Medlem
  • Stockholm
  • 2007-04-19 14:41

Bara för att man kan göra saker grafiskt är väl inte terminalen värdelös?

Behärskar du terminalen kan du från jobbet enkelt skapa en terminalsession till hemdatorn och ha full kontroll över den. Det går inte via en grafisk SFTP-klient eller via FUSE.

Å andra sidan kan du ju installera VNC-liknande program på hemdatorn och jobbdatorn och tunnla via SSH och grafiskt kontrollera din hemma-mac från jobbet. Kräver mer program och drar mycket mer bandbredd... Men du "slipper" terminalen igen.

Det hela beror ju på vad du vill göra. Det mesta går utmärkt att göra utan att behärska terminalen. Men om du behärskar den och dessutom lär dig lite script-programmerning kan du göra många saker som är knöliga eller omöjliga i det grafiska gränssnittet. Dessutom är det mycket lärorikt. Jag går aldrig med på att kalla terminalen för "värdelös"!

  • Medlem
  • International user
  • 2007-04-19 15:19

om du undrar vad ett kommando gör avnänd då kommandot man och skriv efter vilket kommando du vill ha informaion om. T.ex. så här:
man sudo

1
Bevaka tråden