ITKA203 Käyttöjärjestelmät, luento 11/14, Ke 22.6.2011 ====================================================== Info: - Demo4 tulee ennen lähtöjä juhannukseen. Eilistä: -------- Tiedoston oikeuksien asettaminen unixissa, chmod. (Heittelin joitain esimerkkejä hiukan hatusta.. kaikki esimerkit eivät ihan toimineet sillä tavalla kuin hattu muisti; jotkut kuitenkin..) Symbolinen linkki tosiaan on vain linkki toiseen tiedostoon, ja käyttöoikeudet määräytyvät tuon kohdetiedoston oikeuksien mukaan (siis hiukan toisin kuin muistelin asian olevan). Hakemiston oikeuksissa suoritus (x) merkitsee oikeutta päästä hakemiston sisältöön käsiksi (jos tietää siellä olevan tiedoston nimen). Erillisenä tästä on hakemiston lukuoikeus (r), joka sallii hakemiston sisällön listaamisen. Katsotaan samoja Windowsissa: Windowsin graafisella tiedostoselaimella voi klikata tiedostoa oikealla napilla ja säätää oikeuksia Security -välilehdeltä. Unixin "mounttaus" ja "unmounttaus": Komennolla "mount" voi unixeissa/linuxeissa liittää tallennuslaitteita haluamaansa kohtaan hakemistohierarkiaa. Käyttöjärjestelmä tulkitsee laitteiden sisältönä olevan tietyn tiedostojärjestelmän mukaista dataa. Komennolla "umount" vastaavasti voi katkaista yhteyden laitteeseen. Mountteja voi normaalisti tehdä vain pääkäyttäjä/ylläpitäjä. Huomioita muista tiedostojärjestelmistä ---------------------------------------- Tiedostojärjestelmiä on MONTA! Esim. Linuxeissa yleiset ext2, ext3, ext4; Windowsissa tyypillinen ntfs; Verkon yli jaettava ntfs; yksinkertainen fat; muistia kovalevyn sijaan käyttävä ramfs; lisäksi mm. 9p, afs, hfs, jfs, ... - erilaisia - eri tarkoituksiin - eri aikoina syntyneitä - mahdollisuudet ja rajoitukset kumpuavat toteutustavasta Näkyviä eroja: - tiedostonimien pituudet, kirjainten/merkkien tulkinta ym. Syvällisiä eroja: - toteutusyksityiskohdat, päämäärät: + nopeus/tehokkuus eri tehtäviin, tilansäästö levyllä/muistissa (haku, nimen etsintä, tiedoston luonti, kirjoitus, luku, poisto, isot vai pienet tiedostot) -> "Yksi koko ei sovi kaikille" - tiedostojärjestelmä on valittava kokonaisjärjestelmän käyttötarkoituksen mukaan. Esim. paljon pieniä tiedostoja voi toimia paremmin eri järjestelmässä kuin isojen tiedostojen käsittely. + toimintavarmuus (mitä tapahtuu, jos tulee sähkökatko tai laitevika) -> "transaktioperiaate", "journalointi" Kirjoitusoperaatiot tehdään atominen kirjoituspätkä kerrallaan. Ensin tehdään kirjoitus yhteen paikkaan, "ennakkokirjoitus" (ei vielä siihen kohtaan levyä, mihin on lopulta tarkoitus) Kirjoitetaan myös tieto, mihin kohtaan on määrä kirjoittaa. Jos kirjoitus ei ehdi jostain syystä toteutua, se voidaan suorittaa alusta lähtien uudelleen käyttämällä ennakkoon tehtyä ja tallennettua suunnitelmaa. Katsaus: -------- Ymmärretäänkö nyt enemmän Linuxin lähdekoodista ( http://lxr.linux.no/+trees ) Korkeimman tason moduulien nimissä on nyt aiempaa enemmän järkeä, esim.: - fs: filesystem, tiedostojärjestelmään liittyviä komponentteja - mm: memory management, muistinhallintaan liittyviä - ipc: interprocess communication, prosessien kommunikointiin - arch: architecture, prosessoriarkkitehtuurista riippuvat osiot Tämän päivän aihe: Shellit ja shell-skriptit -------------------------------------------- Shelleistä yleisesti ottaen: - shell tarkoittaa "kuorta", joka "ympäröi" käyttöjärjestelmän ydintä ja jonka kautta käyttöjärjestelmää voidaan komentaa. - Shelliä käytettäessä ollaankin varsin lähellä käyttöjärjestelmän rajapintoja. - Merkittäviä shellejä ovat olleet mm. Bourne Shell (sh), sen laajennokset csh, ksh ja zsh sekä nykyisin varsin suosittu GNU Bourne Again Shell (bash). Paljon muitakin shellejä on kehitetty. Pääpiirteissään ne toimivat hyvin samalla tavoin. (Syntakseissa ja ominaisuuksissa on eroa) THK:n nykyinen suositus on käyttää bashiä jalavassa. Oletus on kuitenkin monilla tcsh, historiallisista syistä. Katsottiin kuinka shellin voi vaihtaa salasana.jyu.fi -palvelussa, jos haluaa jatkossakin käytellä suorakäyttökoneita. Shellejä voi käyttää interaktiivisesti eli kirjoittamalla komento kerrallaan, mutta niillä voi myös hiukan ohjelmoida. Shell-ohjelma on periaatteessa pötkö komentoja, joiden ympärille voi lisätä ohjelmointirakenteita kuten muuttujia, ehtoja, toistoja ja aliohjelmia. Shell osaa tulkita ja suorittaa tällaisen ohjelman, jota sanotaan skriptiksi (joskus erityisesti shell-skriptiksi). Miksi tehdään skriptejä: - usein tehtävät komentosarjat (esim. tiedostokonversiot, varmuuskopiot) on mukava sijoittaa helposti ajettavaan skriptiin. - ajoitetut tehtävät (esim. varmuuskopiot klo 5:30) voidaan kirjoittaa skriptiin, joka suoritetaan automaattisesti tiettyyn aikaan (ajoitusapuohjelmalla, luonnollisestikin). - konfigurointi (esim. käyttöjärjestelmän palveluiden ylösajo) - itse shellin konfigurointi, esim. ympäristömuuttujien asetus. - ohjelmistoasennukset. Skriptejä tehdessä on syytä olla huolellinen ja huomioida erityistapaukset ja -tilanteet! Tästä nähtiin pieni esimerkki, jossa höpö skriptini päätyi luomaan tiedostot nimeltä ``*.c`` ja ``*.java`` mikä kyllä varmasti varautumatonta käyttäjää hämmentäisi. Nähtiin myös että skriptin ajaminen uudelleen samoille tiedostoille alkuperäisessä tarkoituksessaan hajotti tiedostot, itse asiassa melko lopullisesti. Eli (kuten ohjelmoinnissa ylipäätään) on paljon kiinni varautumisesta erilaisiin lähtötilanteisiin, ja loppukäyttäjältähän ei yleensä voi olettaa minkäänlaista osaamista tai ymmärrystä, joten varsinkin käyttäjän "tyhmyyteen" kannattaa useimmiten luottaa, joskus myös omaansa. (Tämä ei tietysti estä tekemästä lyhyttä ja turvatonta skriptiä itselleen tässä ja nyt, jos sellaisesta on hyötyä). Huomioitiin, että skriptejä voi tehdä shellin lisäksi millä tahansa muulla tulkattavalla ohjelmointikielellä (perl, python, ...). Shellin käyttö on perusteltua, jos ei voida olettaa että hienompia alustoja olisi asennettu koneelle, jossa skriptit tarvitsee ajaa. Esim. bash löytyy todella monista Unix/Linux -koneista ja se on saatavilla myös Windowsille.