Aikaa harjoituksen tekoon kului noin 1 tunti 30 minuuttia dokumentointi
mukaanluettuna. Alla tehtävien ratkaisut:
##
shell scripting
Tässä esimerkkinä bash shell-skripti, joka antaa
käyttäjälle
koneen tärkeimmät kordinaatit yhdellä komennolla.
Koska komentojen pitäisi mielellään olla lyhyitä,
nimeämme
komentomme nimelle "whud".
Tässä skriptimme sisältö:
#!/bin/bash
#
# Author: Mika
# Created on: 10.05.2005
MYWD=`pwd`
MYPVM=`date`
echo
echo 'Olet koneella: ' $HOSTNAME
echo 'Käyttäjätunnuksesi on: ' $USER
echo 'Olet hakemistossa: '$MYWD
echo 'Ja ajanlaskumme on hetkessä: ' $MYPVM
echo
Tallennamme ylläolevan skriptin käyttäjän kotihakemistossa
olevaan
bin/-kansioon, nimellä "whud". Tämän
jälkeen annamme käyttäjälle
oikeuden ajaa skriptin komennolla:
chmod u+x whud
Jonka jälkeen voimmekin jo testata skriptimme
toimintaa:
[mika@nemesis
bin]$ pwd
/home/mika/bin
[mika@nemesis
bin]$ ls
whud
[mika@nemesis
bin]$ whud
Olet koneella:
nemesis
Käyttäjätunnuksesi on: mika
Olet hakemistossa: /home/mika/bin
Ja ajanlaskumme on hetkessä: Wed May 11 01:31:30 EEST 2005
## Compile a simple program using Java
Jotta voimme suorittaa java-ohjelman kääntämisen,
tulee
koneelle ensin asentaa java.
Haluamamme paketti löytyy hieman hankalasti näin:
Avaa selaimeesi osoite http://java.sun.com/
-> klikkaa oikeassa laidassa olevaa linkkiä ”j2se
1,4,2 SDK”
-> klikkaa linkkia ”download j2se SDK”
-> hyväksy lisenssiehdot klikkaamalla täppä
ruutuun ”accept”
ja jatka
eteenpäin klikkaamalla ”continue”
-> klikkaa linkkiä ”RPM in
self-extractinf file
(j2sdk-1_4_2_08-linux-i586-rpm.bin, 33.64MB)
-> Tallenna paketti suoraan /opt hakemistoon.
Suoritamme asennuksen root-oikeuksilla seuraavasti:
[mika@nemesis
/]$ su -
Password:
[root@nemesis
~]# cd /opt
[root@nemesis
opt]# ls
j2sdk-1_4_2_08-linux-i586.bin
[root@nemesis
opt]# chmod u+x j2sdk-1_4_2_08-linux-i586.bin
[root@nemesis
opt]# ./j2sdk-1_4_2_08-linux-i586.bin
Asennus kysyy suostumusta lisenssiehtoihin, johon
vastataan "y" (yes),
jonka jälkeen asennusohjelma purkaa paketin sisällön
j2sdk1.4.2_08-hakemistoon.
Asennuksen jälkeen määritellään ympäristömuuttujat,
joiden avulla ko.
pakettia voidaan käyttää. Esimerkiksi bash-shellissä
määrittely tapahtuu näin:
export JAVA_HOME=/opt/j2sdk1.4.2_08
export PATH=${PATH}:${JAVA_HOME}/bin
Nämä ympäristömuuttujat on järkevintä määritellä
/etc/profile.d hakemistoon,
jolloin ne tulevat kaikille käyttäjille
automaattisesti voimaan. Tämä
tapahtuu seuraavasti:
[root@nemesis
j2sdk1.4.2_08]# cd /etc/profile.d/
[root@nemesis
profile.d]# ls
colorls.csh
glib2.sh krb5.csh lang.sh vim.csh
colorls.sh gnome-ssh-askpass.csh
krb5.sh less.csh vim.sh
glib2.csh
gnome-ssh-askpass.sh lang.csh less.sh which-2.sh
[root@nemesis
profile.d]# gedit
java.sh
Luodaan gedit-ohjelmalla tiedosto nimeltä java.sh,
johon halutut
ympäristömuuttujat määritellään.
[root@nemesis
profile.d]# cat java.sh
export JAVA_HOME=/opt/j2sdk1.4.2_08
export PATH=$PATH:$JAVA_HOME/bin
Tämän jälkeen muutetaan tiedoston oikeuksia niin,
että skripti voidaan
ajaa käyttäjän kirjautuessa sisään koneeseen:
[root@nemesis
profile.d]#chmod +x java.sh
Seuraavaksi testaamme onnistuiko java-ympäristön
asennus halutulla tavalla:
[root@nemesis profile.d]# su - mika
[mika@nemesis
~]$ echo $JAVA_HOME
/opt/j2sdk1.4.2_08
[mika@nemesis ~]$ java -version
java version "1.4.2_08"
Java(TM) 2 Runtime Environment,
Standard Edition (build 1.4.2_08-b03)
Java HotSpot(TM)
Client VM (build 1.4.2_08-b03, mixed mode)
[mika@nemesis ~]$
==> Näyttäisi toimivan hienosti...
Tämän jälkeen voimmekin jo kokeilla testiohjelman
tekemistä:
class helloworld
{
public static
void main(String args[])
{
System.out.println("Hello
World!");
}
}
[mika@nemesis
~]$ gedit helloworld.java
[mika@nemesis
~]$ cat helloworld.java
class helloworld
{
public static
void main(String args[])
{
System.out.println("Hello
World!");
}
}
[mika@nemesis
~]$ javac helloworld.java
[mika@nemesis
~]$ java helloworld
Hello World!
##
Javaplugin Firefox selaimeen
Koetin asentaa javapluginia Firefox selaimeen, mutta
jostain syystä homma
ei kertakaikkiaan toiminut.
Yleisenä ohjeena on netistä löydettävissä, että
javapluginin asennus
tapahtuu luomalla symbolinen linkki firefoxin
plugins-hakemistoon, esim.
näin(tämä komento annetaan /-hakemistossa):
ln -s
/usr/java/j2sdk1.4.2_05/jre/plugin/i386/ns610-gcc32/libjavaplugin_oji.so
/usr/lib/mozilla/plugins/
tai
ln -s
/usr/java/j2sdk1.4.2_05/jre/plugin/i386/ns610-gcc32/libjavaplugin_oji.so ~/mozilla/plugins/
Kumpikaan menetelmä ei toiminut firefox 1.0.3
version kanssa syystä joka ainakin
minulle jäi täysin mysteeriksi.
Samalla tuli myöskin testattua firefox
1.0.4-asennus, joka ei myöskään toiminut
ihan halutulla tavalla, eli en saanut firefoxia
päivitettyä uusimpaan versioon.
koska netistä ei löytynyt mitään järkevää apua tämän
ongelman ratkaisemiseksi,
totesin, että taitaa olla parasta jättää asian
tutkiminen toistaiseksi ja koettaa
ratkaista asiaa myöhemmin uudestaan.
##
compiling a program using make
Käännetään ohjelma source-paketista. Suoritamme
esimerkin
wget nimisellä ohjelmalla.
Haetaan wget source paketti, joka löytyy täältä:
http://ftp.gnu.org/pub/gnu/wget/wget-1.9.1.tar.gz
Kopioidaan tiedosto wget-1.9.1.tar.gz hakemistoon
~/wget,
jonka jälkeen aletaan suorittamaan asennusta kutakuinkin
näin:
[mika@nemesis
wget]$ pwd
/home/mika/wget
[mika@nemesis
wget]$ ls
wget-1.9.1.tar.gz
[mika@nemesis
wget]$ tar -zxvf wget-1.9.1.tar.gz
wget-1.9.1/
wget-1.9.1/doc/
wget-1.9.1/doc/ChangeLog-branches/
wget-1.9.1/doc/ChangeLog-branches/1.6_branch.ChangeLog
wget-1.9.1/doc/ChangeLog
wget-1.9.1/doc/Makefile.in
wget-1.9.1/doc/ansi2knr.1
wget-1.9.1/doc/sample.wgetrc
<lyhennetty tulostetta luettavuuden vuoksi…>
wget-1.9.1/config.sub
wget-1.9.1/configure
wget-1.9.1/configure.bat
wget-1.9.1/configure.bat.in
wget-1.9.1/configure.in
wget-1.9.1/install-sh
wget-1.9.1/libtool.m4
wget-1.9.1/ltmain.sh
wget-1.9.1/mkinstalldirs
wget-1.9.1/stamp-h.in
[mika@nemesis
wget]$ ls
wget-1.9.1 wget-1.9.1.tar.gz
[mika@nemesis
wget]$ cd
wget-1.9.1
[mika@nemesis
wget-1.9.1]$ ls
aclocal.m4
configure install-sh mkinstalldirs stamp-h.in
AUTHORS configure.bat libtool.m4 NEWS TODO
ChangeLog
configure.bat.in ltmain.sh PATCHES util
ChangeLog-branches configure.in MACHINES po windows
ChangeLog.README
COPYING MAILING-LIST README
config.guess
doc Makefile.cvs README.cvs
config.sub
INSTALL Makefile.in src
[mika@nemesis
wget-1.9.1]$ ./configure
configuring for GNU Wget 1.9.1
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking whether make sets $(MAKE)... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking for gcc... gcc
checking for C compiler default output... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
<lyhennetty tulostetta luettavuuden vuoksi…>
checking for perl... /usr/bin/perl
checking for pod2man... /usr/bin/pod2man
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating doc/Makefile
config.status: creating util/Makefile
config.status: creating po/Makefile.in
config.status: creating windows/Makefile
config.status: creating src/config.h
config.status: executing default commands
generating po/POTFILES from ./po/POTFILES.in
creating po/Makefile
[mika@nemesis
wget-1.9.1]$ make
echo timestamp > stamp-h.in
cd src && make
CC='gcc' CPPFLAGS='' DEFS='-DHAVE_CONFIG_H
-DSYSTEM_WGETRC=\"/usr/local/etc/wgetrc\"
-DLOCALEDIR=\"/usr/local/share/locale\"'
CFLAGS='-O2 -Wall -Wno-implicit' LDFLAGS='' LIBS='-lssl -lcrypto -ldl ' prefix='/usr/local' exec_prefix='/usr/local' bindir='/usr/local/bin' infodir='/usr/local/info' mandir='/usr/local/man' manext='1'
make[1]: Entering directory
`/home/mika/wget/wget-1.9.1/src'
gcc -
gcc -
<lyhennetty tulostetta luettavuuden vuoksi…>
make[1]: Leaving directory
`/home/mika/wget/wget-1.9.1/util'
cd windows && make CC='gcc' CPPFLAGS='' DEFS='-DHAVE_CONFIG_H
-DSYSTEM_WGETRC=\"/usr/local/etc/wgetrc\"
-DLOCALEDIR=\"/usr/local/share/locale\"'
CFLAGS='-O2 -Wall -Wno-implicit' LDFLAGS='' LIBS='-lssl -lcrypto -ldl ' prefix='/usr/local' exec_prefix='/usr/local' bindir='/usr/local/bin' infodir='/usr/local/info' mandir='/usr/local/man' manext='1'
make[1]: Entering directory
`/home/mika/wget/wget-1.9.1/windows'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory
`/home/mika/wget/wget-1.9.1/windows'
[mika@nemesis
wget-1.9.1]$ cd src
[mika@nemesis
src]$ pwd
/home/mika/wget/wget-1.9.1/src
[mika@nemesis
src]$ ls
wg*
wget wget.h
wget-ohjelma on nyt käännetty ja löytyy hakemistosta
src.
Jotta ohjelmaa voitaisiin käyttää kuten muitakin
ohjelmia,
kopioidaan ohjelma käyttäjän kotihakemiston
bin/-hakemistoon:
[mika@nemesis
src]$ cp wget
~/bin
[mika@nemesis
src]$ cd
~/bin
[mika@nemesis
bin]$ ls
wget whud
Tämän jälkeen voimmekin jo kokeilla ohjelman
toimintaa:
[mika@nemesis
bin]$ ./wget
http://myy.helia.fi/~a0300187/linux
--02:09:30-- http://myy.helia.fi/%7Ea0300187/linux
=> `linux'
Resolving myy.helia.fi... 193.166.9.27
Connecting to myy.helia.fi[193.166.9.27]:80... connected.
HTTP request sent, awaiting
response... 301 Moved Permanently
Location:
http://myy.helia.fi/~a0300187/linux/ [following]
--02:09:30-- http://myy.helia.fi/%7Ea0300187/linux/
=> `index.html'
Connecting to myy.helia.fi[193.166.9.27]:80... connected.
HTTP request sent, awaiting
response... 200 OK
Length: 1,504 [text/html]
100%[====================================>]
1,504 --.--K/s
02:09:30 (436.74 KB/s) -
`index.html' saved [1,504/1,504]
[mika@nemesis
bin]$ ls
index.html wget whud
==> wget toimii kuten pitääkin....
##
Perl scripting
Testataan perl komentoa hakemiston /home/mika/perl
sisällä olevaan
mallitiedostoon, joka sisältää mallitekstiä
jotakuinkin näin...
[mika@nemesis
perl]$ pwd
/home/mika/perl
[mika@nemesis
perl]$ ls
foo
[mika@nemesis
perl]$ cat foo
ankkalinna ja hanhivaara
[mika@nemesis perl]$ cat foo | perl -p -e 's/ja/on
parempi paikka kuin/g'
ankkalinna on parempi paikka kuin hanhivaara
[mika@nemesis perl]$
Komento perl -p -e 's/ja/on parempi paikka kuin/g'
siis korvaa tekstissä olevan
sanan "ja" sanoilla "on parempi
paikka kuin".
##
Esimerkkejä grep-komennon käytöstä
Tarkista mitä prosesseja on päällä tietyllä käyttäjätunnuksella:
ps -ef | grep <username>
Hae jotain tiettyä stringiä haluamasi hakemiston
kaikista tiedostoista:
grep <merkkijono> *
ja niin edelleen...
Mika Karjalainen / a0300187
Copyright (c) 2005 Mika Karjalainen.
Permission is granted to copy,
distribute and/or modify this document under the terms of the GNU Free
Documentation License, Version 1.2 or any later version published by the Free
Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no
Back-Cover Texts.