en fi en fi fi fi fi fi fi fi en fi pl fi fi la fi fi fi la fi vi en en en fi pl fi fi fi fi fi fi fi fi fi fi fi en en en fi fi fi en fi en fi fi fi fi fi fi fi fi fi fi fi fi de fi fi fi fi fi pt de fi fi fi sl fi de en fi fi en fi en en en en fi fi fi en en fi fi fi fi fi en fi fi en en fi fi fi fi pl en en en pt en en kn en en kn en en en kn pt en kn de hu fi en en kn fi en fi en en fi fi fi kn fi fi fi fi fi en pt en en en de kn de en fi pt en en kn en en kn de fi en en en kn en fi fi it it en en kn en fi fi en fi fi fi fi fi fi fi ja fi fi fi fi fi fi fi fi fi fi de fi hbs_lat fi fi fi fi fi fi en fi hbs_lat fi pt ja en fi en fi fi en fi ru en en en en en en en et fi fi fi fi fi fi fi
Reititys- ja palomuuriongelmien selvittämisessä yksi perustyökalu on traceroute, joka yrittää selvittää mitä kautta paketti kulkee:
Usein mitään optioita ei tarvita, mutta jos jokin palomuuri välissä estää normaalin toiminnan, voi kokeilla vaihtoehtoisia menetelmiä:
-I käytä ICMP ECHOa (ping)
Muitakin optioita erikoistarpeisiin on, mm.
-n älä hae koneiden nimiä DNS:stä
-m max_ttl aseta yläraja hyppymäärälle (oletus 30)
-w waittime kuinka monta sekuntia vastausta odotetaan (oletus 5)
Joskus skriptissä halutaan antaa komennolle syötteeksi monta riviä käyttämättä aputiedostoa. Kätevä tapa siihen on ns. here-document:
Se lukee samasta skriptitiedostosta seuraavia rivejä ja syöttää ne komennolle loppusanaan (usein EOF) saakka. Jos loppusanaa ei suojata lainausmerkeillä tai \:llä, shell käsittelee erikoismerkkinsä (kuten $) normaaliin tapaan. Esim.
KALA=lohi cat  kalat.txt hauki ahven $KALA EOF
”Engine X”, toiseksi yleisin (apachen jälkeen) www-palvelin Linux-ympäristössä, yleistyy nopeasti
Ei ihan yhtä ”full-featured” kuin apache, mutta monissa tilanteissa kevyempi (etenkin muistin tarve pienempi, joskus vertailukelpoinen jopa lighttpd:n kanssa)
Virtuaalipaketti "nginx" asentaa kulloisenkin oletussetin (tällä hetkellä ~ nginx-core) mutta ei vaihda sitä päivityksissä
Jos useita vaihtoehtoja, ensimmäistä löytynyttä käytetään
Jos default-konfiguraatiota ei käytetä, poistetaan linkki:
server { listen 80; # Ipv4; voisi olla myös esim. 8080 tai 443 (https) listen [::]:80; # IPv6 server_name tt2.student.it.jyu.fi; root /var/www/tt2.student.it.jyu.fi/html; index index.html index.htm; location / { try_files $uri $uri/ =404; } }
nginx: virtual host, esimerkki
ln -s ../sites-available/tt2.student.it.jyu.fi /etc/nginx/sites-enabled # huom. ei erityistä komentoa (vrt. lighty-enable-mod) mkdir -p /var/www/tt2.student.it.jyu.fi/html cat >/var/www/tt2.student.it.jyu.fi/html/index.html   tt2   tt2 here    EOF systemctl reload nginx tail /var/log/nginx/error.log # jos ei toimi...
Nginx'in konfiguraatiotiedostossa olevat määritykset (direktiivit) voivat olla globaaleja tai jossain aaltosuluilla {} rajatussa kontekstissa: http{} server{} location{} events{}
Direktiivien loppuun tulee yleensä puolipiste (ei }:n jälkeen)
Yleisiä globaaleja asetuksia: user (käyttäjätunnus jolla nginx pyörii), worker_processes (montako palvelinprosessia käynnistetään), pid (minne nginx-pääprosessin PID talletetaan); näitä ei yleensä tarvitse muuttaa
Konfiguraatiotiedostoon voi lukea muita include-direktiivillä, jokerit toimivat
Kaikki http(s)-palvelimiin liittyvät direktiivit (erityisesti myös server{}) ovat http{}:n sisällä; kaikki .../sites-enabled/... tiedostot tulevat automaattisesti sen sisään (toteutettu include-direktiivillä html{}:n sisällä)
Virtual host -määritykset tehdään server{} -direktiivillä, niiden sisällön ohjaukset sen sisällä location{}'illa
events{} ohjaa yhteyksien muodostumista (esim. worker_connections: kuinka monta yhtaikaista yhteyttä per palvelinprosessi sallitaan)
jos :portti puuttuu, oletetaan 80
jos osoite puuttuu, oletus = * = kaikki IPv4-osoitteet
[::] = kaikki IPv6 -osoitteet
voi olla useita samassa server{}:ssä
yleinen optio default_server, muita mm. ssl, proxy_protocol
nimi tai nimet joihin vastataan; ensimmäinen ensisijainen
jokerit ja regexp'it sallittuja: *.example.com ~^www\..*\.example\.net
sisällön juurihakemisto, johon suhteessa URL-polut tulkitaan
tiedostonimi jota käytetään URLin viitatessa hakemistoon ts. lopussa /
jos useita, käytetään ensimmäistä joka löytyy
error_log file | stderr | syslog:server=...
minne virheilmoitukset kirjoitetaan (paljon optioita)
location [= ~ ~* ^~] URI {...}
URIsta riippuvia asetuksia (server{}in sisällä); voi olla useita sisäkkäin
@nimi määrittää nimetyn sijainnin käytettäväksi uudelleenohjausviittauksissa
location{}in sisällä voi olla mm.
root, index, error_log, proxy_pass ...
polun alku (esim. /); jos edessä ^~, ohittaa regexpit
käsitellään pituusjärjestyksessä, pisin voittaa
=koko polku (”= /kala/hauki.html”)
voittaa kaikki muut; voi olla esim. yhtaikaa sekä ”/” että ”= /”
~regexp (”~ \.php$”), ~* case-insensitive
regexp'it voittavat polunalkumääritykset ilman ^~ -prefiksiä
regexp'it tulkitaan järjestyksessä, ensimmäinen voittaa
try_files file ... URI;
Vaihtoehtoja miten tiedosto tulkitaan, ensimmäinen löytynyt voittaa
$uri on alkuperäinen polku sellaisenaan
yleisin virhekoodi 404 Not Found
try_files /huoltokatko.html $uri $uri/ $uri.html =404;
sudo apt-get install php-common php-cli php-fpm
Halutun virtual hostin konfiguraatiotiedostoon:
location ~ \.php$ {
Joskus tarvitaan lisäksi (polku voi vaihdella)
Yleensä halutaan lisätä index-määritykseen index.php, että /-loppuiset URIt toimisivat myös php:n kanssa
sudo systemctl restart nginx
rewrite regexp korvaus [lippu]
Muuntaa URIn toiseksi regexp-säännöllä
Jos useita, suoritetaan järjestyksessä
break: lopeta rewrite-sääntöjen suoritus tähän
last: lopeta tähän ja ala käsitellä muutettua URIa alusta
redirect: palauta ”temporary redirect” -koodi
permanent: palauta ”permanent redirect” -koodi
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;
rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra break;
Ohjaa (yleensä location{}in määräämän) URLin toiseen
Yhdistettävissä esim. rewrite-direktiivin kanssa:
rewrite /user/([^/]+) /users?name=$1 break;
Esimerkki: halutaan erottaa virtual hosteja sisäisesti eri virtuaalikoneisiin.
Ohjataan kaikki ulkoa tulevat pyynnöt edustapalvelimena toimivalle nginx'ille, jossa on kullekin virtual hostille tämäntapainen määritys:
location / { proxy_pass http://kone1:8080/; }
Virtual hosteja voidaan jakaa eri virtuaalikoneisiin kuten halutaan, jossain voi pyöriä nginx, jossain apache, jossain lighttpd... jopa useita samassa koneessa eri porteissa, edustakoneen huolehtiessa ohjauksesta oikeaan paikkaan.
Edustakone voi myös vaihtaa protokollaa, erityisesti https→ http (jolloin taustakoneiden ei tarvitse huolehtia sertifikaateista), tai ftp → http(s) tms
Joskus on hyödyllistä testata www-sivujen toimintaa komentoriviltä interaktiivisesti, ei-graafisella selaimella. Tunnetuimpia ovat:
lynx: vanhin, pieni ja kevyt, ei javascriptiä eikä css:ää
elinks: tukee (jotenkin) javascriptiä ja css:ää
Molemmissa paljon optioita, erityisesti automatisoituun testaukseen sopiva -dump
Vrt. wget ja curl
Skriptin ensimmäisellä rivillä voidaan määrätä käytettävä tulkkiohjelma (shell) mahdollisine optioineen:
optioita: -e = keskeytä virheeseen, -x = jäljitä suoritusta
Jos skriptitiedosto on suoritettava (chmod +x), sen voi ajaa suoraan tyyliin ./skripti.sh, muuten bash skripti.sh (tai bash -ex skripti.sh jne) tai sh skripti.sh
Shellille voi antaa skriptin komentorivillä tyyliin sh -c '…', hyödyllistä mm. sudo tai ssh:n kanssa rajaamaan mikä shell tulkitsee minkäkin osan komentorivistä
Kun skriptissä tarvitaan tilapäistä tiedostoa, sopiva paikka on usein /tmp tai /var/tmp - mutta tiedostonimeä ei yleensä kannata kiinnittää, useammastakin syystä:
Jos skriptiä voidaan ajaa monta kertaa samaan aikaan, saman tiedostonimen käyttö aiheuttaa ongelmia
Jos aiottu nimi on jo jonkin muun käytössä, sen käyttö ei yleensä onnistu
Kiinteä tiedostonimi saattaa muodostaa tietoturvaongelman (hyökkäysvektori mustahatuille)
Yksi keino on prosessin id, ympäristömuuttujassa $$:
MYFILE=/tmp/.jotain$$ # ei kovin turvallinen
Yleinen ratkaisu tilapäistiedostotarpeisiin on
mktemp [-du] [-p DIR] template
template on nimimalli, jossa pitää olla vähintään 3 X:ää (oletus tmp.XXXXXXXXXX)
-p (--tmpdir) hakemisto jonka alle tiedosto luodaan
-d (--directory) luo hakemisto tiedoston asemesta
-u (--dry-run) älä luo tiedostoa, palauta vain nimi
Vastaavat kirjastokutsut mktemp(3), mkstemp(3) ja mkdtemp(3)
Luotu tiedosto pitää erikseen hävittää kun sitä ei enää tarvita.
Skriptissä voi varautua sen keskeytymiseen virheeseen:
Signaalina 0 tarkoittaa skriptin loppumista mistä tahansa syystä, ja se on hyödyllinen erityisesti "loppusiivoukseen".
trap "rm $MYTEMPFILE" 0
(Huom. lainausmerkkien ' ' ja " " ero)
Telnet on alunperin tehty pääteyhteyden muodostamiseksi verkon yli, mutta koska siinä ei ole minkäänlaista salausta, siitä on luovuttu eikä telnet-demonia enää juuri missään käytetä. Telnet-client on kuitenkin yhä hyödyllinen avointen tcp-porttien testaamiseen ja tekstipohjaisten protokollien kokeilemiseen käsin:
Esim. kokeillaan postipalvelimen toimintaa:
$ telnet smtp.example.org 25
Escape character is '^]'.
220 mail1.example.org ESMTP; Wed, 6 May 2015 07:51:39 +0300
221 2.0.0 mail1.example.org closing connection
Connection closed by foreign host.
Usein kernel-päivitykset jättävät vanhatkin kernelit paikalleen. Ennen pitkää ne täyttävät /boot-osion (tai /:n).
Yleensä apt (tai apt-get) autoremove poistaa tarpeettomat (säilyttää kaksi uusinta), mutta aina se ei toimi.
Joissakin (vanhemmissa) Ubuntu-versioissa auttaa
purge-old-kernels [--keep n] # säilyttää n uusinta, oletus 2
Ei aina valmiiksi asennettuna, tarvittaessa apt-get install byobu
Kutsuu apt-get -komentoa eikä toimi jos se on rikki (erityisesti jos päivitys tai asennus on jo kaatunut levyn täyttymiseen…)
Jos em. eivät toimi, vanhoja kerneleitä voi poistaa yksitellen käsin (dpkg -l | grep linux image; apt --purge tai dpkg -r ...)