1. Johdanto

Tämä materiaali pohjautuu ITKP1010-kurssin Unix-komentoriviosioon. Oppimateriaalin tarkoitus TIMissä on antaa pikaintro komentoriville niille, jotka eivät aiemmin ole tutustuneet Unix-komentoriviin. Oppimateriaali toimii myös kertausmateriaalina niille, jotka sitä saattavat tarvita myöhemmillä tietotekniikan kursseilla (esim. Ohjelmointi 1,2; Web-ohjelmointi, Käyttöjärjestelmät).

1.1 Opiskelun aluksi

Oppimateriaali on tarkoitettu käytäväksi läpi luku kerrallaan. Tämä on suositeltavaa, varsinkin jos komentorivi ei ole ennestään tuttu. Luvussa 1 johdatellaan aiheeseen. Viimeistään luvun yksi jälkeen ota käyttöön omalle koneellesi Unix-komentorivi.

Alkaen luvusta 3 seurataan tarinaa tietotekniikan fuksista Karosta. Tarinakappaleiden on tarkoitus johdatella lukijaa osion teoriaan ja konkretisoida opittavia asioita.

Oppimateriaaliin on kopioitu esimerkeiksi paljon otteita komentoriviltä.

Esimerkki 1

kayttaja@omakone:~/itkp1010$ ls -l
total 16
-rw-r--r--   1 kayttaja ryhma        4 Apr 28 09:22 demo.txt
drwxr-xr-x   2 kayttaja ryhma     4096 Apr 27 14:24 demot
-rwxrwxr--   1 kayttaja ryhma        4 Apr 28 09:22 essee.txt
drwxr-xr-x   2 kayttaja ryhma     4096 May 11 09:10 ohjaukset
kayttaja@omakone:~/itkp1010$

Esimerkissä 1 näet tyylin, jolla komentoriviä esitellään materiaalissa. Vasemmassa laidassa numerot 1-7 ovat jälkikäteen lisättyjä rivinumeroita helpottamaan kuvan hahmottamista. Näitä ei näy komentorivillä, kun itse käytät sitä!

Komentoriviosiossa on materiaalin joukossa käytetty erilaisia laatikoita. Väristä ja logosta riippuen niillä on kullakin oma tarkoitus. Sinisellä pohjalla olevat laatikot ovat tarkoitettu kaikkien tutustuttavaksi, niissä on vinkkejä, videoita ja interaktiivista kuvamateriaalia. Tähtilaatikot ovat lisämateriaalia, joilla voit halutessasi syventää oppimistasi. Tähtilaatikoiden sisältöjen osaamista ei testata tentissä.

Nämä ovat vinkkejä. Ilman näitä pärjää, mutta näihin on hyödyllistä tutustua!

Nämä ovat lyhyitä videoita osion asioista. Katso video ja tee siihen liittyvät tehtävät!

Nämä ovat lisätietoa, jotka ovat tarkoitettu asiasta kiinnostuneille!

1.2 Mikä komentorivi on?

Komentorivityöskentely on tietokoneen käskyttämistä tekstillä. Tähän asti olet ehkä tavallisesti käskyttänyt tietokoneita klikkailemalla kuvakkeita.

Nykyaikana graafisista ohjelmista tietokoneella ja erityisesti älypuhelimissa toiminnot yritetään tehdä mahdollisimman intuitiivisiksi. Ohjelman käytön pitäisi luonnistua viisivuotiaalta, joka avaa äpin ensimmäisen kerran. Rajoitteena näissä laitteissa on se, että ne ovat hyviä korkeintaan niissä asioissa, joita varten ne on suunniteltu. Komentorivi toisaalta on aluksi vaikeasti lähestyttävä musta laatikko (macOS:ssä riippuu järjestelmän väriasetuksista), joka ei tarjoa mitään apua liikkeelle lähtöön. Mestarin käsissä komentorivi säästää tuntikaupalla työaikaa.

Komentorivin kohdalla pätee vanha sananlasku: "Alku aina hankalaa, lopussa kiitos seisoo."

1.3 Kuka komentoriviä käyttää, miksi ja mihin?

Komentoriviä käyttävät laajasti monet tietotekniikan ammattilaiset. Komentorivin käyttöön on monia syitä. Annetaan yhden ammattilaisen kertoa omat vastauksensa näihin kysymyksiin:

"Ohjelmistokehittäjänä teen käytännössä kaiken paitsi webin selaamisen Linuxin komentoriviltä. Editoin tekstiä, käännän ja pyöritän ohjelmia, käytän versionhallintaa, hallinnoin palvelimia jne. Miksi? Nopeus, automaatio ja ergonomia. Kaikki työkalut ovat koko ajan käden ulottuvilla, pitää vain tietää niiden nimet. Tehtäviä on helppo ja nopea toistaa komentohistorian avulla ja automatisoida skripteillä. Myös toisten neuvominen tekstichateissa on helpompaa ja skriptejä voi jakaa muiden hyödyksi. Näppäimistön käyttö rasittaa käsiä vähemmän kuin hiiren ja on hyvin harjoiteltuna moninkertaisesti nopeampaa. Lisäksi etäkäytettävillä koneilla kuten palvelimilla ei yleensä ole edes mahdollisuutta käyttää mitään muuta. Ja Vim on paras tekstieditori ;)" — Software developer, yliopiston tietotekniikan laitoksen kasvatti

Koska komentoriviltä annetaan yksikäsitteisiä komentoja peräkkäin, mahdollistaa tämän yhden komentorivin tärkeimmän ominaisuuden: automatisoinnin. Samat käsin kirjoitettavat komennot voidaan kirjoittaa "skriptitiedostoon" ja suorittaa suurempi sarja komentoja yhdellä käskyllä.

1.4 Mitä osaan tehdä komentorivillä opiskeltuani tätä oppimateriaalia?

  • Osaat käyttää käyttöjärjestelmästäsi riippumatta koneellasi Unix-komentoriviä. (Unix-shellin käyttöönotto)
  • Tiedät mistä osista komento rakentuu. (Luku 2)
  • Hahmotat tietokoneen hakemistorakenteen ja osaat navigoida hakemistosta toiseen. (Luku 3)
  • Tiedät mitä eroa on hakemistolla ja tiedostolla. (Luku 4)
  • Osaat luoda hakemistoja ja tiedostoja. (Luku 4)
  • Osaat nimetä hakemistot ja tiedostot hyvin. (Luku 6.4)
  • Osaat siirtää, kopioida ja poistaa hakemistoja ja tiedostoja. (Luku 5)
  • Osaat hyödyntää komennoissa korvausmerkkejä '?' ja '*'. (Luku 6)
  • Tiedät, mitä putkitus on ja miten sitä hyödynnetään. (Luku 7)
  • Osaat hallita hakemistojen ja tiedostojen käyttöoikeuksia. (Luku 8)

1.5 Hakemistorakenteen luonti

Materiaaliin on ripoteltu komentorivi-ikkunoita, joilla voit testata uusia komentoja. Jotta kulkisit samaa tietä oppimateriaalin kanssa, aja ensin alla oleva ikkuna, joka luo sinulle esimerkkien mukaiset hakemistot ja tiedostot.

# shell7

1.6 Komentorivisanasto

2. Mistä komento rakentuu?

Jotta Karo voi ottaa komentorivin käyttöön, on hänen ymmärrettävä komennon rakenne. Hän on nähnyt, että komento voi olla monta sanaa pitkä ja sisältää monenlaisia merkkejä vaakaviivasta tolppaan ja lainausmerkeistä kysymysmerkkeihin. Sen verran hän jo tietääkin, että enteristä komento “käynnistyy” ja sitten kone suoltaa tekstiä takaisin – mutta ei edes aina. Nyt on aika selvittää komentojen syntaksi, eli mikä komennon eri osien tehtävä on.

2.1 Komentorivi

Tämän luvun aluksi käydään läpi komentojen syntaksi. Eli miten komennot syötetään ja millaisista osista komento muodostuu. Varmista aluksi, että olet ottanut käyttöön Unix-komentorivin.

Kun aloitat komentorivin käytön, alkunäkymä riippuu hieman käyttämästäsi järjestelmästä. Riippumatta järjestelmästä UNIX-komennot toimivat kuitenkin samalla tavalla.

Kun avaat komentorivin (Ubuntu), komentokehote voi näyttää tältä:

kayttaja@omakone:~$

Alkuosa kertoo siis käyttäjätunnuksesi, @-merkin jälkeinen "omakone" kertoo käyttämäsi koneen nimen ja kaksoipisteen jälkeinen osa kertoo sijaintisi hakemistorakenteessa. ~ viittaa kotihakemistoosi (luku 3.1). Nämä tiedot voivat vaihdella. Ennen kaksoispistettä voi olla muitakin tietoja ja sijaintitieto muuttuu sitä mukaan, kun liikut hakemistorakenteessa. Komentokehote päättyy useimmiten joko %- tai $-merkkiin. Tätä näkymää sanotaan termillä "hopute", eli se kehoittaa käyttäjää kirjoittamaan. CMD-näkymässä hoputemerkki olisi >.

Nyt voit ruveta kirjoittamaan komentoja komentoriville. Komento suoritetaan, kun painat enteriä.

2.2 Komennon osat

Komento koostuu yleensä muustakin kuin pelkästä komennosta tai komentosanasta. Tyypillisesti komentosanan lisäksi kokonaisessa komennossa voi valitsimia ja parametreja.

komento -valitsin parametri

Komennon perään on aina laitattava rivinvaihto (enter, return). Ilman sitä komentoa ei aleta suorittamaan, koska ei voida tietää haluaisiko käyttäjä vielä kirjoittaa lisää.

Komennot aluksi voivat tuntua kryptisiltä, mutta pitää muistaa että ne ovat yleensä aina lyhenteitä jostakin sanasta tai lauseen osasta. Ymmärtämällä mistä komento on lyhenne, on komento helpompi muistaa. Jos jonkin esiteltävän komennon kohdalta puuttuu tuo mistä komennon nimi on kotoisin, laita siihen kohti kommentti, niin lisätään se tieto :-)

Seuraavaksi esitellään muutamia esimerkkejä komennoista. Nämä komennot opetellaan myöhemmin tässä materiaalissa. Niiden kokeilemisesta tässä vaiheessa ei ole haittaa, mutta muista, että komentorivillä ei kannata suorittaa mitään komentoa, josta et tiedä mitä komento tekee!

Komentorivi ja komennon rakenne

2.3 Komennon kirjoittaminen:

Harjoitellaan komentojen kirjoittamista komentoriville. Vaikka yleinen ohje on, että komentoriville kirjoitettaessa pitää tietää mitä tekee, niin seuraavissa harjoitteissa annat muutaman mystisen komennon komentoriville ja komentorivi suoltaa vaikeaselkoista tekstiä takaisin. Jos et pidä tällaisesta sokeasta kokeilusta, niin voit ennakkoon tutustua komentoihin ja niiden merkityksiin luvussa 8.3.

Huomaa, että seuraavat komennot toimivat vain tietyissä Linux-käyttöjärjestelmissä. Kurssilla suosittelemamme Ubuntu on yksi tällainen järjestelmä. Alla olevat komennot eivät toimi Macillä. Yliopiston suorakäyttökoneilla näiden komentojen suorittamiseen sinulla ei ole riittävästi oikeuksia! Suorakäyttökoneiden, Git Bash sekä Macien käyttäjät voivat siirtyä kohtaan 2.4.

# ekakomento

2.3.1 Ensimmäinen komento

Seuraavissa esimerkeissä päivitetään käyttöjärjestelmä.

Avaa käyttöönottamasi Unix-komentorivi. Kirjoita komentoriville

sudo apt update

ja paina enteriä. Syötä salasanasi pyydettäessä. Ole tarkkana sillä salasanan kirjoittamisen aikana ruudussa ei yleensä näy mitään. sudo tulee lauseesta superuser do. apt on Linuxin valmis ohjelma Advanced package tool.

Esimerkki 1

kayttaja@omakone:~$ sudo apt update
[sudo] password for kayttaja:
Hit:1 http://archive.ubuntu.com/ubuntu focal InRelease
Get:2 http://archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB]
Get:27 http://security.ubuntu.com/ubuntu focal-security/multiverse Translation-en [4316 B]
Fetched 4550 kB in 11s (404 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
33 packages can be upgraded. Run 'apt list --upgradable' to see them.
kayttaja@omakone:~$

Esimerkissä 1:

  • Rivillä 1 annetaan komento sudo apt update
  • Rivillä 2 vaaditaan salasanaa sudo komennon käyttöä varten
  • Riveillä 3-10: apt-komento tekee töitään ja kertoo edistymisestään. Näitä tekstejä ei tarvitse tarkemmin ymmärtää.
  • Rivillä 11 komentorivi on valmis ottamaan vastaan uuden komennon.

Hienoa, nyt olet tehnyt jotain komentorivillä! Edellinen komento on kuitenkin vasta ensimmäinen askel kaksiosaisessa projektissa. Kirjoitetaan samat kaksi sanaa (sudo apt), mutta tällä kertaa korvataan viimeinen parametri (update) parametrillä upgrade. Kirjoita komentoriville

sudo apt upgrade

ja paina enteriä. Jos edellisestä sudo-komennon käytöstä on alle viisi minuuttia, niin sinulta ei pyydetä salasanaa. Vastaa kyllä y, kun kysytään, haluatko jatkaa (Esimerkki 2, rivi 14). Usein noissa kysymyksissä esitetään vaihtoehdot kysymyksen perässä. Se vaihtoehto joka tulisi valittua painamalla pelkkä Enter merkitään yleensä isolla, eli sitä ei tarkoitus kirjoittaa isolla.

Esimerkki 2

kayttaja@omakone:~$ sudo apt upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
  distro-info
The following packages will be upgraded:
  alsa-ucm-conf apport bind9-dnsutils bind9-host bind9-libs cloud-init
  ubuntu-advantage-tools ubuntu-release-upgrader-core
33 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 6818 kB of archives.
After this operation, 2531 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 open-iscsi amd64
2.0.874-7.1ubuntu6.2 [283 kB]
Get:11 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 initramfs-tools-core all
 0.136ubuntu6.5 [47.7 kB]
Setting up bind9-libs:amd64 (1:9.16.1-0ubuntu2.8) ...
Processing triggers for initramfs-tools (0.136ubuntu6.5) ...
kayttaja@omakone:~$

Esimerkissä 2:

  • Rivillä 1 annetaan komento sudo apt upgrade
  • Riveillä 2-13 ohjelma kertoo, mitä on tekemässä
  • Rivillä 14 kysytään, haluatko jatkaa. Vastaa y (Yes, kyllä)
  • Riveillä 15-20 ohjelma taas raportoi tekemisistään
  • Rivillä 21 komentorivi on taas valmis uuteen komentoon

Hienoa, nyt olet päivittänyt järjestelmäsi! Mikä tärkeämpää, olet kirjoittanut komentoriville komentoja ja tietokone on toiminut antamiesi komentojen mukaan. Näin komentorivi toimii, aluksi yksi komento kerrallaan. Tulevissa osioissa opit useita perustason komentoja. Samalla varmuutesi käyttää komentoriviä kasvaa. Jatkossa saat jopa tietää etukäteen, mitä antamasi komennot tekevät.

# tulostuksenLukeminen

2.4 Tulostuksen lukemisesta:

Sen lisäksi, että osaat kirjoittaa komentoja, on osattava lukea komentorivin antamia tulosteita. Harjoitellaan sitä seuraavaksi. Tulosteet sisältävät usein paljon informaatiota, yleensä enemmän kuin tarpeeksi. Oleellisten asioiden bongaamiseen harjaantuu ajan mittaan, mutta tutustutaan tässä osiossa tarkemmin tulosteeseen, joka sisältää tietoja tiedostoista ja hakemistoista. Itse hakemistorakenteeseen tutustutaan paremmin luvussa 3. Listaa erään hakemiston sisältö kirjoittamalla komentoriville:

ls -l ja paina enteriä

Tämä komento "ajatellaan" listaa listamuodossa eli list as list, sieltä tuo ls ja l. Viiva tarkoitti option (valitsimen, valinnan) merkkiä. Kokeile miltä sama tuloste näyttää ilman -l.

Jos tahdot hyödyntää materiaalin komentorivi-ikkunoita, niin varmista, että olet luonut hakemistorakenteen ajamalla johdantokappaleen ikkunan.

# shellLsL

Tulosteesi on erilainen, kuin alla olevan esimerkkikuvan, mutta tuloste on jaettu samoihin lohkoihin. Vertaa tulostettasi mallikuvaan.

Esimerkki 3

'ls -l komennon tuloste ryhmiteltynä'
'ls -l komennon tuloste ryhmiteltynä'

Esimerkissä 3:

  • Lohko 1: Ensimmäinen merkki kertoo, onko kyseessä tiedosto (-) vai hakemisto (d). Loput merkit liittyvät käyttöoikeuksiin, josta kerrotaan luvussa 8.1.
  • Lohko 2: Kertoo tiedoston tai hakemiston omistajan. Jälleen luku 8.1 tarkentaa.
  • Lohko 3: Kertoo ryhmän, johon tiedosto tai hakemisto kuuluu. (luku 8.1). Omissa tiedostoissasi kayttaja ja ryhmä ovat todennäköisesti samoja.
  • Lohko 4: Tässä kerrotaan tiedoston tai hakemiston koko tavuina.
  • Lohko 5: Tiedoston tai hakemiston viimeinen muokkauspäivä. Huomioi, että tänä vuonna muokkaamasi tiedostot kertovat vuoden sijaan kellonajan. (esim. kaappaaKuva.txt)
  • Lohko 6: Tiedoston tai hakemiston nimi.

Laatikoimattomien lukujen merkitystä ei tarvitse tämän materiaalin aikana ymmärtää.

Ensimmäisen rivin total 256 liittyy tiedostojen ja hakemistojen viemään levytilaan. Lukulohkon, jota ei ole laatikoitu (numeroitujen ykkösen ja kakkosen välissä), merkitys selitetään Wikipediassa.

2.5 Huomioi kirjoittaessasi komentoja:

  • Komentojen osien väliin tulee välilyönnit.
  • Isot ja pienet kirjaimet ovat eri asia. Komennon merkitys muuttuu, jos kirjoitat väärän kokoiset kirjaimet.
  • Jotkin komennot eivät onnistuneen suorituksen jälkeen ilmoita mitään. Virheistä saat aina ilmoituksen.
  • Älä suorita komentoja, jos et tiedä mitä se tekee! Esimerkiksi komentorivillä ei ole roskakoria, poistettua asiaa et saa takaisin!

3. Hakemistorakenne

Nyt kun Karo osaa komentaa konettaan, niin hän voi aloittaa valmistelunsa opiskeluja varten: On aika miettiä, miten eri kurssien tehtävät ja muut tallennetaan. Puhelimella WhatsApp-kuvat, näyttökuvat ja kameran kuvat ovat omissa lokeroissaan. Lukiossa käytetyllä pilvipalvelulla kunkin kurssin tehtävät tallennettiin omaan kansioonsa. Komentorivillä puhutaan kansioiden sijaan hakemistoista. Karo päättää luoda haluamansa hakemistorakenteen, jonka hän ensin paperille hahmottelee. Kaikki opiskeluihin liittyvä saa mennä ‘opiskelu’-hakemistoon. Jotta asiat pysyisivät järjestyksessä, niin Karo haluaa kullekin kurssille oman alihakemiston. Komentorivillä työskenneltäessä ollaan aina jossain kansiossa. Ennen hakemistorakenteen luomista Karon tuleekin selvittää, miten hakemistoihin viitataan ja miten hakemistorakenteessa liikutaan.

# hakemistojenNimet

3.1 Hakemistot

Hakemistolla tarkoitetaan paikkaa, johon on tallennettu erilaisia tiedostoja. Graafisessa käyttöliikkumisessa hakemistoja kuvataan kansioilla eli graafisessa maailmassa hakemisto ja kansio ovat käytännössä sama asia. Alla olevissa termeissä esimerkkeinä on käytetty ohessa löytyvän graafisen kansiorakenteen kansioita.

Kuva esimerkkikansiorakenteesta graafisessa maailmassa

Kotihakemisto on se oletushakemisto, johon käyttäjä päätyy komentoriville kirjautuessaan. Kotihakemistoa kuvataan tildellä (~).

Työhakemisto tai oletushakemisto on taas hakemisto, jossa työskennellään. Sitä voidaan kuvata myös pisteellä (.).

  • Esimerkki: Kuvassa valittuna on ITKP1010 eli tässä työskennellään tuolla asemalla.

Alihakemistolla tarkoitetaan hakemistoa, joka on luotu toisen hakemiston sisään.

  • Esimerkki: Kuvassa kansio "itk1010_digitaalisen_osaamisen_perusteet" on alikansio kansiolle opiskelu.

Ylähakemisto on se hakemisto, jossa alihakemisto sijaitsee. Siihen viitataan kahdella pisteellä (..).

  • Esimerkki: Kuvassa kansion "itkp1010_digitaalisen_osaamisen_perusteet" ylähakemisto on kansio opiskelu.

Juurihakemisto on hakemistorakenteen ylin piste. Siihen viitataan kauttaviivalla (/).

  • Esimerkki: Windowsissa ei puhuta samalla tavalla juurihakemistoista, joten sitä ei ole esimerkkikuvassa.

Yllä olevat erityyppiset hakemistot sisältöineen muodostavat hakemistorakenteen, josta graafisella puolella voidaan käyttää myös nimitystä kansiorakenne.

Komentorivillä hakemistorakennetta kuvataan usein ns. puurakenteella (tree). Alla on kuvattu edellä esiteltyä graafista esimerkkiä vastaava hakemistorakenne puumuodossa. Nyt puu alkaa ylimmällä rivillä, jossa on vain piste(.). Tämä on siis oletushakemisto, joka graafisella puolella vastasi ITKP1010 -asemaa. Hakemisto opiskelu on nyt oletushakemiston alihakemisto ja niin edelleen.

.
└── opiskelu
        ├── itkp102_ohjelmointi1
        │     ├── demo1
        │     ├── demo2
        │     └── harjoitystyo
        ├── itkp1010_digitaalisen_osaamisen_perusteet
        ├── itkp1011_web_julkaiseminen
        │     ├── harjoitustyo
        │     └── paateohjaus
        └── itky100_yliopisto-opiskelu

Komentorivin eroja graafiseen käyttöliittymään

Jos tietokoneen hakemistorakenne ali- ja ylähakemistoineen tuntuu etäiseltä, niin voit lukea alla asiaa havainnollistavan kirjasto-vertauksen. (Lainattu vanhan työvalinekurssin materiaalista.)

Hakemistorakenteen vertaus kirjaston kirjojen jaotteluun

3.1.1 Komennot pwd ja ls

Jos haluat tarkistaa tarkan polun, missä hakemistossa työskentelet voit tehdä sen komennolla pwd (print the current working directory).

Hakemiston sisällön voi tarkistaa komennolla ls. Myöhemmin voit tarvita tarkempia tietoja hakemiston sisällöstä (esim. käyttöoikeudet). Näitä voidaan tarkistaa, kun annat ls-komennolle valitsimen -l (list, listamuoto, tiedot pitkästi) tai -a (all, kaikki, näytä myös piilotiedostot ja -hakemistot). Valitsimet voi myös yhdistää ja seuraavat komennot tekevätkin täysin saman asian:

ls -a -l
ls -l -a
ls -al
ls -la
# shellLsPwd

Esimerkkir 3.1

kayttaja@tietokone:~/opiskelu $ pwd
/home/kayttaja/opiskelu

Esimerkissä 3.1 tarkistetaan työhakemiston tarkka polku komennolla pwd.

Esimerkki 3.2

kayttaja@tietokone:~/opiskelu $ ls
itkp1010_digitaalisen_osaamisen_perusteet  itkp102_ohjelmointi1  
maty010_matematiikan_propedeuttinen        itkp1011_web-julkaiseminen
itky100_yliopisto-opiskelu                 tiep175_tietokoneavusteinen_laskenta
demo.txt
kayttaja@tietokone:~/opiskelu $ ls -la
total 32
drwxr-xr-x 8 kayttaja ryhma   4096 Apr 12 05:19 .
drwxr-xr-x 7 kayttaja ryhma   4096 Apr 12 05:46 ..
drwxr-xr-x 2 kayttaja ryhma   4096 Apr 12 05:19 itkp1010_digitaalisen_osaamisen_perusteet
drwxr-xr-x 4 kayttaja ryhma   4096 Apr 12 05:19 itkp1011_web-julkaiseminen
drwxr-xr-x 5 kayttaja ryhma   4096 Apr 12 05:19 itkp102_ohjelmointi1
drwxr-xr-x 2 kayttaja ryhma   4096 Apr 12 05:19 itky100_yliopisto-opiskelu
drwxr-xr-x 2 kayttaja ryhma   4096 Apr 12 05:19 maty010_matematiikan_propedeuttinen
drwxr-xr-x 2 kayttaja ryhma   4096 Apr 12 05:19 tiep175_tietokoneavusteinen_laskenta
-rwxr-xr-x 1 kayttaja ryhma     47 Apr 12 05:19 demo.txt
kayttaja@tietokone:~/opiskelu $

Esimerkissä 3.2:

  • Ensimmäisellä rivillä listataan hakemiston sisältö komennolla ls.
  • Rivillä 6 listataan hakemiston sisältö laajemmin komennolla ls -la.
  • Kuvassa näkyvät kayttaja ja ryhma viittaavat hakemistojen ja tiedostojen omistusoikeuksiin. Näihin perehdytään paremmin luvussa 8.

Esimerkki 3.3

kayttaja@tietokone:~/opiskelu $ ls -l /
total 684
lrwxrwxrwx   1 root root      7 Feb 20 01:48 bin -> usr/bin
drwxr-xr-x   2 root root   4096 Feb 20 01:56 boot
drwxr-xr-x   8 root root   2720 Apr 29 08:32 dev
drwxr-xr-x  95 root root   4096 Apr 29 08:32 etc
drwxr-xr-x   4 root root   4096 Mar 26 08:33 home
-rwxr-xr-x   2 root root 632048 Mar 17 00:24 init
lrwxrwxrwx   1 root root      7 Feb 20 01:48 lib -> usr/lib
lrwxrwxrwx   1 root root      9 Feb 20 01:48 lib32 -> usr/lib32
lrwxrwxrwx   1 root root      9 Feb 20 01:48 lib64 -> usr/lib64
lrwxrwxrwx   1 root root     10 Feb 20 01:48 libx32 -> usr/libx32
drwx------   2 root root  16384 Apr 10  2019 lost+found
drwxrwxrwt   2 root root   4096 Apr 28 16:59 tmp
drwxr-xr-x  14 root root   4096 Feb 20 01:50 usr

Esimerkissä 3 on ote juurihakemiston (/) sisällöstä.

Video: ls -komento

# viittaukset

3.2 Viittaukset

Viittaus on hieno tapa sanoa, että jokin osoittaa johonkin. Peruskoulussa opit, että "joka" viittaa edelliseen sanaan ja "mikä" viittaa edelliseen lauseeseen. Komentorivillä viittaat tiedostoihin ja hakemistoihin. Viittaus on tapa kertoa koneelle, mihin tiedostoon tai hakemistoon haluat komennon osoittaa. Tässä luvussa viittaamista harjoitellaan komennolla cd, jolla vaihdetaan työhakemistoa.

Viittauksia on kahden tyyppisiä: suhteellisia ja absoluuttisia. Tutustutaan ensin suhteelliseen viittaukseen.

3.2.1 Suhteellinen viittaus

Suhteellinen viittaus on nimensä mukaisesti suhteellinen. Tällainen viittaus viittaa aina johonkin paikkaan suhteessa oletushakemistoon eli siihen hakemistoon, jossa olet. Eri oletushakemistoista pitää siis viitata eri tavalla, jos halutaan päätyä samaan hakemistoon tai tiedostoon.

Hakemiston sisällä oleviin objekteihin voidaan viitata yksinkertaisesti niiden nimillä. Viittaus hakemistoon on hakemiston nimi ja /-merkki. Kauttaviivaa ei tyypillisesti edes tarvitse, koska komentokehote osaa sen täydentää automaattisesti. Hakemistossa olevaan tiedostoon viitataan tiedoston nimellä.

Hakemiston alihakemistossa oleviin tiedostoihin ja hakemistoihin viittaus rakentuu ensin alihakemiston nimestä ja kautta merkistä. Loppu osa toimii samoin kuin oletushakemistosta viitatessa. Esimerkiksi itkp1010/demo.txt on viittaus oletushakemiston alihakemistossa itkp1010 olevaan demo.txt-tiedostoon.

Hakemiston ylähakemistoon voidaan viitata ../ -merkinnällä. Jos halutaan liikkua ylähakemiston ylähakemistoon lisätään vain toinen ../ eli ylähakemiston ylähakemistoon viittaus olisi ../../. Näin voidaan jatkaa hakemistorakenteessa ylöspäin niin pitkälle, kuin rakennetta riittää.

# suhteellisenNopea

Esimerkki 3.4

kayttaja@tietokone:~/opiskelu $ ls
itkp1010_digitaalisen_osaamisen_perusteet  itkp102_ohjelmointi1
maty010_matematiikan_propedeuttinen        itkp1011_web-julkaiseminen
itky100_yliopisto-opiskelu                 tiep175_tietokoneavusteinen_laskenta
kayttaja@tietokone:~/opiskelu $ cd itkp102_ohjelmointi1/
kayttaja@tietokone:~/opiskelu/itkp102_ohjelmointi1 $ cd ../itky100_yliopisto-opiskelu/

Esimerkissä 3.4 liikutaan:

  • Rivillä 4 suhteellisen viittauksen avulla itkp102_ohjelmointi1-hakemistoon
  • Rivillä 5 itky100_yliopisto-opiskelu-hakemistoon. Tässä viittauksessa ensin täytyy kertoa ../, jotta siirrytään takaisin ylähakemistoon ja sitten mihin ylähakemiston alihakemistoon halutaan.

Tutki suhteellista viittausta tarkemmin alla olevalla Tommi Lahtosen relativetoolin avulla:

# relativeTool
# tehtavatSuhteelllinen

Suhteellisen viittauksen tehtavat

# suhtKys1
# suht01
# suht1
# tyhakemisto02

3.2.2 Absoluuttinen viittaus

Absoluuttisia viittauksia käytettäessä täytyy tietää haluttu polku kokonaan. Absoluuttinen viittaus, johonkin tiettyyn hakemistoon tai tiedostoon pysyy aina samana. Eli riippumatta missä hakemistossa ollaan, absoluuttinen viittaus johtaa aina samaan paikkaan. Absoluuttista viittausta varten tarkka polku tulee tietää tai se pitää tarkistaa pwd-komennolla, joka kertoo oletushakemiston tarkan polun.

Absoluuttinen viittaus aloitetaan joko / (eli juurihakemistosta, hakemistorakenteen korkeimmasta kohtaa) tai kotihakemistosta ~.

Esimerkki 3.5

kayttaja@tietokone:~/opiskelu $ ls
itkp1010_digitaalisen_osaamisen_perusteet  itkp102_ohjelmointi1
maty010_matematiikan_propedeuttinen itkp1011_web-julkaiseminen
itky100_yliopisto-opiskelu  tiep175_tietokoneavusteinen_laskenta
kayttaja@tietokone:~/opiskelu $ pwd
/home/kayttaja/opiskelu
kayttaja@tietokone:~/opiskelu $ cd /home/kayttaja/opiskelu/itkp102_ohjelmointi1/
kayttaja@tietokone:~/opiskelu/itkp102_ohjelmointi1 $ cd ~/opiskelu/itky100_yliopisto-opiskelu/
kayttaja@tietokone:~/opiskelu/itky100_yliopisto-opiskelu $

Esimerkissä 5:

  • Rivillä 5 pwd-komennolla tarkistetaan opiskelu-hakemiston tarkka polku.
  • Rivillä 7 rakennetaan viittaus juuresta lähtien hakemistoon itkp102_ohjelmointi1-hakemistoon. Suhteellisella viittauksella tässä kohtaa olisi riittänyt vain viittaus itkp102_ohjelmointi1.
  • Rivillä 8 itky100_yliopisto-opiskelu-hakemistoon liikutaan absoluuttisella viittauksella alkaen kotihakemistosta. Tässä kohtaa voidaan päätellä, että hakemisto: "kayttaja" on kotihakemisto.

Useimmiten voi oman valinnan mukaan käyttää suhteellisia tai absoluuttisia viittauksia. Kummallakin pystyy viittaamaan komentorivi-kontekstissa lähes joka tapauksessa. Kumpaa tapaa käyttää on usein omaa mieltymystä. Joissain tapauksissa toinen tapa viitata on helpompi tai nopeampi. Esimerkiksi työhakemistosta alikansioon siirtyminen tai muu hyvin lähelle hakemistorakenteessa siirtyminen on nopeaa tehdä suhteellisella viittauksella, kuten huomattiin yllä esimerkissä 3.4.

Näitä tilanteita oppii pikkuhiljaa, joten alkuun on hyvä oppia molemmat tavat ja varsinkin opetella tunnistamaan kummalla tavalla viittaus on tehty.

3.3 Liikkuminen hakemistorakenteessa

Oletushakemistosta voidaan siirtyä kansiosta toiseen komennolla cd (change directory). Komennon lisäksi tarvitset parametriksi viittauksena kohteen, minne liikutaan.

Video: Liikkuminen hakemistorakenteessa

kayttaja@omakone:~$ ls
itkp1010 itkp1011
kayttaja@omakone:~$ cd itkp1010/
kayttaja@omakone:~/itkp1010$ ls
demot essee.txt harkka harkka.txt kirjoitelma.txt
kayttaja@omakone:~/itkp1010$ cd ../
kayttaja@omakone:~$ ls itkp1010 itkp1011
kayttaja@omakone:~$ cd ~/itkp1010
kayttaja@omakone:~/itkp1010$ ls 
demot essee.txt harkka harkka.txt kirjoitelma.txt 
kayttaja@omakone:~/itkp1010$ cd ~
kayttaja@omakone:~$ ls
itkp1010 itkp1011

Esimerkissä 6 liikutaan:

  • Ensin rivillä 3 itkp1010-hakemistoon, jonka jälkeen siirrytään takaisin ylähakemistoon rivillä 6.
  • Rivillä 8 liikutaan takaisin itkp1010-hakemistoon erilaisella viittauksella, joka jälkeen siirrytään kotihakemistoon viittaamalla tildeen rivillä 11.
  • Jokaisessa välissä tarkistetaan ls-komennolla hakemiston sisältö.

Tästä esimerkistä voidaan tehdä muutama huomio:

  • Samaan hakemistoon voidaan päästä usealla eri tavalla viittaamalla.
  • Kun viitataan hakemistoon, hakemiston perään kuuluu kauttaviiva (/), kuten esimerkin rivillä kolme. Tämä voidaan jättää kuitenkin pois, koska komentotulkki osaa tulkata sen riville automaattisesti. Näin on tehty rivillä kahdeksan.
  • Tässä esimerkissä ylähakemisto itkp1010-hakemistolle ja kotihakemisto ovat samat. Tämän takia kotihakemistoon päästiin sekä viittaamalla tildeen että ylähakemistoon. Aina ei ole näin.
# shellcd
# liikkuminen3

yllä olevan laatikon tulostus oli: opiskelu run shell jne.

en tiedä mistä pitäisi saada tuo tuloste itkp102_ohjelmointi

10 Sep 24

Vastaus ylempään kommenttiin: Tulosteen perusteella (opiskelu,run,...) laatikossa on oletuskomennot, joita voi lähteä muokkaamaan aiempien kappaleiden avulla.
Tarkoituksena on siis itse harjoitella hakemistorakenteessa liikkumista.

16 Sep 24 (edited 16 Sep 24)
# liikkuminen2

Komentorivin tehokkaaseen käyttöön hyödyllisiä pikanäppäimiä ovat Tab (tabulaattori) sekä nuolet ylös ja alas. Tab täydentää automaattisesti aloitetun tekstin, jos hakemistosta löytyy vastaava teksti ja nuolilla pystyy selaamaan viimeksi käytettyjä komentoja.

4. Hakemistojen ja tiedostojen luominen

Nyt kun Karo on opetellut ja harjoitellut hakemistorakenteessa liikkumista suhteellisilla ja absoluuttisilla viittauksilla on hän valmis luomaan hakemistoja. Hän toteuttaa suunnitelmansa ja toteaa sitten kaikkien hakemistojen olevan tyhjää täynnä. Kyllä ne joskus täyttyvät, mutta lisätäkseen komentoriviosaamistaan Karo päättää myös opetella luomaan tiedostoja. Osoittautuu, että komentorivillä tiedostoja voi luoda useammalla kuin yhdellä tavalla.

4.1 Hakemiston luominen

Hakemistorakenteen ymmärtäminen ja luominen on ehkä komento-osiossa olennaisin osa. Unix-ympäristössä uuden hakemiston luomiseen tarvitset komennon mkdir. Komennon lisäksi komennolle annetaan parametrina hakemistolle haluttu nimi.

Huom! Komennolla et voi luoda kahta saman nimistä hakemistoa. Jos yrität luoda hakemiston jo olemassa olevan hakemiston nimellä, saat siitä virheilmoituksen.

Esimerkiksi:
mkdir itkp1010 -komento luo "itkp1010"-nimisen hakemiston (make directory).

Esimerkki 1

kayttaja@omakone:~$ mkdir itkp1010
kayttaja@omakone:~$ ls
itkp1010 opiskelu
kayttaja@omakone:~$ mkdir itkp1010
mkdir: cannot create directory ‘itkp1010’: File exists
kayttaja@omakone:~$

Esimerkissä 1:

  • Rivillä 1 luodaan mkdir komentoa käyttämällä uusi hakemisto nimeltään itkp1010.
  • Rivillä 2 tarkistetaan hakemiston luomisen onnistuminen. Tästä oletushakemistosta löytyy nyt luodun hakemiston lisäksi myös hakemisto opiskelu.
  • Rivillä 4 yritetään luoda uudestaan samanniminen hakemisto itkp1010.
  • Rivillä 5 saadaan virheilmoitus, joka ilmoittaa, että hakemisto on jo olemassa.

Hakemistojen luominen

# shellMkdir
# mkdirKys1
# mkdirKys2

4.2 Tiedoston luominen

Tiedostoja voidaan luoda monella tapaa. Pidemmät (enemmän tekstiä sisältävät) tiedostot kannattaa luoda jollakin tekstieditorilla (alla). Tulosteen ohjaus (4.4) voi puolestaan olla kätevä ratkaisu lyhyisiin, sanan tai muutaman sanan mittaisiin tiedostoihin tai tekstin lisäämiseen olemassa oleviin tiedostoihin.

4.3 Nano-tekstieditori

Nano-tekstieditori on yksinkertainen editori tekstin muokkaamiseen. Se löytyy valmiiksi asennettuna lähes kaikista Unix-pohjaisista järjestelmistä, kuten tässä materiaalissa suositellusta Ubuntusta. Nanoa voi käyttää suoraan komentoriviltä ja sen saa käyttöön antamalla komentorivillä komento: nano. Komennolla voidaan avata suoraan olemassa oleva tiedosto antamalla parametriksi avattavan tiedoston nimi. Uutta tiedostoa luotaessa parametriksi voi suoraan antaa uudelle tiedostolle annettava nimi.

Näkymä tyhjästä nano-editorista
Näkymä tyhjästä nano-editorista

Yllä olevassa kuvassa on näkymä tyhjästä nano-editorista. Editorista löytyvät seuraavat asiat:

  • Editorin nimi ja versio
  • Alue tekstin kirjoittamiseen
  • Työkaluvalikko

Työkaluvalikkoa ohjataan näppäinyhdistelmillä. Kaikkien valikosta löytyvien valinnat muodostuvat kahdesta merkistä. Aloittavina merkkeinä löytyy joko hattu (^), joka viittaa Ctrl-näppäimeen, tai meta (M), joka useimmissa näppäimistöissä tarkoittaa Alt- tai Esc-näppäintä. Tutki miten meta toimii sinun näppäimistössä!

Tärkeimpiä näppäinyhdistelmiä nanossa:

  • Ctrl+X: poistuminen nanosta.
  • Ctrl+K: Leikkaa
  • Ctrl+U: Liitä
  • Ctrl+O: Tallenna tiedosto
  • Ctrl+R: Avaa tiedosto
  • Ctrl+C: Peruuta
  • Alt+6: Kopio
  • Alt+U: Kumoa
  • Alt+E: Tee uudelleen

Kun ole tehnyt haluamasi muokkaukset dokumenttiin ja yrität poistua dokumentista, nano varmistaa tallennetaanko muutokset. Tässä vaiheessa voi vielä muokata tiedoston nimeä. Tiedostoa nimetessä muista laittaa mukaan myös tiedostopääte. Tyypillinen nanolla käsiteltävä tiedostotyyppi on tekstitiedosto, jonka pääte on .txt. Jos nanolla vain tarkastelee tiedoston sisältöä, tekemättä muutoksia, Ctrl+X-näppäinyhdistelmä vie suoraan takaisin komentoriville.

Video: Nano-tekstieditori

Jos haluat tulla todelliseksi tekstinkäsittelyguruksi, niin kirjoita komentoriville vimtutor ja anna palaa.

4.4 Tulosteen ohjaaminen

Tulosteen ohjaamiseen tarvitaan ensin keino luoda tulosteita ja sitten komento itse ohjaamiselle. Komento echo tulostaa komennolle parametriksi annetun tekstin ruudulle. Tässä vaiheessa teksti näkyy vain ruudulla ja se ei tallennu minnekään.

Tuloste voidaan ohjata tiedostoihin käyttäen > ja >> -komentoja.

  • > luo uuden tiedoston tai korvaa jo olemassa olevan, saman nimisen, tiedoston ja tulostaa annetun tekstin tiedostoon.
  • >> luo uuden tiedoston tai lisää annetun tulosteen olemassa olevan, saman nimisen, tiedoston perään.

Tulosteen ohjauksessa nuolien lisäksi tulee komennolle antaa parametriksi haluttu tiedoston nimi.

Huomioi, että komentorivi ei tässäkään sinua turhia hidastele. Jos päätät esimerkiksi kirjoittaa komennon echo rip > tosi_tarkea_dokumentti.pdf, niin voit hyvillä mielin hyvästellä dokumentin aiemman sisällön iäksi.

Tässä yhteydessä tiedostojen sisällön nopeaan tarkasteluun kätevä komento on cat (concatenate files, ketjuta tiedostot). Komento tarvitsee parametriksi halutun tiedoston nimen ja se tulostaa tiedoston sisällön näytölle.

Esimerkki 2

kayttaja@omakone:~/itkp1010$ ls
kayttaja@omakone:~/itkp1010$ echo tehtävä 1, kohta a
tehtävä 1, kohta a
kayttaja@omakone:~/itkp1010$ ls
kayttaja@omakone:~/itkp1010$ echo tehtävä 1, kohta a >demo.txt
kayttaja@omakone:~/itkp1010$ ls
demo.txt
kayttaja@omakone:~/itkp1010$ cat demo.txt
tehtävä 1, kohta a
kayttaja@omakone:~/itkp1010$ echo tehtävä 2 > demo.txt
kayttaja@omakone:~/itkp1010$ ls
demo.txt
kayttaja@omakone:~/itkp1010$ cat demo.txt
tehtävä 2

Esimerkissä 2 riveittäin:

  1. Tarkistetaan, että oletushakemisto on tyhjä.
  2. Tulostetaan komennolla "tehtävä 1, kohta a"-teksti.
  3. Edellisen rivin tuloste näkyy tällä rivillä. Tämä ei ole tiedosto, eikä tallennu mihinkään!
  4. Varmistetaan edellisen rivin tilanne ja huomataan, ettei hakemisto on edelleen tyhjä.
  5. Ohjataan nyt tuloste yhdellä väkäsellä (>) tiedostoon.
  6. Tarkistetaan tilanne.
  7. Nyt tiedosto on syntynyt
  8. Tarkistetaan luodun tiedoston sisältö cat-komennolla.
  9. Tiedoston sisältö tulostuu näytölle ja vastaa sitä, mitä tiedostoon ohjattiinkin.
  10. Ohjataan saman nimiseen tiedostoon uutta tekstiä.
  11. Tarkistetaan tilanne.
  12. Tiedoston nimi on sama, kuin rivillä seitsemän
  13. Tarkistetaan sisältö cat-komennolla
  14. Huomataan, että sisältö on muuttunut ja edellinen sisältö on korvautunut rivillä 10 ohjatulla uudella tekstillä.

Esimerkki 3

kayttaja@omakone:~/itkp1010$ echo tehtävä 1 >> demo2.txt 
kayttaja@omakone:~/itkp1010$ ls
demo.txt demo2.txt
kayttaja@omakone:~/itkp1010$ cat demo2.txt
tehtävä 1
kayttaja@omakone:~/itkp1010$ echo tehtävä 1 >> demo2.txt
kayttaja@omakone:~/itkp1010$ echo tehtävä2 >> demo2.txt
kayttaja@omakone:~/itkp1010$ ls
demo.txt demo2.txt
kayttaja@omakone:~/itkp1010$ cat demo2.txt
tehtävä 1
tehtävä 1
tehtävä2

Esimerkissä 3 riveittäin:

  1. Ohjataan kahdella väkäsellä (>>) teksti uuden nimiseen tiedostoon. Mikäli tiedosto olisi olemassa, menisi teksti sen loppuun. Jos käytetään yhtä väkästä (>), toimisi ensimmäisellä kerralla samalla tavalla (eli loisi uuden tiedoston), mutta toisella kertaa korvaisi vanhan sisällön.
  2. Tarkistetaan tilanne.
  3. Nyt hakemistossa on kaksi tiedostoa.
  4. Tarkistetaan myös cat-komennolla luotu tiedosto
  5. Tiedoston sisältö tulostuu näytölle.
  6. Ohjataan kahdella nuolella 1. rivillä luotuun tiedostoon toinen sana.
  7. Ohjataan kahdella nuolella 1. rivillä luotuun tiedostoon kolmas sana.
  8. Tarkistetaan tilanne.
  9. Hakemistosta löytyy samat kaksi tiedostoa kuin rivillä kolme.
  10. Tarkistetaan demo2.txt:n sisältö cat-komennolla.
  11. Nyt tiedoston sisältö ei korvautunut, kuten yhden nuolen tapauksessa, vaan rivillä 6 tehty ohjaus ohjautui aiemman sisällön perään.

Tulostuksen ohjausta tehdessä pelkkä hakemiston sisällön tarkastelu ei vielä kerro, mitä tiedosto todella sisältää. Luotujen tiedostojen sisällön voi tarkistaa esimerkeissä käytetyllä cat-komennolla tai nanolla antamalla luodun tiedoston nimi komennon parametriksi.

Onko tossa esimerkkilaatikossa rivit 5 ja 6 väärillä paikoilla?

VL: vaihdoin, mutta eikös tuossa ollut myös viimeinen tuloste väärin, kun siellä pitäisi olla sama rivi 2x.

22 Dec 22 (edited 22 Dec 22)

Video: Tiedostojen luominen

5. Hakemistojen ja tiedostojen siirtäminen, kopiointi ja poistaminen

Tiedostoja on luotu ja niin on hakemistojakin. Karolla kuitenkin herää huoli: Entä jos teenkin virheen ja luon jotain väärään paikkaan tai väärällä nimellä? Entä jos jokin tiedosto tai koko hakemisto onkin erityisen tärkeä ja haluan kopioida sen muualle turvaan? Mitä jos jokin nyt tarpeellinen tiedosto tulee jonain tulevana aikana täysin tarpeettomaksi ja siitä pitää päästä eroon? Onneksi komentorivillä voi sekä tiedoston, että hakemiston halutessaan siirtää, nimetä uudelleen, kopioida tai vaikka poistaa.

5.1 Siirtäminen ja uudelleen nimeäminen

Sekä tiedostojen ja hakemistojen siirtäminen että uudelleen nimeäminen tapahtuvat komennolla mv (move).

Siirrettäessä parametreiksi tulevat siirrettävä tiedoston tai hakemiston nimi sekä polku, minne tiedosto siirretään. Siirto toimii vastaavasti kuin graafisessa maailmassa tiedoston leikkaaminen ja liittäminen jonnekin toiseen paikkaan. Alkuperäiseen sijaintiin ei siis jää tiedostoa.

Uudelleen nimettäessä Komennon parametreiksi tulevat nimettävän tiedoston tai hakemiston nimi ja tiedoston/hakemiston uusi nimi.

Esimerkki 1

kayttaja@omakone:~/itkp1010$ ls
demo.txt demo2.txt demot
kayttaja@omakone:~/itkp1010$ mv demo.txt harjoitus.txt
kayttaja@omakone:~/itkp1010$ ls
harjoitus.txt demo2.txt demot
kayttaja@omakone:~/itkp1010$ mv harjoitus.txt demot
kayttaja@omakone:~/itkp1010$ mv demo2.txt ~/itkp1010/demot
kayttaja@omakone:~/itkp1010$ ls
demot
kayttaja@omakone:~/itkp1010$ cd demot/
kayttaja@omakone:~/itkp1010/demot$ ls
harjoitus.txt demo2.txt

Esimerkissä 1:

  • Rivillä 3 demo.txt uudelleen nimetään mv-komennolla harjoitus.txt:ksi.
  • Rivillä 6 samalla komennolla siirretään harjoitus.txt demot-hakemistoon. Siirto tehdään suhteellisen viittauksen avulla.
  • Rivillä 7 myös demo2.txt siirretään demot-hakemistoon. Siirto tehdään absoluuttisen viittauksen avulla.

Siirtäminen ja uudelleennimeäminen komentorivillä

5.2 Kopiointi

Tiedostoja kopioidaan komennolla cp. Kopiointi komennolla voit siirtää tiedoston hakemistosta toiseen ja samalla nimetä sen uudestaan. Erona siirtämiseen on, että kopioinnissa alkuperäinen tiedosto säilyy myös alkuperäisessä hakemistossa.

Kopion voi myös tehdä alkuperäiseen hakemistoon. Tällöin komento ei tarvitse tiedostopolkuja, ainoastaan kopioitavan tiedoston nimen ja nimen kopiolle. Huomaa, jos luot samaan hakemistoon kopion tiedostosta ja nimeät sen samalla nimellä, kuin jo jokin hakemistossa oleva tiedosto, tämä tiedosto korvataan kopiolla. Eli vahingossa voit menettää tiedostoja! Komentorivillä ei ole vastaavanlaisia varoituksia kuin graafisessa maailmassa saman nimisistä jo olemassa olevista tiedostoista eikä komentorivillä tehdyissä kopioinneissa tiedostojen nimet täydenny järjestysnumeroilla, kuten esimerkiksi Windowsissa tapahtuu, jos lataat samaan kansioon saman tiedoston useaan kertaan.

Kopiointi komennolla pystyy myös uudelleen nimeämään kopion toiseen hakemistoon.

Esimerkki 2

kayttaja@omakone:~/itkp1010$ ls
harjoitus1.txt harjoitus2.txt
kayttaja@omakone:~/itkp1010$ cp harjoitus1.txt ../itkp1011
kayttaja@omakone:~/itkp1010$ ls
harjoitus1.txt harjoitus2.txt
kayttaja@omakone:~/itkp1010$ cd ../itkp1011
kayttaja@omakone:~/itkp1011$ ls
harjoitus1.txt
kayttaja@omakone:~/itkp1011$ cp harjoitus1.txt tehtävä2.txt
kayttaja@omakone:~/itkp1011$ ls
harjoitus1.txt tehtävä2.txt
kayttaja@omakone:~/itkp1011$ cp ../itkp1010/harjoitus2.txt ./tehtävä3.txt
kayttaja@omakone:~/itkp1011$ ls
harjoitus1.txt tehtävä2.txt tehtävä3.txt

Esimerkissä 2:

  • Rivillä 3 kopioidaan harjoitus1.txt ylähakemistossa sijaitsevaan itkp1011-hakemistoon.
  • Rivillä 5 huomiotavaa on, että kopioitaessa alkuperäinen tiedosto säilyy.
  • Rivillä 8 huomataan, että hakemistoon on syntynyt rivillä 3 luotu kopio.
  • Rivillä 9 luodaan hakemistossa olevasta tiedostosta kopio samaan hakemistoon, jolloin kopiolle on annettava uusi nimi.
  • Rivillä 12 luodaan itkp1010-hakemistossa olevasta harjoitus2.txt kopio, joka nimetään tehtävä3.txt:ksi.

Esimerkeissä viittaukset ovat suhteellisia, mutta muista, että näissäkin tapauksissa voi viittaukset tehdä halutessaan absoluuttisina! (Jos et vielä muista mitä eroa viittauksilla oli, palaa kappaleeseen 4.2!)

Komentorivin eroja graafiseen käyttöliittymään

5.3 Poistaminen

Komentorivillä hakemistojen ja tiedostojen poistaminen sujuu nopeasti ilman graafisen maailman varoitus- ja varmistusilmoituksia. Muista kuitenkin, että komentorivillä työskennellessä ei ole olemassa roskakoria! Poistettu tiedosto on poistettu ja se ei normaalisti ole palautettavissa.

Voit poistaa tyhjän hakemiston komennolla rmdir. Jos olet ehtinyt luomaan hakemistoon tiedostoja, hakemisto on tyhjennettävä ennemmin kuin sen tällä komennolla voi poistaa. Yksittäinen tiedosto poistetaan komennolla rm (remove directory). Molemmat komennot vaativat parametriksi poistettavan hakemiston tai tiedoston nimen.

Hakemisto, jossa on jo tiedostoja on mahdollista poistaa tiedostoineen komennolla rm -r. Käytä vain, jos varmasti tiedät mitä teet!

Esimerkki 3

kayttaja@omakone:~/itkp1010$ ls
demot harkka
kayttaja@omakone:~/itkp1010$ rmdir harkka
kayttaja@omakone:~/itkp1010$ ls
demot
kayttaja@omakone:~/itkp1010$ rmdir demot
rmdir: failed to remove 'demot': Directory not empty

Esimerkissä 3 rivillä 3 poistetaan tyhjä hakemisto harkka, mutta yritettäessä poistaa demot-hakemistoa rivillä 6, saadaan virheilmoitus. Tätä hakemistoa ei voida poistaa, koska se ei ole tyhjä.

Esimerkki 4

kayttaja@omakone:~/itkp1010/demot$ ls
demo1.txt demo2.txt demo3.txt
kayttaja@omakone:~/itkp1010/demot$ rm demo3.txt
kayttaja@omakone:~/itkp1010/demot$ ls
demo1.txt demo2.txt
kayttaja@omakone:~/itkp1010/demot$

Esimerkissä 4 rivillä 3 rm-komennolla poistetaan demot-hakemistosta löytyvä demo3.txt.

Hakemistojen ja tiedostojen poistaminen

5.4 Koonti komennoista

Tähän osioon on koottu taulukkoon koonti Unix-komennoista. Taulukossa on myös komentoja, jotka on käsitelty materiaalin aiemmissa luvuissa.

Komentojen koonti

# shellSiirtoKopioPoisto

6. Korvausmerkit

Jokerimerkit, korvausmerkit tai wildcardsit ovat merkkejä, joilla voidaan tekstissä esimerkiksi korvata yksittäisiä tai useampia merkkejä. Tässä yhteydessä käsitellään merkit * ja ?. Muitakin on olemassa, mutta näillä kahdella pärjää pitkälle.

6.1 Korvausmerkki *

*-merkki (tähti-merkki tai asteriski) korvaa tekstissä nollasta useaan mitä tahansa merkkiä. Tämä on esimerkiksi kätevää, jos haluaa käsitellä kaikkia samanmuotoisia tiedostoja hakemistossa. Vaikkapa kaikkiin .txt muotoisiin tiedostoihin voi viitata *.txt.

Otetaan esimerkiksi sanat:
"kissa", "kisu", "koira", "kilpikonna", "tikka"

Esimerkki 1

kayttaja@omakone:~/itkp1010$ ls
demo1.txt demo2.txt demo3.txt demo4.txt demo5.txt harkka luennot ohjaukset
kayttaja@omakone:~/itkp1010$ ls *.txt
demo1.txt demo2.txt demo3.txt demo4.txt demo5.txt

Esimerkissä 1:

  • Rivillä 3 rajoitetaan ls-komennon antamaa listausta koskemaan vain .txt-päätteisiä objekteja.

Esimerkki 2

kayttaja@omakone:~/itkp1010$ mv *.txt demot
kayttaja@omakone:~/itkp1010$ ls
demot harkka luennot ohjaukset
kayttaja@omakone:~/itkp1010$ cd demot
kayttaja@omakone:~/itkp1010/demot$ ls
demo1.txt demo2.txt demo3.txt demo4.txt demo5.txt

Esimerkissä 2:

  • Rivillä 1 jatketaan esimerkki 1. tilanteesta ja siirretään kaikki txt.-päätteiset objektit demot-hakemistoon
  • Rivillä 6 esimerkissä 1. itkp1010-hakemistossa olleet tiedostot löytyvät nyt demot-hakemistosta.

6.2 Korvausmerkki ?

? -merkki korvaa täsmälleen yhden minkä tahansa merkin. Esim. ?.pdf viittaa tiedostoon, joka on PDF ja sen nimessä on ainoastaan yksimerkki. Jos haluat korvata useamman merkin, niin se onnistuu lisäämällä ?-merkkejä. Esim. demo.??? viittaa kaikkiin demo-nimisiin tiedostoihin, joiden tiedostomuoto koostuu kolmesta merkistä. Tähän esimerkkiin sopivia tiedostoja voi olla siis vaikkapa demo.txt, demo.pdf tai demo.doc.

Esimerkki 3

kayttaja@omakone:~/itkp1010/demot/demot$ ls
demo1.txt demo3.txt demo5.txt vastaukset2.txt vastaukset4.txt
demo2.txt demo4.txt vastaukset1.txt vastaukset3.txt vastaukset5.txt
kayttaja@omakone:~/itkp1010/demot/demot$ ls demo?.txt
demo1.txt demo2.txt demo3.txt demo4.txt demo5.txt
kayttaja@omakone:~/itkp1010/demot/demot$ cd ../
kayttaja@omakone:~/itkp1010/demot$ ls
demo1.txt demo2.txt demo3.txt demo4.txt demot harjoitukset luennot ohjaukset
kayttaja@omakone:~/itkp1010/demot$ rm ?????.txt
kayttaja@omakone:~/itkp1010/demot$ ls
demot harjoitukset luennot ohjaukset

Esimerkissä 3 hyödynnetään ?-merkkiä kahdella tavalla. Ensimmäisenä esimerkissä rivillä 4 yhdellä kysymysmerkillä viitataan yhteen mihin tahansa merkkiin eli listaukseen tulevat kaikki demo-alkuiset tiedostot, mutta ei vastaus-tiedostoja. Toisena esimerkissä rivillä 9 viitataan kaikkiin .txt päätteisiin tiedostoihin, joissa on viisi merkkiä ja poistetaan ne (muista, että tällä todellakin poistat kaikki sopivat tiedostot. Jos kokeilet itse, varmista, ettei hakemistossa ole ehtoja täyttäviä tärkeitä tiedostoja!).

Korvausmerkit * ja ?

Kiinnostuneille lisää jokerimerkkejä löytyy esim. GNU Linux Tools Summary (englanniksi).

# aukko1

6.3 find-komento

find on kätevä komento, kun pitää etsiä hakemistorakenteesta hakemistoja tai tiedostoja. Komento toimii lähtökohtaisesti rekursiivisesti eli se etsii etsittävästä hakemistosta ja sen kaikista alihakemistoista ja niin edelleen. Tämä voidaan myös tarvittaessa estää. Komento rakentuu seuraavalla tavalla:

komento + mistä polusta etsitään + mitä ominaisuutta etsitään + mitä haun tuloksille tehdään

Komentoon voi määrittää useita eri ominaisuuksia hakua varten samaan hakuun. Esimerkiksi: find . -name "demo" -ls tulostaa oletushakemistosta, kaikista sen alihakemistoista ja alihakemistojen alihakemistoista jne. kaikki objektit, joiden nimessä on jossain kohtaa merkkijono: demo. Saatu listaus tulostetaan näytölle listauksena, jossa on mm. käyttöoikeudet ja kunkin tiedoston polut alkaen oletushakemistosta.

Edellisessä kappaleessa hakutermi on laitettu lainausmerkkeihin (" tai '). Tällä varmistetaan, että find-komento itse tulkitsee hakutermissä olevat korvausmerkit. Jos lainausmerkkejä ei laiteta, tulkitsee komentotulkki ensin korvausmerkit ja tulos voi olla eri kuin halutaan tai et saa tulosta ollenkaan. Tietyissä tapauksissa ilman lainausmerkkejä saadaan täsmälleen samat hakutulokset, mutta tässä vaiheessa on syytä käyttää hakutermin ympärillä lainausmerkkejä oikeiden hakutulosten saamiseksi.

Hyödyllisiä ominaisuuksia:

  • -name = hakusana esiintyy nimessä, tarvitsee peräänsä hakusanan
  • -type = haettavan objektin tyyppi, tavallisesti tarvittavia tyyppejä voi olla esim. d = hakemisto ja f = file

Tuloksille voi tehdä:

  • -print = tulostaa haun tulokset näytölle (tämä tapahtuu automaattisesti, jos jätetään määrittämättä komentoon)
  • -ls = enemmän tietoja sisältävä listaus haun tuloksista

Esimerkki 4: Etsitään oletushakemistosta kaikkia, joissa nimi alkaa demo ja tulostetaan lista näytölle.

kayttaja@omakone:~$ find . -name "demo*" -print
./itkp1011/demot
./opiskelu/itkp102_ohjelmointi1/demo2
./opiskelu/itkp102_ohjelmointi1/demo1
./itkp1010/demo1.txt
./itkp1010/demot
./itkp1010/demot/
./itkp1010/demot/demo1.txt
./itkp1010/demot/demo3.txt
./itkp1010/demot/demo2.txt
./itkp1010/demot/demo5.txt
./itkp1010/demot/demo4.txt

Esimerkki 5: Vastaava tulos, kuin esimerkki 1, saadaan myös ilman -print.

kayttaja@omakone:~$ find . -name "demo*"
./itkp1011/demot
./opiskelu/itkp102_ohjelmointi1/demo2
./opiskelu/itkp102_ohjelmointi1/demo1
./itkp1010/demo1.txt
./itkp1010/demot
./itkp1010/demot/
./itkp1010/demot/demo1.txt
./itkp1010/demot/demo3.txt
./itkp1010/demot/demo2.txt
./itkp1010/demot/demo5.txt
./itkp1010/demot/demo4.txt

Esimerkki 6: Vastaava haku, kuin edellisissä. Tulostetaan enemmän tietoja tulostavalla -ls-valitsimella.

kayttaja@omakone:~$ find . -name "demo*" -ls
53092 4 drwxr-xr-x  2 kayttaja ryhma   4096 Apr 19 21:08 ./itkp1011/demot
53082 4 drwxr-xr-x  2 kayttaja ryhma   4096 Apr 16 07:53 ./opiskelu/itkp102_ohjelmointi1/demo2
53081 4 drwxr-xr-x  2 kayttaja ryhma   4096 Apr 16 07:53 ./opiskelu/itkp102_ohjelmointi1/demo1
53089 4 -rw-r--r--  1 kayttaja ryhma    176 Apr 17 14:15 ./itkp1010/demo1.txt
53091 4 drwxr-xr-x  7 kayttaja ryhma   4096 Apr 19 18:38 ./itkp1010/demot
53088 4 -rw-r--r--  1 kayttaja ryhma    284 Apr 19 12:36 ./itkp1010/demot/demo1.txt
53097 4 -rw-r--r--  1 kayttaja ryhma    624 Apr 19 15:21 ./itkp1010/demot/demo3.txt
53096 4 -rw-r--r--  1 kayttaja ryhma     63 Apr 19 12:37 ./itkp1010/demot/demo2.txt
53099 4 -rw-r--r--  1 kayttaja ryhma     52 Apr 19 15:21 ./itkp1010/demot/demo5.txt
53098 4 -rw-r--r--  1 kayttaja ryhma    205 Apr 19 15:21 ./itkp1010/demot/demo4.txt

Esimerkki 7: Esimerkki 3 vastaava haku, mutta lisäyksenä haetaan vain tiedosto-tyyppisiä objekteja

kayttaja@omakone:~$ find . -type f -name "demo*" -ls
53089 4 -rw-r--r--  1 kayttaja ryhma   176 Apr 17 14:15 ./itkp1010/demo1.txt
53088 4 -rw-r--r--  1 kayttaja ryhma   284 Apr 19 12:36 ./itkp1010/demot/demo1.txt
53097 4 -rw-r--r--  1 kayttaja ryhma   624 Apr 19 15:21 ./itkp1010/demot/demo3.txt
53096 4 -rw-r--r--  1 kayttaja ryhma    63 Apr 19 12:37 ./itkp1010/demot/demo2.txt
53099 4 -rw-r--r--  1 kayttaja ryhma    52 Apr 19 15:21 ./itkp1010/demot/demo5.txt
53098 4 -rw-r--r--  1 kayttaja ryhma   205 Apr 19 15:21 ./itkp1010/demot/demo4.txt

find-komento

Lisää find-komennon ominaisuuksista voi lukea: Find Command In Unix: Find Files With Unix Find File (englanniksi).

6.4 Tiedostojen nimeämisestä

Korvausmerkit tai muut erikoisuudet ovat komentorivityöskentelyssä haastavia tiedostojen nimissä. Ylipäänsä ja etenkin tässä yhteydessä tiedostojen nimiin ei kannata sisällyttää mitään seuraavista merkeistä:

Ääkköset (ä, ö, å) 
Erikoismerkkit (~, ^, ", ', *, `, {,},|,<,>,?,#,!,;,&, \)
Välilyöntejä

Jos erikoismerkkejä tai välilyöntejä on pakko tiedostojen nimiin laittaa, komentorivillä ne on huomioitava joko \-merkillä erikoismerkin edessä tai laittamalla tiedoston nimi lainausmerkkeihin. Myös tässä osiossa käsitellyt merkit (* ja ?) pitää kertoa komentoriville erikseen, jos niitä on käytetty tiedoston nimessä. Muutoin se tulkitaan jokerimerkiksi eikä osaksi tiedoston nimeä.

Tekstistä vissiin puuttuu /-merkki kohdassa "...huomioitava joko -merkillä..."

VL: ei siis / vaan \. Tuo oli siinä, mutta koska myös TIMissä se pitää huomioida kirjoittamalla 2x, niin se ei näkynyt. Vastaavia voi olla muuallakin, joten kerro jos huomaat.

11 Mar 23 (edited 12 Mar 23)

Esimerkki 8:

kayttaja@omakone:~/itkp1010/demot$ mkdir tenttiin?
kayttaja@omakone:~/itkp1010/demot$ ls
demot harjoitukset luennot ohjaukset 'tenttiin?'
kayttaja@omakone:~/itkp1010/demot$ mkdir tenttiin1
kayttaja@omakone:~/itkp1010/demot$ ls
demot harjoitukset luennot ohjaukset tenttiin1 'tenttiin?'
kayttaja@omakone:~/itkp1010/demot$ rmdir tenttiin?
kayttaja@omakone:~/itkp1010/demot$ ls
demot harjoitukset luennot ohjaukset
kayttaja@omakone:~/itkp1010/demot$

Esimerkissä 8 hakemiston nimessä oleva kysymysmerkki tulkitaan rivillä 7 hakemistoa poistettaessa korvausmerkiksi ja vahingossa poistetaan toinenkin hakemisto.

Esimerkki 9:

kayttaja@omakone:~/itkp1010/demot$ ls
demot harjoitukset luennot ohjaukset tenttiin1 'tenttiin?'
kayttaja@omakone:~/itkp1010/demot$ rmdir tenttiin\?
kayttaja@omakone:~/itkp1010/demot$ ls
demot harjoitukset luennot ohjaukset tenttiin1
kayttaja@omakone:~/itkp1010/demot$

Esimerkissä 9 rivillä 3 on oikea tapa poistaa kysymysmerkin sisältävä hakemisto. Tällä rivillä erikoismerkki huomioidaan \-merkillä.

7. Komentojen putkittaminen

Karo alkaa olla jo aika haka komentorivin perusteissa. Korvausmerkkien harjoittelun jälkeen hän miettii, että voisiko työskentelyä yhäkin tehostaa. Voisiko komentorivillä peräkkäisyyden sijaan käskeä tietokonetta tekemään kerralla enemmän? Entä voisiko tekstitiedostot lukea ilman, että niitä joka kertaa avaa editorilla? Vastaukseksi osoittautuu jälleen kyllä ja työkaluiksi tällä kertaa komentojen putkittaminen ja grep-komento.

7.1 Putkittaminen

Putkituksella voit suorittaa useita komentoja peräkkäin samalla rivillä. Putkituksessa siis kirjoitetaan komentoja peräkkäin ja komennot suoritetaan peräkkäin automaattisesti. Komennot erotetaan toisistaa |-merkillä.

Putkituksen käytössä tulee ymmärtää vielä paremmin termit "syöte" ja "tuloste".

syöte = esimerkiksi tiedosto, listaus tai muu vastaava, joka syötetään komennolle parametrina. Esimerkiksi nano-komennolle annettava tiedoston nimi toimii syötteenä.

tuloste = tulos tai tuotos, jonka komentonnon suorittaminen tuottaa. Esimerkiksi ls-komennon tuloste on listaus hakemiston sisällöstä.

Tehokkaassa putkituksessa ensimmäisen komennon antama tuloste toimii seuraavan komennon syötteenä ja niin edelleen.

Esimerkki 1

kayttaja@omakone:~/opiskelu$ ls | less
itkp1010_digitaalisen_osaamisen_perusteet
itkp1011_web_julkaiseminen
itkp102_ohjelmointi1
itky100_yliopisto-opiskelu

Esimerkissä 1 ensimmäisellä rivillä ls-komennon syöte ohjataan putkittamalla less-komennolle. less-komento antaa tulosteena listan hakemiston sisällöistä.

less ja more ovat simppeleitä komentoja, jotka tulostavat tulosteen hieman eri tavoin näytölle. Ne ottavat parametriksi syötteen, kuten esimerkissä 1. Tutustu itse näiden käyttöön! 'q' sulkee ohjelman.

Esimerkki 2

kayttaja@omakone:~$ echo tehtävä 1. > demo1.txt | mv demo1.txt demot/
kayttaja@omakone:~$ ls
demot harkka itkp1010 itkp1011 ohjaukset
kayttaja@omakone:~$ cd demot/
kayttaja@omakone:~/demot$ ls
demo1.txt
kayttaja@omakone:~/demot$ cat demo1.txt
tehtävä 1.

Esimerkissä 2:

  • Rivillä 1. luodaan ensin tulostuksen ohjauksen avulla tiedosto ja putkituksen avulla se siirretään heti demot hakemistoon.
  • Rivillä 6 huomataan, että demo1.txt löytyy mistä pitikin.
  • Rivillä 8. tarkistetaan, että tiedostossa on juuri se teksti mitä pitikin.

Putkitus

7.2 grep-komento

grep-komennolla voidaan poimia tiedostoista rivejä, joissa esiintyy komennossa mainittu haluttu merkkijono. grep-komennolle annetaan parametreiksi merkkijono, jota etsitään ja tiedoston nimi, josta etsintä tehdään.

Toimiva grep-komento voisi olla vaikkapa:

grep tehtävä demo1.txt

Tällä komennolla etsitään kaikkia niitä rivejä tiedostosta demo1.txt, jotka sisältävät sanan tai sanan osan: tehtävä.

grep-komennolle hyödyllisä valitsimia ovat:

  • -c = count, kertoo osumien lukumäärän eli monellako rivillä hakutulos esiintyy.
  • -n = kertoo löydettyjen rivien rivinumeron. Helpottaa haluttujen rivien löytymistä pitkistä tiedostoista.
  • -r = tekee haun rekursiivisesti hakemiston sisällölle. Eli kohteeksi annetaan hakemisto ja grep käy läpi kaikki hakemiston sisältämät tiedostot

Esimerkki 3

kayttaja@omakone:~/demot$ grep komentorivi demo1.txt
Tekstissä tulee esiintyä komentorivi säännöllisesti.
Tämä sen takia, että komentorivi ei sisällä roskakoria.
Kun työskennellään komentorivillä, on syytä tietää mitä tekee.
Älä koskaan suorita komentorivillä komentoja, joista et tiedä mitä ne tekee.
Internetissä ilkeät tahot voivat suositella komenotoja, joilla komentorivi sekoaa.

Esimerkin 3 ensimmäisellä rivillä etsitään kaikkia niitä rivejä tiedostosta demo1.txt, joissa esiintyy komentorivi-sana tai sanan osa. Lopuille riveille tulostuu löydetyt rivit. Huomaa, että hakusana toimii niin, kuin komentorivi-sanan ympärillä olisi *-korvausmerkit. Näin myös esim. komentorivillä on suotuisa hakutulos.

Esimerkki 4

kayttaja@omakone:~/demot$ grep -c komentorivi demo1.txt
5

Esimerkissä 4 tulostetaan esimerkin 3 vastaavan haun tulosteen rivien lukumäärä -c-valitsimella. Pelkästään tätä valitsinta käyttäessä saat siis vain luvun, monellako rivillä hakuehto mainitaan.

Esimerkki 5

kayttaja@omakone:~/demot$ grep -n komentorivi demo1.txt
4:Tekstissä tulee esiintyä komentorivi säännöllisesti.
10:Tämä sen takia, että komentorivi ei sisällä roskakoria.
13:Kun työskennellään komentorivillä, on syytä tietää mitä tekee.
14:Älä koskaan suorita komentorivillä komentoja, joista et tiedä mitä ne tekee.
16:Internetissä ilkeät tahot voivat suositella komenotoja, joilla komentorivi sekoaa.

Esimerkissä 5 -n-valitsin lisää rivinumerot hakutulosten eteen. Muutoin haku ja hakutulokset ovat samat kuin esimerkissä 3.

Esimerkki 6

kayttaja@omakone:~$ grep -r -n komentorivi demot
demot/demo1.txt:4:Tekstissä tulee esiintyä komentorivi säännöllisesti.
demot/demo1.txt:10:Tämä sen takia, että komentorivi ei sisällä roskakoria.
demot/demo1.txt:13:Kun työskennellään komentorivillä, on syytä tietää mitä tekee.
demot/demo1.txt:14:Älä koskaan suorita komentorivillä komentoja, joista et tiedä mitä ne tekee.
demot/demo1.txt:16:Internetissä ilkeät tahot voivat suositella komenotoja, joilla komentorivi sekoaa.
demot/demo2.txt:1:komentorivi
demot/demo2.txt:3:komentorivitesti tekstiä

Esimerkissä 6 suoritetaan grep-komento rekursiivisesti ja tuloksista kerätään rivinumerot. Etsinnän tuloksena löydetään seitsemän riviä ja nyt rivin sisällön ja rivinumeron edessä näkyy myös polku, mistä tiedostosta rivi on löytynyt.

grep-komento on erityisen tehokas putkittaessa komentoja. Sen hyödyt tulevatkin esille etsittäessä esimerkiksi tuhansien tiedostojen joukosta tiettyä tai tiettyjä tiedostoja. grep komennolle syötteeksi voidaan siis esimerkiksi putkittaa ls-komennon syöte seuraavasti:

ls | grep hakusana

Tällaiseen komentoon ei erikseen tarvitse grepille kertoa mistä etsitää. Putkitus hoitaa automaattisesti ls-komennon tulosteen grepille syötteeksi.

Esimerkki 7

kayttaja@omakone:~$ cat essee.txt | grep työ
Putkittaminen on työn alla
Komentorivi on kätevä työkalu
Vähänkin syvemmällä tietotekniikassa, tarvitset sitä työssäsi.
Tämän lisäksi tarvitaan harjoitustyötä.

Esimerkissä 7 luetaan cat-komennolla essee.txt:n sisältö ja putkitetaan tuloste grepin syötteeksi. Näytölle tulostuu rivit, joissa hakutermi esiintyy.

Esimerkki 8

kayttaja@omakone:~$ cat essee.txt | grep työ | more
Putkittaminen on työn alla
Komentorivi on kätevä työkalu
Vähänkin syvemmällä tietotekniikassa, tarvitset sitä työssäsi.
Tämän lisäksi tarvitaan harjoitustyötä.

Esimerkissä 8 huomataan, että komentoja voidaan putkittaa enemmänkin kuin kaksi. Tässä tuloste on täsmälleen sama kuin esimerkissä 7, mutta se on kulkenut more-komennon kautta.

Esimerkki 9

kayttaja@omakone:~$ cat essee.txt | grep työ | less

Esimerkissä 9 on esimerkkejä 7 ja 8 vastaavat kaksi komentoa, mutta less-komento aiheuttaa tulosteen muodostumisen omaan "ikkunaan" komentorivillä. Kokeile itse miltä tämä näyttää!

grep-komento

grep-komennolla on hyvin laajasti valitsimia ja sillä voidaan tehdä monia asioita. Kiinnostuneille lisätietoja löytyy täältä: grep-komento ja säännölliset lausekkeet

7.3 Muita hyviä komentoja putkitukseen

Tässä osiossa esitellään vielä muutama komento, jotka palvelevat erityisen hyvin putkitettaessa. Tutustutaan ensin head ja tail -komentoihin.

7.3.1 head ja tail

Pitkissä tuloksissa head ja tail voivat auttaa hahmottamaan tulosteen rakennetta. head tulostaa syötteen ensimmäiset rivit ruudulle, tail tulostaa syötteen viimeiset rivit. Syöte voi olla tavallinen tiedosto, tai putken edellisen osan tuloste.

Toimivia komento voisi olla:

head demo1.txt

ja

tail demo1.txt

Ensimmäinen komento tulostaa demo1.txt tiedoston ensimmäiset rivit. Jälkimmäinen komento tulostaa tiedoston "hännän", eli viimeiset rivit.

head ja tail -komennolle hyödyllinen valitsin on ainakin:

-n, jota seuraa numero = tulostaa numeron verran rivejä

Esimerkki 10

kayttaja@omakone:~$ ls /usr/bin | head
NF
VGAuthService
X11
[
aa-enabled
aa-exec
add-apt-repository
addpart
addr2line
apport-bug
kayttaja@omakone:~$ ls /usr/bin | tail -n 3
znew
zsh
zsh5

Esimerkissä 10:

  • Rivilllä 1 listataan /usr/bin hakemiston sisältö ja putkittaen tulostetaankin näytölle vain kymmenen riviä (rivit 2-11) hyvin pitkästä sisällöstä
  • Rivillä 12 listataan /usr/bin hakemiston sisältö uudelleen. Tällä kertaa se putkitetaan tail komennolle, jolle annetaan valitsimeksi -n, jota seuraa numero kolme. Näin tulostetaan listauksesta vain kolme viimeistä riviä (rivit 13-15).

7.3.2 wc

Seuraavaksi voimme kokeilla wc-komentoa. Komennon nimi viittaa sanamäärään (word count) ja sillä voikin laskea tiedostosta tai muusta lähteestä muun muassa sanamääriä. Komento tulostaa seuraavat tiedot annetussa järjestyksessä:

  • Rivinvaihtojen määrän
  • Sanamäärän
  • Tiedoston koon tavuissa
  • Jos on valittu useampi tiedosto, niin tulostetaan myös kunkin edellisen kohdan tulokset yhteensä.

wc-komennolle hyödyllisä valitsimia ovat:

  • -l = kertoo vain rivimäärän
  • -w = kertoo vain sanamäärän
  • -m = kertoo merkkien määrän

Esimerkki 11

kayttaja@omakone:~$ ls /usr/bin | wc
   1026    1026    9713
kayttaja@omakone:~$ ls -l /usr/bin | wc
   1027    9586   64163
kayttaja@omakone:~$ wc demo1.txt demo2.txt
     8     16    167 demo1.txt
  2661  22541 212992 demo2.txt
  2669  22557 213159 total

Esimerkissä 11:

  • Rivillä 1 listataan /usr/bin hakemiston sisältö. Putkittamalla lasketaan tulosteen pituus.
  • Rivi 2: Rivinvaihtoja tulosteessa on 1026. Myös sanamäärä on 1026. Bittejä tulosteessa on 9713
  • Rivillä 3 ls-komennolle on annettu valitsin -l, eli listataan hakemiston
  • sisältö pitkässä muodossa. Listaus on jälleen putkitettu wc-komennolle
  • Rivi 4: Rivejä tuli yksi lisää, niitä on tässä listausmuodossa 1027. Sanoja on useita jokaista riviä kohden, yhteensä 9586. Bittejä tiedon esittämiseen tarvitaan 64163.
  • Rivillä 5 lasketaan demo-tiedostojen pituuksia wc-komennolla
  • Rivillä 6 nähdään demo1.txt tiedoston tiedot
  • Rivillä 7 nähdään demo2.txt tiedoston tiedot
  • Rivillä 8 nähdään demo1.txt ja demo2.txt tiedostojen tiedot summattuna yhteen. Tiedostoissa on yhteensä 2669 rivinvaihtoa, 22557 sanaa, ja niiden koko on yhteensä 213159 bittiä.

7.3.3 sort

Viimeisenä on vuorossa sort-komento. Tämä komento "sorttaa", eli järjestää tulosteensa (aakkos)järjestykseen

Toimiva komento voisi olla vaikkapa: sort demo1.txt

Komento tulostaa näytölle demo1.txt tiedoston sisällön rivi kerrallaan aakkosjärjestyksessä. Huomaa, ettei komento muuta tiedostoa tai sen sisältöä.

sort-komennolle hyödyllisiä valitsimia ovat:

  • -n = järjestää numerot oikein
  • -f = kirjainkoolla ei väliä
  • -r = käänteinen järjestys

Esimerkki 12

kayttaja@omakone:~$ sort numerot.txt
1
10
13
2
kayttaja@omakone:~$ sort -n numerot.txt
1
2
10
13

Esimerkissä 12:

  • Rivillä 1 järjestetään numerot.txt
  • Riveillä 2-5 sisältö tulostuu järjestyksessä rivi kerrallaan. Huomaa, että 2 tulostuu viimeiseksi, koska aakkosjärjestyksessä numero 2 tulee numeron 1 jälkeen.
  • Rivillä 6 järjestetään jälleen sama tiedosto, mutta nyt valitsimella -n, joka järjestää luvut suuruusjärjestykseen.

Esimerkki 13 (vertaa esimerkkiin 7)

kayttaja@omakone:~$ grep työ essee.txt | sort
Komentorivi on kätevä työkalu
Putkittaminen on työn alla
Tämän lisäksi tarvitaan harjoitustyötä.
Vähänkin syvemmällä tietotekniikassa, tarvitset sitä työssäsi.
kayttaja@omakone:~$ grep työ essee.txt | sort -r
Vähänkin syvemmällä tietotekniikassa, tarvitset sitä työssäsi.
Tämän lisäksi tarvitaan harjoitustyötä.
Putkittaminen on työn alla
Komentorivi on kätevä työkalu

Esimerkissä 13:

  • Rivillä 1 etsitään grep-komennolla essee.txt-tiedostosta rivejä, joissa puhutaan työstä. Tulos sitten järjestetään riveittäin aakkosjärjestykseen putkittamalla se sort-komennolla.
  • Rivit 2-5: Hakutulokset järjestettynä
  • Rivillä 6 tehdään sama haku kuin rivillä 1, mutta nyt -r valitsimella tulokset järjestetäänkin käänteiseen aakkosjärjestykseen.
# shellPutkitus
# jarjestelmanhallinta

8. Järjestelmän- ja tiedostojenhallinta

Karo on päätynyt webohjelmointikurssille ja hänelle on tullut vastaan tilanne, ettei verkkosivut näykään samalla tavalla kaikille käyttäjille. Karo pohtii, missähän ongelma tällä kertaa on? Vastaus löytyy tiedostojen ja hakemistojen käyttöoikeuksista. Karon pitää oppia, miten käyttöoikeuksia säädetään niin, että hänen web-sivunsa näkyvät oikein niille, joille ne onkin tarkoitettu.

HUOM! Nämä komennot eivät tee mitään Git Bashissa.

# kayttooikeudet

8.1 Erilaiset käyttöoikeudet

Hakemistoilla ja tiedostoilla on aina jonkinlaiset käyttöoikeudet. Välillä on hyödyllistä pystyä muokkaamaan pääsyä ja oikeuksia tiettyihin tiedostoihin. Komentorivillä hakemiston sisällön oikeuksia pääsee tarkastelemaan aiemmin opituilla ls -l ja ls -al -komennoilla.

Esimerkki 1

-rw-r--r--    1 kayttaja ryhma       129 Apr 17 14:15   demo1.txt
drwxr-xr-x    7 kayttaja ryhma      4096 Apr 19 18:38   demot

Esimerkissä 1 ensimmäisestä sarakkeesta löydät oikeuslistauksen.

Listauksen ensimmäinen merkki kertoo tiedostotyypin. Esimerkiksi d viittaa hakemistoon ja - tiedostoon. Esimerkin ensimmäinen objekti on siis tiedosto ja toinen hakemisto. Itse tekemissäsi hakemistoissa ei todennäköisesti muita ole. Kuitenkin esimerkiksi juurihakemistossasi, jonka voit listata komennolla ls -l / (pitkä listaus juurihakemistosta) voit nähdä myös l-tyyppisiä, symbolisesti linkitettyjä hakemistoja.

Jos tiedostotyypit kiinnostavat kovasti, niin Wikipedia opettaa. Kokeile myös komentoa
ls -l /dev

Seuraavat 9 merkkiä kertovat kenen oikeuksista on kyse. Oikeuksia voi olla kolmella eri toimijalla:

  • omistaja (owner), eli käytännössä tiedoston (tai hakemiston) luoja. Huom! seuraavan alaluvun chmod-komennon käyttäjä vastaa tässä tiedoston omistajaa
  • ryhmä (group), Linuxissa voi luoda erilaisia käyttäjäryhmiä, joille voi kootusti antaa oikeuksia. Omissa tiedostoissasi omistaja ja ryhmä ovat käytännöissä samoja. Ryhmiä täytyy miettiä yleensä vasta järjestelmissä, joissa on monia käyttäjiä.
  • muut (others), tähän kuuluvat kaikki ne, jotka eivät kuulu ylempiin toimijoihin.

Jokaista toimijaa kohden on kolme merkkiä eli merkit 2-4 koskevat omistajaa, 5-7 ryhmää ja 8-10 muita.

Esimerkki 2

kayttaja@omakone:~/itkp1010$ ls -l tiedosto
-rwxr--r--      1 kayttaja ryhma        0 May 13 09:30 tiedosto
| | --- |
| |  |  |                          |    r = lukuoikeus 
| |  |  |                          |    w = kirjoitusoikeus
| |  |  |                          |    x = suoritusoikeus
| |  |  |                          |    - = ei oikeutta
| |  |  muut (r--)
| |  ryhmä (r--)
| omistaja (rwx)
|
tiedostotyyppi (-)

Esimerkissä 2 on esitetty oikeuksien jakautuminen toimijoittain.

Esimerkki 3

[kayttaja@jalava ~]$ ls -la
total 2608
drwxrwx---.   24 kayttaja nobody     852 Apr 27 09:49 .
drwxrwxr-x. 6026 root     wheel   155657 Feb 12 15:37 ..
-rwxrwx---.    1 kayttaja users     4925 Feb 24 14:38 .bash_history
drwxrwx---.    3 kayttaja users       22 Apr 22  2019 .config
-rwxrwx---.    1 kayttaja wheel    10653 Apr 27 10:45 .history
-rwxrwx---.    1 kayttaja 1000198     55 Jun  2  2018 .htaccess
drwxrwx---.    2 kayttaja nobody      29 Mar 22 12:48 .ssh
drwxrwx---.    3 kayttaja users       25 Jan 18  2020 Application Data
drwxrwx---.    2 kayttaja nobody      64 Jan 10  2018 CmapToolsLogs
drwxrwx---.    2 root     wheel        0 Aug 17  2020 Config
drwxrwx---.   39 kayttaja nobody    1673 Mar 27 20:08 My Documents
drwxrwx---.    9 kayttaja nobody     256 Nov 18  2019 MyPrograms
-rwxrwx---.    1 kayttaja users     1804 Feb 25 14:26 SCANJOBS.lnk
drwxrwx---.    7 kayttaja wheel      188 Nov 29  2018 SettingsPackages
drwxrwx---.    3 kayttaja nobody     166 Feb 20  2018 blender
drwxrwx---.    2 kayttaja wheel        0 Mar 25  2019 cd
lrwxrwx---.    1 nobody   users       32 Sep  9  2016 html -> /wwwhome/nashome2/kayttaja/html/

Esimerkissä 3 listataan yliopiston jalava-koneelta erään käyttäjän kotihakemiston sisältö komennolla ls -la. Tässä voi käytännössä nähdä, miten koneen käyttäjiä on jaettu eri ryhmiin. Lisäksi tästä listauksesta löytyy riviltä 19 l-tyyppinen symbolinen linkki. Esimerkkejä:

  • -rwxrwxrwx kaikilla edellä mainituilla toimijoilla on kaikki oikeudet tähän tiedostoon.
  • drwx------ tähän hakemistoon luku-, kirjoitus, ja suoritusoikeudet ovat vain omistajalla. Ryhmillä ja muilla ei ole mitään oikeuksia.
  • -rwxr--r-- tähän tiedostoon omistajalla on kaikki oikeudet. Ryhmillä ja muilla on vain lukuoikeus.

Käyttöoikeudet komentorivillä

# jarjestaLs-l
# jarjestaLs-lVaihtoehto

8.2 Oikeuksien muokkaaminen

Komento oikeuksien muokkaamiseen on chmod. Jos haluat muuttaa yhdellä komennolla oikeuksia hakemistolle ja kaikelle mitä se sisältää (tiedostot ja alihakemistot), voi komennolle antaa valitsimen -R (recursive, rekursiivisesti).

Komento koostetaan seuraavasti:
chmod (-R) kenelle, miten, mitä, mille tiedostolle/hakemistolle

Kenelle:

  • u käyttäjä (user). Huom! vastaa edellisen alaluvun omistajaa
  • g ryhmä (group)
  • o muut (other)
  • a kaikki (all) käyttäjä, ryhmä ja muut yhdessä.

Miten:

  • + lisää oikeus.
  • - poista oikeus.
  • =määrää oikeuden absoluuttisesti. Poistaa kaikki entiset oikeudet.

Mitä:

  • r lukuoikeus (read).
  • w kirjoitusoikeus (write).
  • x suoritusoikeus (execute).

Esimerkki 4

kayttaja@omakone:~/itkp1010$ ls -l
total 8
-rw-r--r--      1 kayttaja ryhma        17 Apr 17 14:15 demo1.txt
drwxr-xr-x      7 kayttaja ryhma      4096 Apr 19 18:38 demot
kayttaja@omakone:~/itkp1010$ chmod a+w demo1.txt
kayttaja@omakone:~/itkp1010$ ls -l
total 8
-rw-rw-rw-      1 kayttaja ryhma        17 Apr 17 14:15 demo1.txt
drwxr-xr-x      7 kayttaja ryhma      4096 Apr 19 18:38 demot

Esimerkissä 4 lisätään rivillä 5 kaikille toimijoille kirjoitusoikeudet demo1.txt-tiedostoon. Muutoksen onnistuminen huomataan ennen ja jälkeen muutoksen otetuissa tiedostolistauksista.

Esimerkki 5

kayttaja@omakone:~/itkp1010$ chmod go-w demo1.txt
kayttaja@omakone:~/itkp1010$ ls -l
total 8
-rw-r--r--     1 kayttaja ryhma        17 Apr 17 14:15 demo1.txt
drwxr-xr-x     7 kayttaja ryhma      4096 Apr 19 18:38 demot

Esimerkissä 5 poistetaan ensimmäisellä rivillä ryhmältä ja muilta kirjoitusoikeus. Tarkistaessa huomataan, että palattiin esimerkki 2. aloitustilanteeseen.

Esimerkki 6

kayttaja@omakone:~/itkp1010$ chmod a=rx demo1.txt
kayttaja@omakone:~/itkp1010$ ls -l
total 8
-r-xr-xr-x     1 kayttaja ryhma       17 Apr 17 14:15 demo1.txt
drwxr-xr-x     7 kayttaja ryhma     4096 Apr 19 18:38 demot

Esimerkissä 6 jatketaan esimerkki 3. tilanteesta ja määrätään ensimmäisellä rivillä kaikille absoluuttisesti oikeudet r ja x. Tämän muokkauksen jälkeen kaikilla toimijoilla on siis r ja x oikeudet ja muut aiemmin olleet oikeudet poistetaan. Tässä esimerkissä käyttäjältä poistui kirjoitusoikeus (w).

Esimerkki 7

kayttaja@omakone:~/itkp1010/demot$ ls -l
total 8
-rw-rw-r--     1 kayttaja ryhma       17 Apr 20 21:57 demo1.txt
-rw-rw-r--     1 kayttaja ryhma       17 Apr 20 21:57 demo2.txt
kayttaja@omakone:~/itkp1010/demot$ cd ../
kayttaja@omakone:~/itkp1010$ ls -l
total 8
-rw-rw-rw-     1 kayttaja ryhma       17 Apr 17 14:15 demo1.txt
drwxrwxr-x     2 kayttaja ryhma     4096 Apr 20 21:57 demot
kayttaja@omakone:~/itkp1010$ chmod -R a=rx demot
kayttaja@omakone:~/itkp1010$ ls -l
total 8
-rw-rw-rw-     1 kayttaja ryhma       17 Apr 17 14:15 demo1.txt
dr-xr-xr-x     2 kayttaja ryhma     4096 Apr 20 21:57 demot
kayttaja@omakone:~/itkp1010$ cd demot
kayttaja@omakone:~/itkp1010/demot$ ls -l
total 8
-r-xr-xr-x     1 kayttaja ryhma       17 Apr 20 21:57 demo1.txt
-r-xr-xr-x     1 kayttaja ryhma       17 Apr 20 21:57 demo2.txt

Esimerkissä 7:

  • Ensin tarkastetaan hakemiston sisällön (2 tiedostoa) oikeudet ja itse hakemiston oikeudet.
  • Rivillä 10 määrätään rekursiivisesti kaikille absoluuttiset r ja x -oikeudet demot-hakemistoon.
  • Lopuksi tarkistetaan vastaavasti kuin alussa. Huomataan, että sekä demot hakemiston oikeudet ovat muuttuneet sekä hakemiston sisällä oleville tiedostoille on muuttunut samat oikeudet kuin hakemistolle. Rekursiivinen määräys siis muuttaa hakemiston oikeudet ja tekee samat muutokset myös kaikelle hakemiston sisällölle.

8.2.1 Käyttöoikeuksien muokkaamisesta

Omalla koneella työskennellessä omien hakemistojen kanssa käyttöoikeuksien muokkaamisessa on kohtuullisen vähän käytännön sovelluksia. Käytännössä käyttöoikeudet tulevat kysymykseen silloin, kun samaa sisältöä käsittelee useita käyttäjiä. Tästä konkreettinen esimerkki on johdannon web-sivujen näkyvyys. Käyttöoikeuksia määrätessä on hyvä muistaa pari seikkaa:

  • Oikeuksia ei ole syytä antaa kaikille kaikkia oikeuksia vain varmuuden vuoksi.
  • Jos poistat itseltäsi kaikki oikeudet tiedostoon, et voi esimerkiksi lukea tiedostoa ennen, kuin oikeudet on palautettu. Yksittäisistä tiedostoista kaikkien oikeuksien poistaminen ei aiheuta suurempaa ongelmaa, mutta varo poistamasta itseltäsi oikeuksia vaikkapa koko hakemistorakenteesta. Tällöin oikeuksien palauttaminen voi olla kohtuuttoman työläs urakka.

Käyttöoikeuksien muokkaaminen

Jos käyttöoikeuksien tutkiminen innostaa, niin Wikipedia auttaa eteenpäin.

# shellChmoddausta

Miksiköhän ajaessani tämän muuttakseni oikeuksia saan virheilmoituksen 'No such file or directory' vaikka nämä saan kuitenkin tulostettua näkyviin ls -komennolla?

VL: Sun nykyisessä hakmeistossa ei ole tuota tiedostoa. Laitappa tähän ikkunaan se ls -la niin näet mitä täsäs hakemistossa on.

30 Sep 22 (edited 30 Sep 22)
# chmodAnnetaan

Miksi minulla ei ole vastausoikeutta juuri tähän tehtävään?

VL: syytä en osaa sanoa miksi tuo oli merkitty invalid-kysymykseksi. Otin sen pois, mutta se voi olla vastoin dokmentin tekijän ajatuksia. Toki jos kysymystä ei haluta näyttää se olisi parempi kommentoida piiloon. Nyt kuitenkin voi vastata.

21 Oct 21 (edited 21 Oct 21)
# Millkomennollapoistetaanmuiltalukuoikeuspohjadocxtiedostosta
# chmodAbsolute
# kyschmod1

8.3 sudo, järjestelmän päivittäminen ja ohjelman asentaminen:

Seuraavaa osiota eivät Git Bash ja macOs-käyttäjät voi suoraan tehdä. Myöskään suorakäyttökoneilla sinulla ei ole riittävästi oikeuksia loppuosan tekemiseen. Tässä osiossa opetellaan päivittämään Linux ja asentamaan siihen uusi ohjelma. Järjestelmän päivitys tehtiin jo osiossa kolme, mutta seuraavaksi avataan annettuja komentoja yksityiskohtaisemmin. Windows huolehtii itse päivityksistään (vaikka väkisin), mutta Linux pitää itse muistaa päivittää aika ajoin. Päivittäminen ja ohjelman asentaminen vaativat Windowsissa järjestelmänvalvojan oikeuksia. Unix-komentorivillä nämä "järjestelmänvalvojan" kohotetut oikeudet saadaan komennolla sudo.

8.3.1 sudo

Unix-komentorivillä kuka tahansa ei voi tehdä mitä tahansa. Voidaksesi muokata käyttöjärjestelmää sinun tulee käyttää komentoa sudo (superuser do, tee pääkäyttäjänä). Tämän perään kirjoitat haluamasi komennon, kuten apt update. sudo-komennon käyttö lisää valtaasi, joten käytä sitä vain silloin, kun tarvitset ja tiedät mitä teet. Muuten voit rikkoa järjestelmäsi. Sudo komennon käyttöön tarvitset salasanasi.

sudo apt update

Kuten myöhemmin näytetään, tällä komennolla ladataan päivitykset omalle koneelle.

sudo-komennosta voit oppia lisää linux.fi-sivustolta ja wikipediasta (eng)

8.3.2 apt

sudo komennolla annetaan parametriksi uusi komento. Tämä on se komento, joka tulee suorittaa pääkäyttäjänä. Linuxin päivittämiseen tehty APT-työkalu, jota käytetään komentorivillä komennolla apt. Komennolle annetaan parametriksi tehtävä, kuten update tai upgrade.

Myös apt-ohjelmasta ja -komennosta voit oppia lisää linux.fi-sivustolta ja wikipediasta (eng)

8.3.3 Järjestelmän päivittäminen

Nyt ehkä ymmärrät paremmin, mitä tapahtuu, kun annat komennon päivittää linux komentoriviltä. Anna komento sudo apt update. Syötä salasanasi pyydettäessä.

Esimerkki 8

kayttaja@omakone:~$ sudo apt update
[sudo] password for kayttaja:
Hit:1 http://archive.ubuntu.com/ubuntu focal InRelease
Get:2 http://archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB]
Get:27 http://security.ubuntu.com/ubuntu focal-security/multiverse Translation-en [4316 B]
Fetched 4550 kB in 11s (404 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
33 packages can be upgraded. Run 'apt list --upgradable' to see them.
kayttaja@omakone:~$

Esimerkissä 8:

  • Rivillä 1 annetaan komento sudo apt update
  • Rivillä 2 vaaditaan salasanaa sudo komennon käyttöä varten
  • Riveillä 3-10: apt-komento tekee töitään ja kertoo edistymisestään. Näitä tekstejä ei tarvitse tarkemmin ymmärtää.

Update ainoastaan lataa ja valmistelee päivitykset, se ei asenna niitä. Tätä varten pitää ajaa apt-komento uudestaan, mutta tällä kertaa parametrillä upgrade. Syötä komento sudo apt upgrade. Jos edellisestä sudo-komennon käytöstä on alle viisi minuuttia, niin sinulta ei pyydetä salasanaa. Vastaa kyllä 'Y', kun kysytään, haluatko jatkaa (Esimerkki 9, rivi 14)

Esimerkki 9

kayttaja@omakone:~$ sudo apt upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
  distro-info
The following packages will be upgraded:
  alsa-ucm-conf apport bind9-dnsutils bind9-host bind9-libs cloud-init
  ubuntu-advantage-tools ubuntu-release-upgrader-core
33 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 6818 kB of archives.
After this operation, 2531 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 open-iscsi amd64
2.0.874-7.1ubuntu6.2 [283 kB]
Get:11 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 initramfs-tools-core all
 0.136ubuntu6.5 [47.7 kB]
Setting up bind9-libs:amd64 (1:9.16.1-0ubuntu2.8) ...
Processing triggers for initramfs-tools (0.136ubuntu6.5) ...
kayttaja@omakone:~$

Esimerkissä 9:

  • Rivillä 1 annetaan komento sudo apt upgrade
  • Riveillä 2-5 tehdään alkuvalmisteluja
  • Riveillä 6-11 kerrotaan, mitä asennetaan ja päivitetään
  • Riveillä 12-13 raportoidaan päivityksen lataustarve ja tilatarve
  • Rivillä 14 kysytään, haluatko jatkaa päivitystä, vastaa Y (Yes)
  • Riveillä 15-20 päivitys asennetaan ja sen etenemisestä raportoidaan.

Järjestelmä on nyt päivitetty. Muista päivittää järjestelmääsi säännöllisesti, jos sitä käytät jatkossakin. Harjoitellaan seuraavaksi vielä ohjelman asentamista.

8.3.4 Ohjelman asentaminen

Asennetaan nyt komento unzip, jota tarvitaan osiossa 10, sekä tentissä. Voit myös asentaa muita hyödyllisiä ohjelmia, kuten tree, zip, zsh tai gcc. Jos kirjoitat komentorivillesi komennon unzip ja saat seuraavanlaisen palautteen, niin sitä ei ole vielä asennettu.

Esimerkki 10

kayttaja@omakone:~$ unzip

Command 'unzip' not found, but can be installed with:

sudo apt install unzip

kayttaja@omakone:~$

Esimerkissä 10:

  • Rivillä 1 annetaan komento unzip, jota ei ole asennettu.
  • Rivillä 3 komentorivi kertoo, ettei unzip komentoa löydy, mutta sen voi asentaa kirjoittamalla komentoriville rivin 5 komennon.
  • Rivillä 5 on nyt jo tuttu aloitus sudo apt sitä seuraa parametrit install (asenna) ja unzip (asennettava ohjelma).

Kirjoita seuraavaksi komento sudo apt install unzip komentoriville. (Jos unzip on jo asennettu Linuxiisi, niin asenna sen sijaan tree, zip, zsh tai gcc.)

Esimerkki 11

kayttaja@omakone:~$ sudo apt install unzip
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
  zip
The following NEW packages will be installed:
  unzip
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 172 kB of archives.
After this operation, 580 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://deb.debian.org/debian buster/main amd64 unzip amd64 6.0-23+deb10u2 [172 kB]
Fetched 172 kB in 0s (817 kB/s)
Selecting previously unselected package unzip.
(Reading database ... 52238 files and directories currently installed.)
Preparing to unpack .../unzip_6.0-23+deb10u2_amd64.deb ...
Unpacking unzip (6.0-23+deb10u2) ...
Setting up unzip (6.0-23+deb10u2) ...
Processing triggers for mime-support (3.62) ...
Processing triggers for man-db (2.8.5-2) ...
kayttaja@omakone:~$

Esimerkissä 11:

  • Rivillä 1 annetaan komento sudo apt install unzip, jolla unzip asennetaan.
  • Riveillä 2-11 tehdään asentamisen alkuvalmisteluja.
  • Rivillä 12 kysytään, haluatko jatkaa. Vastaa Y.
  • Riveillä 13-21 raportoidaan asennuksen edistymisestä
# kysAsennus

9. Seuraavat askeleet

Päästyäsi tähän asti olet oppinut komentorivistä perusteet. Oppimasi taidot riittävät hyvin niille informaatioteknologian kursseille, joilla komentoriviä käytetään työkaluna. Lisäksi olet valmis syventämään komentorivitaitojasi niillä kursseilla, joilla sitä opiskellaan syvällisemmin.

Käyttöjärjestelmän-kurssilla pääset syventämään ja soveltamaan Unix-komentorivitaitojasi.

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.