Theory
ધાતુથી માંડીને તમારા સુધીનાં પડ
તમે campus ના server પર command ટાઇપ કરો અને પરિણામ દેખાય, ત્યારે એ થવા માટે પદ્ધતિના અનેક જુદા જુદા ભાગોએ સાથે મળીને કામ કર્યું હોય છે. Linux ની પદ્ધતિને પડોની થપ્પી તરીકે સમજવી સૌથી સારી છે, જેમાં દરેક પડનું કામ સ્પષ્ટ છે, અને એ સૌથી નીચેના ભૌતિક hardware થી માંડીને તમે વાપરો છો એ applications સુધી ફેલાયેલી છે.
આ વિચારનું હાર્દ, એટલે કે kernel અને shell વચ્ચેનો ભાગલો, તમે Operating Systems ના વિષયમાં જોઈ ચૂક્યા છો. આ પાઠ બધાં પડ ગોઠવીને મૂકે છે જેથી કયો ભાગ શું કરી રહ્યો છે એ તમને હંમેશા ખબર રહે, અને એથી ખામી શોધવી તથા commands શીખવા ઘણું સહેલું બને છે.
At a glance
| પડ | ભૂમિકા |
|---|---|
| Hardware | ભૌતિક યંત્ર: CPU, memory, disks, network, સાધનો |
| Kernel | હાર્દ: hardware, memory, processes, files અને device drivers સંભાળે છે |
| Shell | Command નો અર્થઘટક: તમારા commands વાંચે છે અને kernel ને એ કરવાનું કહે છે |
| GNU utilities | પ્રમાણભૂત commands અને ઓજારો (ls, cp, grep, અને બીજાં સેંકડો) |
| Applications | વપરાશકારના programs: editors, browsers, web servers, તમારા scripts |
Theory
Kernel અને shell
બે પડ ખાસ ધ્યાન માંગે છે, કારણ કે તમે Linux સાથે કઈ રીતે વર્તો છો એનું હૃદય એ જ છે.
Kernel એ operating system નું હાર્દ છે. એ જ એકમાત્ર ભાગ છે જે hardware સાથે સીધી વાત કરે છે, અને એ દરેક કીમતી વસ્તુ સંભાળે છે: memory, ચાલી રહેલા processes, file system, અને સાધનો સુધીની પહોંચ. તમે kernel સાથે કદી સીધી વાત કરતા નથી.
Shell એ તમારો ત્યાં સુધી પહોંચવાનો રસ્તો છે. Shell એવો program છે જે તમે ટાઇપ કરેલા commands વાંચે છે, તમને શું જોઈએ છે એ સમજે છે, અને kernel ને એ કરવાનું કહે છે. તમે ls ટાઇપ કરો ત્યારે shell એ program શોધીને ચલાવે છે, અને એ program kernel ને directory વાંચવાનું કહે છે. Shell એ પદ્ધતિની શક્તિ સુધી પહોંચવાનું તમારું દ્વાર છે.
Formula
Shell તમારી અને kernel ની વચ્ચે બેસે છે
પ્રવાહની કલ્પના કરો: તમે shell માં command ટાઇપ કરો છો; shell એનું અર્થઘટન કરીને kernel ને બોલાવે છે; kernel એ hardware ને આજ્ઞા આપે છે; અને પરિણામ પાછું ઉપર ચડીને તમારા પડદા સુધી આવે છે.
એટલા માટે જ આ વિષયમાં shell નું આટલું મહત્ત્વ છે: તમે ખરેખર જે પડ ચલાવો છો એ એ જ છે. તમે જે કંઈ શીખશો, એટલે કે commands, pipes અને scripts, એ લગભગ બધું નીચેના kernel ને દોરવા માટે shell ને અસરકારક રીતે વાપરવા વિશે જ છે. Shell શીખી લો, એટલે યંત્ર તમારી આજ્ઞામાં.
Quiz
તમે terminal પર command ટાઇપ કરો છો. કયો ભાગ એ command વાંચીને kernel ને એ કરવાનું કહે છે?
- Hardware, કારણ કે એ જ બધું ચલાવે છે
- Shell, જે તમે ટાઇપ કરેલા commands નું અર્થઘટન કરે છે અને kernel પાસે એ ચલાવવાની માંગણી કરે છે
- Kernel, કારણ કે તમે સીધું એમાં જ ટાઇપ કરો છો
- Application નું પડ, કારણ કે commands એ applications જ છે
Show the answer
Shell, જે તમે ટાઇપ કરેલા commands નું અર્થઘટન કરે છે અને kernel પાસે એ ચલાવવાની માંગણી કરે છે
Shell એ command નો અર્થઘટક છે: એ તમે જે ટાઇપ કરો છો એ વાંચે છે, તમારો ઇરાદો સમજે છે, અને kernel ને એ કરવાનું કહે છે. વિકલ્પ A ખોટો છે: hardware નીચલા સ્તરની સૂચનાઓ ચલાવે છે પણ તમે ટાઇપ કરેલા commands વાંચતું નથી; એને તો kernel દોરે છે. વિકલ્પ C એ સામાન્ય ગેરસમજ છે, કારણ કે તમે kernel માં સીધું ટાઇપ કરતા નથી; kernel ને કોઈ keyboard નો prompt હોતો નથી, અને તમારી તથા એની વચ્ચે ઊભું રહેતું પડ shell જ છે. વિકલ્પ D વાત ગૂંચવે છે: command ના programs software તો છે જ, પણ તમારી command line વાંચીને એને આગળ મોકલતો ભાગ ખાસ કરીને shell જ છે. સાંકળ યાદ રાખો: તમે shell ને ટાઇપ કરો છો, shell એ kernel ને કહે છે, અને kernel એ hardware ને ચલાવે છે.
Think first
Kernel અને shell ને મુદ્દલ અલગ કેમ રખાયાં છે?
એક જ મોટો program hardware સાથે વાત પણ કરે અને તમારા commands પણ લે, એવું કેમ ન રાખ્યું? એમને અલગ પાડવાથી શું મળે છે? વિચારીને પછી tap કરો.
Show the answer
એમને અલગ પાડવાથી રક્ષણ, લવચીકતા અને પસંદગી મળે છે. Kernel જોખમી અને વિશેષાધિકારવાળું કામ કરે છે, એટલે કે memory, hardware અને દરેક process પર કાબૂ રાખવાનું, તેથી એ નાનું, સાવધ અને સુરક્ષિત હોવું જોઈએ; તમે એમાં હાથ નાખીને એને ખલેલ પહોંચાડી શકો એ યોગ્ય નથી. બીજી બાજુ shell તો સામાન્ય program જ છે જેની સાથે તમે છૂટથી વર્તો છો. એમને અલગ રાખવાનો અર્થ એ કે સામાન્ય વપરાશકાર (કે ખામીવાળો command) પદ્ધતિના હાર્દને સીધું નુકસાન કરી શકતો નથી: kernel પહોંચ પર ચોકી કરે છે અને permissions નું પાલન કરાવે છે, જ્યારે તમે એની ઉપરના પડ પર સલામત રીતે કામ કરો છો. એનો બીજો અર્થ એ પણ કે તમે kernel ને જરાય બદલ્યા વગર તમારો shell પસંદ કરી શકો છો, એટલે કે Bash, Zsh અને બીજા, અને અનેક વપરાશકારો માટે અનેક shells એકસાથે ચલાવી શકો છો, જે બધા એક જ kernel વહેંચે છે. વળી તમે જે ઓજારો ટાઇપ કરો છો એનાથી સ્વતંત્ર રીતે kernel ને સુધારી કે બદલી શકાય છે. કામની આ સ્વચ્છ વહેંચણી, એટલે કે એક સુરક્ષિત હાર્દ અને એની સાથે બદલી શકાય એવાં દ્વારો, એ Linux ની અને એકંદરે operating systems ની મધ્યવર્તી રચનાત્મક સૂઝ છે, અને એટલા માટે જ એનો પરિચય તમારા OS ના વિષયમાં અપાયો હતો. હાર્દનું રક્ષણ કરો, અને દ્વારને લવચીક રહેવા દો.
Summary
Key takeaways
- Linux ની પદ્ધતિ પડોની થપ્પી છે: hardware, kernel, shell, GNU utilities અને applications.
- Hardware એ ભૌતિક યંત્ર છે; kernel એ હાર્દ છે જે એને તથા બધાં સાધનો સંભાળે છે.
- Shell એ command નો અર્થઘટક છે: એ તમારા commands વાંચે છે અને kernel ને એ ચલાવવાનું કહે છે.
- GNU utilities એટલે પ્રમાણભૂત commands (ls, cp, grep); applications એટલે સૌથી ઉપરના વપરાશકારના programs.
- પ્રવાહ આવો છે: તમે shell ને ટાઇપ કરો, shell એ kernel ને કહે, kernel એ hardware ને ચલાવે, અને પરિણામ પાછું આવે.
- Kernel અને shell એટલા માટે અલગ છે કે હાર્દ સુરક્ષિત રહે અને દ્વાર લવચીક તથા બદલી શકાય એવું રહે.
- યાદ રાખવાની કડી: shell એ તમારું દ્વાર છે; kernel એ ચોકી કરાયેલું હાર્દ છે.