Skip to content

Buyruq sintaksisi va yordam hujjatlari

Buyruq satrida yuz beradigan xatolarning aksariyati buyruq nomini unutib qo'yishdan kelib chiqmaydi. Ko'pincha muammo buyruq satri foydalanuvchi kutganidan boshqacha tahlil qilinganida yuz beradi. Masalan, cp report final uchta so'zdan iborat: bitta buyruq va ikkita argument. Agar haqiqiy fayl nomi report final bo'lsa, uni qo'shtirnoqsiz yozish butunlay boshqa ma'noni anglatadi.

Bu qismda buyruq sintaksisini qanday o'qish, Bash argumentlarni dasturlarga qanday uzatishi va boshqarayotgan tizimingizga o'rnatilgan yordam hujjatlaridan qanday foydalanish tushuntiriladi.

Buyruqning tuzilishi

Hujjatlarda buyruqlar ko'pincha quyidagi shaklda ko'rsatiladi:

command [OPTION]... [ARGUMENT]...

Masalan:

ls -lh /var/log

Bu buyruq quyidagi qismlardan iborat:

  • ls — buyruq nomi.
  • -l va -h — buyruq qanday ishlashini o'zgartiradigan parametrlar.
  • /var/log — argument. Bu misolda ro'yxati chiqariladigan katalog.

Hujjatlarda kvadrat qavslar biror qism ixtiyoriy ekanini bildiradi. ... belgisi esa shu qism bir necha marta takrorlanishi mumkinligini anglatadi. Buyruqni yozayotganda kvadrat qavslar yoki uch nuqtani kiritmaysiz.

Har bir dastur o'z parametr va argumentlarini qanday talqin qilishni o'zi belgilaydi. Unix tizimlarida umumiy qoidalar mavjud, lekin ular barcha buyruqlar uchun bir xil emas. Masalan, ls -h buyrug'ida -h “inson uchun o'qish qulay bo'lgan format” ma'nosini beradi. Boshqa buyruqda esa -h boshqa ma'noni anglatishi yoki umuman ishlamasligi mumkin.

Qisqa parametrlar, uzun parametrlar va qiymatlar

GNU buyruqlari ko'pincha qisqa va uzun parametrlarni qo'llab-quvvatlaydi:

ls -l -h /var/log
ls -lh /var/log
ls --human-readable -l /var/log

ls buyrug'ida birinchi va ikkinchi buyruqlar bir xil natija beradi. Sababi, alohida qiymat talab qilmaydigan qisqa parametrlarni bitta guruhga birlashtirish mumkin. Lekin notanish buyruqda parametrlarni tekshirmasdan guruhlamang.

Qiymat qabul qiladigan uzun parametrlar ko'pincha quyidagi shakllardan birida yoziladi:

ls --color=auto
sort --key=2 users.txt
sort --key 2 users.txt

GNU sort buyrug'ida --key=2 va --key 2 shakllarining ikkalasi ham ishlaydi. Boshqa dastur esa faqat bittasini qabul qilishi mumkin. To'g'ri yozilish shaklini shu buyruqning hujjatidan tekshirish kerak.

“Invalid option” xatosini o'qish

Dastur tanimaydigan parametr kiritilsa, buyruq jim turib ishlamay qolmaydi. U aniq xatolik xabarini chiqaradi:

ls -z /var/log
ls: invalid option -- 'z'
Try 'ls --help' for more information.

Bu xabarni ikki qismga ajratib o'qish mumkin.

ls: invalid option -- 'z' qatori xatoni qaysi dastur chiqarganini va aynan qaysi belgi noto'g'ri ekanini ko'rsatadi.

Try 'ls --help' for more information. qatori esa keyingi ma'lumotni qayerdan olish kerakligini aytadi. GNU dasturlari bu xabarni odatda bir xil ko'rinishda chiqaradi. Shu sababli to'g'ri parametrni taxmin qilish o'rniga, ko'rsatilgan yordam buyrug'ini bajarish kerak.

Hech bir faylga tegilmasdan buyruq xato bilan tugaganini tekshiring:

echo "status=$?"
status=2

GNU vositalari foydalanish sintaksisidagi xatolar uchun ko'pincha 2 kodini qaytaradi. Bu ko'plab buyruqlarda mavjud bo'lmagan fayl kabi bajarilish vaqtidagi xatolar uchun qaytariladigan 1 kodidan farq qiladi.

Bu farq skript $? qiymatini tekshirib, buyruqni qayta bajarish yoki bajarmaslikka qaror qilganida muhim bo'ladi. Sintaksis xatosi har bir urinishda yana takrorlanadi. Bajarilish vaqtidagi xato esa asosiy sabab bartaraf etilgach muvaffaqiyatli yakunlanishi mumkin.

Buyruq qatorini avval Bash qayta ishlaydi

Tashqi dastur ishga tushishidan oldin Bash qo'shtirnoqlar, o'zgaruvchilar, wildcard andozalari va qayta yo'naltirishlarni allaqachon tahlil qilib bo'ladi.

Argumentlar chegarasini ko'rish uchun printf buyrug'idan foydalanish qulay:

printf '<%s>\n' one "two words" three

Natija:

<one>
<two words>
<three>

Dastur uchta argument qabul qildi. Qo'shtirnoqlar argumentning bir qismi emas. Ular Bashga two words ichidagi bo'shliqni bitta argument tarkibida saqlash kerakligini bildiradi.

Bir tirnoq va qo'shtirnoqni taqqoslang:

name='server01'
printf '<%s>\n' "$name"
printf '<%s>\n' '$name'
<server01>
<$name>

Qo'shtirnoq o'zgaruvchini qiymatiga almashtirishga ruxsat beradi va natijani bitta argument sifatida saqlaydi. Bir tirnoq esa ichidagi belgilarni aynan yozilgan holicha qoldiradi.

Parametrlarni -- bilan tugatish

Fayl nomi - belgisi bilan boshlanishi mumkin. Ehtiyot bo'linmasa, dastur bunday fayl nomini parametr deb qabul qilishi mumkin.

Sinov katalogidan foydalaning:

mkdir -p ~/lab/syntax
cd ~/lab/syntax
touch -- -draft.txt
ls -l -- -draft.txt

Ko'plab Unix buyruqlarida -- belgisi parametrlarni tahlil qilish tugaganini bildiradi. Bu belgi amalni o'z-o'zidan xavfsiz qilib qo'ymaydi. U faqat fayl nomining parametr bilan adashib ketishining oldini oladi.

Ushbu sinovda faylni o'chirish uchun interaktiv rejimdan foydalaning:

rm -i -- -draft.txt

Warning

rm odatda fayllarni grafik muhitdagi Trash savatiga ko'chirmaydi. O'chirish bilan bog'liq misollarni faqat sinov katalogida bajaring. Avval ls -l -- <path> yordamida nishonni tekshiring va rekursiv o'chirishning ta'sir doirasini to'liq tushunmaguningizcha undan foydalanmang.

Qaysi buyruq bajariladi?

Bash buyruq nomini alias, funksiya, ichki buyruq, kalit so'z yoki tashqi bajariladigan fayl sifatida aniqlashi mumkin.

type -a cd echo ls
command -V ls

Mumkin bo'lgan natija:

cd is a shell builtin
echo is a shell builtin
ls is aliased to `ls --color=auto'
ls is /usr/bin/ls

Shell xatti-harakatini tekshirayotganda type buyrug'idan foydalaning. Ko'plab tizimlarda which faqat PATH ichidagi bajariladigan fayllarni qidiradi. Shu sababli u aliaslar, funksiyalar va ichki buyruqlarni ko'rsatmasligi mumkin.

Buyruqlar qidiriladigan yo'llarni ko'rish uchun:

echo "$PATH"

PATH: belgisi bilan ajratilgan kataloglar ro'yxati. Bash bu kataloglarni chapdan o'ngga qarab tekshiradi.

Agar joriy katalog PATH ichida bo'lmasa, shu katalogdagi ishonchli bajariladigan faylni aniq nisbiy yo'l bilan ishga tushiring:

./script.sh

Serverda . belgisini PATH ro'yxatining boshiga qo'ymang. Joriy katalogdagi zararli dastur oddiy tizim buyrug'i nomini egallab olishi mumkin.

Chiqish holati va shartli bajarish

Inson o'qiy oladigan natija buyruq mashina nuqtayi nazaridan muvaffaqiyatli yakunlanganini har doim ham anglatmaydi. Buyruqlar chiqish holatini qaytaradi.

ls -ld /etc
echo "status=$?"

ls -ld /does-not-exist
echo "status=$?"

Odatdagi natija:

drwxr-xr-x 160 root root 12288 Jul 29 12:00 /etc
status=0
ls: cannot access '/does-not-exist': No such file or directory
status=2

Umumiy qoida bo'yicha 0 muvaffaqiyatni, noldan boshqa qiymat esa boshqa holatni bildiradi. Aniq kodlarning ma'nosini har bir buyruqning o'zi belgilaydi.

Keyingi amal oldingi buyruqning natijasiga bog'liq bo'lsa, && va || operatorlaridan foydalaning:

test -r /etc/hosts && echo "hosts file is readable"
test -r /root/secret || echo "not readable as this user"

Ikkinchi misol faqat o'qish huquqini tekshiradi. Nima uchun yuqori huquq kerakligini va siyosat bunga ruxsat berishini bilmasdan turib sudo qo'shmang.

Yordam qatlamlari

Ishonchli administrator avval boshqarayotgan tizimning o'ziga o'rnatilgan hujjatlarni tekshiradi. Chunki ular aynan shu tizimda o'rnatilgan dastur versiyasiga mos keladi.

Shell ichki buyruqlari uchun yordam

Bashning ichki buyruqlari bo'yicha yordam olish uchun Bash yordamidan foydalaniladi:

help cd
help export
help type

Bu muhim, chunki man cd Bashning cd buyrug'ini to'g'ridan-to'g'ri tushuntirmasligi mumkin. Bundan tashqari, hujjatlashtiriladigan alohida tashqi cd dasturi umuman bo'lmasligi mumkin.

Tez sintaksis uchun --help

GNU dasturlari odatda quyidagilarni qo'llab-quvvatlaydi:

cp --help
ls --help
tail --help

Avval Usage: qatorini o'qing. Keyin kerakli parametrni qidiring. --help natijasi qisqa ma'lumot berishini unutmang. U murakkab yoki noodatiy holatlarni tushunish uchun har doim ham yetarli bo'lmaydi.

Qo'llanma sahifalari

Mahalliy ma'lumotnoma hujjatlari uchun man buyrug'idan foydalaning:

man ls
man 5 passwd
man 1 passwd

man bo'limlari muhim ahamiyatga ega. man 1 passwd foydalanuvchi bajaradigan passwd buyrug'ini tushuntiradi. man 5 passwd esa /etc/passwd faylining formatini tushuntiradi.

Qo'llanma ichida quyidagi tugmalardan foydalaniladi:

  • Space — keyingi sahifaga o'tish.
  • Enter — bir qator pastga tushish.
  • /pattern — oldinga qarab qidirish.
  • n — keyingi mos natijaga o'tish.
  • N — oldingi mos natijaga qaytish.
  • g — hujjat boshiga o'tish.
  • G — hujjat oxiriga o'tish.
  • q — chiqish.

Qo'llanma sahifalaridan qidirish

Buyruq nomini bilmasangiz:

apropos "copy files"
man -k "copy files"

Bu buyruqlar qo'llanma sahifalari ma'lumotlar bazasidan qidiradi.

Minimal tizimda ma'lumotlar bazasi mavjud bo'lmasligi yoki eskirgan bo'lishi mumkin. Natijalar to'liq ko'rinmasa, administrator mandb buyrug'ini bajarishi kerak bo'lishi mumkin. Bu odatda sudo talab qiladi, chunki buyruq tizim miqyosidagi indekslarni yangilaydi. Bu o'quv laboratoriyasi buyrug'i emas, balki tizimga xizmat ko'rsatish amali hisoblanadi.

Info qo'llanmalari

GNU loyihalari ko'pincha batafsilroq info hujjatlarini taqdim etadi:

info coreutils 'ls invocation'

Minimal serverlarda barcha Info qo'llanmalari o'rnatilmagan bo'lishi mumkin. info mavjud bo'lmasa, man va --help dan foydalaning.

Keng tarqalgan xatolar

  • Hujjatlarda ko'rsatilgan [OPTION] kabi yozuvlarni aynan buyruqqa kiritish.
  • Har bir buyruqda -h yordam parametrini bildiradi deb hisoblash.
  • Qo'shtirnoqlar Bash tomonidan olib tashlanishini va dasturga belgi sifatida uzatilmasligini unutish.
  • Buyruq manbasini tekshirish uchun faqat which buyrug'iga tayanish.
  • $? qiymatini juda kech tekshirish, ya'ni undan oldin boshqa buyruq bajarib yuborish.
  • Notanish buyruq qayerga va nima yozishini o'qimasdan turib uni sudo bilan ishga tushirish.

Mashqlar

  1. cd, pwd, echo, ls va printf buyruqlarini type -a yordamida tekshiring. Har bir natijani tushuntiring.
  2. ~/lab/syntax katalogida two words.txt nomli fayl yarating. Keyin printf '<%s>\n' yordamida nima uchun qo'shtirnoq kerakligini isbotlang.
  3. man 1 passwd va man 5 passwd buyruqlarini bajaring. Ularning farqini bitta gap bilan yozing.
  4. apropos archive buyrug'idan foydalaning. Natijadan bitta buyruq tanlab, uni --help va man orqali o'rganing.

Sizga yangi buyruq berilganda qaysi dastur bajarilishini, u qanday argumentlar qabul qilishini va uning ishonchli mahalliy hujjatini qayerdan topishni aniqlay olishingiz kerak.

Manbalar