Erinevus lehekülje "Kasutajakeskkond Debianis" redaktsioonide vahel

Allikas: Kuutõrvaja
(Kasutajakeskkond)
(ulimit - ressursipiirangute kehtestamine)
 
(ei näidata sama kasutaja 32 vahepealset redaktsiooni)
8. rida: 8. rida:
 
Üldiselt iga arvutis töötav protsess töötab omas keskkonnas, kus tema tööd mõjutavad süsteemsed ressursipiirangud ja keskkonnamuutujad, kusjuures vaikimisi pärib protsessi poolt käivitatud protsess oma eelkäija keskkonna, st talle rakendatakse samu piiranguid ja keskkonnamuutujatel on samasugused väärtused.
 
Üldiselt iga arvutis töötav protsess töötab omas keskkonnas, kus tema tööd mõjutavad süsteemsed ressursipiirangud ja keskkonnamuutujad, kusjuures vaikimisi pärib protsessi poolt käivitatud protsess oma eelkäija keskkonna, st talle rakendatakse samu piiranguid ja keskkonnamuutujatel on samasugused väärtused.
  
Protsessi keskkonna mõttes ei ole põhimõtteliselt vahet, kas protsess on käivitatud süsteemi alglaadimise käigus või protsessi on käivitanud süsteemi mingil moel sisse loginud kasutaja, kuid kuna sisseloginud kasutaja puhul tuleb arvesse palju täiendavaid olulisi asjaolusid, mis määravad, milliste omadustage kasutajakeskkond kujuneb, käsitletakse neid kahte juhtumit eraldi.
+
Süsteemis tootavad protsessid võib jagada kaheks selle alusel, kas nad on seotud nö tty terminaliga või mitte
  
Ülidselt on osa kasutajakeskkonna omadustest kasutajale ette antud ning osalt saab kasutaja keskkonna omadusi muuta, nt
+
tty terminaliga mitte seotud protsessid
 +
 
 +
* need käivitatakse tavaliselt süsteemi alglaadimisel
 +
* ps aux väljundis on TTY tulbas väärtus '?'
 +
 
 +
  USER      PID %CPU %MEM    VSZ  RSS TTY      STAT START  TIME COMMAND
 +
  root      2884  0.0  0.0  48864  1184 ?        Ss  May24  0:00 /usr/sbin/ssh
 +
 
 +
tty terminaliga seotud protsessid
 +
 
 +
* need on käivitanud süsteemi terminalilt (nt arvuti füüsiline või serial konsool või ssh'ga seotud pseudo-terminal) sisse loginud kasutaja
 +
* protsessi 0, 1 ja 2 file descriptor'id on seotud terminaliga, st programm ootab vaikimisi sisendit terminalilt ja kirjutab väljundi ja veaväljundi terminalile
 +
* protsessi saab klaviatuurilt Ctrl-C abil lõpetada (mis on samaväärne INT signaali saatmisega)
 +
* TTY tulbas on esitatud nn controlling terminali nimi
 +
 
 +
  USER      PID %CPU %MEM    VSZ  RSS TTY      STAT START  TIME COMMAND
 +
  mart    16002  0.0  0.1  42528  2624 pts/5  Ss+  May29  0:00 ssh mart@10.0.5.8
 +
 
 +
Käesolevas tekstis püütakse selgelt väljendada kumma juhtumiga on tegemist, aga valdavalt käsitletekse ühel või teisel moel terminaliga seotud protsesse.
 +
 
 +
Üldiselt on osa kasutajakeskkonna omadustest kasutajale ette antud ning osalt saab kasutaja keskkonna omadusi muuta, nt
  
 
* tavaliselt kasutaja ei saa muuta oma kasutajanime ja UID väärtust
 
* tavaliselt kasutaja ei saa muuta oma kasutajanime ja UID väärtust
16. rida: 36. rida:
 
* kasutaja saab muuta oma lokaadi määranguid
 
* kasutaja saab muuta oma lokaadi määranguid
  
===Kasutajate haldus===
+
===Süsteemi kasutajate andmebaas===
  
Vaikimisi on andmed süsteemi kasutajate kohta kirjas failides
+
Vaikimisi on andmed süsteemi kasutajate kohta kirjas failides, kusjuures NSS (Name Service Switch) toetab ka muid andmebaase, nt LDAP kataloog)
  
 
* /etc/passwd - kasutajate andmed
 
* /etc/passwd - kasutajate andmed
47. rida: 67. rida:
 
   /etc/skel/.bashrc
 
   /etc/skel/.bashrc
  
Kasutaja süsteemi sisenemise õiguse ajutiseks peatamiseks sobib asendada tema kirjes x hüüumärgiga,
+
===Kasutajakeskkond===
  
enne
+
Arvuti konsoolilt või pseudo-terminalilt (nt ssh programmi abil) bash shelli kasutava kasutaja süsteemi sisse logimisel
  
  mart:x:1000:1000::/home/mart:/bin/bash
+
* rakendatakse vastavalt PAM mooduli login seadistusfailist /etc/pam.d/login või mooduli ssh seadistusfailist /etc/pam.d/ssh tulenevad seadistused ja piirangud (reeglina /etc/security/limits.conf)
 +
* käivitatakse sellele kasutajale failis /etc/passwd seadistatud shell'i protsess login shellina kõnealuse kasutaja õigustes
 +
* algväärtustatakse kasutajakeskkond süsteemse profiili /etc/profile ja nn punktifailide, vaikimisi ainult .profile abil, kusjuures ~/.bash_profile ja ~/.bash_login faile Debianis vaikimisi ei kasutata
 +
* väljalogimisel täidetakse failis ~/.bash_logout kirjas olevad tegevused
  
pärast
+
Peale süsteemi sisselogimist on kasutajal shell nö ees ja ta saab arvutit kasutama hakata, nt kävitada protsesse.
  
  mart:!:1000:1000::/home/mart:/bin/bash
+
====Tuuma parameetrid====
  
===Kasutajakeskkond===
+
Süsteemi tööd kontrollib kõige globaalsemal tasemel ca 700 nn tuuma ehk sysctl parameetrit, süsteem arvutab neile sobivad väärtused alglaadimise ajal, osa sõltub kasutatava füüsilise ressursi olemasolust. Osa parameetreid saab ainult lugeda, aga mitmeid neist saab juurkasutaja muuta vastuvalt vajadusele, nt määratleda, kas arvuti töötab ruuterina või mitte. Süsteemi alglaadimisel loetakse /etc/sysctl.conf faili sisu muudatuste kehtestamiseks. Parasjagu kehtestatud piiranguid saab küsida sysctl utiliidi abil
  
Arvuti konsoolilt või pseudo-terminalilt (nt ssh programmi abil) kasutaja süsteemi sisse logimisel
+
  $ /sbin/sysctl fs.file-max
 +
  fs.file-max = 198467
  
* rakendatakse vastavalt PAM mooduli login seadistusfailist /etc/pam.d/login või mooduli ssh seadistusfailist /etc/pam.d/ssh tulenevad seadistused ja piirangud (reeglina /etc/security/limits.conf)
+
Parameetrite väärtusi saab muuta juurkasutaja öeldes nt
* käivitatakse sellele kasutajale failis /etc/passwd seadistatud shell'i protsess kõnealuse kasutaja õigustes
 
* algväärtustatakse kasutajakeskkond süsteemse profiili /etc/profile ja nn punktifailide, vaikimisi ainult .profile abil, kusjuures ~/.bash_profile ja ~/.bash_login faile Debianis vaikimisi ei kasutata
 
* väljalogimisel täidetakse failis ~/.bash_logout kirjas olevad tegevused
 
  
Seejärel on kasutajal shell nö ees ja ta saab arvutit kasutama hakata, nt kävitada protsesse.
+
  # sysctl -w net.ipv4.ip_forward=0
  
 
====Tekstikonsoolilt sisseloginud kasutaja keskkond====
 
====Tekstikonsoolilt sisseloginud kasutaja keskkond====
76. rida: 97. rida:
 
ja seejärel bash shelli käivitamisel kasutatakse selliseid seadistusfaile
 
ja seejärel bash shelli käivitamisel kasutatakse selliseid seadistusfaile
  
* /etc/profile - globaalne profiilifail, mis määrab PATH ja PS1 väärtused erinevalt tava ja juurkasutajale
+
* /etc/profile - globaalne profiilifail, mis määrab PATH ja PS1 väärtused erinevalt tava-ja juurkasutajale
 
* kasutaja shelli punktifailid - kolmest kasutatakse ainult esimese, mis leidub, faile vaadatakse läbi sellises järjekorras ~/.bash_profile, ~/.bash_login, ~/.profile
 
* kasutaja shelli punktifailid - kolmest kasutatakse ainult esimese, mis leidub, faile vaadatakse läbi sellises järjekorras ~/.bash_profile, ~/.bash_login, ~/.profile
  
96. rida: 117. rida:
 
   _=/usr/bin/env
 
   _=/usr/bin/env
  
Punktifailid on tavalised tekstifailid, ei alga '#!/bin/bash' järgnevusega ja ei ole käivitatavad, tavaliselt on nad ainult kasutajale loetavad ja kirjutatavad.
+
Punktifailid on tavalised tekstifailid, ei alga '#!/bin/bash' järgnevusega ja ei ole iseenesest käivitatavad, tavaliselt on nad ainult kasutajale loetavad ja kirjutatavad, kuid süsteem loeb nende sisu ja käivitab seal esitatud käsud.
  
 
Failide läbivaatamise ja kehtestamise osas on hea veenduda tekitades kõik failid alustuseks ning kirjutades neile sisse
 
Failide läbivaatamise ja kehtestamise osas on hea veenduda tekitades kõik failid alustuseks ning kirjutades neile sisse
203. rida: 224. rida:
 
Asjakohane autentne info on bash manuaalis (man bash) sektsioonis INVOCATION.
 
Asjakohane autentne info on bash manuaalis (man bash) sektsioonis INVOCATION.
  
====su programmi kasutamine====
+
====su ja sux programmide kasutamine====
  
su programmi (switch user) kasutab tavaliselt juurkasutaja selleks, et sooritada tegevusi mõne muu kasutajana. Kui kasutada võtit '-l' või '-', siis jõutakse sellisesse shelli kuhu jõuab kasutaja peale süsteemi sisse logimist.
+
su programmi (switch user) kasutab tavaliselt juurkasutaja selleks, et sooritada tegevusi mõne muu kasutajana. Kui kasutada võtit '-l' või '-', siis asendatakse juurkasutaja shell su programmi argumendina näitadatud kasutaja login shelliga (algväärtustatakse keskkonnamuutujad, asendatakse töökataloog)
  
 +
  # pwd
 +
  /root
 
   # su - mart
 
   # su - mart
   $
+
   $ pwd
 +
  /home/mart
 +
 
 +
sux on su programmi wrapper, mis võimaldab edastada X credentials'isid ja tulemusena saab avanenud shellist kasutada ka X serverit, st avada kasutajana graafilise kasutajaliidesega programme, tarkvara paigaldamised tuleb öelda
 +
 
 +
  # apt-get install sux
  
 
====sudo programmi kasutamine====
 
====sudo programmi kasutamine====
226. rida: 254. rida:
 
===set, env, export ja source kasutamine===
 
===set, env, export ja source kasutamine===
  
Kasutajakeskkonnas on kahesuguseid keskkonnamuutujaid
+
Teatud mööndustega võib üldiselt öelda, et bash shelli kasutava kasutaja keskkonnas on kahesuguseid keskkonnamuutujaid
  
* eksporditavad - nende väärtused antakse edasi keskkonnas käivitatud shellile
+
* lokaalsed - nende abil saab nt lugeda käesoleva shelli omadusi
* mitte-eksporditavad - nende väärtusi ei anta edasi keskkonnas käivitatud shellile
 
  
====env====
+
  $ echo $BASH_VERSION
 +
  3.2.39(1)-release
 +
 
 +
või lihtsalt kasutada neid muutujatena shellis käske andes, nt arhiveerida kataloogid nimedega 1 2 3 4
  
env programmi abil saab anda argumendiks oleva programmile külge keskkonna, nt
+
  $ for i in 1 2 3 4; do tar zcf $i.tgz $i; done
  
  $ env GCC=/usr/bin/gcc-4.1 ./programminimi
+
Oluliseks lokaalse muutuja tunnuseks on, et nende väärtusi ei anta edasi keskkonnas käivitatud shellile.
  
kusjuures ilma argumentideta env esitab nimekirja eksporditud keskkonnamuutujatest.
+
* eksporditavad - need on muude omaduste poolest samasugused keskkonnamuutujad nagu lokaalsedki, aga nende väärtused antakse edasi keskkonnas käivitatud shellile
  
Tundub, et ülaltooduga on samaväärne öelda ja programmi jaoks on olemas keskkonnamuutuja GCC ettenäidatud väärtusega
+
  $ echo $LANG
 +
  C
 +
  $ bash
 +
  $ echo $LANG
 +
  $ C
  
  $ GCC=/usr/bin/gcc-4.1 ./programminimi
+
====env====
  
====export====
+
env programmi abil saab anda argumendiks oleva programmile külge keskkonna, nt
  
export käsu abil saab seada muutuja väärtust käesoleva shelli eksemplari jaoks, kusjuures see antakse edasi alamshellile
+
  $ env GCC=/usr/bin/gcc-4.1 ./programminimi
  
  $ export MUUTUJA_EDASIANTAV=muutujavaartus_edasiantav
+
kusjuures põhiliselt kasutatakse bash shellist käsku env ilma argumentideta eksporditud keskkonnamuutujate ja vastavate väärtuste nimekirja esitamiseks.
  
 
====set====
 
====set====
  
set käsu abil saab seada muutuja väärtust käesoleva shelli eksemplari jaoks, kusjuures seda ei anta edasi alamshellile
+
set käsu abil saab seada lokaalsete muutuja väärtust käesoleva shelli eksemplari jaoks, kusjuures seda ei anta edasi alamshellile
  
 
   $ set MUUTUJA_LOKAALNE=muutujavaartus_lokaalne
 
   $ set MUUTUJA_LOKAALNE=muutujavaartus_lokaalne
264. rida: 298. rida:
  
 
   $ unset MUUTUJA_LOKAALNE
 
   $ unset MUUTUJA_LOKAALNE
 +
 +
Üheks praktiliseks juhtumiks on nt kompileerimisel kompilaatori versiooni valimine
 +
 +
  $ GCC=/usr/bin/gcc-4.1 make
 +
 +
====export====
 +
 +
export käsu abil saab seada muutuja väärtust käesoleva shelli eksemplari jaoks, kusjuures see antakse edasi alamshellile. Sellise omadusega muutujat saab moodustada kahe sammuna
 +
 +
  $ set MUUTUJA_EDASIANTAV=muutujavaartus_edasiantav
 +
  $ export MUUTUJA_EDASIANTAV
 +
 +
või ühe sammuna
 +
 +
  $ export MUUTUJA_EDASIANTAV=muutujavaartus_edasiantav
 +
 +
Kuna tegu on küll eksporditava keskkonnamuutujaga, aga siiski keskkonnamuutujaga, saab teda mälust kustutada öeles
 +
 +
$ unset MUUTUJA_EDASIANTAV
  
 
====source====
 
====source====
  
source käsu abil saab täita tekstifailis sisalduvad käsud käesolevas shellis, tavaliselt kasutatakse seda muutujate väärtuste ja funktsioonide kirjelduste shelli sisselugemiseks
+
source käsu abil saab täita tekstifailis sisalduvad käsud käesolevas shellis, tavaliselt kasutatakse seda muutujate väärtuste ja funktsioonide kirjelduste käesolevasse shelli sisselugemiseks
  
 
   $ source failinimi.src
 
   $ source failinimi.src
311. rida: 364. rida:
 
* http://www.debian-administration.org/articles/31
 
* http://www.debian-administration.org/articles/31
  
===Ressursipiirangute kehtestamine===
+
===ulimit - ressursipiirangute kehtestamine===
  
 
Kasutaja ressursipiirangud on määratud /etc/security/limits.conf faili sisuga, kasutaja jaoks nt sellised ühes süsteemis vaikimisi juhtumil
 
Kasutaja ressursipiirangud on määratud /etc/security/limits.conf faili sisuga, kasutaja jaoks nt sellised ühes süsteemis vaikimisi juhtumil
332. rida: 385. rida:
 
   virtual memory          (kbytes, -v) unlimited
 
   virtual memory          (kbytes, -v) unlimited
 
   file locks                      (-x) unlimited
 
   file locks                      (-x) unlimited
 +
 +
kus
 +
 +
* core file size 0 - core faile ei salvestata
 +
* open files 1024 - ühe protsessi poolt samaaegselt avada lubatud failide arv
 +
* max user processes - operatsioonisüsteemis kasutajale lubatud samaaegselt töötavate protsesside arv
  
 
Nt konkreetse kasutaja jaoks saab süsteemselt piirangu seada kasutades limits.conf failis ridu
 
Nt konkreetse kasutaja jaoks saab süsteemselt piirangu seada kasutades limits.conf failis ridu
337. rida: 396. rida:
 
   priit  hard    nproc  20
 
   priit  hard    nproc  20
 
   priit  hard    nofile  100
 
   priit  hard    nofile  100
 +
 +
Töötava protsessi ulimit väärtusi saab küsida /proc protsessi kataloogist, nt
 +
 +
# cat /proc/9387/limits
 +
Limit                    Soft Limit          Hard Limit          Units   
 +
Max cpu time              unlimited            unlimited            ms       
 +
Max file size            unlimited            unlimited            bytes   
 +
Max data size            unlimited            unlimited            bytes   
 +
...
 +
 +
Selleks, et ühe või teise programmi jaoks limits.conf kehtestuks, peab olema ta vastavas PAM moodulis kasutusel, nt su puhul peab /etc/pam.d/su sisaldama muu hulgas rida
 +
 +
session    required  pam_limits.so
  
 
===Bash shell kasutamine===
 
===Bash shell kasutamine===
379. rida: 451. rida:
 
     . ~/.bash_aliases
 
     . ~/.bash_aliases
 
   fi
 
   fi
 +
 +
===Programmide käivitamine===
 +
 +
Kui programmi iseloom on selline, et ta jääb nö niisama terminalil käima, siis sobib teda käivitada start-stop-daemon abil, nii
 +
 +
  # start-stop-daemon -v -m -b --start --pidfile /tmp/tcpdump.pid  \
 +
    --startas /usr/sbin/tcpdump -- -w /tmp/log.log host 1.1.1.1
 +
 +
ja seisata nii
 +
 +
  # start-stop-daemon -v --stop --pidfile /tmp/tcpdump.pid
 +
 +
===Süsteemsed kasutajad===
 +
 +
TODO
  
 
===Kasulikud lisamaterjalid===
 
===Kasulikud lisamaterjalid===
  
 
* http://wiki.debian.org/DotFiles
 
* http://wiki.debian.org/DotFiles

Viimane redaktsioon: 24. jaanuar 2013, kell 21:24

Sissejuhatus

Kasutajakeskkonna (ingl. k. user environment) moodustavad need tingimused ja piirangud, mis võimaldavad kasutajal operatsioonisüsteemi kasutada ning rakenduvad kasutaja protsessidele. Kasutajakeskkonna määratlevad

  • süsteemsed ressursipiirangud (ingl. k. resource limits) - määravad kui palju süsteemi ressurssi on kasutajal võimalik kasutada, nt kui palju protsesse saab kasutaja samaaegselt käivitada või kui palju on kasutajal kasutada kettaruumi
  • keskkonnamuutujad - keskkonnamuutujate abil saab kasutaja poolt käivitatavaid programme sh shelli protsessi ennast juhtida, nt määrata lokaadi omadusi või bash history suuruse

Üldiselt iga arvutis töötav protsess töötab omas keskkonnas, kus tema tööd mõjutavad süsteemsed ressursipiirangud ja keskkonnamuutujad, kusjuures vaikimisi pärib protsessi poolt käivitatud protsess oma eelkäija keskkonna, st talle rakendatakse samu piiranguid ja keskkonnamuutujatel on samasugused väärtused.

Süsteemis tootavad protsessid võib jagada kaheks selle alusel, kas nad on seotud nö tty terminaliga või mitte

tty terminaliga mitte seotud protsessid

  • need käivitatakse tavaliselt süsteemi alglaadimisel
  • ps aux väljundis on TTY tulbas väärtus '?'
 USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
 root      2884  0.0  0.0  48864  1184 ?        Ss   May24   0:00 /usr/sbin/ssh

tty terminaliga seotud protsessid

  • need on käivitanud süsteemi terminalilt (nt arvuti füüsiline või serial konsool või ssh'ga seotud pseudo-terminal) sisse loginud kasutaja
  • protsessi 0, 1 ja 2 file descriptor'id on seotud terminaliga, st programm ootab vaikimisi sisendit terminalilt ja kirjutab väljundi ja veaväljundi terminalile
  • protsessi saab klaviatuurilt Ctrl-C abil lõpetada (mis on samaväärne INT signaali saatmisega)
  • TTY tulbas on esitatud nn controlling terminali nimi
 USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
 mart     16002  0.0  0.1  42528  2624 pts/5   Ss+  May29   0:00 ssh mart@10.0.5.8

Käesolevas tekstis püütakse selgelt väljendada kumma juhtumiga on tegemist, aga valdavalt käsitletekse ühel või teisel moel terminaliga seotud protsesse.

Üldiselt on osa kasutajakeskkonna omadustest kasutajale ette antud ning osalt saab kasutaja keskkonna omadusi muuta, nt

  • tavaliselt kasutaja ei saa muuta oma kasutajanime ja UID väärtust
  • kasutaja ei suurendada arvu, mis määrab kui palju tema käivitatud protsess saab samaaegselt faile avada, aga ta saab seda arvu vähendada
  • kasutaja saab muuta oma lokaadi määranguid

Süsteemi kasutajate andmebaas

Vaikimisi on andmed süsteemi kasutajate kohta kirjas failides, kusjuures NSS (Name Service Switch) toetab ka muid andmebaase, nt LDAP kataloog)

  • /etc/passwd - kasutajate andmed
  • /etc/group - gruppide kirjeldused
  • /etc/shadow - paroolide krüptogrammid

Kasutaja moodustamiseks võib redigeerida tavalise tekstieditoriga faile /etc/passwd, /etc/group ja /etc/shadow aga sobivam on kasutada programme groupadd ja useradd, nt nii

 # groupadd mart
 # useradd -g mart -m -d /home/mart -s /bin/bash mart

Ning omistada kasutajale parool

 # passwd mart

Tulemusena lisatakse kasutaja andme mainitud kolme faili

 # grep mart /etc/passwd /etc/group /etc/shadow
 /etc/passwd:mart:x:1000:1000::/home/mart:/bin/bash
 /etc/group:mart:x:1000:
 /etc/shadow:mart:$1$PvykLyXa$AxhjUndHit.WIcheFQoEI.:14114:0:99999:7:::

ja moodustatakse kasuta kasutaja kodukataloog /home/mart kuhu kopeeritakse failid kataloogis /etc/skel, vaikimisi

 # find /etc/skel -type f
 /etc/skel/.bash_logout
 /etc/skel/.profile
 /etc/skel/.bashrc

Kasutajakeskkond

Arvuti konsoolilt või pseudo-terminalilt (nt ssh programmi abil) bash shelli kasutava kasutaja süsteemi sisse logimisel

  • rakendatakse vastavalt PAM mooduli login seadistusfailist /etc/pam.d/login või mooduli ssh seadistusfailist /etc/pam.d/ssh tulenevad seadistused ja piirangud (reeglina /etc/security/limits.conf)
  • käivitatakse sellele kasutajale failis /etc/passwd seadistatud shell'i protsess login shellina kõnealuse kasutaja õigustes
  • algväärtustatakse kasutajakeskkond süsteemse profiili /etc/profile ja nn punktifailide, vaikimisi ainult .profile abil, kusjuures ~/.bash_profile ja ~/.bash_login faile Debianis vaikimisi ei kasutata
  • väljalogimisel täidetakse failis ~/.bash_logout kirjas olevad tegevused

Peale süsteemi sisselogimist on kasutajal shell nö ees ja ta saab arvutit kasutama hakata, nt kävitada protsesse.

Tuuma parameetrid

Süsteemi tööd kontrollib kõige globaalsemal tasemel ca 700 nn tuuma ehk sysctl parameetrit, süsteem arvutab neile sobivad väärtused alglaadimise ajal, osa sõltub kasutatava füüsilise ressursi olemasolust. Osa parameetreid saab ainult lugeda, aga mitmeid neist saab juurkasutaja muuta vastuvalt vajadusele, nt määratleda, kas arvuti töötab ruuterina või mitte. Süsteemi alglaadimisel loetakse /etc/sysctl.conf faili sisu muudatuste kehtestamiseks. Parasjagu kehtestatud piiranguid saab küsida sysctl utiliidi abil

 $ /sbin/sysctl fs.file-max
 fs.file-max = 198467

Parameetrite väärtusi saab muuta juurkasutaja öeldes nt

 # sysctl -w net.ipv4.ip_forward=0

Tekstikonsoolilt sisseloginud kasutaja keskkond

Arvuti tekstikonsoolilt sh serial konsoolilt sisse logides esmalt täidetakse PAM login mooduli seadistusfailis /etc/pam.d/login kirjeldatud tegevused, vaikimisi

  • /etc/security/limits.conf - seadistatakse globaalsed ressursipiirangud

ja seejärel bash shelli käivitamisel kasutatakse selliseid seadistusfaile

  • /etc/profile - globaalne profiilifail, mis määrab PATH ja PS1 väärtused erinevalt tava-ja juurkasutajale
  • kasutaja shelli punktifailid - kolmest kasutatakse ainult esimese, mis leidub, faile vaadatakse läbi sellises järjekorras ~/.bash_profile, ~/.bash_login, ~/.profile

Vaikimisi on kasutaja jaoks kirjeldatud sellised keskkonnamuutujad

 $ env
 SHELL=/bin/bash
 TERM=vt100
 HUSHLOGIN=FALSE
 USER=priit
 LS_COLORS=no=00:fi=00:di=01;...
 MAIL=/var/mail/priit
 PATH=/usr/local/bin:/usr/bin:/bin:/usr/games
 PWD=/home/priit
 HISTCONTROL=ignoreboth
 SHLVL=1
 HOME=/home/priit
 LOGNAME=priit
 _=/usr/bin/env

Punktifailid on tavalised tekstifailid, ei alga '#!/bin/bash' järgnevusega ja ei ole iseenesest käivitatavad, tavaliselt on nad ainult kasutajale loetavad ja kirjutatavad, kuid süsteem loeb nende sisu ja käivitab seal esitatud käsud.

Failide läbivaatamise ja kehtestamise osas on hea veenduda tekitades kõik failid alustuseks ning kirjutades neile sisse

 $ cat .bash_profile
 PUNKT_BASH_PROFILE_ON_OLEMAS=punkt_bash_profile_on_olemas
 $ cat .bash_login
 PUNKT_BASH_LOGIN_ON_OLEMAS=punkt_bash_login_on_olemas
 $ cat .profile
 PUNKT_PROFILE_ON_OLEMAS=punkt_profile_on_olemas

Ning seejärel sisse logides on käsuga env näha, millised punktifaile on süsteem tegelikult kasutanud. Sarnaselt saab stat programmiga kaudselt kontrollida, milliseid faile on kasutatud.

Kui kasutaja soovib ise ulimit väärtusi muuta, siis seda sobib teha .bashrc failist lisades nt faili lõppu read

 ulimit -n 80

Näiteks küsides arvutilt kasutaja login shelli protsessile 17731 vastavaid andmed, sh keskkonnamuutujaid öeldakse (miinus märk bash ees tähistab ajalooliselt asjalolu, et tegu on login shelliga)

 $ ps e -p 17731
 PID TTY      STAT   TIME COMMAND
 17731 ttyS1    S+     0:00 -bash TERM=vt100 HOME=/home/priit SHELL=/bin/bash USER=priit\
   LOGNAME=priit PATH=/usr/local/bin:/usr/bin:/bin:/usr/games MAIL=/var/mail/priit HUSHLOGIN=FALSE

Sama protsess paistab w käsu väljundis selliselt

 # w
 16:40:39 up 7 days,  1:35,  3 users,  load average: 0.00, 0.00, 0.00
 USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
 priit    ttyS1    -                12:48    2:11m  0.28s  0.28s -bash
 ...

Kuna tegu on login shelli kasutusjuhuga, siis väljalogimisel täidetakse failis ~/.bash_logout kirjas olevad tegevused.

SSH abil pseudo-terminalilt sisseloginud kasutaja keskkond

Arvutisse pseudo-terminalilt sisse logides, nt ssh kliendiga, esmalt täidetakse PAM ssh mooduli seadistusfailis /etc/pam.d/ssh kirjeldatud tegevused, vaikimisi

  • /etc/environment - vaikimisi ei ole kasutuses, fail on tühi
  • /etc/security/pam_env.conf - vaikimisi ei ole kasutuses, fail on tühi
  • /etc/default/locale - 'dpkg-reconfigure locale' seadistab failile sisu, nt rea 'LANG=et_EE.UTF-8'
  • /etc/security/limits.conf - seadistatakse globaalsed ressursipiirangud

ja seejärel bash shelli käivitamisel kasutatakse selliseid seadistusfaile

  • /etc/profile - globaalne profiilifail, mis määrab PATH ja PS1 väärtused erinevalt tava ja juurkasutajale
  • kasutaja shelli punktifailid - kolmest kasutatakse ainult esimese, mis leidub, faile vaadatakse läbi sellises järjekorras ~/.bash_profile, ~/.bash_login, ~/.profile

Vaikimisi on ssh puhul oluline tähele panna, et tuuakse kaasa LANG muutuja ning moodustatakse veel mõned iseloomulikud muutujad

 $ env
 TERM=xterm
 SHELL=/bin/bash
 SSH_CLIENT=192.168.10.10 50602 22
 SSH_TTY=/dev/pts/1
 USER=priit
 LS_COLORS=no=00:fi=00:...
 MAIL=/var/mail/priit
 PATH=/usr/local/bin:/usr/bin:/bin:/usr/games
 PWD=/home/priit
 LANG=hiinakeel
 HISTCONTROL=ignoreboth
 SHLVL=1
 HOME=/home/priit
 LOGNAME=priit
 SSH_CONNECTION=192.168.10.10 50602 192.168.10.250 22
 DISPLAY=localhost:11.0
 _=/usr/bin/env

Kuna tegu on login shelli kasutusjuhuga, siis väljalogimisel täidetakse failis ~/.bash_logout kirjas olevad tegevused.

Mitte-login shelli kasutamine

Mitte-login shelli kasutamine tähendab, et bash käivitatakse, aga see ei toimu seoses süsteemi sisselogimisega, sellisel juhul on kaks võimalust

  • mitte-login shelli kasutamine interaktiivses režiimis - nt kasutaja käivitab shellis olles uuesti shelli, st öeldes
 $ echo $SHLVL
 1
 $ bash
 $ echo $SHLVL
 2

Kasutaja nn mitte-login shelli (ingl. k. non-login shell) puhul päritakse töötavalt shellilt enamus kasutajakeskkonna omadusi ning kasutatakse /etc/bash.bashrc ja .bashrc uue shelli väärtustamiseks. Ei kasutata PAM moodulite seadistusi ega /etc/profile ega ~/.profile faile.

Selleks, et login ja mitte-login shelli keskkond oleks sarnane loetakse ~/.profile faili lõpus sisse ~/.bashrc sisu.

  • mitte-login shelli kasutamine mitte-interaktiivses režiimis - nt kasutaja käivitab shell skripti moodustades faili sisuga
 $ cat skript.sh
 !#/bin/bash
 echo olen skript
 $ chmod 0755 skript.sh
 $ ./shript.sh
 olen skript

Mitte-login shelli kasutamisel mitte-interaktiivselt puhul päritakse töötavalt shellilt enamus kasutajakeskkonna omadusi, kuid ei kasutata /etc/bash.bashrc ega ~/.bashrc faile. Keskkonnamuutuja BASH_ENV abil saab viidata failile, mis nö source'itakse

 $ cat bash_env.src
 echo olen BASH_ENV muutuja poolt viidatud faili sisu
 $ export BASH_ENV=/home/mart/bash_env.src
 $ ./skript.sh
 olen BASH_ENV muutuja poolt viidatud faili sisu
 olen skript

Asjakohane autentne info on bash manuaalis (man bash) sektsioonis INVOCATION.

su ja sux programmide kasutamine

su programmi (switch user) kasutab tavaliselt juurkasutaja selleks, et sooritada tegevusi mõne muu kasutajana. Kui kasutada võtit '-l' või '-', siis asendatakse juurkasutaja shell su programmi argumendina näitadatud kasutaja login shelliga (algväärtustatakse keskkonnamuutujad, asendatakse töökataloog)

 # pwd
 /root
 # su - mart
 $ pwd
 /home/mart

sux on su programmi wrapper, mis võimaldab edastada X credentials'isid ja tulemusena saab avanenud shellist kasutada ka X serverit, st avada kasutajana graafilise kasutajaliidesega programme, tarkvara paigaldamised tuleb öelda

 # apt-get install sux

sudo programmi kasutamine

TODO

Graafiliselt konsoolilt sisseloginud kasutaja keskkond

Arvuti graafiliselt konsoolilt sisse logides kasutatakse selliseid seadistusfaile

  • TODO

Süsteemi alglaadimise käigus käivitatud protsessi kasutajakeskkond

TODO

set, env, export ja source kasutamine

Teatud mööndustega võib üldiselt öelda, et bash shelli kasutava kasutaja keskkonnas on kahesuguseid keskkonnamuutujaid

  • lokaalsed - nende abil saab nt lugeda käesoleva shelli omadusi
 $ echo $BASH_VERSION
 3.2.39(1)-release

või lihtsalt kasutada neid muutujatena shellis käske andes, nt arhiveerida kataloogid nimedega 1 2 3 4

 $ for i in 1 2 3 4; do tar zcf $i.tgz $i; done

Oluliseks lokaalse muutuja tunnuseks on, et nende väärtusi ei anta edasi keskkonnas käivitatud shellile.

  • eksporditavad - need on muude omaduste poolest samasugused keskkonnamuutujad nagu lokaalsedki, aga nende väärtused antakse edasi keskkonnas käivitatud shellile
 $ echo $LANG
 C
 $ bash
 $ echo $LANG
 $ C

env

env programmi abil saab anda argumendiks oleva programmile külge keskkonna, nt

 $ env GCC=/usr/bin/gcc-4.1 ./programminimi

kusjuures põhiliselt kasutatakse bash shellist käsku env ilma argumentideta eksporditud keskkonnamuutujate ja vastavate väärtuste nimekirja esitamiseks.

set

set käsu abil saab seada lokaalsete muutuja väärtust käesoleva shelli eksemplari jaoks, kusjuures seda ei anta edasi alamshellile

 $ set MUUTUJA_LOKAALNE=muutujavaartus_lokaalne

kujuures ilma argumentidega set käsk esitab kõik käesolevas shellis kirjeldatud muutujad.

Samaväärne on öelda

 $ MUUTUJA_LOKAALNE=muutujavaartus_lokaalne

unset abil saab eemaldada set või export abil seadistatud muutujate väärtusi

 $ unset MUUTUJA_LOKAALNE

Üheks praktiliseks juhtumiks on nt kompileerimisel kompilaatori versiooni valimine

 $ GCC=/usr/bin/gcc-4.1 make

export

export käsu abil saab seada muutuja väärtust käesoleva shelli eksemplari jaoks, kusjuures see antakse edasi alamshellile. Sellise omadusega muutujat saab moodustada kahe sammuna

 $ set MUUTUJA_EDASIANTAV=muutujavaartus_edasiantav
 $ export MUUTUJA_EDASIANTAV

või ühe sammuna

 $ export MUUTUJA_EDASIANTAV=muutujavaartus_edasiantav

Kuna tegu on küll eksporditava keskkonnamuutujaga, aga siiski keskkonnamuutujaga, saab teda mälust kustutada öeles

$ unset MUUTUJA_EDASIANTAV

source

source käsu abil saab täita tekstifailis sisalduvad käsud käesolevas shellis, tavaliselt kasutatakse seda muutujate väärtuste ja funktsioonide kirjelduste käesolevasse shelli sisselugemiseks

 $ source failinimi.src

Samaväärne on öelda

 $ . ./failinimi.src

umask

umask määrab, millised loabitid on vaikimisi moodustataval failil. Vaikimisi on moodustatav fail loabittidega 0644 ja parasjagu kehtivat umask väärtust saab küsida öeldes

 $ umask 
 0022
 $ umask -S
 u=rwx,g=rx,o=rx

Globaalne umask seadistatakse failis /etc/profile.

Bash completion

Keerukama bash completioni kasutamiseks kui niisama käsu lõpunikirjutamine peab süsteemis olema pakett bash-completion, kusjuures vaikimisi on see paigaldatud. Nt võimaldab bash-completion tarkvara lõpetada käsu argumente

  • sisestades 'cd tühik-tab' esitatakse nimekirja käesolevas kataloogis olevatest alamkataloogidest
  • sisestades 'rpm2cpio-tühik-tab' esitatakse nimekirja .rpm failidest
  • sisestades 'gunzip-tühik-tab' esitatakse nimekiri .gz failidest

Completion on laiendatav, tavaliselt paketid lisavad laiendusi kataloogi /etc/bash_completion.d, nt Subversion

 # dpkg -S /etc/bash_completion.d/subversion
 subversion: /etc/bash_completion.d/subversion

Subversioni puhul esitatakse tulemusena 'svn-tühik' sisestamisel nimekiri võimalikest nö esimestest svn argumentidest.

Probleemid

Kui Lenny puhul lisada kasutaja ilma shelli näitamata, siis määratakse kasutaja shelliks /bin/sh. Bash completioni iseärasuste tõttu saab /bin/sh kasutav kasutaja valides nt 'cd-tühik' sellise veateate, ' ' vahel tegelikult tühikut pole

 $ cd -sh: <( compgen -d -- ' ' ): No such file or directory

Probleemi lahendab kasutaja shellina /bin/bash kasutamine. Kusjuures juurkasutaja shell on vaikimisi /bin/bash.

ulimit - ressursipiirangute kehtestamine

Kasutaja ressursipiirangud on määratud /etc/security/limits.conf faili sisuga, kasutaja jaoks nt sellised ühes süsteemis vaikimisi juhtumil

 $ ulimit -a
 core file size          (blocks, -c) 0
 data seg size           (kbytes, -d) unlimited
 scheduling priority             (-e) 0
 file size               (blocks, -f) unlimited
 pending signals                 (-i) 4095
 max locked memory       (kbytes, -l) 32
 max memory size         (kbytes, -m) unlimited
 open files                      (-n) 1024
 pipe size            (512 bytes, -p) 8
 POSIX message queues     (bytes, -q) 819200
 real-time priority              (-r) 0
 stack size              (kbytes, -s) 8192
 cpu time               (seconds, -t) unlimited
 max user processes              (-u) 4095
 virtual memory          (kbytes, -v) unlimited
 file locks                      (-x) unlimited

kus

  • core file size 0 - core faile ei salvestata
  • open files 1024 - ühe protsessi poolt samaaegselt avada lubatud failide arv
  • max user processes - operatsioonisüsteemis kasutajale lubatud samaaegselt töötavate protsesside arv

Nt konkreetse kasutaja jaoks saab süsteemselt piirangu seada kasutades limits.conf failis ridu

 priit   hard    nproc   20
 priit   hard    nofile  100

Töötava protsessi ulimit väärtusi saab küsida /proc protsessi kataloogist, nt

# cat /proc/9387/limits 
Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            ms        
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
...

Selleks, et ühe või teise programmi jaoks limits.conf kehtestuks, peab olema ta vastavas PAM moodulis kasutusel, nt su puhul peab /etc/pam.d/su sisaldama muu hulgas rida

session    required   pam_limits.so

Bash shell kasutamine

Tõenäolselt enamasti leiab bash shelli kasutamine aset Xterm programmi aknas. Lisaks ilmsele on abiks shortcut kombinatsioonide kasutamine

  • Ctrl-D - ütleb exit, st logib välja kui tegu on nn login-shelliga
  • Ctrl-A - viib kursori rea algusse
  • Ctrl-E - viib kursori rea lõppu

Prompt

Prompti ehk kasutaja käsurea alguses oleva teksti määrab keskkonnamuutuja PS1 väärtus, vaikimisi on see kirjeldatud failis ~/.bashrc sektsioonis

 if [ "$color_prompt" = yes ]; then
   PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
 else
   PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '    
 fi

Aliases

Alias'teks nimetatakse kasutaja enda poolt kirjeldatud järgnevusi, nt kirjeldame ll täitma käsku 'ls -l'

 $ alias ll='ls -l'

Öeldes seejärel ll täidetakse tegelikult käsk 'ls -l'.

Aliase kirjeldus saab eemaldada öeldes

 $ unalias ll

Aliasel on kõrgem prioriteet kui failisüsteemist käivitatud programminimedel, st kui nimed langevad kokku, täidetakse aliasele vastav käsk.

Tavaliselt kirjeldatakse aliased failis ~/.bash_aliases, näitele vastaval juhul peaks seal sisalduma rida

 alias ll='ls -l'

~/.bash_aliases faili kasutamiseks tuleb failis ~/.bashrc eemaldada kommentaarid sektsiooni eest

 if [ -f ~/.bash_aliases ]; then
   . ~/.bash_aliases
 fi

Programmide käivitamine

Kui programmi iseloom on selline, et ta jääb nö niisama terminalil käima, siis sobib teda käivitada start-stop-daemon abil, nii

 # start-stop-daemon -v -m -b --start --pidfile /tmp/tcpdump.pid  \
   --startas /usr/sbin/tcpdump -- -w /tmp/log.log host 1.1.1.1

ja seisata nii

 # start-stop-daemon -v --stop --pidfile /tmp/tcpdump.pid

Süsteemsed kasutajad

TODO

Kasulikud lisamaterjalid