Chuyeˆ’n hu’o´’ng d¯aˆ`u vào/d¯aˆ`u ra, d¯u’o`’ng oˆ´ng và d¯aˆ`u lo

Một phần của tài liệu Tài liệu Linux cho người dùng doc (Trang 35 - 38)

3 Bash

3.5Chuyeˆ’n hu’o´’ng d¯aˆ`u vào/d¯aˆ`u ra, d¯u’o`’ng oˆ´ng và d¯aˆ`u lo

˙c 31

kênh giao tác

[user]$ echo ’xin chao cac ban!’

Tôi nghı˜ ra˘`ng lo`’i gia’i thích se˜ là thu`’a thãi (chı’ xin hãy su’’ du

˙ng daˆ´u ngoa˘

˙c d¯o’n, neˆ´u không keˆ´t qua’ có theˆ’ se˜ khác. Neˆ´u ba

˙n d¯o

˙c chú ý thì có theˆ’ gia’i thích ta

˙i sao la˙i khác).

3.4.3 Leˆ

˙nh cat

Chúng ta se˜ xem xét leˆ

˙nhcato’’ d¯ây vì leˆ

˙nh này thu’o`’ng làm vieˆ

˙c vo´’i d¯aˆ`u vào và d¯aˆ`u ra tiêu chuaˆ’n. Theo ma˘

˙c d¯i

˙nh keˆ´t qua’ làm vieˆ

˙c cu’a leˆ

˙nhcathu’o´’ng to´’i d¯aˆ`u ra tiêu chuaˆ’n. D¯ eˆ’ chu´’ng minh là leˆ

˙nh này theo ma˘˙c d¯i

˙nh tieˆ´p nhaˆ

˙n dòng du˜’ lieˆ ˙u nhaˆ

˙p vào, hãy cha˙y leˆ

˙nhcatkhông có tham soˆ´ . Keˆ´t qua’ là con tro’ chuyeˆ’n to´’i moˆ

˙t dòng mo´’i, và ho’n nu˜’a có ve’ nhu’ không có gì xa’y ra. Lúc này câu leˆ

˙nh cho`’ các ký tu

˙’ d¯eˆ´ n tu`’d¯aˆ`u vào tiêu chuaˆ’n. Hãy nhaˆ

˙p baˆ´t ky` ký tu ˙’ nào, và nó se˜ xuaˆ´t hieˆ

˙n ngay laˆ

˙p tu´’c trên màn hình, tu´’c là chu’o’ng trình ngay laˆ

˙p tu´’c d¯u’a chúng to´’i d¯aˆ`u ra tiêu chuaˆ’n. Có theˆ’ tieˆ´p tu (adsbygoogle = window.adsbygoogle || []).push({});

˙c nhaˆ

˙p các ký tu˙’, và chúng cu˜ng se˜ xuaˆ´ t hieˆ

˙n trên màn hình. Thông thu’o`’ng bàn phím d¯u’o

˙’c caˆ´ u hình d¯eˆ’ nhaˆ

˙p vào theo tu`’ng dòng, vì theˆ´ neˆ´u ba

˙n nhaˆ´n phím <Enter>, dòng ký tu

˙’ ba˙n vu`’a nhaˆ

˙p se˜ d¯u’o

˙’c d¯u’a to´’i leˆ˙nhcat, và leˆ

˙nh này se˜ la

˙i d¯u’a du˜’ lieˆ ˙u ra

màn hình thông qua d¯aˆ`u ra tiêu chuaˆ’n. Nhu’ vaˆ

˙y, moˆ˜i dòng ký tu

˙’ nhaˆ˙p vào se˜ d¯u’o

˙’c hieˆ˙n ra hay laˆ`n: moˆ

˙t laˆ`n khi gõ và laˆ`n thu´’ hai bo’’i câu leˆ

˙nhcat. Neˆ´u nhaˆ´n toˆ’ ho

˙’p phím <Ctrl>+<D>, mà dùng d¯eˆ’ ngu`’ng vieˆ

˙c nhaˆ

˙p du˜’ lieˆ

˙u, chúng ta se˜ qua la

˙i dòng nhaˆ ˙p leˆ

˙nh. Cu˜ng có theˆ’ su’’ du

˙ng toˆ’ ho

˙’p phím <Ctrl>+<C>, mà là câu leˆ˙nh trong heˆ

˙ vo’ d¯eˆ’ du`’ng chu’o’ng trình d¯ang cha ˙y. Neˆ´u d¯u’a tên moˆ

˙t taˆ

˙p tin vào làm tham soˆ´ cho leˆ

˙nhcat, thì noˆ

˙i dung cu’a leˆ (adsbygoogle = window.adsbygoogle || []).push({});

˙nh này se˜ d¯u’o ˙’c d¯u’a to´’i d¯aˆ`u vào tiêu chuaˆ’n, tu`’ d¯ó leˆ

˙nhcatse˜ d¯o ˙c noˆ

˙i dung này và d¯u’a to´’i d¯aˆ`u ra tiêu chuaˆ’n (xem so’ d¯oˆ`).

Noˆ

˙i dung taˆ˙p tin -> D¯ aˆ`u vào tiêu chuaˆ’n (stdin) --cat--> d¯aˆ`u ra tiêu chuaˆ’n (stdout)

D

¯ ây chı’ là moˆ

˙t tru’o`’ng ho

˙’p riêng cu’a vieˆ˙c chuyeˆ’n hu’o´’ng du˜’ lieˆ

˙u d¯aˆ`u vào, moˆ

˙t co’ cheˆ´ raˆ´t có ích cu’a heˆ

˙vo’. Và taˆ´t nhiên chúng ta caˆ`n xem xét ky˜ ho’n co’ cheˆ´ này.

3.5 Chuyeˆ’n hu’o´’ng d¯aˆ`u vào/d¯aˆ`u ra, d¯u’o`’ng oˆ´ ng và d¯aˆ`u lo ˙c

Ma˘

˙c dù, nhu’ d¯ã nói o’’ trên, thông thu’o`’ng d¯aˆ`u vào/d¯aˆ`u ra cu’a moˆ

˙t chu’o’ng trình liên keˆ´t vo´’i các d¯aˆ`u vào/d¯aˆ`u ra tiêu chuaˆ’n, trong heˆ

˙ vo’ còn có các môi tru’o`’ng d¯a˘ ˙c bieˆ

˙t cho phép chuyeˆ’n hu’o´’ng d¯aˆ`u vào/d¯aˆ`u ra.

3.5.1 Su’’ du

˙ng >, < và >>

D

¯ eˆ’ chuyeˆ’n hu’o´’ng d¯aˆ`u vào/ra, su’’ du

˙ng các ký hieˆ

˙u ">", "<" và ">>". Thu’o`’ng su’’ du ˙ng vieˆ

˙c chuyeˆ’n hu’o´’ng d¯u˜’ lieˆ

˙u ra cu’a câu leˆ

˙nh vào taˆ

˙p tin. Du’o´’i d¯ây là moˆ

˙t ví du˙ tu’o’ng u´’ng:

kênh giao tác (adsbygoogle = window.adsbygoogle || []).push({});

maikhai@fpt:/some/where$ ls -l > /home/maikhai/ls.txt

Theo leˆ

˙nh này danh sách taˆ

˙p tin và thu’ mu

˙c con cu’a thu’ mu

˙c, mà tu`’ d¯ó ngu’o`’i dùng thu ˙’c hieˆ˙n leˆ ˙nhls 2 se˜ d¯u’o

˙’c ghi vào taˆ˙p tin/home/maikhai/ls.txt; khi này neˆ´u taˆ ˙p tin

2thu’ mu ˙c hieˆ

ls.txt không toˆ`n ta

˙i, thì nó se˜ d¯u’o

˙’c ta˙o ra; neˆ´u taˆ

˙p tin d¯ã có, thì noˆ

˙i dung cu’a nó se˜ bi ˙ xóa và ghi d¯è bo’’i danh sách nói trên. Neˆ´u ba

˙n không muoˆ´ n xóa noˆ

˙i dung cu˜ mà ghi thêm du˜’ lieˆ

˙u d¯aˆ`u ra vào cuoˆ´ i taˆ

˙p tin, thì caˆ`n su’’ du

˙ng ký hieˆ

˙u >> thay cho >. Khi này khoa’ng tra˘´ng tru’o´’c và sau các ký hieˆ

˙u >hay>>không có ý nghı˜a và chı’ dùng vo´’i mu

˙c d¯ích thuaˆ ˙n tieˆ

˙n, deˆ˜ nhìn. Ba

˙n có theˆ’ chuyeˆ’n hu’o´’ng không chı’ vào taˆ

˙p tin, mà còn to´’i d¯aˆ`u vào cu’a moˆ ˙t câu leˆ

˙nh khác hay to´’i moˆ

˙t thieˆ´t bi

˙nào d¯ó (ví du

˙, máy in). Ví du˙, d¯eˆ’ d¯u’a noˆ

˙i dung taˆ ˙p tin

/home/maikhai/ls.txtvu`’a ta (adsbygoogle = window.adsbygoogle || []).push({});

˙o o’’ trên to´’i cu’’a soˆ’ terminal thu´’ hai3có theˆ’ su’’ du ˙ng leˆ

˙nh sau:

kênh giao tác

maikhai@fpt:/sw$ cat /home/maikhai/ls.txt > /dev/tty2

Nhu’ ba

˙n thaˆ´y,>dùng d¯eˆ’ chuyeˆ’n hu’o´’ng du˜’ lieˆ

˙u cu’a d¯aˆ`u ra. Chu´’c na˘ng tu’o’ng tu

˙’ d¯oˆ´ i vo´’i d¯aˆ`u vào d¯u’o

˙’c thu˙’c hieˆ˙n bo’’i<. Ví du

˙, có theˆ’ d¯eˆ´m soˆ´ tu`’ trong taˆ

˙p tinls.txtnhu’ sau (chú ý, d¯ây chı’ là moˆ

˙t ví du˙ minh ho˙a, trên thu˙’c teˆ´ thu’o`’ng su’’ du

˙ng câu leˆ

˙nh d¯o’n gia’n ho’n):

kênh giao tác

maikhai@fpt:/sw$ wc -w < /home/maikhai/ls.txt

Cách chuyeˆ’n hu’o´’ng này thu’o`’ng d¯u’o

˙’c su’’du˙ng trong các script, cho các câu leˆ

˙nh mà thu’o`’ng tieˆ´p nhaˆ

˙n (hay cho`’) du˜’ lieˆ

˙u vào tu`’ bàn phím. Trong script dùng d¯eˆ’ tu

˙’ d¯oˆ˙ng hóa moˆ

˙t thao tác nào d¯ó, có theˆ’ d¯u’a các thông tin caˆ`n thieˆ´t cho câu leˆ

˙nh tu`’ taˆ

˙p tin: trong taˆ

˙p tin này ghi sa˘˜n nhu˜’ng gì caˆ`n d¯eˆ’ thu

˙’c hieˆ˙n leˆ

˙nh d¯ó. Bo’’i vì các ký hieˆ

˙u<, >và>>làm vieˆ

˙c vo´’i các kênh tiêu chuaˆ’n (d¯aˆ`u vào hoa˘ (adsbygoogle = window.adsbygoogle || []).push({});

˙c d¯aˆ`u ra), chúng không chı’ d¯u’o

˙’c dùng theo các cách quen thuoˆ˙c, thu’o`’ng dùng, mà còn có theˆ’ theo cách khác, "la

˙ma˘´t" ho’n. Ví du

˙, các câu leˆ

˙nh sau là tu’o’ng d¯u’o’ng:

kênh giao tác

[user]$ cat > file [user]$ cat>file [user]$ >file cat [user]$ > file cat

Tuy nhiên, tu

˙’ chúng (không có moˆ˙t leˆ

˙nh nào, tu´’c là không có kênh tiêu chuaˆ’n nào cho leˆ

˙nh) các ký tu˙’ chuyeˆ’n hu’o´’ng này không theˆ’ d¯u’o˙’c su’’ du˙ng, nhu’ theˆ´ không theˆ’, ví du ˙, nhaˆ

˙p vào dòng leˆ

˙nh sau:

kênh giao tác

[user]$ file1 > file2

mà thu d¯u’o

˙’c ba’n sao cu’a moˆ˙t taˆ

˙p tin nào d¯ó. Nhu’ng d¯ieˆ`u này không làm gia’m giá tri ˙cu’a

co’ cheˆ´ này, bo’’i vì các kênh tiêu chuaˆ’n có cho mo

˙i câu leˆ

˙nh. Khi này, có theˆ’ chuyeˆ’n hu’o´’ng không chı’ d¯aˆ`u vào và d¯aˆ`u ra tiêu chuaˆ’n, mà còn các kênh khác. D¯ eˆ’ làm d¯u’o

˙’c d¯ieˆ`u này, caˆ`n d¯a˘

˙t tru’o´’c ký hieˆ

˙u chuyeˆ’n hu’o´’ng soˆ´ cu’a kênh muoˆ´n chuyeˆ’n. D¯ aˆ`u vào tiêu chuaˆ’n stdin có soˆ´ 0, d¯aˆ`u ra tiêu chuaˆ’n stdout - soˆ´ 1, kênh thông báo loˆ˜i stderr - soˆ´ 2. Tu´’c là leˆ

˙nh chuyeˆ’n hu’o´’ng có da

˙ng d¯aˆ`y d¯u’ nhu’ sau (xin d¯u’o

˙’c nha˘´c la˙i, khoa’ng tra˘´ng ca˙nh > là không nhaˆ´t thieˆ´t):

command N > M

3ba

˙n caˆ`n dùng toˆ’ ho (adsbygoogle = window.adsbygoogle || []).push({});

3.5 Chuyeˆ’n hu’o´’ng d¯aˆ`u vào/d¯aˆ`u ra, d¯u’o`’ng oˆ´ ng và d¯aˆ`u lo

˙c 33

Trong d¯ó, N và M - soˆ´ cu’a kênh tiêu chuaˆ’n (0, 1, và 2) hoa˘

˙c tên taˆ

˙p tin. Trong moˆ ˙t vài tru’o`’ng ho

˙’p có su’’ du˙ng các ký hieˆ

˙u<, >và>>mà không chı’ ra soˆ´ kênh hay tên taˆ

˙p tin, vì vào choˆ˜ còn thieˆ´u se˜ d¯a˘

˙t, theo ma˘˙c d¯i

˙nh, 1 neˆ´u dùng>, tu´’c là d¯aˆ`u ra tiêu chuaˆ’n, hoa˘

˙c 0 neˆ´u dùng<, tu´’c là d¯aˆ`u vào tiêu chuaˆ’n. Nhu’ theˆ´, khi không có soˆ´ nào chı’ ra,>se˜ d¯u’o

˙’c biên di˙ch là1 >, còn<se˜ d¯u’o

˙’c biên di˙ch là0 <. Ngoài vieˆ

˙c chuyeˆ’n hu’o´’ng các kênh tiêu chuaˆ’n d¯o’n gia’n nhu’ vaˆ

˙y, còn có kha’ na˘ng không nhu˜’ng chuyeˆ’n hu’o´’ng du˜’ lieˆ

˙u vào kênh này hay kênh khác, mà còn sao chép noˆ

˙i dung cu’a các kênh tiêu chuaˆ’n d¯ó. Ký hieˆ

˙u & dùng d¯eˆ’ thu ˙’c hieˆ˙n d¯ieˆ`u này, khi d¯a˘

˙t nó (&) tru’o´’c soˆ´ cu’a kênh se˜ chuyeˆ’n du˜’ lieˆ ˙u d¯eˆ´n:

command N > &M

Leˆ

˙nh này có nghı˜a là, d¯aˆ`u ra cu’a kênh vo´’i soˆ´ N d¯u’o

˙’c gu’’i d¯eˆ´ n ca’ d¯aˆ`u ra tiêu chuaˆ’n, và sao chép to´’i kênh có soˆ´ M. Ví du

˙, d¯eˆ’ sao chép thông báo loˆ˜i vào d¯aˆ`u ra tiêu chuaˆ’n, caˆ`n dùng leˆ ˙nh 2>&1, còn 1>&2 sao chép stdout vào stderr. Kha’ na˘ng này d¯a˘

˙c bieˆ

˙t có ích khi muoˆ´ n ghi d¯aˆ`u ra vào taˆ

˙p tin, vì khi d¯ó chúng ta vu`’a có theˆ’ nhìn thaˆ´y thông báo trên màn hình, vu`’a ghi chúng vào taˆ

˙p tin. Ví du˙, tru’o`’ng ho

˙’p sau thu’o`’ng d¯u’o˙’c u´’ng du˙ng trong các script cha˙y khi kho’’i d¯oˆ ˙ng Linux:

kênh giao tác (adsbygoogle = window.adsbygoogle || []).push({});

teppi82@teppi:~$ cat hiho > /dev/null cat: hiho: No such file or directory

teppi82@teppi:~$ cat hiho > /dev/null 2>&1

3.5.2 Su’’ du ˙ng |

Moˆ

˙t tru’o`’ng ho

˙’p d¯a˘˙c bieˆ

˙t cu’a chuyeˆ’n hu’o´’ng d¯aˆ`u ra là su

˙’ toˆ’ chu´’c các d¯u’o`’ng oˆ´ ng (ha y còn có theˆ’ go

˙i là kênh giu˜’a các chu’o’ng trình, hoa˘

˙c ba˘ng chuyeˆ`n). Hai hay vài câu leˆ

˙nh, mà d¯aˆ`u ra cu’a leˆ

˙nh tru’o´’c dùng làm d¯aˆ`u vào cho leˆ

˙nh sau, liên keˆ´t vo´’i nhau (có theˆ’ nói phân cách nhau, neˆ´u muoˆ´ n) bo’’i ký hieˆ

˙u ga˙ch tha˘’ng d¯u´’ng - "|". Khi này d¯aˆ`u ra tiêu chuaˆ’n cu’a leˆ

˙nh d¯u´’ng bên trái so vo´’i|du’o

˙’c chuyeˆ’n d¯eˆ´ n d¯aˆ`u vào tiêu chuaˆ’n cu’a chu’o’ng trình, du´’ng bên pha’i so vo´’i|. Ví du

˙:

kênh giao tác

maikhai@fpt:/sw$ cat ls.txt | grep knoppix | wc -l

Dòng này có nghı˜a là keˆ´t qua’ cu’a leˆ

˙nhcat, tu´’c là noˆ

˙i dung taˆ

˙p tin ls.txt, se˜ d¯u’o

˙’c chuyeˆ’n d¯eˆ´n d¯aˆ`u vào cu’a leˆ

˙nhgrep, leˆ

˙nh này se˜ phân chia noˆ

˙i dung nói trên và chı’ laˆ´y ra nhu˜’ng dòng nào có chu´’a tu`’ knoppix. D¯ eˆ´ n lu’o

˙’t mình, keˆ´ t qu’a cu’a leˆ

˙nhgrep d¯u’o

˙’c chuyeˆ’n to´’i d¯aˆ`u vào cu’a leˆ (adsbygoogle = window.adsbygoogle || []).push({});

˙nhwc -l, mà tính soˆ´ nhu˜’ng dòng thu d¯u’o

˙’c. D¯ u’o`’ng oˆ´ ng su’’ du

˙ng d¯eˆ’ keˆ´t ho ˙’p vài chu’o’ng trình nho’ la

˙i vo´’i nhau (moˆ˜i chu’o’ng trình thu

˙’c hieˆ˙n moˆ

˙t bieˆ´n d¯oˆ’i xác d¯i

˙nh nào d¯ó trên d¯aˆ`u vào) ta

˙o thành moˆ ˙t leˆ

˙nh toˆ’ng quát, mà keˆ´t qua’ cu’a nó se˜ là moˆ

˙t bieˆ´n d¯oˆ’i phu´’c ta ˙p. Caˆ`n chú ý ra˘`ng, heˆ

˙ vo’ go˙i và thu˙’c hieˆ˙n taˆ´t ca’ các câu leˆ

˙nh có trong d¯u’o`’ng oˆ´ng cùng moˆ

˙t lúc, cha˙y moˆ˜i leˆ

˙nh d¯ó trong moˆ

˙t ba’n sao heˆ

˙vo’ riêng. Vì theˆ´ ngay khi chu’o’ng trình thu´’nhaˆ´t ba˘´t d¯aˆ`u d¯u’a keˆ´t qua’ o’’ d¯aˆ`u ra, chu’o’ng trình tieˆ´p theo ba˘´t d¯aˆ`u xu’’ lý keˆ´t qua’ này. Cu˜ng y nhu’ vaˆ

˙y, các leˆ ˙nh tieˆ´p theo thu

˙’c hieˆ˙n các công vieˆ

˙c cu’a mình: cho`’ du˜’ lieˆ ˙u tu`’ leˆ

˙nh tru’o´’c và d¯u’a keˆ´t qua’ cho leˆ ˙nh tieˆ´p theo, gioˆ´ ng nhu’moˆ

˙t dây chuyeˆ`n sa’n xuaˆ´t. Neˆ´u nhu’muoˆ´n moˆ ˙t leˆ

˙nh nào d¯ó keˆ´t thúc hoàn

toàn, tru’o´’c khi thu

˙’c hieˆ˙n leˆ ˙nh tieˆ´p theo, ba ˙n có theˆ’ su’e’ du ˙ng trên moˆ ˙t dòng ca’ ký hieˆ ˙u dây chuyeˆ`n|, cu˜ng nhu’ daˆ´u chaˆ´p phaˆ’y;. Tru’o´’c moˆ˜i daˆ´u chaˆ´m phaˆ’y, heˆ

˙ vo’ se˜ du`’ng la

˙i và cho`’ cho d¯eˆ´n khi thu

˙’c hieˆ˙n xong taˆ´t ca’ các câu leˆ

˙nh tru’o´’c cu’a d¯u’o`’ng oˆ´ng. Tra

tri

˙lôgíc, mà d¯u’o (adsbygoogle = window.adsbygoogle || []).push({});

˙’c tra’ la˙i sau khi thu˙’c hieˆ˙n xong chu’o’ng trình) cu’a moˆ

˙t d¯u’o`’ng oˆ´ng se˜ trùng

Một phần của tài liệu Tài liệu Linux cho người dùng doc (Trang 35 - 38)