Bash chiqishini qayta yo'naltirish. Bir nechta chiqishlarga yo'naltirish. fayldan standart kiritish

Kirish-chiqarish moslamasini qayta ko'rib chiqishda bir dastur o'z chiqishini boshqa dasturning kirishiga yo'naltirishi yoki uni kirish sifatida ishlatib, boshqa dasturning chiqishini ushlab turishi mumkin. Shunday qilib, minimal dasturiy ta'minot xarajatlari bilan ma'lumotni jarayondan jarayonga o'tkazish mumkin. Amalda bu shuni anglatadiki, standart kiritish va chiqarish qurilmalaridan foydalanadigan dasturlar uchun operatsion tizim quyidagilarga imkon beradi:

  • dastur xabarlarini ekranga (standart chiqish oqimi) emas, balki fayl yoki printerga chiqarish (chiqishni qayta yo'naltirish);
  • kirish ma'lumotlarini klaviaturadan (standart kirish oqimi) emas, balki oldindan tayyorlangan fayldan (kirishni qayta yo'naltirish) o'qish;
  • bitta dastur tomonidan chiqarilgan xabarlarni boshqa dasturga kirish sifatida o'tkazish (quvurlar yoki buyruqlar tarkibi).

Kimdan buyruq qatori bu imkoniyatlar quyidagicha amalga oshiriladi. Buyruqlar satridan istalgan buyruq orqali chiqarilgan matnli xabarlarni qayta yo'naltirish uchun matn fayli, qurilishdan foydalanishingiz kerak buyruq > fayl nomi. Agar bir vaqtning o'zida chiqish uchun ko'rsatilgan fayl mavjud bo'lsa, u qayta yoziladi (eski tarkib yo'qoladi), agar u mavjud bo'lmasa, u yaratiladi. Bundan tashqari, faylni qayta yarata olmaysiz, lekin buyruq orqali ma'lumotni mavjud faylning oxiriga qo'shishingiz mumkin. Buning uchun chiqishni qayta yo'naltirish buyrug'i quyidagicha ko'rsatilishi kerak: buyrug'i >> fayl nomi. Belgi bilan< можно прочитать входные данные для заданной команды не с клавиатуры, а из определенного (заранее подготовленного) файла: команда < имя_файла

Buyruqlar satrida kiritish/chiqarish yo'naltirishga misollar

I/U qayta yoʻnaltirishga baʼzi misollar keltiramiz.

1. Natijalarni chiqarish ping buyruqlari faylga ping ya.ru > ping.txt

2. Yordam matnini qo'shish copy.txt fayli uchun XCOPY buyruqlari: XCOPY /? >> copy.txt

Agar kerak bo'lsa, xato xabarlari (standart xatolik) 2> fayl nomini qurish buyrug'i yordamida matnli faylga yo'naltirilishi mumkin.Bu holda ekranda standart chiqish hosil bo'ladi. Xuddi shu faylga axborot xabarlari va xato xabarlarini chiqarish ham mumkin. Bu quyidagicha amalga oshiriladi: buyruq > fayl nomi 2>&1

Misol uchun, quyidagi buyruq standart chiqish va standart xatoni copy.txt fayliga yo'naltiradi: XCOPY A:\1.txt C:> copy.txt 2>&1

I/U ning uchta yo'nalishi ajratilgan - standart kirish, chiqish va xato oqimi ( stdin, stdout, stderr ). Odatiy bo'lib, barcha uchta ip terminal bilan bog'langan (bog'langan). Bunday holda, dastur o'zining barcha xabarlarini, shu jumladan xatolar haqidagi xabarlarni terminalda ko'rsatadi. Shell ushbu standart oqimlarni qayta yoʻnaltirish, kiritish/chiqarish va oqimlarni birlashtirishni sozlash imkonini beradi.

I/U oqimlarini qayta yo'naltirish.

>fayl Standart chiqishni faylga yo'naltirish fayl

>> fayl -Standart chiqishni faylga yo'naltirish fayl faylning oxiriga qo'shiladi.

- fayldan standart ma'lumotlarni olish fayl.

prog1 | prog2 -Prog1 dasturining chiqish oqimini dasturning kirish oqimiga o'tkazish prog2.

n>fayl fayl.

n>>fayl -Deskriptor n bilan standart oqimni faylga yo'naltirish fayl faylning oxiriga qo'shiladi.

n>&m -Oqimlarni deskriptorlar bilan birlashtirish n va m .

$ prog1 >/dev/null 2>&1

/dev/null unga yo'naltirilgan oqimni yo'q qiladigan psevdo-qurilmadir.

Bir dasturning chiqish oqimini boshqasining kirish oqimiga o'tkazish odatiy holdir. Masalan:

$ gzip -d archive.tar.gz | tar -xf

Bu erda fayl arxivdan chiqariladi. archive.tar.gz , ikkita arxivchi bilan to'ldirilgan. Yordamchi dasturdan chiqish oqimi gzip yordamchi dasturga kirish oqimiga o'tdi smola . Xuddi shunday, xuddi shu operatsiya boshqa yo'l bilan ham amalga oshirilishi mumkin:

$ gzip -d archive.tar.gz

$ tar -xf arxiv.tar

Chunki til Bourne Shell protsessual dasturlash tili bo'lib, u boshqa shunga o'xshash tillar kabi buyruqlarni bajarish ketma-ketligini boshqarish imkonini beruvchi operatorlarga ega. Kerakli operator muayyan shartni tekshirishdan iborat bo'lib, uning bajarilishiga qarab dasturning keyingi yo'nalishi aniqlanadi. Bu operator buyruqdir sinov. Bu buyruq ba'zi holatlarni tekshiradi. Jamoa sinov Ikkita qo'ng'iroq opsiyasi mavjud:

sinov holati

[holat]

Shuni ta'kidlash kerakki, qavs va shart o'rtasida bo'shliqlar bo'lishi kerak, aks holda Shell “[” ni buyruq sifatida taniy olmaydi sinov . Muvaffaqiyatli tugallangandan keyin sinov qaytadi "0" .

Fayllarni tekshirish shartlari:

-f fayli Fayl "fayl" oddiy fayldir.

-d fayl Fayl " fayl" katalog hisoblanadi.
-c fayli Fayl "fayl" maxsus fayl hisoblanadi.
-r fayl Fayl "fayl" o'qish ruxsatiga ega.

-w fayli Fayl "fayl" yozish huquqiga ega.

-x fayli Fayl "fayl" bajarishga ruxsati bor.

-s fayli Fayl "fayl" bo'sh emas.

Qatorni tekshirish shartlari:

string1=string2 Satrlar string 1 va string 2 mos kelish.

string1!=string2 Satrlar string 1 va string 2 mos kelmaydi.

-n string1 Chiziq string 1 mavjud.

-z string1 Chiziq string 1 mavjud emas.

Butun sonlar bilan amal qilish shartlari:

x -ekv y x y ga teng

x -ne y x y ga teng emas

x -gt y x y dan katta

x-gey x y dan katta yoki teng

x -lt y x y dan kichik

x-ley x y dan kichik yoki teng

Bu holda buyruq sinov satrlarga butun sonlar sifatida qaraydi. Null qiymat ham bo'sh satrga mos keladi.

Kontekstdagi mantiqiy operatsiyalar sinov

! (yo'q) Mantiqiy "YO'Q"

-o (yoki) Mantiqiy "OR"

-a (va) Mantiq "VA"

Shartli operator "agar"

Shartli if iborasidan foydalanishning umumiy shakli quyidagicha:

agar<условие>

keyin<список команд>

[elif<условие>

keyin<список> ]

Kvadrat qavs ichiga olingan ifodalar ixtiyoriy. Bular. shartli operatorning eng keng tarqalgan "tug'ralgan" modifikatsiyasini tasavvur qilishimiz mumkin:

agar<условие>

keyin<список команд>

Bunday holda, agar <условие> yakunlandi (tugatish kodi 0), keyin bajarildi <список команд>. Aks holda <список команд> o'tkazib yuborilgan.

Bayonotni tanlang hol

Umuman olganda, operator sintaksisi hol quyida bayon qilinganidek:

hol<строка>ichida

Shablon 1)

........

Shablon 2)

........

........

Ma'nosi <строка> tartibda, naqshlar bilan solishtiriladi. Agar moslik topilsa, tegishli bo'limning buyruqlari bajariladi. Shuni ta'kidlash kerakki, shablonlar maskalardan foydalanishga imkon beradi. Agar moslik topilmasa, "*" naqshli bo'limdagi buyruqlar bajariladi (xuddi shunday sukut bo'yicha selektor almashtirish v BILAN ).

Misol uchun, bu erda ishga tushirish skriptining bir qismi BSD UNIX . Bu erda o'zgaruvchilar (inetd_enable va inetd_flags) boshqa fayldan olingan ( rc.conf).

. /etc/rc.conf

case ($inetd_enable) ichida

)

agar [ -x /usr/sbin/inetd ]; keyin

/usr/sbin/inetd $inetd_flags

fi

;;

esac

Ro'yxatga olish tsikli bayonoti uchun

Operator sintaksisi uchun

uchun<имя>

<список команд>

Kvadrat qavs ichiga olingan fragment etishmayotgan bo'lishi mumkin. Operator uchun qiymatlar ro‘yxatida qancha so‘z bor bo‘lsa, tsiklning shuncha marta bajarilishini ta’minlaydi. Shu bilan birga, o'zgaruvchan <имя> ro'yxatdagi so'zlarning qiymatlarini ketma-ketlik bilan oladi. Ro'yxatning o'zi boshqa buyruqlar chiqishidan tuzilishi mumkin. Agar ro'yxat etishmayotgan bo'lsa, unda <имя> pozitsion skript parametrlari sifatida qabul qilingan qiymatlarni qabul qiladi.

Haqiqiy shart bilan sikl bayonoti esa

Operator sintaksisi esa odatda quyidagi tuzilishga ega:

esa<условие>

<список команд>

Operator esa parametr qiymatlari ro'yxati oldindan ma'lum bo'lmaganda afzallik beriladi. Buyruqlar ro'yxati shart rost bo'lsa, tsiklda bajariladi. Birinchi marta tsiklga kirganingizda, shart to'g'ri bo'lishi kerak.

Noto'g'ri shartli sikl bayonoti qadar

Operator sintaksisi qadar odatda quyidagi tuzilishga ega:

qadar<условие>

<список команд>

Shart noto'g'ri bo'lsa, buyruqlar ro'yxati tsiklda bajariladi. Birinchi marta tsiklga kirganingizda, shart to'g'ri bo'lmasligi kerak. Shuni ta'kidlash kerakki, pastadir holati har biridan keyin noto'g'riligi tekshiriladi, shu jumladan. va tsikldagi birinchi bajarilgan buyruq.

Asosiy buyruqlar OS UNIX fayllar bilan ishlash uchun

1. Jamoa pwd.

Sintaksis: pwd .

Tavsif: Buyruq ishlaydigan qobiq uchun joriy katalog nomini ko'rsatadi.

1-mashq.

Uy katalogingizni aniqlash uchun pwd buyrug'idan foydalaning.

Hisobotda buyruq va uning ish natijasini aks ettiring.

2. Jamoa kishi.

Sintaksis: kishi nomi.

Ism - bizni qiziqtirgan buyruq, yordamchi dastur, tizim chaqiruvi, kutubxona funktsiyasi, fayl nomi.

Tavsif : UNIX qoʻllanma - hidoyat operatsion tizim UNIX. U yerdan ma'lumotni yordamchi dastur yordamida onlayn tarzda olish mumkin kishi .

Vazifa 2.

pwd buyrug'i haqidagi ma'lumotlarni ko'rish uchun man yordam dasturidan foydalaning.

Hisobotga jamoa haqida qisqacha ma'lumot yozing (rus tilida).

3. Jamoa cd.

Sintaksis: cd katalog_nomi.

Tavsif: Bu joriy katalogni o'zgartirish buyrug'i. DirectoryName - joriy qilmoqchi bo'lgan katalogning to'liq yoki nisbiy nomi.

cd joriy variantlarsiz sizning uy katalogingizni yaratadi.

Vazifa 3.

Joriy katalogni bir darajaga ko'taring. Uni tekshiring, so'ngra uy katalogingizga qayting. Katalog o'zgarishini tekshiring.

Hisobotda bajarilgan buyruqlarning bajarilishini yozib oling.

4. Jamoa ls.

Sintaksis: ls katalog_nomi

Tavsif: ko'rsatilgan katalog tarkibini ko'rish buyrug'i.

ls parametrlarsiz joriy katalogdagi fayllar ro'yxatini chop etadi.

Olingan ro'yxatga nomlari "belgisi" bilan boshlanadigan fayllar kirmaydi. . ” - har xil tomonidan yaratilgan fayllar tizim dasturlari sizning maqsadlaringiz uchun. Qarang to'liq ro'yxat fayllar buyruqda ko'rsatilishi mumkin ls "-a" tugmasi

bular. ls - katalog_nomi

Fayl ruxsatnomalari

Har bir fayl ichida OS UNIX fayl uchun "ruxsat" deb nomlangan 12 bitli so'z bilan bog'langan.

Ushbu so'zning pastki 9 bitlari uchta bitdan iborat uchta guruhga birlashtirilgan; har bir guruh fayl egasi, uning guruhi va boshqa barcha foydalanuvchilar uchun kirish huquqlarini belgilaydi. Har bir guruhdagi uchta bit faylni o'qish, so'rash va undan foydalanish huquqi uchun javobgardir.

Muayyan faylga kirish huquqlarini bilish uchun siz buyruqdan foydalanishingiz mumkin

, Misol uchun:

> ls -l /bin/kat

Qator boshidagi belgilar guruhi -rwxr-xr-x fayl turini ko'rsatadi (birinchi belgi; minus oddiy fayl, harf bilan ishlayotganimizni bildiradi d katalog va boshqalarni bildiradi) va tegishli ravishda egasi uchun ruxsatlar (bu holda rwx , ya'ni. o'qish, yozish va bajarish), guruh va boshqalar (bu holda r-x , ya'ni. yozish uchun ruxsat yo'q). Shunday qilib, fayl /bin/kat o'qish va bajarish uchun har qanday foydalanuvchi uchun mavjud, lekin faqat foydalanuvchi uni o'zgartirishi mumkin ildiz (ya'ni administrator).

Faylga kirish huquqi so'zini sakkizlik raqam (3 ta raqam - sakkizlik raqam), uch xonali (egasi, guruh, boshqa foydalanuvchilar) sifatida yozishingiz mumkin, bu uch xonali sakkizlik sondagi har bir belgi huquqlar yig'indisi sifatida shakllanadi: 4 - o'qish huquqlari, 2 - yozish huquqi, 1 - foydalanish uchun (ikkilik triadadan): (111) 2 =2 0 +2 1 +2 2 =(1+2+4) 10 .

Masalan, 7 = 1 + 2 + 4 Þ o'ng rwx

4 2 1

6 = 0 + 2+ 4 Þ huquqlar rw- -

4 2 0

Tashkilot huquqlarining uch xonali sonida: 744 barcha huquqlar egasi uchun, guruh uchun faqat o'qish uchun, boshqa foydalanuvchilar uchun faqat o'qish uchun belgilangan.

Fayl ruxsatlaridan foydalanish uchun buyruqdan foydalaning chmod , bu sizga sakkizlik raqam sifatida yangi ruxsatlarni o'rnatish imkonini beradi, masalan:

$ chmod 744 filel.c.

Vazifa 4.

a) olish to'liq ma'lumot Ls buyrug'i uchun man yordam dasturidan foydalaning. Buyruqning chiqishini ba'zi matnli faylga yo'naltiring.

b) Joriy katalogning to'liq mazmunini ko'ring va bu chiqishni matnli faylga ham yo'naltiring.

c) buyruq bilan ls-l<имя_файла> 4b-bosqichda ishlagan matn fayliga kirish huquqlari haqidagi ma'lumotlarni chiqaring, so'ngra ushbu ma'lumotni xuddi shu matn fayliga yo'naltiring. Xulosangizni tushuntiring.

5. Jamoa mushuk.

I/U qayta yo'naltirish.

Kichkina matnli faylning mazmunini ekranda ko'rish uchun siz quyidagi buyruqdan foydalanishingiz mumkin:

mushuk Fayl nomi

Diqqat! Katalog va ikkilik fayllar tarkibini shu tarzda ko'rishga urinmang.

Katta sinov fayli jamoa tomonidan qulay tarzda ko'riladi Ko'proq (foydalanish tavsifini quyidagi sahifada topishingiz mumkin UNIX qoʻllanma ). Nima uchun buyruq bu erda noqulay mushuk ?

Bir jamoada mushuk bir nechta fayl nomlari berilishi mumkin:

cat file1 fayl 2 ... fayl N

ekranda qatordagi barcha fayllarning mazmuni ko'rsatiladi.

Chiqishni ba'zi faylga yo'naltirishingiz mumkin:

cat fayli 1 fayl 2 > natija_fayl

Chiqarishni standart chiqishdan (ekran) faylga yo'naltirish barcha buyruqlar uchun standart hisoblanadi. Siz standart kiritishni (klaviaturadan) qayta yo'naltirishingiz mumkin, masalan, "" tugmasidan foydalanib, dastur uchun ma'lumotlarni fayldan olishingiz mumkin.<”.

mushuk > new_file - klaviaturadan kiritgan tarkibingiz bilan yangi matn faylini yaratadi.

Ma'lumotlarni kiritish jarayonini bekor qiling -

Vazifa 5.

Cat bilan yangi matn fayli yarating va uning mazmunini ko'ring. Chiqishni standart oqimdan boshqa faylga yo'naltiring, uning nomini klaviaturadan kiriting va operatsiya to'g'ri ekanligiga ishonch hosil qiling.

6. Fayllar bilan ishlashning eng oddiy buyruqlari : cp, rm, mkdir, mv

Yangi katalog yaratish uchun quyidagi buyruqdan foydalaning:

mkdir katalog_nomi

Bitta faylning mazmunini boshqasiga nusxalash uchun quyidagi buyruqdan foydalaning:

cp manba_fayl maqsad_fayl.

Jamoa

cp fayl 1 fayl 2 .... fayl N maqsadli katalog

fayl yoki fayllarni allaqachon mavjud bo'lgan destination_directory nomli katalogga o'z nomlari bilan nusxalash uchun ishlatiladi. Ko'chirilgan fayllarning nomlari o'rniga siz ularning shablonlaridan foydalanishingiz mumkin. Naqshlar metabelgilar yordamida belgilanadi:

* - barcha belgilar qatoriga, shu jumladan bo'shga ham mos keladi.

Barcha bitta harflar

[ ...] - qavs ichiga olingan har qanday belgiga mos keladi. Minus bilan ajratilgan bir juft belgilar bir qator belgilarni belgilaydi.

Jamoa

cp-r source_dir destination_dir

bitta katalogni (source_dir) yangi katalogga (destination_dir) rekursiv nusxalash uchun xizmat qiladi.

Nusxa ko'chirish buyruqlaridagi nomlar o'rniga ularning shablonlaridan foydalanish mumkin.

Jamoa

rm fayl 1 fayl 2 .... fayl N

joriy katalogdan 1 yoki undan ortiq oddiy fayllarni olib tashlash imkonini beradi.

Shablonlar nomlar o'rniga ishlatilishi mumkin. Agar siz bir yoki bir nechta kataloglarni tarkiblari bilan birga o'chirmoqchi bo'lsangiz (rekursiv o'chirish) buyruqda rm kalitdan foydalaning -r

Rm-r dir 1 dir 2

Nomini o'zgartirish buyrug'i:

mv manba_nomi maqsad_nomi

source_name nomli fayl nomi destination_name nomli faylga o'zgartiriladi. Bunday holda, buyruqni bajarishdan oldin, destination_name nomli fayl mavjud bo'lmasligi kerak.

Vazifa 6.

Yaratmoq yangi katalog uyingiz ichida. Ikki qatorli kontent bilan kichik sinov faylini tashkil qiling:

“Men UNIX operatsion tizimida ishlash bo'yicha o'qiyman

Skriptni tashkil qiling.

Ushbu faylning mazmunini bir xil nomli, lekin /home katalogidagi boshqa faylga nusxalang. Agar nusxa muvaffaqiyatli bo'lsa, dastlab yaratilgan faylni katalogingizdan o'chiring. Ishlatilgan kataloglar va fayllar tarkibini tekshiring.

Vazifa 7.

biri). Eng oddiy UNIX OS buyruqlari bilan interaktiv ishlashni o'zlashtirganingizdan so'ng, Kwriter muharriridan foydalanib, tegishli skript bilan skript yarating. ketma-ket bajarilishi:

3-topshiriq,

Vazifa 4B, 4C,

5-topshiriq,

Vazifa 6.

6-topshiriqda, dastur displey ekranidagi chiqishi bilan faylni muvaffaqiyatli nusxa ko'chirganligini tekshirishni unutmang. matnli xabarlar va tegishli kataloglarning mazmuni.

Buning uchun zarur ommaviy ish fayli$ echo - n "so'rov matni" buyrug'i yordamida klaviaturadan ma'lumotlarni kiritish uchun so'rovlarning vakolatli chiqarilishi tashkil etildi.

2). Skriptni Myscript1 nomi bilan saqlang, uni buyruq bilan ishga tushiring

sh Myscript1

so'ralgan ma'lumotlarni kiriting va natijalarni tekshiring.

3). Tugallangan laboratoriya bo'yicha hisobot tayyorlang, u interaktiv rejimda va skript bilan ishingizni, shu jumladan skript matnini (sharhlar bilan) va ekranda va fayllarda olingan natijalarni aks ettirishi kerak.

Tizim qo'ng'iroqlari getuid va getpid

Dasturni ishga tushirgan foydalanuvchining identifikatorini bilib oling - UID va u tegishli bo'lgan guruhning identifikatori ,-GID tizim qo'ng'iroqlari bilan amalga oshirilishi mumkin getuid() va getpid() ularni ushbu dastur ichida qo'llash orqali.

Tizim chaqiruvi prototiplari:

#o'z ichiga oladi

#o'z ichiga oladi

uid_t getuid(void);

gid_t getgid(void);

Vazifa 8.

Dasturni ishga tushiruvchi foydalanuvchining identifikatori va foydalanuvchining guruh identifikatorini chop etadigan dasturni yozing, kompilyatsiya qiling va ishga tushiring.

Natijalar bilan dasturni hisobotga kiriting.

Nazorat savollari

1. In fayl tushunchasi OS UNIX . Uy katalogi nima?

2. Buyruqlarni guruhlash vositalari nimalardan iborat Shell - tarjimon? foydalanishga misollar keltiring.

3. I/U qanday yo'naltiriladi?

4. Buyruqlar quvuri nima? misol keltiring.

5. Qanday degani Shell ustida arifmetik amallarni bajarish Shell -o'zgaruvchan?

6. Fayl nomlarini yaratish qoidalari qanday?

7. Buyruqning bajarilishi natijalarini almashtirish qanday amalga oshiriladi?

8. Satrni qanday izohlash cmd1&cmd2& ?

9. Satrni qanday izohlash cmd1 && cmd2& ?

10. Satrni qanday izohlash cmd1 || cmd2 & ?

11. kabi UNIX belgilangan fayl ruxsatnomalari? Qaysi jamoa ularni kuzatishi mumkin maxsus fayl?

12. Dasturni ishga tushirgan foydalanuvchining identifikatori va uning guruhining identifikatori qanday aniqlanadi?

Laboratoriya ishi № 3.

Operatsion tizimdagi jarayonlar UNIX.

Ishning maqsadi

Tildagi dasturlarda qo'llaniladigan tizim chaqiruvlari yordamida jarayonlarni qanday yaratishni o'rganing va jarayonlarning foydalanuvchi kontekstini qanday o'zgartirishni o'rganing BILAN, v OS UNIX.

1. dagi jarayonlarni tashkil qilishni o'rganish UNIX : jarayon tushunchasi, jarayon konteksti, jarayonning hayot aylanishi, jarayonni identifikatsiya qilish, ierarxik tuzilma jarayonlar. ga yozing BILAN va 1-topshiriqga muvofiq dasturni disk raskadrovka qiling.

2. Jarayonni yaratish bilan tanishing UNIX , jarayonni yakunlashni tashkil etish bilan. Dasturni yozish va disk raskadrovka qilish (til BILAN ) 2-topshiriqga muvofiq, uni hisobotga kiriting.

3. Funktsiya parametrlarini ko'rib chiqing asosiy() tilda BILAN , Atrof-muhit o'zgaruvchilari va buyruq qatori argumentlari. Tilda dastur yozing BILAN 3-topshiriqga muvofiq, uni disk raskadrovka qiling va natijalar bilan birga hisobotga kiriting.

4. Tizim chaqiruvini tashkil qilish funksiyalari turkumini o‘rganing exec().

5. Tilda dastur yozing BILAN o'qituvchi tomonidan berilgan 4-topshiriq versiyasiga muvofiq, dasturni disk raskadrovka qiling va natijalarni o'qituvchiga ko'rsating. Natijalar bilan dasturni hisobotga qo'shing.

6. Nazorat savollariga javob berib o`qituvchi ishini himoya qilish.

1403

Unix da "2>&1", ">/dev/null" yoki chiqish oqimlarini qayta yo'naltirish (bash/sh)

Sizning reytingingiz: durdona ajoyib juda yaxshi yaxshi yaxshi o'qimadim chidab bo'lmas o'rtacha yomon juda yomon o'qimang

chiqish oqimlari

Skript xabarlari aniq belgilangan oqimlarga chiqariladi - chiqish oqimlari. Shunday qilib, biz nima orqali chiqdik

echo "Salom dunyo!"

U nafaqat ekranda ko'rsatiladi, balki tizim nuqtai nazaridan, xususan - sh va bash buyruqlar tarjimonlari - ma'lum bir chiqish oqimi orqali chiqariladi. Echo bo'lsa, ekran bog'langan 1-sonli oqim (stdout).

Ba'zi dasturlar va skriptlar boshqa chiqish oqimidan ham foydalanadi - 2 raqami (stderr). U erda ular xato xabarlarini ko'rsatadilar. Bu oqimlar va marshrutlardan muntazam ma'lumot va xato xabarlarini alohida olish va ularni alohida qayta ishlash imkonini beradi.

Misol uchun, siz chiqishni bloklashingiz mumkin axborot xabarlari faqat xato xabarlarini qoldiradi. Yoki xato xabarlarini yuboring alohida fayl ro'yxatga olish uchun.

">bir nechta fayl" nima

Unix-dagi bunday yozuv (bash va sh tarjimonlarida) chiqish oqimlarining qayta yo'naltirilishini bildiradi.

Quyidagi misolda biz ls buyrug'ining barcha ma'lumotli (normal) xabarlarini myfile.txt fayliga yo'naltiramiz va shu bilan ushbu fayldagi ls ning oddiy ro'yxatini olamiz:

$ ls > myfile.txt


Bunday holda, Enter tugmasini bosgandan so'ng, siz ekranda hech narsani ko'rmaysiz, lekin myfile.txt fayli ekranda ko'rsatilishi kerak bo'lgan barcha narsalarni o'z ichiga oladi.

Biroq, ataylab noto'g'ri operatsiya qilaylik:

$ ls /masdfasdf > myfile.txt


Va nima bo'ladi? Chunki fayl tizimining ildizida masdfasdf katalogi mavjud emas (sizda shunday deb o'ylaymanmi?), keyin ls buyrug'i xatolik hosil qiladi. Biroq, u bu xatoni odatdagi stdout (1) oqimi orqali emas, balki stderr (2) xato oqimi orqali chiqaradi. Va qayta yo'naltirish faqat stdout uchun o'rnatiladi ("> myfile.txt").

Chunki biz stderr(2) oqimini hech qayerga yoʻnaltirmadik – xato xabari ekranda paydo boʻladi va myfile.txt da koʻrinmaydi.

Endi ls buyrug'ini bajaramiz, shunday qilib axborot ma'lumotlari myfile.txt fayliga, xato xabarlari esa myfile.err fayliga yoziladi, shu bilan birga bajarish paytida ekranda hech narsa paydo bo'lmaydi:

$ ls >mening faylim.txt 2>mening faylim.err


Bu erda biz birinchi marta qayta yo'naltirish sifatida oqim raqamini ko'rsatamiz. "2>myfile.err" yozuvi 2-sonli oqim (stderr) myfile.err fayliga yo'naltirilishi kerakligini bildiradi.

Albatta, biz ikkala oqimni bitta faylga yoki bitta qurilmaga yuborishimiz mumkin.

2>&1

Ko'pincha skriptlarda siz bunday yozuvni topishingiz mumkin. Buning ma'nosi: "2-raqamli oqim 1-raqamli oqimga yo'naltirish" yoki "Stderr oqimi - stdout orqali marshrut". Bular. biz barcha xato xabarlarini oqim orqali jo'natamiz, ular orqali oddiy, xato bo'lmagan xabarlar odatda chop etiladi.

$ ls /asfasdf 2>&1


Bu erda barcha xabarlar myfile.txt ga yo'naltiriladigan yana bir misol:

$ ls /asfasdf >myfile.txt 2>&1


Bunday holda, xatolar haqida ham, oddiy xabarlar ham myfile.txt-ga yoziladi, chunki biz birinchi navbatda stdout oqimini faylga yo'naltirdik va keyin xatolar stdout-ga - mos ravishda myfile.txt fayliga o'tkazilishi kerakligini ko'rsatdik.

/dev/null

Biroq, ba'zida biz barcha xabarlarni saqlamasdan yashirishimiz kerak. Bular. faqat chiqishni blokirovka qiling. Buning uchun u xizmat qiladi virtual qurilma/dev/null. Quyidagi misolda biz ls buyrug'ining barcha normal chiqishini /dev/null ga yo'naltiramiz:

$ ls > /dev/null


Ekranda xato xabarlaridan tashqari hech narsa ko'rsatilmaydi. Va quyidagi misolda - va xato xabarlari bloklanadi:

$ ls > /dev/null 2>&1


Bundan tashqari, ushbu yozuv shakl yozuviga teng:

$ ls >/dev/null 2>/dev/null


Va quyidagi misolda biz faqat xato xabarlarini bloklaymiz:

$ ls 2>/dev/null

E'tibor bering, "2>&1" endi bu erda ko'rsatilmaydi, chunki oqim (1) hech qayerga yo'naltirilmaydi va bu holda xato xabarlari ekranga tashlanadi.

Qaysi biri birinchi bo'lib tuxum yoki tovuq?

Bu yerda sizga 2 ta misol keltiraman.

1-misol)

$ ls >/dev/null 2>&1


2-misol)

$ ls 2>&1 >/dev/null


Tashqi ko'rinishida - atamalar joylarini qayta joylashtirishdan yig'indi o'zgarmaydi. Ammo qayta yo'naltirish ko'rsatkichlarining tartibi muhim!

Buning sababi, tarjimonlar chapdan o'ngga yo'naltirishni o'qiydilar va qo'llaydilar. Va endi biz ikkala misolni tahlil qilamiz.

1-misol

1) ">/dev/null" - biz oqim 1ni (stdout) /dev/null ga yo'naltiramiz. Oqimga kiruvchi barcha xabarlar (1) /dev/null manziliga yo'naltiriladi.

2) "2>&1" - 2-oqimni (stderr) 1-oqimga (stdout) yo'naltiramiz. Lekin, chunki 1-mavzu allaqachon /dev/null bilan bog'langan - baribir barcha xabarlar /dev/null bilan tugaydi.

Natija: ekran bo'sh.

2-misol

1) "2>&1" - stderr (2) xato oqimini stdout (1) oqimiga yo'naltiramiz. Shu bilan birga, beri 1-ip sukut bo'yicha terminal bilan bog'langan - biz ekranda xato xabarlarini muvaffaqiyatli ko'ramiz.

2) ">/dev/null" - va bu erda biz 1-oqimni /dev/null ga yo'naltiramiz. Va biz odatiy xabarlarni ko'rmaymiz.

Natija: Biz ekranda xato xabarlarini ko'ramiz, lekin oddiy xabarlarni ko'rmaymiz.

Xulosa: Avval oqimni qayta yo'naltiring, keyin unga murojaat qiling.

Eng qiziqarli va foydali mavzular uchun tizim ma'murlari va terminal bilan qanday ishlashni endigina tushuna boshlagan yangi foydalanuvchilar - bu Linux I/U oqimlarini qayta yo'naltirish. Terminalning bu xususiyati buyruq chiqishini faylga yoki fayl tarkibini buyruq kiritishga, buyruqlarni birlashtirishga va buyruq liniyalarini shakllantirishga yo'naltirish imkonini beradi.

Ushbu maqolada biz Linux I/U qayta yo'naltirish qanday ishlashini, buning uchun qanday operatorlar ishlatilishini va bularning barchasini qayerda qo'llash mumkinligini ko'rib chiqamiz.

Biz bajargan barcha buyruqlar bizga uchta turdagi ma'lumotlarni qaytaradi:

  • Buyruqni bajarish natijasi, odatda foydalanuvchi so'ragan matn ma'lumotlari;
  • Xato xabarlari - buyruqni bajarish jarayoni va yuzaga kelgan kutilmagan holatlar haqida ma'lumot berish;
  • Qaytish kodi - bu dasturning to'g'ri ishlaganligini baholash imkonini beruvchi raqam.

Linuxda hamma narsa fayllar, jumladan kirish oqimlari hisoblanadi. linux chiqishi- fayllar. Har bir tarqatishda dasturlar foydalanishi mumkin bo'lgan uchta asosiy oqim fayli mavjud, ular qobiq bilan belgilanadi va fayl deskriptor raqami bilan aniqlanadi:

  • STDIN yoki 0- bu fayl klaviatura bilan bog'langan va ko'pchilik buyruqlar ishlash uchun o'z ma'lumotlarini shu yerdan oladi;
  • STDOUT yoki 1- bu standart chiqish, bu erda dastur o'z ishining barcha natijalarini yuboradi. U ekran bilan, aniqrog'i, dastur bajariladigan terminal bilan bog'langan;
  • STDERR yoki 2- barcha xato xabarlari ushbu faylga chiqariladi.

I/U qayta yo'naltirish sizga ushbu fayllardan birini o'zingizniki bilan almashtirish imkonini beradi. Masalan, dastur fayldan ma'lumotlarni o'qishi mumkin fayl tizimi, klaviatura emas, siz xatolarni ekranda emas, balki faylga ham chop etishingiz mumkin va hokazo. Bularning barchasi belgilar yordamida amalga oshiriladi. "<" va ">" .

Chiqishni faylga yo'naltirish

Hammasi juda oddiy. Siz > belgisi yordamida chiqishni faylga yoʻnaltirishingiz mumkin. Masalan, yuqoridagi buyruqning natijasini saqlaylik:

top -bn 5 > top.log

-b opsiyasi dasturni interaktiv bo'lmagan rejimda ishlashiga olib keladi ommaviy rejim, va n barcha jarayonlar haqida ma'lumot olish uchun operatsiyani besh marta takrorlaydi. Keling, mushuk bilan nima sodir bo'lishini ko'rib chiqaylik:

Belgi ">" Agar biror narsa mavjud bo'lsa, fayldagi ma'lumotni qayta yozadi. Ma'lumotni oxirigacha qo'shish uchun foydalaning ">>" . Masalan, chiqishni yuqori uchun Linux fayliga yo'naltiring:

top -bn 5 >> top.log

Qayta yo'naltirish uchun standart chiqish fayli identifikatoridan foydalanish hisoblanadi. Lekin siz buni aniq belgilashingiz mumkin. Bu buyruq bir xil natijani beradi:

top -bn 5 1>top.log

Xatolarni faylga yo'naltirish

Xato chiqishini faylga yo'naltirish uchun siz qayta yo'naltirmoqchi bo'lgan fayl deskriptorini aniq ko'rsatishingiz kerak. Xatolar uchun bu raqam 2. Masalan, ildiz katalogiga kirishga urinayotganda, ls xatoga yo'l qo'yadi:

Siz standart xatoni quyidagi kabi faylga yo'naltirishingiz mumkin:

ls -l /root/ 2> ls-error.log
$ cat ls-error.log

Ma'lumotni fayl oxiriga qo'shish uchun xuddi shu belgidan foydalaning:

ls -l /root/ 2>>ls-error.log

Standart chiqish va xatolarni faylga yo'naltirish

Bundan tashqari, barcha chiqishlarni, xatolarni va standart chiqishni bitta faylga yo'naltirishingiz mumkin. Buning uchun ikkita usul mavjud. Birinchisi, eskisi, ikkala identifikatorni ham o'tkazishdir:

ls -l /root/ >ls-error.log 2>&1

Birinchidan, ls buyrug'ining chiqishi birinchi qayta yo'naltirish belgisi yordamida ls-error.log fayliga yuboriladi. Keyinchalik barcha xatolar bir xil faylga yuboriladi. Ikkinchi usul osonroq:

ls -l /root/ &> ls-error.log

Qayta yozish o'rniga append dan ham foydalanishingiz mumkin:

ls -l /root/ &>> ls-error.log

fayldan standart kiritish

Aksariyat dasturlar, xizmatlardan tashqari, standart kiritish orqali o'z ishi uchun ma'lumotlarni oladi. Odatiy bo'lib, standart kiritish klaviaturadan kiritishni kutadi. Ammo siz dasturni bayonot bilan fayldan ma'lumotlarni o'qishga majbur qilishingiz mumkin "<" :

mushuk

Bundan tashqari, chiqishni darhol faylga yo'naltirishingiz mumkin. Misol uchun, keling, ro'yxatni qayta tartiblaymiz:

saralash chiqishni tartiblash

Shunday qilib, biz bitta buyruqda Linuxning kirish chiqishini qayta yo'naltiramiz.

Tunnellardan foydalanish

Siz nafaqat fayllar bilan ishlashingiz, balki bitta buyruqning chiqishini boshqasiga kirish sifatida qayta yo'naltirishingiz mumkin. Bu murakkab operatsiyalar uchun juda foydali. Masalan, yaqinda o'zgartirilgan beshta faylni chop qilaylik:

ls -lt | bosh -n 5

Xargs yordam dasturi bilan siz standart kiritish parametrlar sifatida uzatilishi uchun buyruqlarni birlashtirishingiz mumkin. Masalan, bitta faylni bir nechta jildlarga nusxalaymiz:

echo test/tmp/ | xargs -n 1 cp -v testfile.sh

Bu erda -n 1 parametri bitta buyruq uchun faqat bitta parametr almashtirilishi kerakligini bildiradi va cp dagi -v opsiyasi harakatlar haqida batafsil ma'lumotni chop etish imkonini beradi. Bunday hollarda foydali bo'lgan yana bir buyruq bu tee. U standart kirishdan ma'lumotlarni o'qiydi va standart chiqish yoki fayllarga yozadi. Masalan:

echo "Tee testi" | tee fayli 1

Boshqa buyruqlar bilan birgalikda bularning barchasi bir nechta buyruqlardan murakkab ko'rsatmalar yaratish uchun ishlatilishi mumkin.

xulosalar

Ushbu maqolada biz Linux I/U oqimini qayta yo'naltirish asoslarini ko'rib chiqdik. Endi siz chiqishni Linux fayliga yoki fayldan chiqishni qanday yo'naltirishni bilasiz. Bu juda oddiy va qulay. Agar sizda biron bir savol bo'lsa, sharhlarda so'rang!

Ma'lumotlarni yozish uchun fayl yoki ularni o'sha erdan o'qing, jarayon avval ushbu faylni ochishi kerak (yozish uchun ochilganda, avval uni yaratishingiz kerak bo'lishi mumkin). Bu jarayonni beradi tavsiflovchi Ochiq faylning (deskriptori) - bu jarayon uchun noyob raqam, u barcha yozish operatsiyalarida foydalanadi. Birinchi ochilgan fayl tutqichni oladi, ikkinchisi esa 1 ni oladi va hokazo. Fayl bilan ishlash tugagach, jarayon yopiladi tutqich bo'shatilganda va uni qayta ishlatish mumkin. Agar jarayon fayllarni yopmasdan chiqsa, tizim buni amalga oshiradi. Qat'iy aytganda, faqat deskriptorni ochish operatsiyasi qaysi fayl ishlatilishini belgilaydi. Oddiy fayllar ham, teshik fayllari ham (ko'pincha terminallar) "fayl" sifatida ishlatiladi va kanallar Pipeline..Pipeline da tasvirlangan. Keyingi operatsiyalar - o'qish, yozish va yopish, tavsiflovchi bilan ishlash ma'lumotlar oqimi, lekin bu oqim aynan qayerga olib borishi muhim emas.

Har bir Linux jarayoni ishga tushirilganda qabul qilinadi uch tizim tomonidan unga ochilgan "fayl". Birinchisi (tutqich) ochiq o'qish, bu standart kiritish jarayon. Agar fayl identifikatori ko'rsatilmagan bo'lsa, barcha o'qish operatsiyalari standart kiritish bilan ishlaydi. Ikkinchisi (deskriptor 1) yozish uchun ochiq, bu standart chiqish jarayon. Barcha yozish operatsiyalari, agar ularda fayl deskriptori aniq ko'rsatilmagan bo'lsa, u bilan ishlaydi. Nihoyat, uchinchi ma'lumotlar oqimi (deskriptor 2) diagnostik xabarlarni ko'rsatish uchun mo'ljallangan, u deyiladi standart xato chiqishi. Jarayon boshlanganda ushbu uchta fayl tutqichlari allaqachon ochiq bo'lganligi sababli, jarayonning o'zi tomonidan ochilgan birinchi fayl katta ehtimollik bilan 3-fayl dastagiga ega bo'ladi.

Jarayon tomonidan ochilgan ma'lumotlar oqimining dastagini ishlating. Deskriptorlar dan boshlab raqamlanadi. Yangi ma'lumotlar oqimi ochilganda, uning tutqichiga hozirda foydalanilmayotgan raqamlarning eng kichigi beriladi. Oldindan ochilgan uchta tavsiflovchi: standart kiritish (), standart chiqish(1) va standart xato chiqishi(2) ishga tushirilganda jarayonga beriladi.

Nusxalash mexanizmi muhit, ma'ruzada tasvirlangan, boshqa narsalar qatorida, ota-ona jarayonining barcha ochiq tutqichlarini bolaga nusxalashni nazarda tutadi. Natijada, ota-ona va bolalar jarayonlari bir xil tutqichlar ostida bir xil ma'lumotlar oqimiga ega. Qachon boshlanadi boshlang'ich qobiq, barcha uchta oldindan ochilgan deskriptorlar u bilan bog'langan Terminal(aniqrog'i, mos keladigan tty-tipli teshik fayli bilan): foydalanuvchi klaviaturadan buyruqlar kiritadi va ekrandagi xabarlarni ko'radi. Shuning uchun qobiqdan bajariladigan har qanday buyruq bir xil terminalga chiqariladi va har qanday buyruq bajariladi interaktiv tarzda(fonda emas) - u yerdan kiriting.

standart chiqish

Methodius allaqachon ba'zi dasturlar nafaqat terminalga, balki faylga, masalan, ma'lumotni belgilashda ham chiqishi mumkinligiga duch kelgan. parametrik kalit Fayl nomidan keyin " -o " qo'lda matnni monitorda ko'rsatish o'rniga faylga chiqaradi. Dasturni ishlab chiquvchilar bunday kalitni taqdim qilmasalar ham, Methodius dasturning natijasini monitorda ko'rsatish o'rniga faylda saqlashning boshqa usulini ham biladi: ">" belgisini qo'ying va keyin fayl nomini belgilang. bu. Shunday qilib, Methodius allaqachon cat yordam dasturi yordamida qisqa matnli fayllarni (skriptlarni) yaratgan (qarang: "Fayllar va kataloglarga jarayonlarga kirish" ma'ruzasi).

$ cat > matn fayli Bu fayl namunasi. ^D $ ls -l matn fayli -rw-r--r-- 1 metodik metod 23 15 noyabr 16:06 matn fayli

2-misol. Standart chiqishni faylga yo'naltirish

Albatta, mushuk yordam dasturining imkoniyatlari "\u003e" belgisidan foydalanishdan kengaymadi. Bundan tashqari, ushbu misoldagi mushuk undan olmagan buyruq qobig'i variantlar yo'q: ">" belgisi yo'q, keyingi fayl nomi yo'q. Bu holda, mushuk odatdagidek ishladi, bilmagan (va hatto qiziqmas!) Chiqish qayerda tugashini: monitor ekranida, faylda yoki boshqa joyda. Mushuk natijani yakuniy manzilga yetkazish o'rniga (bu odam yoki fayl bo'ladimi), mushuk barcha ma'lumotlarni quyidagi manzilga yuboradi. standart chiqish(stdout sifatida qisqartirilgan).

Standart chiqishni almashtirish qobiqning vazifasidir. Ushbu misolda qobiq bo'sh faylni yaratadi, uning nomi ">" belgisidan keyin ko'rsatiladi va bu faylning fayl identifikatori 1 raqami bilan mushuk dasturiga o'tkaziladi ( standart chiqish). Bu juda sodda tarzda amalga oshiriladi. “Fayllar va kataloglarga jarayonlarga kirish” ma’ruzasida buyruqlar qobiqdan qanday bajarilishi haqida gapirdik. Xususan, fork() ni bajargandan so'ng ikkita bir xil jarayon paydo bo'ladi, ulardan biri - bola - o'zi o'rniga buyruqni bajarishi kerak (exec()). Shunday qilib, undan oldin u yopiladi standart chiqish (deskriptor 1 bo'shatilgan) va ochiladi fayl (bilan bog'langan birinchi bepul deskriptor, ya'ni 1) va bajarilayotgan buyruq hech narsani bilishi shart emas: uning standart chiqishi allaqachon almashtirilgan. Ushbu operatsiya deyiladi yo'naltirish standart chiqish. Agar fayl allaqachon mavjud bo'lsa, qobiq uni qayta yozadi va undagi barcha narsalarni butunlay yo'q qiladi. Shuning uchun Methodius, matn fayliga ma'lumotlarni yozishni davom ettirish uchun yana bir operatsiya kerak bo'ladi - ">>".

$ cat >> matn fayli 1-misol. ^D $ cat matn fayli Bu fayl misoli. 1-misol. $

3-misol. Buzilmaydigan stdout yo'nalishi

Methodius aynan kerakli natijani oldi: u keyingi buyruqning standart chiqishidan ma'lumotlarni mavjud faylning oxiriga qo'shdi.

standart chiqish Har bir jarayon ishga tushirilganda tizim tomonidan ochilgan va jarayon tomonidan ma'lumotlarni chiqarish uchun mo'ljallangan ma'lumotlar oqimi.

standart kiritish

Xuddi shunday, dasturning kiritilishiga ma'lumotlarni uzatish uchun ham foydalanish mumkin standart kiritish(qisqartirilgan stdin). Buyruqlar qatori bilan ishlashda standart kiritish foydalanuvchi klaviaturadan kiritadigan belgilardir. Standart kiritish buyruqlar qobig'i yordamida ba'zi bir fayldan ma'lumotlarni etkazib berish orqali qayta yo'naltirilishi mumkin. Belgisi"< » служит для перенаправления содержимого файла на стандартный ввод программе. Например, если вызвать утилиту sort без параметра, она будет читать строки со стандартного ввода. Команда « sort < имя_файла” fayldan kiritilgan tartib maʼlumotlarini beradi.

$sort< textfile Пример 1. Это файл для примеров. $

4-misol. Fayldan standart kiritishni qayta yoʻnaltirish

Ushbu buyruqning natijasi matn faylini tartiblash buyrug'i bilan aynan bir xil, farqi shundaki, qachon "< », sort получает данные со стандартного ввода, ничего не зная о файле « textfile », откуда они поступают. Механизм работы shell в данном случае тот же, что и при перенаправлении вывода: shell читает данные из файла « textfile », запускает утилиту sort и передаёт ей на стандартный ввод содержимое файла.

Shuni esda tutish kerakki, "\u003e" operatsiyasi halokatli: u har doim nol uzunlikdagi faylni yaratadi. Shuning uchun, masalan, ma'lumotlarni saralash faylda ketma-ket tartiblash qo'llanilishi kerak < файл >new_fale va mv new_file fayli. Buyruqni ko'rish jamoa< файл >bir xil_fayl shunchaki uni nol uzunlikka qisqartiring!

Standart kiritish Tizim tomonidan ishga tushirilganda har bir jarayon uchun ochilgan va kiritish uchun mo'ljallangan ma'lumotlar oqimi.

Standart xato chiqishi

Birinchi misol va qayta yo'naltirish bo'yicha mashq sifatida Methodius cat.info faylida mushuk uchun qo'llanma yozishga qaror qildi:

$ info cat > cat.info info: Tugunga kirish (coreutils.info.bz2) mushuk chaqiruvi... maʼlumot: Bajarildi. $ head -1 cat.info Fayl: coreutils.info, tugun: mushuk chaqiruvi, Keyingi: tac chaqiruvi, Yuqoriga: butun fayllarning chiqishi $

5-misol. Standart xato chiqishi

Hayron bo'lgan Methodius faylga o'tish bo'yicha ko'rsatmalariga qaramay, info buyrug'i bilan bosilgan ikkita qator hali ham terminalga kirib borishini aniqladi. Shubhasiz, bu qatorlar davom etmadi standart chiqish chunki ular dastur chiqishi kerak bo'lgan qo'llanma bilan bevosita bog'liq emas, ular foydalanuvchini ishning borishi haqida xabardor qiladilar: qo'llanmani faylga yozish. Bu turdagi uchun diagnostika xabarlari, shuningdek, dasturni bajarish paytida yuzaga kelgan xato xabarlari uchun Linux taqdim etadi standart xato chiqishi(qisqartirilgan stderr).

standart xato chiqishi Tizim tomonidan ishga tushirilganda har bir jarayon uchun ochilgan va mo'ljallangan ma'lumotlar oqimi diagnostika xabarlari jarayon orqali chiqariladi.

Standart xatoni standart chiqish bilan birga ishlatish dasturning haqiqiy natijasini turli xil qo'shimcha ma'lumotlardan ajratish imkonini beradi, masalan, ularni turli fayllarga yuborish orqali. Standart xato chiqishi standart kirish/chiqarish bilan bir xil tarzda, "2" belgilar birikmasidan foydalangan holda qayta yo'naltirilishi mumkin.

$ info cat > cat.info 2> cat.stderr $ cat cat.stderr info: Tugunga kirish (coreutils.info.bz2) mushuk chaqiruvi... maʼlumot: Bajarildi. $

6-misol. Qayta yo'naltirishda standart xato

Bu safar terminalga hech narsa tushmadi, standart chiqish faylga ketdi cat.info , standart xato chiqishi cat.stderr ga o'tdi. ">" va "2" o'rniga Methodius "1>" va "2>" yozishi mumkin edi. Bu holda raqamlar tavsiflovchilar sonini bildiradi ochildi fayllar. Agar ba'zi yordamchi dastur olishni kutsa ochiq Raqamli deskriptor, aytaylik, 4 , keyin uni ishga tushirish uchun albatta"4>" kombinatsiyasidan foydalanishingiz kerak bo'ladi.

Biroq, ba'zida siz stdout va stderr-ni bir-biridan ajratish o'rniga bir xil faylda birlashtirishni xohlaysiz. Bash qobig'ida buning uchun maxsus "2>&1" ketma-ketligi mavjud. Bu "standart chiqish bilan bir joyda quvur standart xatosi" degan ma'noni anglatadi:

$ info cat > cat.info 2>&1 $ head -3 cat.info info: Write node (coreutils.info.bz2)cat invocation... info: Bajarildi. Fayl: coreutils.info, Tugun: mushuk chaqiruvi, Keyingi: tac chaqiruvi, Yuqoriga: butun fayllarning chiqishi $

7-misol. Standart chiqish va standart xato chiqishini birlashtirish

Ushbu misolda qayta yo'naltirishlar tartibi muhim: buyruq satrida Methodius birinchi navbatda standart chiqishni qayerga yo'naltirishni ko'rsatdi (" > cat.info ") va shundan keyingina standart xato chiqishini u erga qayta yo'naltirishni buyurdi. Buni aksincha bajaring (“ 2>&1 > cat.info ”), natija kutilmagan bo‘ladi: faylga faqat standart chiqish tushadi va terminalda diagnostika xabarlari paydo bo‘ladi. Biroq, bu erda mantiq temir bilan qoplangan: "2>&1" operatsiyasi vaqtida standart chiqish terminalga ulangan, ya'ni keyin uning bajarilishi, standart xato chiqishi ham terminal bilan bog'liq bo'ladi. Va standart chiqishni faylga keyingi yo'naltirish, albatta, standart xatoga hech qanday ta'sir qilmaydi. &raqam konstruktsiyasidagi raqam sondir ochiq tavsiflovchi. Agar to'rtinchi deskriptorga yozuvchi yuqorida aytib o'tilgan yordamchi dastur qobiqda yozilgan bo'lsa, u " >&4 " yo'naltirishdan foydalanadi. Qiyin “> fayl 2>&1” konstruksiyasini yozmaslik uchun bash qisqartmalardan foydalanadi: “ &> file ” yoki ekvivalenti “>& file ”.

Hech qaerga yo'naltirish

Ba'zan ma'lumki, dastur tomonidan chiqarilgan ba'zi ma'lumotlar kerak bo'lmaydi. Masalan, standart xato chiqishidan ogohlantirishlar. Bunday holda, siz standart xato chiqishini qayta yo'naltirishingiz mumkin teshik fayli, maxsus ma'lumotlarni yo'q qilish uchun mo'ljallangan - /dev/null . Ushbu faylga yozilgan har qanday narsa shunchaki o'chiriladi va hech qayerda saqlanmaydi.

$ info cat > cat.info 2 > /dev/null $

8-misol. /dev/null ga yo'naltiring

Xuddi shu tarzda, siz uni /dev/null ga yuborish orqali standart chiqishdan xalos bo'lishingiz mumkin.

Maqola yoqdimi? Do'stlar bilan baham ko'ring: