Topic: Linux Man Page Essentials Description: In this talk we shall understand how to move and jump around man page, how to search a man page, what are the conventions of man page, we shall take a look into ls man page as an example, and what are man page sections. Duration: 20 min Full Name: Martin Vijai Deepak About Yourself: Former IT Employee who worked only on Microsoft web application projects for 10 years. Currently Self employed (Non IT) and living in coimbatore. Adapting to the Linux/Ubuntu ecosystem 5 years back. Started learning Linux Administration from jan 2024.
Topic: Linux Man Page Essentials Description: In this talk we shall understand how to move and jump around man page, how to search a man page, what are the conventions of man page, we shall take a look into ls man page as an example, and what are man page sections. Duration: 20 min Full Name: Martin Vijai Deepak About Yourself: Former IT Employee who worked only on Microsoft web application projects for 10 years. Currently Self employed (Non IT) and living in coimbatore. Adapting to the Linux/Ubuntu ecosystem 5 years back. Started learning Linux Administration from jan 2024.
மதன்: என்ன ரொம்பத் தீவிரமா ஏதோ பாத்துட்டு இருக்கீங்க போல. கார்த்திகா: Terminal’ல பயன்படுத்தும் editors பத்தி படிச்சேன், அதாங்க vi, emacs, nano மதன்: Oh, எது easyயா இருக்கு? கார்த்திகா: nano தான்.
மதன்: எது கஷ்டமா இருக்கு? கார்த்திகா: vi மதன்: இந்த emacs டிரை பண்ணீங்களா? கார்த்திகா: பண்ணேன், ரொம்ப வித்தியாசமா இருக்கு. மதன்: ஆமாம் emacs வித்தியாசமாத்தான் இருக்கும், ஏன்னா அது editor உருவத்துல இருக்குற ஒரு language interpreter, அதாவது python மாதிரி. கார்த்திகா: என்னது, language interpreterரா?
மதன்: ஆமாம், emacs ஒரு Lisp language interpreter, Linux இருக்குறவங்க emacs ஐக் கிட்டத்தட்ட ஒரு operating systemனே சொல்லுவாங்க ஏன்னா அதுல இல்லாதது எதுவுமே இல்ல, அதுல இருக்குற plugins வேற எந்த ஒரு editorக்கும் கிடையாது. கார்த்திகா: எனக்கு எத கத்துக்கிட்டா long runல useபுல்லா இருக்கும்? மதன்: emacs தான், ஆனா நீங்க சொன்ன இந்த editors கத்துக்குறதுக்கு முன்னாடி ஒரு முக்கியமான editorர நீங்க கண்டிப்பாக் கத்துக்கனும், அந்த editorருக்குப் பேரு ed. கார்த்திகா: அப்படி என்ன அது அவ்வளவு முக்கியம்? மதன்: ஏன்னா orginal unixல இருந்த முதல் editor இதுதான். கார்த்திகா உடனே அதன் manualலை எடுத்துப் படிக்க ஆரம்பித்தாள். மதன்: எந்த manualல் page பார்க்குறீங்க? கார்த்திகா: man ed command போட்டு வர manualலைத்தான் மதன்: அது வேணாம் https://man.freebsd.org/ போய் ed கொடுத்து search பண்னுங்க, அதுல வர ed manualல படிங்க.
கார்த்திகா: ed ஒரு line oriented editorரா? மதன்: ஆம், அதுக்கு இரண்டு mode உண்டு,
ஒன்னு command mode
இன்னொன்னு insert mode
ed modes
நீங்க ed command கொடுத்து enter கொடுத்ததுமே அது defaultடா command modeலதான் இருக்கும், command modeல ஓவ்வொரு key pressசுக்கும் ஒரு அர்த்தம் உண்டு,
i அல்லது a key press
command modeல இருந்து insert modeக்குப் போக
ஒரு தனி lineன்ல . dot
insert modeல இருந்து command modeக்கு வர
w key கொடுத்து ஒரு space கொடுத்து பக்கத்துல file name கொடுக்கனும்
நாம செய்தத சேமிக்க
q
ed ல இருந்து வெளிய வர
command mode key press அர்த்தம்
command modeல இருந்து insert modeக்குப் போக i அல்லது a key press பண்ணனும். insert modeல எல்லா key pressசும் சாதாரண அர்த்தம்தான். insert modeல இருந்து command modeக்கு வர ஒரு தனி lineன்ல . dot வைக்கனும், நாம செய்தத சேமிக்க w key கொடுத்து ஒரு space கொடுத்து பக்கத்துல file name கொடுக்கனும், ed ல இருந்து வெளிய வர q கொடுக்கனும்.
அதன்படி கார்த்திகா செய்து பார்த்தாள்.
கார்த்திகா: Super, செம்மைய இருக்கு. அவள் ed editorரில் உருவாக்கிய கோப்பை cat பயன்படுத்தி என்ன இருக்கின்றது என்று பார்த்தாள்.
கார்த்திகா: ‘இருங்க இப்ப நான் அதே fileல edit பண்ணிப் பார்க்குறேன் அதே கோப்பை ed இல் மீண்டும் திறந்தாள்.
கார்த்திகா cat பயன்படுத்தி அந்தக் கோப்பைப் பார்ப்பதைக் கண்ட மதன் மதன்: ஏன் cat use பண்ணிப் பார்க்குறீங்க, ed லயே 1,$p அப்படின்னு command modeல இருக்கும்போது கொடுத்தா முழு fileலயும் காமிக்கும், அதாவது முதல் வரில இருந்து கடைசி வரி வரைக்கும் காண்பிக்கச் சொல்றோம், இத இன்னும் simpleளா ,p கொடுத்தும் பார்க்கலாம்.
அதன்படிக் கார்த்திகா செய்தாள்
மதன்: இனிதான் ed யோட பவர பார்க்கப் போறீங்க, அந்த fileல world இருக்குற line மட்டும் காட்ட g/world/p அப்படின்னு கொடுங்க.
கார்த்திகா அப்படியே செய்தாள்.
மதன்: இதுதான் நாம use பண்ற grep command, அதாவது ed யோட g//p தான் grep commandடா மாறுச்சு. மதன் கூறிவிட்டுச் சிரிக்க கார்த்திகாவும் புன்னகைத்தாள். மதன்: இன்னொரு power பார்க்கலாம், இப்போ world ல எடுத்துட்டு அதுக்கு பதிலா karthika அப்படின்னு வரவழைக்க 1,$s/world/karthika/g கொடுங்க, பிறகு ,p கொடுங்க கார்த்திகாவும் அப்படியே செய்தாள்.
கார்த்திகா: இது என்ன ? காட்டுது மதன்: ‘நீங்க world ஐ karthika ன்னு மாத்திட்டீங்கள்ள, அத save செய்யவில்லைன்னு காட்டுது, h கொடுங்க, இப்போ என்ன தவறு நடக்குதுன்னு காட்டும். கார்த்திகா அதைச் செய்தாள்.
கார்த்திகா: இப்போ w கொடுத்து save பண்ணனும் correctடா? ஆம் என்பதுபோல் மதன் தலை ஆட்டினான்.
கார்த்திகா: எனக்கு இந்த editor ரொம்பப் பிடிச்சிருக்கு மதன்: அப்போ உங்களுக்கு sed commandடும் மிகவும் பிடிக்கும், ஏன்னா sed என்பது stream editor அதாவது stream ed அப்படிங்குறத குறிக்குது. ed ல செய்யுற அத்தன commandசையும் sed லயும் செய்யலாம். கார்த்திகா: அப்போ, ed command தான் grep commandடுக்கும் sed commandடுக்கும் அடிப்படை correctக்டா? மதன்: அதுமட்டும் இல்ல, regex அப்படிங்குற concept முதன் முதலா implement பண்ண applicationனும் ed editor தான். மதன்: கார்த்திகா, இப்ப நீங்க ஒரு முக்கியமான கட்டத்துக்கு வந்துட்டீங்க, https://man.freebsd.org ல sh கொடுத்து வரும் manualல போய்ப் படிங்க, அத இப்ப நீங்க படிச்சீங்கன்னா superரா shell scripting கத்துப்பீங்க, அதுக்குத் தேவையான எல்லாம் இப்ப உங்ககிட்ட இருக்கு.
கார்த்திகா: ok, என்ன train பண்ணதுக்கு குருதட்சணையா என்ன செய்யனும்? மதன்:நீங்க எப்பவும் Linux பயன்படுத்தனும்.
கார்த்திகா: நேத்து நீங்க process பத்தி விளக்கிச் சொன்னீங்கல்ல, போய்ப் படிச்சேன். system’த்துல என்னென்ன process run ஆகுது, அந்த processகள எப்படிப் பார்க்கிறது, என்ன command use பண்ணனும், எல்லாம் தெரிஞ்சிக்கிட்டு வந்திருக்கேன். சொல்லட்டுமா? மதன்: ok கார்த்திகா: முதல்ல ps command, இந்த command மூலம் நம்ம systemத்தில் run ஆகிக்கொண்டிருக்கும் அத்தனை processகளையும் பார்க்க முடியும், இந்த command அப்படியே எந்த optionஷனும் கொடுக்காம run செஞ்சா current terminalலோட associate ஆகி இருக்கும் process மட்டும் list பண்ணும்.
கார்த்திகா: இதே commandடுக்கு x option கொடுத்தா, current userரோட எல்லா processகளையும் காட்டும்.
கார்த்திகா: இதே commandடுக்கு a option கொடுத்தால் systemத்தில் இருக்கும் terminalசோட associate ஆகி இருக்கும் அத்தனை processகளையும் காட்டும்.
கார்த்திகா: இப்போ ax ரெண்டு optionனையும் சேர்த்துக் கொடுத்தா systemத்துல current run ஆகும் அத்தனை processகளையும் காட்டும்.
கார்த்திகா: நான் சொன்னதெல்லாம் correctடா? மதன்: correct.
கார்த்திகா: அடுத்து top command, இது ஒரு TUI (Terminal User Interface) வகை command மதன்: அப்படின்னா? கார்த்திகா: அதாவது இந்த TUI வகையான application, GUI (Graphical User Interface) application மாதிரியே menu, window எல்லாம் இருக்கும், ஆனா எல்லாமே terminal’லையே இருக்கும். மதன்: அப்ப GUI அப்படின்னா என்ன? கார்த்திகா: கூகுள்ல சர்ச் பண்ணித் தெரிஞ்சிக்கோங்க கார்த்திகா:top commandடுக்கு வருவோம். இந்த command system எவ்வளவு cpu use பண்ணிக்கிட்டு இருக்கு, எவ்வளவு memory use பண்ணிக்கிட்டு இருக்கு, எந்த process அதிகமா cpu use பண்ணுது, எந்த process அதிகமா memory use பண்ணுது இப்படி எல்லா detailஸ்சும் காட்டும், correctக்டா?
மதன்: correct, அது மட்டும் இல்லாம top command மூலம் processகள் பற்றிய பல விஷயங்கள நாம தெரிஞ்சிக்கலாம், processகல controlலும் பண்ணலாம். கார்த்திகா:free command, இந்த command மூலமா நம்ம சிஸ்டத்துல எவ்வளவு memory இருக்குன்னு தெரிஞ்சிக்கலாம்.
மதன்: free commandடோட எந்த fieldட பார்த்து current systemத்தோட memory usageஜ தெரிஞ்சிப்பீங்க? கார்த்திகா: free command outputல Available fieldதான் systemத்துல எவ்வளவு memory மிச்சம் இருக்குன்னு காட்டும் மதன்: சரி மதன்: memory எவ்வளவு காலியா இருக்குன்னு வேற வழியிலயும் பார்க்கலாம் கார்த்திகா: ஆமாம் top commandடும் எவ்வளவு memeory காலியா இருக்குன்னு avail mem fieldடுல காட்டும் மதன்: ஆமாம், அது மட்டும் இல்லாம, இந்த commmandடும்
$ cat /proc/meminfo
available memory காட்டும்.
மதன்: இந்த outputல MemAvailable line தான் current systemத்தில் காலியா இருக்கும் memory கார்த்திகா: இந்த /proc file systemத்துல process பத்தின எல்லா detailsசும் இருக்கும் போல மதன்: ஆமாம் மதன்: ஒரு முக்கியமான command விட்டுட்டீங்க, kill command பத்தி படிச்சீங்களா. கார்த்திகா: ஆமாம், அதச் சொல்ல மறந்துட்டேன், kill command ஒரு processக்குப் பலவிதமான signalஸ் அனுப்பப் பயன்படுத்தப்படும் command.
$ kill 965
கார்த்திகா: இந்த 965 அப்படின்ற pid என்னோட current systemத்துல run ஆகும் pulseaudio அப்படின்ற processசோட pid, இப்ப நான் kill commandக்கு இந்த 965 pid கொடுத்தா pulseaudio process terminate ஆகிடும். மதன்: அது மட்டும் இல்லாம kill commandடுக்கு -L option கொடுத்தா ஒரு processசுக்கு எத்தனை விதமான signalஸ் அனுப்பலாம்னு காட்டும், signalஸ்சோட signal numberரையும் காட்டும்.
மதன்: இந்த signalஸ்ல முக்கியமான signalஸ்
9) SIGKILL
11) SIGSEGV
15) SIGTERM
18) SIGCONT
19) SIGSTOP
இதுல 15) SIGTERM தான் default signal, அதாவது kill commandக்கு எந்த signal கொடுக்கனும்னு சொல்லலைன்னா அது defaultடா 15) SIGTERM ஆ தான் processக்கு அனுப்பும், இந்த signal வந்தவுடன் அந்த processல இருக்குற SIGKILL signalலுக்கு உண்டான default signal handler அந்த processஸ terminalte பண்ணிடும்.
11) SIGSEGV சிக்னல் ஒரு process ஏதாவது கோக்குமாக்கா வேல செஞ்சதுனா, kernel பொடனியிலேயே ஒன்னு வச்சுப் போய் சாகுன்னு சாகடிக்கப் பயன்படுத்துற signal
19) SIGSTOP signal பயன்படுத்தி நாம ஒரு processச freeze பண்ண முடியும், அதாவது அது எந்த வேலையும் செய்யாது, ஆனா அந்த processச kernel terminate செய்யாது, அந்த processஸ 18) SIGCONT கொடுத்து மீண்டும் இயக்க வைக்கலாம்.
கார்த்திகா:9) SIGKILL பத்தி சொல்லவே இல்லையே? மதன்: 9) SIGKILL தான் ரொம்ப Dangerரான signal, ஒரு processச பாரபட்சமே இல்லாம உடனே சாகடிக்க பயன்படுத்துற signal, இந்த signal ஒரு processக்கு அனுப்பப்பட்டா அந்த processல இருக்குற சிக்னல் handlerருக்கு அந்த signal போகாம kernelலே அந்த processஸ்ச சாகடிச்சுடும், அதனால எப்பவும் இந்த SIGKILL பயன்படுத்தும்போது கவனமா இருக்கனும்.
கார்த்திகா: signalஸ்ல இவ்வளவு விஷயம் இருக்கா? Amazing. ஒருவர் மதனின் Monitorரையும் கார்த்திகாவின் laptopப்பையும் சுட்டிக்காட்டி ஒருவர்: Is anyone see what i see, that Desktop look like i3 and that other laptop look like cinnamon. மதன்: Exactly Comrade, Its i3 on top of btw and another one in கார்த்திகாஸ் laptop, That is cinnamon on top of Mint. கார்த்திகா: Mint புரியுது அது என்ன i3, cinnamon, btw? மதன்: cinnamon உங்கள் desktop environment, நீங்க login பண்ண உடனே வர்ற UI screen, Linuxல பல desktop environment இருக்கு, i3 என்னோட desktop environment, well, i3 is actually a window manager.
Cinnamon on top of Mint
i3 on top of Archlinux
ஒருவர்: That’s Great Comrade, never thought she is also one of us, btw I too use arch, Seems you are using default i3? why don’t you RICE? மதன்: I am not good in Art Comrade கார்த்திகா: So you guys are talking about Archlinux, But what is btw? மதன்: btw expansion by the way, Archlinux use பண்றவங்க, அவங்க Archlinux use பண்றத பெருமிதமாச் சொல்லிக்காட்ட btw I use arch அப்படின்னு சொல்லி மத்தவங்கள கடுப்பேத்துவாங்க, அதுவே போகப்போக மத்தவங்க அவங்கள கிண்டல் பண்றதுக்கும் அவங்களே அவங்கள கிண்டல் பண்ணிக்குறதுக்கும் ஒரு memeமா மாறிடுச்சு, அதுல இருந்து வந்ததுதான் இந்த btw, Archlinux க்கு இன்னொரு nick name.
கார்த்திகா: அடப் பாவிகளா, இப்படியுமா கலாய்ப்பீங்க? But what is that RICE? மதன்: அதுவா, உங்கள் Desktopப்ப உங்களுக்குப் புடிச்ச மாதிரி customize பண்றது, ஒரு சாதாரண கார் வாங்கி அதுல வித விதமா sticker ஒட்டி silincer மாத்தி உள்ள இருக்குற spare parts மாத்தி அதோட performance improve பண்றாங்கள்ள, அதுக்கு பேர் Race Inspired Cosmetic Enhancements (RICE), இதே terminologyயதான் unix உலகத்துல அவங்களோட desktop அவங்களுக்குப் புடிச்சாமாதிரி customize பண்றதுக்கு use பண்றாங்க, நீங்க unixporn [https://www.reddit.com/r/unixporn] reddit communityடில இருக்குற postடுங்க பாத்திங்கன்னா எல்லாம் இப்படி customize பண்ண Linux Desktop screen shot போஸ்ட்டுங்களாத்தான் இருக்கும்.
கார்த்திகா: Is this Linux? மதன்: Linux மட்டும் இல்ல BSD (Berkeley Software Distribution), macOS. கார்த்திகா: Anyway, நேரமாச்சு, see you next time Comrade.
மதன்: இப்ப நான் ஏன் உங்களுக்கு இந்த C program எப்படி compile பண்ணி run பண்றதுன்னு சொல்லிக் கொடுத்தேன் தெரியுமா? கார்த்திகா: இருங்க நானே சொல்றேன், ஒரு command அப்படிங்கறது machine புரியிற ELF format’ல இருக்குற ஒரு binary executable, அது நம்ம file system’த்துல ஒரு இடத்தில் save ஆகி இருக்கும் அந்த இடத்தைக் கண்டுபிடிக்க type command use பண்ணனும்.
type command’டால அந்த command கண்டுபிடிக்க முடியலன்னா எந்த இடத்துல அந்த command இருக்கோ அந்த Directory’ரிய PATH environment variable’ள்ல சேக்கனும் அப்படி இல்லன்னா direct’டா full path கொடுத்து execute பண்ணனும். மதன்: Correct, ஆனா நான் சொல்ல வந்தது அதுமட்டுமில்ல, நீங்க /home/karthika/a.out அப்படின்னு command type பண்ணி enter கொடுத்தீங்கள்ள, அப்ப என்ன நடந்தது? கார்த்திகா: என்ன நடந்தது, hello world அப்படின்னு output வந்தது. அதுக்குத்தான நாம C program எழுதினோம்? மதன்: அதுதான் எப்படி அந்த output வந்தது? கார்த்திகா: a.out command execute ஆச்சு, அந்த command வேலை hello world அப்படின்னு print பண்றது, அதனால hello world output வந்தது, அதானே? மதன்: அந்த a.out எப்படி execute ஆச்சு? கார்த்திகா: தெரியல, நீங்களே சொல்லுங்க மதன்: இங்க தான் நாம process அப்படின்னா என்னன்னு தெரிஞ்சுக்கனும். மதன் process பற்றி விவரிக்க ஆரம்பித்தான். நீங்க /home/karthika/a.out command type பண்ணி enter தட்டும்போது உங்க shell அந்த a.out binary executable file’லோட full path வாங்கி kernel கிட்ட கொடுத்து execute பண்ணச் சொல்லும், அப்ப linux kernel முதல்ல அந்த a.out fileல read பண்ணும், அது எந்த மாதிரியான binary formatல இருக்குன்னு முதல்ல கண்டுபிடிக்கும், நாம ஏற்கனவே பாத்தா மாதிரி, அந்த executable ELF formatல இருக்குன்னு தெரிஞ்சுக்கிட்டு அப்புறம் அந்த fileல read பண்ணி memoryயில் ஒரு இடத்துல அந்த a.out file contentட வெச்சிக்கும், அடுத்து a.out executable execute பண்ணத் தேவையான வேற சில libraries memoryயில் load செஞ்சிக்கும், இதுக்கு பேரு dynamic linking. அடுத்து அந்த a.out executableள execute பண்ணத் தேவையானது எல்லாம் load பண்ணதும் அந்த executableளோட entry point, அதாவது நம்ம C programல main() function இருக்குல்ல, அந்த functionன invoke பண்ணும், இப்படித்தான் நாம create பண்ண a.out executableள kernel memoryயில ஏத்தி ஒரு processசா மாத்தி execute பண்ணும், ஒவ்வொரு processக்கும் ஒரு id இருக்கு அதுக்கு பேரு process id அத pid அப்படின்னு சொல்லுவாங்க, ஒரு processசோட detail தெரிஞ்சிக்க cat /proc//status command run பண்ணித் தெரிஞ்சிக்கலாம்,
a.out executableல kernel கிட்ட கொடுத்து execute பண்ண சொல்லுச்சில்ல நம்ம shell, அதுதான் நம்ம a.out processசுக்கு parent process, அந்த shellலுக்கு நம்ம a.out process, one of the child process. ஒவ்வொரு processசுக்கும் ஒரு parent process இருக்கும், அந்த parent processஸ்ஸ child processஸ்ல இருந்து தெரிஞ்சுக்க easyயா child processஸ்ல parent processஸோட pid ய ppid அப்படின்னு save பண்ணி இருப்பாங்க. ppid மூலமா எந்த ஒரு processசோட parent processசையும் கண்டுபிடிச்சிடலாம். கார்த்திகா: நம்ம a.out processஸோட pid எப்படித் தெரிஞ்சிக்கிறது? மதன்: அதுக்கு C ல getpid() அப்படின்னு ஒரு function இருக்கு மதன் அவள் laptopப்பை வாங்கி source codeடைச் சரி செய்து அதை compile செய்து run செய்தும் காட்டினான்,
கார்த்திகா: அப்ப cat /proc/9810/status command run பண்ணா a.out processசோட details வரும் correctடா? மதன்: Run பண்ணிப் பாருங்க கார்த்திகா உடனே cat /proc/9810/status என்று type செய்து enter தட்டினாள், கார்த்திகா: என்ன /proc/9810/status அப்படிங்குற fileலே இல்லன்னு சொல்லுது? ok, நம்ம a.out command execute ஆகி முடிஞ்சிருச்சு அதனாலயா?
மதன்: Correct, 8300 try பண்ணிப் பாருங்க கார்த்திகா cat /proc/8300/status என்று type செய்து enter தட்டினாள்,
கார்த்திகா: நிறைய information இருக்கு, ஒன்னும் புரியல மதன்: கொஞ்சம் கொஞ்சமாகத்தான் புரியும், process, parent process, child process அப்படின்னா என்னன்னு புரிஞ்சதில்ல? கார்த்திகா: புரிஞ்சது, ஒரு doubt, அப்ப ppid track பண்ணிக்கிட்டு போனா, நாம boot பண்ணவுடன் start ஆன முதல் process detail கிடைச்சிடும் இல்ல? மதன்: ஆமாம், ஆனா இப்படி ppid track பண்ணிக்கிட்டுப் போறத விட simpleளா cat /proc/1/status அப்படின்னு போட்டு boot ஆனவுடனே start ஆன முதல் process details பாத்துடலாம். கார்த்திகா cat /proc/1/status என்று command run செய்தாள்
கார்த்திகா: systemd? இதுதான் எல்லாத்துக்கும் parent processசா?
மதன்: ஆமாம், அதுதான் நாம boot பண்ணவுடன் start ஆகும் முதல் process, அந்த process தான் பல child process start பண்ணும். pid 1 process init processஸ்னு சொல்லுவாங்க. அதோட binary executable எங்க இருக்குன்னு கண்டுபிடிங்க பாப்போம்?
கார்த்திகா type systemd என்ற command’டை run செய்ய /bin/systemd என்று வந்தது
மதன்: இன்னும் easyயா ஒரு வழி சொல்றேன்
sudo ls /proc/1/exe
command run பண்ணுங்க. கார்த்திகாவும் அதையே செய்தாள்
கார்த்திகா: Oh, அப்ப pid 1 executable /lib/systemd/systemd தானா? மதன்: ஆமாம் கார்த்திகா உடனே ls -l /proc/1 என்று ரன் செய்ய பல fileகள் இருந்தன
கார்த்திகா: இந்த fileகள்ல இருந்து அந்த pid 1 processஸுக்குனடான எல்லா detailsஸும் எடுத்துடலாம்போல? மதன்: Exactly, pickup பண்ணிட்டீங்க.
மதன்: இப்ப gcc command பத்தித் தெரிஞ்சுக்க என்ன பண்ணுவீங்க? கார்த்திகா: man gcc அப்படின்னு டைப் செய்து gcc யோட manual page படிக்கணும். SYNOPSIS ல just ஒரு input file மட்டும் கொடுத்தால் போதும்னு இருக்கு?
மதன்: ஆமாம் ஒரே ஒரு input file மட்டும் கொடுத்தால் போதும், என்ன ஆகுதுன்னு பாப்போமா?
கார்த்திகா Terminal’லில் தனது home directory’யில் இருந்து gcc helloworld.c என்ற command execute செய்தாள். கார்த்திகா: என்னது conio.h இல்லையா? மதன்: உங்களோட source code காட்டுங்க? கார்த்திகா அவள் எழுதிய Hello world program’மை cat command மூலம் terminal’லில் காட்டிவிட்டு gcc command output’டையும் காட்டினாள்
மதன்: conio.h header windows’ல மட்டும்தான் இருக்கும், linux’ஸில் இருக்காது, அது C language’ஜோட standard header இல்ல. கார்த்திகா: அப்ப அத remove பண்ணிடட்டா? மதன்: ஆமாம் அதன்படியே கார்த்திகா #include line remove செய்து மறுபடியும் gcc helloworld.c என்று run செய்தாள். கார்த்திகா: ரெண்டு warning, கடைசியில் ஏதோ error மாதிரி இருக்கு? கார்த்திகா மறுபடியும் terminalலில் இருந்த output’டைக் காட்டினாள்,
மதன்: ok, முதல் warning main function’னுக்கு default return type int அப்படின்னு சொல்லுது, அதனால நீங்க program முடிவுல return 0 அப்படின்னு return value கொடுக்கணும், ரெண்டாவது warning, getch() அப்படின்னு ஒரு function implicit’டா declare ஆகி இருக்குன்னு வருது, அடுத்து இருக்குற error, getch() அப்படிங்குற function’னே இல்லன்னு சொல்லுது கார்த்திகா: அப்ப main க்கு முன்னாடி int போட்டு கடைசீயில return 0; line சேக்கனும், அப்புறம் getch() லைன தூக்கனும் அப்படித்தானே? மதன்: அவ்வளவுதான் அதன்படி கார்த்திகா தன் source code மாற்றிக் காட்டினாள்,
கார்த்திகா: இப்ப ok’வா? மதன்: ok மாதிரிதான் தெரியுது, இப்ப compile பண்ணுங்க. கார்த்திகா gcc helloworld.c என்று ரன் செய்தாள். கார்த்திகா: என்ன எந்த output’டும் வரல? கார்த்திகா வியப்புடன் டெர்மினலைக் காட்டினாள்,
மதன்: அப்படின்னா சுக்கிரன் உச்சத்துல இருக்கான்னு அர்த்தம். எந்த complilation error’ரும் வரலைன்னு அர்த்தம். கார்த்திகா: இப்ப எப்படி Hello world program output பார்க்கிறது? மதன்: இப்ப நான் சில கேள்விகள் கேட்பேன், compile அப்படின்னா என்ன? கார்த்திகா: அதாவது text format’ட்ல இருக்குற source code’ட binary executable’லா மாத்துரது, அதுக்குத்தான் compiler தேவைப்படுது, அந்த compiler’தான் gcc. மதன்: இப்ப உங்க compile command எந்த ஒரு errorரையும் காட்டல, அப்படின்னா என்ன அர்த்தம்? கார்த்திகா: அப்படின்னா compiler successful’ல்லா binary executable’பில create பண்ணிடுச்சுன்னு அர்த்தம், அப்ப அந்த binary executable எங்க? மதன்: நீங்க எந்த Directory’யில் gcc command run பண்ணீங்களோ அதே Directory’ரியில் தான் இருக்கு. கார்த்திகா ls கமாண்ட் ரன் செய்தாள் கார்த்திகா: a.out அப்படின்னு இருக்கு? இதுதான் binary executableளா? கார்த்திகா கூகுளில் தேட file command கண்டுபிடித்தாள். file command manual படித்து அதை எப்படி run செய்ய வேண்டும் என்பதைக் கற்றுக் கொண்டாள். அதன்படி file a.out என்ற command run செய்தாள்,
கார்த்திகா: ஒரு மண்ணாங்கட்டியும் புரியல மதன்: மண்ணாங்கட்டிய புரிஞ்சுக்க கொஞ்சம் Time ஆகும், இப்போதைக்கு அந்த outputல ELF ன்னு இருக்குல்ல, அப்படின்னா a.out ஒரு ELF binary formatல இருக்குற ஒரு executable, அத நாம run பண்ணலாம்னு அர்த்தம், எங்க a.out command run பண்ணுங்க பாப்போம். கார்த்திகா a.out என்ற command run செய்தாள்,
கார்த்திகா: command இல்லையா, அதான் இருக்கே? மதன்: a.out எங்க இருக்குன்னு நமக்கு தெரியும், bash shellலுக்கு தெரியணுமே, அதுக்கு என்ன பண்ணனும்? கார்த்திகா: Oh, right PATH environment variable set பண்ணனும் மதன்: அப்படியும் பண்ணலாம், இல்ல simple’பிளா a.out executable’ளோட full path கொடுக்கலாம். கார்த்திகா full path’த்தையும் கொடுத்து a.out excutable’பிளை run செய்தாள்.
கார்த்திகா: Linux commands படிக்க படிக்க வந்துக்கிட்டே இருக்கு எப்படி நியாபகம் வெச்சிருக்கீங்க? மதன்: எல்லாத்தையும் நியாபகம் வச்சிருக்க முடியாது, நாம regular’ரா use பண்றது மட்டும் தான் நம்ம நியாபகத்துல இருக்கும், நாம regular’ரா linux use பண்ண கத்துக்க வேண்டியது ரெண்டு விஷயம், ஒன்னு File system structure, ரெண்டாவது Process. நேத்திக்கு நீங்க சொன்ன commands எல்லாம் file system சம்பந்தப்பட்ட commands, இப்ப நீங்க தெரிஞ்சுக்க வேண்டியது Process, உங்களுக்கு process’னா என்னன்னு தெரியுமா?
Process தான் ஒரு Operating system’த்தின் நாடித் துடிப்பு
கார்த்திகா: Collegeல operating system பத்தி படிக்கிறப்ப கேள்விப்பட்டிருக்கேன். ஆனா முழுசா என்னன்னு தெரியாது மதன்:Process தான் ஒரு Operating system’த்தின் நாடித் துடிப்பு, நீங்க C ல Hello world program எழுதி இருக்கீங்களா? கார்த்திகா: என்னங்க, C programming கத்துக்கிறவங்க அந்த program தான் முதல்ல எழுதுவாங்க, எனக்கும் C programming தெரியும். மதன்: அப்ப எப்படி நீங்க C ல Hello world எழுதுவீங்கன்னு சொல்லுங்க பாப்போம்? கார்த்திகா: TurboC’ல, C program எழுதி alt-f9 அழுத்துனா compile ஆகும், ctrl-f9 அழுத்துனா நாம எழுதின program run ஆகி Hello world அப்படின்னு output காட்டும்.
Turbo C IDE
மதன்: Right ,TurboC’ன்னு ஒன்னு double click பண்றீங்களே, அது என்னன்னு தெரியுமா? கார்த்திகா: TurboC compiler மதன்: TurboC வெறும் compiler மட்டும் இல்லைங்க, அது ஒரு IDE. ஆனா ஒரு C programming எழுத நமக்கு IDE வேணும்கற அவசியம் இல்ல, ஒரு சாதாரண text file create பண்ற ஒரு text editor இருந்தாப் போதும். அடுத்து நாம அந்த editor’ல எழுதின C source கோட machine’க்கு புரியிற binary executable’ளா மாத்த ஒரு compiler வேணும் அவ்வளவுதான். கார்த்திகா: அப்படின்னா ஒரு சாதாரண notepad’ல நாம C program எழுதலாமா? மதன்: கண்டிப்பா, முதல்ல ஒரு text editor ஒப்பன் பண்ணுங்க. Hello world C program type செஞ்சு save பண்ணுங்க. கார்த்திகா: /home/karthika/helloworld.txt அப்படின்னு save பண்ணி இருக்கேன். மதன்: அந்த .txt எடுத்துட்டு .c அப்படின்னு save பண்ணுங்க கார்த்திகா: ஓ, ஆமாம்ல, C program .c அப்படின்னு தான் extension இருக்கனும்ல, மறந்துட்டேன். மதன்: Linux’ஸில் இருக்குற C compiler .txt க்கும் .c க்கும் வித்தியாசம் பாக்காதுங்க, அத பொருத்தவர நீங்க compile பண்ண கொடுக்கிறது ஒரு சாதாரண text file. கார்த்திகா: அப்ப .txt அப்படின்னு extension இருந்தாலும் compile பண்ணுமா? மதன்: Extension’ஷனே இல்லாம ஒரு text file கொடுத்தாலும் compile பண்ணும், அதுக்கு தேவ ஒரு C source அவ்வளவுதான், நாம easy’யா கண்டுபிடிக்கத்தான் .txt அப்படின்னு இருந்தத .c க்கு மாத்த சொன்னேன். கார்த்திகா: சரி, இப்ப இந்த /home/karthika/helloworld.c file’ல எப்படி Linux’ல compile பண்றது? மதன்: அதுக்கு apt command use பண்ணி gcc compiler package install பண்ணுங்க, gcc மட்டும் install பண்றதுக்கு பதிலா packaging-dev அப்படின்னு ஒரு meta package இருக்கு, அத install பண்ணா இன்னும் முக்கியமான சில package’கள் install ஆகும், அதனால, gcc க்கு பதிலா packaging-dev இன்ஸ்டால் பண்ணுங்க. அதன்படியே கார்த்திகாவும் terminal’லில் apt install packaging-dev, type செய்து install செய்தாள். மதன்: இப்ப நீங்க install பண்ண C compiler பேரு gcc, அதாவது gnu-compiler-collection, நான் Linux history சொல்லும்போது கூட Stallman ஒரு C compiler முதல்ல ருவாக்குனார், அதத்தான் Linus Torvalds linux kernal’னல உருவாக்கப் பயன்படுத்தினார்னு சொன்னேன்ல, அந்த compiler இதுதான். கார்த்திகா: Linux’ல் உண்மையிலேயே ஒவ்வொரு command’டுக்கு பின்னாடி ஒரு சுவாரஸ்யமான history இருக்கு, அத தெரிஞ்சிக்கிட்டு அந்த command use பண்றது ரொம்ப interesting’கா இருக்கு. மதன்: இப்ப gcc command install ஆகி இருக்கா இல்லையான்னு எப்படிக் கண்டுபிடிப்பீங்க? கார்த்திகா: Just அந்த command run பண்ணும் போது அந்த command install ஆகலைன்னா command not found அப்படின்னு error வரும். மதன்: Run பண்ணாம கண்டுபிடிக்கனும். கார்த்திகா Google’ளில் தேடி type என்ற ஒரு command நாம் கொடுக்கும் command இருக்கா இல்லையா என்று சொல்லும் என்று கண்டுபிடித்தாள். மதன்: Super, இப்ப அந்த type command எப்படி run பண்ணுவீங்க? கார்த்திகா: அதான் man page இருக்கே. கார்த்திகா man type என்று கொடுத்தாள்,ஆனால் type command’டுக்கு manual pageஇல்லை என்று வந்தது.
கார்த்திகா: என்னங்க, Manual இல்லைன்னு வருது? மதன்: எல்லா command’டுக்கும் manual page இருக்காதுங்க, அதுக்கு பதிலா type –help அப்படின்னு run பண்ணுங்க. கார்த்திகாவும் அதன்படியே command type செய்து enter தட்டினாள். type command’டின் சிறிய help வந்தது அதில் அந்த command’டுக்கு என்னவெல்லாம் option’ன்கள் கொடுக்கலாம் என்று குறிப்பிடப்பட்டிருந்தது. ஆனால் manual page’ஜைப் போல் விவரமாக இல்லை.
மதன்: Linux’ஸ்ல இருக்குற தொண்ணூறு சதவீதம் command’ஸுக்கு –help அல்லது -h option கொடுத்தால் அந்த command பத்திச் சின்னதா details output காட்டும், ஆனா அந்த details, proper manual page மாதிரி இருக்காது. கார்த்திகா type –help output’டில் இருந்த விவரங்களைப் படித்துவிட்டு type gcc என்ற command run செய்தாள், உடனே gcc command இருக்கும் இடம் /usr/bin/gcc என்று type command காட்டியது.
கார்த்திகா: அடுத்து chown, இது ஒரு file அல்லது folder’ரோட owner அண்டு group change பண்ண use பண்றது, For example
$ chown karthika:karthika /tmp/rootfile.txt $
command /tmp/rootfile.txt file’லோட owner karthika and group karthika அப்படின்னு மாத்திடும். correct’டா? மதன்: correct, அது மட்டும் இல்லாம
$ chmod -R karthika:karthika /home/karthika $
command /home/karthika folder மட்டும் இல்லாம அதுக்கு உள்ள இருக்குற எல்லா file and folder’ரோட user மற்றும் group’ப்ப karthika யூசருக்கும் karthika குரூப்பிற்கும் மாத்திடும்.
df command
கார்த்திகா: அடுத்து df, இந்த command file system’த்தோட map ஆயிருக்குற ஒவ்வொரு partition’ஷனோட usage செல்லும்’. மதன்: முக்கியமா df -h command partition’ஷனோட size giga byte(G)/mega byte(M)/kilo byte(K) கணக்கில் காட்டும்.
கார்த்திகா: அடுத்து du, இந்த command current folder’டரில் இருக்கும் ஒவ்வொரு file’லோட size காட்டும், அது மட்டும் இல்லாம
$ du -sh 637M $
current folder’ரோட size காட்டும் மதன்: ஆமாம்.
mount command
கார்த்திகா: அடுத்து mount command, இது system’த்துல எந்தெந்த device எந்தெந்த folder’ர்ல map ஆகி இருக்குன்னு காட்டும்.
$ mount proc on /proc type proc (rw,relatime) sysfs on /sys type sysfs (rw,relatime) dev on /dev type devtmpfs (rw,relatime,size=500092k,nr_inodes=125023,mode=755) /dev/sda1 on / type ext4 (rw,relatime) tmpfs on /rwroot type tmpfs (rw,relatime,size=10088960k) tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000) tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755) tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755) cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,name=systemd) cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio) tmpfs on /tmp type tmpfs (rw,nosuid,nodev) $
find command
கார்த்திகா: find, இது current folder’ரில் இருக்கும் எல்லா file and folder name’கள காட்டும், அப்புறம் current folder’ருக்கு உள்ள இருக்குற ஒவ்வொன்னு உள்ளேயும் போய் அதுக்குள்ள இருக்கிற file and folder’டர காட்டும் இப்படியே எல்லா file name அண்ட் folder name’கள காட்டும். மதன்: அது மட்டும் இல்லைங்க, find வச்சிப் பல விஷயங்களைப் பண்ணலாம், உதாரணத்துக்கு
command உங்க current folder’ருக்குள்ள ஏதாவது ஒரு sub folders’குள்ள ஒரு file அல்லது folder ரெண்டு வருஷத்துக்கு முன்னாடி modify ஆகியிருந்தா அந்த file அல்லது folder name மட்டும் காட்டும். நாம touch கமாண்ட் வெச்சு emptyfile.txt பைல் மோடிபைட் டைம்ஸ்டாம்ப 1900-01-01 டேட்டுக்கு மாத்தினோம்ல, அத இந்த find கமாண்ட் தேடிக் கண்டுபிடிச்சுக் காட்டிடும்.
command என்னோட home folder’ரோட size, security bits, கடைசியாக access பண்ண time, கடைசியாக change ஆன time, last creation time, owner யார், எந்த எந்த group access பண்ணலாம் போன்ற நிறைய details பாக்கலாம் மதன்: ஆமாம்
rm command
கார்த்திகா : அடுத்து rm, very dangerous command, ஒரு file அல்லது folder’டர remove பண்ண use பண்ற command.
$ rm /home/karthika/emptyfile.txt $
command என்னோட home folder’டர்ல இருக்கும் emptyfile.txt fileல தூக்கிடும்.
$ rm -fr /home/karthika $
command கேள்வியே கேட்காம என்னோட home folder’டரையே தூக்கிடும்
command, emptyfile.txt file’லோட user (u) permission, படிக்க (r), எழுத மற்றும் செயல்படுத்த (x) அனுமதிக்கும் (+), அப்புறம் emptyfile.txt file’லோட group permission, படிக்க (r), செயல்படுத்த (x) அனுமதிக்கும் (+), அதே போல மற்றவர்களுக்கு (o) படிக்க (r) மற்றும் செயல்படுத்த (x) அனுமதிக்கும். இங்க (+) symbol’லுக்கு பதில் (-) symbol போட்டா அனுமதி மறுக்கப்படும். இப்படி ugo+-rwx characters பயன்படுத்துவதற்கு பதிலா அதே permission’ன
$ chmod 755/home/karthika/emptyfile.txt $
command use பண்ணியும் set பண்ணலாம், இங்க முதல்ல இருக்கிற 7, user permission bit set பண்ணும், 7=4+2+1, அதாவது படிக்க (4), எழுத (2) மற்றும் செயல்படுத்த (1) அனுமதிக்கும், அடுத்து இருக்கும் 5, group permission bit set பண்ணும், 5=4+1, அதாவது படிக்க (r) மற்றும் செயல்படுத்த (x) மட்டும் அனுமதி அளிக்கும். அடுத்து இருக்கும் 5, others permission set பண்ணும். கரெக்டா? மதன்: Amazing, super’ப்பரா explain பண்றீங்க, சீக்கிரம் ilugc ல class எடுங்க
கார்த்திகா: அடுத்து ls, இந்த command terminal open பண்ணிட்டு ஒரு முறையாவது use பண்ணாம இருக்க மாட்டீங்க.
ls command
current folder’ரில் இருக்கும் file மற்றும் folder’களை list பண்ணும்
ls -R command
உள்ளுக்குள்ள எத்தன folder இருந்தாலும் அத்தனை folder’ரில் இருக்கும் file மற்றும் folder’களையும் list பண்ணும்
ls -l command
detailed list பண்ணும்
ls command with folder path
கொடுத்த folder’ரில் இருக்கும் file மற்றும் folder’களை list பண்ணும்
ls command
கார்த்திகா: வெறும் ls command current folder’ரில் இருக்கும் file மற்றும் folder’களை list பண்ணும். அதுவே ls -R command, உள்ளுக்குள்ள எத்தன folder இருந்தாலும் அத்தனை folder’ரில் இருக்கும் file மற்றும் folder’களையும் list பண்ணும். அப்புறம் ls -l command detailed list பண்ணும், இந்த ls command’க்கு ஒரு folder’ரோட path கொடுத்தா, அது current folderர விட்டுட்டு கொடுத்த folder’ரில் இருக்கும் file மற்றும் folder’களை list பண்ணும். உதாரணத்துக்கு ls -l ~/Downloads command current folder’ரை விட்டுட்டு, Home folder’ரில், அதாவது /home/karthika folder’க்குல்ல இருக்குற Downloads folder’ர list பண்ணும்.
மதன்: Correct, அது மட்டும் இல்லாம -l option கொடுக்கும் போது output’ல ஒவ்வொரு line’னில் முதல்ல இருக்கிற பத்து character’கள் தான் அந்த entry’க்கு சொந்தமான file அல்லது folder’ருக்கான permission bits, இத நான் முன்னாடியே உங்ககிட்ட சொல்லியிருக்கேன். கார்த்திகா: நியாபகம் இருக்கு.
mkdir command
கார்த்திகா: அடுத்து mkdir, இது மூலமா ஒரு folder create பண்ணலாம். அது மட்டும் இல்லாம
கார்த்திகா: அடுத்து cd, இது ஒரு folder’ரில் இருந்து இன்னொரு folder’ருக்கு மாற உதவும். மதன்: இப்படியும் சொல்லலாம், terminal process’சோட current folder’ர change பண்ண use பண்ற command அப்படின்னும் சொல்லலாம். கார்த்திகா: என்ன குழப்பாதீங்க, simple’ளா சொல்லனும்னா,
cd /home/karthika/Downloads
command, Downloads folder’ருக்குள்ள போக உதவும். மதன்: அதைத்தான் நானும் சொல்றேன்,
cd /home/karthika/Downloads
command, current terminal process’சோட current folder’ரை /home/karthika/Downloads folder’ருக்கு மாத்தும்.
ஒன்னு absolute path, அடுத்தது relative path
மதன்: அது மட்டும் இல்லைங்க unix’ல ஒரு file அல்லது folder’ரோட இடத்த இரண்டு வகையாக் குறிப்பிடலாம், ஒன்னு absolute path, அடுத்தது relative path, உங்க home folder’ரில் இருக்குற Downloads folder’ருக்கு போகனும்னா
cd /home/karthika/Downloads
அப்படின்னு கொடுக்கலாம், இல்லாட்டி உங்க home folder’ரில் இருந்துகிட்டு வெறும்
cd Downloads
அப்படின்னு கொடுக்கலாம். வெறும் Downloads அப்படின்னு குறிப்பிடுவதற்குப் பேரு relative path, /home/karthika/Downloads அப்படின்னு குறிப்பிடுவது absolute path. Relative path கொடுக்கும்போது ஆட்டோமேட்டிக்கா cd command current folder’ர கணக்குல எடுத்துக்கும்.
$ cd /home/karthika/Downloads $ pwd /home/karthika/Downloads $ cd Downloads $ pwd /home/karthika/Downloads
உதாரணம்
home folder’ரைக் குறிக்கும் ~ symbol
மதன்: இன்னும் simple’ளா
cd ~/Downloads
command’டும் Downloads folder’க்குள்ள போக உதவும், இங்க ~ symbol உங்க home folder’ரைக் குறிக்குது, அதனால இங்க நீங்க use பண்றது relative path இல்ல, absolute path.
$ cd ~ $ pwd /home/karthika $ cd ~/Downloads $ pwd /home/karthika/Downloads $
உதாரணம்
வெறும் cd command
மதன்: cd command’டோட இன்னொரு விஷயம், நீங்க எந்த folder’க்குல்ல இருந்தாலும் வெறும் cd type பண்ணிட்டு enter அழுத்தினீங்கன்னா உடனே நீங்க உங்க home folder’ரில் இருப்பீங்க.
$ pwd /home/karthika/Downloads $ cd $ pwd /home/karthika
உதாரணம்
cd – command
மதன்: அதேபோல் மறுபடியும் last’டா இருந்த folder’ருக்கு போகனும்னா cd – command கொடுத்தா போதும், automatic’க்கா நீங்க last’டா இருந்த folder’ருக்கு மாறிடுவீங்க
$ cd – $ pwd /home/karthika/Downloads $ cd $ pwd /home/karthika $
உதாரணம்
கார்த்திகா: Interesting, cd command’ல இவ்வளவு இருக்கா?
கார்த்திகா: Hi மதன்: வாங்க, என்ன ஏதோ அவசரமா வந்திருக்கீங்க.
pwd
cd
ls
mkdir
rmdir
cp
mv
touch
stat
rm
chmod
chown
df
du
mound
find
Few important commands
கார்த்திகா: அதெல்லாம் ஒன்னும் இல்ல, last time file system’டத்த பத்தி சொல்லும்போது mount, cd, ls, chmod பத்திச் சொன்னீங்கள்ல, இந்த command’களோட manual page படிச்சு use பண்ணிப் பாத்தேன், அது மட்டும் இல்லாம google பண்ணும்போது pwd, mkdir, rmdir, cp, mv, touch, stat, rm, chown, dh, du, find command’களும் important’னு சொல்லுச்சு. அதுங்களோட manual page படிச்சேன், எனக்குப் புரிஞ்சது சொல்றேன் correct’டான்னு சொல்லுங்க.
Command Prompt
கார்த்திகா: First ஒரு Terminal open பண்ணா முதல்ல நாம பாக்குறது command prompt, உதாரணத்துக்கு
[karthika@karthikalaptop0 ~] $
உதாரணம்
போல இருக்கும், @ symbol’லுக்கு முன்னாடி இருக்கிறது இப்ப login ஆகி இருக்கும் user’ரோட user name, @ symbol’லுக்கு அடுத்து இருக்குறது இப்ப use பண்ணிட்டு இருக்குற computer’ரோட name. space character’டருக்கு அடுத்து இருக்கும் ~ symbol terminal’லோட current folder Home folder‘னு குறிப்பிடுது, அதாவது /home/karthika folder’ரைக் குறிக்குது. மதன்: Correct, அதுமட்டுமில்லாம unix’ல ஒவ்வொரு process’சுக்கும் current folder’னு ஒன்னு இருக்கு, terminal’லும் ஒரு process, ஆரம்பிக்குறப்போ அதோட current folder current user’ரோட home folderருக்கு set பண்ணிக்கும்.
pwd command
$ pwd /home/karthika $
கார்த்திகா: அடுத்து pwd, இது file system’த்துல நாம இப்ப எந்த folder’ரில் இருக்கோம்னு சொல்லும். அந்த folder’ரோட full path சொல்லும். correct’டா? மதன்: இத இன்னொரு விதமாகவும் செல்லலாம், pwd command, terminal process’சோட current folder’ரோட முழு path’தையும் காட்டும்.
மதன்: என்ன ரொம்பத் தீவிரமா ஏதோ பாத்துட்டு இருக்கீங்க போல. கார்த்திகா: Terminal’ல பயன்படுத்தும் editors பத்தி படிச்சேன், அதாங்க vi, emacs, nano மதன்: Oh, எது easyயா இருக்கு? கார்த்திகா: nano தான்.
மதன்: எது கஷ்டமா இருக்கு? கார்த்திகா: vi மதன்: இந்த emacs டிரை பண்ணீங்களா? கார்த்திகா: பண்ணேன், ரொம்ப வித்தியாசமா இருக்கு. மதன்: ஆமாம் emacs வித்தியாசமாத்தான் இருக்கும், ஏன்னா அது editor உருவத்துல இருக்குற ஒரு language interpreter, அதாவது python மாதிரி. கார்த்திகா: என்னது, language interpreterரா?
மதன்: ஆமாம், emacs ஒரு Lisp language interpreter, Linux இருக்குறவங்க emacs ஐக் கிட்டத்தட்ட ஒரு operating systemனே சொல்லுவாங்க ஏன்னா அதுல இல்லாதது எதுவுமே இல்ல, அதுல இருக்குற plugins வேற எந்த ஒரு editorக்கும் கிடையாது. கார்த்திகா: எனக்கு எத கத்துக்கிட்டா long runல useபுல்லா இருக்கும்? மதன்: emacs தான், ஆனா நீங்க சொன்ன இந்த editors கத்துக்குறதுக்கு முன்னாடி ஒரு முக்கியமான editorர நீங்க கண்டிப்பாக் கத்துக்கனும், அந்த editorருக்குப் பேரு ed. கார்த்திகா: அப்படி என்ன அது அவ்வளவு முக்கியம்? மதன்: ஏன்னா orginal unixல இருந்த முதல் editor இதுதான். கார்த்திகா உடனே அதன் manualலை எடுத்துப் படிக்க ஆரம்பித்தாள். மதன்: எந்த manualல் page பார்க்குறீங்க? கார்த்திகா: man ed command போட்டு வர manualலைத்தான் மதன்: அது வேணாம் https://man.freebsd.org/ போய் ed கொடுத்து search பண்னுங்க, அதுல வர ed manualல படிங்க.
கார்த்திகா: ed ஒரு line oriented editorரா? மதன்: ஆம், அதுக்கு இரண்டு mode உண்டு,
ஒன்னு command mode
இன்னொன்னு insert mode
ed modes
நீங்க ed command கொடுத்து enter கொடுத்ததுமே அது defaultடா command modeலதான் இருக்கும், command modeல ஓவ்வொரு key pressசுக்கும் ஒரு அர்த்தம் உண்டு,
i அல்லது a key press
command modeல இருந்து insert modeக்குப் போக
ஒரு தனி lineன்ல . dot
insert modeல இருந்து command modeக்கு வர
w key கொடுத்து ஒரு space கொடுத்து பக்கத்துல file name கொடுக்கனும்
நாம செய்தத சேமிக்க
q
ed ல இருந்து வெளிய வர
command mode key press அர்த்தம்
command modeல இருந்து insert modeக்குப் போக i அல்லது a key press பண்ணனும். insert modeல எல்லா key pressசும் சாதாரண அர்த்தம்தான். insert modeல இருந்து command modeக்கு வர ஒரு தனி lineன்ல . dot வைக்கனும், நாம செய்தத சேமிக்க w key கொடுத்து ஒரு space கொடுத்து பக்கத்துல file name கொடுக்கனும், ed ல இருந்து வெளிய வர q கொடுக்கனும்.
அதன்படி கார்த்திகா செய்து பார்த்தாள்.
கார்த்திகா: Super, செம்மைய இருக்கு. அவள் ed editorரில் உருவாக்கிய கோப்பை cat பயன்படுத்தி என்ன இருக்கின்றது என்று பார்த்தாள்.
கார்த்திகா: ‘இருங்க இப்ப நான் அதே fileல edit பண்ணிப் பார்க்குறேன் அதே கோப்பை ed இல் மீண்டும் திறந்தாள்.
கார்த்திகா cat பயன்படுத்தி அந்தக் கோப்பைப் பார்ப்பதைக் கண்ட மதன் மதன்: ஏன் cat use பண்ணிப் பார்க்குறீங்க, ed லயே 1,$p அப்படின்னு command modeல இருக்கும்போது கொடுத்தா முழு fileலயும் காமிக்கும், அதாவது முதல் வரில இருந்து கடைசி வரி வரைக்கும் காண்பிக்கச் சொல்றோம், இத இன்னும் simpleளா ,p கொடுத்தும் பார்க்கலாம்.
அதன்படிக் கார்த்திகா செய்தாள்
மதன்: இனிதான் ed யோட பவர பார்க்கப் போறீங்க, அந்த fileல world இருக்குற line மட்டும் காட்ட g/world/p அப்படின்னு கொடுங்க.
கார்த்திகா அப்படியே செய்தாள்.
மதன்: இதுதான் நாம use பண்ற grep command, அதாவது ed யோட g//p தான் grep commandடா மாறுச்சு. மதன் கூறிவிட்டுச் சிரிக்க கார்த்திகாவும் புன்னகைத்தாள். மதன்: இன்னொரு power பார்க்கலாம், இப்போ world ல எடுத்துட்டு அதுக்கு பதிலா karthika அப்படின்னு வரவழைக்க 1,$s/world/karthika/g கொடுங்க, பிறகு ,p கொடுங்க கார்த்திகாவும் அப்படியே செய்தாள்.
கார்த்திகா: இது என்ன ? காட்டுது மதன்: ‘நீங்க world ஐ karthika ன்னு மாத்திட்டீங்கள்ள, அத save செய்யவில்லைன்னு காட்டுது, h கொடுங்க, இப்போ என்ன தவறு நடக்குதுன்னு காட்டும். கார்த்திகா அதைச் செய்தாள்.
கார்த்திகா: இப்போ w கொடுத்து save பண்ணனும் correctடா? ஆம் என்பதுபோல் மதன் தலை ஆட்டினான்.
கார்த்திகா: எனக்கு இந்த editor ரொம்பப் பிடிச்சிருக்கு மதன்: அப்போ உங்களுக்கு sed commandடும் மிகவும் பிடிக்கும், ஏன்னா sed என்பது stream editor அதாவது stream ed அப்படிங்குறத குறிக்குது. ed ல செய்யுற அத்தன commandசையும் sed லயும் செய்யலாம். கார்த்திகா: அப்போ, ed command தான் grep commandடுக்கும் sed commandடுக்கும் அடிப்படை correctக்டா? மதன்: அதுமட்டும் இல்ல, regex அப்படிங்குற concept முதன் முதலா implement பண்ண applicationனும் ed editor தான். மதன்: கார்த்திகா, இப்ப நீங்க ஒரு முக்கியமான கட்டத்துக்கு வந்துட்டீங்க, https://man.freebsd.org ல sh கொடுத்து வரும் manualல போய்ப் படிங்க, அத இப்ப நீங்க படிச்சீங்கன்னா superரா shell scripting கத்துப்பீங்க, அதுக்குத் தேவையான எல்லாம் இப்ப உங்ககிட்ட இருக்கு.
கார்த்திகா: ok, என்ன train பண்ணதுக்கு குருதட்சணையா என்ன செய்யனும்? மதன்:நீங்க எப்பவும் Linux பயன்படுத்தனும்.
கார்த்திகா: நேத்து நீங்க process பத்தி விளக்கிச் சொன்னீங்கல்ல, போய்ப் படிச்சேன். system’த்துல என்னென்ன process run ஆகுது, அந்த processகள எப்படிப் பார்க்கிறது, என்ன command use பண்ணனும், எல்லாம் தெரிஞ்சிக்கிட்டு வந்திருக்கேன். சொல்லட்டுமா? மதன்: ok கார்த்திகா: முதல்ல ps command, இந்த command மூலம் நம்ம systemத்தில் run ஆகிக்கொண்டிருக்கும் அத்தனை processகளையும் பார்க்க முடியும், இந்த command அப்படியே எந்த optionஷனும் கொடுக்காம run செஞ்சா current terminalலோட associate ஆகி இருக்கும் process மட்டும் list பண்ணும்.
கார்த்திகா: இதே commandடுக்கு x option கொடுத்தா, current userரோட எல்லா processகளையும் காட்டும்.
கார்த்திகா: இதே commandடுக்கு a option கொடுத்தால் systemத்தில் இருக்கும் terminalசோட associate ஆகி இருக்கும் அத்தனை processகளையும் காட்டும்.
கார்த்திகா: இப்போ ax ரெண்டு optionனையும் சேர்த்துக் கொடுத்தா systemத்துல current run ஆகும் அத்தனை processகளையும் காட்டும்.
கார்த்திகா: நான் சொன்னதெல்லாம் correctடா? மதன்: correct.
கார்த்திகா: அடுத்து top command, இது ஒரு TUI (Terminal User Interface) வகை command மதன்: அப்படின்னா? கார்த்திகா: அதாவது இந்த TUI வகையான application, GUI (Graphical User Interface) application மாதிரியே menu, window எல்லாம் இருக்கும், ஆனா எல்லாமே terminal’லையே இருக்கும். மதன்: அப்ப GUI அப்படின்னா என்ன? கார்த்திகா: கூகுள்ல சர்ச் பண்ணித் தெரிஞ்சிக்கோங்க கார்த்திகா:top commandடுக்கு வருவோம். இந்த command system எவ்வளவு cpu use பண்ணிக்கிட்டு இருக்கு, எவ்வளவு memory use பண்ணிக்கிட்டு இருக்கு, எந்த process அதிகமா cpu use பண்ணுது, எந்த process அதிகமா memory use பண்ணுது இப்படி எல்லா detailஸ்சும் காட்டும், correctக்டா?
மதன்: correct, அது மட்டும் இல்லாம top command மூலம் processகள் பற்றிய பல விஷயங்கள நாம தெரிஞ்சிக்கலாம், processகல controlலும் பண்ணலாம். கார்த்திகா:free command, இந்த command மூலமா நம்ம சிஸ்டத்துல எவ்வளவு memory இருக்குன்னு தெரிஞ்சிக்கலாம்.
மதன்: free commandடோட எந்த fieldட பார்த்து current systemத்தோட memory usageஜ தெரிஞ்சிப்பீங்க? கார்த்திகா: free command outputல Available fieldதான் systemத்துல எவ்வளவு memory மிச்சம் இருக்குன்னு காட்டும் மதன்: சரி மதன்: memory எவ்வளவு காலியா இருக்குன்னு வேற வழியிலயும் பார்க்கலாம் கார்த்திகா: ஆமாம் top commandடும் எவ்வளவு memeory காலியா இருக்குன்னு avail mem fieldடுல காட்டும் மதன்: ஆமாம், அது மட்டும் இல்லாம, இந்த commmandடும்
$ cat /proc/meminfo
available memory காட்டும்.
மதன்: இந்த outputல MemAvailable line தான் current systemத்தில் காலியா இருக்கும் memory கார்த்திகா: இந்த /proc file systemத்துல process பத்தின எல்லா detailsசும் இருக்கும் போல மதன்: ஆமாம் மதன்: ஒரு முக்கியமான command விட்டுட்டீங்க, kill command பத்தி படிச்சீங்களா. கார்த்திகா: ஆமாம், அதச் சொல்ல மறந்துட்டேன், kill command ஒரு processக்குப் பலவிதமான signalஸ் அனுப்பப் பயன்படுத்தப்படும் command.
$ kill 965
கார்த்திகா: இந்த 965 அப்படின்ற pid என்னோட current systemத்துல run ஆகும் pulseaudio அப்படின்ற processசோட pid, இப்ப நான் kill commandக்கு இந்த 965 pid கொடுத்தா pulseaudio process terminate ஆகிடும். மதன்: அது மட்டும் இல்லாம kill commandடுக்கு -L option கொடுத்தா ஒரு processசுக்கு எத்தனை விதமான signalஸ் அனுப்பலாம்னு காட்டும், signalஸ்சோட signal numberரையும் காட்டும்.
மதன்: இந்த signalஸ்ல முக்கியமான signalஸ்
9) SIGKILL
11) SIGSEGV
15) SIGTERM
18) SIGCONT
19) SIGSTOP
இதுல 15) SIGTERM தான் default signal, அதாவது kill commandக்கு எந்த signal கொடுக்கனும்னு சொல்லலைன்னா அது defaultடா 15) SIGTERM ஆ தான் processக்கு அனுப்பும், இந்த signal வந்தவுடன் அந்த processல இருக்குற SIGKILL signalலுக்கு உண்டான default signal handler அந்த processஸ terminalte பண்ணிடும்.
11) SIGSEGV சிக்னல் ஒரு process ஏதாவது கோக்குமாக்கா வேல செஞ்சதுனா, kernel பொடனியிலேயே ஒன்னு வச்சுப் போய் சாகுன்னு சாகடிக்கப் பயன்படுத்துற signal
19) SIGSTOP signal பயன்படுத்தி நாம ஒரு processச freeze பண்ண முடியும், அதாவது அது எந்த வேலையும் செய்யாது, ஆனா அந்த processச kernel terminate செய்யாது, அந்த processஸ 18) SIGCONT கொடுத்து மீண்டும் இயக்க வைக்கலாம்.
கார்த்திகா:9) SIGKILL பத்தி சொல்லவே இல்லையே? மதன்: 9) SIGKILL தான் ரொம்ப Dangerரான signal, ஒரு processச பாரபட்சமே இல்லாம உடனே சாகடிக்க பயன்படுத்துற signal, இந்த signal ஒரு processக்கு அனுப்பப்பட்டா அந்த processல இருக்குற சிக்னல் handlerருக்கு அந்த signal போகாம kernelலே அந்த processஸ்ச சாகடிச்சுடும், அதனால எப்பவும் இந்த SIGKILL பயன்படுத்தும்போது கவனமா இருக்கனும்.
கார்த்திகா: signalஸ்ல இவ்வளவு விஷயம் இருக்கா? Amazing. ஒருவர் மதனின் Monitorரையும் கார்த்திகாவின் laptopப்பையும் சுட்டிக்காட்டி ஒருவர்: Is anyone see what i see, that Desktop look like i3 and that other laptop look like cinnamon. மதன்: Exactly Comrade, Its i3 on top of btw and another one in கார்த்திகாஸ் laptop, That is cinnamon on top of Mint. கார்த்திகா: Mint புரியுது அது என்ன i3, cinnamon, btw? மதன்: cinnamon உங்கள் desktop environment, நீங்க login பண்ண உடனே வர்ற UI screen, Linuxல பல desktop environment இருக்கு, i3 என்னோட desktop environment, well, i3 is actually a window manager.
Cinnamon on top of Mint
i3 on top of Archlinux
ஒருவர்: That’s Great Comrade, never thought she is also one of us, btw I too use arch, Seems you are using default i3? why don’t you RICE? மதன்: I am not good in Art Comrade கார்த்திகா: So you guys are talking about Archlinux, But what is btw? மதன்: btw expansion by the way, Archlinux use பண்றவங்க, அவங்க Archlinux use பண்றத பெருமிதமாச் சொல்லிக்காட்ட btw I use arch அப்படின்னு சொல்லி மத்தவங்கள கடுப்பேத்துவாங்க, அதுவே போகப்போக மத்தவங்க அவங்கள கிண்டல் பண்றதுக்கும் அவங்களே அவங்கள கிண்டல் பண்ணிக்குறதுக்கும் ஒரு memeமா மாறிடுச்சு, அதுல இருந்து வந்ததுதான் இந்த btw, Archlinux க்கு இன்னொரு nick name.
கார்த்திகா: அடப் பாவிகளா, இப்படியுமா கலாய்ப்பீங்க? But what is that RICE? மதன்: அதுவா, உங்கள் Desktopப்ப உங்களுக்குப் புடிச்ச மாதிரி customize பண்றது, ஒரு சாதாரண கார் வாங்கி அதுல வித விதமா sticker ஒட்டி silincer மாத்தி உள்ள இருக்குற spare parts மாத்தி அதோட performance improve பண்றாங்கள்ள, அதுக்கு பேர் Race Inspired Cosmetic Enhancements (RICE), இதே terminologyயதான் unix உலகத்துல அவங்களோட desktop அவங்களுக்குப் புடிச்சாமாதிரி customize பண்றதுக்கு use பண்றாங்க, நீங்க unixporn [https://www.reddit.com/r/unixporn] reddit communityடில இருக்குற postடுங்க பாத்திங்கன்னா எல்லாம் இப்படி customize பண்ண Linux Desktop screen shot போஸ்ட்டுங்களாத்தான் இருக்கும்.
கார்த்திகா: Is this Linux? மதன்: Linux மட்டும் இல்ல BSD (Berkeley Software Distribution), macOS. கார்த்திகா: Anyway, நேரமாச்சு, see you next time Comrade.
மதன்: இப்ப நான் ஏன் உங்களுக்கு இந்த C program எப்படி compile பண்ணி run பண்றதுன்னு சொல்லிக் கொடுத்தேன் தெரியுமா? கார்த்திகா: இருங்க நானே சொல்றேன், ஒரு command அப்படிங்கறது machine புரியிற ELF format’ல இருக்குற ஒரு binary executable, அது நம்ம file system’த்துல ஒரு இடத்தில் save ஆகி இருக்கும் அந்த இடத்தைக் கண்டுபிடிக்க type command use பண்ணனும்.
type command’டால அந்த command கண்டுபிடிக்க முடியலன்னா எந்த இடத்துல அந்த command இருக்கோ அந்த Directory’ரிய PATH environment variable’ள்ல சேக்கனும் அப்படி இல்லன்னா direct’டா full path கொடுத்து execute பண்ணனும். மதன்: Correct, ஆனா நான் சொல்ல வந்தது அதுமட்டுமில்ல, நீங்க /home/karthika/a.out அப்படின்னு command type பண்ணி enter கொடுத்தீங்கள்ள, அப்ப என்ன நடந்தது? கார்த்திகா: என்ன நடந்தது, hello world அப்படின்னு output வந்தது. அதுக்குத்தான நாம C program எழுதினோம்? மதன்: அதுதான் எப்படி அந்த output வந்தது? கார்த்திகா: a.out command execute ஆச்சு, அந்த command வேலை hello world அப்படின்னு print பண்றது, அதனால hello world output வந்தது, அதானே? மதன்: அந்த a.out எப்படி execute ஆச்சு? கார்த்திகா: தெரியல, நீங்களே சொல்லுங்க மதன்: இங்க தான் நாம process அப்படின்னா என்னன்னு தெரிஞ்சுக்கனும். மதன் process பற்றி விவரிக்க ஆரம்பித்தான். நீங்க /home/karthika/a.out command type பண்ணி enter தட்டும்போது உங்க shell அந்த a.out binary executable file’லோட full path வாங்கி kernel கிட்ட கொடுத்து execute பண்ணச் சொல்லும், அப்ப linux kernel முதல்ல அந்த a.out fileல read பண்ணும், அது எந்த மாதிரியான binary formatல இருக்குன்னு முதல்ல கண்டுபிடிக்கும், நாம ஏற்கனவே பாத்தா மாதிரி, அந்த executable ELF formatல இருக்குன்னு தெரிஞ்சுக்கிட்டு அப்புறம் அந்த fileல read பண்ணி memoryயில் ஒரு இடத்துல அந்த a.out file contentட வெச்சிக்கும், அடுத்து a.out executable execute பண்ணத் தேவையான வேற சில libraries memoryயில் load செஞ்சிக்கும், இதுக்கு பேரு dynamic linking. அடுத்து அந்த a.out executableள execute பண்ணத் தேவையானது எல்லாம் load பண்ணதும் அந்த executableளோட entry point, அதாவது நம்ம C programல main() function இருக்குல்ல, அந்த functionன invoke பண்ணும், இப்படித்தான் நாம create பண்ண a.out executableள kernel memoryயில ஏத்தி ஒரு processசா மாத்தி execute பண்ணும், ஒவ்வொரு processக்கும் ஒரு id இருக்கு அதுக்கு பேரு process id அத pid அப்படின்னு சொல்லுவாங்க, ஒரு processசோட detail தெரிஞ்சிக்க cat /proc//status command run பண்ணித் தெரிஞ்சிக்கலாம்,
a.out executableல kernel கிட்ட கொடுத்து execute பண்ண சொல்லுச்சில்ல நம்ம shell, அதுதான் நம்ம a.out processசுக்கு parent process, அந்த shellலுக்கு நம்ம a.out process, one of the child process. ஒவ்வொரு processசுக்கும் ஒரு parent process இருக்கும், அந்த parent processஸ்ஸ child processஸ்ல இருந்து தெரிஞ்சுக்க easyயா child processஸ்ல parent processஸோட pid ய ppid அப்படின்னு save பண்ணி இருப்பாங்க. ppid மூலமா எந்த ஒரு processசோட parent processசையும் கண்டுபிடிச்சிடலாம். கார்த்திகா: நம்ம a.out processஸோட pid எப்படித் தெரிஞ்சிக்கிறது? மதன்: அதுக்கு C ல getpid() அப்படின்னு ஒரு function இருக்கு மதன் அவள் laptopப்பை வாங்கி source codeடைச் சரி செய்து அதை compile செய்து run செய்தும் காட்டினான்,
கார்த்திகா: அப்ப cat /proc/9810/status command run பண்ணா a.out processசோட details வரும் correctடா? மதன்: Run பண்ணிப் பாருங்க கார்த்திகா உடனே cat /proc/9810/status என்று type செய்து enter தட்டினாள், கார்த்திகா: என்ன /proc/9810/status அப்படிங்குற fileலே இல்லன்னு சொல்லுது? ok, நம்ம a.out command execute ஆகி முடிஞ்சிருச்சு அதனாலயா?
மதன்: Correct, 8300 try பண்ணிப் பாருங்க கார்த்திகா cat /proc/8300/status என்று type செய்து enter தட்டினாள்,
கார்த்திகா: நிறைய information இருக்கு, ஒன்னும் புரியல மதன்: கொஞ்சம் கொஞ்சமாகத்தான் புரியும், process, parent process, child process அப்படின்னா என்னன்னு புரிஞ்சதில்ல? கார்த்திகா: புரிஞ்சது, ஒரு doubt, அப்ப ppid track பண்ணிக்கிட்டு போனா, நாம boot பண்ணவுடன் start ஆன முதல் process detail கிடைச்சிடும் இல்ல? மதன்: ஆமாம், ஆனா இப்படி ppid track பண்ணிக்கிட்டுப் போறத விட simpleளா cat /proc/1/status அப்படின்னு போட்டு boot ஆனவுடனே start ஆன முதல் process details பாத்துடலாம். கார்த்திகா cat /proc/1/status என்று command run செய்தாள்
கார்த்திகா: systemd? இதுதான் எல்லாத்துக்கும் parent processசா?
மதன்: ஆமாம், அதுதான் நாம boot பண்ணவுடன் start ஆகும் முதல் process, அந்த process தான் பல child process start பண்ணும். pid 1 process init processஸ்னு சொல்லுவாங்க. அதோட binary executable எங்க இருக்குன்னு கண்டுபிடிங்க பாப்போம்?
கார்த்திகா type systemd என்ற command’டை run செய்ய /bin/systemd என்று வந்தது
மதன்: இன்னும் easyயா ஒரு வழி சொல்றேன்
sudo ls /proc/1/exe
command run பண்ணுங்க. கார்த்திகாவும் அதையே செய்தாள்
கார்த்திகா: Oh, அப்ப pid 1 executable /lib/systemd/systemd தானா? மதன்: ஆமாம் கார்த்திகா உடனே ls -l /proc/1 என்று ரன் செய்ய பல fileகள் இருந்தன
கார்த்திகா: இந்த fileகள்ல இருந்து அந்த pid 1 processஸுக்குனடான எல்லா detailsஸும் எடுத்துடலாம்போல? மதன்: Exactly, pickup பண்ணிட்டீங்க.
மதன்: இப்ப gcc command பத்தித் தெரிஞ்சுக்க என்ன பண்ணுவீங்க? கார்த்திகா: man gcc அப்படின்னு டைப் செய்து gcc யோட manual page படிக்கணும். SYNOPSIS ல just ஒரு input file மட்டும் கொடுத்தால் போதும்னு இருக்கு?
மதன்: ஆமாம் ஒரே ஒரு input file மட்டும் கொடுத்தால் போதும், என்ன ஆகுதுன்னு பாப்போமா?
கார்த்திகா Terminal’லில் தனது home directory’யில் இருந்து gcc helloworld.c என்ற command execute செய்தாள். கார்த்திகா: என்னது conio.h இல்லையா? மதன்: உங்களோட source code காட்டுங்க? கார்த்திகா அவள் எழுதிய Hello world program’மை cat command மூலம் terminal’லில் காட்டிவிட்டு gcc command output’டையும் காட்டினாள்
மதன்: conio.h header windows’ல மட்டும்தான் இருக்கும், linux’ஸில் இருக்காது, அது C language’ஜோட standard header இல்ல. கார்த்திகா: அப்ப அத remove பண்ணிடட்டா? மதன்: ஆமாம் அதன்படியே கார்த்திகா #include line remove செய்து மறுபடியும் gcc helloworld.c என்று run செய்தாள். கார்த்திகா: ரெண்டு warning, கடைசியில் ஏதோ error மாதிரி இருக்கு? கார்த்திகா மறுபடியும் terminalலில் இருந்த output’டைக் காட்டினாள்,
மதன்: ok, முதல் warning main function’னுக்கு default return type int அப்படின்னு சொல்லுது, அதனால நீங்க program முடிவுல return 0 அப்படின்னு return value கொடுக்கணும், ரெண்டாவது warning, getch() அப்படின்னு ஒரு function implicit’டா declare ஆகி இருக்குன்னு வருது, அடுத்து இருக்குற error, getch() அப்படிங்குற function’னே இல்லன்னு சொல்லுது கார்த்திகா: அப்ப main க்கு முன்னாடி int போட்டு கடைசீயில return 0; line சேக்கனும், அப்புறம் getch() லைன தூக்கனும் அப்படித்தானே? மதன்: அவ்வளவுதான் அதன்படி கார்த்திகா தன் source code மாற்றிக் காட்டினாள்,
கார்த்திகா: இப்ப ok’வா? மதன்: ok மாதிரிதான் தெரியுது, இப்ப compile பண்ணுங்க. கார்த்திகா gcc helloworld.c என்று ரன் செய்தாள். கார்த்திகா: என்ன எந்த output’டும் வரல? கார்த்திகா வியப்புடன் டெர்மினலைக் காட்டினாள்,
மதன்: அப்படின்னா சுக்கிரன் உச்சத்துல இருக்கான்னு அர்த்தம். எந்த complilation error’ரும் வரலைன்னு அர்த்தம். கார்த்திகா: இப்ப எப்படி Hello world program output பார்க்கிறது? மதன்: இப்ப நான் சில கேள்விகள் கேட்பேன், compile அப்படின்னா என்ன? கார்த்திகா: அதாவது text format’ட்ல இருக்குற source code’ட binary executable’லா மாத்துரது, அதுக்குத்தான் compiler தேவைப்படுது, அந்த compiler’தான் gcc. மதன்: இப்ப உங்க compile command எந்த ஒரு errorரையும் காட்டல, அப்படின்னா என்ன அர்த்தம்? கார்த்திகா: அப்படின்னா compiler successful’ல்லா binary executable’பில create பண்ணிடுச்சுன்னு அர்த்தம், அப்ப அந்த binary executable எங்க? மதன்: நீங்க எந்த Directory’யில் gcc command run பண்ணீங்களோ அதே Directory’ரியில் தான் இருக்கு. கார்த்திகா ls கமாண்ட் ரன் செய்தாள் கார்த்திகா: a.out அப்படின்னு இருக்கு? இதுதான் binary executableளா? கார்த்திகா கூகுளில் தேட file command கண்டுபிடித்தாள். file command manual படித்து அதை எப்படி run செய்ய வேண்டும் என்பதைக் கற்றுக் கொண்டாள். அதன்படி file a.out என்ற command run செய்தாள்,
கார்த்திகா: ஒரு மண்ணாங்கட்டியும் புரியல மதன்: மண்ணாங்கட்டிய புரிஞ்சுக்க கொஞ்சம் Time ஆகும், இப்போதைக்கு அந்த outputல ELF ன்னு இருக்குல்ல, அப்படின்னா a.out ஒரு ELF binary formatல இருக்குற ஒரு executable, அத நாம run பண்ணலாம்னு அர்த்தம், எங்க a.out command run பண்ணுங்க பாப்போம். கார்த்திகா a.out என்ற command run செய்தாள்,
கார்த்திகா: command இல்லையா, அதான் இருக்கே? மதன்: a.out எங்க இருக்குன்னு நமக்கு தெரியும், bash shellலுக்கு தெரியணுமே, அதுக்கு என்ன பண்ணனும்? கார்த்திகா: Oh, right PATH environment variable set பண்ணனும் மதன்: அப்படியும் பண்ணலாம், இல்ல simple’பிளா a.out executable’ளோட full path கொடுக்கலாம். கார்த்திகா full path’த்தையும் கொடுத்து a.out excutable’பிளை run செய்தாள்.
கார்த்திகா: Linux commands படிக்க படிக்க வந்துக்கிட்டே இருக்கு எப்படி நியாபகம் வெச்சிருக்கீங்க? மதன்: எல்லாத்தையும் நியாபகம் வச்சிருக்க முடியாது, நாம regular’ரா use பண்றது மட்டும் தான் நம்ம நியாபகத்துல இருக்கும், நாம regular’ரா linux use பண்ண கத்துக்க வேண்டியது ரெண்டு விஷயம், ஒன்னு File system structure, ரெண்டாவது Process. நேத்திக்கு நீங்க சொன்ன commands எல்லாம் file system சம்பந்தப்பட்ட commands, இப்ப நீங்க தெரிஞ்சுக்க வேண்டியது Process, உங்களுக்கு process’னா என்னன்னு தெரியுமா?
Process தான் ஒரு Operating system’த்தின் நாடித் துடிப்பு
கார்த்திகா: Collegeல operating system பத்தி படிக்கிறப்ப கேள்விப்பட்டிருக்கேன். ஆனா முழுசா என்னன்னு தெரியாது மதன்:Process தான் ஒரு Operating system’த்தின் நாடித் துடிப்பு, நீங்க C ல Hello world program எழுதி இருக்கீங்களா? கார்த்திகா: என்னங்க, C programming கத்துக்கிறவங்க அந்த program தான் முதல்ல எழுதுவாங்க, எனக்கும் C programming தெரியும். மதன்: அப்ப எப்படி நீங்க C ல Hello world எழுதுவீங்கன்னு சொல்லுங்க பாப்போம்? கார்த்திகா: TurboC’ல, C program எழுதி alt-f9 அழுத்துனா compile ஆகும், ctrl-f9 அழுத்துனா நாம எழுதின program run ஆகி Hello world அப்படின்னு output காட்டும்.
Turbo C IDE
மதன்: Right ,TurboC’ன்னு ஒன்னு double click பண்றீங்களே, அது என்னன்னு தெரியுமா? கார்த்திகா: TurboC compiler மதன்: TurboC வெறும் compiler மட்டும் இல்லைங்க, அது ஒரு IDE. ஆனா ஒரு C programming எழுத நமக்கு IDE வேணும்கற அவசியம் இல்ல, ஒரு சாதாரண text file create பண்ற ஒரு text editor இருந்தாப் போதும். அடுத்து நாம அந்த editor’ல எழுதின C source கோட machine’க்கு புரியிற binary executable’ளா மாத்த ஒரு compiler வேணும் அவ்வளவுதான். கார்த்திகா: அப்படின்னா ஒரு சாதாரண notepad’ல நாம C program எழுதலாமா? மதன்: கண்டிப்பா, முதல்ல ஒரு text editor ஒப்பன் பண்ணுங்க. Hello world C program type செஞ்சு save பண்ணுங்க. கார்த்திகா: /home/karthika/helloworld.txt அப்படின்னு save பண்ணி இருக்கேன். மதன்: அந்த .txt எடுத்துட்டு .c அப்படின்னு save பண்ணுங்க கார்த்திகா: ஓ, ஆமாம்ல, C program .c அப்படின்னு தான் extension இருக்கனும்ல, மறந்துட்டேன். மதன்: Linux’ஸில் இருக்குற C compiler .txt க்கும் .c க்கும் வித்தியாசம் பாக்காதுங்க, அத பொருத்தவர நீங்க compile பண்ண கொடுக்கிறது ஒரு சாதாரண text file. கார்த்திகா: அப்ப .txt அப்படின்னு extension இருந்தாலும் compile பண்ணுமா? மதன்: Extension’ஷனே இல்லாம ஒரு text file கொடுத்தாலும் compile பண்ணும், அதுக்கு தேவ ஒரு C source அவ்வளவுதான், நாம easy’யா கண்டுபிடிக்கத்தான் .txt அப்படின்னு இருந்தத .c க்கு மாத்த சொன்னேன். கார்த்திகா: சரி, இப்ப இந்த /home/karthika/helloworld.c file’ல எப்படி Linux’ல compile பண்றது? மதன்: அதுக்கு apt command use பண்ணி gcc compiler package install பண்ணுங்க, gcc மட்டும் install பண்றதுக்கு பதிலா packaging-dev அப்படின்னு ஒரு meta package இருக்கு, அத install பண்ணா இன்னும் முக்கியமான சில package’கள் install ஆகும், அதனால, gcc க்கு பதிலா packaging-dev இன்ஸ்டால் பண்ணுங்க. அதன்படியே கார்த்திகாவும் terminal’லில் apt install packaging-dev, type செய்து install செய்தாள். மதன்: இப்ப நீங்க install பண்ண C compiler பேரு gcc, அதாவது gnu-compiler-collection, நான் Linux history சொல்லும்போது கூட Stallman ஒரு C compiler முதல்ல ருவாக்குனார், அதத்தான் Linus Torvalds linux kernal’னல உருவாக்கப் பயன்படுத்தினார்னு சொன்னேன்ல, அந்த compiler இதுதான். கார்த்திகா: Linux’ல் உண்மையிலேயே ஒவ்வொரு command’டுக்கு பின்னாடி ஒரு சுவாரஸ்யமான history இருக்கு, அத தெரிஞ்சிக்கிட்டு அந்த command use பண்றது ரொம்ப interesting’கா இருக்கு. மதன்: இப்ப gcc command install ஆகி இருக்கா இல்லையான்னு எப்படிக் கண்டுபிடிப்பீங்க? கார்த்திகா: Just அந்த command run பண்ணும் போது அந்த command install ஆகலைன்னா command not found அப்படின்னு error வரும். மதன்: Run பண்ணாம கண்டுபிடிக்கனும். கார்த்திகா Google’ளில் தேடி type என்ற ஒரு command நாம் கொடுக்கும் command இருக்கா இல்லையா என்று சொல்லும் என்று கண்டுபிடித்தாள். மதன்: Super, இப்ப அந்த type command எப்படி run பண்ணுவீங்க? கார்த்திகா: அதான் man page இருக்கே. கார்த்திகா man type என்று கொடுத்தாள்,ஆனால் type command’டுக்கு manual pageஇல்லை என்று வந்தது.
கார்த்திகா: என்னங்க, Manual இல்லைன்னு வருது? மதன்: எல்லா command’டுக்கும் manual page இருக்காதுங்க, அதுக்கு பதிலா type –help அப்படின்னு run பண்ணுங்க. கார்த்திகாவும் அதன்படியே command type செய்து enter தட்டினாள். type command’டின் சிறிய help வந்தது அதில் அந்த command’டுக்கு என்னவெல்லாம் option’ன்கள் கொடுக்கலாம் என்று குறிப்பிடப்பட்டிருந்தது. ஆனால் manual page’ஜைப் போல் விவரமாக இல்லை.
மதன்: Linux’ஸ்ல இருக்குற தொண்ணூறு சதவீதம் command’ஸுக்கு –help அல்லது -h option கொடுத்தால் அந்த command பத்திச் சின்னதா details output காட்டும், ஆனா அந்த details, proper manual page மாதிரி இருக்காது. கார்த்திகா type –help output’டில் இருந்த விவரங்களைப் படித்துவிட்டு type gcc என்ற command run செய்தாள், உடனே gcc command இருக்கும் இடம் /usr/bin/gcc என்று type command காட்டியது.
கார்த்திகா: அடுத்து ls, இந்த command terminal open பண்ணிட்டு ஒரு முறையாவது use பண்ணாம இருக்க மாட்டீங்க.
ls command
current folder’ரில் இருக்கும் file மற்றும் folder’களை list பண்ணும்
ls -R command
உள்ளுக்குள்ள எத்தன folder இருந்தாலும் அத்தனை folder’ரில் இருக்கும் file மற்றும் folder’களையும் list பண்ணும்
ls -l command
detailed list பண்ணும்
ls command with folder path
கொடுத்த folder’ரில் இருக்கும் file மற்றும் folder’களை list பண்ணும்
ls command
கார்த்திகா: வெறும் ls command current folder’ரில் இருக்கும் file மற்றும் folder’களை list பண்ணும். அதுவே ls -R command, உள்ளுக்குள்ள எத்தன folder இருந்தாலும் அத்தனை folder’ரில் இருக்கும் file மற்றும் folder’களையும் list பண்ணும். அப்புறம் ls -l command detailed list பண்ணும், இந்த ls command’க்கு ஒரு folder’ரோட path கொடுத்தா, அது current folderர விட்டுட்டு கொடுத்த folder’ரில் இருக்கும் file மற்றும் folder’களை list பண்ணும். உதாரணத்துக்கு ls -l ~/Downloads command current folder’ரை விட்டுட்டு, Home folder’ரில், அதாவது /home/karthika folder’க்குல்ல இருக்குற Downloads folder’ர list பண்ணும்.
மதன்: Correct, அது மட்டும் இல்லாம -l option கொடுக்கும் போது output’ல ஒவ்வொரு line’னில் முதல்ல இருக்கிற பத்து character’கள் தான் அந்த entry’க்கு சொந்தமான file அல்லது folder’ருக்கான permission bits, இத நான் முன்னாடியே உங்ககிட்ட சொல்லியிருக்கேன். கார்த்திகா: நியாபகம் இருக்கு.
$ mkdir -p one/two/three $ ls -R one one: two one/two: three one/two/three: $
உதாரணம்
rmdir command
கார்த்திகா: அடுத்து rmdir, இது ஒரு folder remove பண்ண use பண்றது. அது மட்டும் இல்லாம
rmdir -p one/two/three
command முதல்ல three folder’ரை delete பண்ணும் அப்புறம் two folder’ரை delete பண்ணும் கடைசியா one folder’ரை delete பண்ணும். முக்கியமா rmdir command folder’ருக்குள்ள ஏதாவது content இருந்தா அந்த folder’ரை delete பண்ணாது. மதன்: Great
$ rmdir -p one/two/three $ ls -R one ls: cannot access ‘one’: No such file or directory $
உதாரணம்
cp command
கார்த்திகா: அடுத்து cp, இது ஒரு file அல்லது folder’ர copy பண்ண உதவுது. For example
$ cp /etc/fstab /home/karthika/fstab $
command /etc க்குள்ள இருக்குற fstab file என்னோட /home/karthika folder’ருக்கு copy செய்யும். அது மட்டும் இல்லாம
$ cp -r /etc /home/karthika/etc $
கமாண்ட் /etc folder மட்டும் இல்லாம அதுக்குள்ள இருக்கிற அத்தனை file’களையும் folder’களையும் /home/karthika folder’ருக்குள்ள copy செய்யும். மதன்: correct.
மதன்: /test.txt, save பண்றதுல ஒரு சிக்கல் இருக்கு. ஒரு சாதாரண user’ரா நீங்க /test.txt, save பண்ண முடியாது, ஒவ்வொரு file அல்லது folder’ருக்கும் permission bits அப்படின்னு ஒன்னு இருக்கு, உதாரணமா இந்த command பாருங்க
$ ls -l /dev/video0 crw-rw-r– 1 root video 81, 0 Apr 5 01:40 /dev/video0 $
இந்த output’ட்ல
முதல்ல இருக்குற ‘c’ character /dev/video0 file ஒரு ‘Character Device‘ அப்படின்னு சொல்லுது.
இந்த device file owner ‘root’, இந்த user’ருக்கு /dev/video0 camera device’ஸ்ல இருந்து data’வைப் படிக்கலாம், எழுதலாம், அதத்தான் ‘c’ character அடுத்து இருக்குற ‘rw-‘ குறிப்பிடுது.
அது மட்டும் இல்லாம ‘root’ user தவிர்த்து ‘video group’பில் இருக்குறவங்களும் இந்த camera device files’ல்ல இருந்து data’வைப் படிக்கலாம், எழுதலாம், அதத்தான் அடுத்து இருக்குற ‘rw-‘ குறிப்பிடுது.
கடைசியாக இருக்குற ‘r–’ permission bits ‘root’ user அல்லது ‘video’ group members தவிர்த்து மத்தவங்களுக்கு camera device files’ல்ல இருந்து data’வைப் படிக்க மட்டும் rights கொடுக்குது, அதுதான் அடுத்து இருக்குற ‘r–’ குறிப்பிடுது.
கார்த்திகா: இப்பவே கண்ண கட்டுதே
இப்பவே கண்ண கட்டுதே
மதன்: அப்படித்தான் எனக்கும் இருந்தது முதல்ல, அப்புறம் Linux use பண்ணப் பண்ணப் பழகிடுச்சு மதன்: இப்ப இந்த command பாருங்க,
$ ls -ld / drwxr-xr-x 17 root root 229 Dec 27 18:52 / $
இங்க முதல் d character / ஒரு folder’னு சொல்லுது, அடுத்து இருக்குற rwx, root user’ருக்குப் படிக்க (r), எழுத மற்றும் பயன்படுத்த (x) permission இருக்கு.
அடுத்து root group’ப்புக்குப் படிக்க (r), பயன்படுத்த (x) மட்டும் rights இருக்கு.
இதே r-x rights தான் மத்த எல்லா users’களுக்கும் இருக்கு.
So, ஒரு சாதாரண user நீங்க / folder’ரில் file create பண்ண முடியாது.
கார்த்திகா: அப்ப ஒரு சாதாரண user எங்க save பண்றது? மதன்: ஒவ்வொரு சாதாரண user’ருக்கும் ஒரு Home folder இருக்கும் like, /home/karthika, நீங்க “ls -ld /home/karthika” command execute பண்ணிங்கனா “root root” க்கு பதிலா “karthika karthika” அப்படின்னு இருக்கும். So கார்த்திகா user /home/karthika/test.txt அப்படின்னு editor’டர்ல தாராளமா save பண்ணலாம்.
மதன்: இந்த / folder உள்ள நிறைய folder’ர்ஸ் இருக்கும் அதுல முக்கியமானதுங்க /boot, /proc, /dev, /etc, /home, /usr, /var, /tmp folders.
Linux Root Folders
/boot folder’லதான் Linux boot ஆகத் தேவையான Linux kernel, GRUB second stage boot loader எல்லாம் இருக்கும்.
/proc ஒரு mount point, இந்த folder’ரில் proc file system map ஆகியிருக்கும். இந்த proc file system linux’ஸ்ல இருக்குற எல்லா process பத்தின details’சும் கொடுக்கும்.
/dev இன்னொரு mount point, இந்த folder’ரில் devtmpfs file system map ஆகியிருக்கும். இந்த devtmpfs linux’ஸ்ல இருக்குற எல்லா device’களும் file’லா இருக்கும்.
/etc போல்டரில் நிறைய configuration folder’கள் இருக்கும். /usr/bin folder’ரில் எல்லா program’கள் இருக்கும்.
அதேபோல /usr/lib folder’ரில் எல்லா dynamic library’களும் இருக்கும்.
/var போல்டரில் log மற்றும் cache file’கள் இருக்கும்.
/tmp folder’ரில் temporary file’கள் இருக்கும்.
இதுங்கள்ல முக்கியமானது /home folder. இதுலதான் ஒவ்வொரு user’க்கும் தனித்தனி folder இருக்கும்.
கார்த்திகா: நீங்க சொன்ன மாதிரி Mint install பண்ணிட்டேன்
LInux Mint 21.3 “virginia”
மதன்: That’s Great, last time man command பத்திப் பார்த்தோம், இன்னைக்கு File system’த்தைப் பத்திப் பார்ப்போம். File system’னா என்னன்னு தெரியும் இல்ல? கார்த்திகா: தெரியும் Windows’ல fat, ntfs போல. ஒரு empty disk’க்க use பண்ணனும்னா முதல்ல பண்ண வேண்டியது file system format அதானே? மதன்: Correct, Window’சுக்கு இருக்குற மாதிரி Linux’க்கும் ஏகப்பட்ட file systems இருக்கு, அதுல முக்கியமானது ext4 இதுதான் default’டா எல்லா distro’வும் use பண்றது.
உங்களோட Mint’டும் அதத்தான் Root partition’னுக்கு use பண்ணி இருக்கும். Root partition’ன்னு சொன்ன உடனே இன்னொன்னு சொல்ல மறந்துட்டேன், Linux’க்ஸ்ல எல்லாமே Files.
உங்க Laptop’ல இருக்கும் physical hard disk, /dev/sda file’லா இருக்கும், CD ROM, /dev/sr0 file’லா இருக்கும். நீங்க direct’க்டா Root permission’னோட read write பண்ணலாம். கார்த்திகா: அப்ப /dev/sda தான் windows’ல c: மாதிரியா? மதன்: இல்லைங்க, /dev/sda1 தான் c: மாதிரி. முதல் disk’க்கின் முதல் partition. ஆனா windows மாதிரி c:, d: எல்லாம் Linux’க்ஸில் கிடையாது. ஒவ்வொரு partition’ஷனும் file system’டத்துல ஒரு folder’ரில் map ஆகி இருக்கும். இந்த file system’த்தோட parent folder பேரு “/” , இதுக்கு பேர்தான் root directory, இந்த folder’ரத்தான் mount point’டா வெச்சு /dev/sda1, partition file system’த்தில் map ஆகி இருக்கும்.
The Root
கார்த்திகா: அப்படின்னா ஒரு text editor’ர்ல /test.txt அப்படின்னு save பண்ணா அது c:/test.txt அப்படின்னு create பண்ற மாதிரி, correct’டா? மதன்: ஆமாம், எந்தெந்த partition எந்த folder’ல் map ஆகி இருக்குன்னு /etc/fstab அப்படிங்கற file’ல்ல குறிப்பிட்டிருப்பாங்க. இந்த /etc/fstab பத்தின details “man 5 fstab” man page’ல இருக்கு.
man 5 fstab
current’டா map ஆகி இருக்கும் எல்லா mountpoint’ஸையும் “mount” command மூலமாப் பாக்கலாம்.
மதன்: இப்ப ஒரு real unix command பார்ப்போம், $ man ls
மதன்: இந்த manual நல்லா கவனிச்சிங்கன்னா, top left corner’ல LS(1) னு இருக்கும். unix’ல இருக்க எல்லா manual’களையும் எட்டுப் பகுதிகளாப் பிரிச்சிருக்காங்க, 1.General Commands (பொதுவான கமாண்ட்கள்) 2.System Calls (கர்னல் பங்ஷன்கள், C language ல் பயன்படுத்தலாம்) 3.Library Functions (கர்னல் அல்லாத மற்ற C பங்ஷன்கள்) 4.Special Files (சிறப்புக் கோப்புகள்) 5.File formats and Conversions (கோப்பு வகைகள்) 6.Games (மின் விளையாட்டுகள்) 7.Miscellaneous (மற்றவை) 8.System Administration Commands (அட்மின் கமாண்ட்கள்) LS(1) அப்படின்னா, ls command, பகுதி 1, அதாவது, General Commands வகையான command அப்படின்னு அர்த்தம். இதுவே useradd command’டோட manual page பார்த்தா அதுல USERADD(8) அப்படின்னு இருக்கும்,ஏன்னா, அது Admin command section’ல இருக்கும், இந்த வகையான Admin command’களை root user’ரால மட்டும்தான் execute பண்ண முடியும்.
மதன்: சரி, இப்ப ls man page பார்ப்போம், எந்த ஒரு proper man page’லயும் கீழ இருக்குற sections கண்டிப்பாக இருக்கும், 1.NAME (command’டோட பேர்) 2.SYNOPSIS (command’டோட syntax) 3.DESCRIPTION (command பத்தின விரிவான விளக்கம்) 4.RETURN VALUE (command’டோட return value) 5.AUTHOR (command எழுதினவர் பேர்) 6.SEE ALSO (command சம்பந்தப்பட்ட மத்த command’கள்) SYNPOSIS section’ன்ல command’டோட syntax கொடுத்திருப்பாங்க, அந்த syntax’ல இருக்குற long & short options’கல DESCRIPTION section’ல விளக்கி இருப்பாங்க, RETURN VALUE section’ஷன்ல அந்த command shell க்கு என்ன return value அனுப்புதுன்னு சொல்லி இருப்பாங்க, AUTHOR section’ன்ல அந்த command யார் எழுதினாங்கன்னு சொல்லி இருப்பாங்க. கார்த்திகா: சரி, section(1)’ல இருக்குற அத்தனை command’களையும் பார்க்கனும்னா என்ன பண்ணனும்?
$ ls /usr/share/man/man1
மதன்: இந்த command run பண்ணா அது section(1)’ல இருக்குற அத்தனை command’ங்களையும் காட்டும். இதேபோல man2, man3 அப்படின்னு எட்டு section’கள்ல இருக்குற command’ங்களையும் பார்க்கலாம். அதுமட்டும் இல்லாமல் உங்களுக்கு ஏதாவது ஒரு command’டோட ஒரு பகுதிதான் நியாபகம் இருக்கு, ஆனா அந்த command’டோட முழு manual’வலையும் பாக்கணும்னா. அந்தப் பாதி command, man -kக்குக் கொடுங்க, அது நீங்க கொடுத்த பாதி command’ல start ஆகுற எல்லா command’களையும் காட்டும். கார்த்திகா: அப்ப man -k ls அடிச்சா ls இருக்குற அத்தன command’டையும் காட்டும், correct’ட்டா? மதன்: Exactly.
மதன்: மேல இருக்கும் mycommand அப்படிங்கற ஒரு command’டொட syntax. இதுல [-abcd]’ங்கறது mycommand டோட short options. இங்கே முக்கியமா கவனிக்கவேண்டியது [] square brackets. இந்த brackets என்ன சொல்லுதுன்னா, mycommand’க்கு -a, -b, -c, -d இதுல எதாச்சும் ஒன்னு கொடுக்கலாம்.
மதன்: அடுத்து இருக்குது [–all|–big|–cracking|–doors], இது mycommand’டோட long options. முதல்ல பார்த்த short options’களுக்கு equal’லானவை, -a for –all, -b for –big, -c for –cracking, -d for –doors. மதன்: இந்த long option’களும் square bracket’க்குள்ள இருக்கு, அதனால கொடுக்கிறது, கொடுக்காதது, நம்ம இஷ்டம். மதன்: அடுத்து இருக்கும் arg1, இது mycommand’டோட first argument. அடுத்து இருக்கும் [arg2], இது mycommand’டோட second argument, இங்க arg2 square bracket’டால மூடப்பட்டிருக்கும், அதுக்கு அர்த்தம் mycommand’டுக்கு arg2’வ கொடுக்கலாம், கொடுக்காட்டி விட்டுடலாம், ஆனா, arg1 கண்டிப்பாகக் கொடுத்தே ஆகணும்.
கார்த்திகா: ok, அப்ப [] உள்ள எது இருந்தாலும் அது optional, நாம கொடுக்கலாம், இல்லாட்டி விட்டுடலாம், [] இல்லாம இருந்தா, கண்டிப்பாகக் கொடுத்தே ஆகனும், single ‘-’ இருந்தா அதுக்கு பேரு short options, அதுவே ‘–’ இருந்தா, அதுக்கு பேரு long options. புரிஞ்சது, ஆனா ஒரு டவுட், கடைசியில் ‘..’ இருக்கு அதுக்கு என்ன அர்த்தம்? மதன்: அப்படின்னா, [arg2] [arg3] [arg4] [arg5] [arg6] இப்படி எவ்வளவு argument வேணும்னாலும் நாம கொடுக்கலாம்.
மதன்: சரி, Shell பத்தி உங்களுக்கு என்ன தெரியும். கார்த்திகா: Shell’னா அது ஒரு Program, அது மூலமா பல Program’கள் start பண்ண முடியும் அதானே? மதன்: Exactly, அதுமட்டுமில்லாம அதுல ஒரு Programming Language’ல இருக்குற எல்லா Property’சும் இருக்கு, அதனாலத்தான் நம்மால Shell Scripts எழுத முடியுது.
Shell
இன்னைக்கு Linux Users பல வகையான Shells use பண்றாங்க, ஆனா shell அப்படிங்கற concept நான் முன்னால சொன்ன CTSS’ல தான் உருவாச்சு. Bell Labs வெளியிட்ட v7 Unix’ல இருந்த shell’க்கு பேரு sh, இத எழுதினவர் பேரு Stephen Bourne, இதுதான் பின்னால வந்த பல shell’கலுக்கு அடித்தளமா அமைந்தது.
StephenBourne
அப்புறம் வந்த bsd Unix’ல இருந்த shell’க்குப் பேரு csh, அப்புறம் வந்த sunos/solaris’ல இருக்குற shell’க்குப் பேரு ksh, அப்புறம் வந்த Linux’ல இருக்குற shell’க்குப் பேரு bash, அப்புறம் tcsh, pdksh, dash, ash, zsh, fish’ன்னு பல shells இருக்கு. கார்த்திகா: இத்தனையும் நான் தெரிஞ்சிக்கனுமா? மதன்: இத்தனையும் தெரிஞ்சுக்க வேணாம், sh முதல்ல தெரிஞ்சிக்கோங்க, அது மத்த எல்லாத்தையும் ஈஸியா கத்துக்க வழி காட்டும். மதன்: shell’ஓட Primary work ஒரு command’டை execute பண்றதுதான், ஒவ்வொரு command’க்கும் அத எப்படி execute பண்ணனும்னு ஒரு syntax இருக்கும். ஒரு command’டோட syntax தெரிஞ்சிக்க இருக்குற முதல் வழி, அதோட manual page’ஐப் படிக்கிறது தான் கார்த்திகா: manual page படிக்க man command use பண்ணனும் correct’டா? மதன்: பரவால்ல, தெரிஞ்சு வச்சிருக்கீங்க. அப்ப உங்களுக்கு syntax’னா என்னனு புரியும்? கார்த்திகா: புரியும், இருந்தாலும் ஒருமுறை சொல்லுங்க
மதன்: சொல்றேன், அப்படி எழுத ஆரம்பிச்சவரு, அவரு எழுதின softwares’சை usenet ல இவர மாதிரி இருக்குற programmers கிட்ட share பண்ணிக்கிட்டாரு. Source Code பார்த்தவங்க அதிலிருந்த mistake எல்லாம் fix பண்ண ஆரம்பிச்சாங்க, இப்படி interest’டா work பண்ணவங்க ஒன்னா சேர்ந்து ஒரு குழுவை ஆரம்பிச்சாங்க. அதுக்கு பேரு GNU Project.
GNU mascot
Stallman Unix’ல இருக்குற மாதிரியே பல commands எழுதினாரு, gcc ன்ற ஒரு C compiler எழுதினாரு, emacs எழுதினாரு, ஆனா இவரால இவர் யோசிச்சு வச்சிருந்த Hurd kernel ல எழுத முடியல, ஒரு Operating System’த்துல Kernel இல்லாம எதுவும் இயங்காது, இவரு ஒரு OS க்குத் தேவையான எல்லாத்தையும் எழுதிட்டாரு Kernel’ல தவிர. கார்த்திகா: அப்ப அவரோட கனவு என்னாச்சு? மதன்: அவரோட கனவு 1991 ல நிஜமாச்சு. பின்லாந்தில் (Finland) ஹெல்சிங்கி (Helsinki) யூனிவர்சிட்டில படிச்சிட்டிருந்த லினஸ் டார்வெல்ஸ் (Linus Torvalds) ன்ற Research Student, தன்னோட குரு Andrew Tanenbaum கிட்ட இருக்குற Unix Kernel போல இருக்கும் Minix Kernel மாதிரி தானும் ஒரு Kernel உருவாக்க நினைச்சார்,
Linus Torvalds
ஆனா அவர் Minix மாதிரி மைக்ரோ Kernel’லா இல்லாம ஒரிஜினல் Unix மாதிரி ஒரு Monolithic Kernel’ல உருவாக்கினார். அதுக்கு Linux அப்படின்னு பேர் வந்தது, Linux compile பண்ண, Torvalds, Stallman எழுதிய gcc compiler use பண்ணார். அதுமட்டுமில்லாம Stallman எழுதின பல Open Source Software use பண்ணார். தன்னோட kernel’லும் Stallman softwares போல எல்லாரும் பயன்படுத்தனும், தவறு இருந்தாத் திருத்தனும் அப்படின்னு ஆசைப்பட்டவர் Stallman மாதிரி அவரோட Kernel’ல GPL licence’ல வெளியிட்டார். உலகத்துல இருக்குற பல Programmer’கள் அவர் Kernel’ல work பண்ண ஆரம்பிச்சாங்க. Linux Kernel’ல் மட்டும் வச்சு ஒன்னும் பண்ண முடியாது, அதேபோல GNU Program’கள் Kernel இல்லன்னா work ஆகாது, இந்த GNU வையும் Linux ஐயும் சிலபேர் எடுத்துக்கிட்டு தன்னோட தேவைக்கு ஏத்தா மாதிரி தன்னோட Operating System இருக்கணும்னு நினச்சு வடிவமைக்கத் தொடங்கினாங்க. அவங்க வடிவமைத்த டிஸ்ட்ரோ (distro) அப்படின்னு ஒரு முழு GNU/Linux Operating System உருவாக்கி Free’யா கொடுத்தாங்க (ஏன்னா, GNU/Linux ல இருக்குற எல்லா சாப்ட்வேர்களும் Stallman’னோட GPL Licence’ஸில் வெளியிட்ட softwares. அதுங்கல விக்க முடியாது, அதனால GNU/Linux ஐயும் விக்க முடியாது). காலப்போக்குல GNU/Linux ச வெறும் லினக்ஸ் (Linux) அப்படின்னு கூப்பிட ஆரம்பிச்சுட்டாங்க.
Tux the penguin, the mascot of Linux
கார்த்திகா: Chance’சே இல்ல, Linux பின்னாடி இப்படி ஒரு கதையா? மதன்: இப்பத்தான் Linux பற்றி தெரிஞ்சிக்கிட்டீங்கள்ல இனி கவலைப் படாதீங்க, இன்னைக்கு உலகத்துல Linux இல்லாத இடமே இல்லை, செல்போனிலிருந்து சூப்பர் கம்யூட்டர் வரைக்கும் Linux தான், உங்க கையிலிருக்கும் Android போன்ல இருந்து நாசா மார்ஸ்சுக்கு அனுப்பிய ரோவர் வரைக்கும் Linux தான். ஆனா இதப்பத்தி யாருக்குமே தெரியாது, ஏன், நம்ம IT Field’லயே முக்காவாசி பேரு Linux, Windows மாதிரி வெறும் OS தான்னு நினைச்சிக்கிட்டு இருக்காங்க. அது வெறும் OS இல்லைங்க, அது ஒரு உணர்வு, Linux’ஸிற்குப் பின்னாடி ஒரு சரித்திரமே இருக்கு, Open Source புரட்சிக்கு சாட்சியா கம்பீரமா நிக்கிற ஒரு சின்னம்தான் Linux. கார்த்திகா: வசனம்லாம் செமையா வருது மதன்: இன்னும் சொல்லிக்கொண்டே போகலாம்.
மதன்: அதுக்கப்புறம் Bell Labs ல மட்டும் இருந்த UNIX ச தாம்சன் என்ன பண்ணாரு, அவர் படிச்ச Berkeley யூனிவர்சிட்டி ரிசர்ச் பசங்களுக்குக் காண்பிச்சு கத்தும் கொடுத்துட்டாரு. அங்க இருந்த பசங்கல ஒருத்தர்தான் Bill Joy, இவரு கையும் காலையும் வச்சிக்கிட்டுச் சும்மா இல்லாம, vi எடிட்டர் எழுதிட்டாரு. இதைப் பார்த்த பசங்க நீ மட்டும் தான் எழுதுவியா, நானும் எழுதுறேன் பாரு அப்படின்னு சொல்லிட்டு ஏகத்துக்கும் UNIX கமாண்ஸ்ஸ C ல எழுத ஆரம்பிச்சுட்டானுங்க. அப்படி வந்ததுதான், sed, awk எல்லாம்.
Bill Joy
இதுக்கிடையில அமெரிக்க Army யோட Defense Department, இந்த பசங்க கிட்ட வந்து Theory’யா இருக்குற ஒரு நெட்வொர்க் டிசைன்ன இம்பிளிமெண்ட் பண்ணச் சொன்னாங்க. இவனுங்க அத இம்பிளிமெண்ட் பண்ணதுக்கு பேருதான் பெர்க்லி சாக்கெட்ஸ் (Berkeley Sockets), இந்த இம்ளிமெண்டேஷன ஆர்மி எடுத்துட்டு போய் அவங்க கிட்ட இருந்த UNIX சிஸ்டங்களில் இன்ஸ்டால் பண்ணி ARPANET உருவாக்குனாங்க, அதுதான் இன்னைக்கு INTERNET டா வளர்ந்து நிக்குது. கார்த்திகா: INTERNET பொறந்ததே UNIX லயா, சூப்பார்ப், பர்ஸ்டைம் இத கேள்விப்படறேன் மதன்: சரி கதைக்கு வருவோம். இப்படி UNIX வளர்ந்து வந்த நேரத்தில், சாப்ட்வேர் இன்டஸ்ட்ரீல ஒரு தொற்றுநோய் பரவுச்சு. அதுவரைக்கும் சாப்ட்வேர் விற்கும் போது அதோட Source Code’டையும் சேர்ந்து கொடுப்பாங்க, 1970 ஸ் end’லயும் 1980 starting’ளையும் இந்த வழக்கம் மாறிடுச்சு. கம்பெனிங்க மத்த கம்பெனிங்களுக்கு அவங்க எழுதிய லாஜிக் தெரியக்கூடாதுன்னு சாப்ட்வேர் விற்கும்போது Source Code தர மறுத்தாங்க. அதுவரைக்கும் Mathematical Theorem மாதிரி ஈஸியாக் கெடச்சிக்கிட்டிருந்த Source Codeங்கல கண்ல பார்ப்பதே குதிரைக் கொம்பா மாறிடுச்சு. சாதாரணமாக இருந்த சாப்ட்வேர் proprietary software’ரா மாறிடுச்சு. இதனால ஓரு user அவன் காசு கொடுத்து வாங்கின program’ல ப்ரச்சன இருந்துச்சுன்னா அத அவனாலேயே சரி பண்ணிக்க முடியல, மறுபடியும் வாங்கின கம்பெனி கிட்ட ஓட வேண்டி இருந்தது. அந்த கம்பெனி அந்த user பிரச்சனைய சரிபன்ன service charge’ஜா மறுபடியும் காசக் கரந்தானுங்க. கார்த்திகா: அவுங்க எழுதிய ப்ரோக்ராம்ல இருக்குற பிரச்சனைய clear பண்ண user invest பண்ணனுமா, நல்ல கதையா இருக்கே?? மதன்: அப்படி நொந்து போனவர்கள்ல ஒருத்தர்தான் Richard Mathew Stallman, இவரு MIT ல ஒர்க் பண்ணும் போது அங்கிருந்த ஒரு புது Printer’ல இவருக்குத் தேவையான ஒரு விஷயம் இல்ல, அத நானே அந்த Printer’ல சேர்த்துக்குறேன் எனக்கு அந்த Printer டிரைவர் Source Code கொடுங்கன்னு அந்த Printer கம்பெனி கிட்ட கேட்டார், அதற்கு அந்த கம்பெனி ‘போயா லூசு, எந்தக் காலத்துல இருக்க, வாங்கும்போது காப்பிரைட் லைசன்ஸ் பார்த்தியா இல்லையா, அதுல Source Code கொடுக்கமாட்டோம்ன்னு போட்டிருக்கோம்ல, அந்த லைசென்ஸ Accept பண்ணிட்டுத் தான Printer வாங்குன, இப்ப Source Code கேட்குற?’ னு சொல்லித் தொரத்திடுச்சு.
Richard Matthew Stallman
அப்ப முடிவு செஞ்சார், ‘இருங்கடா, இதுக்கெல்லாம் ஒரு முடிவு கட்றேன், இன்னைக்கு பாப்புலரா இருக்குற Proprietary Unix மாதிரியே ஒரு Operating System எழுதி அத copyleft licence’சா Source Code’டோட கொடுக்கிறேன்’ அப்படின்னு முடிவு பண்ணி எழுதவும் ஆரம்பிச்சுட்டார். அவர் எழுத ஆரம்பிச்ச அந்த Operating System’துக்கு பேரு GNU/Hurd, அவர் சொன்ன அந்த copyleft licence’க்குப் பேரு GPL.
இந்த GPL licence யூஸ் பண்ற சாப்ட்வேர்களின் source code’ட யாருவேனும்னாலும் படிக்கலாம், அதுல தப்பிருந்தாத் திருத்தலாம், எப்படி வேணும்னாலும் இயக்கலாம், ஒரிஜினல் Source Code’ட யாருக்கு வேண்டுமானாலும் பகிரலாம், அதுமட்டுமல்லாம திருத்தின Source Code’ட யாருக்கு வேண்டுமானாலும் பகிரலாம். இதுக்குப் பேரு Four Freedoms அப்படின்னு சொல்லுவாங்க. இந்த மாதிரியான சாப்ட்வேர்கள் தான் ப்ரீ சாப்ட்வேர்ஸ் (Free Software) இல்லின்னா ஓப்பன் சோர்ஸ் சாப்ட்வேர் அப்படின்னு (Open Source Software) சொல்லுவாங்க. இந்த மாதிரி இருக்குற Open Source Software’ரை விக்க முடியாது, ஏன்னா Source Code’யே Free’யா தராங்க, அதனால் யார் வேண்டுமானாலும் காப்பி எடுத்துக்கலாம். கார்த்திகா: Open Source னா சோர்ஸ் கோட படிக்க முடியும், இப்பத்தான் தெளிவாப் புரியுது, இவ்வளவு நாளா Open Source க்கு அர்த்தம் புரியாம இருந்திருக்கேன், அப்ப GNU/Hurd என்ன ஆச்சு?
மதன்: Open பண்ணா, ஒரு பெரிய ரூம், அங்கு ஒரு பெரிய Machine, அதுக்குப் பேரு Whirlwind I.
Whirlwind I
இது அமெரிக்கால MIT பல்கலைக்கழகத்தில் இருந்தது. இந்த Machine’ல தான் மொதல்ல Random Access Memory வச்சாங்க (RAM). இதனால இதுக்கு முன்னாடி இருந்த கம்ப்யூட்டர்களவிட இந்த கம்ப்யூட்டர் ரொம்ப வேகமா ரன் ஆச்சு. இந்த கம்ப்யூட்டர மேம்படுத்தி tx-0 கம்ப்யூட்டர் உருவாக்கினாங்க. இந்த ரெண்டு கம்ப்யூட்டர்களையும் ஒருத்தர் மட்டும் தான் ஒரு டைம்ல வொர்க் பண்ண முடியும். இந்த மாதிரி single task’கா இருந்த ஒரு IBM 7094 கம்ப்யூட்டர Time Sharing Machine’டைம் ஷேரிங் மெஷி’னா 1963 ல மாத்திக் காட்டினாங்க, அந்த Time Sharing Operating System’க்கு CTSS (Compatible Time Sharing System) அப்படின்னு பேர் வச்சாங்க. இந்த CTSS Operating System மேம்படுத்த Project MAC அப்படிங்கற திட்டத்தை உருவாக்கி MIT ல ஒரு குரூப் மண்டையைப் பிச்சுக்கிட்டு இருந்தாங்க, இவங்க கூட Bell Labs’ம் GE (General Electrics)’ம் சேர்த்துக்கிட்டாங்க. இவங்க உருவாக்கப் போற அந்த Multi Tasking Operating System’க்கு Multics (Multiplexed Information and Computing Services) பேரும் வச்சுக்கிட்டாங்க.
Massachusetts Institute of Technology (MIT), Cambridge, Massachusetts.
கார்த்திகா: MIT, Bell Labs, GE, Multics, நியாபகம் வெச்சுக்குறேன் மதன்: ஆனா இந்த Multics Project’க்கு நிறைய பைனான்ஸ் பண்ண வேண்டி இருந்தது, அவ்வளவு செலவு செஞ்சும், எந்த ஒரு நல்ல improvement இல்ல, இதுக்கு மேல continue பண்ணா கஞ்சிக்குக் கூட லாட்ரி அடிக்கணும்னு முடிவு பண்ணி 1969’ல Bell Labs project’ல இருந்து வெளிய வந்துட்டாங்க. இங்கதான் பிதாமகன்கள் இரண்டுபேர அறிமுகப்படுத்தப்போறேன், ஒருத்தர் பேரு கென் தாம்ஸன் (Ken Thomson) இன்னொருத்தர் பேரு டென்னிஸ் ரிட்சி (Dennis Ritchie), இவங்க ரெண்டு பேரும் Bell Labs காக Multics Project’க்காக work பண்ணவங்க.
Thompson (sitting) and Ritchie working together at a PDP-11
கார்த்திகா: Dennis Ritchie, பேர எங்கேயோ கேள்விப்பட்டிருக்கேன் மதன்: Bell Labs க்கு ரிட்டர்ன் ஆன ரெண்டு பேரும் அவங்க Multics’ல கத்துக்கிட்ட விஷயங்கள அவங்களோட close friends கிட்ட ஷேர் பண்ணிக்கிட்டாங்க, அவங்கள்ல முக்கியமானவர் Doug Mcllroy, அவங்க Research Center’ரோட வருங்கால ஹெட். வந்தவங்க ரெண்டு பேரும், எங்களுக்கு ஒரு மிஷின் வேணும் Multics பத்தி நிறைய ஐடியா இருக்குன்னு கம்பெனி கிட்ட கேட்டாங்க. மதன்: அப்பத்தான் இவங்க கிட்ட ஓரங்கட்டின ஒரு PDP-7 மெஷின் கெடச்சது. Thomson என்ன பண்ணாரு, அவரு ஏற்கனவே Multics’மல்டிக்ஸ்’ல எழுதின space travel gameம, இவங்ககிட்ட இருக்குற ஐடியாக்கள் யூஸ் பண்ணி PDP-7 னின் Assembly Language’ல எழுதிட்டாரு. இதுல கெடச்ச கான்பிடன்ஸ் வெச்சு, பிரண்ட்ஸ் எல்லாம் சேர்ந்து PDP-7 ல ஒரு Operating System உருவாக்கிட்டாங்க. இதுக்கு UNICS (UNiplexed Information and Computing Service) னு பேரும் வெச்சுட்டாங்க. இவங்கள்ல ஒருத்தர் Kerningen, இவருக்கு UNICS ல லாஸ்ட்டா இருக்குற S எழுத்து புடிக்காம அத X ஆ மாத்தி, UNIX ஆக்கிட்டாரு. இது நடந்தது 1970.
PDP-7
கார்த்திகா: UNIX இப்படித்தான் வந்ததா? இன்ட்ரஸ்டிங். மதன்: கொஞ்ச நாள்லயே Doug Mcllroy, Research Center Head ஆனாரு, இவங்களோட வொர்க் புடிச்சு போக, இவங்களுக்காக PDP-11 வாங்க கம்பெனிக்கு சஜஸ்ட் பண்ணாரு. PDP-7 ல இருந்து PDP-11 க்கு UNIX port பண்ணாங்க, கூடவே கம்பெனிக்குத் தேவையான ஒரு சாப்ட்வேர அதுல ரன் பண்ண வச்சாங்க. தாம்சன் அதேநேரம் ஈஸியா ப்ரோக்ராம் எழுத B னு ஒரு Language’ஜ் BCPL ன்ற Language’ல இருந்து உருவாக்கினார், அத Dennis Ritchie இன்னும் மெருகேற்றி ப்ரோக்ராம் எழுத, ரொம்ப ஈஸியான Language’ஜா மாத்திட்டாரு. அதுக்குப் பேரு C அப்படின்னு வச்சுட்டாரு. ப்ரண்ட்ஸ் எல்லாம் மறுபடியும் சேர்ந்து Assembly’ல இருந்த UNIX ச C ல எழுதிட்டாங்க. இப்படித்தான் C லாங்குவேஜ் வந்தது. இது நடந்தது 1972. இவங்க எக்ஸ்டராவா, நிறைய commands’களையும் UNIX காக C ல எழுதிட்டாங்க, அப்படி வந்துதான் ls, grep, cut, mv எல்லாம். கார்த்திகா: கரெக்ட், C லாங்வேஜ், Dennis Ritchie, இப்பதான் நியாபகம் வருது, சரி மேல சொல்லுங்க, ரொம்ப இன்ட்ரஸ்டிங்காப் போகுது.
கார்த்திகா: Shell Scripting கத்துக்கணும். மதன்: உங்க Linux Server’ல போய், ‘man sh’ command அடிங்க, ஒரு Manual வரும், அத ஒரு எழுத்து விடாம மனப்பாடம் பண்ணுங்க அது போதும் கார்த்திகா: கிண்டலா? மதன்: சீரியஸ்சாங்க, நீங்க ‘man sh’ command மூலம் வர Manual’ல இருக்குற அத்தனை விஷயத்தையும் தெரிஞ்சுக்கிட்டா Shell Scripting தெரிஞ்சா மாதிரி கார்த்திகா: இல்ல இல்ல, நிறைய தெரிஞ்சுக்கணும், Shell Scripting, Linux மதன்: Linux’னா என்னன்னு நினைச்சுட்டு இருக்கீங்க? கார்த்திகா: Linux, Windows மாதிரி ஒரு OS, Server’ரா நிறைய இடத்துல use பண்றாங்க, virus வராது, அதானே? மதன்: Linux வெறும் OS இல்லீங்க, அதுக்குப் பின்னாடி ஒரு சரித்திரமே இருக்கு. கார்த்திகா: History? சொல்லுங்க கேட்போம் மதன்: கொஞ்சம் பெரிய கதை, அதுக்கு நாம 1950’ஸ்குப் போகணும் .
மதன்: சொல்றேன், அப்படி எழுத ஆரம்பிச்சவரு, அவரு எழுதின softwares’சை usenet ல இவர மாதிரி இருக்குற programmers கிட்ட share பண்ணிக்கிட்டாரு. Source Code பார்த்தவங்க அதிலிருந்த mistake எல்லாம் fix பண்ண ஆரம்பிச்சாங்க, இப்படி interest’டா work பண்ணவங்க ஒன்னா சேர்ந்து ஒரு குழுவை ஆரம்பிச்சாங்க. அதுக்கு பேரு GNU Project.
GNU mascot
Stallman Unix’ல இருக்குற மாதிரியே பல commands எழுதினாரு, gcc ன்ற ஒரு C compiler எழுதினாரு, emacs எழுதினாரு, ஆனா இவரால இவர் யோசிச்சு வச்சிருந்த Hurd kernel ல எழுத முடியல, ஒரு Operating System’த்துல Kernel இல்லாம எதுவும் இயங்காது, இவரு ஒரு OS க்குத் தேவையான எல்லாத்தையும் எழுதிட்டாரு Kernel’ல தவிர. கார்த்திகா: அப்ப அவரோட கனவு என்னாச்சு? மதன்: அவரோட கனவு 1991 ல நிஜமாச்சு. பின்லாந்தில் (Finland) ஹெல்சிங்கி (Helsinki) யூனிவர்சிட்டில படிச்சிட்டிருந்த லினஸ் டார்வெல்ஸ் (Linus Torvalds) ன்ற Research Student, தன்னோட குரு Andrew Tanenbaum கிட்ட இருக்குற Unix Kernel போல இருக்கும் Minix Kernel மாதிரி தானும் ஒரு Kernel உருவாக்க நினைச்சார்,
Linus Torvalds
ஆனா அவர் Minix மாதிரி மைக்ரோ Kernel’லா இல்லாம ஒரிஜினல் Unix மாதிரி ஒரு Monolithic Kernel’ல உருவாக்கினார். அதுக்கு Linux அப்படின்னு பேர் வந்தது, Linux compile பண்ண, Torvalds, Stallman எழுதிய gcc compiler use பண்ணார். அதுமட்டுமில்லாம Stallman எழுதின பல Open Source Software use பண்ணார். தன்னோட kernel’லும் Stallman softwares போல எல்லாரும் பயன்படுத்தனும், தவறு இருந்தாத் திருத்தனும் அப்படின்னு ஆசைப்பட்டவர் Stallman மாதிரி அவரோட Kernel’ல GPL licence’ல வெளியிட்டார். உலகத்துல இருக்குற பல Programmer’கள் அவர் Kernel’ல work பண்ண ஆரம்பிச்சாங்க. Linux Kernel’ல் மட்டும் வச்சு ஒன்னும் பண்ண முடியாது, அதேபோல GNU Program’கள் Kernel இல்லன்னா work ஆகாது, இந்த GNU வையும் Linux ஐயும் சிலபேர் எடுத்துக்கிட்டு தன்னோட தேவைக்கு ஏத்தா மாதிரி தன்னோட Operating System இருக்கணும்னு நினச்சு வடிவமைக்கத் தொடங்கினாங்க. அவங்க வடிவமைத்த டிஸ்ட்ரோ (distro) அப்படின்னு ஒரு முழு GNU/Linux Operating System உருவாக்கி Free’யா கொடுத்தாங்க (ஏன்னா, GNU/Linux ல இருக்குற எல்லா சாப்ட்வேர்களும் Stallman’னோட GPL Licence’ஸில் வெளியிட்ட softwares. அதுங்கல விக்க முடியாது, அதனால GNU/Linux ஐயும் விக்க முடியாது). காலப்போக்குல GNU/Linux ச வெறும் லினக்ஸ் (Linux) அப்படின்னு கூப்பிட ஆரம்பிச்சுட்டாங்க.
Tux the penguin, the mascot of Linux
கார்த்திகா: Chance’சே இல்ல, Linux பின்னாடி இப்படி ஒரு கதையா? மதன்: இப்பத்தான் Linux பற்றி தெரிஞ்சிக்கிட்டீங்கள்ல இனி கவலைப் படாதீங்க, இன்னைக்கு உலகத்துல Linux இல்லாத இடமே இல்லை, செல்போனிலிருந்து சூப்பர் கம்யூட்டர் வரைக்கும் Linux தான், உங்க கையிலிருக்கும் Android போன்ல இருந்து நாசா மார்ஸ்சுக்கு அனுப்பிய ரோவர் வரைக்கும் Linux தான். ஆனா இதப்பத்தி யாருக்குமே தெரியாது, ஏன், நம்ம IT Field’லயே முக்காவாசி பேரு Linux, Windows மாதிரி வெறும் OS தான்னு நினைச்சிக்கிட்டு இருக்காங்க. அது வெறும் OS இல்லைங்க, அது ஒரு உணர்வு, Linux’ஸிற்குப் பின்னாடி ஒரு சரித்திரமே இருக்கு, Open Source புரட்சிக்கு சாட்சியா கம்பீரமா நிக்கிற ஒரு சின்னம்தான் Linux. கார்த்திகா: வசனம்லாம் செமையா வருது மதன்: இன்னும் சொல்லிக்கொண்டே போகலாம்.
மதன்: அதுக்கப்புறம் Bell Labs ல மட்டும் இருந்த UNIX ச தாம்சன் என்ன பண்ணாரு, அவர் படிச்ச Berkeley யூனிவர்சிட்டி ரிசர்ச் பசங்களுக்குக் காண்பிச்சு கத்தும் கொடுத்துட்டாரு. அங்க இருந்த பசங்கல ஒருத்தர்தான் Bill Joy, இவரு கையும் காலையும் வச்சிக்கிட்டுச் சும்மா இல்லாம, vi எடிட்டர் எழுதிட்டாரு. இதைப் பார்த்த பசங்க நீ மட்டும் தான் எழுதுவியா, நானும் எழுதுறேன் பாரு அப்படின்னு சொல்லிட்டு ஏகத்துக்கும் UNIX கமாண்ஸ்ஸ C ல எழுத ஆரம்பிச்சுட்டானுங்க. அப்படி வந்ததுதான், sed, awk எல்லாம்.
Bill Joy
இதுக்கிடையில அமெரிக்க Army யோட Defense Department, இந்த பசங்க கிட்ட வந்து Theory’யா இருக்குற ஒரு நெட்வொர்க் டிசைன்ன இம்பிளிமெண்ட் பண்ணச் சொன்னாங்க. இவனுங்க அத இம்பிளிமெண்ட் பண்ணதுக்கு பேருதான் பெர்க்லி சாக்கெட்ஸ் (Berkeley Sockets), இந்த இம்ளிமெண்டேஷன ஆர்மி எடுத்துட்டு போய் அவங்க கிட்ட இருந்த UNIX சிஸ்டங்களில் இன்ஸ்டால் பண்ணி ARPANET உருவாக்குனாங்க, அதுதான் இன்னைக்கு INTERNET டா வளர்ந்து நிக்குது. கார்த்திகா: INTERNET பொறந்ததே UNIX லயா, சூப்பார்ப், பர்ஸ்டைம் இத கேள்விப்படறேன் மதன்: சரி கதைக்கு வருவோம். இப்படி UNIX வளர்ந்து வந்த நேரத்தில், சாப்ட்வேர் இன்டஸ்ட்ரீல ஒரு தொற்றுநோய் பரவுச்சு. அதுவரைக்கும் சாப்ட்வேர் விற்கும் போது அதோட Source Code’டையும் சேர்ந்து கொடுப்பாங்க, 1970 ஸ் end’லயும் 1980 starting’ளையும் இந்த வழக்கம் மாறிடுச்சு. கம்பெனிங்க மத்த கம்பெனிங்களுக்கு அவங்க எழுதிய லாஜிக் தெரியக்கூடாதுன்னு சாப்ட்வேர் விற்கும்போது Source Code தர மறுத்தாங்க. அதுவரைக்கும் Mathematical Theorem மாதிரி ஈஸியாக் கெடச்சிக்கிட்டிருந்த Source Codeங்கல கண்ல பார்ப்பதே குதிரைக் கொம்பா மாறிடுச்சு. சாதாரணமாக இருந்த சாப்ட்வேர் proprietary software’ரா மாறிடுச்சு. இதனால ஓரு user அவன் காசு கொடுத்து வாங்கின program’ல ப்ரச்சன இருந்துச்சுன்னா அத அவனாலேயே சரி பண்ணிக்க முடியல, மறுபடியும் வாங்கின கம்பெனி கிட்ட ஓட வேண்டி இருந்தது. அந்த கம்பெனி அந்த user பிரச்சனைய சரிபன்ன service charge’ஜா மறுபடியும் காசக் கரந்தானுங்க. கார்த்திகா: அவுங்க எழுதிய ப்ரோக்ராம்ல இருக்குற பிரச்சனைய clear பண்ண user invest பண்ணனுமா, நல்ல கதையா இருக்கே?? மதன்: அப்படி நொந்து போனவர்கள்ல ஒருத்தர்தான் Richard Mathew Stallman, இவரு MIT ல ஒர்க் பண்ணும் போது அங்கிருந்த ஒரு புது Printer’ல இவருக்குத் தேவையான ஒரு விஷயம் இல்ல, அத நானே அந்த Printer’ல சேர்த்துக்குறேன் எனக்கு அந்த Printer டிரைவர் Source Code கொடுங்கன்னு அந்த Printer கம்பெனி கிட்ட கேட்டார், அதற்கு அந்த கம்பெனி ‘போயா லூசு, எந்தக் காலத்துல இருக்க, வாங்கும்போது காப்பிரைட் லைசன்ஸ் பார்த்தியா இல்லையா, அதுல Source Code கொடுக்கமாட்டோம்ன்னு போட்டிருக்கோம்ல, அந்த லைசென்ஸ Accept பண்ணிட்டுத் தான Printer வாங்குன, இப்ப Source Code கேட்குற?’ னு சொல்லித் தொரத்திடுச்சு.
Richard Matthew Stallman
அப்ப முடிவு செஞ்சார், ‘இருங்கடா, இதுக்கெல்லாம் ஒரு முடிவு கட்றேன், இன்னைக்கு பாப்புலரா இருக்குற Proprietary Unix மாதிரியே ஒரு Operating System எழுதி அத copyleft licence’சா Source Code’டோட கொடுக்கிறேன்’ அப்படின்னு முடிவு பண்ணி எழுதவும் ஆரம்பிச்சுட்டார். அவர் எழுத ஆரம்பிச்ச அந்த Operating System’துக்கு பேரு GNU/Hurd, அவர் சொன்ன அந்த copyleft licence’க்குப் பேரு GPL.
இந்த GPL licence யூஸ் பண்ற சாப்ட்வேர்களின் source code’ட யாருவேனும்னாலும் படிக்கலாம், அதுல தப்பிருந்தாத் திருத்தலாம், எப்படி வேணும்னாலும் இயக்கலாம், ஒரிஜினல் Source Code’ட யாருக்கு வேண்டுமானாலும் பகிரலாம், அதுமட்டுமல்லாம திருத்தின Source Code’ட யாருக்கு வேண்டுமானாலும் பகிரலாம். இதுக்குப் பேரு Four Freedoms அப்படின்னு சொல்லுவாங்க. இந்த மாதிரியான சாப்ட்வேர்கள் தான் ப்ரீ சாப்ட்வேர்ஸ் (Free Software) இல்லின்னா ஓப்பன் சோர்ஸ் சாப்ட்வேர் அப்படின்னு (Open Source Software) சொல்லுவாங்க. இந்த மாதிரி இருக்குற Open Source Software’ரை விக்க முடியாது, ஏன்னா Source Code’யே Free’யா தராங்க, அதனால் யார் வேண்டுமானாலும் காப்பி எடுத்துக்கலாம். கார்த்திகா: Open Source னா சோர்ஸ் கோட படிக்க முடியும், இப்பத்தான் தெளிவாப் புரியுது, இவ்வளவு நாளா Open Source க்கு அர்த்தம் புரியாம இருந்திருக்கேன், அப்ப GNU/Hurd என்ன ஆச்சு?
மதன்: Open பண்ணா, ஒரு பெரிய ரூம், அங்கு ஒரு பெரிய Machine, அதுக்குப் பேரு Whirlwind I.
Whirlwind I
இது அமெரிக்கால MIT பல்கலைக்கழகத்தில் இருந்தது. இந்த Machine’ல தான் மொதல்ல Random Access Memory வச்சாங்க (RAM). இதனால இதுக்கு முன்னாடி இருந்த கம்ப்யூட்டர்களவிட இந்த கம்ப்யூட்டர் ரொம்ப வேகமா ரன் ஆச்சு. இந்த கம்ப்யூட்டர மேம்படுத்தி tx-0 கம்ப்யூட்டர் உருவாக்கினாங்க. இந்த ரெண்டு கம்ப்யூட்டர்களையும் ஒருத்தர் மட்டும் தான் ஒரு டைம்ல வொர்க் பண்ண முடியும். இந்த மாதிரி single task’கா இருந்த ஒரு IBM 7094 கம்ப்யூட்டர Time Sharing Machine’டைம் ஷேரிங் மெஷி’னா 1963 ல மாத்திக் காட்டினாங்க, அந்த Time Sharing Operating System’க்கு CTSS (Compatible Time Sharing System) அப்படின்னு பேர் வச்சாங்க. இந்த CTSS Operating System மேம்படுத்த Project MAC அப்படிங்கற திட்டத்தை உருவாக்கி MIT ல ஒரு குரூப் மண்டையைப் பிச்சுக்கிட்டு இருந்தாங்க, இவங்க கூட Bell Labs’ம் GE (General Electrics)’ம் சேர்த்துக்கிட்டாங்க. இவங்க உருவாக்கப் போற அந்த Multi Tasking Operating System’க்கு Multics (Multiplexed Information and Computing Services) பேரும் வச்சுக்கிட்டாங்க.
Massachusetts Institute of Technology (MIT), Cambridge, Massachusetts.
கார்த்திகா: MIT, Bell Labs, GE, Multics, நியாபகம் வெச்சுக்குறேன் மதன்: ஆனா இந்த Multics Project’க்கு நிறைய பைனான்ஸ் பண்ண வேண்டி இருந்தது, அவ்வளவு செலவு செஞ்சும், எந்த ஒரு நல்ல improvement இல்ல, இதுக்கு மேல continue பண்ணா கஞ்சிக்குக் கூட லாட்ரி அடிக்கணும்னு முடிவு பண்ணி 1969’ல Bell Labs project’ல இருந்து வெளிய வந்துட்டாங்க. இங்கதான் பிதாமகன்கள் இரண்டுபேர அறிமுகப்படுத்தப்போறேன், ஒருத்தர் பேரு கென் தாம்ஸன் (Ken Thomson) இன்னொருத்தர் பேரு டென்னிஸ் ரிட்சி (Dennis Ritchie), இவங்க ரெண்டு பேரும் Bell Labs காக Multics Project’க்காக work பண்ணவங்க.
Thompson (sitting) and Ritchie working together at a PDP-11
கார்த்திகா: Dennis Ritchie, பேர எங்கேயோ கேள்விப்பட்டிருக்கேன் மதன்: Bell Labs க்கு ரிட்டர்ன் ஆன ரெண்டு பேரும் அவங்க Multics’ல கத்துக்கிட்ட விஷயங்கள அவங்களோட close friends கிட்ட ஷேர் பண்ணிக்கிட்டாங்க, அவங்கள்ல முக்கியமானவர் Doug Mcllroy, அவங்க Research Center’ரோட வருங்கால ஹெட். வந்தவங்க ரெண்டு பேரும், எங்களுக்கு ஒரு மிஷின் வேணும் Multics பத்தி நிறைய ஐடியா இருக்குன்னு கம்பெனி கிட்ட கேட்டாங்க. மதன்: அப்பத்தான் இவங்க கிட்ட ஓரங்கட்டின ஒரு PDP-7 மெஷின் கெடச்சது. Thomson என்ன பண்ணாரு, அவரு ஏற்கனவே Multics’மல்டிக்ஸ்’ல எழுதின space travel gameம, இவங்ககிட்ட இருக்குற ஐடியாக்கள் யூஸ் பண்ணி PDP-7 னின் Assembly Language’ல எழுதிட்டாரு. இதுல கெடச்ச கான்பிடன்ஸ் வெச்சு, பிரண்ட்ஸ் எல்லாம் சேர்ந்து PDP-7 ல ஒரு Operating System உருவாக்கிட்டாங்க. இதுக்கு UNICS (UNiplexed Information and Computing Service) னு பேரும் வெச்சுட்டாங்க. இவங்கள்ல ஒருத்தர் Kerningen, இவருக்கு UNICS ல லாஸ்ட்டா இருக்குற S எழுத்து புடிக்காம அத X ஆ மாத்தி, UNIX ஆக்கிட்டாரு. இது நடந்தது 1970.
PDP-7
கார்த்திகா: UNIX இப்படித்தான் வந்ததா? இன்ட்ரஸ்டிங். மதன்: கொஞ்ச நாள்லயே Doug Mcllroy, Research Center Head ஆனாரு, இவங்களோட வொர்க் புடிச்சு போக, இவங்களுக்காக PDP-11 வாங்க கம்பெனிக்கு சஜஸ்ட் பண்ணாரு. PDP-7 ல இருந்து PDP-11 க்கு UNIX port பண்ணாங்க, கூடவே கம்பெனிக்குத் தேவையான ஒரு சாப்ட்வேர அதுல ரன் பண்ண வச்சாங்க. தாம்சன் அதேநேரம் ஈஸியா ப்ரோக்ராம் எழுத B னு ஒரு Language’ஜ் BCPL ன்ற Language’ல இருந்து உருவாக்கினார், அத Dennis Ritchie இன்னும் மெருகேற்றி ப்ரோக்ராம் எழுத, ரொம்ப ஈஸியான Language’ஜா மாத்திட்டாரு. அதுக்குப் பேரு C அப்படின்னு வச்சுட்டாரு. ப்ரண்ட்ஸ் எல்லாம் மறுபடியும் சேர்ந்து Assembly’ல இருந்த UNIX ச C ல எழுதிட்டாங்க. இப்படித்தான் C லாங்குவேஜ் வந்தது. இது நடந்தது 1972. இவங்க எக்ஸ்டராவா, நிறைய commands’களையும் UNIX காக C ல எழுதிட்டாங்க, அப்படி வந்துதான் ls, grep, cut, mv எல்லாம். கார்த்திகா: கரெக்ட், C லாங்வேஜ், Dennis Ritchie, இப்பதான் நியாபகம் வருது, சரி மேல சொல்லுங்க, ரொம்ப இன்ட்ரஸ்டிங்காப் போகுது.
கார்த்திகா: Shell Scripting கத்துக்கணும். மதன்: உங்க Linux Server’ல போய், ‘man sh’ command அடிங்க, ஒரு Manual வரும், அத ஒரு எழுத்து விடாம மனப்பாடம் பண்ணுங்க அது போதும் கார்த்திகா: கிண்டலா? மதன்: சீரியஸ்சாங்க, நீங்க ‘man sh’ command மூலம் வர Manual’ல இருக்குற அத்தனை விஷயத்தையும் தெரிஞ்சுக்கிட்டா Shell Scripting தெரிஞ்சா மாதிரி கார்த்திகா: இல்ல இல்ல, நிறைய தெரிஞ்சுக்கணும், Shell Scripting, Linux மதன்: Linux’னா என்னன்னு நினைச்சுட்டு இருக்கீங்க? கார்த்திகா: Linux, Windows மாதிரி ஒரு OS, Server’ரா நிறைய இடத்துல use பண்றாங்க, virus வராது, அதானே? மதன்: Linux வெறும் OS இல்லீங்க, அதுக்குப் பின்னாடி ஒரு சரித்திரமே இருக்கு. கார்த்திகா: History? சொல்லுங்க கேட்போம் மதன்: கொஞ்சம் பெரிய கதை, அதுக்கு நாம 1950’ஸ்குப் போகணும் .
Presented my talk at KanchiLUG’s Monthly meet Mar 10, 2024, talk details follows
Topic : My Favourite Five Linux Commands Description : Let me share my current top five linux commands those i have learned form the online GNU/Linux introduction course by Kaniyam Foundation. Duration : 15 mins Name : A Martin Vijai Deepak About : Adapting to Linux/Ubuntu ecosystem 5 years back. I was looking for ways to improve my competency in Linux. I came across the linux online course by kaniyam. Completing the course improved my understanding on Linux and Linux commands that i have learned now allows me to do more things form the terminal.
Note: Above gif animation of Libre Office Impress Slide Show was created by Pencil2D Animation a free and open source tool.
Presented my talk at KanchiLUG’s Monthly meet Mar 10, 2024, talk details follows
Topic : My Favourite Five Linux Commands Description : Let me share my current top five linux commands those i have learned form the online GNU/Linux introduction course by Kaniyam Foundation. Duration : 15 mins Name : A Martin Vijai Deepak About : Adapting to Linux/Ubuntu ecosystem 5 years back. I was looking for ways to improve my competency in Linux. I came across the linux online course by kaniyam. Completing the course improved my understanding on Linux and Linux commands that i have learned now allows me to do more things form the terminal.
Note: Above gif animation of Libre Office Impress Slide Show was created by Pencil2D Animation a free and open source tool.
Popular open stack for web development – LAMP. Click Here to read documentation.
Apache installation
sudo apt update -y
sudo apt install apache2 apache2-utils -y
sudo systemctl start apache2
sudo systemctl enable apache2
sudo systemctl status apache2
sudo apache2 -v
Providing access to Apache user (Default user) for document root
sudo chown -R www-data:www-data /var/www/html
Installing MariaDB
sudo apt install mariadb-server mariadb-client
sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo systemctl status mariadb
creating root password for mariadb
mysql_secure_installation Enter current password for root (enter for none): enter Set root password? [Y/n] Y New password:* Re-enter new password:* Remove anonymous users? [Y/n]Y Disallow root login remotely? [Y/n]Y Remove test database and access to it? [Y/n]Y Reload privilege tables now? [Y/n]Y
Popular open stack for web development – LAMP. Click Here to read documentation.
Apache installation
sudo apt update -y
sudo apt install apache2 apache2-utils -y
sudo systemctl start apache2
sudo systemctl enable apache2
sudo systemctl status apache2
sudo apache2 -v
Providing access to Apache user (Default user) for document root
sudo chown -R www-data:www-data /var/www/html
Installing MariaDB
sudo apt install mariadb-server mariadb-client
sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo systemctl status mariadb
creating root password for mariadb
mysql_secure_installation Enter current password for root (enter for none): enter Set root password? [Y/n] Y New password:* Re-enter new password:* Remove anonymous users? [Y/n]Y Disallow root login remotely? [Y/n]Y Remove test database and access to it? [Y/n]Y Reload privilege tables now? [Y/n]Y