Visos „Linux“ terminalo supergalios – išmaniajame telefone

Prieš pasinerdami į konkrečius privalumus, pirmiausia išsiaiškinkime kas yra tas magiškasis „terminalas“.

Kas tas „terminalas“?

Dažnas labiau įgudęs kompiuterių vartotojas sako – komandinėje eilutėje galima daug dalykų padaryti greičiau ir patogiau, nei grafinėje aplinkoje. Taigi, kas slepiasi už tekstinių komandų eilutės, kuri prieinama visose šiuolaikinėse operacinėse sistemose?

Visos modernios operacinės sistemos turi branduolį – esminę sistemos dalį, kuri kontroliuoja aparatinės ir programinės įrangos sąveiką. Pats populiariausias šiuo metu branduolys – Linus Torvalds sukurtas „Kernel“ – atvirojo kodo „Linux“ operacinių sistemų pamatas. Jei operacinė sistema naudoja „Kernel“ – ją galima priskirti „Linux“ operacinių sistemų grupei. Kadangi „Kernel“, kaip atvirojo kodo projektą, gali naudoti bet kas, yra labai daug „Linux“ operacinių sistemų variantų, vadinamų distribucijomis. Distribuciją sudaro branduolys, grafinė aplinka ir paketų tvarkyklė.

Ką bendro turi „Linux“ ir „Android“?

„Google“ kuriama atvirojo kodo operacinė sistema „Android“ pagrinde orientuota į mobiliuosius telefonus ir planšetes, tačiau neretai sutinkama televizoriuose, TV priedėliuose ir visokiausiose media dėžutėse, kurias pakanka prijungti prie ekrano ir jau galima mėgautis programėlėmis ir žaidimais. „Android“ operacinė sistema paremta „Linux“ branduoliu (nors ir stipriai modifikuotu), todėl pilnavertiškai gali būti priskiriama „Linux“ šeimos operacinėms sistemos. Net „Android“ saugos modelis stipriai remiasi „Linux“ pasaulyje įprastais komponentais, kaip štai „SELinux“ žemo lygio prieigų valdymu. Visa „Android“ architektūra turi kur kas daugiau sluoksnių nei kitos „Linux“ OS, bet faktas išlieka – esminis komponentas – branduolys – yra tas pats.

Branduolys atskiria du dalykus:

Nuo pat pradžių „Android“ sistemoje buvo siekiama, kad vartotojai galėtų kontroliuoti tik vartotojo erdvę. Labiau patyrę (o kartais – tiesiog ambicingi) vartotojai mėgdavo įrenginius root'inti – „Linux“ terminais tai reiškia įgauti privilegijuotąsias teises. O realiai tai reiškia – turėti galimybę valdyti branduolio erdvę. Vis dėlto, technologijose saugumą galima maksimizuoti tik ribojant prieigą – suteikti tik tiek galimybių, kiek yra neišvengiamai būtina, bet ne daugiau.

Terminalas „Android'e“

Terminalas „Linux“ (ir į ją panašios architektūros) operacinėse sistemose paprastai siūlo tekstinę sąsają, kurioje rašomomis komandomis galima sąveikauti ne tik su vartotojo erdve, bet ir dalimi ar visa branduolio erdve. T. y. turint privilegijuotojo vartotojo (root) galimybę, galima tiesiai pasiekti net ir aparatinę įrangą. Terminalas – iš esmės programa, kuri leidžia sąveikauti su šiomis abiejomis erdvėmis. Populiariausia terminalo programa – „Bash“, o šiai programai skirti komandų rinkiniai vadinami Bash scenarijais (scripts).

Jau išsiaiškinome, kad „Android“ yra priskirtina „Linux“ grupei, tad kaip pasiekti terminalą savo išmaniajame telefone?

Kone visose „Linux“ grupės operacinėse sistemose terminalo aplikacija jau būna integruota, tačiau „Android“ pagal nutylėjimą tokios neteikia. Bene geriausias variantas – naudoti atvirojo kodo programėlę „Termux“. Dėl tam tikrų apribojimų (kurie šiuo metu sprendžiami), pilnavertė programėlės versija negali būti platinama „Google Play“ programėlių parduotuvėje, tad ją įsidiegti reikėtų per alternatyvią atvirojo kodo programėlių parduotuvę „F-droid“. „Termux“ programėlę galima rasti čia.

Įdiegus ir paleidus „Termux“ jus pasitiks tamsus tekstinis langas – tai yra vaizdelis, kurį iš tiesų turėtų rodyti Holivudo filmai, kai demonstruojami hakeriai ir kompiuterių specialistai 😄 Šiame lange galima pradėti rašyti komandas.

Bene svarbiausias terminalo privalumas – „vamzdžiai“

Viena iš galingiausių terminalo funkcijų – galimybė vienos programos darbo rezultatą perduoti kitai ir taip suformuoti visą veiksmų grandinę, kurią galima išsaugoti Bash scenarijuje ir labai lengvai pakartotinai paleisti prireikus. Toks rezultato perdavimas iš vienos programos į kitą vadinamas pipe'inimu ir žymimas simboliu „|“, angliškai vadinamu pipe (lietuviškai tai galėtų būti vamzdis).

Konkretus pavyzdys

Pvz.: mes galime prisijungti prie internetinės sistemos programavimo/integracijų sąsajos (API), pasiimti iš jos informaciją, ją transformuoti savaip ir įrašyti į failą. Šiems veiksmams atlikti mums reikės kelių terminale veikiančių programų:

Komandos būtų tokios:

Prisijungiame adresu, kuris parodo informaciją apie mano naudojamą federuotą soc. tinklo serverį:

curl "https://social.gyt.is/nodeinfo/2.0"

Gautas rezultatas – JSON dokumentas, atrodantis taip:

{
  "version": "2.0",
  "software": {
    "name": "gotosocial",
    "version": "0.16.0+git-f1cbf6f"
  },
  "protocols": [
    "activitypub"
  ],
  "services": {
    "inbound": [],
    "outbound": []
  },
  "openRegistrations": false,
  "usage": {
    "users": {
      "total": 2
    },
    "localPosts": 2084
  },
  "metadata": {}
}

Jis nėra labai gražus (nes skirtas ne žmonėms, o automatizuotam apdorojimui), tad panaudokim jq ir pasiimkim tik serverio pavadinimą ir versiją, pridėję savo tekstą. Ir tuo pačiu, kadangi jau žinom kaip pasiimti duomenis su curl, rezultatą nukreipkime ne į ekraną (pagal nutylėjimą), o į kitą programą – šiuo atveju, JSON apdorojimo įrankį jq:

curl "https://social.gyt.is/nodeinfo/2.0" | jq -r '"Programa: " + .software.name + ", versija: " + .software.version'

Rezultatas mus pradžiugins:

Programa: gotosocial, versija: 0.16.0+git-f1cbf6f

Suformavome žmogui lengvai skaitomą informaciją. Tad dabar ją nukreipkime į failą. Tą terminale galima padaryti vietoje vamzdžio naudojant „>“:

curl "https://social.gyt.is/nodeinfo/2.0" | jq -r '"Programa: " + .software.name + ", versija: " + .software.version' > informacija.txt

Taigi, kataloge, kuriame esame, bus sukurtas failas informacija.txt, į kurį ir nuguls rezultatas.

Kas toliau?

Įrankiai curl ir jq yra tik keli iš galybės: tekstus padės apdoroti grep ir awk, pereiti į kitą katalogą padės cd, o atvaizduoti failų sąrašą kataloge – ls.

Kituose straipsniuose apie panaudojimo atvejus papasakosiu plačiau 🤓

Šiuo tekstu pirmiausia dalinausi „Samsung“ bendruomenėje.

#linux #kernel #samsung #samsungcommunity


Komentuokite paminėdami mane @gytisrepecka@social.gyt.is