IlmHamroh
JavaScript Full-stack/1-qism. Kompyuter, fayllar va terminal19/40-dars12 daqiqa
Mundarija (31)

Buyruq anatomiyasi va yordam olish

Qisqacha: Har bir terminal buyrug'i uch qismdan iborat: buyruq nomi (nima qilish), flaglar (qanday qilish: -l, --all) va argumentlar (nima ustida: fayl yoki papka nomi). Masalan, ls -l rasmlar. Qismlar bo'sh joy bilan ajratiladi. Dasturchilar flaglarni yodlamaydi: kerak bo'lganda ls --help, man ls yoki tldr ls dan qarab oladi.

Bu darsda

  • Istalgan buyruqni nom, flag va argumentga ajrata olasiz.
  • Qisqa (-a) va uzun (--all) flaglarni yozasiz, qisqa flaglarni birlashtirasiz (-la).
  • Nomida bo'sh joy bor faylni buyruqqa to'g'ri berasiz.
  • Shell ichidagi (builtin) buyruq bilan alohida dasturni farqlaysiz va nega cd ichki bo'lishi shartligini tushunasiz.
  • --help natijasini o'qiy olasiz va man, tldr dan foydalana olasiz.

Oldin bilishingiz kerak: Terminal, shell va prompt, Dastur o'rnatish va paket menejerlari (PATH qismi).

1. Nega bu kerak?

Terminalda yuzlab buyruq bor, har birining o'nlab sozlamasi. Birinchi ko'rganda "bularning hammasini qanday yodlayman?" degan qo'rquv tug'ilishi tabiiy.

Yaxshi xabar: dasturchilar ularni yodlamaydi. Ular ikki narsani biladi:

  1. Buyruqlar qanday tuzilishi — bu hamma buyruq uchun bir xil.
  2. Unutilgan narsani qayerdan qarash kerakligi.

Til o'rganishni eslang. Har bir gapni yodlamaysiz — grammatikani bilasiz va lug'atga qaraysiz. Bu dars — terminalning grammatikasi va lug'ati.

2. Buyruq anatomiyasi: uch bo'lak

2.1 Gap kabi

Oddiy gapni olaylik: "Jasur, tezda nonni olib kel". Unda nima qilish (olib kel), qanday qilish (tezda) va nima ustida (nonni) bor. Terminal buyrug'i ham xuddi shunday tuzilgan:

bash
ls -l rasmlar

ls — papkadagi fayllar ro'yxatini chiqaradigan buyruq (uni keyingi darsda batafsil ishlatamiz). Endi bo'laklaymiz:

Bo'lak Misolda Savol Gapda
Buyruq (command) ls Nima qilish? olib kel
Flag (option) -l Qanday qilish? tezda
Argument rasmlar Nima ustida? nonni
  • Buyruq — ishga tushadigan dastur nomi. Doim birinchi turadi.
  • Flag (option, "parametr" ham deyiladi) — buyruqning ishlash usulini o'zgartiradi. Chiziqcha (-) bilan boshlanadi. -l — "batafsil ro'yxat ko'rinishida".
  • Argument — buyruq nima bilan ishlashi: fayl, papka, matn. rasmlar — qaysi papkani ko'rsatish.

Flag ham, argument ham majburiy emas. Shunchaki ls ham ishlaydi — u joriy papkani oddiy ro'yxat qilib ko'rsatadi.

2.2 Bo'sh joy — ajratuvchi

Shell buyruqni bo'sh joylar bo'yicha bo'laklarga ajratadi. Shuning uchun bo'sh joy muhim:

bash
ls mening rasmim

Shell buni "ikki argument: mening va rasmim" deb tushunadi. Natija (biz Git Bash'da ishga tushirdik):

text
ls: cannot access 'mening': No such file or directory
ls: cannot access 'rasmim': No such file or directory

"mening ga kirib bo'lmadi: bunday fayl yoki papka yo'q" — va xuddi shunday rasmim uchun. Bitta nom ikkiga bo'linib ketdi.

Nomda bo'sh joy bo'lsa, uni qo'shtirnoqqa oling:

bash
ls "mening rasmim"

Endi shell butun mening rasmim ni bitta argument deb biladi. Mana nega Fayl va papka nomlash qoidalari darsida bo'sh joyli nomlardan qochishni maslahat bergan edik.

2.3 Katta-kichik harf

Buyruq nomlari va flaglar katta-kichik harfni farqlaydi. Linux'da ls ishlaydi, LS esa command not found beradi.

Maslahat: Git Bash'da LS ham ishlab ketishi mumkin — biz tekshirdik, ishladi. Sababi: Windows fayl tizimi katta-kichik harfni farqlamaydi va ls.exe ni baribir topadi. Lekin bu odatga aylanmasin: serverda (Linux'da) bunday buyruq ishlamaydi. Doim kichik harf bilan yozing.

Tekshirib ko'ring: cp -r rasmlar zaxira buyrug'ida qaysi qism buyruq, qaysi flag, qaysilari argument?

Javob

cp — buyruq (nusxalash dasturi), -r — flag (chiziqcha bilan boshlangan), rasmlar va zaxira — ikki argument: nimani nusxalash va qayerga. Argument bir nechta bo'lishi mumkin.

3. Flaglar: qisqa va uzun

3.1 Qisqa flag

Bitta chiziqcha va bitta harf:

  • -l — batafsil ro'yxat (long);
  • -a — hammasi, yashirin fayllar ham (all);
  • -h — hajmni odam o'qiydigan ko'rinishda: 4.0K, 2.4M (human-readable).

Bir nechta qisqa flagni bitta chiziqcha ostida birlashtirsa bo'ladi. Bu uch yozuv bir xil ishlaydi:

bash
ls -l -a -h
ls -lah
ls -hal

Harflar tartibi odatda muhim emas.

Qisqa flagda harf kattaligi muhim. ls -r — ro'yxatni teskari tartibda chiqaradi (reverse). ls -R — ichki papkalarni ham ko'rsatadi (recursive). Bitta harf, butunlay boshqa ish.

3.2 Uzun flag

Ikkita chiziqcha va to'liq so'z:

bash
ls --all
ls --human-readable

Ko'p qisqa flagning uzun jufti bor: -a va --all bir xil ish qiladi. Uzun flag o'qish uchun qulay: bir oydan keyin skriptni ochganingizda --recursive nima ekanini darhol tushunasiz, -R esa esingizdan chiqqan bo'lishi mumkin.

3.3 Qiymat oladigan flag

Ba'zi flaglar o'zidan keyin qiymat kutadi. Masalan, head fayl boshini ko'rsatadi, -n esa nechta qatorligini aytadi:

bash
head -n 5 royxat.txt
head --lines=5 royxat.txt

Ikkalasi ham "royxat.txt ning dastlabki 5 qatorini ko'rsat" degani. Qisqa flagda qiymat bo'sh joy bilan, uzun flagda ko'pincha = bilan yoziladi.

3.4 Bir harf — har xil ma'no

Flag harfining ma'nosini har bir buyruq o'zi belgilaydi. ls da -h — "hajmni qulay ko'rsat". Ko'p boshqa buyruqlarda esa -h — "yordam" (help). Shuning uchun "-r doim shuni qiladi" deb o'ylamang — har buyruqning yordamiga qarang.

Tekshirib ko'ring: ls -a -l ni qisqaroq qilib ikki xil usulda yozing.

Javob

ls -al va ls -la. Qisqa flaglar bitta chiziqcha ostida birlashtiriladi, harflar tartibi farq qilmaydi.

4. Ichki (builtin) va tashqi buyruqlar

4.1 Ikki tur

Buyruq nomini yozganingizda shell uni ikki joydan izlaydi:

  1. Ichki buyruq (shell builtin) — shell'ning o'zi ichiga yozilgan. Masalan: cd, pwd, echo, type, exit.
  2. Tashqi dastur — diskda alohida fayl bo'lib yotadi. Shell uni PATH papkalaridan topadi. Masalan: ls, mkdir, cp, git, node.

Shell qidirishni shu tartibda olib boradi:

flowchart TD
  A["Siz yozdingiz: buyruq nomi"] --> B{"Shell'ning ichki<br/>buyrug'imi?"}
  B -- ha --> C["Shell o'zi bajaradi<br/>(cd, pwd, echo)"]
  B -- "yo'q" --> D{"PATH papkalarida<br/>shunday dastur bormi?"}
  D -- ha --> E["Yangi jarayon bo'lib<br/>ishga tushadi (ls, git)"]
  D -- "yo'q" --> F["command not found"]

Qaysi biri ekanini type buyrug'i aytadi. Biz Git Bash'da ishga tushirdik:

bash
type cd
type ls
text
cd is a shell builtin
ls is /usr/bin/ls

"cd — shell'ning ichki buyrug'i". "ls — /usr/bin/ls da turgan dastur". Ubuntu'da type ls ko'pincha ls is aliased to 'ls --color=auto' deydi. Bu ls ga rang qo'shadigan qisqartma (alias) — ularni muhit o'zgaruvchilari darsida ko'ramiz.

4.2 Nega cd ichki bo'lishi shart?

cd — joriy papkani almashtiradigan buyruq. OS darsida har bir dastur alohida jarayon bo'lib ishlashini va har jarayonning o'z "holati" borligini ko'rgan edik. Joriy papka ham shu holatning bir qismi.

Faraz qilaylik, cd alohida dastur bo'lsin:

  1. Shell cd dasturini yangi jarayon qilib ishga tushiradi.
  2. cd o'zining joriy papkasini almashtiradi.
  3. cd ishini tugatadi va jarayon yopiladi.
  4. Shell'ning joriy papkasi esa o'zgarmay qoladi.

Ya'ni cd hech narsa qilmagandek bo'lardi. Qo'shningizga "uyingni ko'chir" deysiz — u ko'chadi, siz esa joyingizda qolasiz. Shu sababli cd shell'ning ichida yashaydi va shell'ning o'z papkasini almashtiradi.

Tekshirib ko'ring: type git yozilsa, natija "shell builtin" bo'ladimi yoki yo'lmi? Nega?

Javob

Yo'l bo'ladi — masalan git is /mingw64/bin/git yoki git is /usr/bin/git. Git — alohida o'rnatilgan dastur, u shell ichiga yozilmagan. Shell uni PATH'dagi papkalardan topadi.

5. Yordam olish

5.1 --help: buyruqning o'z yo'riqnomasi

Deyarli har bir buyruq --help flagini tushunadi:

bash
ls --help

Natijaning boshi (Git Bash'da):

text
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).

Birinchi qator — foydalanish sxemasi (usage). Uni o'qish qoidasi:

Belgi Ma'nosi
[OPTION] Kvadrat qavs ichidagi narsa ixtiyoriy
... Bir nechta bo'lishi mumkin
Katta harfdagi so'z Uning o'rniga o'zingiz nimadir yozasiz

Demak ls [OPTION]... [FILE]... — "ls, keyin istasangiz bir nechta flag, keyin istasangiz bir nechta fayl nomi". Ikkinchi qator: "FILE'lar haqida ma'lumot chiqaradi (sukut bo'yicha — joriy papka)".

Pastroqda flaglar ro'yxati keladi:

text
  -a, --all                  do not ignore entries starting with .
  -l                         use a long listing format
  -S                         sort by file size, largest first

Chapda flag (qisqa va uzun shakli), o'ngda qisqa izohi. -S — "hajm bo'yicha tartibla, eng kattasi birinchi".

Ichki buyruqlar uchun bash'da help buyrug'i bor: help cd.

5.2 man: to'liq qo'llanma

Linux va macOS'da har bir buyruqning to'liq qo'llanmasi (manual) bor:

bash
man ls

Qo'llanma butun oynani egallaydi. Boshqaruv:

Tugma Nima qiladi
↓ / ↑ Bir qator pastga / yuqoriga
Space Keyingi sahifa
/so'z va Enter Matndan so'z ni qidiradi, n — keyingisi
q Chiqish

Diqqat: Git Bash'da man yo'q — bash: man: command not found chiqadi (biz tekshirdik). Windows'da --help dan foydalaning yoki man ni WSL ichida oching.

5.3 tldr: eng kerakli misollar

man sahifalari uzun va inglizcha. Shuning uchun hamjamiyat tldr loyihasini yaratgan. Nomi internet iborasidan: "Too Long; Didn't Read" — "juda uzun, o'qimadim". U har buyruq uchun eng ko'p ishlatiladigan 5–8 ta tayyor misolni ko'rsatadi.

tldr alohida o'rnatiladi: macOS'da brew install tlrc, boshqa tizimlarda ham paket menejerlari orqali. O'rnatmasdan ham ishlatsa bo'ladi: tldr.sh saytida buyruq nomini qidiring.

bash
tldr ls

5.4 Boshqa yordamchilar

  • explainshell.com — buyruqni to'liqligicha joylaysiz, sayt har bir bo'lagini alohida tushuntiradi.
  • PowerShell'da: Get-Help Get-ChildItem yoki winget --help.
  • Xato matnini qidirish. Xatoni aynan nusxalab qidiruvga bering — kimdir uni allaqachon hal qilgan bo'ladi. Buni Dasturchi ingliz tili darsida mashq qilamiz.

Tekshirib ko'ring: mkdir --help ning birinchi qatori Usage: mkdir [OPTION]... DIRECTORY.... Papka nomini berish majburiymi?

Javob

Ha, majburiy. DIRECTORY kvadrat qavsda emas — demak uni tashlab ketib bo'lmaydi. Oxiridagi ... esa bir nechta papka nomini birdaniga berish mumkinligini bildiradi. [OPTION]... — flaglar ixtiyoriy.

6. Ko'p uchraydigan xatolar

6.1 Uzun flagga bitta chiziqcha

bash
ls -help

Git Bash'da:

text
ls: unknown option -- e
Try 'ls --help' for more information.

Linux'da xuddi shu xato ls: invalid option -- 'e' ko'rinishida chiqadi. Tarjimasi: "noma'lum flag: e". Nega aynan e? Bitta chiziqcha bo'lgani uchun ls -help ni to'rtta qisqa flag deb o'qidi: -h, -e, -l, -p. -h unga tanish, e esa yo'q — birinchi notanish harfda to'xtadi. Qoida: xatodagi bitta harf — ko'pincha "ikki chiziqcha qo'yishni unutdingiz" degani. To'g'risi: ls --help.

git da ham shunday: git -help → unknown option: -help. To'g'risi: git --help.

Maslahat: ls -all ham xato — --all bo'lishi kerak edi. Lekin u tasodifan ishlaydi: ls uni -a, -l, -l deb o'qiydi. Ishladi deb aldanmang — boshqa buyruqda bunday omad bo'lmaydi.

6.2 Bo'sh joyli nomni qo'shtirnoqsiz yozish

ls mening rasmim — ikki alohida argument va ikki xato. Qo'shtirnoqqa oling: ls "mening rasmim". Yaxshisi — nomlarda bo'sh joy ishlatmang.

6.3 Git Bash'da man qidirish

bash: man: command not found — Git Bash'da man yo'q. ls --help ishlating.

6.4 PowerShell'dagi type

PowerShell'da type — butunlay boshqa buyruq: u faylning ichini chiqaradi (Get-Content ning qisqa nomi). type cd yozsangiz, cd degan faylni qidiradi. PowerShell'da buyruq turini bilish uchun Get-Command cd ishlatiladi. Bu farqlarni PowerShell darsida to'liq ko'ramiz.

6.5 man yoki --help ichida "qotib qolish"

Qo'llanma oynani to'liq egalladi va prompt yo'q. Qo'rqmang — q tugmasini bosing.

7. Mashqlar

1-mashq (oson): Bo'laklang

head -n 3 menyu.txt buyrug'ida:

  • buyruq —
  • flag —
  • flagning qiymati —
  • argument (fayl) —
Yechim

head — buyruq (fayl boshini ko'rsatadi). -n — "nechta qator" flagi, u o'zidan keyin qiymat oladi — 3. menyu.txt — qaysi fayl. Natija: menyu.txt ning dastlabki 3 qatori.

2-mashq (o'rta): Qisqasini va uzunini yozing

ls --help natijasidan olingan qatorlar:

text
  -a, --all                  do not ignore entries starting with .
  -r, --reverse              reverse order while sorting
  -R, --recursive            list subdirectories recursively
  1. ls -a -r ni uzun flaglar bilan yozing.
  2. Xuddi shuni birlashtirilgan qisqa flag bilan yozing.
  3. ls -R nima qiladi va ls -r dan farqi nima?
Yechim
  1. ls --all --reverse
  2. ls -ar (yoki ls -ra)
  3. ls -R ichki papkalarni ham ichma-ich ko'rsatadi (recursive). ls -r esa ro'yxatni teskari tartibda chiqaradi (reverse). Harf bir xil, faqat kattaligi farq qiladi — va ma'nosi butunlay boshqa.

3-mashq (qiyin): Yordamdan o'zingiz toping

Git Bash, WSL yoki macOS terminalida ls --help ni oching (macOS'da man ls). Quyidagi ikki flagni toping:

  • fayllarni hajm bo'yicha tartiblaydigan flag;
  • fayllarni o'zgartirilgan vaqti bo'yicha tartiblaydigan flag (eng yangisi birinchi).

Keyin joriy papkadagi hamma fayllarni (yashirinlari bilan) batafsil ro'yxatda, eng yangisi birinchi turadigan qilib chiqaradigan buyruqni yozing. Ishora: kerakli flaglar sort by so'zlari bilan boshlanadigan izohlarda.

Yechim

Yordamda shunday qatorlar bor:

text
  -S                         sort by file size, largest first
  -t                         sort by time, newest first; see --time

Hajm bo'yicha — -S, vaqt bo'yicha — -t. Kerakli buyruq:

bash
ls -lat

-l — batafsil, -a — yashirinlari bilan, -t — eng yangisi birinchi. Bu mashqning asosiy maqsadi — flagni yodlash emas, uni yordamdan topa olish.

8. Real ishda

  • Yangi vosita. Loyihaga yangi vosita qo'shilganda dasturchi avval vosita --help ni ochadi. Masalan, git --help, npm --help, docker --help. Qolgani — tajriba.
  • Yo'riqnomalar. Loyiha hujjatlarida npm run build -- --watch kabi uzun buyruqlar uchraydi. Anatomiyani bilsangiz, ularni bo'laklab tushunasiz, ko'r-ko'rona nusxalamaysiz.
  • Skriptlar. Jamoa skriptlarida uzun flaglar afzal ko'riladi (--recursive, --force): kodni keyin o'qiydigan hamkasb uchun tushunarli.
  • Intervyu. "Buyruqning qaysi flagi nima qilishini bilmasangiz, nima qilasiz?" — yaxshi javob: "--help, man yoki tldr ga qarayman". Hamma narsani yoddan bilish shart emas.

Xulosa

  • Buyruq = nom + flaglar + argumentlar, ular bo'sh joy bilan ajratiladi.
  • Qisqa flag: -l, birlashtirsa bo'ladi (-lah); uzun flag: --all. Harf kattaligi muhim: -r ≠ -R.
  • Nomda bo'sh joy bo'lsa — qo'shtirnoq: "mening rasmim".
  • cd, pwd, echo — shell ichidagi buyruqlar; ls, git, node — PATH'dan topiladigan dasturlar. Buni type ko'rsatadi.
  • Yordam: --help (hamma joyda), man (Linux, macOS; chiqish — q), tldr (tayyor misollar).
  • unknown option -- e kabi xato — ko'pincha uzun flagga bitta chiziqcha qo'yilgan.

Keyingi dars: Terminalda harakatlanish — pwd, ls va cd bilan papkalar bo'ylab yurishni va Tab tugmasi bilan tez yozishni o'rganamiz.

Ulashish:Telegram'da

Izohlar (0)

Izoh yozish uchun kiring.

  • Hozircha izoh yo'q. Birinchi bo'ling!
Buyruq anatomiyasi va yordam olish — IlmHamroh