Seuraavat tehtävät ovat osa Haaga-Helian Linux palvelimet kurssia, jonka materiaalit löytyvät sivuilta: https://terokarvinen.com/2021/linux-palvelimet-ict4tn021-3018/ Tällä viikolla annettiin seitsemän kotitehtävää, joista ensimmäisessä tiivistetään artikkeleita ja loput tehdään Linuxissa.
Tehtävät suoritan kotiläppäriltäni, joka on Lenovo Thinkpad P53. Pääasiallisena käyttöjärjestelmänä koneessa on Windows 64-bit Enterprise. Linuxia pyöritän virtuaalikoneella VirtualBoxin kautta, johon on asennettuna Debian 64-bit.
z) ”Lue ja tiivistä. Tiivistelmäksi riittää muutama ranskalainen viiva per artikkeli. (Tässä z-alakohdassa ei tarvitse tehdä testejä tietokoneella)”
”Karvinen 2020: Command Line Basics Revisited”
- Moni komennoista on ajalta ennen internettiä tai Linuxia
- Tärkeimmät Terminal komennot kansioissa liikkumiseen ovat
- pwd (printtaa työkansion nimen)
- ls (listaa tiedostot)
- cd (siirtyminen kansioiden välillä)
- Tärkeimmät Terminal komennot tiedostojen manipulointiin ovat
- mkdir (luo kansion)
- mv (siirtää tiedostoja)
- cp (kopioi tiedostoja)
- rmdir (poistaa kansion)
- rm (poistaa tiedostoja)
- man komennolla voi hakea manuaalista tietoa
- Monessa ohjelmassa on sisäänrakennettu dokumentointi komento –help
- Tabulaattorin painaminen auttaa kirjoituksessa
”YCombinator Hacker News, vapaavalintainen artikkeli kommentteineen Linuxin komentokehotteesta (Kommentit aukeavat siitä pienestä ”420 comments” linkistä. Riittää, kun silmäilet artikkelin ja kommentit soveltuvin osin, osa voi olla kirjan mittaisia etkä ehdi tässä lukea niitä kokonaan. Samoin tiivistelmäksi riittää muutama bulletti, ei tarvitse kattaa koko sisältöä)”
Postauksessa https://news.ycombinator.com/item?id=29568042 esitellään artikkeli (https://danluu.com/cli-complexity/)
- Artikkelissa käydään läpi komentokehotteen komentojen historiaa
- Vuonna 1979 v7 Unixissa oli 11 ls:ään liittyvää komentoa, kun taas mkdir:iä, cp:tä tai pwd:tä ei ollut vielä olemassa
- Vuonna 2017 Ubuntu 17 ls:ään liittyviä komentoja oli jo 58
- Kommenteissa ehdotetaan lukujen näyttämistä visualisointina
a) ”FHS. Esittele kansiot, jotka on listattu ”Command Line Basics Revisited” kappaleessa ”Important directories”. Näytä kuvaava esimerkki kunkin tärkeän kansion sisältämästä tiedostosta tai kansiosta. Jos kyseessä on tiedosto, näytä siitä kuvaava esimerkkirivi. Työskentele komentokehotteessa ja näytä komennot, joilla etsit esimerkit.”
Aloitan tehtävän Googlaamalla mikä on FHS. Kyseessä on wikipedian mukaan Filesystem Hieararchy Standard, eli standarditiedostohierarkia. FHS:ään kuuluvat tärkeät kansiot ovat:
- /
- /home/
- /home/kayttaja
- /etc/
- /media/
- /var/log/
Tehtävä alkaa kello 10.39. Avaan virtuaalikoneen, joka käynnistää automaattisesti Debian Linuxin. Klikkaan Terminalin auki ja annan komennon
pwd

Oletuksena kun Terminalin avaa, ollaan kasiossa /home/tomi, joten aloitetaan tehtävä tästä kansiosta. Katsotaan mitä tämä kansio sisältää. Tiedostot listataan komennolla
ls

Kansio sisältää muita kansioita. Kokeilen kurkata jokaisen kansion sisään, komennolla
ls Kansio/

Missään kansiossa ei ole tiedostoja. Haluaisin löytää komennon, jolla listaan helposti kaikkien kansioiden sisällön kerralla. Kurssin sivuilta muistan komennon
ls –help

Listauksen heti ensimmäisellä rivillä on -a parametri, joka listaa kaikki tiedostot joita hakemistossani on. Annan komennon
ls -a

Noniin, onhan siellä tiedostoja, mutta miksi ne eivät näkyneet ls Kansio/ komennolla? -a parametrin kuvauksessa oli ”do not ignore entries starting with ”. Oletan, että ne ovat piilotettuja tiedostoja, mutta Googletan ”Linux dot files”. Ensimmäinen vastaus sivulla https://askubuntu.com/questions/94780/what-are-dot-files selittää pistetiedostot hyvin. Piste (.) tiedoston nimessä on indikaattori bashille, että näitä tiedostoja ei näytetä normaalissa tiedostolistauksessa, sillä yleisesti ottaen piste-tiedostot sisältävät eri ohjelmistojen asetuksia.
Omaan kansioon tallentuvat muun muassa ladatut tiedostot, kuvat, videot ja dokumentit. Näitä eivät muut käyttäjät näe.
Askel taaksepäin
Seuraavaksi haluan siirtyä /home/ kansioon, eli yhden askeleen alaspäin nykyisestä kansiosta. Tämä onnistuu komennolla
cd ..
Haen kansion listauksen ls. Tässä kansiossa näyttäisi olevan vain yksi kansio nimeltä tomi. Jos käyttäjiä olisi useampi, ne näkyisivät tässä. Omalla käyttäjällä en todennäköisesti pääsisi muiden käyttäjien kansioon ilman super user oikeuksia.
Mennään taas askel taaksepäin / polkuun ja listataan tiedostot

Näyttävät systeemitiedostoilta. Debianin wiki sivuilta löytyy selite initrd.img tiedostolle.
”initrd provides the capability to load a RAM disk by the boot loader. This RAM disk can then be mounted as the root file system and programs can be run from it. Afterwards, a new root file system can be mounted from a different device. The previous root (from initrd) is then moved to a directory and can be subsequently unmounted.” (https://wiki.debian.org/Initrd).
Siirryn etc/ kansioon
cd etc/
Tässä kansiossa on paljon tiedostoja, jotka liittyvät järjestelmän asetuksiin. Command Line Basics Revisited mukaan kaikki tässä kansiossa olevat tiedostot ovat tekstitiedostoja. Päätän testata tätä käytännössä ja valitsen satunnaisesti yhden tiedostoista ja annan komennon
nano manpath.config

Tällä tiedostolla siis määritellään manuaalin kansiopolku. Samalla tekstinkäsittelyohjelma nano kertoo, että tätä tiedostoa ei voi ylikirjoittaa. CTRL + X poistuu ohjelmasta.
Siirryn seuraavaksi /media/ kansioon.
cd ..
cd media/
Täällä on kansio tomi, jossa ei ole mitään tiedostoja. /media/ kansio näyttää kaikki tietokoneeseen liitetyt irrotettavat medialaitteet, kuten usb- tai cd-asemat.
Siirryn takaisin / ja menen logikansioon
cd /var/log

Tässä kansiossa on järjestelmän kattavat logitiedostot. Yritän avata user.log tiedoston
nano user.log

Pääsy evätty. Kokeillaan uudelleen komennolla
sudo nano user.log

Tänäänkin tullut monta merkkausta tähän logiin. Kaikki tärkeät kansiot ja niiden sisältö on käyty läpi. Lopetan tehtävän kello 11.25.
b) ”My CLI. Keksi jokin asia, jota haluaisit tehdä komentokehotteessa. Etsi ja asenna komentokehotteen paketinhallinnasta ohjelmat, joilla asian voi ratkaista. Asenna ainakin kolme itsellesi uutta komentorivillä (command line interface, CLI) tai tekstitilassa (text user interface, TUI) toimivaa ohjelmaa. Näytä, miten kuvitteellista ongelmaa voi ratkoa näillä ohjelmilla. Voit valita jonkin helpon tai yksinkertaistetun esimerkin.”
Aloitan tehtävän kello 12.20. Haen Googlesta inspiraatiota tehtävään. Löydän sivun https://medium.com/scalereal/10-cli-tools-%EF%B8%8F-for-developers-productivity-ea7244d791ea, jossa listataan 10 parasta CLI-ohjelmaa.
Autojump
Kokeilen asentaa ensiksi Autojump nimistä ohjelmaa, joka helpottaa kansioissa navigoimista. Kokeilen asentaa ohjelmaa komennolla
sudo apt-get install autojump

Asennus onnistuu
Eri kansioissa pitää käydä, ennen kuin niihin voidaan hypätä. Kokeilen käydä / sekä /etc kansioissa, jonka jälkeen palaan takaisin /home/tomi kansioon. Kokeilen komentoa:
j etc
ja saan vastaukseksi bash: j: command not found.Kokeilen perään autojump etc ja saan seuraavan herjan:

Kokeilen komentoa
autojump –help

Seuraavaksi kokeilen
autojump -a /home/
Saan saman herjan kuin aikaisemmin. Tarkistan vielä autojumpin githubista saisiko sieltä lisäneuvoja. Löydän Debian kohtaisen ohjeen: “All Debian-derived distros require manual activation for policy reasons, please see /usr/share/doc/autojump/README.Debian
”
Siirryn polkuun / ja katson mitä tuossa tiedostossa on sisällä
nano /usr/share/doc/autojump/README.Debian

Avaan seuraavaksi Nanossa tiedoston /home/tomi/bashrc. Tänne pitäisi siis lisätä rivi . /usr/share/autojump/autojump.sh. Lisään tekstin tiedoston viimeiselle riville. Käynnistän virtuaalikoneen uudelleen. Nyt jännittää ja samalla epäilyttää voiko tämä toimia.
Kone käynnistyy uudelleen, avaan terminaalin ja käyn monessa eri kansiossa. Tämän jälkeen kirjoitan
j home

Vau, sehän toimii ja itse ohjelma on todella kätevä. Tämä säästää monta komentoa ja merkkiä. Autojumpin asennuksessa ja tutkimisessa meni noin 30minuuttia aikaa.
TLDR
Seuraavaksi valitsen listalta TLDR-ohjelman. Asennan ohjelman komennolla
sudo apt-get install tldr
Kokeilen heti ohjelmaa kirjoittamalla
tldr ls ja saan herjan No tldr entry for ls. Parasta siis kurkistaa ohjelman help
tldr —help
Päivitän ohjelman cachen komennolla
tldr -u
Tietoja haetaan hetki, jonka jälkeen kokeilen uudelleen tldr ls ja homma pelittää!

Vaikuttaisi oikein kätevältä ohjelmalta, joka listaa selkeästi komentojen tärkeimpiä ominaisuuksia. Tämä ohjelma oli huomattavasti helpompi asentaa kuin autojump. Asennuksessa ja päivityksessä meni noin 5minuuttia aikaa
httpie
Seuraavaksi kokeilen httpie ohjelmaa, jonka pitäisi helpottaa api kutsujen tekemistä. Asennan ohjelman komennolla
sudo apt-get install httpie
Kokeilen ohjelmaa saman tien. Käytän koodauskurssilla käyttämääni api-kutsua, joka hakee tietovisakysymyksiä.
http -f GET https://opentdb.com/api.php?amount=1

Jes, ohjelma toimii ja näyttää vastauksen selkeästi jsonina. Tämä on hyvä!
c) ”Tukki. Aiheuta lokiin kaksi eri tapahtumaa: yksi esimerkki onnistuneesta ja yksi esimerkki epäonnistuneesta tai kielletystä toimenpiteestä. Analysoi rivit yksityiskohtaisesti.”
Seuraan kurssin sivujen ohjeita lokiin kirjoittamisesta. Tehtävän aloitan kello 13.14. Koska olen syöttänyt järjestelmävalvojan salasanalla, unohdan sen komennolla
sudo -k
Kokeilen päivittää ohjelman käyttäen väärää järjestelmävalvojan salasanaa
sudo apt-get upgrade mozilla
Saan herjan väärästä salasanasta. Tämän jälkeen syötän oikean salasanan. Siirryn kansioon /var/log/ ja listaan auth.log tiedoston sisällön. Tämä tiedosto pitää logia järjestelmän kirjautumisista.
sudo cat auth.log

Analysoidaan logitiedostoa. Ylimmällä rivillä nähdään aluksi päivämäärä ja kellonaika. Tämän jälkeen tulee koneen nimi ja komento johon loki liittyy. pam_unix(sudo:auth): authentication failure kertoo, että sudon autentikointi ei onnistunut. User kertoo, millä käyttäjällä salasanaa on yritetty syöttää. Toisella rivillä näytetään onnistunut autentikointi. Komennon on syöttänyt käyttäjä tomi, ollessaan kansiossa /home/tomi ja hän on käyttänyt komentoa apt-get upgrade mozilla. Kolmannella rivillä avataan istunto root oikeuksilla, jolloin komento toteutetaan ja viimeisellä rivillä istunto suljetaan. Lopetan tehtävän kello 13.38.
d) ”The Friendly M. Näytä 2-3 kuvaavaa esimerkkiä grep-komennon käytöstä. Ohjeita löytyy ’man grep’ ja tietysti verkosta.”
Aloitan tehtävän kello 13.40. Kokeilen ensimmäiseksi aikaisemmin asentamaani tldr-ohjelmaa.
tldr grep

Grep on ohjelma, jolla voidaan etsiä tiedostoista merkkijonoja käyttäen monipuolista regular expressionia. Luon testausta varten tiedoston, jossa on satunnaisia sanoja omilla riveillään.

Aloitan simppelisti testaamalla komentoa
grep Ko sanoja.txt

Toimii
Seuraavaksi kokeilen rekursiivista hakua. Kopioin saman tiedoston eri nimellä
cp sanoja.txt sanoja2.txt
grep -r Ko

-r hakee kaikista kansion tiedostoista Ko vastaavia sanoja.
Viimeiseksi kokeilen komentoa
grep -r --only-matching kissa

Tämä komento hakee vain hakusanaan yhteensopivat sanat. Vaikka tiedostoissa oli sana kissa2, niin sitä ei printata. Tehtävä on valmis kello 14.00.
e) ”Pwnkit. Päivitä kaikki Linux-ohjelmat ja asenna tietoturvapäivitykset.”
Linuxin kaikki ohjelmat päivitetään komennoilla:
sudo apt-get update
sudo apt-get dist-upgrade
Luen Debianin sivuilta tarkemmin tietoturvasta: https://www.debian.org/security/
Sivuilla on ohjeet viimeisimpien tietoturvapäivitysten hakemiseksi. Aloitan avaamalla tiedoston /etc/apt/sources.list ja lisäämällä sivuilla mainitun rivin. Tallennan tiedoston.

Tämän jälkeen päivitän apt-get:in komennoilla
sudo apt-get update
sudo apt-get upgrade
Mutta ilmeisesti minulla on viimeisimmät päivitykset, sillä komentokehote näyttää, että mitään ei päivitetty. Käynnistän koneen uudelleen ja ajan samat komennot, mutta uusia päivityksiä ei löydy.

Kokeilen vielä varmuuden vuoksi:
sudo apt-get dist-upgrade
Mitään ei asenneta. Olen siis turvassa!
Vastaa