Yunit 9 / 11

Pagbuo ng Script at Automation: Bash, Python at PowerShell

Mga nadagdag:

  • Kakayahang maunawaan ang lakas ng Bash, Python at PowerShell at magkaroon ng artificial intelligence na makagawa ng ligtas, protektadong mga draft ng script
  • Kakayahang magdagdag ng mga guardrail sa mga script tulad ng set -euo pipefail, empty variable checking, dry-run mode at logging
  • Kakayahang basahin ang mga mapanirang utos at subukan ang mga ito sa isang nakahiwalay na kapaligiran at may dry-run muna, at ilapat ang disiplina na hindi i-embed ang lihim sa script.

Ang diwa ng DevOps ay buod sa isang pangungusap: "I-automate ang gawaing ginagawa mo nang dalawang beses." Anumang paulit-ulit na gawain na ginagawa nang manu-mano — paglilinis ng log, pagkuha ng backup, pagsusuri sa kalusugan ng server, pagpoproseso ng batch file — ay tumatagal ng oras at kalaunan ay napinsala ng pagkakamali ng tao. Kinukuha ng mga script ang mga trabahong ito: maliliit na programa na nagsasagawa ng serye ng mga utos sa sunud-sunod, maaasahan at nauulit na paraan. Ang propesyonal sa DevOps ay madalas na gumagamit ng tatlong wika: Bash (para sa Linux/Unix shell scripts), Python (para sa kumplikadong logic, API calling, pagmamanipula ng data), at PowerShell (para sa Windows at cloud management).

Ang AI ay marahil kung saan nag-aalok ito ng pinakapraktikal na halaga sa pagbuo ng script: paggawa ng gumaganang draft mula sa isang paglalarawan ng isang pangungusap, paglutas ng mahiwagang bug, pagsasalin ng script sa ibang wika. Ngunit ang isang script ay mapanganib kapag tumakbo nang walang taros — isang maling rm, isang Remove-Item -Recurse ay magtatanggal ng mga file nang hindi maibabalik. Kaya naman ang motto ng unit na ito ay: Hayaang isulat ng AI ang script, basahin mo ito, subukan muna ito sa safe mode, pagkatapos ay patakbuhin ito.

Aling wika ang pipiliin at kailan? Isang magaspang na panuntunan: kung ang trabaho ay binubuo ng pagpapatakbo ng ilang mga command ng system nang sunud-sunod (kopyahin ang file, i-restart ang serbisyo, kunin ang archive) Ang Bash ang pinaka natural na pagpipilian dahil ang Linux ay nasa lahat ng dako sa mga server. Kung ang trabaho ay nagsasangkot ng lohika ng desisyon, pag-loop, pagbabago ng data, paghiling ng API, o pagpoproseso ng JSON—ibig sabihin, lohika na lampas sa 20 linya—namumukod-tangi ang Python para sa pagiging madaling mabasa at mayayamang library nito; Ang isang kumplikadong Bash script ay mabilis na nagiging hindi maintindihan, habang ang Python ay nananatiling madaling mapanatili. Kung ang trabaho ay nagsasangkot ng pamamahala sa mga Windows server, Active Directory, o Azure, ang PowerShell ay ang natural na kapaligiran dahil ang object-oriented na kalikasan nito ay malalim na sumasama sa mga platform na ito. Ang pagtukoy kung aling wika ang iyong pinili at bakit kapag humihiling ng script sa AI ay tinitiyak na ang output ay angkop at idiomatic para sa iyong kapaligiran.

Hakbang sa hakbang: secure na pagbuo ng script

  1. Ilarawan ang gawain at kapaligiran. Ano ang gagawin nito, aling OS/shell, anong mga hadlang?
  2. Humingi ng mga rehas na pangkaligtasan. Sa bash, itakda ang -euo pipefail (stop on error, stop on undefined variable), confirmation prompt para sa mga mapanganib na operasyon, ilipat muna sa halip na tanggalin.
  3. Humiling ng dry-run mode. Hayaang isulat ng script kung ano ang gagawin sa --dry-run, ngunit huwag gawin ito.
  4. Basahin at unawain. I-verify kung ano ang ginagawa ng bawat row, lalo na ang pagtanggal/paglipat/mga pagpapatakbo ng network.
  5. Subukan ito sa isang nakahiwalay na kapaligiran. Sa test folder, patakbuhin ito gamit ang sample na data.
  6. Idagdag sa pag-log. Hayaang i-record ng script kung ano ang ginagawa nito para matingnan ito sa ibang pagkakataon.

Mga mahahalagang bagay sa ligtas na pag-script

Dapat isama ng isang script ng produksyon ang mga guardrail na ito:

  • Huminto kung sakaling magkamali. Bash: set -euo pipefail. PowerShell: $ErrorActionPreference = 'Stop'. Kung nabigo ang isang hakbang, hindi dapat gumana ang mga susunod.
  • Idempotency (pag-uulit). Kung ang script ay tumatakbo nang dalawang beses, hindi ito dapat humarap ng dobleng pinsala; "Kung mayroon ka na nito, laktawan mo ito" lohika.
  • Pag-apruba at dry-run. Para sa mga mapanirang operasyon "sigurado ka ba?" o ang --dry-run na bandila.
  • Pagpapatunay ng input. Ang mga parameter ba ay tulad ng inaasahan? Ang isang walang laman na variable ay maaaring gawing rm -rf / disaster ang rm -rf "$DIR"/.
  • Pag-log. Itala kung ano ang ginawa at kailan.
Tip: Ang pinaka-mapanganib na pagkakamali sa Bash ay ang pagtanggal gamit ang isang walang laman na variable. Sinusubukan ng rm -rf "$DIR" na tanggalin ang root directory kung walang laman ang $DIR. set -u (stop on undefined variable) and checking [ -n "$DIR" ] bago tanggalin is a lifesaver. Tahasang hilingin ang mga proteksyong ito kapag humihiling ng mga script mula sa AI.

Seguridad: lihim at mapanirang mga utos

Dalawang malaking panganib:

  1. Pag-embed ng Lihim sa script. Ang password ay hindi dapat plaintext sa loob ng token script; Dapat basahin mula sa environment variable o vault. Ang mga script ay napupunta sa Git; ang nakabaon na lihim ay permanenteng pagtagas.
  2. Mapanirang utos. rm -rf, Remove-Item -Recurse -Force, DROP TABLE, terraform destroy — kapag nakita mo ang mga ito sa isang script, huminto at mag-isip nang dalawang beses. Huwag na huwag munang subukan ang mapanirang utos na nabuo ng AI sa prod.
Pag-iingat: Kapag sinabi mo sa AI na "magsulat ng isang script na naglilinis ng mga file na ito", maingat na basahin ang saklaw ng paghahanap ... -delete o rm command na ginagawa nito. Ang wildcard (*) o ang maling landas ay magtatanggal ng higit sa gusto mong tanggalin. Palaging patakbuhin muna ang script gamit ang "list to delete" mode sa halip na tanggalin.

Paghahambing ng tatlong wika

pamantayan

bash

sawa

PowerShell

Kung saan ito pinakamahusay

Linux shell, command chain

Kumplikadong lohika, API, data

Windows cloud management

Learning curve

Katamtaman (nakulong)

madali

daluyan

Error sa paghawak

set -euo pipefail

subukan/maliban

subukan/huli, -ErrorAction

maaaring dalhin

Unix/Linux/mac

kahit saan

Cross-platform (PS 7+)

kailan

Maikli, gumagana ang system

Logic na mas mahaba sa 20 linya

Windows/AD/Azure

tatlong mini case

Case 1 — 2 oras ng craft sa 5 minuto. Isang engineer ang gumugugol ng 2 oras sa pagkolekta at pag-archive ng mga log mula sa 40 server bawat linggo. Siya ay may AI na ilarawan ang gawain at itakda ang -euo pipefail + dry-run na mga proteksyon at bumuo ng isang Bash script. Pinatunayan muna ang script gamit ang dry-run, pagkatapos ay i-link ito sa naka-iskedyul na gawain (cron). Ang lingguhang trabaho ay binabawasan sa 5 minuto at ang pagkakamali ng tao ay tinanggal.

Kaso 2 — null variable na sakuna ay naiwasan. Mayroong rm -rf "$TARGET"/* sa script ng paglilinis na ginawa ng AI, ngunit kung hindi nakatalaga ang TARGET sa isang lugar, nanatili itong walang laman. Napagtanto niya ito habang nag-aaral bilang isang inhinyero; set -u at [ -n "$TARGET" ] || idinagdag ang exit 1 control. Sa panahon ng pagsubok ang variable ay nanatiling null at ang script ay tumigil nang ligtas sa halip na sakuna.

Case 3 — nakunan ng naka-embed na token. Para sa kaginhawahan, nagdagdag ang AI ng linyang TOKEN = "ghp_realtoken" sa isang script ng Python na humihiling ng API (bilang halimbawa). Inalis ito ng engineer at binago ito sa pagbabasa mula sa environment variable na may os.environ["TOKEN"] at kinansela at ni-renew ang token. Kung mapunta ang script sa Git, magiging pampubliko ang token.

Apat na maaaring kopyahin na mga template

1) Secure na Bash script:

Sumulat ng script ng Bash: [GAWAIN]. Mga ipinag-uutos na panuntunan:- `set -euo pipefail` sa simula.- Suriin na ang variable ay hindi walang laman saanman nagtatanggal/gumagalaw.- `--dry-run` flag: isulat kung ano ang gagawin sa mode na ito ngunit huwag gawin ito.- Huwag i-embed ang sikreto; Basahin mula sa variable ng kapaligiran. - Mag-print ng impormasyong log sa bawat hakbang. I-comment ang script at markahan ang pinaka-delikadong linya.

2) Paglalarawan/kontrol ng script:

Ilarawan ang sumusunod na linya ng script at suriin para sa seguridad: naka-embed na lihim, mapanirang utos (rm/Remove-Item/DROP), hindi wastong input, kawalan ng paghawak ng error? Isulat ang bawat panganib sa pagkakasunud-sunod ng kahalagahan at pagwawasto. Script: [CODE]

3) Pagsasalin ng wika:

Isalin ang script na iyon ng [SOURCE LANGUAGE] sa [TARGET LANGUAGE]. Panatilihin ang pag-uugali ng verbatim, gumamit ng idiomatic error sa paghawak ng target na wika, ilipat ang anumang naka-embed na mga lihim sa isang variable ng kapaligiran. Tandaan ang mga puntong maaaring magkaiba ang kilos. Script: [CODE]

4) Nakaplanong gawain (cron/naka-iskedyul na gawain):

Gamitin ang script na ito [FREQUENCY: hal. Sumulat ng kahulugan ng iskedyul ([cron / systemd timer / Windows Task Scheduler]) na tatakbo [sa 02:00 gabi-gabi]. Idagdag kung paano ako babalaan sa pagkabigo (log/exit code/notification) at kung paano maiwasan ang overlap.

Mahinang prompt / Malakas na prompt

Mahina: "Magsulat ng script na nagtatanggal ng mga lumang file."

Resulta: isang scopeless, unprotected, dry-runless rm script; Kung tatakbo ito sa maling folder, tatanggalin nito nang hindi maibabalik.

Strong: "Sumulat ng bash script para tanggalin ang mga .log file na mas matanda sa 30 araw sa ilalim ng /var/log/app. Gamitin ang set -euo pipefail, huminto kung walang laman ang target na direktoryo, ilista kung ano ang tatanggalin gamit ang --dry-run muna, i-log ang bawat transaksyon, huwag i-embed ang lihim. Markahan ang pinakadelikadong linya."

Pagkakaiba: ang pangalawang claim ay nagbibigay ng buong saklaw, mga guardrail sa kaligtasan at dry-run na inaasahan; Ang output ay maaaring tumakbo nang ligtas.

Mga karaniwang pagkakamali

  • Pagpapatakbo ng script nang hindi binabasa ito. Tanggalin/ilipat ang mga hilera sa partikular na humahantong sa sakuna.
  • Hindi sinusuri ang mga walang laman na variable. Klasikong sakuna ng pagtanggal ng root directory na may rm -rf "$X"/.
  • laktawan ang `set -euo pipefail` / `-ErrorAction Stop`. Ang isang hakbang ay gumagana, ang script ay nagpapatuloy nang walang taros.
  • Pag-embed ng Lihim sa script. Ang patuloy na pagtagas sa Git.
  • Mapanirang proseso nang walang dry-run. Una "ipakita sa akin kung ano ang gagawin", pagkatapos ay gawin ito.
  • Ginagawa ang unang pagsubok sa prod. Tumatakbo nang walang nakahiwalay na kapaligiran sa pagsubok.

Sa buod

Ang DevOps ay ang sining ng automation; Ang paulit-ulit na gawain ay itinalaga sa mga script ng Bash, Python at PowerShell. Napakadaling gamitin ng AI sa pag-draft ng mga script, pag-debug, at pagsasalin ng mga wika — ngunit ang isang secure na script ay dapat may kasamang mga error guard tulad ng set -euo pipefail, null variable checking, dry-run mode, naka-embed na kawalan ng lihim, at pag-log. Responsibilidad mong basahin at subukan ang bawat script, lalo na ang mga naglalaman ng mga mapanirang utos, sa isang nakahiwalay na kapaligiran at mag-dry-run muna.

Gawain ng aplikasyon

Pumili ng isang umuulit na gawain (pag-archive ng log, backup, paglilinis). (1) Hayaang bumuo ang AI ng isang protektadong script gamit ang template na "Secure Bash script". (2) Ipasuri ang parehong script para sa seguridad gaya ng template na "Paglalarawan/pag-audit ng script" at hanapin ang pinaka-mapanganib na linya na na-flag ng AI. (3) I-verify ang pag-uugali nito sa pamamagitan ng pagpapatakbo ng script gamit ang mga sample na file sa isang test folder, una gamit ang --dry-run.

checklist

  • [ ] Isinulat ko ang gawain na hindi ko gusto, ang OS/shell at security guardrails.
  • [ ] Ang script ay may error sa paghinto tulad ng set -euo pipefail / -ErrorAction Stop.
  • [ ] Nagdagdag ako ng walang laman na variable at input check bago tanggalin/ilipat.
  • [ ] Mayroong --dry-run/confirmation mechanism para sa mga mapanirang operasyon.
  • [ ] Walang lihim na naka-embed sa script; ang mga halaga ay nagmumula sa environment variable/case.
  • [ ] Ginawa ko ang unang pagsubok sa isang nakahiwalay na kapaligiran ng pagsubok na may dry-run.