ЁЯЧ║я╕П рдзрдбрд╛ 02 тАФ Files, paths рдЖрдгрд┐ permissions: рдЗрдорд╛рд░рддреАрдЪрд╛ рдирдХрд╛рд╢рд╛
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 02 ┬╖ рдкреБрдвреЗ: lesson-03-pipes-redirection
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ02. рдЧреЛрд╖реНрдЯреА рдХреБрдареЗ рдЖрд╣реЗрдд, рддреНрдпрд╛рдВрдирд╛ рдХреБрдареВрдирд╣реА рдирд╛рд╡ рдХрд╕реЗ рджреНрдпрд╛рдпрдЪреЗ, рдЖрдгрд┐ рдХреЛрдг рддреНрдпрд╛ рд╡рд╛рдЪреВ, рдмрджрд▓реВ рдХрд┐рдВрд╡рд╛ рдЪрд╛рд▓рд╡реВ рд╢рдХрддреЗ.
- bin/school.sh тАФ
HERE=рдУрд│: рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдХреБрдареВрди рдмреЛрд▓рд╛рд╡рд▓реЗ рдпрд╛рдЪреА рдкрд░реНрд╡рд╛ рди рдХрд░рдгрд╛рд░реА script
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рд╢рд╛рд│рд╛ рд╣реА рдПрдХ рдЗрдорд╛рд░рдд рдЖрд╣реЗ: рдПрдХ рдореБрдЦреНрдп рджрд╛рд░ (/), рдХреЙрд░рд┐рдбреЙрд░ (folders) рдЖрдгрд┐
рдЦреЛрд▓реНрдпрд╛ (files). рддреБрдореНрд╣реА рдЦреЛрд▓реАрдЪреЗ рдирд╛рд╡ рдореБрдЦреНрдп рджрд╛рд░рд╛рдкрд╛рд╕реВрди рд╕рд╛рдВрдЧреВ рд╢рдХрддрд╛ тАФ absolute
path, /home/you/school/data/register.csv тАФ рдХрд┐рдВрд╡рд╛ рддреБрдореНрд╣реА рдЬрд┐рдереЗ рдЙрднреЗ рдЖрд╣рд╛рдд рддрд┐рдереВрди тАФ
relative path, data/register.csv. рдкреНрд░рддреНрдпреЗрдХ рдЦреЛрд▓реАрд╡рд░ рдПрдХ рдкрд╛рдЯреА рдЕрд╕рддреЗ рдХреА рдХреЛрдг рддреА
рд╡рд╛рдЪреВ рд╢рдХрддреЗ, рддрд┐рдЪреНрдпрд╛рд╡рд░ рд▓рд┐рд╣реВ рд╢рдХрддреЗ, рдХрд┐рдВрд╡рд╛ рдЖрдд рдЬрд╛рдК/рдЪрд╛рд▓рд╡реВ рд╢рдХрддреЗ: owner, рддреНрдпрд╛рдЪрд╛ group,
рдЖрдгрд┐ рдмрд╛рдХреА рд╕рдЧрд│реЗ.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart TD
R["/"] --> H["home/you"] --> S["school/"] --> D["data/register.csv -rw-r--r--"]
S --> B["bin/school.sh -rwxr-xr-x"]
S --> L["lib/log.sh"]
тЭУ рдХрд╛рдп
pwdрдореА рдХреБрдареЗ рдЖрд╣реЗ ┬╖cdрдЬрд╛ ┬╖ls -laрдпрд╛рджреА, рд▓рдкрд▓реЗрд▓реНрдпрд╛.filesрд╕рдХрдЯ ┬╖~home ┬╖.рдЗрдереЗ ┬╖..рд╡рд░ ┬╖*рдПрдХ wildcard рдЬреЛ command рд▓рд╛ рджрд┐рд╕рдгреНрдпрд╛рдЖрдзреАрдЪ shell expand рдХрд░рддреЛ.- Permissions
rwx├Ч (owner, group, others):-rwxr-x---= owner рд╕рдЧрд│реЗ рдХрд░реВ рд╢рдХрддреЛ, group рд╡рд╛рдЪреВ рдЖрдгрд┐ рдЪрд╛рд▓рд╡реВ рд╢рдХрддреЛ, others рдХрд╛рд╣реАрдЪ рдирд╛рд╣реА.chmod +x,chmod 600,chown user:group. - scripts рдЖрдгрд┐ folders рд╕рд╛рдареА
755, files рд╕рд╛рдареА644, secrets рд╕рд╛рдареА600. - рд╕рдЧрд│реЗ рдХрд╛рд╣реА file рдЖрд╣реЗ:
/etcconfig,/var/loglogs,/tmpрдХрдЪреНрдЪреЗ рдХрд╛рдо,/procрдЗрдорд╛рд░рддреАрдЪрд╛ live dashboard,/dev/nullрдХрдЪрд░рд╛рдкреЗрдЯреА. - anchor:
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"тАФ script рдЪрд╛ рд╕реНрд╡рддрдГрдЪрд╛ folder, рдмреЛрд▓рд╛рд╡рдгрд╛рд▒реНрдпрд╛рдЪрд╛cwdрдХрд╛рд╣реАрд╣реА рдЕрд╕реЛ.
ЁЯдФ рдХрд╛
"No such file" рдЖрдгрд┐ "permission denied" рдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА script рдордзрд▓реНрдпрд╛ рджреЛрди рд╕рд░реНрд╡рд╛рдд рдиреЗрд╣рдореАрдЪреНрдпрд╛ errors рдЖрд╣реЗрдд, рдЖрдгрд┐ рджреЛрдиреНрд╣реА рдпрд╛рдЪ рдзрдбреНрдпрд╛рдд рдЖрд╣реЗрдд. рдлрдХреНрдд рдПрдХрд╛рдЪ folder рдордзреВрди рдЪрд╛рд▓рд╡рд▓реНрдпрд╛рд╡рд░ рдЪрд╛рд▓рдгрд╛рд░реА script рдкреВрд░реНрдг рдЭрд╛рд▓реЗрд▓реА рдирд╛рд╣реА.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
school.sh HERE рдХрд╛рдврддреЗ рдЖрдгрд┐ рддреНрдпрд╛рд╡рд░реВрди ../data/register.csv рд▓рд╛ рд╕рдВрджрд░реНрдн рджреЗрддреЗ, рдореНрд╣рдгреВрди
bin/school.sh рдЖрдгрд┐ cd /tmp && /path/to/bin/school.sh рд╕рд╛рд░рдЦреЗрдЪ рд╡рд╛рдЧрддрд╛рдд.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
ls -la bin/ data/ # who may run what
cd /tmp && "$OLDPWD/bin/school.sh" list && cd - # called from elsewhere: still finds the register
cp bin/school.sh /tmp/s.sh && chmod -x /tmp/s.sh && /tmp/s.sh list; echo "exit $?" # permission denied тЖТ 126
chmod 600 data/register.csv && ls -l data/register.csv && chmod 644 data/register.csv
find . -name '*.sh' | sort
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
рдиреЛрдВрджрд╡рд╣реА /tmp рдордзреВрдирд╣реА рджрд┐рд╕рддреЗ; x рдирд╕рд▓реЗрд▓реА copy Permission denied рдЖрдгрд┐ exit 126
рдиреЗ fail рд╣реЛрддреЗ; 600 рдирдВрддрд░ ls -l -rw------- рджрд╛рдЦрд╡рддреЛ.
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
рддреБрдореНрд╣реА рдХреЛрдгрддреНрдпрд╛рд╣реА file рд▓рд╛ рдХреБрдареВрдирд╣реА рдирд╛рд╡ рджреЗрдК рд╢рдХрддрд╛, рддрд┐рдЪреА permission рдкрд╛рдЯреА рд╡рд╛рдЪреВ рд╢рдХрддрд╛, рдЖрдгрд┐ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ files рд╕реНрд╡рддрдГ рд╢реЛрдзрдгрд╛рд░реА script рд▓рд┐рд╣реВ рд╢рдХрддрд╛.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- cron
/рдордзреВрди рдЪрд╛рд▓рд╡рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ script рдордзреНрдпреЗ relative paths. - error рдШрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА
chmod 777. рдЖрддрд╛ рдХреЛрдгреАрд╣реА рддреБрдордЪреА script рдмрджрд▓реВ рд╢рдХрддреЛ. - quotes рд╢рд┐рд╡рд╛рдп filenames рдордзреНрдпреЗ spaces (рдзрдбрд╛ 05) тАФ
rm My Report.txtрдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдирд╕рд▓реЗрд▓реНрдпрд╛ рджреЛрди files рдХрд╛рдврд╛рдпрд▓рд╛ рдЬрд╛рддреЛ рдЖрдгрд┐ рдЬреА рдЖрд╣реЗ рддреА рддрд╢реАрдЪ рд░рд╛рд╣рддреЗ.
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: group рд▓рд╛ рд╡рд╛рдЪрддрд╛ рдпреЗрдгрд╛рд░реА secrets, 644 рд╡рд░ рдЕрд╕рд▓реЗрд▓реА deploy key, image рдордзреНрдпреЗ
xрдирд╕рд▓реЗрд▓реА script тАФ рдкреНрд░рддреНрдпреЗрдХ рдПрдХ рдЦрд░рд╛ incident рдЖрд╣реЗ. ship рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реАls -lрдХрд░рд╛.
тПня╕П рдкреБрдвреЗ
рдзрдбрд╛ 03 тАФ pipes рдЖрдгрд┐ redirection: рдХреЙрд░рд┐рдбреЙрд░, рдЖрдгрд┐ report рд╡ log рдХрдзреАрдЪ рдХрд╛ рдорд┐рд╕рд│реВ рдирдпреЗрдд.