Π‘ΡΠΊΠΎΠ½ΠΎΠΌΡŒΡ‚Π΅ 15% Π½Π° всСх хостинговых услугах

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ свои Π½Π°Π²Ρ‹ΠΊΠΈ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ скидку Π½Π° любой Ρ‚Π°Ρ€ΠΈΡ„Π½Ρ‹ΠΉ ΠΏΠ»Π°Π½

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ΄: Skills ΠΠ°Ρ‡Π°Ρ‚ΡŒ
Π ΡƒΠ±Ρ€ΠΈΠΊΠΈ
Linux

ПониманиС Shebangs: Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Bash ΠΈ Python скриптов Π² Linux Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅

Если Π²Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ писали shell ΠΈΠ»ΠΈ Python скрипт Π½Π° Linux ΠΈ задавались вопросом, ΠΊΠ°ΠΊ систСма ΡƒΠ·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ β€” ΠΎΡ‚Π²Π΅Ρ‚ кроСтся Π² ΠΊΡ€ΠΎΡˆΠ΅Ρ‡Π½ΠΎΠΉ, Π½ΠΎ ΠΌΠΎΡ‰Π½ΠΎΠΉ Π΄Π²ΡƒΡ…ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² Π½Π°Ρ‡Π°Π»Π΅ вашСго Ρ„Π°ΠΉΠ»Π°: shebang (#!).

НСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ Π·Π°Π΄Π°Ρ‡ΠΈ обслуТивания сСрвСра, управляСтС Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ Π² срСдС VPS Hosting, ΠΈΠ»ΠΈ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ слуТСбныС скрипты для вашСго Π²Π΅Π±-сСрвСра, ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ shebangs, являСтся основным Π½Π°Π²Ρ‹ΠΊΠΎΠΌ Linux, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ систСмный администратор ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ.

Π­Ρ‚ΠΎ руководство ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ всС, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ: Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ shebangs, ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Bash ΠΈ Python скриптах, ΠΈ Π»ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ Π»ΡŽΠ±ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ скрипты ΠΎΡ‚ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΉ ΠΊ производству Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Shebang (#!)?

A shebang (Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ *sha-bang*, *hashbang* ΠΈΠ»ΠΈ *pound-bang*) β€” это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ символов, размСщаСмая Π² самой ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС Ρ„Π°ΠΉΠ»Π° скрипта. Она ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ядру Linux, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для выполнСния ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ части Ρ„Π°ΠΉΠ»Π°.

Бинтаксис простой:

#!/path/to/interpreter

Когда Π²Ρ‹ запускаСтС скрипт, опСрационная систСма Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° Π±Π°ΠΉΡ‚Π° Ρ„Π°ΠΉΠ»Π°. Если ΠΎΠ½Π° Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ #!, ΠΎΠ½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ» ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ Π² этой строкС. Π‘Π΅Π· shebang ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ скрипт, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ свой собствСнный встроСнный ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ β€” Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠΌΡƒ повСдСнию ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΌΡƒ ΠΎΡ‚ΠΊΠ°Π·Ρƒ, особСнно ΠΏΡ€ΠΈ смСшивании языков.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ распространСнных Shebang

Π’ΠΈΠΏ скриптаБтрока Shebang
Bash#!/bin/bash
POSIX Shell#!/bin/sh
Python 3#!/usr/bin/env python3
Python 2 (legacy)#!/usr/bin/env python2
Perl#!/usr/bin/perl
Ruby#!/usr/bin/env ruby
Node.js#!/usr/bin/env node

ΠŸΠΎΡ‡Π΅ΠΌΡƒ /usr/bin/env Π²Π°ΠΆΠ΅Π½

Π’Ρ‹ часто встрСтитС шСбанги, написанныС Π² Π΄Π²ΡƒΡ… Ρ€Π°Π·Π½Ρ‹Ρ… стилях:

#!/bin/python3

Π² сравнСнии с:

#!/usr/bin/env python3

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»Π΅Π½. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ:

  • ΠŸΠΎΡ€Ρ‚Π°Ρ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ: РасполоТСниС python3 ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… дистрибутивах Linux, macOS ΠΈ систСмах BSD. /usr/bin/env ΠΈΡ‰Π΅Ρ‚ Π² $PATH ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π³Π΄Π΅ ΠΎΠ½ установлСн.
  • Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ окруТСния: ΠŸΡ€ΠΈ использовании Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΉ Python (venv), /usr/bin/env python3 Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒΡΡ Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Python Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ окруТСния, Π° Π½Π΅ систСмный.
  • Будущая ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ: Если ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½, скрипты, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ env, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

ЕдинствСнный случай, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ТСстко Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, #!/bin/bash), β€” это ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ использованиС ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² скриптах, Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊ бСзопасности, Π³Π΄Π΅ манипуляция $PATH ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ риском.

ИспользованиС Shebang Π² Bash скриптах: пошаговоС руководство

Π”Π°Π²Π°ΠΉΡ‚Π΅ пройдСмся ΠΏΠΎ созданию ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ, исполняСмого Bash скрипта с нуля.

Π¨Π°Π³ 1: ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ доступ ΠΊ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Ρƒ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ Ρ‡Π΅Ρ€Π΅Π· SSH ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ Linux сСрвСру.

Π¨Π°Π³ 2: Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Bash скрипта

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ nano, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ»:

nano myscript.sh

Π¨Π°Π³ 3: Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Shebang ΠΈ содСрТимоС скрипта

Π’ самом Π½Π°Ρ‡Π°Π»Π΅ Ρ„Π°ΠΉΠ»Π° Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ строку shebang, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ слСдуСт Π»ΠΎΠ³ΠΈΠΊΠ° вашСго скрипта:

#!/bin/bash

# A simple greeting script
echo "Hello, World!"
echo "Current date and time: $(date)"
echo "Running as user: $(whoami)"

Π¨Π°Π³ 4: Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ ΠΈ Π²Ρ‹ΠΉΠ΄ΠΈΡ‚Π΅

Π’ nano Π½Π°ΠΆΠΌΠΈΡ‚Π΅ CTRL + X, Π·Π°Ρ‚Π΅ΠΌ Y, Π·Π°Ρ‚Π΅ΠΌ Enter Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ».

Π¨Π°Π³ 5: Π‘Π΄Π΅Π»Π°ΠΉΡ‚Π΅ скрипт исполняСмым

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ вновь созданныС Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ исполняСмыми. ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ chmod:

chmod +x myscript.sh

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ:

ls -l myscript.sh

Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄, ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π°:

-rwxr-xr-x 1 user user 112 Jun 10 14:32 myscript.sh

Π¨Π°Π³ 6: ЗапуститС скрипт

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ скрипт нСпосрСдствСнно ΠΈΠ· Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°:

./myscript.sh

ΠžΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄:

Hello, World!
Current date and time: Tue Jun 10 14:32:01 UTC 2025
Running as user: youruser

> ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠŸΡ€Π΅Ρ„ΠΈΠΊΡ ./ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ ΠΈΡΠΊΠ°Ρ‚ΡŒ скрипт Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Если ваш ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ скриптов Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² $PATH, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ скрипты Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ.

ИспользованиС Shebangs Π² Python скриптах: пошагово

Python скрипты ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ, с ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ΠΌ Π² Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΠΎΠΉ строкС shebang.

Π¨Π°Π³ 1: Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Python скрипта

nano myscript.py

Π¨Π°Π³ 2: Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Shebang ΠΈ ΠΊΠΎΠ΄ Python

#!/usr/bin/env python3

# A simple Python script demonstrating shebang usage
import sys
import platform

print("Hello from Python!")
print(f"Python version: {sys.version}")
print(f"Platform: {platform.system()} {platform.release()}")

Π¨Π°Π³ 3: Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅, Π²Ρ‹ΠΉΠ΄ΠΈΡ‚Π΅ ΠΈ сдСлайтС исполняСмым

# Save and exit nano with CTRL+X, Y, Enter
chmod +x myscript.py

Π¨Π°Π³ 4: ЗапуститС скрипт

./myscript.py

ΠžΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Hello from Python!
Python version: 3.11.2 (main, Mar 13 2023, 12:18:29)
Platform: Linux 5.15.0-76-generic

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ прСфикс ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ с python3 β€” shebang автоматичСски ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹Π±ΠΎΡ€ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ

ПониманиС shebang Π² изоляции ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Π½ΠΎ Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ административным Π·Π°Π΄Π°Ρ‡Π°ΠΌ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΈΡΡ‚ΠΈΠ½Π½ΡƒΡŽ Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ.

Bash: Автоматизированный скрипт Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ³ΠΎ копирования

#!/bin/bash

# Automated backup script for web files
BACKUP_DIR="/var/backups/webfiles"
SOURCE_DIR="/var/www/html"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
BACKUP_FILE="$BACKUP_DIR/backup_$TIMESTAMP.tar.gz"

mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_FILE" "$SOURCE_DIR"

echo "Backup completed: $BACKUP_FILE"

Python: Π‘ΠΊΡ€ΠΈΠΏΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ систСмы

#!/usr/bin/env python3

import shutil
import psutil

def check_disk_usage(path="/"):
    total, used, free = shutil.disk_usage(path)
    percent_used = (used / total) * 100
    print(f"Disk Usage ({path}): {percent_used:.1f}% used")
    if percent_used > 85:
        print("WARNING: Disk usage is critically high!")

def check_memory():
    mem = psutil.virtual_memory()
    print(f"Memory Usage: {mem.percent}% used")

check_disk_usage()
check_memory()

Π­Ρ‚ΠΈ Ρ‚ΠΈΠΏΡ‹ скриптов бСсцСнны ΠΏΡ€ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ инфраструктурой β€” нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, управляСтС Π»ΠΈ Π²Ρ‹ ΠΎΠ΄Π½ΠΎΠΉ ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записью Shared Web Hosting ΠΈΠ»ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° Dedicated Servers.

ПовСдСниС Shebang: Ρ‡Ρ‚ΠΎ происходит ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ

Когда Π²Ρ‹ выполняСтС скрипт с shebang, ядро Linux выполняСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги:

  1. Π§ΠΈΡ‚Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку Ρ„Π°ΠΉΠ»Π° ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ #!.
  2. АнализируСт ΠΏΡƒΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° (ΠΈ Π»ΡŽΠ±Ρ‹Π΅ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹) ΠΈΠ· строки shebang.
  3. Π’Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, пСрСдавая Ρ„Π°ΠΉΠ» скрипта Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.

НапримСр, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ./myscript.py Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ эквивалСнтно:

/usr/bin/env python3 ./myscript.py

Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ shebang всСгда Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² Π² Π½Π°Ρ‡Π°Π»Π΅ β€” Π΄Π°ΠΆΠ΅ ΠΎΠ΄Π½Π° пустая строка ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ shebang.

Π§Ρ‚ΠΎ происходит Π±Π΅Π· Shebang?

Если shebang отсутствуСт, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ вызываСтся скрипт:

  • Если Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ./script.py, тСкущая ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Bash) попытаСтся ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС для ΠΊΠΎΠ΄Π° Python.
  • Если Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ python3 script.py, shebang Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния β€” Python ΡƒΠΊΠ°Π·Π°Π½ явно.
  • Если Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ bash script.sh, shebang снова игнорируСтся.

Shebang ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ прямом Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ скрипта (Ρ‚. Π΅. ΠΊΠ°ΠΊ ./script).

ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ Shebang

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„Π»Π°Π³ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ Ρ‡Π΅Ρ€Π΅Π· строку shebang:

#!/bin/bash -e

Π€Π»Π°Π³ -e заставляСт Bash Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π²Ρ‹ΠΉΡ‚ΠΈ, Ссли какая-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ выполнится β€” распространённая ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° бСзопасности для production-скриптов.

#!/usr/bin/env python3 -u

Π€Π»Π°Π³ -u ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ Π²Ρ‹Π²ΠΎΠ΄Π° Π² Python, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для логирования Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

> Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: НСкоторыС систСмы ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ послС ΠΏΡƒΡ‚ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Π² строкС shebang. Для слоТной ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π»ΡƒΡ‡ΡˆΠ΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ самого скрипта (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, set -euo pipefail Π² Bash).

ИспользованиС env с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌΠΈ вСрсиями

#!/usr/bin/env python3.11

Π­Ρ‚ΠΎ Π½Π°Ρ†Π΅Π»Π΅Π½ΠΎ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Python, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² окруТСниях, Π³Π΄Π΅ ΡΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ нСсколько вСрсий.

ΠŸΠΎΠ»ΠΈΠ³Π»ΠΎΡ‚Π½Ρ‹Π΅ скрипты

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… случаях Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΠΈΡˆΡƒΡ‚ скрипты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΌΠΈ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… языках. Shebang позволяСт это, контролируя, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ запустится ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ. Π₯отя это нишСвая Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°, ΠΎΠ½Π° дСмонстрируСт Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ обСспСчиваСт shebang.

Π›ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ написания строк Shebang

Π‘Π»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ этим Π»ΡƒΡ‡ΡˆΠΈΠΌ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°ΠΌ сдСлаСт ваши скрипты Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌΠΈ, ΠΏΠΎΡ€Ρ‚Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ Π² обслуТивании β€” особСнно Π²Π°ΠΆΠ½ΠΎ Π² производствСнных сСрвСрных срСдах.

1. ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€

Π‘ΠΎΠΏΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ shebang с языком ΠΈ вСрсиСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ваш скрипт:

#!/bin/bash          # For Bash-specific syntax
#!/bin/sh            # For POSIX-compliant shell scripts (more portable)
#!/usr/bin/env python3  # For Python 3 scripts

Никогда Π½Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ /bin/sh ΠΈ /bin/bash взаимозамСняСмы β€” ΠΎΠ½ΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ. Bash ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (массивы, [[ ]], подстановку процСссов), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ POSIX sh Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚.

2. ΠŸΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ /usr/bin/env для портативности

Как ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, использованиС env Π΄Π΅Π»Π°Π΅Ρ‚ скрипты ΠΏΠΎΡ€Ρ‚Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… систСмах ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… окруТСниях Python. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ТСстко Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° этого Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ.

3. ВсСгда устанавливайтС ΠΏΡ€Π°Π²Π° Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅

Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹ Π±Π΅Π· ΠΏΡ€Π°Π² Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ‹ с ошибкой β€œPermission denied”:

chmod +x script.sh
chmod +x script.py

Для скриптов, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для всСх ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π² систСмС:

chmod 755 script.sh

4. ΠžΡ€Π³Π°Π½ΠΈΠ·ΡƒΠΉΡ‚Π΅ скрипты Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ ~/scripts ΠΈΠ»ΠΈ ~/bin для Π»ΠΈΡ‡Π½Ρ‹Ρ… скриптов ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π΅Ρ‘ Π² ваш $PATH:

mkdir -p ~/bin
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

ПослС этого любой исполняСмый скрипт, Ρ€Π°Π·ΠΌΠ΅Ρ‰Ρ‘Π½Π½Ρ‹ΠΉ Π² ~/bin, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΎΡ‚ΠΊΡƒΠ΄Π° ΡƒΠ³ΠΎΠ΄Π½ΠΎ.

5. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π·Π½Π°Ρ‡ΠΈΠΌΡ‹Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ваши скрипты коммСнтариями, ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‰ΠΈΠΌΠΈ ΠΈΡ… Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, использованиС ΠΈ Π»ΡŽΠ±Ρ‹Π΅ зависимости:

#!/bin/bash
# Script: backup_web.sh
# Purpose: Creates timestamped backups of web root
# Usage: ./backup_web.sh
# Dependencies: tar, gzip
# Author: Your Name
# Last Modified: 2025-06-10

6. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ set ΠΎΠΏΡ†ΠΈΠΈ для Π±ΠΎΠ»Π΅Π΅ бСзопасных Bash скриптов

Для производствСнных Bash скриптов Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ эти ΠΎΠΏΡ†ΠΈΠΈ бСзопасности сразу послС shebang:

#!/bin/bash
set -euo pipefail
  • -e: Π’Ρ‹Ρ…ΠΎΠ΄ ΠΏΡ€ΠΈ ошибкС
  • -u: Π Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ нСустановлСнныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ ошибки
  • -o pipefail: ΠŸΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ошибки Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ…

7. ΠŸΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ скрипты ΠΏΠ΅Ρ€Π΅Π΄ Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ Π² production

ВсСгда тСстируйтС скрипты Π² срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ»ΠΈ staging ΠΏΠ΅Ρ€Π΅Π΄ запуском ΠΈΡ… Π½Π° production сСрвСрах. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° изолированная срСда для тСстирования, ΠΏΠ»Π°Π½ VPS Hosting прСдоставляСт доступноС, ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²ΠΎΠ΅ пСсочница, которая ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ условия production.

УстранСниС распространСнных ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Shebang

"Permission Denied" Error

bash: ./myscript.sh: Permission denied

РСшСниС: Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρƒ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ ΠΏΡ€Π°Π² Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. ЗапуститС chmod +x myscript.sh.

"No Such File or Directory" Error

bash: ./myscript.py: /usr/bin/env: bad interpreter: No such file or directory

РСшСниС: Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² shebang, Π½Π΅ сущСствуСт ΠΏΠΎ этому ΠΏΡƒΡ‚ΠΈ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ which python3 ΠΈΠ»ΠΈ which bash.

Π‘ΠΊΡ€ΠΈΠΏΡ‚ запускаСтся с Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ

Π‘ΠΈΠΌΠΏΡ‚ΠΎΠΌ: Ошибки синтаксиса Python ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ запускС Ρ„Π°ΠΉΠ»Π° .sh ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

РСшСниС: Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ строка shebang находится Π½Π° строкС 1 Π±Π΅Π· ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² ΠΈΠ»ΠΈ пустых строк ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€.

ΠžΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΡ строк Windows (rn)

Если Π²Ρ‹ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ скрипты Π² Windows ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ ΠΈΡ… Π² Linux, окончания строк Π² стилС Windows ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ²Ρ€Π΅Π΄ΠΈΡ‚ΡŒ shebang:

/bin/bash^M: bad interpreter

РСшСниС: ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠΉΡ‚Π΅ окончания строк с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ dos2unix:

dos2unix myscript.sh

Shebang Π² контСкстС администрирования сСрвСров

Для всСх, ΠΊΡ‚ΠΎ управляСт инфраструктурой хостинга Π½Π° Π±Π°Π·Π΅ Linux, Π²Π»Π°Π΄Π΅Π½ΠΈΠ΅ скриптингом являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. Shebangs β€” это Ρ‚ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π° Π² Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ β€” ΠΎΡ‚ простых cron-Π·Π°Π΄Π°Π½ΠΈΠΉ Π΄ΠΎ слоТных ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΠΎΠ² развСртывания.

РассмотритС эти распространСнныС сцСнарии администрирования сСрвСров, Π³Π΄Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ написанныС скрипты (с ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌΠΈ shebangs) Π΄Π°ΡŽΡ‚ ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΠΌΡƒΡŽ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ:

  • АвтоматичСскоС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ SSL-сСртификатов β€” скриптинг certbot ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π²Π΅Π±-сСрвСров. Если Π²Ρ‹ управляСтС сСртификатами Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, рассмотритС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ изучСния SSL-сСртификатов для ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ управлСния.
  • Ротация ΠΈ очистка Π»ΠΎΠ³ΠΎΠ² β€” Bash-скрипты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΡƒΡŽΡ‚ ΠΈ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ старыС Π»ΠΎΠ³ΠΈ ΠΏΠΎ Ρ€Π°ΡΠΏΠΈΡΠ°Π½ΠΈΡŽ.
  • Π Π΅Π·Π΅Ρ€Π²Π½Ρ‹Π΅ ΠΊΠΎΠΏΠΈΠΈ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… β€” Python-скрипты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ ΠΊ MySQL/PostgreSQL, Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.
  • ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π·Π΄ΠΎΡ€ΠΎΠ²ΡŒΡ β€” Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ использованиС диска, памяти ΠΈ статус сСрвисов, отправляя оповСщСния ΠΏΡ€ΠΈ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΈΠΈ ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.
  • Автоматизация развСртывания β€” Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ ΠΈΠ· Git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π², Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ тСсты ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ сСрвСры ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Для рСсурсоСмких Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… Π½Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρ‹ машинного обучСния ΠΈΠ»ΠΈ ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Π΅ скрипты ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ GPU-хостинг для ускорСния вычислСний Π½Π° Π±Π°Π·Π΅ Python.

ΠšΡ€Π°Ρ‚ΠΊΠ°Ρ справка: Π¨ΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° ΠΏΠΎ Shebang

# Bash (most common for shell scripts)
#!/bin/bash

# POSIX sh (maximum portability)
#!/bin/sh

# Bash with strict error handling (recommended for production)
#!/bin/bash
set -euo pipefail

# Python 3 (portable, uses PATH)
#!/usr/bin/env python3

# Python 3 with unbuffered output
#!/usr/bin/env python3 -u

# Perl
#!/usr/bin/perl

# Ruby
#!/usr/bin/env ruby

# Node.js
#!/usr/bin/env node

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Shebang β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ‚Π΅Ρ… ΠΎΠ±ΠΌΠ°Π½Ρ‡ΠΈΠ²ΠΎ простых ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π»Π΅ΠΆΠ°Ρ‚ Π² основС ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ³ΠΎ количСства Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Linux. Π”Π²Π° символа β€” #! β€” ΠΈ ΠΏΡƒΡ‚ΡŒ β€” это всС, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ тСкстовый Ρ„Π°ΠΉΠ» Π² нСпосрСдствСнно ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

ОвладСв использованиСм shebang Π² скриптах Bash ΠΈ Python, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ:

  • ΠŸΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΎΡ€Ρ‚Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅, Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹Π΅ скрипты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ нСзависимо ΠΎΡ‚ окруТСния
  • ΠΠ²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ административныС Π·Π°Π΄Π°Ρ‡ΠΈ с ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ
  • Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρ‹ развСртывания ΠΈ обслуТивания
  • Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‡Π°Ρ‚ΡŒ Π½Π°Π΄ скриптами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π±Π΅Π· Π΄ΠΎΠ³Π°Π΄ΠΎΠΊ

НСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, управляСтС Π»ΠΈ Π²Ρ‹ ΠΎΠ΄Π½ΠΈΠΌ Π²Π΅Π±-сайтом Π½Π° Shared Web Hosting ΠΈΠ»ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅Ρ‚Π΅ слоТныС Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Dedicated Servers, автоматизация скриптов β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых высокоэффСктивных Π½Π°Π²Ρ‹ΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ администратор Linux.

НачнитС с ΠΌΠ°Π»ΠΎΠ³ΠΎ β€” Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ΄Π½Ρƒ Π·Π°Π΄Π°Ρ‡Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ выполняСтС Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ сСгодня. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ shebang, установитС Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈ запуститС Π΅Π³ΠΎ. Π’ΠΎΡ‚ Ρ‚Π°ΠΊ начинаСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ.