Ravindra BagaleCourses & study guides English

Linux files: touch, cat, nano, vi, brace shortcuts, ls -R आणि tree

चला, सुरू करूया. मागच्या class मध्ये आपण server मध्ये फिरायला शिकलो: pwd, ls, mkdir, cd, आणि absolute, relative आणि ~ paths. पण folders म्हणजे फक्त डबे. Server वरचं खरं काम files मध्ये होतं: settings, web pages, scripts, logs. आज आपण चार वेगवेगळ्या पद्धतींनी files बनवणार, त्यात लिहिणार, वाचणार, त्यात भर घालणार आणि त्या edit करणार. आणि एक shortcut पण शिकणार, ज्याने एका ओळीत folders चं अख्खं घराणं तयार होतं. तुमचा server चालू ठेवा आणि प्रत्येक command माझ्यासोबत type करा.

या class मध्ये काय शिकणार

  • Directories आणि paths ची एका मिनिटाची उजळणी
  • Folder चं झाड बनवणं (Ramayan चं उदाहरण), step by step आणि एका ओळीत
  • Brace shortcut {a,b,c}, आणि -p का महत्त्वाचा
  • File बनवायचे चार मार्ग: touch, cat, nano, vi
  • touch: रिकाम्या files, आणि त्याचं खरं काम (timestamp)
  • Dots आणि extensions: photo.jpg हे फक्त नाव का आहे
  • रिकामी file कुणाला आणि का हवी असते
  • एक नाव, एकच item; capital अक्षरं वेगळी
  • cat: > ने लिहा, वाचा, >> ने append करा, आणि Ctrl+D ने संपवा
  • nano: सगळ्यात सोपा editor, आणि save करून बाहेर कसं पडायचं
  • Space असलेली file ची नावं, आणि एकदम अनेक files उघडणं
  • Practice task: calendar, कमीत कमी commands मध्ये
  • ls -R आणि tree
  • प्रत्येक command म्हणजे एक छोटा program
  • vi: modes, i a o, Esc, :wq आणि :q!
  • घरी करायचे tasks

1. एका मिनिटाची उजळणी: directories आणि paths

का. आजचं सगळं मागच्या class वर उभं आहे. खालची कुठलीही ओळ नवीन वाटली तर आधी Linux directories आणि paths: pwd, ls, mkdir, cd, absolute vs relative paths आणि ~ वाचा.

तुम्हाला आधीच माहीत असायला हवं:

Command काय करतो
ls इथे काय आहे ते दाखवतो
ls -r तीच list उलट्या order मध्ये (small r)
mkdir ravi raja rani एकदम तीन folders
mkdir 'ravicha folder' नावात space असलेला एक folder
mkdir -p one/two/three एकात एक folders, parents आपोआप
cd one/two/three एकदम अनेक levels खाली
cd .., cd ../.., cd ../../.. एक, दोन, तीन levels वर
cd - आधीच्या folder मध्ये परत
cd home (/home/ec2-user)
cd /home/ec2-user/ravi absolute path ने कुठेही थेट

ls -r (small r, reverse) आणि ls -R (capital R, recursive) वेगळे ठेवा. ls -R आपण section 14 मध्ये बघू.

2. Assignment: Ramayan चं झाड बनवा

का. खरे projects झाडासारखेच असतात: website च्या folder मध्ये css, images आणि js; app मध्ये logs आणि config. काढलेलं चित्र folders मध्ये बदलता आलं पाहिजे.

Task. तुमच्या home folder मध्ये हे झाड बनवा: Ramayan, त्याच्या आत Dasarath, आणि Dasarath च्या आत चार folders: Ram, Laxman, Bharat, Shatrughna.

Handwritten board: a box Ramayan, an arrow down to a box Dasarath, and four boxes under Dasarath: RAM, Laxman, Bharat and Shatrughna.

Class board वरून: Assignment: वर Ramayan, त्याच्या आत Dasarath, आणि Dasarath च्या आत चार folders: Ram, Laxman, Bharat आणि Shatrughna.

कसं, step by step (~ पासून):

  1. cd (आपण home मध्ये आहोत याची खात्री करा).
  2. mkdir Ramayan
  3. mkdir Ramayan/Dasarath
  4. mkdir Ramayan/Dasarath/Ram
  5. mkdir Ramayan/Dasarath/Laxman
  6. mkdir Ramayan/Dasarath/Bharat
  7. mkdir Ramayan/Dasarath/Shatrughna
  8. तपासा: ls Ramayan/Dasarath → Bharat Laxman Ram Shatrughna

प्रत्येक step चालते कारण आधीच्या step ने parent बनवलेला असतो. Path ची हीच तर गंमत आहे: जो folder अजून अस्तित्वातच नाही, त्याच्या आत folder ठेवता येत नाही.

हेच एका ओळीत (लांब version):

mkdir -p Ramayan/Dasarath/Ram Ramayan/Dasarath/Laxman Ramayan/Dasarath/Bharat Ramayan/Dasarath/Shatrughna
  1. Space ने वेगळे केलेले चार paths, म्हणजे चार folders.
  2. Ramayan आणि Ramayan/Dasarath नसतील तर -p ते वाटेत बनवतो.

Correction

Class मध्ये एका ओळीचं version -p शिवाय type केलं. ते तेव्हाच चालतं जेव्हा आधीच्या steps मुळे Ramayan/Dasarath आधीच बनलेला असतो. अगदी सुरुवातीपासून केलं तर नुसता mkdir mkdir: cannot create directory ‘Ramayan/Dasarath/Ram’: No such file or directory देऊन थांबतो. -p लावा, मग शून्यापासूनसुद्धा चालतं.

3. Brace shortcut: {a,b,c}

का. वरच्या लांब ओळीत Ramayan/Dasarath/ चार वेळा आलंय. जास्त typing म्हणजे जास्त typos.

काय. Common भाग एकदाच लिहा, आणि वेगळी नावं curly braces मध्ये, comma ने वेगळी करून ठेवा:

mkdir -p Ramayan/Dasarath/{Ram,Laxman,Bharat,Shatrughna}
  1. Ramayan/Dasarath/ हा common path.
  2. {Ram,Laxman,Bharat,Shatrughna} ही नावांची list.
  3. नावांमध्ये commas, आणि braces च्या आत कुठेही space नाही.
  4. mkdir सुरू व्हायच्या आधीच shell (bash) ही ओळ चार पूर्ण paths मध्ये बदलतो. mkdir ला लांब version च मिळतं.
Handwritten board with three prompt lines: mkdir Ramayan; mkdir Ramayan/Dasarath; mkdir Ramayan/Dasarath/ followed by curly braces around RAM, Laxman, Bharat, Shatrughna separated by commas.

Class board वरून: mkdir Ramayan, मग mkdir Ramayan/Dasarath, आणि मग braces वापरून चारही मुलं एका ओळीत. पहिल्या दोन ओळींनी parents आधीच बनवले होते, म्हणून तिसरी ओळ -p शिवाय चालते.

Braces: shell एका ओळीचे अनेक paths करतो mkdir -p Ramayan/Dasarath/{Ram,Laxman,Bharat,Shatrughna} निळा = common path, एकदाच लिहिलेलानारिंगी = नावं, comma ने वेगळी, space नाही mkdir चालायच्या आधी bash याचं असं करतो: mkdir -p Ramayan/Dasarath/Ram Ramayan/Dasarath/Laxman Ramayan/Dasarath/Bharat Ramayan/Dasarath/Shatrughna RamayanDasarath Ram Laxman Bharat Shatrughna Ramayan आणि Dasarath नसतील तर -p ते पण बनवतो mkdir -p Ramayan/Dasarath/{Ram, Laxman}comma नंतर space दिला की बिघडतं: current folder मध्ये {Ram, नावाचा folder आणि Laxman} नावाचा folder बनतो Brace ची कुठलीही ओळ आधी echo ने बघून घ्या: echo Ramayan/Dasarath/{Ram,Laxman}

Figure 1. Animation: mkdir चालायच्या आधी bash Ramayan/Dasarath/{Ram,Laxman,Bharat,Shatrughna} चे चार paths करतो, आणि चार folders दिसतात. Comma नंतर space दिला तर expansion तुटतं.

Expansion स्वतः बघा. Command ला shell काय देणार आहे ते echo काहीही न बनवता दाखवतो:

  1. echo Ramayan/Dasarath/{Ram,Laxman} → Ramayan/Dasarath/Ram Ramayan/Dasarath/Laxman
  2. echo file{1,2,3}.txt → file1.txt file2.txt file3.txt

उदाहरण: website चा सांगाडा.

  1. mkdir -p mysite/{css,images,js}
  2. ls mysite → css images js

Correction

Board वरच्या दोन गोष्टी. पहिली, -p: Ramayan/Dasarath अजून नसेल तर brace ची ओळ -p शिवाय fail होते (board वर चालली कारण वरच्या दोन ओळींनी ते आधीच बनवले होते). दुसरी, spaces: {Ram, Laxman} असं space देऊन लिहिलं तर expand होत नाही. Shell ला दोन वेगळे शब्द दिसतात, Ramayan/Dasarath/{Ram, आणि Laxman}, आणि विचित्र नावांचे folders बनतात. Braces घट्ट ठेवा: {Ram,Laxman}.

4. Files: बनवायचे चार मार्ग

का. आत्तापर्यंत आपण फक्त folders बनवले. Folder म्हणजे रिकामा डबा, जोपर्यंत त्यात files ठेवत नाही.

काय. File बनवायचे चार नेहमीचे मार्ग:

  1. touch: रिकामी file बनवतो.
  2. cat: file बनवतो आणि त्यात ओळी type करू देतो.
  3. nano: साधा editor, terminal मधला Notepad.
  4. vi: ताकदवान editor, जो प्रत्येक Linux server वर असतो.

File बनवल्यानंतर अजून काय करू शकतात, त्यात फरक आहे:

File बनवायचे चार मार्ग, आणि प्रत्येक काय करू शकतो create write read modify append touch cat cat > f cat > f cat f cat >> f nano vi touch फक्त रिकामी file बनवतो. cat file ची दुसरी ओळ बदलू शकत नाही; तो फक्त शेवटी ओळी जोडतो.nano आणि vi editors आहेत: ते सगळं करतात.

Figure 2. touch फक्त रिकामी file बनवतो. cat create, write, read आणि append करतो, पण मधली ओळ बदलू शकत नाही. nano आणि vi सगळं करतात.

Tool Create Write Read Modify Append
touch हो (रिकामी) नाही नाही नाही नाही
cat हो (cat > f) हो (cat > f) हो (cat f) नाही हो (cat >> f)
nano हो हो हो हो हो
vi हो हो हो हो हो

"Modify" म्हणजे मधलं काहीतरी बदलणं, उदा. ओळ 2 वरचं hi चं bye करणं. ते फक्त editor करू शकतो.

5. touch: रिकाम्या files

काय. touch नंतर एक किंवा अनेक नावं दिली की रिकाम्या files बनतात.

कसं.

  1. cd (home ला जा), मग mkdir -p practice आणि cd practice.
  2. touch my.txt
  3. touch 1.txt 2.txt 3.txt (एका command मध्ये तीन files)
  4. ls → 1.txt 2.txt 3.txt my.txt
  5. ls -l my.txt → -rw-r--r--. 1 ec2-user ec2-user 0 Jan 5 10:15 my.txt

तारखेच्या आधीचा 0 म्हणजे bytes मधला size: file रिकामी आहे. touch ने त्यात लिहिता येत नाही, वाचता येत नाही, edit करता येत नाही. तो फक्त बनवतो.

त्याचं खरं काम: timestamp.

  1. ls -l my.txt चालवा आणि time बघा, उदा. 10:15.
  2. एक मिनिट थांबा, मग पुन्हा touch my.txt.
  3. ls -l my.txt → आता time आत्ताचा दिसतो, उदा. 10:20.
  4. Content (इथे अजून रिकामंच) बदलत नाही.
touch खरंतर काय करतो 1. File अजून नाही$ touch my.txtनवीन, रिकामी file बनतेsize 0 bytestouch 1.txt 2.txt 3.txt एकदम तीन बनवतो 2. File आधीच आहे$ touch my.txtcontent जसंच्या तसं राहतं;फक्त modified time बदलतो:before: ... 0 Jan 5 10:15 my.txtafter: ... 0 Jan 5 10:20 my.txtआधी आणि नंतर ls -l ने बघा नाव यावरूनच आलं: file ला touch करणं = ती आत्ताच बदलली असं mark करणं. रिकामी file बनवणं हे side काम, पण सगळे तेच वापरतात.

Figure 3. File नसेल तर touch रिकामी file बनवतो. असेल तर content ला हात लावत नाही, फक्त ls -l मध्ये दिसणारा modified time update करतो.

Correction

Class मध्ये touch फक्त "रिकाम्या files बनवणारी command" म्हणून शिकवला. त्याचं मुख्य काम म्हणजे file चा timestamp update करणं, जणू तुम्ही आत्ताच तिला हात लावलात. File नसेल तर ती बनवणं हा side effect आहे, आणि सगळे तोच वापरतात. Scripts आणि make सारखी tools नवीन काय ते ठरवायला हा timestamp वापरतात.

6. Dots आणि extensions: नावाचाच एक भाग

का. Windows वर .jpg म्हणजे फोटो, .mp4 म्हणजे video. Linux मध्ये वेगळं चालतं, आणि ते आत्ताच समजलं तर पुढे गोंधळ होत नाही.

काय.

  1. Dot हे नावातलं फक्त एक अक्षर आहे. touch report.ppt photo.jpg song.mp4 तीन रिकाम्या files बनवतो.
  2. त्यातली कुठलीच खरी presentation, फोटो किंवा गाणं नाही. नाव काहीही असो, त्या रिकाम्याच.
  3. File च्या आत काय आहे हे कळायला Linux ला extension लागत नाही. file command content बघतो:
    • file photo.jpg → photo.jpg: empty
    • echo hello > notes.jpg, मग file notes.jpg → notes.jpg: ASCII text
  4. Dot नसलेलं नावसुद्धा चालतं: touch ravi ने ravi नावाची file बनते.

मग extensions वापरायचेच कशाला? ते माणसांना आणि programs ना मदत करतात:

  1. backup.sh बघितलं की कळतं हा script आहे.
  2. Nginx त्याच्या conf.d folder मधल्या settings files फक्त .conf ने संपत असतील तरच load करतो.
  3. Browser index.html ला web page समजतो.

Correction

Class मध्ये याचं वर्णन "Linux मध्ये extensions नसतात" असं केलं. नीट सांगायचं तर: Linux ला extensions ची गरज नसते, कारण तो content बघतो. तरी extensions सगळीकडे सवय म्हणून वापरले जातात, आणि काही programs त्यावर अवलंबून असतात (जसं Nginx आणि .conf). File चं नाव .jpg केलं म्हणून ती फोटो होत नाही.

7. रिकामी file कुणाला हवी असते?

हा प्रश्न का. रिकामी file निरुपयोगी वाटते. पण server वरच्या खऱ्या कामात तसं नसतं.

खरे उपयोग:

  1. Script भरणार असलेली log file. तुम्ही touch backup.log करता, मग रोज रात्री एक scheduled script त्यात एक ओळ लिहितो: "backup done at 12:00".
  2. Placeholder. Website चं plan करताय: touch index.html about.html contact.html. रचना तयार; content नंतर लिहायचा.
  3. Marker (flag) file. एखादा script काम करत असताना maintenance.on बनवतो; बाकीचे scripts ती file आहे का ते बघतात आणि थांबतात.
  4. पटकन test files. Copy आणि delete शिकायच्या आधी practice साठी काहीतरी निरुपद्रवी लागतं: touch file1 file2 file3.

Class मधली कल्पना बरोबरच आहे: servers वर automation भरपूर असतं (सकाळी 9 ला start, संध्याकाळी stop, दुपारी 12 ला backup, दर 4 तासांनी upload). Automation ला लिहायला files लागतात, आणि त्या बहुतेक रिकाम्याच सुरू होतात.

Correction

Class मध्ये उत्तर "automation साठी" एवढंच दिलं, ठोस संबंध न सांगता. नेमकं सांगायचं तर: रिकामी file ही सुरुवात असते जी नंतर script किंवा माणूस भरतो, किंवा एक marker असतो जो बाकीचे scripts तपासतात. touch स्वतः काहीही automate करत नाही.

8. एक नाव, एकच item; capital अक्षरं वेगळी

काय.

  1. एका folder मध्ये एक नाव एकदाच वापरता येतं: file साठी किंवा folder साठी, दोन्हीसाठी नाही.
  2. Linux मध्ये नावं case-sensitive असतात: ravi, Ravi, rAvi आणि RAVI ही चार वेगवेगळी नावं.

हे कसं वागतं (करून बघा):

  1. mkdir ravi (folder)
  2. touch ravi → error नाही, आणि file पण बनत नाही. touch फक्त folder चा time update करतो. ravi folder च राहतो.
  3. touch raju (file), मग mkdir raju → mkdir: cannot create directory ‘raju’: File exists
  4. touch Ravi RAVI → दोन नवीन files. ls मध्ये folder ravi आणि files Ravi आणि RAVI शेजारी शेजारी दिसतात.
एका folder मधली नावं: एक नाव = एकच item ravi folder आधीच आहेravi$ touch ravierror नाही, नवीन file नाही:folder चा time update होतोतो folder च राहतो ravi file आधीच आहेravi$ mkdir ravimkdir: cannot createdirectory ‘ravi’:File exists Capital अक्षरं वेगळी धरली जातात$ touch ravi Ravi RAVI ravi Ravi RAVI तीन वेगवेगळ्या filesLinux मध्ये नावं case-sensitive नियम: एका folder मध्ये एक नाव एकदाच वापरता येतं, file साठी किंवा folder साठी. ravi, Ravi आणि RAVI ही वेगवेगळी नावं आहेत.

Figure 4. आधीपासून असलेल्या folder वर touch फक्त त्याचा time update करतो; आधीपासून असलेल्या file च्या नावाने mkdir केलं की File exists येतं; ravi, Ravi आणि RAVI ही तीन वेगळी नावं.

Classroom line

Inside one folder, a name can be used only once.

Correction

Class मध्ये सांगितलं की ravi folder असताना touch ravi fail होतो. तो fail होत नाही: गुपचूप folder चा timestamp update करतो आणि काहीच बनवत नाही. Error उलट्या बाजूने येतो: ravi नावाची file असताना mkdir ravi केलं की File exists. काहीही असो, नियम एकच: एक नाव, एकच item.

Ravindra Bagale's Tip

कामावर file आणि folder ची नावं small अक्षरांतच ठेवा. मग Report होतं, report की REPORT, हे आठवायची वेळच येत नाही.

9. cat: cat > ने file लिहिणं

का. touch file मध्ये text टाकू शकत नाही. cat टाकू शकतो, कुठलाही editor न उघडता.

काय. cat > my.txt म्हणजे "मी जे type करतो ते घे आणि my.txt मध्ये लिही". > output screen ऐवजी file मध्ये पाठवतो.

कसं.

  1. cat > my.txt
  2. Cursor रिकाम्या ओळीवर थांबतो. Prompt नाही: cat ऐकत बसलाय.
  3. first line type करा आणि Enter दाबा.
  4. second line type करा आणि Enter दाबा.
  5. नवीन रिकाम्या ओळीवर Ctrl+D दाबा. तुम्ही prompt वर परत.
  6. तपासा: cat my.txt.

Ctrl+D म्हणजे "input संपलं". रिकाम्या ओळीच्या सुरुवातीला दाबा. ओळीच्या मध्येच दाबलं तर फक्त ती ओळ जाते, मग Ctrl+D पुन्हा एकदा दाबावं लागतं.

Correction

Class मध्ये cat > Ctrl+C ने संपवलं. Ctrl+C command ला interrupt करतो (मारतो). Enter ने संपवलेल्या ओळी बहुतेक वाचतात, पण शेवटच्या ओळीवर Enter च्या आधी type केलेलं जातं. योग्य पद्धत: शेवटच्या ओळीवर Enter, मग Ctrl+D.

10. cat: वाचणं, append करणं, आणि > चा सापळा

वाचा. cat my.txt अख्खी file दाखवतो:

first line
second line

Append (शेवटी जोडा).

  1. cat >> my.txt (दोन >)
  2. third line type करा, Enter, मग Ctrl+D.
  3. cat my.txt → तीन ओळी. जुना text राहिला; नवीन ओळ त्याच्या खाली गेली.

सापळा: एकच > सगळं बदलून टाकतो.

  1. cat > my.txt
  2. new type करा, Enter, Ctrl+D.
  3. cat my.txt → फक्त new. जुन्या तीन ओळी गायब.
cat: > ने लिहा, वाचा, >> ने जोडा $ cat > my.txtलिहा: type करा, प्रत्येक ओळीनंतर Enter first line⏎ second line⏎ [Ctrl+D]रिकाम्या ओळीवर Ctrl+D = संपलं $ cat my.txtवाचा: file screen वर दाखवतो first line second line $ cat >> my.txtappend: जुन्या text च्या खाली जोडतो third line⏎ [Ctrl+D] $ cat > my.txtपुन्हा एकच >: file आधी रिकामी होते! new⏎ [Ctrl+D] आता my.txt मध्ये आहे: first linesecond line first linesecond linethird line newजुन्या ओळी गेल्या: > तीच fileरिकामी करतो, मग त्यात लिहितो > = लिहा (सगळं बदलून)>> = append (जुनं ठेवून शेवटी जोडा)नुसतं cat = वाचाcat मध्ये अडकलात? Enter दाबा, मग Ctrl+D.

Figure 5. Animation: cat > दोन ओळी लिहितो, cat त्या वाचतो, cat >> तिसरी जोडतो, आणि पुन्हा cat > केलं की file रिकामी होऊन फक्त नवीन ओळ राहते.

cat काय करू शकत नाही. पाच ओळींच्या file मध्ये cat ओळ 2 वरचं hi चं bye करू शकत नाही. तो फक्त अख्खी file बदलू शकतो (>) किंवा खाली ओळी जोडू शकतो (>>). मधली ओळ बदलायला editor वापरा (sections 11 आणि 16).

Correction

Class मध्ये आधीपासून असलेल्या file वर cat > चं वर्णन "जुनी file delete होते आणि नवीन बनते" असं केलं. ती delete होत नाही: तीच file रिकामी (truncate) होते आणि त्यात पुन्हा लिहिलं जातं. तिच्या permissions आणि owner तसेच राहतात. दिसणारा परिणाम तोच: जुना content गेला.

Ravindra Bagale's Tip

cat > च्या command वर Enter दाबायच्या आधी arrows एकदा पुन्हा बघा. > बदलतो, >> जोडतो. खऱ्या server वर एक > कमी पडला तर settings ची file पुसली जाऊ शकते. मोठ्या files cat ने screen न भरता वाचायला 3.4 Viewing files बघा.

11. nano: सगळ्यात सोपा editor

का. cat मधली ओळ edit करू शकत नाही. Editor लागतो, आणि nano सगळ्यात सोपा: Notepad सारखाच वाटतो.

काय. nano my.txt file editor मध्ये उघडतो. File नसेल तर nano नवीन, रिकामी file सुरू करतो आणि खाली [ New File ] दाखवतो.

Edit कसं करायचं.

  1. nano my.txt
  2. Arrow keys ने फिरा. Default ला mouse ने cursor हलत नाही.
  3. Type करा, Backspace ने खोडा, कुठेही काहीही बदला.
  4. खालच्या दोन ओळींत shortcuts दिलेले असतात. ^ म्हणजे Ctrl, म्हणून ^X म्हणजे Ctrl+X.

Classroom line

nano is the easiest one.

Save करून बाहेर कसं पडायचं.

  1. Ctrl+X दाबा.
  2. nano विचारतो Save modified buffer?
  3. Save करायला Y दाबा (N केलेले बदल टाकून देतो, Ctrl+C cancel करून परत editing वर नेतो).
  4. nano File Name to Write: my.txt दाखवतो. नाव तेच ठेवायला Enter दाबा.
  5. तुम्ही prompt वर परत. cat my.txt ने तपासा.

काहीच बदललं नसेल तर Ctrl+X काहीही न विचारता सरळ बाहेर पडतो.

nano मधून बाहेर: Ctrl+X, मग प्रश्नाचं उत्तर द्या nano my.txtkeyboard ने type करा Ctrl+X काही बदललं? नाहीसरळ बाहेर पडतो हो Save modified buffer? Y Yes N No ^C Cancel Y → File Name to Write: my.txtनाव तेच ठेवायला Enter दाबा N → save न करता बाहेरतुमचे बदल जातात Ctrl+C → cancelपरत editing वर Tip: Ctrl+O मग Enter केलं की save होतं आणि तुम्ही nano मध्येच राहता. Shortcuts nano screen च्या खाली दिलेले असतात (^ म्हणजे Ctrl).

Figure 6. Ctrl+X: काही बदललं नसेल तर nano बाहेर पडतो. बदललं असेल तर Save modified buffer? विचारतो: Y मग Enter केलं की save, N केलं की save न करता बाहेर, Ctrl+C केलं की परत editing.

Classroom line

If you didn't change anything, it exits directly; it asks only when you changed something.

Classroom line

From here on, our life is inside nano.

Ravindra Bagale's Tip

Ctrl+O मग Enter केलं की nano मधून बाहेर न पडता save होतं. मोठ्या file वर काम करताना हे वापरा, म्हणजे SSH connection तुटलं तरी तुमचं काम जात नाही. nano आणि vim चे अजून shortcuts 3.10 Text editors: nano and vim मध्ये आहेत.

12. Space असलेली file ची नावं, आणि एकदम अनेक files

काय. Space arguments वेगळे करतो, folders साठी जसा तसाच files साठी.

  1. nano my file दोन files उघडतो, my आणि file, एकामागून एक.
  2. nano 'my file' my file नावाची एक file उघडतो. "my file" आणि my\ file पण चालतं.
  3. यालाच feature बनवा: nano file1 file2 file3 तीन files उघडतो. Ctrl+X चालू file बंद करून पुढची उघडतो. nano च्या नवीन versions मध्ये तुम्ही कुठल्या file वर आहात ते दिसतं, उदा. [1/3].

Classroom line

When you use a space in a name, use single quotes... but better, simply use one single word.

Ravindra Bagale's Tip

Files ची नावं my-file.txt किंवा my_file.txt अशी ठेवा. Quotes नाही, backslash नाही, धक्के नाहीत.

13. Practice task: calendar, कमीत कमी commands मध्ये

Task.

  1. ~ मध्ये calendar folder बनवा.
  2. त्याच्या आत तीन folders: months, weeks, days.
  3. months मध्ये files: jan, feb, mar.
  4. jan मध्ये January लिहा.
  5. weeks मध्ये files: week1, week2, week3.
  6. days मध्ये files: 1, 2, 3.
Handwritten board: a box calendar with three branches to boxes months, weeks and Days; under months the names jan, feb, march with an arrow from jan to the word January; under weeks week1 week2 week3; under Days 1 2 3.

Class board वरून: Calendar task: calendar मध्ये months, weeks आणि days; months मध्ये jan, feb आणि march, weeks मध्ये week1 ते week3, days मध्ये 1 ते 3, आणि jan मध्ये January हा text.

पुढे वाचायच्या आधी स्वतः करून बघा.

उत्तर (पाच commands):

  1. mkdir -p calendar/{months,weeks,days}
  2. touch calendar/months/{jan,feb,mar}
  3. touch calendar/weeks/{week1,week2,week3}
  4. touch calendar/days/{1,2,3}
  5. nano calendar/months/jan → January type करा → Ctrl+X, Y, Enter.

तपासा:

  1. cat calendar/months/jan → January
  2. ls calendar/weeks → week1 week2 week3
Handwritten board with four prompt lines: mkdir -p calendar/ followed by braces with months, weeks, Days; touch calendar/months/ with braces jan, feb, mar; touch calendar/weeks/ with braces week1, week2, week3; touch calendar/Days/ with braces 1, 2, 3.

Class board वरून: उत्तर: mkdir -p calendar/{months,weeks,Days}, मग months, weeks आणि Days साठी braces वापरून एकेक touch ची ओळ. Board वर Days capital D ने लिहिलंय; या page वर small days वापरलंय, तेव्हा प्रत्येक command मध्ये एकच spelling ठेवा.

नेहमीच्या चुका:

  1. Braces च्या आत slashes: {months/weeks/days} हे slashes असलेलं एकच नाव होतं, तीन folders नाही. Commas वापरा.
  2. Commas नंतर spaces: {jan, feb, mar} expand होत नाही (section 3 बघा).
  3. Case ची गडबड: Days folder आणि days लिहिलेली command ही दोन वेगळी नावं.

अजून छोटं

touch एकाच command मध्ये अनेक brace groups घेतो: touch calendar/months/{jan,feb,mar} calendar/weeks/{week1,week2,week3} calendar/days/{1,2,3}. आणि echo January > calendar/months/jan nano न उघडता शब्द लिहितो. म्हणजे एकूण तीनच commands.

14. ls -R: आतलं सगळं दाखवा

काय. ls -R (capital R, recursive) एक folder दाखवतो, मग त्याच्या आतला प्रत्येक folder, मग त्यांच्या आतला प्रत्येक, असं पुढे.

कसं.

  1. cd (home)
  2. ls -R calendar

Output:

calendar:
days  months  weeks

calendar/days:
1  2  3

calendar/months:
feb  jan  mar

calendar/weeks:
week1  week2  week3

प्रत्येक block folder चा path आणि colon ने सुरू होतो, आणि खाली आत काय आहे ते. छोट्या झाडांसाठी ठीक; मोठ्या झाडांचं output screen वरून पळून जातं.

ls -r (small r) शी गल्लत करू नका, तो फक्त एका listing ची order उलटी करतो.

15. tree: चित्रासारखं दृश्य, आणि software install करणं

काय. tree तीच माहिती चित्रासारखी काढतो. Amazon Linux वर तो default install नसतो.

Install कसा करायचा:

sudo yum install tree -y
  1. sudo: ही एक command administrator (root) म्हणून चालवा. Software install केलं की system बदलते, म्हणून admin rights लागतात.
  2. yum: package manager. Amazon च्या repositories मधून software download करून install करतो.
  3. install: action.
  4. tree: package चं नाव.
  5. -y: "Is this ok?" ला आपोआप "yes".

मग:

  1. tree calendar
  2. Output शेवटी 4 directories, 9 files सांगतो.
पूर्ण झाड बघायचं: ls -R आणि tree $ ls -R calendar calendar: days months weeks calendar/days: 1 2 3 calendar/months: feb jan mar calendar/weeks: week1 week2 week3 $ tree calendar calendar ├── days │ ├── 1 │ ├── 2 │ └── 3 ├── months │ ├── feb │ ├── jan │ └── mar └── weeks ├── week1 ├── week2 └── week3 4 directories, 9 files -R (capital) = recursive: प्रत्येक folder,प्रत्येकाचा एक block. मोठं झालं की वाचायला अवघड.ls -r (small) फक्त order उलटा करतो. tree तेच चित्रासारखं दाखवतो. तो default install नसतो: sudo yum install tree -y

Figure 7. ls -R प्रत्येक folder वेगळ्या block मध्ये दाखवतो; tree तेच calendar झाडासारखं काढतो आणि शेवटी 4 directories, 9 files सांगतो.

प्रत्येक command म्हणजे एक छोटा program.

  1. ls, mkdir, touch आणि cat हे /usr/bin मध्ये ठेवलेले programs आहेत. ते Linux सोबतच येतात.
  2. tree हा अजून एक program; तो आपण स्वतः install केला.
  3. Install करायच्या आधी command -v tree काहीच दाखवत नाही. Install केल्यावर /usr/bin/tree दाखवतो.

Correction

Class मध्ये सांगितलं "या commands नाहीत, हे software आहेत". दोन्ही शब्द बरोबर: तुम्ही type केलेली प्रत्येक command एक छोटा program चालवते. काही, जसं ls आणि mkdir, आधीच install असतात; काही, जसं tree, आपण package manager ने install करतो. Amazon Linux 2023 वर package manager चं नाव dnf आहे; yum हे त्याचंच दुसरं नाव म्हणून अजून चालतं, म्हणून sudo yum install tree -y आणि sudo dnf install tree -y एकच काम करतात. Package managers सविस्तर: 3.7 Package managers.

16. vi: प्रत्येक server वरचा editor

का. nano सोपा आहे, पण तो नेहमी install असेलच असं नाही. vi जवळजवळ प्रत्येक Linux server वर असतो, म्हणून type करणं, save करणं आणि बाहेर पडणं एवढं तरी यायलाच हवं.

काय. vi मध्ये modes असतात:

  1. Command mode. vi इथे उघडतो. Keys म्हणजे commands, म्हणून चुकून दाबलेल्या keys file मध्ये type होत नाहीत.
  2. Insert mode. आता keys text type करतात. खालच्या ओळीत -- INSERT -- दिसतं.

कसं.

  1. vi notes.txt
  2. i दाबा. खाली -- INSERT -- दिसतं.
  3. तुमचा text type करा. फिरायला arrow keys वापरा.
  4. Esc दाबा. तुम्ही परत command mode मध्ये.
  5. :wq type करून Enter दाबा: write (save) करून quit.
  6. तपासा: cat notes.txt.

Insert mode मध्ये जायचे तीन मार्ग:

Key Typing कुठून सुरू
i cursor च्या आधी (insert)
a cursor च्या नंतर (append)
o खाली नवीन ओळीवर

Save न करता बाहेर: Esc, मग :q! आणि Enter.

vi मध्ये modes असतात: text फक्त insert mode मध्ये type होतं Command modevi इथे उघडतो; keys म्हणजे commands(चुकून दाबलेली key type होत नाही) Insert mode-- INSERT --खाली दिसतं; आता type करा i a o Esc : :wq ⏎write (save) करून quit:q! ⏎save न करता quit Type करायच्या keysicursor च्या आधीacursor च्या नंतरoखाली नवीन ओळअडकलात? Esc,मग :q! ⏎ नारिंगी box नेहमीचं edit दाखवतो: open → i → type → Esc → :wq → Enter.

Figure 8. Animation: vi command mode मध्ये उघडतो; i, a किंवा o ने insert mode; Esc ने परत; :wq ने save करून बाहेर, :q! ने save न करता बाहेर.

Correction

Class मध्ये i आणि a सोबत s पण typing सुरू करायची key म्हणून सांगितली. s ही insert key नाही: ती आधी cursor खालचं अक्षर delete करते आणि मग त्या जागी type करू देते. काहीही न बदलता typing सुरू करायला i, a किंवा o वापरा.

Ravindra Bagale's Tip

vi मध्ये अडकलात आणि काहीच चालत नाही? Esc दोनदा दाबा, :q! type करा, Enter दाबा. तुम्ही बाहेर, आणि काहीच save झालं नाही. मग शांतपणे पुन्हा करा.

17. घरी करा

घरी करून बघा

Task 1: braces

  1. एका command मध्ये हे झाड बनवा: school → class1, class2, class3, आणि प्रत्येक class मध्ये divA आणि divB. (Hint: mkdir -p school/{class1,class2,class3}/{divA,divB}; आधी echo ने बघून घ्या.)
  2. ls -R school ने तपासा.

Task 2: touch

  1. touch a.txt, मग ls -l a.txt. Time लिहून ठेवा.
  2. एक मिनिट थांबा, पुन्हा touch a.txt, ls -l a.txt. काय बदललं?
  3. test folder बनवा आणि touch test करून बघा. काय होतं?
  4. demo file बनवा आणि mkdir demo करून बघा. Error वाचा.

Task 3: cat

  1. cat > ने fruits.txt मध्ये तीन ओळी लिहा. Ctrl+D ने संपवा.
  2. cat >> ने अजून दोन जोडा.
  3. cat ने वाचा.
  4. पुन्हा एकदा cat > fruits.txt, एक ओळ type करा, Ctrl+D. परत वाचा आणि काय झालं ते समजावून सांगा.

Task 4: editors

  1. fruits.txt nano मध्ये उघडा, ओळ 1 बदला, Ctrl+X, Y, Enter ने save करा.
  2. vi मध्ये उघडा, o ने खाली एक ओळ जोडा, :wq ने save करा.
  3. पुन्हा vi मध्ये उघडा, काहीतरी बदला, आणि :q! ने बाहेर पडा. बदल save झाला नाही ना ते तपासा.

Task 5: tree

  1. sudo yum install tree -y
  2. tree calendar आणि tree school.
  3. झालं की console मधून instance stop करा.

थोडक्यात

थोडक्यात

  1. चित्राचे folders step by step बनवा, किंवा पूर्ण paths आणि -p वापरून एका ओळीत.
  2. Braces: mkdir -p Ramayan/Dasarath/{Ram,Laxman,Bharat,Shatrughna}. Commas, space नाही. Shell expand करतो; echo ने आधी बघा.
  3. File बनवायचे चार मार्ग: touch, cat, nano, vi.
  4. touch रिकाम्या files बनवतो (size 0); आधीपासून असलेल्या file किंवा folder वर फक्त time update करतो.
  5. Extensions हा नावाचाच भाग. Linux content तपासतो (file), पण माणसं आणि programs extensions वापरतातच.
  6. रिकाम्या files कामाच्या: भरायच्या logs, placeholders, markers, practice files.
  7. एका folder मध्ये एक नाव = एकच item. File असलेल्या नावाने mkdir → File exists. Capital अक्षरं वेगळी.
  8. cat > f लिहितो (आधी रिकामी करतो), cat f वाचतो, cat >> f जोडतो. Typing संपवायला Enter, मग Ctrl+D.
  9. cat मधली ओळ बदलू शकत नाही; editors बदलतात.
  10. nano: फिरायला arrows; save करून बाहेर Ctrl+X, Y, Enter; save करून तिथेच राहायला Ctrl+O.
  11. Space नावं तोडतो: nano my file दोन files उघडतो. नावं quote करा, किंवा त्याहून चांगलं, spaces टाळा.
  12. ls -R recursive दाखवतो; ls -r फक्त उलटं करतो.
  13. sudo yum install tree -y ने tree install होतो; tree folder झाड काढतो.
  14. प्रत्येक command एक छोटा program; काही Linux सोबत येतात, काही आपण install करतो.
  15. vi: command mode मध्ये उघडतो; type करायला i/a/o; थांबायला Esc; :wq save करून quit; :q! save न करता quit.

Samjla ka? Ghari tree install kara, vi madhe ek file lihun bagha. Pudhchya class madhe copy karayla shikuya.


Ravindra Bagale, trainer: linkedin.com/in/ravindra-bagale. Folders आणि files ची नावं (Ramayan, calendar, ravi, my.txt, photo.jpg, fruits.txt वगैरे) शिकण्यासाठीची उदाहरणं आहेत. Commands चे outputs GNU bash, coreutils, nano आणि tree वर तपासले, जे Amazon Linux 2023 पण वापरतं; ls -l उदाहरणांमधली वेळ फक्त उदाहरणादाखल आहे.