БпСстСтС 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, shell-ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΎΠΏΠΈΡ‚Π° Π΄Π° изпълни скрипта, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ собствСния си Π²Π³Ρ€Π°Π΄Π΅Π½ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ β€” ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π½Π΅ΠΎΡ‡Π°ΠΊΠ²Π°Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ пълСн ΠΎΡ‚ΠΊΠ°Π·, особСно ΠΏΡ€ΠΈ смСсванС Π½Π° Π΅Π·ΠΈΡ†ΠΈ.

ЧСсто срСщани ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π½Π° 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 Π΅ Π²Π°ΠΆΠ΅Π½

ЧСсто Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ shebang написани Π² Π΄Π²Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ стила:

#!/bin/python3

срСщу:

#!/usr/bin/env python3

Π’Ρ‚ΠΎΡ€Π°Ρ‚Π° Ρ„ΠΎΡ€ΠΌΠ° Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π½Π°. Π•Ρ‚ΠΎ Π·Π°Ρ‰ΠΎ:

  • ΠŸΡ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚: ΠœΠ΅ΡΡ‚ΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° python3 ΠΌΠΎΠΆΠ΅ Π΄Π° Π²Π°Ρ€ΠΈΡ€Π° Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ Linux дистрибуции, macOS ΠΈ BSD систСми. /usr/bin/env ΠΏΡ€Π΅Ρ‚ΡŠΡ€ΡΠ²Π° $PATH Π½Π° потрСбитСля, Π·Π° Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈ правилния ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ²Π° къдС Π΅ инсталиран.
  • Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ срСди: ΠŸΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Python Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ срСди (venv), /usr/bin/env python3 Ρ‰Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ Python бинарния Ρ„Π°ΠΉΠ» Π½Π° virtualenv вмСсто систСмния.
  • Π‘ΡŠΠ΄Π΅Ρ‰Π° Π·Π°Ρ‰ΠΈΡ‚Π°: Ако ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΡŠΡ‚ бъдС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ ΠΈΠ»ΠΈ прСмСстСн, скриптовСтС, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ΠΈ env, ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π°Ρ‚ Π΄Π° работят Π±Π΅Π· модификация.

ЕдинствСният ΠΏΡŠΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ трябва Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ hardcoded Π°Π±ΡΠΎΠ»ΡŽΡ‚Π΅Π½ ΠΏΡŠΡ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, #!/bin/bash), Π΅ ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ трябва Π΄Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Ρ‚Π΅, Ρ‡Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π±ΠΈΠ½Π°Ρ€Π΅Π½ Ρ„Π°ΠΉΠ» β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² скриптовС, чувствитСлни към сигурност, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ $PATH манипулацията ΠΌΠΎΠΆΠ΅ Π΄Π° прСдставлява риск.

ИзползванС Π½Π° Shebangs Π² 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

> Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°: ./ ΠΏΡ€Π΅Ρ„ΠΈΠΊΡΡŠΡ‚ ΠΊΠ°Π·Π²Π° Π½Π° shell Π΄Π° Ρ‚ΡŠΡ€ΡΠΈ скрипта Π² Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° дирСктория. Ако Π²Π°ΡˆΠ°Ρ‚Π° дирСктория със скриптовС Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° към $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. ВСстирайтС скриптовСтС ΠΏΡ€Π΅Π΄ΠΈ Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ Π² производство

Π’ΠΈΠ½Π°Π³ΠΈ тСстирайтС скриптовСтС Π² Ρ€Π°Π·Π²ΠΎΠΉΠ½Π° ΠΈΠ»ΠΈ ΠΏΡ€Π΅Ρ…ΠΎΠ΄Π½Π° срСда ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° Π³ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ Π½Π° производствСни ΡΡŠΡ€Π²ΡŠΡ€ΠΈ. Ако ΠΈΠΌΠ°Ρ‚Π΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½Π° срСда Π·Π° тСстванС, ΠΏΠ»Π°Π½ VPS Hosting прСдоставя Π΄ΠΎΡΡ‚ΡŠΠΏΠ½Π°, Π΅Π΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½Π° ΠΏΡΡΡŠΡ‡Π½ΠΈΡ†Π°, която отразява производствСнитС условия.

ΠžΡ‚ΡΡ‚Ρ€Π°Π½ΡΠ²Π°Π½Π΅ Π½Π° чСсто срСщани ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ със 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 Line Endings (rn)

Ако Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°Ρ‚Π΅ скриптовС Π½Π° Windows ΠΈ Π³ΠΈ ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΡ‚Π΅ Π½Π° Linux, Windows-стилнитС ΠΊΡ€Π°ΠΈΡ‰Π° Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° поврСдят shebang:

/bin/bash^M: bad interpreter

РСшСниС: ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°ΠΉΡ‚Π΅ ΠΊΡ€Π°ΠΈΡ‰Π°Ρ‚Π° Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ с dos2unix:

dos2unix myscript.sh

Shebang Π² контСкста Π½Π° администриранСто Π½Π° ΡΡŠΡ€Π²ΡŠΡ€ΠΈ

Π—Π° всСки, ΠΊΠΎΠΉΡ‚ΠΎ управлява Linux-Π±Π°Π·ΠΈΡ€Π°Π½Π° хостинг инфраструктура, Π²Π»Π°Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° скриптванС Π΅ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ. Shebangs са Π²Ρ…ΠΎΠ΄Π½Π°Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ° към автоматизацията β€” ΠΎΡ‚ прости cron Π·Π°Π΄Π°Ρ‡ΠΈ Π΄ΠΎ слоТни deployment pipeline-ΠΈ.

Π Π°Π·Π³Π»Π΅Π΄Π°ΠΉΡ‚Π΅ Ρ‚Π΅Π·ΠΈ чСсто срСщани случаи Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° ΠΏΡ€ΠΈ администриранСто Π½Π° ΡΡŠΡ€Π²ΡŠΡ€ΠΈ, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ написанитС скрипти (с ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΈ shebangs) правят ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΠΌΠΎ Ρ€Π°Π·Π»ΠΈΠΊΠ°:

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

Π—Π° рСсурсоСмки Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ натоварвания ΠΊΠ°Ρ‚ΠΎ machine learning pipeline-ΠΈ ΠΈΠ»ΠΈ скрипти Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ количСства Π΄Π°Π½Π½ΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ‚Π΅ GPU Hosting Π·Π° ускорСниС Π½Π° Python-Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ изчислСния.

Π‘ΡŠΡ€Π·ΠΎ справочно Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ: Shebang Cheat Sheet

# 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, Π·Π°Π΄Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ‚Π° ΠΈ Π³ΠΎ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Ρ‚Π΅. Π’Π°ΠΊΠ° Π·Π°ΠΏΠΎΡ‡Π²Π° всСки ΠΎΡ‚Π»ΠΈΡ‡Π΅Π½ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π·Π° автоматизация.