#!/bin/bash
# Pääteohjaus 1: malliratkaisujen komennot peräkkäin.
# Tätä tiedostoa EI ole tarkoitettu ajettavaksi sellaisenaan, vaan
# käytäväksi läpi rivi kerrallaan omassa päätteessä. Poistokomennot
# ovat mukana, joten lue jokainen rivi ennen kuin ajat sen.


# =====================================================
# OSA 1: tehtävät 1-9
# =====================================================

# =========================================
#  Pääteohjaus 1, osa 1: perustehtävät 1-9
# =========================================
# Nauhoite on koostettu malliratkaisuksi. Aja komennot itse halavassa.
# ====================================
#  Tehtävä 1: kuka olen ja missä olen
# ====================================
whoami
hostname
pwd
# pwd kertoo oletushakemiston. Heti kirjautumisen jälkeen se on kotihakemisto.
# =============================
#  Tehtävä 2: hakemistolistaus
# =============================
ls
ls -al
# -a näyttää pisteellä alkavat piilotiedostot, -l pitkän listauksen.
# Ensimmäinen kirjain d tarkoittaa hakemistoa, viiva tavallista tiedostoa.
# ============================================
#  Tehtävä 3: symbolinen linkki ja hakemistot
# ============================================
/opiskelu/itkp1011/makewww
# Onnistuneesta komennosta ei tule palautetta. Vain virheistä kerrotaan.
ls -ld html
# Rivin alun l ja nuoli kertovat, että kyseessä on linkki eikä hakemisto.
realpath html
cd html
mkdir tyovaline
ls -al
cd
cd html/tyovaline
# Vinkki: kirjoita cd ht ja paina sarkainta, niin nimi täydentyy itse.
cd ..
cd tyovaline
mkdir harkka demot luennot
tree
# =====================================================
#  Tehtävä 4: liikkuminen suhteellisilla viittauksilla
# =====================================================
cd demot
cd ../luennot
# Ensin yksi taso ylös, sitten alas toiseen haaraan.
realpath ../harkka
cd ..
# ===================================
#  Tehtävä 5: tekstitiedosto nanolla
# ===================================
nano testi.txt
# Tallennus Ctrl+O ja enter, poistuminen Ctrl+X.
cat testi.txt
# =====================================
#  Tehtävä 6: kopiointi ja siirtäminen
# =====================================
cp testi.txt harkka/
cp testi.txt demot/
mv demot/testi.txt luennot/
tree
# =======================================
#  Tehtävä 7: näkyykö tiedosto verkossa?
# =======================================
# Selaimen sijasta voi kysyä palvelimelta suoraan curl-komennolla.
curl -I https://users.jyu.fi/~opiskelija/tyovaline/harkka/testi.txt
# 200 OK tarkoittaa, että tiedosto löytyi ja se saatiin luettua.
# ========================
#  Tehtävä 8: poistaminen
# ========================
# Roskakoria ei ole. Katso aina ensin, mihin komento kohdistuu.
ls luennot/
rm luennot/testi.txt
rmdir luennot demot
rmdir harkka
# rmdir poistaa vain tyhjän hakemiston. Harkka jää jäljelle harjoitustyötä varten.
tree
# =====================
#  Tehtävä 9: oikeudet
# =====================
ls -ld harkka
chmod a+rx harkka
# Kansiolle tarvitaan sekä r (listaus) että x (läpikulku).
curl -s -o /dev/null -w "%{http_code}\n" https://users.jyu.fi/~opiskelija/tyovaline/harkka/testi.txt
# Nyt poistetaan tyovaline-kansiolta sekä luku- että läpikulkuoikeus.
chmod go-rx .
curl -s -o /dev/null -w "%{http_code}\n" https://users.jyu.fi/~opiskelija/tyovaline/harkka/testi.txt
# 403 Forbidden: palvelin ei pääse kulkemaan kansion läpi.
# Annetaan takaisin PELKKÄ läpikulkuoikeus, ei lukuoikeutta.
chmod go+x .
curl -s -o /dev/null -w "%{http_code}\n" https://users.jyu.fi/~opiskelija/tyovaline/harkka/testi.txt
# Tiedosto näkyy taas, vaikka kansion sisältöä ei saa listata.
# x on siis läpikulkuoikeus, ei listaamisoikeus. Tämä on tärkein oivallus tässä luvussa.
chmod -R a+rX ~/html/
ls -ld . harkka
# Iso X lisää läpikulun vain hakemistoihin, ei html-tiedostoihin.
# ========================================
#  Osa 1 valmis. Osassa 2 tehtävät 10-18.
# ========================================

# =====================================================
# OSA 2: tehtävät 10-18
# =====================================================

# ==================================================
#  Pääteohjaus 1, osa 2: vaativammat tehtävät 10-18
# ==================================================
# ========================================
#  Tehtävä 10: tulostuksen edelleenohjaus
# ========================================
ls > tiedostot.txt
cat tiedostot.txt
tree > tiedostot.txt
cat tiedostot.txt
# > korvasi entisen sisällön kokonaan.
ls >> tiedostot.txt
tail -n 5 tiedostot.txt
# >> lisäsi tulosteen entisen perään.
# ========================================
#  Tehtävä 11: vakiotuloste ja virhevirta
# ========================================
ls /etc/hosts /ei-ole-olemassa > ulos.txt
# Virheilmoitus jäi ruudulle: > ohjaa vain vakiotulosteen.
cat ulos.txt
ls /etc/hosts /ei-ole-olemassa > ulos.txt 2> virheet.txt
cat virheet.txt
# 2> ohjaa virhevirran. 2> /dev/null heittaisi sen kokonaan pois.
# ======================
#  Tehtävä 12: putkitus
# ======================
ls /etc/ | head
ls /etc/ | wc -l
# head näytti 10 ensimmäistä riviä, wc -l laski rivit.
# ===========================
#  Tehtävä 13: korvausmerkit
# ===========================
# Tarkista aina echolla, mihin jokerimerkit osuvat.
echo rm *.txt
ls -d /etc/*.conf | head -n 4
ls -d /etc/*conf* | head -n 4
ls -d /etc/*.?? | head -n 4
ls -d /etc/p*.conf
# * on mikä tahansa merkkijono, ? täsmälleen yksi merkki.
# ===============================
#  Tehtävä 14: manuaalit ja find
# ===============================
man wc
# Manuaalista poistutaan q-näppäimellä. Hyödyllisin osa EXAMPLES on lopussa (G).
find . -name testi.txt
wc -l testi.txt
# ==================
#  Tehtävä 15: grep
# ==================
grep '#' /etc/nsswitch.conf | head -n 4
# Risuaita on komentotulkille erikoismerkki, siksi se lainataan.
grep -v '#' /etc/nsswitch.conf | head -n 4
grep -l '#' /etc/*.conf 2> /dev/null | head -n 4
# -l tulostaa pelkät tiedostonimet, 2> /dev/null vaientaa oikeusvirheet.
# ===================
#  Tehtävä 16: vivut
# ===================
ls -d /etc/*.d | head -n 4
# -d näyttää hakemiston itsensä eikä sen sisältöä.
mkdir -p foo/bar/foobar/barfoo
tree foo
man -k pdf | head -n 3
# rmdir ei riitä, koska puussa on sisältöä. Tarvitaan rm -r.
rm -r foo
# =========================
#  Tehtävä 17: yhdistelmiä
# =========================
who | wc -l
who | sort -r | head -n 3
who | cut -c-8 | sort | uniq | wc -l
# 37 istuntoa mutta vain 29 eri käyttäjää: joillakin on monta yhteyttä.
quota -s
du -sh ~/* | sort -h
# du -sh näyttää koot, sort -h järjestää ne suuruusjärjestykseen.
# ===========================
#  Tehtävä 18: ketjuttaminen
# ===========================
cd ~/ei-ole && rm *.txt
# cd epäonnistui, joten rm-komentoa EI suoritettu lainkaan.
echo $?
cd ~/ei-ole ; echo "tämä olisi ajettu väärässä hakemistossa"
# Puolipisteellä jälkimmäinen komento ajetaan joka tapauksessa. && on turvallisempi.
cd ~/html/tyovaline && ls
# =======================================================
#  Kaikki tehtävät tehty. Kirjaudu ulos komennolla exit.
# =======================================================
exit
