Časť 4
> | výstup do súboru (prepíše existujúci) |
>> | výstup do súboru (pripojí do existujúceho) |
< | vstup zo súboru |
2> | errorový výstup do súboru |
2>> | errorový v ýstup do súboru |
2>&1 | errorový výstup na štandardný výstup |
| | výstup jedného programu na vstup iného |
Príkazy majú parametre a argumenty
Nezačínajú pomlčkou. Väčšinou určujú súbor, nad ktorým sa má vykonať príkaz.
Treba vyriešiť niekoľko otázok:
Rozdelenie používateľov na
root môže všetko a jeho oprávnenia sa nijako nekontrolujú.
Bežní používatelia majú len
nutné minimum oprávnení.
Ako zabezpečiť, že používateľ nepokazí systém?
Keďže všetko v Unixových OS je súbor, tak ku každému súboru je možné nastaviť oprávnenia určujúce:
Ako oddeliť dáta používateľov od systému?
Ako zabezpečiť privátne dáta používateľov?
Používatelia majú vlastné (domovské) adresáre, v ktorých majú svoje súkromné dáta a môžu nastaviť prístup iba pre seba.
Ako rozdeliť oprávnenia pre rôznych používateľov?
Ako efektívne prideľovať/odoberať oprávnenia?
Používateľov je možné zaraďovať do viacerých skupín a oprávnenia je možné nastavovať pre celú skupinu.
Vieme zobraziť pomocou príkazu ls -l
súbor | adresár | ||
---|---|---|---|
r | read | čítanie súboru | vylistovanie obsahu adresára |
w | write | zmena súboru | vytváranie súborov v adresári |
x | execute | spustenie súboru | vstup do adresáru |
Každá skupina oprávnení nastavuje tieto tri atribúty:
Hodnotou atribútu je 0 (nemá právo)
alebo 1 (má právo)
ls -l | vypíše oprávnenia k súborom |
chmod | umožňuje meniť oprávnenia k súborom, ktoré vlastním |
chown | umožňuje zmeniť vlastníka a skupinu pre súbor (môže robiť iba root) |
chgrp | zmení aktívnu skupinu pre používateľa (pod ktorou bude od tej chvíle vytvárať súbory) |
groups | vypíše zoznam skupín, do ktorých používateľ patrí |
chmod potrebuje vedieť:
Dovoľuje meniť atribúty oprávnení pre súbor/adresár
Komu?
u - vlastníkovi
g - skupine
o - ostatným
a - všetkým trom
Pridávame?
+ - pridávame
- - odoberáme
Atribút?
r - právo na čítanie
w - právo na zápis
x - právo na spustenie
Komu?
u - vlastníkovi
g - skupine
o - ostatným
a - všetkým trom
Pridávame?
+ - pridávame
- - odoberáme
Atribút?
r - právo na čítanie
w - právo na zápis
x - právo na spustenie
# odoberieme právo na zápis pre skupinu
chmod g-w súbor
# odoberieme všetky práva pre ostatných
chmod o-r,o-w,o-x súbor
# pridáme právo na vykonanie pre všetkých
chmod a+x súbor
# čítanie a zápis pre vlastníka,
# čítanie pre zvyšok sveta
chmod 644 súbor
# všetky práva pre vlastníka,
# ale iba čítanie obsahu a vstup
# do adresáru pre zvyšok sveta
chmod 755 adresár
# úplne všetko pre úplne všetkých
# (toto nikdy nerobte)
chmod 777 súbor
Pomocou troch čísel vieme naraz špecifikovať úplne všetky oprávnenia pre všetky skupiny
Atribúty sú rozdelené v skupinkách po tri, ich hodnotou môže byť iba 0 alebo 1. Z toho vyplýva, že sa jednoducho dajú reprezentovať ako čísla v osmičkovej sústave
atribúty | binárne | oktálovo |
---|---|---|
--- | 000 | 0 |
--x | 001 | 1 |
-w- | 010 | 2 |
-wx | 011 | 3 |
r-- | 100 | 4 |
r-x | 101 | 5 |
rw- | 110 | 6 |
rwx | 111 | 7 |
Výnimkou sú programy, ktoré majú nastavený SUID alebo SGID bit
SUID/SGID - špeciálny príznak pre "execute" právo, ktoré hovorí, že súbor po spustení bude bežať s oprávneniami vlastníka súboru a/alebo skupiny
ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root ... /usr/bin/sudo
Pod týmto kontom by sme mali byť prihlásení len výnimočne (ideálne vôbec)
Skratka od "substitude user"
Po spustení si vypýta heslo a po jeho správnom zadaní môžeme v danom termináli pracovať pod kontom špecifikovaného používateľa, až kým neskončíme (príkazom exit, CTRL+D, zatvorením okna/tabu terminálu)
V novších systémoch sa nedá zadať samostatne a je potrebné ho spúšťať pomocou sudo
# chcem pracovať ako root
su
# chcem pracovať ako milan
su milan
# na novších systémoch
# chcem pracovať ako root
sudo su
# chcem pracovať ako milan
sudo su milan
Vykoná jeden(!) príkaz ako špecifikovaný používateľ
Používateľ musí byť členom skupiny sudo, alebo mať záznam v súbore /etc/sudoers, aby mohol spustiť tento príkaz.
# spustenie príkazu ako root
sudo vim /etc/hosts
# spustenie príkazu ako user www-data
sudo -u www-data bin/console
Interpreter príkazov, ktoré píšeme do terminálu.
V každom okne/tabe terminálu musí bežať shell, ktorý čaká na príkazy a interpretuje ich
Po zadaní príkazu shell zisťuje, či je príkaz (súbor) spustiteľný.
Spustiteľný binárny formát
Textový súbor
Sharp Bang
#!/bin/bash
COMMAND=$1
SESSION_NAME=hrad
WINDOW_NAMES=(src gatsby deploy)
source ~/.local/share/tmux-functions/tmux-functions.sh
start_project() {
cd ~/projects/perunhq.org/hrad.perunhq.org
start_session_and_open_windows $SESSION_NAME "${WINDOW_NAMES[@]}"
tmux send-keys -t $SESSION_NAME:src "cd web" Enter "nvim" Enter
tmux send-keys -t $SESSION_NAME:gatsby "cd web" Enter "yarn develop" Enter
tmux send-keys -t $SESSION_NAME:deploy "cd deploy" Enter
tmux attach -t $SESSION_NAME:src
}
case "$COMMAND" in
"stop")
tmux kill-session -t $SESSION_NAME
;;
*)
start_project
;;
esac
Konfigurácia
shell | kde je konfiguračný súbor |
---|---|
bash | ~/.bashrc |
zsh | ~/.zshrc |
fish | ~/.config/fish/config.fish |
Príkaz | Význam |
---|---|
env | vypísanie zoznamu a hodnôt |
echo $PREMENNA | vypísanie hodnoty konkrétnej premennej |
PREMENNA=hodnota | priradenie novej hodnoty (bez medzier okolo "=") |
Ovplyvňujú správanie programov.
Sú to premenné, takže ich vieme meniť podľa potreby
$USER
Login aktuálneho používateľa
$PWD
Aktuálny pracovný adresár
$PATH
Cesty, v ktorých bude shell hľadať príkazy
$SHELL
Aktuálny shell (cesta k nemu)
$HOSTNAME
Názov aktuálneho počítača