Usein esitettyjä kysymyksiä Unixista
HTOL:n Unixfakki (FAQ)
Kari Lehtonen, Helsingin teknillinen oppilaitos
[INDEX] [Sähköpostifakki] [WWW-fakki] [Etätyöskentelyfakki]
Tiedoston poistaminen ei onnistunut
> kotihakemistossani on tiedosto nimelta "playmate..." jota en saa
> poistettua. Tiedoston nimen lopussa on kilometri erikoismerkkejä.
> rm "play..." ei auta, vaikka antaisin kayttojarjestelman kirjoittaa
> loput nimesta (TAB). Unix ilmoittaa joka yrityksella ettei ko
> tiedostoa ole olemassakaan.
Kannattaa kokeilla alkuperäistä komentotulkkia sh.
Tee seuraavasti:
ee % sh
$ rm play*
$ exit
ee %
ja sinne menee .. tuo sh ei ilmeisesti yritä turhia ajatella
vaan tekee mitä pyydetään..
[Komentotulkit]
Oman kotihakemiston suojaaminen
> ... epätietoinen, siitä onko kotihakemistoni suojattu muilta
> käyttäjiltä.
On ilmennyt, että luokan xxxxxxx kotihakemistoista osa on suojaamatta
ja muut voivat tutkia, mitä hakemistoissa on. Varsinaiset
postihakemistot ovat ilmeisesti kyllä kaikilla suojattuja. Jos haluat
korjata tilanteen, menettele seuraavasti:
Tarkista kotihakemistosi suojaustilanne ja muuta tarvittaessa,
seuraavilla komennoilla:
cd (varmistetaan, että olet kotihakemistossa)
ls -al | more
Ensimmäisellä rivillä pitäisi olla tiedostonimenä . (siis
piste). Tämä on kotihakemistosi. Jos rivin alussa lukee
drwx--x--x (voit luoda www-sivuja)
tai
drwx------ (et voi luoda www-sivuja)
on asia kunnossa. Jos rivin alussa lukee esimerkiksi
drwxr-xr-x
voivat muut tutkiskella hakemistoasi. Korjaa suojaus
komennolla (siis piste komennon lopussa):
chmod 711 . (voit luoda www-sivuja)
tai
chmod 700 . (et voi luoda www-sivuja)
Tarkista yllä mainitulla ls-komennolla.
[Suojausattribuutit]
Ryhmät
> Mitä virkaa on ryhmillä (groups) ja mistä eri ryhmät näkee?
Ryhmällä voi olla tiedostoihin ja hakemistoihin sellaisia oikeuksia,
joita muilla käytttäjillä ei ole. Tästä on hyötyä erilaisissa
yhteisprojekteissa. Ryhmät saa Unixissa tiedostosta /etc/group, siis:
more /etc/group
Esimerkiksi luokka muodostaa yleensä yhden ryhmän. Ryhmät ovat
periaatteessa eri asia kuin sähköpostin ryhmäaliakset, vaikka ne
ovatkin usein yhtenevät (mutta ei aina!).
[Tiedostojen attribuutit] [Suojausattribuutit]
Aliaksista
> - Kuinx' ei unixissa oo aliaksia soveltuvin osin, jotta DOS-luutumatkin
> toimisivat?
> Esim. 'dir' = ls -al
No ne aliakset pitää tehdä itse! Hyvä harjoitustehtävän aihe.
Kotihakemistoon tiedosto .zshrc, johon esimerkiksi seuraavaa:
alias dir='ls -al'
jne.
[Aliakset]
Korjausnäppäin ja Telnet
> - Kuinx' ei backspace-ansaa saada puretuksi?
On hoidettu kunnollisissa pääteohjelmissa. Telnetissä on ongelma
mm. emacsissa. Eräs opiskelija huomasi, että Control+backspace
toimii. Onko se sitten helpompi muistaa kuin Deleten käyttäminen?
[Komentojen kirjoittaminen] [Emacs: Näppäimistöstä]
Ääkkösten ja muiden merkkien konvertoiminen
> Vanhoissa tiedostoissa on ääkkösten tilalla sulkumerkkejä.
> Mitenkä ne saisi muutetuksi lukukelpoisempaan muotoon?
Joissakin Unix-järjestelmissä on apuohjelma cconv, jolla voi muuntaa
eri periaattein (ibm/os2, mac, iso/windows) koodatut ääkköset
toisikseen. Voi käyttää myös muunnosohjelmaa tr:
tr "merkit1" "merkit2" < tiedosto1 > tiedosto2
Ohjelma muuntaa systemaattisesti merkkejä toisiksi merkeiksi.
Muunnokset määritellään luettelemalla muunnostaulukon sarakkeet
kahtena merkkijonona. Muunnettava teksti voidaan tulostaa tiedostoon
tai näytölle (komennon loppuosaksi | more). Suomessa usein toistuva
ongelma on skandinaavisten merkkien kirjava koodaus. Ohjelmalla tr
voidaan kätevästi muuntaa esimerkiksi ASCII-koodatut merkit
ISO-Latin-1 -koodatuiksi (tai päinvastoin):
tr "\}\{\|\]\[\\" "åäöÅÄÖ" < tiedosto1 > tiedosto2
Koska skandinaavisia merkkejä vastaavilla ASCII-merkeillä }{|][\ on
komento-tulkissa oma merkityksensä, on niiden eteen kirjoitettava
koodinvaihtomerkki \. Vielä monipuolisempaan muuntamiseen on parempi
käyttää ohjelmaa sed.
[tr] [sed] [Merkistöt tietokoneissa ja tietoliikenteessä]
Ohjelman keskeyttäminen
> Miten voin keskeyttää ohjelman hetkeksi tarkistaakseni jonkin
> asian toisella ohjelmalla?
Ohjelman voi keskeyttää eli siirtää taustalle komennolla Control-Z. Näin
pääsee komentotulkkiin, missä voi tehdä haluamansa asian. Takaisin
alkuperäiseen ohjelmaan pääsee komennolla:
fg
Tarvittaessa vielä komento Control-L joissakin ohjelmissa
(päivittää sotkuisen näytön).
[Ohjelman pysäyttäminen]
Alueen merkitseminen emacsissa
> Miksei alueen merkitseminen onnistu emacsissa käsikirjojen
> ohjeiden mukaan?
Tavallisessa telnet-ohjelmassa ei alueen alun merkitseminen onnistu
suomalaisella näppäimistöllä emacsissa virallisella näppäinkomennolla
Control-@ (2) tai Control-välilyönti. Lisää omaan Emacsin
alustustiedostoosi rivi:
(define-key global-map "\C-x\C-m" 'set-mark-command)
Voit kopioida sen minulta HTOL:n palvelimella:
cat ~lehtonen/.emacs.mark >> ~/.emacs
Alueen alku voidaan nyt merkitä Emacsissa komennolla Control-x Enter.
[Alueiden käsitteleminen]
Tekstitiedoston viimeinen rivi
> Mulla on hieman ongelmia "käyntikorttini" kanssa. Olen nimittäin
> kirjoittanut .plan -tiedostooni seitsemän riviä tekstiä (joista kaksi
> ensimmäistä riviä ovat tyhjiä). Kun kuitenkin yritin itse lukea sitä
> finger-komennolla, ei näkyviin tullut kuin kuusi ensimmäistä riviä,
> siis viimeinen rivi ei ilmestynyt näytölle ensinkään.
Jos viimeistä riviä ei päätä Enterillä, se ei tule/jää näkyviin! Lisää
siis rivin loppuun Enter.
Sähköpostikansioiden käsittely emacsissa
> Olen siirtänyt sähköpostitse saamiani viestejä =received
> kansioon. Miten saan ne EMACS:iin käsiteltäväkseni?
Mitä haluat viesteille tehdä? Vastaus riippuu vähän tästä.
Kansio on tavallinen tiedosto (received) hakemistossa ~/Mail (elm) tai
~/mail (pine). Kansiota ei suositella käsiteltäväksi editoreilla
suoraan, koska se voi helposti mennä piloille postiohjelman kannalta.
Jos haluat esimerkiksi kopioida sieltä tekstiä johonkin dokumenttiin,
vaikkapa kirjeeseen, niin voit menetellä seuraavasti:
Emacs on käynnissä (olet vaikkapa kirjoittamassa kirjettä). Hae kansio
toiseen ikkunaan vain luettavaksi (read-only):
Control-x 4 r ~/Mail/received
Ikkunoiden välillä siirrytään komennolla
Control-x o
Etsi haluamasi teksti, merkitse ja kopioi se (katso ohjeita syksyn
harjoituksista). Kopiointikomento on Esc w.
Siirry takaisin työstämääsi dokumenttiin ja palauta kopioitu alue
komennolla Control-y.
Toisen ikkunan saa suljetuksi komennolla Control-x 1.
Kaikkein luontevinta olisi toimia emacsin postiohjelmassa vm.
Jos haluat nimenomaan käsitellä jotain tiettyä kirjettä, on parasta
että tallennat sen omaan tiedostoon. Menettele seuraavasti:
Elm käynnissä. Vaihda (c) kansioon =received. Siirry kyseisen kirjeen
kohdalle ja anna tallennuskomento (s). Kirjoita tiedoston nimeksi
esimerkiksi ~/kirje. Kun lopetat elmin, älä anna lupaa poistaa
kirjettä. Tiedostoa ~/kirje voit sitten riepotella huolettomasti.
Pinessä vastaava tallennuskomento on E (export).
[Emacs: Puskurit ja ikkunat] [vm (tekeillä)]
[Pine: Viestien tallentaminen] [Elm: Viestien tallentaminen]
Suojaukset kopioitaessa
> Jos haluaa kopioida joltain muulta tiedoston niin pitääkö hänen
> kotihakemistoonsa olla lukuoikeus (r) vai riittääkö pelkä suoritus
> oikeus (x). Tiedostossa itsessään on kaiki oikeudet. Eikö kopiointi
> käsky ollutkin cp ~käyttäjätunnus/Tiedoston nimi.
Hakemistoihin suoritusoikeus (x), tiedostoihin lukuoikeus (r).
Kopiointikomentosi on muuten oikein, mutta lopussa on oltava
kohde eli hakemisto, johon kopioidaan (yksinkertaisimmillaan piste eli
työhakemisto). Esimerkiksi:
cp ~lehtonen/abc .
[Oikeudet] [Suojausattribuutit] [Tiedostojen kopioiminen ja poistaminen]
Hakemistojen nimien lyhenteet
> Mitä ~ ja . oikein tarkoittavat kopiointi- ym. komennoissa?
~ tarkoittaa käyttäjän omaa kotihakemistoa
~xyzzy tarkoittaa käyttäjän xyzzy kotihakemistoa
. tarkoittaa työhakemistoa
[Hakemistorakenne]
Rivinvaihdon merkki
> Miten rivinvaihtomerkin saa ilmoitetuksi esimerkiksi etsittäessä
> ja korvattaessa?
Ota teksti emacsiin. Unixin rivinvaihto eli linefeed (LF) on
Control-j. Se täytyy syöttää esimerkiksi hakulausekkeisiin
kirjoittamalla ensin Control-q (muuten tulee Enter kesken kaiken).
Esimerkki 1: Nimilista yhdelle riville, pilkuilla erotettuina.
aaltonen
bergh
castren
Esc-% Control-q Control-j Enter , Enter y (toistetaan tai !)
aaltonen,bergh,castren
Esimerkki 2: Äskeinen toisinpäin
Esc-% , Enter Control-q Control-j Enter y (toistetaan tai !)
Jos tekstitiedostoa haluaa käsitellä suoraan, pitää tehdä
esim. perl-ohjelma. Tästä tulee ohjeita joskus.
PC:n CR-merkin poistaminen
> Joissakin tiedostoissa on rivien lopussa ^M (yksi merkki!). Miten
> ne saa pois etsi-korvaa -toiminnalla?
Kyseessä lienee PC:stä binäärisessä muodossa siirretty tekstitiedosto.
PC-tekstitiedostojen rivit loppuvat (normaalisti näkymättömään)
merkkiyhdistelmään CR LF, joista Unix käyttää vain LF:n. Ylimääräinen
merkki jää näkyviin merkkinä ^M (todella yksi merkki!). Useimmiten
se ei häiritse.
Merkin saa tarvittaessa poistetuksi emacsin etsi-korvaa -toiminnolla
syöttämällä se hakulausekkeeseen yhdistelmällä Control-q Control-m.
[Emacs: Etsiminen ja korvaaminen]
Eri käyttäjäryhmien oikeudet
> Mitä eroa on käyttäjäryhmillä all (a) ja others (o)?
Others (o, muut) tarkoitttaa muita kuin itseä (user, u) ja omaa ryhmää
(group, g) (esimerkiksi luokka tms.). All (a, kaikki) tarkoittaa siis
kaikkia, a = u + g + o.
Jokaisella (u, g, o ja a) on sijansa. Jos haluan, että kaikki voivat
lukea tiedostoa xyzzy, niin:
chmod a+r xyzzy
Jos haluan, että oma ryhmäni voi _selailla_ hakemistoa QWERTY ja
valita sieltä tiedostoja luettavaksi ja muokattavaksi, mutta
muut voivat vain lukea sieltä _ilmoittamani_ tiedoston, niin:
chmod g=rx,o=x QWERTY
chmod g=rw,o=r QWERTY/*
o on siis muut kuin itse ja oma ryhmäni.
[Oikeudet] [Suojausattribuutit]
Viimeisen rivin tulostaminen C-ohjelmassa
> Käänsin pieniä C-ohjelmia Unixissa. Tyyppiä "Hello, World!".
>
> Osoittautui, että käännetyn ohjelman ajossa ruudulle tulos-
> tuvasta tekstistä pyyhkiytyi viimeinen rivi välittömästi
> pois komentotulkkiin palatessa.
>
> Teinkö jotain väärin?
Olen huomannut saman. Lisää ohjelman loppuun rivinvaihto
printf("\n");
niin johan toimii.
Emacsin auto-save -tiedostojen poistaminen
> Olin siivoamassa hakemistoani. sinne oli ilmaantunut tiedostoja, jotka
> alkoivat risuaidalla (#). rm-komento ei tuntunut tehoavan. (bad pattern).
> Nimen muuntaminen cp-komennollakaan ei onnistunut. miten ne tulisi tuhota?
Kyseessä lienevät emacsin automaattiset tallennukset, jotka jäävät
levylle esimerkiksi häiriötilanteissa.
Risuaitamerkillä on komentotulkissa erikoismerkitys. Jos haluaa
käyttää risuaitamerkkiä tiedoston nimessä, on kirjoitettava siihen
kohtaan kenoviiva risuaita, siis esimerkiksi
rm \#xyzzy
Skriptit ja hakupolut
> Miksei skriptini/ohjelmani löydy:
> ... no such command ...
> ... file or directory xxxxxx not found ...
En tiedä, olisiko hakupolkuasetuksissa se ongelma. Unixissa ei
työhakemisto kuulu aina hakupolkuun. Kokeile komentoa ./xxxxxx siinä
hakemistossa, missä skripti on (pistehän tarkoittaa
työhakemistoa). Tai sitten alustustiedostoon .zshrc asetus
PATH=$PATH":."
(pitää kirjautua välillä ulos)
Sitten voit yrittää sijoittaa skriptit hakemistoosi ~/bin
Sen pitäisi kuulua hakupolkuun. Tarkista komennolla
echo $PATH
Onko muuten skriptin suojaukset kunnossa? Pitää olla suoritusoikeus
eli ainakin -rwx------
[Oman käyttöympäristön muokkaaminen]
Ohjelmien hakupolut
> Pojat kertovat, että _kotihakemistoissa_ olevat slirpit
> eivät _enää_ toimi.
> Pitää ajaa /p/bin/slirp'illä.
>
> Onko ylläpito jotenkin jekkuillut niin, että mitään
> kotihakemistoissa olevaa ei pysty suorittamaan?
Ei mitään jekkuilua, mutta järjestelmää on muutettu ainakin
seuraavilla tavoilla:
1)
Ohjelmien sijaintia on muutettu. Mm. perl-skriptit piti korjata, koska
aikaisempi sijainti /usr/bin/perl on muuttunut, nyt se on
/m/perjantai/p/bin/perl.
2)
Käyttöjärjestelmä on vaihtunut. Vanhemmat käännetyt omat ohjelmat
(binäärit) eivät toimi. Ne pitää kääntää uudestaan. Mm. ennen tätä
kevättä laatimani C-ohjelmat olen joutunut kääntämään
uudestaan. Varmaan niiden slirppien laita on samoin.
Kyllä missä hyvänsä hakemistossa olevaa ohjelmaa pystyy ajamaan,
kunhan polkuasetukset ovat kunnossa. Minulla on tiedostossa .zshrc
asetus:
PATH=$PATH":."
jolloin echo $path tulostaa
/home/hk/lehtonen/bin /p/bin /usr/local/bin /usr/bsd /bin /usr/bin
/sbin /usr/sbin /usr/etc /usr/bin/X11 /usr/local/games .
Huomaa piste lopussa.
Linux
> Olisin kiinnostunut Linux käyttiksestä, mutta en ole löytanyt mitään
> prujua sinun kotisivuilta. Mistähän löytyis tietoo\kirjallisuutta.
> Jos löytyy www:stä niin laitatko osoitteen kiitos.
Linux on eräs Unixin versio, joten Unix-oppaastani on hyötyä.
Itse Linuxista on infoa mm. sivulla <http://www.linux.org/>.
Suomenkielisiä oppaita (asennus jne) varmaan löytyy sopivilla
hakusanoilla. Kirjakaupassa näyttää olevan useitakin suomenkielisiä
oppaita.
[Linux Home Page]
Tracerouten, talkin jne. toimimattomuus
> Pakko kys{ist{ sinulta, kun helpdesk ei vastaa.
> Miksi ei traceroute toimi viikonp{ivill{??
Ei se ehdi vastata minullekaan.
Eräät verkko-ohjelmat ovat tiettävästi turvallisuusriskejä.
[ATK-Ryhmä]