Ravindra BagaleCourses & study guides English

Linux मध्ये move, rename आणि delete: mv, rm, rmdir, ls -l आणि hidden files

चला, सुरू करूया. Files आणि folders बनवता येतात, copy पण करता येतात. Laptop वर रोजची बाकीची कामं म्हणजे cut-paste, rename आणि delete. Server वर ही तिन्ही कामं दोन commands करतात: mv move आणि rename करतो, rm delete करतो. आज अंदाज न लावता file आणि folder कसे ओळखायचे, dot लावून file hide कशी करायची, आणि ते गूढ . आणि .. काय आहेत, हे पण बघूया. Server चालू ठेवा आणि प्रत्येक command माझ्यासोबत type करा.

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

  • आजचे practice folders, आणि cd नंतरचा खरा prompt
  • Interview question: folder च्या फक्त आतलं copy करणं
  • mv = cut-paste: file folder मध्ये टाकायच्या चार पद्धती
  • mv ने rename, त्याच folder मध्ये आणि subfolder मध्ये
  • Folders move करणं, आणि mv ला -r का लागत नाही (same disk vs दुसरी disk)
  • mv सोबत wildcards, आणि गुपचूप होणारं overwrite (mv -i)
  • Delete: rm, rm -r, rmdir आणि rm -i
  • Practice task: एकाच tree वर mv, cp आणि rm
  • Smart काम: relative paths, braces आणि Tab
  • File की folder? नाव आणि colour वरून ठरत नाही
  • ls -l: पहिलं character
  • Commands चा summary
  • Hidden files, ls -a, आणि . व ..
  • निघण्याआधी: terminate की stop
  • घरी करायचे tasks

1. आजचे practice folders

का. Move आणि delete करायला आधी काहीतरी हवं ना. आधी हे बनवून घ्या. Copy: Linux मध्ये copy: cp, cp -r, wildcards (* ?) आणि brace ranges; paths: Linux directories आणि paths.

कसं (home folder पासून सुरू करा). या ओळी एकेक करून चालवा:

cd
mkdir ravi raj
cd ravi
touch 1.txt 2.logs 3.mp3
mkdir one two three
cd

Classroom line

Say we're in ec2-user's home, and I've made two folders there: one called ravi, one called raj.

Prompt कडे लक्ष द्या. तो नेहमी सांगतो तुम्ही कुठे आहात. Amazon Linux 2023 वर तो असा दिसतो (ip-... हा तुमच्या server चा private hostname):

[ec2-user@ip-172-31-xx-xx ~]$ cd ravi
[ec2-user@ip-172-31-xx-xx ravi]$ cd
[ec2-user@ip-172-31-xx-xx ~]$
  1. ~ म्हणजे तुम्ही home मध्ये आहात, /home/ec2-user.
  2. cd ravi नंतर prompt मध्ये ravi दिसतं, म्हणजे current folder चं नाव.
  3. नुसतं cd केलं की परत home, आणि ~ परत येतो.

Correction

Board वर cd ravi नंतरच्या प्रत्येक ओळीत ~] च लिहिलं होतं. खरा prompt तुमच्यासोबत बदलतो: तुम्ही ज्या folder मध्ये आहात त्याचं नाव दाखवतो, इथे ravi. प्रत्येक cd नंतर तो बघा, किंवा pwd चालवा.

2. Interview question: folder च्या फक्त आतलं copy करणं

का. "ravi चं आतलं सगळं raj मध्ये copy करा, folder नाही" हा interview मधला आवडता प्रश्न आहे. cp -r खरंच समजलाय का, ते यातून कळतं.

Classroom line

And they ask this question in interviews.

तीन प्रयत्न (home folder मधून):

  1. cp ravi raj → cp: -r not specified; omitting directory 'ravi'. Folder ला -r लागतो.
  2. cp -r ravi raj → चालतं, पण मिळतं raj/ravi/...: folder च raj मध्ये गेला.
  3. cp -r ravi/* raj → raj/1.txt, raj/2.logs, raj/3.mp3, raj/one... फक्त आतलं. हेच उत्तर त्यांना हवं असतं.

ravi/* म्हणजे "ravi मधलं प्रत्येक नाव". cp चालायच्या आधीच shell ते expand करतो, म्हणून cp ला दिसतं ravi/1.txt ravi/2.logs ravi/3.mp3 ravi/one ravi/three ravi/two raj.

पण एक गोम आहे: hidden files. Dot ने सुरू होणारी नावं * पकडत नाही (section 18). एक बनवा आणि परत try करा:

touch ravi/.notes
rm -r raj/*
cp -r ravi/* raj
ls -A raj

.notes नाहीये. Hidden files सकट सगळं copy करायचं असेल, तर folder चा स्वतःचा . copy करा:

cp -r ravi/. raj
Folder copy करायचा, की फक्त आतलं? ravi मध्ये आहे: 1.txt 2.logs 3.mp3 one/ आणि एक hidden file .notes $ cp -r ravi raj raj/ └── ravi/ ├── .notes ├── 1.txt ├── 2.logs ├── 3.mp3 └── one/ folder स्वतःच raj मध्ये जातो $ cp -r ravi/* raj raj/ ├── 1.txt ├── 2.logs ├── 3.mp3 └── one/ .notes copy होत नाही फक्त आतलं; * hidden files सोडतो $ cp -r ravi/. raj raj/ ├── .notes ├── 1.txt ├── 2.logs ├── 3.mp3 └── one/ सगळं आतलं, hidden files पण $ cp ravi rajcp: -r not specified; omitting directory 'ravi' ravi/* = ravi मधलं प्रत्येक दिसणारं नाव. ravi/. = आतून बघितलेला ravi folder स्वतः, म्हणजे त्यातलं सगळं.

Figure 1. cp -r ravi raj मध्ये folder च raj च्या आत जातो. cp -r ravi/* raj फक्त आतलं copy करतो पण hidden file .notes सोडून देतो. cp -r ravi/. raj आतलं सगळं, hidden files सकट, copy करतो.

Correction

Class मधलं उत्तर cp -r ravi/* raj नेहमीच्या files साठी बरोबर आहे, पण ravi/* hidden files सोडून देतो (dot ने सुरू होणारी नावं). cp -r ravi/. raj hidden files सकट ravi मधलं सगळं copy करतो.

3. mv: Linux चं cut-paste

का. Windows मध्ये file cut करून दुसरीकडे paste करतो; जुन्या जागेवरून ती गायब होते. Linux मध्ये हेच एका command ने.

Classroom line

mv means cut-paste. The cut-paste we use in Windows is what we now do in Linux.

काय. mv SOURCE DESTINATION, cp सारखाच आकार. फरक एवढाच: mv नंतर source आधीच्या जागेवर उरत नाही.

कसं: my.txt ला ravi मध्ये टाकायच्या चार पद्धती. आधी home मध्ये touch my.txt ने file बनवा. प्रत्येक ओळ file तिथून हलवते, म्हणून पुढची ओळ try करायच्या आधी परत touch my.txt करा:

  1. mv my.txt ravi → ravi/my.txt
  2. mv my.txt ravi/ → तेच; Tab दाबला की slash आपोआप येतो.
  3. mv my.txt ravi/my.txt → तेच, नाव पूर्ण लिहून.
  4. mv my.txt ravi/you.txt → move आणि rename: ravi/you.txt.

प्रत्येक वेळी check करा: ls (home मधून my.txt गेली) आणि ls ravi (ती इथे आहे).

Handwritten board: a prompt with mv my.txt ravi, with source written under my.txt and destination under ravi; below it three lines mv my.txt ravi/, mv my.txt ravi/my.txt and mv my.txt ravi/you.txt.

Class board वरून: mv my.txt ravi: my.txt हा source, ravi हा destination. मग बाकीच्या तीन पद्धती: mv my.txt ravi/, mv my.txt ravi/my.txt, आणि mv my.txt ravi/you.txt, जी file rename पण करते.

4. mv ने rename

का. रोजच्या कामासाठी Linux मध्ये वेगळा rename command नाही. Rename म्हणजे त्याच जागी file ला नवीन नावावर move करणं.

Classroom line

mv is also the command for renaming.

कसं:

  1. touch my.txt
  2. mv my.txt our.txt
  3. ls → our.txt (आणि my.txt नाही)

mv कसं ठरवतो:

  1. Destination आधीच असलेला folder → item त्याच्या आत जातो.
  2. Destination अस्तित्वातच नाही → item ला ते नाव मिळतं (rename).
  3. Destination आणि source एकच → करायला काहीच नाही.

Try करून बघा:

mv my.txt my.txt
mv: 'my.txt' and 'my.txt' are the same file
एक command, चार कामं: mv $ mv my.txt raviआधी~/├── my.txt└── ravi/mvनंतर~/└── ravi/ └── my.txt1. Move: ravi folder आहे, म्हणून my.txt आत जाते. मागे काही राहत नाही. $ mv my.txt our.txtआधी~/└── my.txtmvनंतर~/└── our.txt2. Rename: our.txt नाहीये, म्हणून my.txt ला फक्त नवं नाव मिळतं. $ mv my.txt ravi/you.txtआधी~/├── my.txt└── ravi/mvनंतर~/└── ravi/ └── you.txt3. एकाच step मध्ये move आणि rename. $ mv ravi oneआधी~/├── one/└── ravi/ └── 1.txtmvनंतर~/└── one/ └── ravi/ └── 1.txt4. Folder move: आतलं सगळं सोबत जातं. -r लागत नाही. नियम: destination आधीच असलेला folder असेल तर mv आत ठेवतो. नाहीतर destination म्हणजे नवं नाव.

Figure 2. Animation: mv my.txt ravi file ला ravi मध्ये हलवतो; mv my.txt our.txt rename करतो; mv my.txt ravi/you.txt move आणि rename एकदम; mv ravi one अख्खा folder हलवतो, -r शिवाय.

5. Subfolder मध्ये rename, तिथे न जाता

का. Folder मधलं काही rename करायला त्या folder मध्ये cd करायची गरज नाही. दोन्ही नावं path म्हणून द्या.

कसं (तुम्ही /home/ec2-user मध्येच राहता):

  1. mv ravi/1.txt ravi/2.txt
  2. ls ravi → 2.txt आहे, 1.txt गेली.

दोन्ही paths एकाच folder मध्ये आहेत, म्हणून हे rename. दुसरा path दुसऱ्या folder मध्ये असता, तर move आणि rename झालं असतं.

Handwritten board: a prompt with mv my.txt our.txt; on the right a small tree ec2-user, ravi, 1.txt; below, a prompt with mv ravi/1.txt ravi/2.txt and a line mv ravi one.

Class board वरून: mv my.txt our.txt त्याच folder मध्ये rename करतो. उजवीकडे ec2-user, ravi, 1.txt हे tree: mv ravi/1.txt ravi/2.txt home न सोडता ravi मधली file rename करतो, आणि mv ravi one हा folder ravi ला one मध्ये हलवतो.

6. Folders move करणं: -r नाही

का. cp मध्ये folder ला -r लागतो. mv मध्ये लागत नाही. Interviewer "का?" विचारायच्या आधी हे माहीत असलेलं बरं.

कसं:

  1. mkdir one (home मध्ये; ravi आधीच आहे)
  2. mv ravi one
  3. ls one → ravi, आतल्या सगळ्या गोष्टींसकट.

परत आणायला: mv one/ravi . (. = इथे).

Correction

Class मध्ये हा option "slash r" असा वाचला गेला. तो dash r आहे: hyphen, -r. Board वर बरोबर लिहिलं होतं. Slash म्हणजे path separator, जसं ravi/1.txt मध्ये.

7. mv ला -r का लागत नाही

का. हे समजलं की कळतं, मोठ्ठा folder mv करायला अजिबात वेळ का लागत नाही, आणि तोच folder cp करायला मिनिटं का लागू शकतात.

Classroom line

When we move, what really happens? Only the path changes. But when we copy, the file is actually stored again.

Same disk वर काय होतं:

  1. File चा data disk वर blocks मध्ये असतो.
  2. Folder फक्त एक entry ठेवतो: नाव, आणि data कुठे आहे.
  3. cp data परत नवीन blocks मध्ये लिहितो, file by file. Folder असेल तर प्रत्येक folder च्या आत जावं लागतं: -r तेच सांगतो.
  4. mv data ला हात लावत नाही, फक्त entry बदलतो: जुनं नाव जातं, नवीन path येतो. Folder एकाच step मध्ये अख्खा हलतो, म्हणून आत जायची (recurse) गरजच नाही.

दुसऱ्या disk वर (उदा. root volume वरून दुसऱ्या EBS volume वर), entry दुसऱ्या disk कडे point करू शकत नाही. म्हणून mv data दुसऱ्या disk वर copy करतो, मग original delete करतो. Copy एवढाच वेळ लागतो, आणि तरीही -r लागत नाही.

mv लगेच का होतो आणि त्याला -r का लागत नाही (त्याच disk वर) $ cp my.txt ravi $ mv my.txt ravi disk blocksfolder entries: नाव → data कुठे आहेmy.txt→ blocks 1-3disk blocksfolder entries: नाव → data कुठे आहेmy.txt→ blocks 1-3 disk blocksfolder entries: नाव → data कुठे आहेmy.txt→ blocks 1-3ravi/my.txt→ blocks 6-8disk blocksfolder entries: नाव → data कुठे आहेravi/my.txt→ blocks 1-3 data परत लिहिला जातो, file by file;folder साठी -r cp ला आत जायला सांगतो data ला हात लागत नाही, फक्त नावाचीentry बदलते, म्हणून folder अख्खा हलतो वेगळ्या disk वर (उदा. दुसरा EBS volume) mv आधी data copy करतो, मग original delete. तरी -r नाही.

Figure 3. Animation: cp my.txt ravi data परत नवीन blocks मध्ये लिहितो आणि दुसरी entry जोडतो. Same disk वर mv my.txt ravi blocks ला हात न लावता फक्त entry बदलून ravi/my.txt करतो. दुसऱ्या disk वर mv आधी copy, मग delete करतो.

mv एक move नाकारतो, मागच्या chapter मधल्या cp सारख्याच कारणासाठी. mkdir -p one/two ने one/two बनवा, मग try करा:

mv one one/two
mv: cannot move 'one' to a subdirectory of itself, 'one/two/one'

Correction

Board वर हे "memory" boxes ने काढलं होतं. नेमकं सांगायचं तर ती disk आहे: same disk (filesystem) वर mv फक्त directory entry rename करतो, त्यामुळे data copy होत नाही. दुसऱ्या disk वर तो copy करतो आणि मग delete. दोन्हीकडे -r लागत नाही.

8. mv सोबत wildcards

का. cp सारखंच: प्रत्येक नाव type करण्याऐवजी pattern सांगा.

Classroom line

We can use wildcards while moving files or folders too.

कसं:

  1. mv *.txt ravi → .txt ने संपणारं प्रत्येक नाव ravi मध्ये जातं.
  2. mv 2.* ravi → 2.logs आणि 2. ने सुरू होणारं बाकी सगळं.
  3. आधी बघून घ्या: echo *.txt pattern काय पकडतो ते दाखवतो, काहीही move न करता.

* आणि ? चे नियम copy chapter मध्ये आहेत.

9. mv न विचारता overwrite करतो: mv -i

का. Destination file आधीच असेल तर mv ती replace करतो. ना प्रश्न, ना message, आणि जुनी file गेली.

होताना बघा:

echo old > b.txt
echo new > a.txt
mv a.txt b.txt
cat b.txt

Output: new. जुनी b.txt गेली, आणि a.txt आता नाहीच.

सुरक्षित पद्धत: mv -i आधी विचारतो:

mv -i a.txt b.txt
mv: overwrite 'b.txt'?

Replace करायला y, b.txt ठेवायला n.

Ravindra Bagale's Tip

आधीच files असलेल्या folder मध्ये files move करताना mv -i वापरा. एक n परत न मिळणारी file वाचवू शकतो.

10. rm: files delete करणं

का. जुने logs, test files, चुका. Server भरत जातात, आणि disk full झाली की सगळंच थांबतं.

कसं:

  1. rm my.txt → एक file.
  2. rm 1.txt my.mp3 3.logs → एकदम अनेक files.
  3. rm *.txt → इथली प्रत्येक .txt file.
  4. rm file* → file ने सुरू होणारं प्रत्येक नाव.
Handwritten board: four lines, rm my.txt with a tick, rm 1.txt my.mp3 3.logs, rm *.txt, and rm file*.

Class board वरून: rm my.txt एक file delete करतो, rm 1.txt my.mp3 3.logs तीन, rm *.txt .txt ने संपणारं प्रत्येक नाव, आणि rm file* file ने सुरू होणारं प्रत्येक नाव.

माहीत असायला हवं:

  1. Recycle bin नाही. Delete म्हणजे गेलं.
  2. ec2-user साठी rm delete करायच्या आधी विचारत नाही.
  3. नसलेलं नाव: rm: cannot remove 'nothere': No such file or directory.
  4. नुसत्या rm ने folder delete होत नाही.

Folder वर try करून बघा:

rm ravi
rm: cannot remove 'ravi': Is a directory

11. rm -r: folder आणि आतलं सगळं delete

काय. rm -r ravi folder ravi, त्यातली प्रत्येक file, प्रत्येक folder, अगदी खालपर्यंत सगळं delete करतो. -r = recursive, cp -r सारखीच कल्पना.

कसं:

  1. rm -r ravi
  2. ls → ravi गेला.

प्रत्येक delete आधी विचारा:

rm -i my.txt
rm: remove regular empty file 'my.txt'?

Folder साठी -r सोबत वापरा:

rm -ri ravi
rm: descend into directory 'ravi'?

rm -ri आतल्या प्रत्येक file आणि folder साठी एकेक करून विचारतो. जे ठेवायचं त्याला कधीही n द्या.

Correction

Class मध्ये सांगितलं की एका file वर rm -r केलं तर CPU आणि RAM वाया जातात. तसं नाही; फरक जाणवण्याइतका पण नाही. सवयीने -r न टाकण्याचं खरं कारण safety आहे: -r असताना एक नाव चुकलं की Is a directory म्हणून थांबण्याऐवजी अख्खा folder delete होतो. Files साठी नुसता rm, folder म्हणायचं असेल तेव्हाच rm -r, आणि शंका असेल तर rm -i.

Ravindra Bagale's Tip

Wildcard सोबत rm करायच्या आधी तोच pattern ls ने चालवा: ls *.txt, मग rm *.txt. काय जाणार ते नक्की दिसतं. आणि कुठलीही rm -r ओळ Enter दाबायच्या आधी दोनदा वाचा. याबद्दल अजून 3.3 Working with files and directories मध्ये.

12. rmdir: फक्त रिकामे folders delete

का. rmdir हे safety net आहे. आत काही असेल तर तो folder delete करायला नकार देतो.

कसं:

  1. mkdir empty
  2. rmdir empty → गेला, काही message नाही.
  3. rmdir my.txt → rmdir: failed to remove 'my.txt': Not a directory

आता आत files असलेला folder:

rmdir ravi
rmdir: failed to remove 'ravi': Directory not empty
कुठली delete command कशावर चालते file रिकामा folder files असलेला folder rm delete झालं Is a directory Is a directory rmdir Not a directory delete झालं Directory not empty rm -r चालतं, पण धोक्याची सवय delete झालं आतलं सगळं गेलं लाल boxes मध्ये खरा error text आहे. Recycle bin नाही: delete म्हणजे गेलं.प्रत्येक delete आधी विचारायला -i लावा: rm -i, rm -ri.

Figure 4. rm files delete करतो पण folder ला Is a directory म्हणतो. rmdir फक्त रिकामे folders delete करतो, नाहीतर Not a directory किंवा Directory not empty म्हणतो. rm -r काहीही delete करतो, आतल्या सगळ्यासकट folder पण.

कुठला वापरायचा:

  1. File → rm
  2. रिकामा folder → rmdir
  3. आत गोष्टी असलेला folder → rm -r (आणि दोनदा विचार करा)

13. Practice task: एकाच tree वर mv, cp आणि rm

Task. सगळं /home/ec2-user मधूनच करा; कुठेही cd करायचं नाही.

  1. एक folder projects, त्यात web, आणि web मध्ये चार folders: frontend, backend, database, testing.
  2. web मध्ये, त्या चार folders च्या बाजूला, दोन files बनवा: notes.txt आणि report.txt.
  3. notes.txt ला backend मध्ये move करा.
  4. report.txt ला database मध्ये move करा.
  5. database मधली report.txt testing मध्ये copy करा.
  6. database मधली report.txt delete करा.
  7. शेवटी: notes.txt फक्त backend मध्ये, report.txt फक्त testing मध्ये.

Classroom line

Do all the work while staying in ec2-user's home.

Classroom line

We have to use all the commands: cp, mv, rm.

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

उत्तर:

cd
mkdir -p projects/web/{frontend,backend,database,testing}
touch projects/web/{notes.txt,report.txt}
mv projects/web/notes.txt projects/web/backend
mv projects/web/report.txt projects/web/database
cp projects/web/database/report.txt projects/web/testing
rm projects/web/database/report.txt

tree projects ने check करा:

projects
└── web
    ├── backend
    │   └── notes.txt
    ├── database
    ├── frontend
    └── testing
        └── report.txt

6 directories, 2 files
Practice task: एकाच tree वर mv, cp आणि rm projectsweb frontend backend database testing # सुरुवात: दोन्ही files web मध्ये, चार folders च्या शेजारीnotes.txtreport.txtstep 0 / 4 $ mv projects/web/notes.txt projects/web/backendnotes.txtreport.txtstep 1 / 4 $ mv projects/web/report.txt projects/web/databasenotes.txtreport.txtstep 2 / 4 $ cp projects/web/database/report.txt projects/web/testingnotes.txtreport.txtreport.txtstep 3 / 4 $ rm projects/web/database/report.txtnotes.txtreport.txtstep 4 / 4 शेवटी: notes.txt फक्त backend मध्ये, report.txt फक्त testing मध्ये. प्रत्येक command /home/ec2-user मधूनच.

Figure 5. Animation: notes.txt backend मध्ये move होते, report.txt database मध्ये, report.txt testing मध्ये copy होते, आणि database मधली copy काढली जाते. शेवटी: notes.txt backend मध्ये, report.txt testing मध्ये.

Home मध्येच का राहायचं? ec2-user फक्त स्वतःच्या home मध्ये (आणि /tmp सारख्या काही जागी) लिहू शकतो. बाहेर हे मिळतं:

mkdir /projects
mkdir: cannot create directory ‘/projects’: Permission denied

14. Smart काम: relative paths, braces आणि Tab

का. Interview task मध्ये जो आधी, आणि बरोबर, संपवतो तो जिंकतो. कमी type केलं की typos पण कमी.

  1. Relative paths. तुम्ही आधीच /home/ec2-user मध्ये आहात. /home/ec2-user/projects/web/backend नको, projects/web/backend लिहा.
  2. Braces. एका ओळीत अनेक नावं: mkdir -p projects/web/{frontend,backend,database,testing}.
  3. Tab. projects/w type करून Tab दाबा; shell web/ पूर्ण करतो. कमी keys, spelling च्या चुका नाहीत.

Classroom line

You're already in ec2-user, so why are you typing the path from the very start?

Classroom line

When you need many files in one place: curly braces.

15. File की folder? नाव आणि colour वरून ठरत नाही

का. rm किंवा rmdir करायच्या आधी आपल्या हातात काय आहे ते माहीत हवं. नावावरून अंदाज चालत नाही.

नाव ठरवत नाही:

  1. touch report → report नावाची file, extension ची गरज नाही.
  2. mkdir photos.txt → folder, नाव .txt ने संपलं तरी.

Colour पण ठरवत नाही. ls मध्ये folders बहुतेक निळे आणि files पांढऱ्या दिसतात, पण ते फक्त display setting आहे. Colours LS_COLORS variable मधून येतात, जो login करताना एक startup script (dircolors command ने) भरतो. Setting बदला, दुसरा terminal वापरा, किंवा output pipe करा, colours बदलतात किंवा जातात.

खरं कोण ठरवतं: Linux ला विचारा.

  1. ls -F → folders च्या शेवटी / येतो: photos.txt/ report
  2. ls -l → पहिलं character (पुढचा section).

Correction

Class मध्ये colour settings ".dash profile" file मधून येतात असं सांगितलं. Colour चे नियम LS_COLORS मधून येतात (dircolors ने set होतात), जे बहुतेक ~/.bashrc किंवा ~/.bash_profile सारख्या startup files मधून load होतात. काहीही असो, colour ही display ची निवड आहे, file type नाही.

16. ls -l: पहिलं character

का. काय आहे, कोणाचं आहे, कधी बदललं, हे बघायची भरवशाची पद्धत म्हणजे ls -l (long listing).

कसं. एका रिकाम्या file my.txt आणि एका रिकाम्या folder ravi असलेल्या folder मध्ये:

[ec2-user@ip-172-31-xx-xx ~]$ ls -l
total 0
-rw-r--r--. 1 ec2-user ec2-user 0 Jan  5 10:15 my.txt
drwxr-xr-x. 2 ec2-user ec2-user 6 Jan  5 10:15 ravi

Column by column वाचा:

  1. पहिलं character: - = नेहमीची file, d = directory.
  2. rw-r--r--: permissions (read, write, execute). तो पुढचा topic.
  3. .: SELinux label जोडलेलं आहे (Amazon Linux SELinux वापरतं).
  4. 1 / 2: links ची संख्या. Folder ला किमान 2: त्याचं नाव, आणि त्याचा स्वतःचा ..
  5. ec2-user ec2-user: owner आणि group.
  6. 0 / 6: size, bytes मध्ये. Folder ची size म्हणजे त्याच्या स्वतःच्या नावांच्या list ची size, आतल्या गोष्टींची नाही. Amazon Linux (XFS) वर छोट्या folder ला 6 सारखा छोटा आकडा दिसतो; दुसऱ्या systems वर बहुतेक 4096 दिसतो.
  7. Jan 5 10:15: शेवटचा बदल.
  8. नाव.

Classroom line

The very first character tells us whether it's a file or a directory.

Handwritten board: ls -l at the top; two lines, one starting with a boxed dash and rw- r-- r--, the other with a boxed d and rwx r-x r-x; ec2-user ec2-user on each line; the names my.txt and ravi on the right.

Class board वरून: Board वरचा सोपा केलेला ls -l: box केलेलं पहिलं character, file my.txt साठी dash आणि folder ravi साठी d, त्यानंतर permissions आणि owner व group ec2-user. खऱ्या output मध्ये links, size आणि वेळ पण असतात.

ls -l वाचणं: पहिला character सांगतो file की folder $ ls -ltotal 0 -d rw-r--r--rwxr-xr-x .. 12 ec2-userec2-user ec2-userec2-user 06 Jan 5 10:15Jan 5 10:15 my.txtravi type permissions SELinux links owner group size modified नाव -dash = साधी filetouch, cat, nano आणि vi या बनवतात dd = directory (folder)mkdir हे बनवतो Permissions (r w x) पुढचा topic. Folder ची size म्हणजे त्याच्या स्वतःच्या list ची size, आतल्या सामानाची नाही.

Figure 6. एका file आणि एका folder चा ls -l, प्रत्येक column ला नाव: type, permissions, SELinux dot, links, owner, group, size, modified time आणि नाव. Dash म्हणजे file, d म्हणजे directory.

Folder च्या आतलं नाही, तर folder ची स्वतःची ओळ बघायला: ls -ld ravi.

Correction

Board वर ls -l ची छोटी ओळ होती, फक्त type, permissions, owner, group आणि नाव. वर खरा output आहे, link count, size आणि date सकट. Dates उदाहरण म्हणून आहेत.

17. Commands चा summary

काम File Folder
Copy cp cp -r
Move किंवा rename mv mv (-r नाही)
Delete rm rmdir (फक्त रिकामा), rm -r (आतल्या सगळ्यासकट)

काही overwrite किंवा delete होण्याआधी विचारायला हवं असेल तर cp, mv किंवा rm ला -i जोडा.

18. Hidden files: नावाच्या सुरुवातीला dot

का. तुमच्या home मध्ये आत्ताच अशा files आहेत ज्या ls ला दिसत नाहीत. Linux त्यांच्यात settings ठेवतं.

काय. Dot ने सुरू होणारं नाव नेहमीच्या ls पासून hidden असतं. एवढाच नियम.

कसं (home folder मधून):

  1. touch notes.txt
  2. Hide करा: mv notes.txt .notes.txt
  3. ls → दिसत नाही.
  4. ls -a → ही बघा, आधीपासून hidden असलेल्या files च्या बाजूला.

तुमची list साधारण अशी दिसेल:

ls -a
.  ..  .bash_logout  .bash_profile  .bashrc  .notes.txt  .ssh  projects  raj  ravi

Unhide करायला परत rename करा: mv .notes.txt notes.txt. Folders चं पण असंच: mv ravi .ravi hide, mv .ravi ravi unhide.

ls -A म्हणजे तेच, फक्त . आणि .. शिवाय.

Hidden files: dot ने सुरू होणारं नाव $ mv notes.txt .notes.txt$ lsprojects ravi report.txt$ ls -a. .. .bash_logout .bash_profile .bashrc .notes.txt .ssh projects ravi report.txt लपवणं आणि परत दाखवणं = renamemv notes.txt .notes.txt (hide)mv .notes.txt notes.txt (unhide)mv ravi .ravi (folders too) Hidden म्हणजे secret नाहीls -a type करणाऱ्या कुणालाही दिसतं.File सुरक्षित ठेवायला permissions वापरा.Dot फक्त ls output नीटनेटका ठेवतो. Linux स्वतःच्या settings अशाच लपवतो: .bashrc, .bash_profile, .ssh. ravi/* पण dot-names सोडतो.

Figure 7. mv notes.txt .notes.txt file ला ls पासून लपवतो; ls -a ती .bashrc, .bash_profile आणि .ssh च्या बाजूला दाखवतो. परत rename केलं की unhide. Hidden म्हणजे secret नाही: ls -a कोणीही चालवू शकतो.

Hidden files ची खरी उदाहरणं:

  1. .bashrc, .bash_profile: तुमच्या shell च्या settings.
  2. .ssh/: यात authorized_keys असते, म्हणजे तुमच्या नावाने login करायला परवानगी असलेल्या public keys ची list.
  3. Section 2 आठवा: ravi/* या सोडून देतो. ravi/. नाही.

Correction

Class मध्ये dot हा Linux न जाणणाऱ्या लोकांपासून files लपवायचा मार्ग म्हणून सांगितला. Dot नाव फक्त नेहमीच्या ls पासून लपवतो; ls -a type करणाऱ्या कोणालाही ते दिसतं. ही security नाही. File protect करायला permissions वापरा (पुढचा topic).

19. . आणि .. या entries

काय. प्रत्येक folder मध्ये, अगदी नवीन रिकाम्या folder मध्ये पण, ls -a दोन नावं दाखवतो:

  1. . = हाच folder.
  2. .. = parent folder, एक level वर.

Folder च्या list मधल्या या खऱ्या entries आहेत, ज्या folder कडे आणि त्याच्या parent कडे point करतात. म्हणून त्या सगळीकडे चालतात:

  1. cd .. → एक level वर.
  2. cd . → आहे तिथेच.
  3. cp one/a.txt . → इथे copy.
  4. mv ravi/2.txt .. → एक level वर move.
प्रत्येक folder मध्ये दोन built-in entries: . आणि .. / home ec2-user ravi one .= ravi ..= ec2-user ● तुम्ही ravi मध्ये आहात $ cd ravi$ ls -a. .. 1.txt one$ cd .ravi मध्येच राहतो$ cp one/a.txt .इथे copy$ cd ..वर ec2-user मध्येअगदी नवीन रिकामा folder पण . आणि .. दाखवतो . म्हणजे folder स्वतः, .. म्हणजे त्याचा parent. साखळीसारखं:प्रत्येक folder ला माहीत असतं तो कुठे आहे आणि त्याचा parent कुठे आहे.

Figure 8. तुम्ही ravi मध्ये आहात: . ravi कडेच point करतो, .. त्याच्या parent ec2-user कडे. ls -a प्रत्येक folder मध्ये . आणि .. दाखवतो, रिकाम्या folder मध्ये पण.

साखळी डोळ्यासमोर आणा: प्रत्येक folder ला माहीत असतं तो कुठे आहे (.) आणि त्याचा parent कुठे आहे (..), म्हणून तुम्ही नेहमी / पर्यंत परत वर चढू शकता.

20. निघण्याआधी: terminate की stop

Class च्या शेवटी instance आधी stop केला आणि मग terminate.

  1. Stop = बंद करणं. Disk (EBS) राहते; नंतर परत start करता येतो.
  2. Terminate = server delete करणं. By default root EBS volume पण delete होतो. Undo करता येत नाही.
  3. Terminate करायच्या आधी stop करायची गरज नाही. Terminate स्वतःच बंद करतो.

Stop vs terminate, आणि दोन्हीचा खर्च: EC2 server च्या आत: EBS, ENI, instance states, SSH ने connect करणं, आणि Linux म्हणजे काय.

Correction

Class मध्ये instance आधी stop केला आणि मग terminate. Stop ची गरज नाही: terminate instance स्वतःच बंद करतो आणि by default root volume delete करतो. ज्याची गरज नाही तोच server terminate करा; परत वापरायच्या practice servers साठी stop पुरे.

21. घरी करायचे tasks

Try at home

Task 1: फक्त आतलं

  1. src बनवा, त्यात a.txt, b.txt आणि hidden .env. एक रिकामा dst बनवा.
  2. src/* ने src चं फक्त आतलं dst मध्ये copy करा. ls -A dst ने check करा. .env आहे का?
  3. dst रिकामा करा (rm -r dst/*) आणि src/. ने परत करा.

Task 2: mv

  1. touch my.txt, मग तिचं नाव our.txt करा.
  2. एकाच command ने our.txt ला src मध्ये move करून final.txt नाव द्या.
  3. Home न सोडता src/final.txt चं नाव src/done.txt करा.
  4. mkdir box करा आणि अख्खा src folder box मध्ये move करा. -r लागला का?

Task 3: delete

  1. rmdir box try करा. Error वाचा.
  2. rm box try करा. Error वाचा.
  3. rm -ri box ने delete करा; सगळ्याला y द्या.

Task 4: नीट बघा

  1. touch report आणि mkdir photos.txt. ls -l आणि ls -F चालवा. Folder कोणता?
  2. report ला dot लावून hide करा, ls -a ने शोधा, मग unhide करा.
  3. Practice task (section 13) तुमच्या स्वतःच्या folder नावांनी, home मधून, शक्य तितक्या कमी commands मध्ये परत करा.

झालं की console मधून instance stop करा, किंवा परत वापरणार नसाल तर terminate करा.

Recap

थोडक्यात

  1. Prompt current folder दाखवतो: [ec2-user@ip-... ravi]$. ~ म्हणजे home.
  2. फक्त आतलं: cp -r ravi/* raj. Hidden files सकट: cp -r ravi/. raj.
  3. mv SOURCE DESTINATION = cut-paste. आधीच असलेला folder → आत जातो; नवीन नाव → rename.
  4. mv my.txt ravi/you.txt एकाच step मध्ये move आणि rename; mv ravi/1.txt ravi/2.txt home न सोडता rename.
  5. mv ला -r लागत नाही: same disk वर फक्त नावाची entry बदलते; दुसऱ्या disk वर copy, मग delete.
  6. mv गुपचूप overwrite करतो; mv -i विचारतो. Wildcards चालतात: mv *.txt ravi.
  7. rm files, rmdir रिकामे folders, rm -r सगळ्यासकट folders. Recycle bin नाही.
  8. File वर rm -r हा safety चा धोका आहे, speed चा प्रश्न नाही. शंका असेल तर rm -i / rm -ri.
  9. Home मधूनच relative paths, braces आणि Tab वापरून काम करा.
  10. नाव आणि colour वरून file की folder कळत नाही; ls -l (पहिलं character - किंवा d) आणि ls -F ने कळतं.
  11. Hidden = नाव dot ने सुरू. ls -a ते दाखवतो. Hidden म्हणजे secret नाही.
  12. प्रत्येक folder मध्ये . (स्वतः) आणि .. (parent).
  13. Terminate आधी stop ची गरज नाही, आणि तो by default root volume delete करतो.

Samjla ka? Ghari practice task parat kara, ani rm vaparnyaadhi don vela vichar kara.


Ravindra Bagale, trainer: linkedin.com/in/ravindra-bagale. Folders आणि files ची नावं (ravi, raj, projects, notes.txt, report.txt वगैरे) शिकण्यासाठीची उदाहरणं आहेत. Commands चे outputs आणि error messages GNU bash आणि coreutils वर तपासले, जे Amazon Linux 2023 पण वापरतं; prompt मधला hostname आणि ls -l मधल्या dates उदाहरण म्हणून आहेत.