LPIC-1 - Kaku konspekt 2016, 2. osa
JÄTKUU....
LPIC-1 - Kaku konspekt 2016, 1. osa
Käsukestad
Peamiselt siin bash.
Kest pannakse kirja /etc/passwd-i (kui ei ole, tuleb bash).
Sisselogimise blokeerimine: panna shelliks /bin/false või /sbin/nologin (viimane annab vastava teate).
tühikutega teksti võib panna jutumärkidesse või panna tühiku ette \
TERVITUS="Tere tere!" on sama mis TERVITUS=Tere\ Tere!
vaikimisi defineeritakse vaid samale kestale, mitte tuletistele - seetõttu ./programm -käivitamisel need edasi ei lähe (avatakse uus kest)!
lahendus on muutuja eksport - siis antakse edasi "lastele".
Vastassuunalise protsessi jaoks ("lapse" defineeritud muutuja kasutamine "vanemas") tuleb "laps" käivitada mitte täitmise,
vaid pöördumisega (source - sarnaselt kesta häälestusfailidega):
source ./skript või
. ./skript
muutujate väärtustamine ja nullimine
lihtsal tasemel set ja unset - NB! unset ilma dollarimärgita!
set ilma parameetriteta näitab kõiki muutujaid.
set +/- omadus - kesta omaduste seadmine. - on seadmine, + on tühistamine!
Näiteks:
set -x või set -o xtrace - käskude kuvamine ekraanil (kasulik skriptide silumisel)
set -C või set -o noclobber - ei luba suunamistel olemasolevaid faile üle kirjutada
saab määrata ka positsioonilisi parameetreid. Näiteks
set a b c d e f
echo $1 // väljastab a
echo {4} // väljastab d
Alamkesta kasutamine
Alamkesta avamiseks tuleb vastavad käsud panna sulgudesse, käskude vahele semikoolonid.
Näide:
echo "Algne kest: tase $BASH_SUBSHELL, kesta PID $$"
FOO=bar
echo "Muutuja väärtus $FOO"
(FOO=boo; echo -n "Alamkest: tase $BASH_SUBSHELL."; echo "Muutuja väärtus $FOO";
echo "PID: $$")
echo "Uuesti algne kest, muutuja väärtus $FOO"
NB! PID jääb samaks!
BASH_SUBSHELL - bashi muutuja, näitab alamkesta taset
$$ - jooksva protsessi PID
env kasutamine skriptides (vaikimisi kuvab kõik muutujad)
shebang ehk #!/interpretaator - määrab, millega tuleb skript käivitada (N: /usr/bin/ruby, /usr/bin/python, /bin/bash)
kui aga interpretaatori asukoht ei ole täpselt teada, saab seda env-iga PATH-ist otsida: #!/bin/env ruby
env -i - keskkonnamuutujate algväärtustus
Sisselogimise häälestusfailide poole pöördumine
1. /etc/profile (ja kui on, siis /etc/profile.d/ sisu)
2. ~/.bash_profile - kui ei ole, otsitakse .bash_login või .profile -faile
3. ~/.bashrc - pöördutakse .bash_profile-ist
4 ~/.bash_logout - väljalogimisel viimasena. Peamine mõte on clear-käsk ehk ekraani puhastamine
Muu kestakasutus (ilma sisselogimata) - ainult ~/.bashrc (Red Hatil kutsub see omakorda välja /etc/bashrc)
PATH
vaikimisi otsitavate kataloogide kogum. Muutuja PATH, eri kataloogid eraldatud koolonitega
Näide: /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin; /home/sean/bin:/home/sean/cxoffice/bin:/opt/IBMJava2-142/jre/bin/
Enamasti lisatakse kasutaja kodukataloog olemasolevale PATH-ile: export PATH=$HOME/bin:$PATH.
Jooksva kataloogi lisamine: export PATH=$PATH: Turvarisk! Võimaldab luua kurja programmi, nimetada see näiteks ls-iks ja käitada prioriteediga päris ls-i ees!
aliased - käskude lühikujud. Alias on suurema prioriteediga kui PATH-i käsud! Aliasest möödapääsus tuleb kas anda käsk koos täis-kataloogiteega (bin/rm) või panna ette paosümbol \ (\rm).
funktsioonid - üldkuju: function nimi(){ käsud } . Näide:
function dircp () {
tar -cf - * | ( cd $1 && tar -xf - )
}
Parameetrid $1, $2 jne. Kõik parameetrid korraga - $*
PS1 - prompti muutmine
$ PS1="\h:\w\$ "
bob:~/tmp$
h - hostname
w - jooksev kataloog
$ - dollar (tavaprompt)
NB! Makrod algavad \ -ga!
PS2 - lisaprompt, mida näidatakse rohkem kui 1-realiste käskude puhul (vaikimisi on see >)
uue kasutaja loomise vaikimisi info
useradd kasutab vaikimisi /etc/skel väärtusi
muudetav failist /etc/default/useradd .
Minu Minti läpaka /etc/skel:
kakk@aragorn:~$ ls -la /etc/skel/
kokku 32
drwxr-xr-x 4 root root 4096 okt 9 2014 .
drwxr-xr-x 177 root root 12288 märts 30 10:54 ..
-rw-r--r-- 1 root root 220 märts 30 2013 .bash_logout
drwxr-xr-x 5 root root 4096 dets 9 23:25 .config
drwxr-xr-x 3 root root 4096 dets 6 14:51 .mozilla
-rw-r--r-- 1 root root 675 märts 30 2013 .profile
kakk@aragorn:~$
I18n ja l10n
Tsitaat:
--->
Internationalization is the feature that allows a system to display information in different ways.
Localization is the process that bundles up all the regional changes for a single location into a locale.
<---
Unixi ajatempel - sekundite arv epohhi algusest (01.01.1970) GMT/UTC aja järgi
Aega näitab date (kuupäev + kellaaeg)
Saab määrata eri vorminguid:
$ date +"%Y-%m-%dT%H:%M:%z"
2015-03-08T21:19:-0500
z - Zulu time (ehk GMT lennunduses ja sõjanduses)
Ajavööndi sätted asuvad /usr/share/zoneinfo alamkataloogides ja failides (N: /usr/share/zoneinfo/Europe/Tallinn) NB! Binaarid!!!
Süsteemi kellaaeg: /etc/localtime - enamasti sümlink vastavale zoneinfo-failile või selle koopia (vt eelmine)
Kasutajad saavad seda muuta TZ-keskkonnamuutuja määramisega
tzselect - aitab leida ajavööndi
tzconfig ja dpkg-reconfigure tzdata (debianlastel) väärtustavad /etc/localtime-i.
Lisaks salvestatakse ajavöönd veel failidesse /etc/timezone (debianlased) või /etc/sysconfig/clock (redhatlased)
Märgikodeeringud
ASCII - 7 bitti
laiendatud - 8 bitti, eri koodilehed
Üks levinud standard - ISO-8859 ja selle alamstandardid (eesti keelel ISO-8859-15).
Unicode, algselt 2 baiti, esimesed 127 väärtust kattuvad ASCIIga. Hiljem 4-baidine (UTF-16) ja varieeruvalt 1-6 baidine (UTF-8)
Locale:
Keelekood
Riigikood
Kodeering (kui vaja)
Näide: et_EE.utf8
Fallback-lokaat: C ehk POSIX, standardne 8-bitine ASCII
kui pole paigaldatud, saab luua locale-gen -käsuga (locale-gen et_EE.utf8)
paigaldatud lokaate näitab locale -a
i18n - GNU gettext -teek
Muutujad:
LANGUAGE - ainult printimisel
LC_ALL - lokaadi sundimiseks - NB! sõidab teistest üle, kui ka need on määratud muudmoodi!
LC_xxx - lokaadi elemendid (näiteks rahaühik LC_MONETARY)
LANG - keele põhimuutuja
Failide tõlkimine kodeeringute vahel - iconv
N: iconv -c -f ASCII -t UTF-8 datafile.txt > datafile.utf8.txt
-c - kustutab tundmatud sümbolid
-f - from
-t - to
-l - list, kõik kasutatavad kodeeringud (suur hulk)
Skriptimine
Käivitamine:
a) ./skript - eeldab käivitusõigust ja shebang-rida alguses
b) sh skript või bash skript - sel juhul tõlgendatakse shebang-i kommentaarina!
Kui shebangi pole, üritatakse käivitada vaikimisi kestaga (üldiselt bash)!
Hea skriptimise põhimõtted:
1. tee ühte asja korralikult
2. anna selgitusi nii õnnestumise kui ebaõnnestumise puhul
3. selge stiil, piisavalt kommentaare
4. selge ja ühemõtteline nimi
5. laiend näitab, millega seda käitada: kopeeri.sh, arvuta.pl, leiamaksimum.py
Asukoht: eraviisilised $HOME/bin, teistega jagatavad /usr/local/bin (või leida turvaline viis anda ligipääs kodukataloogi)
NB! SetUID - kernel eirab seda skriptide puhul! Tuleb sudo kasutada
Saab kasutada kõiki käsureakäske, toru, suunamisi, backticki...
Väärtuse arvutamine: $(()) N: PROCS=$(($PROCS-1)) (ühekordsete puhul on tegu muutujanime asendusega)
N: PROCS=$(( `ps -ef | wc -l` - 1 ))
bc - minikeel reaalarvude töötlemiseks (bash toetab vaikimisi vaid täisarve!)
N:
RADIUS=3
echo "3.14 * $RADIUS ^ 2" | bc
Tingimuslause:
if ps -ef | grep -q [n]agios; then
echo Nagios is running
fi
Märkus: grep -q on vait (ei väljasta tulemusi) - meid huvitab vaid lõppväärtus (0 või mitte)!
regulaaravaldis [n]agios aitab välistada "iseenda nägemist" grepi poolt (grep nagios)
NB! Enamasti on programmeerimises 0 väär ja 1 tõene. Bashis on sisuliselt vastupidi - 0 tähendab jah/tõene/veatu, 1 ja rohkem vastupidist.
Täielik if:
if ps -ef | grep -q [n]agios; then
echo Nagios is running
elseecho Nagios is not running. Starting
service nagios start
fi
else if:
if ps -ef | grep -q [h]ttpd; then
echo Apache is running
elif ps -ef | grep -q [n]ginx; then
echo Nginx is running
else
echo No web servers are running
fi
faili olemasolu kontroll - test -f
if test -f /etc/passwd; then
echo "password file exists"
fi
test on paljude võimalustega!
Teine variant - kantsulud loetakse test-iks:
if [ -x /usr/bin/nginx ]; then
echo nginx is executable
fi
uuemad bashi versioonid toetavad ka topelt-kantsulgu:
if -x /usr/bin/nginx ; then
echo nginx is executable
fi
NB! Tühik kantsulgude ees ja järel on oluline!
Input:
echo -n "Say something: "
read STRING
if -z $STRING ; then
echo "You didn't say anything"
else
echo Thanks for that
fi
-z - nullstring
-n - pole nullstring
stringivõrdlus: = ja !=
Täisarvuvõrdlused:
X -eq Y -võrdub
X -ne Y - ei võrdu
X -gt Y - X > Y
X -ge Y - X >= Y
X -lt Y - X < Y
X -le Y - X <= Y
ja/või:
ühekordsete kantsulgude puhul -a ja -o
kahekordsetel && ja ||
case:
case $1 in
start)
echo "Starting the process"
stop)
echo "Stopping the process"
- )
echo "I need to hear start or stop"
esac
- case-bloki lõpp
- ) default/else
for:
for variable in collection; do
- Do something on $variable
done
seq - loeb numbreid:
- seq 1 5 1,2,3,4,5 (algus, lõpp
- seq 1 2 5 1 3 5 (algus, samm, lõpp)
- seq -w 8 10 08 09 10 (-w lisab ette nulli)
while:
while -f /var/lock/script1 ; do
echo waiting
sleep 10
until:
until [ -f /var/tmp/report.done ]; do
- Waiting until the report is done
sleep 10
done
rm /var/tmp/report.done
stdin-ist lugemine:
while read LINE; do
echo $LINE
done
$? - töö tulemus (0 või rohkem)
$# - argumentide arv
$0 - skripti enda nimi
shift - argumentide nihutamine ühe võrra ettepoole: $5 saab $4-ks, $4 $3-ks jne
exec - asendab kestas jooksva programmi uuega
exit - skriptist väljumine ilma veata
exit 1 - veaga
SQL
Andmebaaside tüübid:
1. võti-väärtus (sõnastik) - RPM, BerkeleyDB, otsing kiire, täiendamine aeglane (indeksite ringiarvutamine)
2. relatsioonilised (kirje-tabel-baas) - mitu-ühele ja mitu-mitmele suhted. MySQL, Oracle, PostgreSQL
3. schemaless (??) - NoSQL (MongoDB, ElasticSearch, Couchbase). Ei sobi transaktsioonidele, sobivad väga suurtele võrguamdmebaasidele
SQL
sqlite3 või mysql
semikoolon lõpetab
kommentaar: -- rea alguses
Andmed ja tabelinimed on tõstutundlikud, muu tõstutundetu
SELECTi võib kasutada ka printi rollis: SELECT "teretere"; SELECT 1 + 1;
Tabeleid on kombeks nimetada ainsuses (raamat ja isik, mitte raamatud ja isikud)!
WHERE
=, >, <, <>
BETWEEN - NB! Kaasa arvatud piirväärtused
IN (väärtus1, väärtus2, ..., väärtusN).
LIKE:
_ - üks märk (nagu ? mujal)
% - 0 või enam märki (nagu * mujal)
SELECT title FROM book WHERE title LIKE '%Exam Cram 2'; -- kõik, mille pealkiri lõpeb selle tekstiga
Järjestamine:
SELECT * FROM book ORDER BY written, year; -- võib ka mitu kriteeriumit panna järjest
SELECT title from book ORDER by title DESC; -- kahanevalt
SELECT title from book ORDER by 2 DESC; -- järjestuse võib määrata ka veerunumbri järgi
Piiramine: LIMIT
SELECT title, year from book DESC LIMIT 2; -- kaks viimasena ilmunud raamatut
SELECT title, year from book DESC LIMIT 2, 2; -- jäta kaks vahele, näita kahte järgmist
SELECT title, year from book DESC LIMIT 2 OFFSET 2; -- sama
Normaliseerimine - tabelite jagamine eraldi tabeliteks andmete dubleerimise vähendamiseks (lingitakse kokku)
Ühendamine: JOIN
N: SELECT * FROM author JOIN book ON book.author_id = author.id;
Tabelialiased: AS
N: SELECT * FROM author AS a JOIN book AS b ON b.author_id = a.id;
AS-sõna ei ole kohustuslik - sama on SELECT * FROM author a JOIN book b ON b.author_id = a.id;
Sisemine vs vasak vs parem JOIN
Sisemine: ühisosa; SELECT * FROM vasak JOIN parem ON vasak.id = parem.id
vasak: ühisosa + kogu vasak; SELECT * FROM vasak LEFT JOIN parem ON vasak.id = parem.id
parem: ühisosa + kogu parem; SELECT * FROM vasak RIGHT JOIN parem ON vasak.id = parem.id
NULL - tühi väärtus; IS NULL, IS NOT NULL
Alamvalik (subselect): SELECT title FROM book WHERE author_id IN (SELECT id FROM author WHERE first_name = "Sean");
Enamasti WHERE...IN -konstruktsioonis
Grupeerimine: SELECT first_name, last_name, COUNT(title) AS books FROM author LEFT JOIN book ON author_id=author.id GROUP BY first_name, last_name;
Veel funktsioone: AVG, MIN, MAX, SUM
Lisamine: INSERT INTO book (title, year, author_id) VALUES ('Sketch of the Analytical Engine', 1842, 3);
Võtmeväli suureneb automaatselt! Osa väärtusi võib panna NULLiks või jätta lisamata (paneb ise)
Uuendamine: UPDATE book SET year=2015 WHERE id=6;
Kustutamine: DELETE FROM book WHERE author_id IS NULL;
Loomine: CREATE TABLE book (id integer primary key, title varchar(255), year integer, author_id integer, written integer);
Kasutajaliidesed
X tegeleb
- baastaseme akendega
- riistvaraga suhtlemisega
X ei tegele
- sisselogimisega (seda teeb DM)
- töölauaga (taust, menüüd, tööriistariba - seda teeb töölauasüsteem)
- akende detailidega (seda teeb aknahaldur ehk WM)
klient-server süsteem - klient võib asuda nii samas kui teises masinas
Aknahaldur varustab X-i akna "tooriku" elementidega nagu nupud, päis, menüüd jne
Töölauasüsteemis võib olla
- failihaldur
- juhtpaneel
- aknahaldur
- meediamängija
- ühtne kujundus
- erinevad rakendused (K*)
/etc/X11/xorg.conf
- Files - moodulid, kirjastiilid
- Module - glx (sarnane draiverite laadimisele mujal)
- InputDevice - klaver ja hiir
- Monitor - kuvar (seadmena - mudel ja tüüp)
- Screen - kuvasätted
Konfi pole alati vaja, osa distrosid tuvastab automaatselt. xorg.conf'i uuesti genereerimiseks: X -configure või Xorg –configure
uuemates süsteemides võib kirjastiilide jaoks olla üldasukoht /etc/X11/fontpath.d/, kus on sümlingid edasi
Osa süsteeme kasutab kirjastiiliserverit xfs - sel juhul peab olema konfis rida: FontPath "unix/:7100" [või "unix/:-1")
X-i seadistus
xvidtune - ainult CRT monitoridele, LCD või LED-iga ei tööta õieti. NB! Suudab kineskoobi õhku lasta!
xwininfo - akna geomeetriainfo, värvipalett jne.
sisselogimishaldurid
- XDM - /etc/X11/xdm
- KDM - /etc/kde/kdm
- GDM - /etc/gdm
- LightDM - /etc/lightdm, näidis-konfifaili leiab /usr/share/doc/lightdm alt
Võimaldavad ristkasutust - gdm->KDE, lightdm->GNOME jne
konsoolid: reeglina Ctrl-Alt-F1 kuni F6 (/dev/ttyX), Ctrl-Alt-F7 on GUI, Red Hatil on F1 GUI ja järgmised tekstikonsoolid
tekstikonsoolilt tagasi ka Alt-F7
Ctrl-Alt-Bksp (tänapäeval tihti ei toimi!)
Ligipääsetavus
Sticky (klahvid "jäävad sisse", aitab sisestada kombinatsioone ükshaaval vajutustena)
Repeat (klahvikorduse rakendumise aja muutmiseks)
Slow (klahvi reaktsiooniaja muutmiseks)
Bounce (väldib topeltvajutusi)
Toggle (annab märku juhtklahvide vajutamisest)
Mouse (numpad)
kontrastsed teemad (High Contrast)
Ekraanilugejad: Orca, emacspeak, espeak, festival
Luup: KMagnifier
virtuaalklaviatuur: GOK
Kaugligipääs
xhost
Ligipääsu lisamine
xhost +host1 host2
Seejärel võivad lubatud masinad tulla telneti või ssh-ga külge ja käivitada kliendi
Võimalik, et klient peab andma lisaks käsu: setenv HOST "server1:0.0"
xhost + lubab kõiki ligi - turvarisk!
Ligipääsu keelamine: xhost -host3 host4
ssh-ga ühendumise võtmed: -Y (ilma turvakontrollita) ja -X (arvestab X-i turvaseadeid)
Kasutajahaldus
UID ja GID, omavahel seostab /etc/passwd
UID 0 - root
UID 1 - bin (mõne süsteemse tegevuse juures)
UID 48 - apache
UID 99 - nobody (kasutaja on olemas, kuid ei saa sisse logida)
Tavakasutajad tüüpiliselt 500 ja edasi
Soovitus: kohalikud kasutajad 500-9999, võrgukasutajad 10000 ja edasi
Üle 100 kasutaja korral tasub LDAPi kasutada
/etc/passwd:
ross:x:500:100:Ross Brunson:/home/ross:/bin/bash
kasutaja
vanasti parool, nüüd näitab /etc/shadow kasutamist
UID
primaarne GID
kirjeldus - tänapäeval enamasti nimi, vanasti oli rohkem infot (vrdl. finger)
kodukataloog
kest
kest /bin/false - ei saa sisse logida
kest /etc/nologin - sama, aga annab teate ja veakoodi; kui leidub /etc/nologin.txt, kuvatakse see teatena
peale sisselogimist kuvatakse /etc/motd sisu
.hushlogin-fail kodukataloogis - ei tee tavapäraseid sisselogimistegevusi (meilikontroll, lastlogin, MOTD)
/etc/login.defs - vaikimisi sätted kasutaja loomisel useradd-iga (UID vahemik, paroolipiirangud...)
/etc/securetty - määrab, kust root võib sisse logida. Kui puudub, võib kõikjalt
/etc/usertty - slsselogimispiirangud (ainult siis, kui ei kasutata PAM-i)
Grupid - ei saa asuda üksteise sees.
a) primaarne - kirjas /etc/passwd-is, ei pea olema /etc/group-is
b) sekundaarne - kirjas /etc/group-is, määrab täiendavad ligipääsuõigused
0 - root (ligipääs kõigele, millele root-kasutaja ligi saab)
1 - bin (sarnane bin-kasutajaga)
100 - tavakasutajate täiendav ligipääs objektidele
BSD-s on grupp wheel, mille liikmed saavad ainsatena anda su-käsku
Red Hat jm kasutavad UPG-d (user private group) - kasutajale tehakse samanimeline grupp
Debian paneb vaikimisi tavakasutajad gruppi users (GID 100)
/etc/group: users:x:100:ross,snuffy
grupp, shadow, GID, liikmed (komadega eraldatud)
chgrp
newgrp - ajutine uus kest teise grupiga (saavad vahetada gruppi, mille sekundaarliikmed nad on)
gpasswd - grupi ühisparool, sel juhul küsib newgrp ka seda
useradd nimi
- loob uue kasutaja järgmise vaba UID-ga (tüüpiliselt üle 500)
- loob samanimelise grupi (GID=UID) ja määrab selle kasutaja primaargrupiks
- loob kodukataloogi (reeglina samanimelise)
- kopeerib /etc/skel uude kodukataloogi ja annab kasutajale sinna õigused
Debian loob vaikimisi kasutaja esimese vaba UID-ga, grupiks paneb users (100) ja kodukataloogi ei tee -
kodukataloog tuleb luua useradd -m -d -ga, skel-i lisamiseks -k /etc/skel ja uue primaargrupi jaoks -g.
Red Hat paneb kestaks vaikimisi /bin/bash, Debian jätab tühjaks ja eeldatakse /bin/sh (see on aga bashi sümlink)
useradd
-d - määrab kodukataloogi
-D - kuvab vaikimisi sätted failist /etc/default/useradd
-e - lisab konto aegumistähtaja
-f - päevade arv, mille järel saab veel aegunud parooliga sisse
-g - primaargrupp
-G - sekundaargrupp
-k - skeletifailid
-m - loob kodukataloogi, kui seda pole
-o - lubab dubleerida UID-i (MITTESOOVITAV)
-s - kesta asukoht täisteena
Red Hat lubab useradd -D -ga ka sätteid muuta. Näiteks kest: useradd -D -s /bin/bash
groupadd
usermod
-c - muudab kirjelduse/nime välja
-d - muudab kodukataloogi
-e - muudab aegumistähtaega
-f - muudab parooliaegumissätteid (kui kaua veel sisse saab)
-g - muudab primaargruppi (nime või GID järgi)
-G - muudab sekundaargruppi
-s - muudab kesta
-u - muudab UID-i (ohtlik)
-L - lukustab konto (kirjutab /etc/shadow krüpteeritud paroolile hüüumärgi ette) . Sama teeb passwd -l
-U - võtab lukust lahti (hüüumärk maha). Sama teeb passwd -u
groupmod - peamiselt nime ja GID-i muutmiseks
Linux võimaldab kustutada kasutaja (ilma kodukataloogi kustutamata), luua hiljem uue samanimelise ja võtta kodukataloog jälle kasutusse!
userdel - kustutab ainult kasutaja
userdel -r - kustutab kodukataloogi ja meilifaili, ei kustuta aga kasutaja faile mujal süsteemis
Kasutaja jõhker väljaviskamine: leia ps-iga login shell, usermod -L, kill -9 shell_PID, userdel -r kasutaja
groupdel - enne kustutamist tuleks otsida find-iga kõik sinna kuuluvad failid ja omistada ringi
/etc/shadow
- kasutaja
- krüpteeritud parool
- viimati muudetud (Unix days)
- järgmine lubatud muutmine päevades (0 lubab kohe)
- järgmine kohustuslik muuutmine (99999 sisuliselt lülitab välja - 273 aastat)
- mitu päeva enne kohustuslikku hoiatatakse
- mitu päeva peale kohustusliku saab veel sisse
- aegumiskuupäev (Unix days)
Eraldajad on koolonid
Mõni väli võib olla tühi (::), väljadega on võimalik tekitada vastuolu ja paras jama
Failiõigused:
- /etc/passwd - Red Hat ja Debian 644
- /etc/shadow - Red Hat 400, Debian 640
passwd - enda parool
passwd kasutaja - teise parool
chage
chage -option value username - mõjutab /etc/shadow -faili
Valikud (EI KÜSITA)
-m miinimum (lubatud)
-M maksimum (kohustuslik)
-d lastchange
-E aegumine
-I armuaeg
-W hoiatus
chage kasutaja - küsib ise interaktiivselt
chage -l endakasutaja - info enda kohta
passwd
-d - eemaldab parooli ja lukustab konto
-m - miinimum
-x - maksimum
-w - hoiatus
-i - armuaeg
-S - info (N: kakk P 12/24/2013 0 99999 7 -1)
ulimit - kasutaja piirangud
-c - core dump failid
-d - protsessiandmete maht
-f - kestas loodud failide suurus
-n - avatud failide arv
-t - protsessoriaeg
-u - protsesside arv
-v - virtuaalmälu maht
ulimit -a näitab kõike
pannakse kas kasutaja .bashrc-sse või .profile-sse, või samadesse süsteemifailidesse /etc all
/ETC/SHADOW VÄLJADE JÄRJEKORD PEAB PEAS OLEMA!
kui ls -l näitab kasutajanime asemel UID-i, siis on kasutaja kustutatud!
uute failide loomisel ei võeta vanu UID-sid kasutusele (loodi 501-510, siis kustutati 501 ja 504, viimaks loodi veel üks - see saab 511)
Töödehaldus
cron
crond
crontab
Vaatamine: crontab -l
muutmine: crontab -e
Üldine rida: minutid tunnid kuupäev kuu nädalapäev täidetav_käsk
Redigeerimiseks kasutatav redaktor sõltub EDITOR-süsteemimuutujast - .bash_profile-s export EDITOR=/bin/nano. Vaikimisi on vi
Teiste crontabi saab vaadata ja muuta vaid root: crontab -l (või -e) -u kasutaja
Tunnid on 24-sed, nädalapäev 0-7, 0 ja 7 on pühapäev
Kõik positsioonid tuleb täita, tühja asemel on tärn (*). N: 30 5 * * 1 - iga esmaspäev kell 5.30
Üldiselt peavad kõik tingimused olema täidetud - erandiks on olukord, kui täidetud on nii kuupäev kui nädalapäev, sel juhul emb-kumb.
N: 30 5 3 * 1 - iga kuu 3. päeval JA igal esmaspäeval kell 5.30
Kuu ja nädalapäeva võib anda nii numbrina kui kolmetähelise lühendina - jan,feb,mar ning sun,mon,tue
Klassikaline variant ei luba sündmuse kordamist. Kui seda on vaja, siis
a) kirjutada komadega eraldatult mitu väärtust: 0 15 25 apr,sep,dec * igal 25. aprillil, septembril ja detsembril
b) anda vahemik: 0 15 * * mon-fri - igal tööpäeval kell 15.00
Perioodiliselt - võib lugeda kõik ajad komadega ette, aga lihtsam on kaldkriipsuga:
0 */2 * * * iga kahe tunni takka
0 1-23/2 * * * paaritud tunnid
Käivitatav võib olla mistahes programm või ka kohalik skriptijupp:
0 0 * * * if ! -f /var/lock/maintenance ; then /usr/local/bin/backup.sh; fi käivitab backupi, kui maintenance-faili pole olemas
NB! cron ei arvesta .bashrc-d ega teisi, seetõttu seal defineeritud kataloogiteed ei kehti!
crontabis võib määrata omaenda keskkonnamuutujad (nagu mujal skriptides):
PATH - kataloogitee
MAILTO - kõik ekraanile minev saadtakse ka sellele e-postiaadressile
jpt
Mõned "jutukad" tööd võib saata kommentaaridega pikalt:
25 * * * * /usr/bin/php /home/sean/fof/update-quiet.php > /dev/null
2>&1
Paljudes distrodes saab kasutada aliasi:
@reboot - peale iga taaskäivitust
@yearly - iga aasta 1. jaanuari keskööl
@annually - sama mis @yearly
@monthly - iga kuu esimesel keskööl
@weekly - iga pühapäeva keskööl
@daily - igal keskööl
@hourly - igal täistunnil
N: 0 0 * * * /usr/local/bin/backup.sh on sama kui @daily /usr/local/bin/backup.sh
crontab-iga redigeeritud failid asuvad füüsiliselt /var/spool/cron-is (root only). Saab redigeerida ka muuga, soovitav on aga läbi crontabi
Lisaks kasutajate crontab-ile on ka süsteemi oma: sätted /etc/crontab ja /etc/cron.d/
Erinevus - kuues veerg nädalapäeva ja käsu vahel - kasutaja, kellena käsk täidetakse
Veel üks lihtne variant: paigutada käitatav skript vastavasse kataloogi:
/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly
N: cron.daily all on apache2, apt, dpkg, locate, spamassassin...
On ka valge ja must nimekiri: /etc/cron.allow ja /etc/cron.deny kasutajanimedega (root on erand ja ei kuulu süsteemi). Vrdl host.allow/host.deny
Anacron - harvemate ja mitte väga täpsete tööde jaoks (max täpsus 1 päev)
/etc/anacrontab. Kõik root-kasutajana
Mintil:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
HOME=/root
LOGNAME=root
- These replace cron's entries
1 5 cron.daily run-parts --report /etc/cron.daily
7 10 cron.weekly run-parts --report /etc/cron.weekly
@monthly 15 cron.monthly run-parts --report /etc/cron.monthly
ühekordsete tööde jaoks:
at - nii interaktiivne kui skriptina:
midnight - kesköö
noon - keskpäev
teatime - kell 16 pärast lõunat
kellaaeg - 5:00 a.m.
kuupäev/kellaaeg - 2pm jul 23, 4am 121504.
now + kellaaeg - mingi aja pärast: now + 30 minutes
atq või at -l - ootel tööde loend
atrm või at -d - töö kustutamine numbri järgi
/etc/at.allow ja /etc/at.deny
batch - sarnaneb eelmisega, kuid ei käivita tööd kella järgi, vaid kui süsteemi koormus langeb piisavalt madalale
atrun -l 1.6 (käivitub, kui töökoormus langeb alla 1.6 - vt w-käsuga)
Printimine
cupsenable
spooler - trükijärjekorra haldur; /var/spool/cups
Algne Unixi daemon: lpr (BSD oma; SysV-l oli lp)
LPRng
IPP - HTTP-põhine võrguprintimisprotokoll
CUPS - kasutab IPP-d, LPR tõlgitakse IPP-ks - /etc/cups
pildid jäetakse rastergraafikaks, muud failid tõlgitaks PostScripti
draiveriprojektid Foomatic ja Gutenprint
CUPS haldusliides: http://localhost:631
PPD-fail - Postscript Printer Definition, printeri tuvastamiseks
testimiseks võltsprinteri loomine: lpadmin –p FakePrinter –E –v /dev/null –m raw
lp ja lpr mõlemad töötavad käsurealt
suunamine mujale kui vaikimisi printer: lp -d Hewlett-Packard_HP_LaserJet_Pro_MFP_M127fn või lpr -P Hewlett-Packard_HP_LaserJet_Pro_MFP_M127fn
kaks koopiat: lp -n 2 või lpr -#2
lpstat
-a - trükijärjekorra listing
veel:
lpstat -d—Displays the name of the default printer
lpstat -r—Indicates whether CUPS is running
lpstat -s—Provides a status summary of how the system is configured
lpstat -t—Provides a more detailed summary of how the system is configured
lpq - trükijärjekorra päring (staatus ja tööd)
lprm töönumber - töö kustutamine (võib ka cancel töönumber)
Mujalt kui vaikimisi printerist kustutamine: cancel Hewlett-Packard_HP_LaserJet_Pro_MFP_M127fn-9 (printerinimi-töönumber)
cupsreject ja cupsaccept - järjekorra välja-sisse lülitamine
cupsdisable ja cupsenable - printeri välja-sisse lülitamine (võimaldab koguda töid endiselt trükijärjekorda)
cupsctl
/etc/cups (tsitaat):
--->
classes.conf - Contains the classes, which can also be created in the web interface. A class is a group of printers,
and printing to a class queues the job to the first available printer.
cupsd.conf - The main configuration file, which can also be edited in the web interface. This contains default settings
such as timeouts, rules about what can be done by different people, and logging settings.
cupsd.conf.default - A default configuration file that you can use if you really break your production cupsd.conf. Editing the configuration file on the Web also gives you an option to revert to the default file.
printers.conf - Configuration for each printer that you configured on the system.
ppd - A directory containing the PPD files for each configured printer.
<---
E-post
MUA (Mail User Agent) - sisuliselt klienttarkvara (T-bird, Evolution)
MTA (Mail Transfer Agent) - Postfix, Qmail, Exim, Sendmail. NB! Sendmail ja Qmail on monoliidid, Postfix ja Exim komponentidega (vrdl kernel)
MDA (Mail Delivery Agent) - võtab vastu ja viskab kasutaja postkasti
SMTP
POP
IMAP
DNS päring MX (mail exchange) kirje saamiseks
/etc/aliases ja newaliases
alias võib olla ka mõne teise serveri meiliaadress või ka kohalik fail
~/.forward
kui tahta jätta nii kohalikku kui saata edasi, tuleb kurakaldkriips panna:
\isaac
i.smith@example.com
mailq - MTA järjekord; /var/spool/mqueue
/var/log/maillog
Logimine
Kaks kella
- riistvara (reaalajakell)
- tarkvara (süsteemikell, juhib kernel)
Võivad aeg-ajalt erineda
date - kuupäev ja kellaaeg: P apr 3 11:19:15 EEST 2016 (kasutab lokaati!), Wed Apr 15 14:36:05 CDT 2015
-u - näitab UTC-d
+%s - näitab Unixi aega
saab ka muuta: üldkuju date [MMDDhhmm[[CC]YY][.ss]] (mida ei sisestata, jäetakse muutmata)
date +formaat - saab väljastada eri komponente - NB! siin M on minut ja m kuu! A on nädalapäev
Saab kasutada failinimede koostamisel:
$ date +/var/backup/website.%Y%m%d%H%M%S
/var/backup/website.20150418112516
Saab ka lisada teksti:
kakk@aragorn:~$ date +"Täna on %A"
Täna on pühapäev
hwclock - adminikäsk riistvarakella jaoks. Sarnaneb date-iga, aga annab ka sekundid
/etc/adjtime näitab, kas riistvarakell on seatud kohaliku või UTC aja järgi - seal on kas LOCAL või UTC
Kui fail puudub või näitab nulle, on süsteem UTC peal ja hwclock ning hwclock -u näitavad sama aega
Sünkimine:
- hwclock -w või --systohc - riistvarakell häälestatakse süsteemi järgi
- hwclock -s või --hctosys - süsteemikell häälestatakse riistvara järgi
NTP
1 ringi kellad GPS järgi (reference clock), reeglina kasutatakse süsteemide häälestamiseks 3. või 4. ringi kelli
NTP-ga sünkimine (admin): ntpdate kellaserver
pool.ntp.org - üldkasutatavad ajaserverid
Aliased 0.pool.ntp.org - 3.pool.ntp.org viitavad vabatahtlike käitatavatele kellaserveritele
ntpd - hoiab perioodiliselt sünkroonis (ntpdate on ühekordne). /etc/ntp.conf (Mintil pole, Ubuntu serveril ka mitte!)
Sätib riistvarakella iga 11 minuti järel
ntpq - interaktiivne päringukäsk
- peers - näitab ühendatud kellaservereid
- associations - näitab nende ühendust
Logimine - tänapäeval kaks kõrvuti asja - syslog ja SystemD journal
Syslogi logimine:
- rakendusest
- käsurealt logger-käsuga
- üle võrgu, ühendudes logiserveriga
Logimistasemed (NEID KÜSITAKSE!):
0 - emerg
1 - alert
2 - crit
3 - err
4 - warn/ing
5 - notice
6 - info
7 - debug
Tüübid:
- kern
- user
- mail
- daemon
- auth
- syslog
- lpr
- cron
- authpriv
- local0-7
mailiteated alates info tasemest /var/log/maillog, kõik muu /var/log/messages
logger - aitab panna logisse vahepealkirju näiteks enne skripti testimist
-i lisab ka protsessiinfo
-p võimaldab logida etteantud tasemel ja tüübiga. N: logger -i -p mail.info Proovime meili
ksyslogd- või sysklogd-pakk - syslogd + klogd (viimast eriti ei konfita)
/etc/syslog.conf (mul ei ole!)
- This is a comment
authpriv.*
- .info;mail.none;authpriv.none;cron.none
mail.*
/var/log/maillog
cron.*
- .emerg
local7.*
local4.*
Üldised logid:N
/var/log/messages
/var/log/secure
/var/log/maillog
/var/log/cron
/var/log/xferlog - FTP
Lisaks on veel olema rsyslogd (kiire ja laiendatav) ja syslog-ng (uuem variant)
SystemD journal
Systemd logifailid /var/log/journal
journalctl
-e logi lõppu
-r pööratud järjestus
-f (follow) - jälgimine
-o valikud - valikud, ntx -o verbose
-u teenus - teenuse järgi?
Mingi teenuse logid: journalctl /usr/sbin/sshd
/etc/systemd/journald.conf
Rotatsioon
logrotate, /etc/logrotate.conf ja /etc/logrotate.d
weekly - kord nädalas
rotate 4 - neli rotatsiooni enne kustutamist (säilitab 4 nädala logid)
missingok - ei anna viga, kui logi puudub
notifempty - kui logi on tühi, ei roteerita
sharedscripts - käivitab skriptid kõigile valitud failidele
delaycompress - ei paki logi enne roteerimist
postrotate - käivitab peale roteerimist vastavad käsud
Käivitatakse cronist või anacronist igapäevaselt
Võrk
subnet - loogiline grupp (sarnased aadressid)
segment - füüsiline grupp (sarnane asukoht, sama kaabel või kommutaatot)
IP - staatiline või dünaamiline
mask - loogilise grupi (alamvõrgu) piire märkiv kombinatsioon
lüüs - alamvõrgu värav (marsruuter)
IPv4 - 4 oktetti
okteti positsioonid sees või väljas, seesolevad summeeruvad
128 64 32 16 8 4 2 1
Võrgu aadressiklassid:
A - 1 kuni 126, seega max 126 võrku, üle 16M aadressi
B - 128 kuni 191, max 16 382 võrku, igas 65 536 aadressi
C - 192 kuni 223, max üle 2M võrgu, igas 254 aadressi
D - 224 kuni 239, reserveeritud multicastile
E - 240 kuni 254, reserveeritud tulevikuks
127 - loopback
A - okteti 1. bitt alati 0
B - okteti kaks esimest bitti alati 10
C - okteti kaks esimest bitti alati 11
IP koosneb võrgu- ja hostiosast
A - mask 255.0.0.0 ehk /8 - hostiosa kolm viimast oktetti
B - mask 255.255.0.0 ehk /16 - hostiosa kaks viimast oktetti
C - mask 255.255.255.0 ehk /24 - hostiosa viimane oktett
Protokollid
IP - adresseerimine ja kommunikatsioon seadmete vahel
TCP - paketitransport - kindlam kui UDP oma veakontrollisüsteemi tõttu
UDP - sama, kuid ei kontrolli vigu, ühenduse infot paketiga kaasa ei panda
ICMP - veateadete ja päringute (ping) saatmiseks
Pordid
üldnimekiri: /etc/services
Põhipordid 0-1023, tcp ja udp
Reserveeritud pordid 1024-49151
Dünaamilised ehk privaatpordid 49152-65535
20 & 21—FTP
22—SSH
23—Telnet
25—SMTP
53—DNS
80—HTTP
110—POP3
123—NTP
139—NETBIOS
143—IMAP
161 and 162—SNMP
389—LDAP
443—HTTPS
465—SMTPS
514—SYSLOG
636—LDAPS
993—IMAPS
995—POP3S
IPv6
alates 90-ndate keskelt, aga 2015. aastaks kasutas seda ikka vaid 7% võrkudest
8 neljakohalist 16-ndnumbrit, koolonid vahel
NAT on aeglustanud v6 levikut, võimaldades alamvõrkudes privaataadresse dubleerida
Väljapakutud eelised:
- ruutimine olevat parem kui v4-s
- turvalisus sisse ehitatud
- automaatkonfimine (jama staatilise vs dünaamilisega jääb ära)
- paremad paketipäised
lo (loopback)
ifconfig
- ether/HWaddr - MAC
- inet - IP
- broadcast
- netmask
uuem käsk sama asja vaatamiseks on ip - vähem ülevaatlik, aga rohkem võimalusi
Võrguliidesed Red Hatis
utiliit system-config-network, konf /etc/sysconfig/network-scripts, näiteks /etc/sysconfig/network-scripts/ifcfg-eth0
RH konfinäide:
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static # DHCP puhul on siin dhcp
IPADDR=192.168.1.73
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
taaskäivitus: service network restart
Võrguliidesed Debianis
utiliit system-config-networking või netcardconfig, konf /etc/network/interfaces
Debiani konfinäide:
- /etc/network/interfaces -- configuration file for
ifup(8), ifdown(8)
- The loopback interface
- automatically added when upgrading
auto lo eth0
iface lo inet loopback
iface eth0 inet static # või dhcp
address 192.168.15.5
netmask 255.255.255.0
network 192.168.15.0
broadcast 192.168.15.255
gateway 192.168.15.2
taaskäivitus: /etc/init.d/networking restart
Lüüsi näitab route või netstat -r (sama pilt!)
Lüüsi lisamine käsitsi: route add default gw 10.0.0.1 - PEAB TEADMA!
/etc/nsswitch.conf - kust otsitakse nime ja mis järjekorras
- files - kohalik fail
- dns - nimeserver
- nis - kohtvõrgust
N:
hosts: files dns
networks: files
/etc/hosts - mis IP-d on selles masinas konfitud ja mis nimele vastavad
127.0.0.1 localhost.localdomain localhost
/etc/resolv.conf - nimeserverid
nameserver 194.126.101.34
nameserver 194.126.115.18
Tavaline järjekord - nsswitch, hosts, resolv
/etc/hostname - täielik hostinimi
Utiliidid:
- ifconfig - IP ja mask
- ifup ja ifdown
- ip - peaks tulevikus asendama pea kõiki teisi siinseid
- route - ruuting ja lüüs
- dhcpcd, dhclient ja pump - DHCP klienttarkvara
- host, nslookup, dig - nimeserveriga suhtlemine
- hostname
- netstat - erinev võrguinfo
- ping
- traceroute
- tcpdump - paketisalvestus
ifconfig kasutamine seadmiseks:
ifconfig eth0 192.168.33.2 netmask 255.255.255.0 up
ifconfig -a näitab ka neid liideseid, mis ei tööta
DOS-ründe tõrjumine route-iga - route add 10.1.1.69 lo - suunab pahalase liikluse loopbacki, pahalane näeb timeouti
dhcpcd
/sbin/dhcpcd, client daemon
dhcpcd -k - pehme restart (SIGHUP)
dhclient ja pump - DHCP-aadressi saamiseks
getent:
kakk@aragorn:~$ getent hosts
127.0.0.1 localhost
127.0.1.1 aragorn
127.0.0.1 ip6-localhost ip6-loopback
kakk@aragorn:~$ getent hosts kakupesa.net
80.235.40.79 kakupesa.net
kakk@aragorn:~$
netstat (tsitaat):
--->
-t—Shows TCP statistics
-r—Shows the routing table
-a—Shows all the sockets on all functioning interfaces
-c—Shows a refreshing (every 1 second) view of statistics for usage
-p—Shows the name and PID of the program related to each socket (very useful!)
<---
-s - statistika
ping6 - ping IPv6 jaoks
traceroute6
Turvalisus
su
- või -l - avab uue kesta (kui kasutajat ei määrata, eeldatakse root-i)
Susel on sux-käsk - graafiline su
sudo, /etc/sudoers ja /etc/sudoers.d/ , visudo redigeerib sudoers-i (täiendav veakontroll võrreldes tavaredaktoriga)
sudoers täisõigused: kasutajanimi ALL=(ALL) ALL
Käitatavad teenused
- alati töötavad
- nõudmisel
- välja lülitatud (ISDN või modem)
Nõudmisel teenused - inetd, xinetd
/etc/inetd.conf, /etc/xinetd.conf => /etc/xinetd.d/
teenuste näited: finger, imap, *talk, rlogin, telnet
TCP wrappers: hosts.allow, hosts.deny
ALL
service
daemon, daemon
except on ka lubatud
SUID, SGID - omaniku/omanikugrupi õigustes
Sticky - ei luba mitteomanikel kataloogist faile kustutada
Eribittide otsimine find-iga: find / -user root -perm +7000
GPG
gpg --gen-key
gpg --list-keys
uue võtmepaari loomine:
ssh-keygen -b 1024 -t rsa
ssh
sshd
scp
ssh-agent - programm, mis annab võtmetega ligipääsu (ilma paroolita)
ssh-add
/etc/ssh/ssh_knowh_hosts ja ~/.ssh/known_hosts
scp -r root@remote1:/data root@remote2:/data
KOGU LUGU!