Linux, Unix, GNU, macOS, Windows ja shellid
Linuxi kasutamisel kohtab kiiresti mitut sarnast sõna: Linux, Unix, GNU, macOS, Windows, shell, sh, bash, zsh, PowerShell, WSL. Need ei tähenda päris sama asja.
Lühidalt
- Unix oli ajalooline operatsioonisüsteemide perekond ja mõtteviis.
- Linux on kernel ehk tuum, mille ümber ehitatakse süsteem.
- GNU on tööriistade kogum, mis annab paljud tuttavad käsud ja utiliidid.
- macOS on Unix-laadne süsteem, kuid kasutab mitmes kohas BSD- ja Apple'i tööriistu.
- Windows ei ole Unix-laadne, kuid selle saab WSL-i abil väga Linuxi moodi tööle panna.
- Shell on käsutõlk, mille kaudu kasutaja käske sisestab.
Loogika
Selle peatüki mõte on anda õiged mõisted enne, kui käsud lähevad detailseks. Nii on hiljem lihtsam aru saada, milline käitumine tuleb shellist, milline Linuxi süsteemist, milline GNU tööriistadest ja millised erinevused tulevad macOS-ist või Windowsist.
Et samad töövood toimiksid eri masinates võimalikult sarnaselt, on kõige olulisem eristada kolme kihti:
- operatsioonisüsteem
- käsureatööriistad
- shell
Kui need kihid on sarnased, siis on ka õpiku näited sarnasemad.
Kiirspikker
uname -anäitab süsteemi infotecho $SHELLnäitab sinu vaikimisi shellips -p $$näitab käimasolevat shelliprotsessibash --versionvõizsh --versionnäitab shelli versioonicommand -v lsnäitab, kust käsk leitaksesw_versnäitab macOS-i versiooniwsl -l -vnäitab Windowsi WSL-jaotusi ja nende versiooni
Kasuta siit ainult neid käske, mis sobivad sinu masinaga:
sw_verson macOS-i jaokswsl -l -von Windowsi ja WSL-i jaoksuname -a,echo "$SHELL"japs -p $$on Unix-laadsetes shellides kõige üldisemad näited
Käivita need käsud
uname -a
echo "$SHELL"
ps -p $$
bash --version
zsh --version
sw_vers
wsl -l -v
Miks see oluline on
Kui loed dokumentatsiooni või juhendeid, siis:
- mõni käitumine tuleb kernelist
- mõni käitumine tuleb shellist
- mõni käsk on GNU variant ja võib teistes Unix-laadsetes süsteemides erineda
- mõni erinevus tuleb sellest, kas töötad päris Linuxis, macOS-is või Windowsis
Levinud shellid
shon ajalooline ja üldine shelliliidesbashon väga levinud GNU shellzshon paindlik interaktiivne shell, mida kasutatakse palju ka macOS-is- PowerShell on Windowsi käsukeskkond ja skriptikeel
Linux, Unix ja GNU erinevused
Praktikas öeldakse sageli "Linux", kuigi tegelik süsteem koosneb mitmest kihist:
- Linux annab kerneli
- GNU annab suure hulga käsureatööriistu
- distributsioon seob need tervikuks
Samas macOS on Unix-laadne, kuid paljud käsud ei ole seal GNU variandid. Näiteks sed, grep, find ja tar võivad käituda veidi teisiti kui Linuxis. Windows ei ole Unix-laadne, kuid WSL annab päris Linuxi kasutajaruumi, nii et enamik selle õpiku näiteid töötab seal otse.
macOS: miks see on sarnane
macOS tundub käsureal Linuxi moodi, sest:
- tal on Unix-laadne kasutajakeskkond
- seal on olemas
sh,bash,zsh,ssh,grep,sed,awk - failisüsteem, õigused ja torude loogika on tuttavad
- väga suur osa shelli- ja SSH-töövoost on sama
See on põhjus, miks suur osa siinsetest käsureatöövoogudest töötab macOS-is väikeste kohandustega.
macOS: mis on teisiti
macOS ei ole tavaliselt "GNU/Linux". Praktikas tähendab see:
- paketihaldur ei ole
aptvõidnf; kõige levinum lisapakettide tööriist on Homebrew ehkbrew - mitmed käsud on BSD variandid, mitte GNU variandid
- mõni lipp või vaikekäitumine erineb
- teenuste haldus ei käi
systemdkaudu
Kõige sagedasem praktiline erinevus on see, et Linuxi juhendis toodud lipp ei pruugi macOS-is sama moodi töötada.
Kuidas saada macOS võimalikult sarnaseks Linuxiga
Algaja jaoks ei ole tavaliselt vaja macOS-i vägisi Linuxi moodi ümber ehitada.
Enamasti piisab sellest:
- kasuta olemasolevat
zsh-i võibash-i - õpi selgeks põhilised käsud ja nende loogika
- paigalda Homebrew ainult siis, kui sul on päriselt vaja lisatarkvara
Mida macOS-is ei tasu vägisi samaks teha
Kõike ei ole mõtet Linuxi moodi suruda.
- Homebrew ei ole macOS-is vaikimisi sees; see on eraldi paigaldatav lisatööriist
brewon macOS-is loomulik paketihaldur siis, kui sul on vaja lisatarkvara- Finder ja rakenduste käivitamine jäävad Apple'i loogika järgi
- teenuste haldus ja süsteemikonfiguratsioon ei ole üks ühele Linuxiga
Hea eesmärk ei ole "teha macOS-ist Linux", vaid teha shelli- ja arendustöö piisavalt sarnaseks.
Kui sul tekib hiljem mõni konkreetne ühilduvusprobleem, siis lahenda see eraldi. Alguses ei ole vaja paigaldada GNU variante lihtsalt harjumuse pärast.
Windows: milline tee valida
Windowsis on kolm peamist teed:
WSL2: parim valik, kui tahad selle õpiku käske kasutada võimalikult päris Linuxi moodiPowerShell: parim valik Windowsi enda halduseksGit Bash: kerge ja mugav, aga mitte täielik Linux
Kui eesmärk on "see õpik töötaks samal moel", siis soovitus on väga selge: kasuta WSL2.
WSL tähendab Windows Subsystem for Linux. See on Windowsi võimalus käivitada päris Linuxi kasutajaruumi omaette keskkonnas. Praktikas tähendab see, et saad Windowsi sees avada Ubuntu või muu Linuxi keskkonna ja kasutada seal tavapäraseid Linuxi käske, pakette ja shelli.
WSL2 on uuem ja tavalisem variant. Õpiku mõttes on ta hea sellepärast, et käsud käituvad seal palju rohkem päris Linuxi moodi kui PowerShellis või vanas cmd.exe-s.
Kuidas saada Windows võimalikult sarnaseks Linuxiga
Kõige mõistlikum töövoog on:
- paigalda Windows Terminal
- paigalda WSL2
- vali näiteks Ubuntu
- tee käsureatöö WSL-i sees, mitte tavalises
cmd.exe-s
Alustuseks piisab sageli sellest:
wsl --install
Pärast paigaldust kontrolli:
wsl -l -v
Ja siis mine Linuxi sisse:
wsl
Seal sees hakkavad juba tööle tavapärased Linuxi käsud:
uname -a
echo "$SHELL"
sudo apt update
Kuidas Windowsis shelliga mõelda
Kui töötad WSL-is, siis loogika on:
- Windows on host-süsteem
- WSL annab Linuxi kasutajaruumi
- shell, paketid ja käsud töötavad Linuxi loogika järgi
Kui töötad PowerShellis, siis loogika on teine:
- toru ei kanna ainult teksti, vaid objekte
- käsunimed ja lühendid on teised
- paljud selle õpiku näited ei ole üks ühele kopeeritavad
See tähendab, et "sama moodi toimima" saad Windowsis kõige paremini WSL-i abil, mitte PowerShelli Linuxiks painutades.
Praktilised soovitused Windowsi jaoks
- hoia Linuxi projektid võimalusel WSL-i kodukataloogis nagu
~/projekt, mitte alati/mnt/c/... - kasuta Windows Terminali, mitte vana konsooli
- kasuta VS Code Remote WSL töövoogu, kui arendad Windowsist Linuxi tööriistadega
- kasuta PowerShelli siis, kui haldad Windowsi ennast
Mis jääb Windowsis ikkagi teistsuguseks
- failiteed ja kettatähed on teistsugused
CRLFjaLFvõivad tekitada segadust.exe,.batja Windowsi õiguste loogika ei ole sama mis Unixis- mõni tööriist töötab WSL-is paremini kui otse Windowsi failisüsteemis
Minitest
- Uuri välja, millist shelli sa kasutad.
- Võrdle käske
echo $SHELLjaps -p $$. - Kontrolli, kas sinu süsteemis on olemas
bash,zshjash. - Kui oled macOS-is, kontrolli käsuga
sw_vers, millist süsteemi kasutad. - Kui oled Windowsis, kontrolli käsuga
wsl -l -v, kas WSL on olemas. - Kirjelda ühe lausega, miks
WSL2sobib Linuxi-laadse käsureatöö jaoks paremini kui ainult PowerShell.