Tietokone työvälineenä: UNIX-harjoitukset 5
bash:n (ja muiden shellien) ominaisuuksia
Tee ensin muutamia testitiedostoja kotihakemistoosi, jotta seuraavissa
tehtävissä olisi jotain mieltä:
Tab ja Ctrl-D
- touch tiedosto tiedosto2 tiedottomuus
Kokeile miten tab-täydennys toimii:
Tyhjennä rivi (Ctrl-U). Sitten kokeile miten voit katsoa:
- ls -l ti<TAB> <TAB><TAB>
- ls -l tiedos<TAB><TAB>
Täydennä vielä komento loppuun (haluamme katsoa, vaikkapa, tiedosto2:a):
Historiatäydennys
Huom: seuraavat komennot eivät välttämättä
toimi oikein ellei niitä anneta oikeassa järjestyksessä johtuen
komentohistorian dynaamisesta luonteesta.
Editoi tiedostoa "tiedottomuus" ja lisää sinne pari riviä tekstiä;
oletamme että editorisi on vi mutta voit käyttää mitä tahansa, kunhan
ilmoitat sille editoimasi tiedoston nimen komentorivillä:
Sitten haluatkin yhtäkkiä laskea rivien, sanojen ja yksittäisten
merkkien määrän äsken tekemässäsi tiedostossa (ohjelma wc
tekee tämän), muttet halua vaivautua
kirjoittamaan pitkää tiedostonimeä uudestaan ja tabitäydennyskin
vaikuttaa hankalalta. Käytät komentorivihistoriatäydennystä:
Sitten halutaan antaa uudelleen viimeisin komento, joka alkaa "ls":
(erittäin yleistä)
Uudelleenohjaus ja putket
Katsopa mitä tiedostoja sisältää hakemisto /usr/local/bin:
(jälleen käyttäen tab-täydennystä
nokkelasti):
- ls -l /us<tab>lo<tab>/b<tab>
Liian pitkä listaus? (Ctrl-C:llä voit aina keskeyttää jos tuntuu siltä)
Tähän auttaa ls -l:n tulostuksen
(stdout) uudelleenohjaus ohjelmalle less:
Muistathan että !! korvautuu aina koko edellisen
komentorivin sisällöllä. Ja lessistä pääsee pois painamalla q.
Toki voisit tehdä äskeisen myös painamalla ensin nuoli ylös -näppäintä
ja lisätä komentoriville "| less", mutta edellistä tapaa on
hyvä oppia käyttämään, koska sillä voi esimerkiksi ottaa edeltävän
komennon outputin komentoriville, näin (kokeile):
- londo ~ % find /usr/share -name '*.txt'
(etsii kaikki tekstitiedostot)
- londo ~ % ls -l `!!` (ajaa 'ls -l':n, argumenttina äskeiset)
Kääntäminen
Pura omaan kotihakemistoosi ja käännä ohjelma
SMULI(tm)
2001.
Jos haluat harjoitella ftp:n käyttöä, hae vaikkapa ssh:n paketti
osoitteesta ftp://ftp.cs.hut.fi/pub/ssh/ssh-2.3.0.tar.gz
Muistutukseksi: .tar.gz -loppuiset tiedostot puretaan seuraavasti:
- tar -zxvf tiedosto.tar.gz
Ensin kannattaa tietysti katsoa, mitä paketissa on sisällä, antamalla
tarille argumentiksi -ztf -zxvf:n sijaan.
Mene sitten hakemistoon, johon ohjelman lähdekoodi purettiin, ja jatka
sieltä omatoimisesti.
Vinkkejä
- Lue kaikki ohjelman mukana tulevat tekstitiedostot, niissä selitetään
kaikki tarpeellinen.
- Tulet tarvitsemaan editoria.
Ajastaminen
Ajasta muutama komento käyttäen seuraavia menetelmiä:
Vinkkejä homman hoitamiseen löydän man-sivuilta.
HOX! muista poistaa turhat entryt crontabista. Katso
myös saatko hassua mailia cronilta ajon jälkeen. Mieti, miten voit
estää tämän (cron ei mailaa olematonta outputtia...).
Shell-skriptaus: smartwrite - write monelle käyttäjälle
Tee skripti smartwrite, joka on muuten kuten write, mutta suorittaa
tehtävänsä monelle käyttäjälle lukien käyttäjien tunnukset komentoriviltä ja
kirjoitettavan krääsän stdin:sta tämän jälkeen.
Vinkkejä
Simppelisti kannattaa ensin lukea kaikki kirjoitettava data johonkin
tilapäiseen tiedostoon, ja sen jälkeen käydä käyttäjät yksitellen läpi.
Tilapäisen tiedoston luontiin ja ``varmistamiseen'' voit käyttää vaikkapa
seuraavaa pätkää:
PROGNAME=`echo ${0} | sed 's-/-:-g'`
TEMP=/tmp/"`id -un`${$}${PROGNAME}"
# Sheer, raging paranoia...
stmp ()
{
rm -f ${1} || exit 1
touch ${1} || exit 1
chown `id -u`:`id -g` ${1} || exit 1
chmod 600 ${1} || exit 1
> ${1} # zero size
}
stmp ${TEMP}
Shell-skriptaus: which++ - parannettu which
Tee skripti which++, joka toimii lähes kuten normaali which,
toisinsanoen tulostaa komennon sijainnin ja sen tyypin.
Esimerkki
londo ~ % which++ which
/bin/which: executable /usr/bin/csh script
/usr/bin/which: executable /usr/bin/csh script
Vinkkejä
Vastaukset
Linkit ilmestyvät kurssin kotisivulle ensi viikolla.