Kul för nybörjare med bash i terminalen

Mjukstarta här!
Kategoriregler
Läs följande innan du postar: http://ubuntu-se.org/phpBB3/viewtopic.php?f=208&t=44692
Du får hjälp att komma igång med Ubuntu genom att välja en personlig fadder här: http://ubuntu-se.org/phpBB3/viewtopic.php?f=110&t=8767
Användarvisningsbild
anth
Inlägg: 511
Blev medlem: 22 aug 2019, 15:35
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster

Re: Kul för nybörjare med bash i terminalen

Inlägg av anth »

SL står för Steam Locomotive och visar ett ASCII-animerat ånglok.

Kod: Markera allt

sudo apt update && sudo apt upgrade
sudo apt install sl
SL skapades för att "straffa" de som skriver slarvigt, t.ex. de som ska skriva ls, men vänder på bokstäverna och skriver sl istället.

Det finns 4 olika versioner: det vanliga loket, en olycka (accident) där folk ropar på hjälp, ett litet lok och ett flygande lok:

$ sl
$ sl -a
$ sl -l
$ sl -F


Har man installerat lolcat går det givetvis utmärkt att köra:
$ sl | lolcat
Användarvisningsbild
anth
Inlägg: 511
Blev medlem: 22 aug 2019, 15:35
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster

Re: Kul för nybörjare med bash i terminalen

Inlägg av anth »

Osprey skrev:För att nu prata bash och terminal.... ;D

Den gamla klassiska fork-bomben:

Kod: Markera allt

:(){ :|: & };:
...kör den aldrig, för datorn kommer att tvärhänga sig..... ;)
Då svarar jag med det mest ökända kommandot i Linux, som man ALDRIG ALDRIG ALDRIG ska köra:

$ rm -rf /

Brasklapp: jag har testat det mesta i den här tråden för att vara säker på att det fungerar (ni skulle bli förvånade hur många gamla sidor det finns på nätet som tipsar om saker som inte längre fungerar i Ubuntu 21.04). Men jag har INTE testat någonting i detta inlägg, för jag är ointresserad av att förstöra Linux.
Det betyder att jag inte kan garantera att någonting fungerar så som jag skriver.

Jag kan tänka mig ett par tillfällen då jag skulle testa rm-kommandot:
1. På en dator som jag av någon anledning ska blåsa om. Nyinstallationen kommer ändå formatera om disken.
2. För att testa backupprogram. Det finns två sorters människor: de som tar backup och de som aldrig råkat ut för en hårddiskkrasch. :)
Skämt å sido, väldigt många som tar backup har aldrig testat hur det fungerar, och när de sedan behöver återläsa backupen visar det sig att det inte fungerar för de har missförstått hur man gör.

$ rm -rf / har ungefär samma effekt som format c: i Windows - det raderar hårddisken.
rm betyder remove, d.v.s. det raderar filer och kataloger.
-rf är två växlar: -r och -f, som är förkortningar för --recursive och --force.
--recursive raderar även filer i underkataloger.
--force gör att Linux inte frågar innan det raderar OCH raderar "öppna" filer (normalt kan man inte radera filer som används av systemet).
Och slutligen är / roten, d.v.s. den raderar roten och alla underkataloger. Kort sagt: hela Linux försvinner.

Nu finns det ett antal säkerhetsfunktioner inbyggda i Linux:
1. Man måste använda sudo.
2. Linux kommer ändå fråga om man verkligen är säker på att man vill fortsätta och om man gör det kommer data att förloras. Vill man inte ha kontrollfrågan ändrar man / till /*. * är ett wildcard och betyder "allt". T.ex. så raderar $ rm a* alla filer som börjar på a. För Linux är det ingen skillnad på / och /*, men säkerhetsfunktionen varnar inte när det inte är en ren rot.
Faktum är att kommandot inte raderar allt. Alla dolda filer, de som börjar med punkt, är kvar. Vill man radera allt ändrar man / till /* /.*.

Det finns ett antal "roliga" varianter som antagligen förstör datorn lika mycket:
rm -rf ~ raderar ens hemkatalog. Man får hoppas att ni kan logga in som en annan användare på datorn.
rm -rf /dev/null raderar Linux inbyggda papperskorg. kommandot echo "hej" skriver hej på skärmen, men echo "hej" > /dev/null "försvinner" bara. Ni kanske inte tror att /dev/null används så mycket - men det är för att ni inte märker att det används hela tiden, eftersom syftet är att få saker man inte vill ha att försvinna. Finns det inte längre något "svart hål" att slänga saker i kommer ni snart att upptäcka hur mycket skit Linux producerar.

Vad kan man göra om man varit så dum att man kört kommandot?
Det korta svaret: ni har väl backup?
Annars är det första man gör: DRA UR SLADDEN!!!
Dels tar det tid att radera hårddisken, dels arbetar Linux med cashe så allt skrivs (raderas) inte på en gång.
Sedan behövs en recovery-USB, men det är utanför den här trådens syfte.
Trådens syfte är att ge terminaltips och testdisk är ett återställningsprogram som körs i terminalen:
$ sudo apt install testdisk
Men har man raderat filsystemet kan man inte köra några kommandon eller installera några program. Man måste ha en återställnings-USB, och den har antagligen flera förinstallerade program för att reparera/återställa filsystemet.

Edit: korrigerade --force.
Användarvisningsbild
anth
Inlägg: 511
Blev medlem: 22 aug 2019, 15:35
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster

Re: Kul för nybörjare med bash i terminalen

Inlägg av anth »

anth skrev:$ rm -rf /
Hittade ett ännu mer djävulskt kommando:

nohup rm -rf / > /dev/null 2>&1 &

Förklaring:
nohup gör att nästa kommando körs utan no hangup, d.v.s. att ctrl+c inte fungerar.
rm -rf / har vi redan gått igenom.
> /dev/null har vi nämnt, det skickar alla meddelanden till papperskorgen, d.v.s. inget syns på skärmen.
2>&1 : i Linux finns två sorters meddelanden: vanliga (&1) och felmeddelanden (&2). Kommandot gör att felmeddelanden skickas till samma ställe som vanliga meddelanden, och enligt raden ovanför skickas meddelanden till /dev/null. Kort sagt: inte ens felmeddelanden syns på skärmen.
& gör att kommandot skickas till bakgrunden, ungefär som ctrl+z.

Kort sagt:
- Kommandot körs i bakgrunden så det märks inte.
- Kommandot kan inte avbrytas (möjligtvis kan man döda det med killall rm?).
- Både vanliga och felmeddelanden "försvinner" och visas inte.
- Hela Linux försvinner utan att du märker något.
Användarvisningsbild
anth
Inlägg: 511
Blev medlem: 22 aug 2019, 15:35
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster

Re: Kul för nybörjare med bash i terminalen

Inlägg av anth »

anth skrev:ALT + PrtSc/SysRq + R E I S U B :
unRaw : take keyboard control from X (har ingen aning om vad det gör)
tErminate : send SIGTERM to ALL processes to gracefully shutdown (som att använda kill utan -9)
kIll : send SIGKILL to ALL processes to forcefully shutdown (som att använda kill med -9)
Sync : flush data to disk (ungefär som när man väljer eject USB, men till ALLA diskar)
Unmount: koppla loss alla diskar (ALLA diskar, inklusive de interna diskarna)
reBoot : (starta om datorn NU)

PrtSc/SysRq brukar sitta ovanför Insert-tangenten (men det kan variera mellan olika tangentbort)

Ex: ALT+PrtSc+B startar om datorn på en gång.
Hittade mer kommandon än R E I S U B.
De går under namnet Magic SysRq Key
https://en.wikipedia.org/wiki/Magic_SysRq_key
och R E I S U B är bara 6 tangenter av hela tangentbordet.
Användarvisningsbild
anth
Inlägg: 511
Blev medlem: 22 aug 2019, 15:35
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster

Re: Kul för nybörjare med bash i terminalen

Inlägg av anth »

Jag hittade en cool retoterminal.
Antingen var ni med på 1980- och 1990-talet och arbetade i en terminal, eller så har ni sett dem på film:
Små burkar som såg ut som tjock-TV-apparater, ofta mindre än 14"-skärmar; monokroma med orange (amber), grön eller vit text på svart bakgrund.
Faktum är att anledningen till att texten är grön i dagens terminal i Ubuntu är för att det ska likna gårdagens terminal (som inte kunde visa någon annan färg).

För vissa nostalgiker räcker det inte med att ha grön text i terminalen, vissa vill att hela teminalfönstret ska se ut som en monokrom tjock-TV.
För dem finns programmet Cool Retro Term att tanka ner från Github:
https://github.com/Swordfish90/cool-retro-term

Bild

Programmet kommer som en AppImage.
AppImage, Flatpak och Snap är ett enkelt sätt att köra program utan att egentligen installera dem.
Installerar man med apt tankas det ner flera filer och ibland även andra paket som behövs för att köra det man installerar.
En AppImage är bara en fil som innehåller alla filer och paket som behövs för att köra programmet.
Fördelen är att programmet bara är en fil. Nackdelen är att det inte uppdateras automatiskt, utan man måste tanka ner en ny AppImage när det kommer en ny version.

Man tankar ner filen och lägger den var man vill. Förslagsvis skapar man en ny katalog i sin hemkatalog som heter AppImages, för man kommer antagligen skaffa sig flera AppImage-program.
Sedan högerklickar man på filen i sin filhanterare (nautilus, nemo, dolphin, thunar, eller vad ens filhanterare kan tänkas vara), väljer Properties > Permissions och bockar för att filen ska vara Executable, d.v.s. att det är ett program som kan köras.
Sedan är det bara att dubbelklicka på filen och köra den som vilket program som helst.

Så här installerar man i terminalen:

Kod: Markera allt

cd
mkdir AppImages
cd AppImages
wget https://github.com/Swordfish90/cool-retro-term/releases/download/1.1.1/Cool-Retro-Term-1.1.1-x86_64.AppImage
chmod u+x Cool-Retro-Term-1.1.1-x86_64.AppImage
./Cool-Retro-Term-1.1.1-x86_64.AppImage
Förklaring:
Först går vi till vår hemkatalog. Man kan även skriva cd ~, men bara cd går lite snabbare och gör samma sak.
Sedan skapar vi en AppImages-katalog där vi kan spara alla våra AppImage-program.
Sedan går vi till katalogen.
Sedan tankar vi ner filen med wget. Om ni läser detta i framtiden, kontrollera att version 1.1.1 verkligen är senaste versionen av programmet.
Sedan gör vi programmet körbart.
Sist startar vi programmet.

wget är ett jättesmidigt program för att tanka ner filer. Säg att vi har en bild (i det här fallet Wikipedias logo):
https://upload.wikimedia.org/wikipedia/ ... v2.svg.png
Då kan vi tanka ner bilden till vår hemkatalog:

Kod: Markera allt

cd
wget https://upload.wikimedia.org/wikipedia/en/thumb/8/80/Wikipedia-logo-v2.svg/1024px-Wikipedia-logo-v2.svg.png
ls
Eller så kan man specificera en katalog:

Kod: Markera allt

cd
wget https://upload.wikimedia.org/wikipedia/en/thumb/8/80/Wikipedia-logo-v2.svg/1024px-Wikipedia-logo-v2.svg.png -O ~/Pictures
cd Pictures
ls
chmod ändrar rättigheterna för en fil.
Låt oss skapa en testfil att leka med:

Kod: Markera allt

cd
touch testfil
ls
cat
som ni ser är filen vit, d.v.s. det är en vanlig fil. Och den är tom, den innehåller ingenting.
Prova kommandot chmod u+x testfil och lista filen med ls; nu är filen grön, d.v.s. körbar.
Använder vi kommandot ls -l får vi en lista på alla filer och vi ser att varje fil börjar med tio streck och bokstäver, t.ex: -rwxrw-r--, sedan ett nummer, ett användarnamn och en användargrupp. Ofta är användarnamnet och användargruppen desamma och antingen ditt användarnamn eller root.
Det första tecknet är normalt ett streck eller ett d om det är en katalog (directory). Kataloger är blåa.
Följande nio tecken är tre grupper om tre: rwx rwx rwx. Rwx står för read, write, execute. De tre grupperna är user, group, other. User syftar på användarnamnet som står efter på raden. Är det ditt användarnamn är du användaren. Group syftar på användargruppen som står efter användarnamnet. Other är alla andra. vill man ha med allt: u, g, o, kan man använda a för all.
Man kan sedan manipulera allt med plus (+) som lägger till, minus (-) som tar bort och likamed (=) som gör exakt så som man skriver.
Testa chmod u=x,g-r,o+x testfil och kolla med ls -l vad som hänt. Ska man ändra allt på en gång kan man skriva chmod a=rwx testfil.

Det går även att använda siffror istället för rwx. X=1, w=2, r=4. Vill man ha r och x lägger man ihop 1+4=5, och vill man ha allt blir det 1+2+4=7.
chmod 755 testfil är detsamma som chmod u=rwx,g=rx,o=rx testfil.

Slutligen skriver man ./ för att köra en fil i den katalog man är i. Detta är vanligt med skript.
Varför måste man skriva ./? Gör man inte det tror Linux att det är kommando och börjar leta i /usr/bin.

Ok, ni har startat den coola retroterminalen: högerklicka på skärmen och välj "Profiles" för att andra färger än standardfärgen amber, t..ex grön:
Bild
Användarvisningsbild
Osprey
Inlägg: 6310
Blev medlem: 06 apr 2008, 00:09
OS: Ubuntu
Ort: Göteborg/Mölndal/Falkenberg
Kontakt:

Re: Kul för nybörjare med bash i terminalen

Inlägg av Osprey »

anth skrev:Hittade ett ännu mer djävulskt kommando:

nohup rm -rf / > /dev/null 2>&1 &
Det fanns ett rätt "gräsligt och livsfarligt" kommando i Unix som hette clri (finns till viss del kvar i Linux). Det skriver nollor till en i-node, det vill säga det som i grunden håller ihop filsystemet....

Nu sköts det mesta om automatiskt av fsck/e2fsck, men då var man tvungen att fixa mycket mer manuellt, även om fsck fanns även då. Men om man körde clri utan någon riktig insikt i vad man gjorde, så kunde mycket hända i systemet... ;D
anth skrev:Jag hittade en cool retroterminal.
Antingen var ni med på 1980- och 1990-talet och arbetade i en terminal, eller så har ni sett dem på film:
Små burkar som såg ut som tjock-TV-apparater, ofta mindre än 14"-skärmar; monokroma med orange (amber), grön eller vit text på svart bakgrund.
Faktum är att anledningen till att texten är grön i dagens terminal i Ubuntu är för att det ska likna gårdagens terminal (som inte kunde visa någon annan färg).
På skolan (1984-85) körde vi Wicat Unix (System V) på terminaler med svart bakgrund och gröna bokstäver/tecken. Sedan gled jag under en tid över mot VAX/VMS (~OpenVMS) och började köra DEC:s terminal VT100 som hade vita tecken på svart bakgrund... Men sedan så kom VT220, som man hade möjlighet att köpa i "amber", det vill säga en brun/orange färg (bärnsten) och den sades vara mer vilsam för ögonen och det var den nog också.... :)

Jag kör fortfarande svart terminal med gröna tecken och det funkar alldeles utmärkt.... ;D

[EDIT] Fast terminalen jag kör (LXterminal) kan visa andra färger också, vilket är perfekt för t.ex vim....
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
Användarvisningsbild
anth
Inlägg: 511
Blev medlem: 22 aug 2019, 15:35
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster

Re: Kul för nybörjare med bash i terminalen

Inlägg av anth »

Osprey skrev:ag kör fortfarande svart terminal med gröna tecken och det funkar alldeles utmärkt.... ;D

[EDIT] Fast terminalen jag kör (LXterminal) kan visa andra färger också, vilket är perfekt för t.ex vim....
Det är otroligt hur lite färg kan påverka upplevelsen.
Den största skillnaden mellan top och htop är färger och musstöd - och de två programmen känns som olika världar.
Dagens ungdom är så bortskämd att det är svårt att tänka sig en tid då både upplösning och färgdjup var en lyxvara.
Jag kommer fortfarande ihåg när jag kom från mina speldatorer (VIC-20, VIC-64, Amiga) med hundratals färger och satte mig framför en IBM-PC för första gången: det var CGA-grafik. Det betydde 4 färger: vitt, svart, cyan och magenta.
Det var sååå vackert... NOT :)
Bild
Användarvisningsbild
Osprey
Inlägg: 6310
Blev medlem: 06 apr 2008, 00:09
OS: Ubuntu
Ort: Göteborg/Mölndal/Falkenberg
Kontakt:

Re: Kul för nybörjare med bash i terminalen

Inlägg av Osprey »

anth skrev:
Osprey skrev:Jag kör fortfarande svart terminal med gröna tecken och det funkar alldeles utmärkt.... ;D

[EDIT] Fast terminalen jag kör (LXterminal) kan visa andra färger också, vilket är perfekt för t.ex vim....
Det är otroligt hur lite färg kan påverka upplevelsen.
Jamen vim är ju också "language sensitve" så den märker om man missar en "else", "endif", "{", eller "}". Den ändrar alltså färg om man missat något i syntaxen för det språk man skriver i (t.ex bash, eller "C")....

Så det där är inte enbart en fröjd för ögat, utan underlättar också programmering rätt mycket.... ;D

[EDIT] Nä en miss av "else" kan den givetvis inte märka, men annars så.... ;D ;D
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
Användarvisningsbild
anth
Inlägg: 511
Blev medlem: 22 aug 2019, 15:35
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster

Re: Kul för nybörjare med bash i terminalen

Inlägg av anth »

Figlet är ett av sätten man kan göra banners i Linux.
$ sudo apt install figlet
$ figlet Hello World!

ger:

Kod: Markera allt

 _   _      _ _        __        __         _     _ _ 
| | | | ___| | | ___   \ \      / /__  _ __| | __| | |
| |_| |/ _ \ | |/ _ \   \ \ /\ / / _ \| '__| |/ _` | |
|  _  |  __/ | | (_) |   \ V  V / (_) | |  | | (_| |_|
|_| |_|\___|_|_|\___/     \_/\_/ \___/|_|  |_|\__,_(_)
Man kan kombinera med andra program som fortune och lolcat:
$ fortune | figlet
$ figlet Hello World! | lolcat


Dessa producerar samma resultat:
$ figlet Hello World!
$ figlet 'Hello World!'
$ figlet "Hello World!"


Figlet stödjer inte åäö. Om man skriver:
$ figlet ÅÄÖåäö
så blir det en text, men inte i min vildaste fantasi skulle jag kalla det för ÅÄÖ.

Figlet stödjer dock tyska, men då måste man skriva inom citationstecken. [\]{|} blir ÄÖÜäöü.
figlet -D "[\]{|}"

Figlet klarar av radbrytningar
$ echo -e "Hello\nWorld!" | figlet
Echo -e gör att man kan använda escape chracters med echo, och \n betyder "new line".

Figlet kan även ta bort radbrytningar med -p:
$ echo -e "Hello\nWorld!" | figlet -p

Figlet kan skriva ut från filer:
$ echo "The quick brown fox jumps over the lazy dog" > pangram.txt
$ figlet < pangram.txt


Figlet har flera typsnitt:
$ ls /usr/share/figlet/
Det finns: banner, big, block, bubble, digital, ivrit, lean, mini, memonic, script, shadow, slant, small, smcript, smshadow, smslant, standard, term.
Testa:
$ figlet -f script Hello World!
Det vanliga typsnittet som används om man inte specificerar något är "standard" och "ivrit" skriver baklänges.

Texten kan även justeras: -l vänsterställd, -c centrerar och -r högerställd.
$ figlet -r Hello World!
Vid första anblick verkar -l meningslös, men den kan användas med typsnittet ivrit.

Om ni kör terminalen i fullskärmsläge ser ni att -r inte flytter texten längst ut till höger. Det beror på att figlet förutsätter att terminalen är 80 tecken bred.
Detta kan ändras med -w där man specificerar hur många tecken bred terminalen är, eller -t som använder hela terminalbredden. Vill man ha högerställtext i en 160 tecken bred terminal skriver man:
$ figlet -rw 160 Hello World!

Figlet skriver samman alla bokstäver. Vill man ha avstånd mellan bokstäverna använder man -k.
$ figlet -k Hello World!
Användarvisningsbild
anth
Inlägg: 511
Blev medlem: 22 aug 2019, 15:35
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster

Re: Kul för nybörjare med bash i terminalen

Inlägg av anth »

SSH är det vanliga sättet man brukar använda för att kommunicera mellan datorer i Linux.
(det utvecklades från början till BSD, Linux syster-OS som också bygger på UNIX)
Detta kräver alltså TVÅ datorer och att dessa ser varandra på nätet.
Det borde räcka med med två laptops på ens hem-wifi.

Först måste vi ta reda på vad de har för IP-adress. Och för att göra det måste vi veta vad Linux döpt nätverkskorten till.

För att lista filerna i en katalog skriver man:
$ ls
I Linux är ALLT "filer", även fysiska saker.
Vill man lista alla enheter skriver man:
$ ls /dev
Vill man lista alla processer skriver man:
$ ls /proc
Och vill man lista nätverkskorten:
$ ls /sys/class/net

Förr använde Linux logiska namn som eth0 för ett vanligt nätverkskort som använde ethernet och wlan1 för trådlöst WiFi.
Numera brukar man använda mer kryptiska namn.
På min gamla laptop har jag: eth0 lo wlan0.
På min nya laptop har jag: lo wlp1s0.
Alla datorer som har nätverk har lo, Det är så datorn refererar till sig själv. Den egna datorn, lo, har IP 127.0.0.1, det är "hem"-adressen, eller "local".
Då jag inte vet vad ditt nätverkskort heter kommer jag konsekvent skriva eth0, byt ut det mot vad ditt kort heter.

Nu ska vi ta reda på vad datorn heter på nätet:
$ ip address
Det går även bra att skriva ip addr eller ip a, de gör exakt samma sak.
Det listar alla nätverksanslutningar.
Först kommer lo som har inet 127.0.0.1.
Inet är IPv4, en vanlig IP-adress, d.v.s. fyra nummer mellan 0-255.
Inet6 är det nyare IPv6 som vi struntar i (nästan inga hemdatorer använder det).
Sedan kommer nästa nätverk som förhoppningsvis heter eth0. Kom ihåg de fyra numren efter inet.
Vanliga hemnätverk brukar ha ett 192.168.0.XX-nät och jag kommer använda det i exemplen nedan. Byt ut det mot vad ditt nät och datorer heter.
Min ena dator har fått adressen 192.168.1.107 och den andra 192.168.1.109 - men jag kommer kalla dem för 192.168.0.10 och 192.168.0.100.

Försök pinga den ena datorn från den andra. Sitter jag framför 192.168.0.10 skriver jag:
$ ping 192.168.0.100
Förhoppningsvis får man ett svar i stil med:
64 bytes from 192.168.0.100: icmp_seq=1 ttl=64 time=3.45 ms
Man avslutar ping med CTRL+C, annars fortsätter det i evighet.

Då har vi förhoppningsvis två datorer som ser varandra på nätet.
Nu ska vi se om vi har SSH installerat.
$ apt search openssh-client
min dator svarar:

Kod: Markera allt

openssh-client/focal-updates,focal-security,now 1:8.2p1-4ubuntu0.2 amd64 [installed,automatic]
  secure shell (SSH) client, for secure access to remote machines
Den säger [installed,automatic] vilket är vad jag vill se.
Sedan provar vi:
$ apt search openssh-server
Nu får jag svaret:

Kod: Markera allt

openssh-server/focal-updates,focal-security 1:8.2p1-4ubuntu0.2 amd64
  secure shell (SSH) server, for secure access from remote machines
Här är paketet inte installerat.
Det vanliga i de flesta distros är att klienten är installerad, men inte servern.
I vissa distros finns bara ett paket som heter openssh, det innehåller både klienten och servern.
Välj en dator som ska bli server och installera:
$ sudo apt install openssh-server
Det går utmärkt att installera servern på bägge maskinerna, det enda man behöver hålla reda på är att datorn man sitter vi är klient och datorn man inte sitter vid är server.
I nedanstående exempel är klienten 192.168.0.10 och 192.168.0.100 servern.

Ta en titt på vad det står i prompten i terminalerna i datorerna. Det borde stå något i stil med:
user@computer:path$
Förhoppningsvis har ni inte döpt datorerna till samma sak. Det är inget problem om de heter samma, men det är svårare att se på vilken maskin man är inloggad.
Nedan låter jag 192,168.0.10 ha adam@client:~$ och 192.168.0.100 ha bertil@server:~$.

På klienten skriver vi:
$ ssh user@server-ip
I mitt fall blir det:
$ ssh bertil@192.168.0.100
Första gången man ansluter får man ett meddelande i stil med:
The authenticity of host '192.168.1.107 (192.168.0.100)' can't be established.
ECDSA key fingerprint is SHA256:abcdefghijklmnopqrstuvwxyz.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Skriv yes och tryck RETUR.
Skriv sedan användaren på serverdatorns lösenord och tryck RETUR.
Nu ska prompten ha ändrats till serverdatorn och kommandona du skriver utförs på servern, inte på klienten.

Det finns tre sätt att lämna servern (förutom att stänga terminalfönstret): skriva exit, logout, eller trycka CTRL+C.

Nu har det slutat regna och solen tittar fram så det får räcka för idag.
Nästa gång tänkte jag skriva om hur man ansluter från Windows, hur man flyttar filer mellan datorerna och hur man gör en säkrare anslutning med nycklar.
:)
Användarvisningsbild
anth
Inlägg: 511
Blev medlem: 22 aug 2019, 15:35
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster

Re: Kul för nybörjare med bash i terminalen

Inlägg av anth »

SSH del 2

Det är praktiskt att komma åt en annan dator coh köra kommandon där, men en av anledningarna till att man kopplar ihop två datorer är att man vill kopiera filer mellan dem.

Det vanliga kopieringakommandot cp fungerar så här:
(det spelar ingen roll om du är uppkopplad med ssh mot den andra datorn, eller om du loggat ut och är tillbka på den lokala datorn)

Kod: Markera allt

mkdir one two
echo "hello" > one/source
cp one/source two/target
cat one/source two/target
rm -rf one two
Förklaring:
mkdir one two skapar två kataloger, du kan kontrollera med ls.
echo "hello" > one/source skapar filen source med texten hello i katalogen one, du kan använda nano istället.
cp one/source two/target kopierar filen source från katalogen one och döper om den till target i katalogen two.
cat one/source two/target skriver ut filerna, både source som vi skapade och target som vi kopierade.
rm -rf one two tar bort bägge katalogerna med allt innehåll. VARNING! -rf tar bort allt i underkataloger utan att fråga. Programmet förutsätter att du vet vad du gör och att du vill ta bort.

Låt oss använda scp istället. Se det som ssh cp.
Logga ut från servern.
Kör

Kod: Markera allt

echo "test" > test1
scp test1 bertil@192.168.0.100:test2
ssh bertil@192.168.0.100
cat test2
Förklaring:
echo "test" > test1 skapar en filen test1 lokalt.
scp test1 bertil@192.168.0.100:test2 kopierar den lokala filen test1 och döper om den till test2.
Du kan givetvis skriva sökvägar som scp one/test1 bertil@192.168.0.100:~/two/test2.
Och du kan självklart kopiera från servern till klienten: scp bertil@192.168.0.100:~/two/test2 one/test1.
ssh bertil@192.168.0.100 logga in på servern och kolla med cat test2 att filen är kopierad.

Jag har faktiskt inte hunnit testa vad som händer när man kopiera till/från "säkra" kataloger, t.ex. om man vill kopiera från /etc på klienten till /etc på servern. Normalt behöver man sudo på bägge sidor om man inte är root.

Förutom scp finns sftp. Se det som ssh ftp. Har ni arbetat med hemsidor har ni antagligen använt ftp, som står för file transfer protocol, för att flytta filer.
Se till att ha någon fil på klienten som inte finns på server och vise versa. Logga ut från servern och skriv:
$ sftp bertil@192.168.0.100
Prompten kommer nu att ändras till:
sftp>
Prova skriv help. Man kan även skriva ? för hjälpen.
Man kan avsluta med bye, exit, quit.
Kommandona ls, cd, pwd gäller för servern. För klienten använder man !, så här: !ls, !cd, !pwd. Ibland kan man använda l så här: lls, lcd, lpwd. Se hjälpen.
För att ladda ner en fil använder man get file, där file är en fil som finns på servern, men inte på klienten.
För att ladda upp en fil använder man put file, där file är en fil som finns på klienten, men inte på servern.
Användarvisningsbild
anth
Inlägg: 511
Blev medlem: 22 aug 2019, 15:35
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster

Re: Kul för nybörjare med bash i terminalen

Inlägg av anth »

SSH del 3

Att använda ssh från Windows 10 skiljer sig inte från linux.
Från Windows 10 ska ssh vara installerat från början.
Börja testa att pinga mellan windows och linux så man inte har någon brandvägg eller liknande emellan som blockar.
Sedan är det bara att öppna cmd eller powershell och använda ssh, scp och sftp.

Skulle det inte fungera, gå till:
inställningar < appar > appar och funktioner > valfria appar > Lägg till en funktion : OpenSSH-klient eller OpenSSH-server
Precis som i Linux brukar klienten vara installerad, men inte servern.

Man kan även kontrollera direkt i powershell med kommandot:
Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
Glöm inte att trycka Retur efter att du klistrat in.

Jag fick detta som svar:

Kod: Markera allt

Name  : OpenSSH.Client~~~~0.0.1.0
State : Installed

Name  : OpenSSH.Server~~~~0.0.1.0
State : NotPresent
För att installera servern skriver man
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Ni får själva räkna ut vad man skriver för klienten. :)
Förutom att installationen av servern tar tio gånger längre tid i Windows än Linux fungerar det på samma sätt.

Innan OpenSSH fanns till Windows fanns det andra sätt att ansluta från Windows.
De vanligaste är
PuTTY som låter en ansluta med SSH och sedan öppnar ett terminalfönster.
WinSCP som låter en kopiera filer mellan datorer via två grafiska fönster (ser ut lite sm ett grafiskt ftp-program).
FileZilla. Antagligen det vanligaste ftp-programmet som finns både till Linux och Windows. det klarar även av sftp.
Jag är säker på att ni klarar av alla tre om ni kommit så här långt.

###

En liten varning:
Windows använder sig av andra filformat än Linux.
Normalt kan man kopiera bilder och filmer utan problem, men man kan få problem med vanliga textfiler.
Det har att göra med att Windows använder andra format för line feed och end of line.
Windows skriver CRLF (\r\n, 0D 0A) line endings
Linuxx skriver LF (\n, 0A).

Linux använder UTF-8.
Windos använder UTF-16LE

Windows använder BOM, vilket inte Linux gör.
Smidigast är att använda Notepad++ i Windows och spara filerna "without BOM"

Men det är utanför ämnet för den här tråden.

EDIT:
1. Efter att man installerat OpenSSH Server i Windows måste man aktivera den.
Det görs i Tjänster/Services.
Öppna tjänster, leta reda på "OpenSSH SSH Server", högerklicka och välj Starta.
Det har samma effekt som sudo systemctl start sshd i Linux.
Vill man ha motsvarande som enable i Linux, måste man högerklicka och välja Egenskaper/Properties, för att sedan ändra Startmetod från Manuellt till Automatiskt.

2. I windows kan man bara avsluta en SSH-anslutning med exit. Logout eller ctrl+c fungerar inte.

3. Jag har inte fått keys att fungera i windows. De ska fungera, men jag inte får dem att fungera.
Senast redigerad av 1 anth, redigerad totalt 14 gånger.
Användarvisningsbild
anth
Inlägg: 511
Blev medlem: 22 aug 2019, 15:35
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster

Re: Kul för nybörjare med bash i terminalen

Inlägg av anth »

SSH, del 4

Låt oss se hur man konfigurerar ssh

På klienten, gå till:
$ cd ~/.ssh
Visa vad som finns:
$ ls
Det borde bara finnas en fil som heter known_host
Den innehåller en lång kodsträng för varje dator man kopplat upp sig mot.
Det gör inget om man raderar filen, det enda som händer när man försöker ansluta nästa gång är att man får frågan om man vill koppla upp sig som man fick första gången - och filen skapas igen.

Skapa en ny fil i .ssh-katalogen:
$ touch config
redigera filen med din favoritredigerare, t.ex. nano:
$ nano config

Lägg till följande:

Kod: Markera allt

Host minfavoritserver
  Hostname 192.168.0.100
  Port 22
  User Bertil
Spara och stäng. Nu kan du ansluta med:
$ ssh minfavoritserver
Man kan givetvis döpa sina anslutningar till precis vad man vill.
Har man fler ssh-anslutningar är det bara att lägga till dem i filen.

Låt oss titta på servern
Här heter programmet sshd
D står för att det är en daemon, d.v.s. en tjänst som kör i bakgrunden, eftersom man kan logga in när man vill.
Gå till:
$ cd /etc/ssh
och se vad som finns:
$ ls
En av filerna är sshd_config, se vad den innehåller:
$ less sshd_config

Det finns några rader som är intressanta:
#Port 22
...
#PermitRootLogin yes
...
#PasswordAuthentication yes


Som ni säkert räknat ut använder sig ssh av port 22.
Om man ändrar till en annan port både på klienten och servbern blir det lite svårare för en hackare att ta sig in (inte mycket, men lite svårare).
Max port man kan välja är 65535.
Man bör inte logga in som root, så ändra från yes till no.
Jag kommer lite senare visa hur man loggar in med nycklar istället för lösenord. När ni börjat använda nycklar kan ni ändra till no efter PasswordAuthentication.

Tänk på att i /etc måste ni använda sudo för att göra ändringar.
$ sudo nano /etc/ssh/sshd_config

Glöm inte att ta bort # före de saker ni vill använda. #, // och ; används för kommentarer och de "körs" aldrig.

Efter man sparat och stängt filen måste man starta om tjänsten med systemctl.
Här är några av de vanligaste kommandona som systemctl använder: status, enable, disable, start, stop, restart, reload.
Börja kolla statusen:
$ systemctl status sshd
Enable/disable bestämmer om tjänsten ska startas när datorn startas. Observera att det inte påverkar datorn nu, utan bara nästa gång datorn startas om.
Så väljer man enable betyder det inte att tjänsten startas nu. Och väljer man disable så betyder det inte att tjänsten stoppas nu. För det behöver man start och stop.
Restart är som att först köra stop och sedan start. Reload däremot stoppar tjänsten, laddar in konfig-filen igen och startar sedan.
Eftersom vi ändrat konfig-filen vill vi använda reload:
$ sudo systemctl reload sshd
Observera att nu måste vi använda sudo.

Nästa gång kommer vi förhoppningsvis till keys som är det HÄFTIGASTE med ssh!
Användarvisningsbild
anth
Inlägg: 511
Blev medlem: 22 aug 2019, 15:35
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster

Re: Kul för nybörjare med bash i terminalen

Inlägg av anth »

SSH del 5
Vad är nycklar och varför ska man använda dem?
Även om du aldrig använt nycklar använder din dator dem hela tiden.

Säkra nycklar kommer i par: en privat nyckel och en publik.
Det vanliga sättet att använda nycklar är:
Alice krypterar ett meddelande med sin privata nyckel och Bobs publika nyckel, hon skickar sedan det krypterade meddelandet till Bob.
Bob dekrypterar sedan meddelandet med sin privata nyckel och Alices publika nyckel.
Man krypterar alltså med den ena nyckeln och dekrypterar med den andra i nyckelparet.
Det bästa av allt är att även om man har tillgång till en publik nyckel kan man inte knäcka den privata - det är denna finess som gör systemet säkert.

Först skapar man ett nyckelpar:
$ ssh-keygen
Programmet frågar tre saker: var nycklarna ska sparas, vilken passphrase man ska ha och bekräfta passphrase igen.
Just nu räcker det att trycka Retur tre gånger.

Nycklarna sparas här:
$ ls ~/.ssh
De heter id_rsa och id_rsa.pub.
Rsa är krypteringsformatet och pub är den publika nyckeln.
Så länge man inte använder nycklarna kan man radera dem och skapa nya (det blir helt nya unika nycklar varje gång):
$ rm ~/.ssh/id_rsa*

Rsa är inte det säkraste formatet, det är ed25519. Prova:
$ ssh-keygen -t ed25519
Nycklarna heter nu id_ed25519 och id_ed25519.pub.

Prova att se vad den publika nyckeln innehåller:
$ cat ~/.ssh/id_ed25519.pub
Det borde se ut ungefär så här:
ssh-ed25519 kljfadlkjawefhusdhnlkjsdfhkljsdfahlkjh user@computer
Först kommer info om vilken sorts nyckel det är, sedan själva nyckeln, sist vem som skapat nyckeln.

Låt oss återgå till de tre frågorna man får när man skapar nycklar.
Om man fyller i sökvägen kan man välja ett annat namn på den privata nyckeln. Välj ett namn som gör det lätt att identifiera vem som skapat nyckeln, t.ex: user_computer_id_ed25519.
Välj även en passphrase, det är som ett lösenord för nyckeln.

Det går även utmärkt att döpa om filerna efter man skapat dem:
$ mv ~/.ssh/id_ed25519 ~/.ssh/hejhopp && mv ~/.ssh/id_ed25519.pub ~/.ssh/hejhopp.pub
Observera att man använder komandot för att flytta filer, mv, när man döper om filer.

När du skapat ett nyckelpar du vill använda och raderat de nycklar du inte vill använda är det dags att ladda upp den publika nyckeln till servern:
$ ssh-copy-id -i ~/.ssh/id_ed25519.pub minfavoritserver
Ersätt med id_ed25519 med vad du döpt filen till.
Ersätt minfavoritserver med vad du döpte servern till i config, eller använda den vanliga anslutningen bertil@192.168.0.100
Logga in precis som om du skulle ansluta till servern.
Datorn ska svara:
Number of key(s) added: 1

Prova att logga in.
Om du använt passphrase kommer en ruta upp som frågar om lösenordet till nyckeln. Du ska fylla i din passphrase och inte något lösenord. Detta behöver man bara fylla i en gång, logga ut och anslut igen så ser du att ingen passphrase behövs igen.

Se vad som hänt i .ssh-katalogen på servern:
$ ls ~/.ssh
Där finns en ny fil: authorized_keys
Se vad den innehåller:
$ cat ~/.ssh/authorized_keys
Det är klientens publika nyckel!

Nu när man kan logga in med nycklarna är det dags att stänga ssh-inloggning med lösenord. Gå till:
$ sudo nano /etc/ssh/sshd_config
ändra
#PasswordAuthentication
till
PasswordAuthentication no
spara och stäng. Starta om tjänsten:
$ systemctl reload sshd

Nu är anslutningen så säker som den kan bli.
Användarvisningsbild
anth
Inlägg: 511
Blev medlem: 22 aug 2019, 15:35
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster

Re: Kul för nybörjare med bash i terminalen

Inlägg av anth »

De flesta är bekanta med zip-filer från Windows.
- Man kan markera flera filer, högerklicka, och komprimera dem till en zip-fil.
- Man kan högerklicka på en zip-fil och extraherar de komprimerade filerna.
Linux fungerar på nästan samma sätt. Istället för fil.zip brukar det heta fil.tar.gz. Man tankar ner filen, öppnar filhanetraren, högerklickar på filen och väljer extrahera.
Men hur gör man i terminalen?

$ tar -zxvf fil.tar.gz

Men vad betyder -zxvf och vad är tar och gz?

Först måste vi ha något att komprimera, t.ex. Lorem Ipsum:
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Gå till hemkatalogen och skapa två testkataloger:

Kod: Markera allt

cd
mkdir test1 test2
ls -l
Skapa 4 testfiler:

Kod: Markera allt

echo "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." > test1/fil1

cp test1/fil1 test1/fil2
cp test1/* test2
Testa att det fungerade

Kod: Markera allt

cat test2/fil2
Testa att komprimera:

Kod: Markera allt

cd test1
ls -l
gzip fil1
ls -l
Som ni ser har fil1 förvandlats till en mindre fil som heter fil1.gz
Det som händer är att gzip först skapar en komprimerad gz-fil, sedan raderar originalfilen.

Testa att extrahera:

Kod: Markera allt

ls -l
gzip -d fil1.gz
ls -l
Nu skapades en extraherad fil och den komprimerade filen raderades.
-d står för decopmpress. Man kan även använda komandot gunzip.

Skriv
gzip -k fil1
Om man vill behålla originalfilen.

Skriv
gzip -c fil1 > nytt_filnamn.gz
Om man vill att den nya filen ska ha ett annat namn.

Nu kommer vi till problemet med gzip.
Säg att vi vill komprimera både fil1 och fil2.
Eftersom "*" är ett wildcard kan vi skriva fil*.

Kod: Markera allt

gzip fil*
ls -l
Och Linux har gjort precis vad vi bad om: den komprimerade fil1 till fil1.gz och fil2 till fil2.gz.
Men vi hade nog tänkt oss att fil1 och fil2 skulle hamna tillsammans i en ny gz-fil.

###

Unzippa filerna så fortsätter vi med tar:

Kod: Markera allt

gunzip fil*
ls -l
Tar-filer brukar kallas tar-balls (tjärbollar), men tar står för "Tape ARchive".
Tar förvandlar flera mindre filer till en (okomprimerad) stor fil.
tar -f anger filnamnet (måste vara med)
tar -v skriver vad som händer (är valfritt, men det är bra med extra information)
tar -c komprimerar
tar -t visar innehållet
tar -x extraherar
Låt oss testa:

Kod: Markera allt

tar -cf arkiv.tar fil1 fil2
ls -l
tar -tvf arkiv.tar
rm fil*
ls -l
tar -xf arkiv.tar
ls -l
rm fil*
ls -l
tar -xf arkiv.tar fil1
ls -l
tar -xf arkiv.tar fil2
ls -l
rm arkiv.tar
Observera att oavsett om man komprimerar eller extraherar filer så skriver man fil.tar först och övriga filer sen.
Först skapade vi en ny fil, arkiv.tar, som innehåller både fil1 och fil2.
Sedan tittar vi på vad tar-filen innehåller (inte helt förvånande fil1 och fil2).
Sedan raderar vi bägge filerna för att visa att tar kan ta fram dem igen.
Sedan raderar vi bägge filerna igen för att visa att tar kan ta fram enskilda filer ur tar-filen.

Nu har ni nog räknat ut hur fil.tar.gz fungerar:
Först använder man tar för att lägga ihop flera filer till en arkivfil, sedan använder man gzip för att komprimera arkivfilen.
Men Linux är smartare än så. tar har gzip inbyggt:
tar -z anropar gzip
tar -j anropar bzip2, som är ett annat komprimeringsformat som använder ändelsen bz2 istället för gz.

Låt oss testa allt på en gång.

Kod: Markera allt

tar -zcvf arkiv.tar.gz fil1 fil2
tar -ztvf arkiv.tar.gz
rm fil*
ls -l
tar -zxvf arkiv.tar.gz
rm arkiv*
ls -l
Först arkiverade och komprimerade vi filerna.
Sedan tittade vi på vad den komprimerade filen innehöll.
Sedan extraherade vi filerna.
Och avslutade med att ta bort akriv-filen.

###

Avslutningsvis:

Kod: Markera allt

cd ..
tar -zcvf arkiv.tar.gz test1 test2
ls -l
Som ni ser kan tar även arkivera och komprimera kataloger.
Nu har ni lärt er det mesta tar och gzip. :)
Användarvisningsbild
anth
Inlägg: 511
Blev medlem: 22 aug 2019, 15:35
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster

Re: Kul för nybörjare med bash i terminalen

Inlägg av anth »

Alla har någon file manager de tycker om, oavsett om det är nautilis, dolphin, nemo, thunar.

Men det finns även två filhanterare till terminalen:

Ranger är en filhanterare baserad på vim-kommandona, så en snabb repetition kan behövas:
H - vänster
J - Ned
K - Upp
L - Höger
Q - Quit
Ett program om man vill se ut som en hacker.

MC är en förkortning av midnight commander, som i son tur är en klon av det gamla MS-DOS-programmet Norton Commander.
Riktigt trevligt med stöd för mus.
Användarvisningsbild
anth
Inlägg: 511
Blev medlem: 22 aug 2019, 15:35
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster

Re: Kul för nybörjare med bash i terminalen

Inlägg av anth »

Shell scripting

Det här är ett jättestort ämne som det skrivits massor med böcker om.
Jag förklarar bara hur man kommer igång, sedan får ni själva googla. Det finns massor med sajter och videor som förklarar scripting för nybörjare.

Man kan göra massor med saker i terminalen:

Skriva ut text:
echo Hej kompis!

Skriva text till en fil:
echo Hej kompis! > textfil
cat textfil


Utföra flera kommandon samtidigt, t.ex. uppdatera och uppgradera systemet samtidigt:
sudo apt update && sudo apt upgrade -y

Man kan nästan göra vad som helt i teminalen, men det tar tid att skriva långa kommandon - och det är här som skript kommer in i bilden.
Ett skript är en textfil som kan innehålla flera rader med kommandon. På så sätt behöver man inte skriva alla kommandon för hand, utan det räcker att köra skript-filen.

Låt oss skriva ett litet skript.
Öpnna din favorittexteditor
Skriv följande:

Kod: Markera allt

#!/bin/bash
# Fråga någon vad denne heter
echo Vad heter du?
read namn
echo Hej $namn
Spar texten som test1.sh i din hemkatalog.

Vad har vi gjort?
Man brukar döpa shell script till någonting.sh för att man ska veta att det är ett skript. Det behöver inte sluta med .sh, men det är lättare för oss människor att se vilka filer som är skript om man använder filtillägget .sh.

Första raden: #!/bin/bash berättar för Linux att detta är ett skript. #! brukar kallas hashbang.

Andra raden börjar med # och är en kommentar. Man kan ha hur många kommentarer man vill och skriva vad man vill, bara de börjar med #. Skriptet ignorerar alla kommentarer, de är bara till för oss människor som läser skriptet.
Och man ska ha många kommentarer. Även om detta skript är lätt att förstå kan skript vara flera hundra rader kod och även om man skrivit skriptet själv kommer man garanterat ha glömt bort vad det gör efter något år - då är kommentarer som förklarar vad skriptet gör guld värda!

Tredje raden är bara echo som skriver ut text på skärmen.

Fjärde raden börjar med read, vilket betyder att skriptet förväntar sig input från tangentbordet. Efter read är en variabel. I det här fallet har jag kallat variabeln för namn, eftersom jag frågar efter användarens namn. Man kan använda kryptiska variabelnamn som x, men det är bäst att variabelnamn som beskriver vad variabeln används till.
Observera att variabler normalt börjar med $-tecken, men man har inget $-tecken efter read.

Femte raden är echo igen som skriver ut Hej $namn, men eftersom vi på raden ovanför skapade variabeln $namn skriver skriptet ut det användaren skrev på tangentbordet.

Låt oss se om de fungerar. Öppna terminalen, gå till din hemkatalog och skriv
test1.sh
Du borde få felmeddelandet:
bash: test1.sh: command not found...
Det beror på att terminalen inte vet var ditt skript är sparat.
Skriv kommandot:
ls -la
Det visar alla filer, även dolda, i en lista.
Överst i listan finns de dolda filerna . och ..
Du kanske känner igen .., som är katalogen ett steg upp och man brukar använda kommandot
cd ..
för att hoppa upp ett steg.
Men filen . är katalogen man är i just nu.
För att terminalen ska veta attt skriptet ligger i den här katalogen skriver man
./test1.se
Men nu får vi felmeddelandet:
bash: ./test1.sh: Permission denied
Vi måste tala om för terminalen att vårt skript är en körbar fil, d.v.s. ett litet program.
Skriv:
ls
Du ser filerna i din hemkatalog; kataloger är blå och textfiler, inklusive skriptet, är vita.
Skriv kommandot:
chmod u+x test1.sh
Nu har vi ändrat/modifierat rättigheterna för skriptet. U är user, d.v.s. du. +X betyder att nu är skriptet eXeverbart, d.v.s. att man köra skriptet.
Testa att skriva ls igen och du ser att test1.sh har ändrat färg från vit till grön. Alla körbara filer är gröna.
Nu kan du körs skriptet:
./test1.se

Avslutningsvis tänkte jag ge ett exempel på ett längre skript.
Har du Neofetch installerad? Om inte, installera:
sudo apt install neofetch
Neofetch är inte ett program, utan ett skript.
Först tar vi reda på var Neofetch finns:
which neofetch
eller:
whereis neofetch
Oavsett var blir svaret:
/usr/bin/neofetch
Gå till katalogen /usr/bin
cd /usr/bin
och lista innehållet:
ls n*
Och där borde det finnas en grön fil som heter neofetch.
Observera att jag bara listade filer som började på n (n*). Det beror på att den katalogen innehåller flera tusen filer.
Observera också att Neofetch inte slutar med .sh.
Öppna filen med:
less neofetch
Jag använder less, dels för att neofetch innehåller mer än tiotusen rader kod, dels för att neofetch är skrivskyddad.
Vill du leka med neofetch föreslår jag att du kopierar filen till din hemkatalog.
Användarvisningsbild
anth
Inlägg: 511
Blev medlem: 22 aug 2019, 15:35
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster

Re: Kul för nybörjare med bash i terminalen

Inlägg av anth »

Har ni någon gång undrat vad de spelade för spel förr i tiden?
Nu talar vi inte 1990-talet då man spelade minsvepare, reversi och patiens i Windows.
Nu talar vi inte om 1980-talet då man spelade på Commodore VIC20, ZX-80, Atari och ABC80.
Vi talar om 1970-talet.
Fanns det ens spel då?
Självklart!
Ett datorspel är bara ett datorprogram gjort för att roa. Ni kan ger er tusan på att så fort man kunde koda program så var de första programmen för rekreation. D.v.s. spel.

Tydligen har någon på Linux syster-OS BSD, samlat ihop de gamla UNIX-spelen, sedan har någon portat dem till Linux, för paketet heter bsd games:
sudo apt install bsdgames

Vilka spel installeras och hur startar man dem? Skriv:
apt show bsdgames
och se vad som står längst ner
It includes these programs: adventure, arithmetic, atc, backgammon,
battlestar, bcd, boggle, caesar, canfield, countmail, cribbage, dab,
go-fish, gomoku, hack, hangman, hunt, mille, monop, morse, number,
pig, phantasia, pom, ppt, primes, quiz, random, rain, robots, rot13,
sail, snake, tetris, trek, wargames, worm, worms, wump, wtf
Kolla på den här sidan vad de gör:
(Som ni ser innehåller Ubuntupaketet bara en bråkdel av BSD-spelen)
https://wiki.linuxquestions.org/wiki/BSD_games
Först står spelen i bokstavsordning, längre ner är samma spel grupperade efter vilken sorts spel det är. Skolla ner och se vilken sorts spel ni vill spela.
Använd sedan man för det spel ni vill spela för instruktioner, t.ex.
man worm
För att starta spelet skriver man bara spelets namn:
worm

(worm är för övrigt det spel som hette snake i Nokia-telefoner: man styr en orm med hjkl (eller med piltangenterna om man inte tycker om vim). Ät siffror, bli längre, kör inte in i något)
Användarvisningsbild
anth
Inlägg: 511
Blev medlem: 22 aug 2019, 15:35
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster

Re: Kul för nybörjare med bash i terminalen

Inlägg av anth »

Jag hittade mer gamla spel:
sudo apt install bsdgames-nonfree

Just nu kör min dator Debian, inte Ubuntu, och detta paket ligger i Debians nonfree-förråd.
Jag gissar att bsdgames-nonfree igger i Ubuntus restricted eller Multiverse förråd.
Har du inte alla förråd aktiverade kommer du inte att kunna installera.

Hur många fler spel fick vi nu efter att ha installerat paketet?
ETT spel, men inte vilket som helst!
Det är rogue, originalet!
Om du någon gång läst att ett spel är "roguelike" så menar man att det liknar det här spelet.
Lustigt nog finns ett roguelike spel i bsdgames, nämligen hack, som är mer avancerat än rogue.

rogue och hack spelas på samma sätt och jag rekommenderar man man läser man för hack istället för rogue, då den förklarar bättre vad man ska göra.
man hack
Jag hittade även originalmanualen till rogue om man köpte spelet 1980:
https://britzl.github.io/roguearchive/f ... manual.htm

Här kommer en snabbkurs:
Man utforskar grottor (Dungeons of Doom).
Man är @ på kartan.
Under kartan finns lite info som xp, hp, guld, level.
Man förflyttar sig med vim-tangenterna hjkl.
Det finns 26 monster, representerade av bokstäverna A-Z.
Man slåss med ett monster genom att gå in i monstret och det är slumpmässigt vad som händer.
Man kommer åt hjälp med ?
Man kommer åt föremål med /
Man sparar med S (skift+s)
Man slutar med Q (skift+q)
Om det står --More-- trycker man mellanslag, precis som med terminalkommandot more.
För att backa ur en meny trycker man Esc.

EDIT:
bsdgames-nonfree ligger i Ubuntus Multiverseförråd
https://packages.ubuntu.com/search?suit ... chon=names
Användarvisningsbild
anth
Inlägg: 511
Blev medlem: 22 aug 2019, 15:35
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster

Re: Kul för nybörjare med bash i terminalen

Inlägg av anth »

När jag ändå håller på kan jag lika gärna gå igenom alla spel till terminalen...

...vid närmare eftertanke nöjer jag mig med de spel som finns i Ubuntus förråd.

Skulle jag ta med alla konsol-spel som finns på github, gitlab, sourceforge, o.s.v. blir resultatet fyrsiffrigt.
Se det istället som ett tips för er som inte tycker att nedanstående räcker, utan vill ha mer spel.

###

Det finns massor med rogue-kloner, låt oss klara av dem först.
I inlägget ovan bskrev jag originalet rogue och hack.

sudo apt install angband
angband

En av de mer kända (och större) rogue-klonerna. Ett bra början om man vill prova ett roguelike spel.
Avsluta med Q.

sudo apt install zangband
zangband

En tokigare version av angband.

sudo apt install nethack-console
nethack

En rogue-klon, se inlägget ovan. Man avslutar med ctrl+c.

sudo apt install moria
moria

Roguelike, ta dig ner till level 50 och döda Balrogen.
Avsluta med Q.

sudo apt install omega-rpg
omega-rpg

Ett till roguelike spel, men med en tvist: man kan spela sig själv.
Väljer man att spela sig själv får man svara på konstiga frågor, som hur stark man är, hur smart man är, om man kan dansa, om man har övernaturliga förmågor...
Avsluta med Q.

sudo apt install slashem
slashem

Ett till rogue-liknande spel. Avsluta med ctrl+c.

sudo apt install tome
tome

Roguelike.
(jag fick det inte att fungera i Debian Sid, något paket var trasigt)

###

sudo apt install colossal-cave-adventure
Ett textbaserat äventyr där man skriver vad man gör. Föregångaren till dagens point-and-click-adventures.
Det verkar vara exakt samma spel som adventure som följer med bsdgames-paketet.

sudo apt install greed
greed

Du är ett @ i ett hav av färgade siffror.
Förflytta dig med vimtangenterna hjkl och diagonalt yubn. Eller använd numeriskt tangentbord.
Siffran man går till visar hur många rutor framåt man går. Alla rutor man går på blir tomma.
Man MÅSTE gå till en ruta med en siffra.
Avsluta med q.
Både klurigt och kul!

sudo apt install pacman4console
pacman4console

En pacmanklon. Du är C, spökerna är &, flytta med piltangenterna, avsluta med q.

sudo apt install sudoku
Starta genom att skriva sudoku. Alla instruktioner står på skärmen.

###

Ncurses är inte ett spel, utan ett programbibliotek som används för att göra texbaserade spel.
https://sv.wikipedia.org/wiki/Ncurses
Spelen nedan skrivna med ncurses.
https://www.use-strict.de/list-of-cool- ... games.html

sudo apt install 2048
2048

Det första man ser är ett 4x4-bräde med siffran 2 i en av rutorna.
Man styr med piltangenterna.
Varje gång man trycker en piltangent är det som att hela brädet lutar åt det håll man pekar och alla siffrorna åker ditåt - samt att en ny 2:a dyker upp på brädet.
Varje gång två likadana siffror krockar läggs de ihop till en ny siffra; två stycken 2:or blir en 4:a, två stycken 4:or blir en 8:a o.s.v.
Se hur länge du kan hålla på innan brädet blir fullt. Teoretiskt kan man komma upp i 2024, därav namnet.
Om jag förstod rätt finns 2048 i Ubuntu 22.04.
Har man äldre Ubuntu ska man kunna installera med
sudo apt install libncurses5-dev
sudo apt install libsdl2-dev libsdl2-ttf-dev
sudo apt install 2048-cli

Men jag har ingen äldre ubuntu just nu så jag kan inte testa.

sudo apt install bastet
bastet

Bastard Tetris
Styr med vänster-/högerpil.
Rotera med mellanslag och upp-pil.
Man ska kunna släppa en bricka med Enter (på numeriska tangentbordet), men jag har bara tillgång till bärbar just nu så jag kan inte testa.
Avsluta med ctrl+c.

sudo apt install freesweep
freesweep

Minesweeper i terminalen. Instruktioner i spelet. Avsluta med q.

sudo apt install moon-buggy
moon-buggy

Man kör en liten månbil, hoppa över hål skjut bort hinder.
Instruktioner står längst ner på skärmen, mellanslag för att hoppa, a för att skjuta, q för att avsluta.

sudo apt install ninvaders
ninvaders

Space Invaders. styr vänster-höger med piltangenterna, skjut med mellanslag, q för quit.

sudo apt install nudoku
Sudoku för terminalen, starta med nudoku och alla instruktioner står på skärmen.

###

Det finns säkert ännu fler terminalspel i förråden, men det här får räcka för nu.
Skriv svar

Återgå till "För nybörjaren"