Tehtävä 6

Write a shell script. Compile simple example program in Java. Compile a program using make. Write a perl one-liner. Give an example of grep.

Tehtävien Ratkaisut

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 -I. -I.    -DHAVE_CONFIG_H -DSYSTEM_WGETRC=\"/usr/local/etc/wgetrc\" -DLOCALEDIR=\"/usr/local/share/locale\" -O2 -Wall -Wno-implicit -c cmpt.c

gcc -I. -I.    -DHAVE_CONFIG_H -DSYSTEM_WGETRC=\"/usr/local/etc/wgetrc\" –

 

<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.