ធ្វើការជាមួយ File និង Folder
មាតិកា
- បង្កើត Folder៖
mkdir - បង្កើត File៖
touch - ការចម្លង៖
cp - ការផ្លាស់ទី និងការប្តូរឈ្មោះ៖
mv - ការលុប៖
rmនិងrmdir - Wildcard៖ ធ្វើការជាមួយ File ច្រើនក្នុងពេលតែមួយ
- ឈ្មោះដែលមានដកឃ្លា និងតួអក្សរចម្លែក
- សាកល្បងដោយខ្លួនឯង
អ្វីៗទាំងអស់ក្នុងជំពូកនេះធ្វើឡើងនៅក្នុង folder អនុវត្តរបស់អ្នក។ មុនពេលចាប់ផ្តើម សូមចូលទៅទីនោះ៖
cd ~/cli-practice
បើវាមិនទាន់មាននៅឡើយ សូមត្រឡប់ទៅចុងបញ្ចប់នៃ ការផ្លាស់ទីក្នុង File System ហើយបង្កើតវាជាមុនសិន។
1. បង្កើត Folder៖ mkdir
អ្នកបានប្រើ mkdir (make directory) រួចហើយដើម្បីបង្កើត folder។ ផ្តល់ឲ្យវានូវឈ្មោះមួយ ឬច្រើន៖
mkdir drafts
mkdir music videos
ចុះបើអ្នកចង់បាន folder ដែលនៅជ្រៅច្រើនកម្រិត ដូចជា projects/website/src ហើយ website មិនទាន់មាននៅឡើយ?
mkdir projects/website/src
mkdir: projects/website: No such file or directory
(ពាក្យពេចន៍ពិតប្រាកដនៃ error message ខុសគ្នាបន្តិចបន្តួចរវាង macOS និង Linux ប៉ុន្តែអត្ថន័យគឺដូចគ្នា។)
mkdir បដិសេធមិនបង្កើត folder ដែលបាត់នៅចន្លោះនោះទេ។ Option -p (parents) ប្រាប់វាឲ្យបង្កើតគ្រប់ folder ដែលបាត់តាមផ្លូវ៖
mkdir -p projects/website/src
-p ក៏មិនត្អូញត្អែរដែរ បើ folder នោះមានរួចហើយ ដែលធ្វើឲ្យវាមានសុវត្ថិភាពក្នុងការប្រើនៅក្នុង script។
មានល្បិចមួយទៀតដែលគួរដឹង។ Brace expansion អនុញ្ញាតឲ្យអ្នកសរសេរឈ្មោះច្រើនក្នុងពេលតែមួយ — shell ពង្រីកសញ្ញាដង្កៀប (brace) មុនពេលរត់ command៖
mkdir -p projects/website/{src,tests,docs}
នោះគឺដូចគ្នានឹងការវាយ path បីដាច់ដោយឡែកពីគ្នា៖ projects/website/src, projects/website/tests និង projects/website/docs។ សូមកត់សម្គាល់ថា គ្មានដកឃ្លា នៅខាងក្នុងសញ្ញាដង្កៀបទេ។
2. បង្កើត File៖ touch
touch បង្កើត file ទទេ៖
touch notes/todo.txt
touch notes/ideas.txt notes/shopping.txt
ពិនិត្យថាពួកវាមាននៅទីនោះ ហើយពិតជាទទេមែន (ទំហំ 0)៖
ls -l notes
-rw-r--r-- 1 dara staff 0 Oct 1 10:02 ideas.txt
-rw-r--r-- 1 dara staff 0 Oct 1 10:02 shopping.txt
-rw-r--r-- 1 dara staff 0 Oct 1 10:02 todo.txt
បើ file នោះមានរួចហើយ touch មិនផ្លាស់ប្តូរមាតិការបស់វាទេ — វាគ្រាន់តែធ្វើបច្ចុប្បន្នភាពពេលវេលា «កែប្រែចុងក្រោយ» ប៉ុណ្ណោះ។ នោះហើយជាប្រភពនៃឈ្មោះរបស់វា៖ វា «ប៉ះ (touch)» file នោះ។
File ទទេមិនសូវគួរឲ្យចាប់អារម្មណ៍ទេ ដូច្នេះនេះជាវិធីរហ័សមួយដើម្បីដាក់អត្ថបទមួយបន្ទាត់ចូលទៅក្នុង file។ កុំបារម្ភអំពី > នៅឡើយ — ជំពូកទី 6 ពន្យល់វាយ៉ាងពេញលេញ៖
echo "Buy rice" > notes/shopping.txt
echo "Learn the command line" > notes/todo.txt
ដើម្បីបើក file នៅក្នុង editor បែបក្រាហ្វិកវិញ code notes/todo.txt បើកវានៅក្នុង VS Code (បើអ្នកបានដំឡើងវា) ហើយ open / xdg-open / explorer.exe ពីជំពូកមុន ក៏ដំណើរការជាមួយ file ផងដែរ។
3. ការចម្លង៖ cp
cp (copy) ទទួលយក ប្រភព (source) មួយ និង គោលដៅ (destination) មួយ៖
cp notes/todo.txt notes/todo-backup.txt
វាចម្លង todo.txt ទៅជា file ថ្មីមួយឈ្មោះ todo-backup.txt នៅក្នុង folder ដដែល។ បើគោលដៅជា folder ច្បាប់ចម្លងនឹងចូលទៅខាងក្នុងវា ហើយរក្សាឈ្មោះដដែល៖
cp notes/todo.txt drafts/
ឥឡូវនេះមាន drafts/todo.txt ហើយ។ សញ្ញា / នៅខាងចុង drafts/ គឺមិនចាំបាច់ទេ ប៉ុន្តែវាជាទម្លាប់ល្អ៖ វាធ្វើឲ្យច្បាស់ថាអ្នកចង់សំដៅលើ folder មួយ។
អ្នកអាចចម្លង file ច្រើនចូលទៅក្នុង folder មួយក្នុងពេលតែមួយបាន — folder តែងតែនៅ ចុងក្រោយ៖
cp notes/ideas.txt notes/shopping.txt drafts/
ការចម្លង Folder
សាកល្បងចម្លង folder ទាំងមូល៖
cp notes notes-copy
cp: notes is a directory (not copied).
ការចម្លង folder មានន័យថាការចម្លងអ្វីៗទាំងអស់នៅខាងក្នុងវា និងអ្វីៗទាំងអស់នៅខាងក្នុង folder ទាំងនោះ ហើយបន្តបែបនេះតទៅទៀត។ អ្នកត្រូវតែស្នើសុំវាឲ្យបានច្បាស់លាស់ដោយប្រើ -r (recursive)៖
cp -r notes notes-copy
ការព្រមាន៖ បើ file គោលដៅមានរួចហើយ
cpសរសេរជាន់ពីលើវាដោយមិនសួរ។ បន្ថែម-i(interactive) ដើម្បីឲ្យវាសួរជាមុនសិន៖cp -i notes/todo.txt drafts/។
4. ការផ្លាស់ទី និងការប្តូរឈ្មោះ៖ mv
mv (move) ដំណើរការដូច cp ដែរ លើកលែងតែ file ដើមបាត់ទៅវិញបន្ទាប់ពីនោះ។ ផ្លាស់ទី file មួយចូលទៅក្នុង folder៖
mv notes-copy/todo.txt projects/
គួរឲ្យចាប់អារម្មណ៍ គឺគ្មាន command «rename» ដាច់ដោយឡែកទេ។ ការប្តូរឈ្មោះ គ្រាន់តែជាការផ្លាស់ទី file ទៅឈ្មោះថ្មីមួយនៅក្នុង folder ដដែលប៉ុណ្ណោះ៖
mv drafts/todo.txt drafts/old-todo.txt
ហើយខុសពី cp, mv ដំណើរការជាមួយ folder ដោយមិនចាំបាច់មាន -r ព្រោះ file នៅខាងក្នុងមិនចាំបាច់ត្រូវចម្លងទេ — folder គ្រាន់តែទទួលបានឈ្មោះ ឬទីតាំងថ្មីប៉ុណ្ណោះ៖
mv notes-copy archive
ការព្រមាន៖ ដូច
cpដែរmvសរសេរជាន់ពីលើ file ដែលមានឈ្មោះដូចគ្នានៅគោលដៅដោយស្ងាត់ៗ។mv -iសួរជាមុនសិន។
5. ការលុប៖ rm និង rmdir
នេះគឺជាផ្នែកមួយនៃ command line ដែលសមនឹងទទួលបានការគោរពយ៉ាងពិតប្រាកដ។
rm (remove) លុប file៖
rm notes/todo-backup.txt
គ្មានសំណួរ គ្មានការបញ្ជាក់ ហើយ — ចំណុចសំខាន់ — គ្មានធុងសំរាមទេ។ File ដែលត្រូវបានលុបដោយ rm មិនទៅកាន់ Trash ឬ Recycle Bin ទេ។ គ្មាន «undo» និងគ្មាន «restore» ឡើយ។ ដូចដែលអ្នកបានឃើញនៅក្នុង File និង File System ទិន្នន័យអាចនៅលើ disk មួយរយៈទៀតតាមលក្ខណៈបច្ចេកទេស ប៉ុន្តែតាមការអនុវត្តជាក់ស្តែង វាបាត់ហើយ។
rmdir លុប folder មួយ ប៉ុន្តែ លុះត្រាតែវាទទេ — ដែលធ្វើឲ្យវាជាជម្រើសដែលមានសុវត្ថិភាព៖
mkdir empty-folder
rmdir empty-folder
ដើម្បីលុប folder មួយ និងអ្វីៗទាំងអស់នៅខាងក្នុងវា សូមប្រើ rm -r៖
rm -r archive
អ្នកនឹងឃើញ rm -rf ញឹកញាប់នៅក្នុងមេរៀនផ្សេងៗ។ -f (force) មានន័យថា «កុំសួរ កុំត្អូញត្អែរ ទោះបី file ត្រូវបានការពារពីការសរសេរ ឬមិនមានក៏ដោយ»។ វាមានប្រយោជន៍នៅក្នុង script ហើយវាមានគ្រោះថ្នាក់នៅក្នុងដៃរបស់អ្នក រហូតដល់អ្នកមានទំនុកចិត្ត — path ខុសតែមួយ ហើយ folder ការងារទាំងមូលនឹងបាត់ក្នុងរយៈពេលមួយប្រភាគវិនាទី។
ទម្លាប់ដែលរក្សាអ្នកឲ្យមានសុវត្ថិភាព៖
- រត់
pwdមុនពេលលុប ដើម្បីឲ្យអ្នកដឹងថាអ្នកនៅឯណា។ - រត់
lsជាមួយ path ដដែលពិតប្រាកដជាមុនសិន។ បើls drafts/*.txtបង្ហាញ file ដែលអ្នករំពឹងទុក នោះrm drafts/*.txtនឹងលុប file ទាំងនោះ ហើយគ្មានអ្វីផ្សេងទៀតទេ។ - ប្រើ
rm -iនៅពេលអ្នកមិនប្រាកដ។ វាសួរremove drafts/old-todo.txt?សម្រាប់ file នីមួយៗ៖ វាយyដើម្បីបញ្ជាក់។ - ប្រើ
Tabដើម្បីបំពេញ path ជំនួសឲ្យការវាយវា ដើម្បីកុំឲ្យការវាយខុសអាចធ្វើឲ្យrmចង្អុលទៅកន្លែងផ្សេង។ - កុំរត់ command
rm -rfដែលចម្លងពីអ៊ីនធឺណិតឲ្យសោះ ដោយមិនយល់ច្បាស់ថាវាលុប path មួយណា។
6. Wildcard៖ ធ្វើការជាមួយ File ច្រើនក្នុងពេលតែមួយ
ការវាយឈ្មោះ file គ្រប់ឈ្មោះ ឆាប់ធ្វើឲ្យធុញទ្រាន់ណាស់។ Wildcard (ហៅផងដែរថា glob pattern) អនុញ្ញាតឲ្យអ្នករៀបរាប់ពីក្រុមឈ្មោះមួយ៖
| Pattern | ត្រូវនឹង |
|---|---|
* | តួអក្សរណាក៏បាន ចំនួនប៉ុន្មានក៏បាន (រួមទាំងគ្មានសោះ) |
? | តួអក្សរមួយពិតប្រាកដ |
[abc] | តួអក្សរមួយ៖ a, b ឬ c |
តោះបង្កើត file មួយចំនួនដើម្បីសាកល្បងពួកវា៖
touch photos/beach.jpg photos/temple.jpg photos/family.png photos/scan1.pdf photos/scan2.pdf
ឥឡូវនេះ៖
ls photos/*.jpg # beach.jpg temple.jpg
ls photos/scan?.pdf # scan1.pdf scan2.pdf
ls photos/* # everything in photos
cp photos/*.jpg drafts/
នេះជាចំណុចសំខាន់ដែលត្រូវយល់៖ shell ជាអ្នកពង្រីក wildcard មិនមែន command ទេ។ មុនពេល ls ចាប់ផ្តើមផង shell មើលទៅក្នុង folder រកឈ្មោះដែលត្រូវគ្នា ហើយជំនួស photos/*.jpg ដោយ photos/beach.jpg photos/temple.jpg។ ls គ្រាន់តែទទួលបាន argument ធម្មតាពីរប៉ុណ្ណោះ។ នោះហើយជាមូលហេតុដែល wildcard ដំណើរការដូចគ្នាជាមួយគ្រប់ command — ls, cp, mv, rm — ពួកវាមិនដែលឃើញ * ផងទេ។
អ្នកអាចសាកល្បងមើលថា pattern មួយនឹងត្រូវនឹងអ្វីខ្លះ ដោយសុវត្ថិភាព ដោយប្រើ echo៖
echo photos/*.pdf
photos/scan1.pdf photos/scan2.pdf
បើគ្មានអ្វីត្រូវគ្នាទេ zsh នឹងឈប់ជាមួយ error (no matches found) ចំណែក Bash បញ្ជូន pattern នោះទៅមុខដដែលដោយមិនផ្លាស់ប្តូរ ដូច្នេះ command ត្អូញត្អែរថាវារកមិនឃើញ file ដែលមានឈ្មោះ *.gif តាមព្យញ្ជនៈ។ ទោះយ៉ាងណាក៏ដោយ គ្មានអ្វីកើតឡើងទេ។
រឿងពីរទៀតដែលត្រូវដឹង៖
*មិនត្រូវនឹង hidden file ទេ (ឈ្មោះដែលចាប់ផ្តើមដោយ.) ដូច្នេះrm *នឹងមិនលុប.envឬ.gitទេ។ នោះជាមុខងារសុវត្ថិភាពដែលបានរចនាឡើងដោយចេតនា។rm *លុប គ្រប់ file ដែលមើលឃើញនៅក្នុង folder បច្ចុប្បន្ន។ នេះពិតជាកន្លែងដែលទម្លាប់ «រត់lsជាមុនសិន» បង្ហាញពីតម្លៃរបស់វា។
7. ឈ្មោះដែលមានដកឃ្លា និងតួអក្សរចម្លែក
ដូចដែលអ្នកបានឃើញក្នុងជំពូកទី 2 shell បំបែក argument តាមដកឃ្លា។ ដូច្នេះ command នេះបង្កើត file ពីរ គឺ My និង Notes.txt៖
touch My Notes.txt
មានវិធីពីរយ៉ាងដើម្បីរក្សាឈ្មោះដែលមានដកឃ្លាឲ្យនៅជាមួយគ្នា។
សញ្ញាសម្រង់ (quote) ព័ទ្ធជុំវិញឈ្មោះទាំងមូល៖
touch "My Notes.txt"
cp "My Notes.txt" drafts/
Backslash នៅពីមុខដកឃ្លានីមួយៗ ដែលប្រាប់ shell ថា «ដកឃ្លានេះជាផ្នែកមួយនៃឈ្មោះ»៖
ls My\ Notes.txt
អ្នកមិនចាំបាច់ចងចាំថាត្រូវប្រើមួយណាទេ — ចុច Tab ហើយ shell នឹងបន្ថែម backslash ឲ្យអ្នក។
ដូចគ្នានេះដែរសម្រាប់តួអក្សរផ្សេងទៀតដែល shell ចាត់ទុកជាពិសេស ដូចជា *, ?, &, $, !, (, ) និង '។ បើឈ្មោះ file មានតួអក្សរណាមួយក្នុងចំណោមនេះ សូមដាក់វាក្នុងសញ្ញាសម្រង់។ សញ្ញាសម្រង់តែមួយ ('...') តឹងរ៉ឹងបំផុត៖ shell ទុកអ្វីៗទាំងអស់នៅខាងក្នុងវាឲ្យនៅដដែលដូចដែលបានសរសេរ។
ដំណោះស្រាយសាមញ្ញបំផុត គឺជៀសវាងបញ្ហានេះនៅក្នុង file ផ្ទាល់ខ្លួនរបស់អ្នក។ អ្នកអភិវឌ្ឍន៍ជាធម្មតាដាក់ឈ្មោះ file និង folder ជា អក្សរតូចជាមួយសញ្ញា hyphen៖ my-notes.txt, project-plan.md, family-photos។ គ្មានដកឃ្លា គ្មានអក្សរធំ គ្មានតួអក្សរពិសេស ហើយគ្មានអ្វីត្រូវដាក់ក្នុងសញ្ញាសម្រង់ — ហើយវាជាអ្វីដែលអ្នកនឹងឃើញនៅក្នុងស្ទើរតែគ្រប់ project កូដ។
8. សាកល្បងដោយខ្លួនឯង
ធ្វើអ្វីៗទាំងអស់នេះនៅក្នុង ~/cli-practice។
- នៅក្នុង command តែមួយ បង្កើត folder
music/khmer,music/popនិងmusic/classicalដោយប្រើmkdir -pនិង brace expansion។ - បង្កើត file ទទេបីនៅក្នុង
music/pop៖song1.mp3,song2.mp3និងcover.jpg។ - ចម្លងតែ file
.mp3ចូលទៅក្នុងmusic/khmer។ ប្រើechoដើម្បីពិនិត្យ pattern ជាមុនសិន។ - ប្តូរឈ្មោះ
music/pop/cover.jpgទៅជាmusic/pop/album-cover.jpg។ - ផ្លាស់ទី folder
music/classicalទាំងមូលចូលទៅក្នុងdraftsបន្ទាប់មកពិនិត្យដោយប្រើls drafts។ - បង្កើត file មួយឈ្មោះ
"Final Report.txt"(មានដកឃ្លា) បន្ទាប់មកប្តូរឈ្មោះវាទៅជាfinal-report.txt។ - លុបអ្វីៗទាំងអស់នៅខាងក្នុង
music/khmerដោយប្រើ wildcard — ប៉ុន្តែរត់lsជាមួយ pattern ដដែលជាមុនសិន។ បន្ទាប់មកលុប folder ទទេនោះដោយប្រើrmdir។
ឥឡូវនេះ អ្នកអាចរៀបចំ file ទាំងស្រុងពី keyboard។ បន្ទាប់ តោះមើលទៅខាងក្នុង file ទាំងនោះ៖ ការអាន ការរំកិល និងការកែប្រែវានៅក្នុង terminal។
ទិញកាហ្វេជូនខ្ញុំ
ចូលចិត្តមេរៀននេះមែនទេ? សូមពិចារណាទិញកាហ្វេជូនខ្ញុំមួយកែវ ដើម្បីគាំទ្រការបង្កើតមាតិកាឥតគិតថ្លៃបន្ថែមទៀត!