рд╡рд┐рд╕реНрддреГрдд рд░реВрдкрдорд╛ Bash рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЫ

рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдпреЛ рдкреГрд╖реНрда рдЦреЛрдЬреАрдорд╛ рдлреЗрд▓рд╛ рдкрд╛рд░реНрдиреБрднрдпреЛ рднрдиреЗ, рддрдкрд╛рдИрдВ рд╕рдореНрднрд╡рддрдГ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ bash рдХреЛ рд╕рд╛рде рдХреЗрд╣рд┐ рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрджреИ рд╣реБрдиреБрд╣реБрдиреНрдЫред

рд╕рд╛рдпрдж рддрдкрд╛рдИрдХреЛ рдмрд╛рд╕ рд╡рд╛рддрд╛рд╡рд░рдгрд▓реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдЧрд░рд┐рд░рд╣реЗрдХреЛ рдЫреИрди рд░ рддрдкрд╛рдИрд▓реЗ рдХрд┐рди рдмреБрдЭреНрдиреБрднрдПрдХреЛ рдЫреИрдиред рддрдкрд╛рдИрд▓реЗ рдХрд╛рдо рдирдЧрд░реЗрд╕рдореНрдо рд╡рд┐рднрд┐рдиреНрди рдмрд╛рд╕ рдмреБрдЯ рдлрд╛рдЗрд▓рд╣рд░реВ рд╡рд╛ рдкреНрд░реЛрдлрд╛рдЗрд▓рд╣рд░реВ рд╡рд╛ рд╕рдмреИ рдлрд╛рдЗрд▓рд╣рд░реВрдорд╛ рдЕрдирд┐рдпрдорд┐рдд рд░реВрдкрдорд╛ рдХреЗрд╣рд┐ рдЕрдбреНрдХрд┐рдПрдХреЛ рд╣реБрди рд╕рдХреНрдЫред

рдХреБрдиреИ рдкрдирд┐ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдпрд╕ рдиреЛрдЯрдХреЛ рдмрд┐рдиреНрджреБ рднрдиреЗрдХреЛ bash рд╕реБрд░реБ рдЧрд░реНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ рд╕рдХреЗрд╕рдореНрдо рд╕рд░рд▓ рд░реВрдкрдорд╛ рд░рд╛рдЦреНрдиреБ рд╣реЛ рддрд╛рдХрд┐ рддрдкрд╛рдЗрдБ рд╕рдорд╕реНрдпрд╛рд╣рд░реВрдХреЛ рд╕рд╛рдордирд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рд░реЗрдЦрд╛рдЪрд┐рддреНрд░

рдпреЛ рдлреНрд▓реЛрдЪрд╛рд░реНрдЯрд▓реЗ bash рдЪрд▓рд╛рдЙрдБрджрд╛ рд╕рдмреИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрдХреЛ рд╕рд╛рд░рд╛рдВрд╢ рджрд┐рдиреНрдЫред

рд╡рд┐рд╕реНрддреГрдд рд░реВрдкрдорд╛ Bash рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЫ

рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рднрд╛рдЧрд▓рд╛рдИ рдирдЬрд┐рдХрдмрд╛рдЯ рд╣реЗрд░реМрдВред

рд╢реЗрд▓ рд▓рдЧрдЗрди рдЧрд░реНрдиреЗ рд╣реЛ?

рдкрд╣рд┐рд▓реЗ рддрдкрд╛рдИрдВрд▓реЗ рд▓рдЧрдЗрди рд╢реЗрд▓рдорд╛ рд╣реБрдиреБрд╣реБрдиреНрдЫ рд╡рд╛ рд╣реЛрдЗрди рднрдиреЗрд░ рдЫрдиреМрдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред

рд▓рдЧрдЗрди рд╢реЗрд▓ рддрдкрд╛рдИрдВрд▓реЗ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╕рддреНрд░рдХреЛ рд▓рд╛рдЧрд┐ рд▓рдЧ рдЗрди рдЧрд░реНрджрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдиреБрднрдПрдХреЛ рдкрд╣рд┐рд▓реЛ рд╢реЗрд▓ рд╣реЛред рд▓рдЧрдЗрди рд╢реЗрд▓рд▓рд╛рдИ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рд░ рдкрд╛рд╕рд╡рд░реНрдб рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджреИрдиред рддрдкрд╛рдИрд▓реЗ рд▓рдЧрдЗрди рд╢реЗрд▓рд▓рд╛рдИ рдЭрдгреНрдбрд╛ рдердкреЗрд░ рд╕реБрд░реБ рдЧрд░реНрди рдмрд▓ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ --login рдЬрдм рдмреЛрд▓рд╛рдЗрдиреНрдЫ bash, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐:

bash --login

рд▓рдЧрдЗрди рд╢реЗрд▓рд▓реЗ рдЖрдзрд╛рд░ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗрдЯ рдЕрдк рдЧрд░реНрджрдЫ рдЬрдм рддрдкрд╛рдЗрдБ рдкрд╣рд┐рд▓реЛ рдкрдЯрдХ bash рд╢реЗрд▓ рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫред

рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ?

рддреНрдпрд╕рдкрдЫрд┐ рддрдкрд╛рдЗрдБ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ рдХрд┐ рд╢реЗрд▓ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдЫ рд╡рд╛ рдЫреИрдиред

рдпреЛ рдЪрд░ рдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ PS1 (рдпрд╕рд▓реЗ рдХрдорд╛рдгреНрдб рдЗрдирдкреБрдЯ рдкреНрд░рдХрд╛рд░реНрдп рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрджрдЫ):

рдпрджрд┐ [ "${PS1-}"]; рддреНрдпрд╕рдкрдЫрд┐ echo рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдЕрдиреНрдп рдЗрдХреЛ рдЧреИрд░-рдЕрдиреНрддрд░реНрдХреНрд░рд┐рдпрд╛рддреНрдордХ fi

рд╡рд╛ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН рдпрджрд┐ рд╡рд┐рдХрд▓реНрдк рд╕реЗрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫ -i, рд╡рд┐рд╢реЗрд╖ рд╣рд╛рдЗрдлрди рдЪрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ - bash рдорд╛, рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА:

$echo$-

рдпрджрд┐ рддреНрдпрд╣рд╛рдБ рдЖрдЙрдЯрдкреБрдЯрдорд╛ рдкреНрд░рддреАрдХ рдЫ i, рддреНрдпрд╕рдкрдЫрд┐ рдЦреЛрд▓ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдЫред

рд▓рдЧрдЗрди рд╢реЗрд▓рдорд╛?

рдпрджрд┐ рддрдкрд╛рдЗрдБ рд▓рдЧрдЗрди рд╢реЗрд▓рдорд╛ рд╣реБрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рдмреНрдпрд╛рд╕рд▓реЗ рдлрд╛рдЗрд▓ рдЦреЛрдЬреНрдЫ /etc/profile рд░ рдпрджрд┐ рдЕрд╡рд╕реНрдерд┐рдд рдЫ рднрдиреЗ рдЪрд▓реНрдЫред

рддреНрдпрд╕рдкрдЫрд┐ рдирд┐рдореНрди рдХреНрд░рдордорд╛ рдпреА рддреАрди рдлрд╛рдЗрд▓рд╣рд░реВ рдордзреНрдпреЗ рдХреБрдиреИ рдкрдирд┐ рдЦреЛрдЬреА рдЧрд░реНрдиреБрд╣реЛрд╕реН:

~/.bash_profile ~/.bash_login ~/.profile

рдЬрдм рдпрд╕рд▓реЗ рдПрдЙрдЯрд╛ рдлреЗрд▓рд╛ рдкрд╛рд░реНрдЫ, рдпрд╕рд▓реЗ рдпрд╕рд▓рд╛рдИ рд╕реБрд░реБ рдЧрд░реНрдЫ рд░ рдЕрд░реВрд▓рд╛рдИ рдЫреЛрдбреНрдЫред

рдПрдХ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдЦреЛрд▓ рдорд╛?

рдпрджрд┐ рддрдкрд╛рдЗрдБ рдЧреИрд░-рд▓рдЧрдЗрди рд╢реЗрд▓рдорд╛ рд╣реБрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рдпреЛ рдорд╛рдирд┐рдиреНрдЫ рдХрд┐ рддрдкрд╛рдЗрдБ рдкрд╣рд┐рд▓реЗ рдиреИ рд▓рдЧрдЗрди рд╢реЗрд▓рдорд╛ рд╣реБрдиреБрд╣реБрдиреНрдЫ, рд╡рд╛рддрд╛рд╡рд░рдг рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдЫ рд░ рдЗрдирд╣реЗрд░рд┐рдЯ рдЧрд░рд┐рдиреЗрдЫред

рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдпрджрд┐ рддрд┐рдиреАрд╣рд░реВ рдЕрд╡рд╕реНрдерд┐рдд рдЫрдиреН рднрдиреЗ, рдирд┐рдореНрди рджреБрдИ рдлрд╛рдЗрд▓рд╣рд░реВ рдХреНрд░рдордмрджреНрдз рд░реВрдкрдорд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реБрдиреНрдЫрдиреН:

/etc/bash.bashrc ~/.bashrc

рд╡рд┐рдХрд▓реНрдк рдЫреИрди?

рдпрджрд┐ рддрдкрд╛рдЗрдБ рдпрд╛ рдд рд▓рдЧрдЗрди рд╢реЗрд▓ рд╡рд╛ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╢реЗрд▓рдорд╛ рд╣реБрдиреБрд╣реБрдиреНрди рднрдиреЗ, рддрдкрд╛рдЗрдБрдХреЛ рд╡рд╛рддрд╛рд╡рд░рдг рд╕рд╛рдБрдЪреНрдЪреИ рдЦрд╛рд▓реА рд╣реБрдиреЗрдЫред рдпрд╕рд▓реЗ рдзреЗрд░реИ рднреНрд░рдордХреЛ рдХрд╛рд░рдг рдмрдирд╛рдЙрдБрдЫ (рдХреНрд░реЛрди рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рддрд▓ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН)ред

рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛ bash рдЪрд░ рд╣реЗрд░реНрдЫ BASH_ENV рддрдкрд╛рдИрдВрдХреЛ рд╡рд╛рддрд╛рд╡рд░рдг рд░ рддреНрдпрд╣рд╛рдБ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдореНрдмрдиреНрдзрд┐рдд рдлрд╛рдЗрд▓ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫред

рд╕рд╛рдорд╛рдиреНрдп рдХрдард┐рдирд╛рдЗрд╣рд░реВ рд░ рдердореНрдмрдХреЛ рдирд┐рдпрдорд╣рд░реВ

рдХреНрд░реЛрди рд░реЛрдЬрдЧрд╛рд░рд╣рд░реВ

95% рд╕рдордп рдореИрд▓реЗ рдмреНрдпрд╛рд╢ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдбрд┐рдмрдЧ рдЧрд░реНрдЫреБ рдХрд┐рдирднрдиреЗ рдХреНрд░реЛрди рдХрд╛рд░реНрдп рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдкрдорд╛ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЫреИрдиред

рдпреЛ рд▓рд╛рдЬрдорд░реНрджреЛ рдХрд╛рдо рдореИрд▓реЗ рдпрд╕рд▓рд╛рдИ рдХрдорд╛рдгреНрдб рд▓рд╛рдЗрдирдорд╛ рдЪрд▓рд╛рдЙрдБрджрд╛ рд░рд╛рдореНрд░реЛ рдХрд╛рдо рдЧрд░реНрдЫ, рддрд░ рдХреНрд░рдиреНрдЯреНрдпрд╛рдмрдорд╛ рдЪрд▓рд╛рдЙрдБрджрд╛ рдЕрд╕рдлрд▓ рд╣реБрдиреНрдЫ.

рдпреЛ рдЫ рджреБрдИ рдХрд╛рд░рдг:

  • рдХреНрд░реЛрди рдХрд╛рд░реНрдпрд╣рд░реВ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдЫреИрдирдиреНред
  • рдХрдорд╛рдгреНрдб рд▓рд╛рдЗрди рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВрдХреЛ рд╡рд┐рдкрд░реАрдд, рдХреНрд░реЛрди рдХрд╛рд░реНрдпрд╣рд░реВрд▓реЗ рд╢реЗрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рдЗрдирд╣реЗрд░рд┐рдЯ рдЧрд░реНрджреИрдиред

рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рддрдкрд╛рдИрдВрд▓реЗ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреНрддрд░реНрдХреНрд░рд┐рдпрд╛рддреНрдордХ рдЫреИрди рднрдиреЗрд░ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реБрдиреНрди рд╡рд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реБрдиреНрди рдХрд┐рдирднрдиреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╢реЗрд▓рдмрд╛рдЯ рдкреНрд░рд╛рдкреНрдд рд╣реБрдиреНрдЫред рдпрд╕рдХреЛ рдорддрд▓рдм рд╕рдмреИ рдХреБрд░рд╛ рд╣реЛ PATH ╨╕ alias рддрдкрд╛рдИрд▓реЗ рдЕрдкреЗрдХреНрд╖рд╛ рдЧрд░реЗ рдЕрдиреБрд╕рд╛рд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдпреЛред

рдпрд╕реИрд▓реЗ рдпреЛ рдЕрдХреНрд╕рд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ PATH рдпрд╣рд╛рдБ рдЬрд╕реНрддреИ рдХреНрд░реЛрди рдХрд╛рд░реНрдпрдХреЛ рд▓рд╛рдЧрд┐:

* * * * * PATH=${PATH}:/path/to/my/program/folder myprogram

рд▓рд┐рдкрд┐рд╣рд░реВ рдПрдХрдЕрд░реНрдХрд╛рд▓рд╛рдИ рдХрд▓ рдЧрд░реНрджреИ

рдЕрд░реНрдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛ рд╣реЛ рдЬрдм рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВ рдЧрд▓реНрддреАрд▓реЗ рдПрдХрдЕрд░реНрдХрд╛рд▓рд╛рдИ рдХрд▓ рдЧрд░реНрди рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдиреНрдЫред рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА, /etc/profile рд▓рд╛рдИ рдЕрдкреАрд▓ рдЧрд░реНрджрдЫ ~/.bashrc.

рдпреЛ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рд╣реБрдиреНрдЫ рдЬрдм рдХрд╕реИрд▓реЗ рдХреЗрд╣рд┐ рддреНрд░реБрдЯрд┐ рдареАрдХ рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдпреЛ рд░ рд╕рдмреИ рдХреБрд░рд╛рд▓реЗ рдХрд╛рдо рдЧрд░реЗрдХреЛ рджреЗрдЦрд┐рдиреНрдЫред рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рдЬрдм рддрдкрд╛рдЗрдБ рдпреА рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░рдХрд╛ рд╕рддреНрд░рд╣рд░реВ рдЕрд▓рдЧ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рдирдпрд╛рдБ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рдЙрддреНрдкрдиреНрди рд╣реБрдиреНрдЫрдиреНред

Sandboxed Docker рдЫрд╡рд┐

рд╢реЗрд▓ рдЪрд▓рд╛рдЙрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди, рдореИрд▓реЗ рдбрдХрд░ рдЫрд╡рд┐ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реЗ рдЬреБрди рд╕реБрд░рдХреНрд╖рд┐рдд рд╡рд╛рддрд╛рд╡рд░рдгрдорд╛ рдЦреЛрд▓ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдбрд┐рдмрдЧ рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

рд╕реБрд░реБрд╡рд╛рдд:

$ docker run -n bs -d imiell/bash_startup
$ docker exec -ti bs bash

Dockerfile рдЕрд╡рд╕реНрдерд┐рдд рдЫ рдпрд╣рд╛рдБ.

рдЬрдмрд░рдЬрд╕реНрддреА рд▓рдЧрдЗрди рдЧрд░реНрди рд░ рд▓рдЧрдЗрди рд╢реЗрд▓ рд╕рд┐рдореБрд▓реЗрдЯ рдЧрд░реНрди:

$ bash --login

рдЪрд░рд╣рд░реВрдХреЛ рд╕реЗрдЯ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрди BASH_ENV:

$ env | grep BASH_ENV

рдбрд┐рдмрдЧрд┐рдЩрдХреЛ рд▓рд╛рдЧрд┐ crontab рдкреНрд░рддреНрдпреЗрдХ рдорд┐рдиреЗрдЯрдорд╛ рдПрдЙрдЯрд╛ рд╕рд╛рдзрд╛рд░рдг рд▓рд┐рдкрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдиреЗрдЫ (рдорд╛ /root/ascript):

$ crontab -l
$ cat /var/log/script.log

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди