මූලික UNIX / Linux කමාන්ඩ්ස් 12 - disown, sleep, wait සහ තවත් අමතර commands කිහිපයක්


  • 0

    අපි අද පාඩමෙන් කතා කරන්න යන්නෙ තවත් අපිට වැදගත් වෙන UNIX / Linux කමාන්ඩ්ස් කිහිපයක් ගැන. මේ තමා අපේ මූලික UNIX / Linux කමාන්ඩ්ස් පාඩම් මාලාවේ අවසාන පාඩම.

    මේ දක්වා මගේ පාඩම් මාලාව සමග රැදී සිටියට මුලින්ම ඔයාලට ස්තුතියි!

    අද පාඩමෙන් මම කතා කරන්න බලාපොරොත්තු වෙන්නෙ

    1. grep
    2. sleep
    3. disown
    4. wait
    5. tee
      කමාන්ඩ්ස් ගැන කතා කරන්න. දැන් එහෙම නම් අපි වැඩේ පටන් ගනිමු.

    1) grep
    අපිට පුළුවන් මෙම කමාන්ඩ් එක use කරල file එකක තිබෙන, අපි දෙන regular expression එකට match වෙන (ගැලපෙන) පේලි ටික සොයා ගන්න. regular expression කියල කියන එක ටික බර වචනයක්. එක නිසා මම උදාහරණයකින් පෙන්වන්නම් මොකක්ද ඒ කියල.

    අපි උදාහරණය ලෙස /proc/devices file එක ගනිමු. අපිට මේ කමාන්ඩ් එකෙන් පුළුවන් එම file එක තුල තිබෙන දේවල් ටික මුලින්ම බලාගන්න.

    ට්‍රයි cat /proc/devices

    nix@Dell ~ $ cat /proc/devices  
    Character devices:  
      1 mem  
      4 /dev/vc/0  
      4 tty  
      4 ttyS  
      5 /dev/tty  
      5 /dev/console  
      5 /dev/ptmx  
      5 ttyprintk  
      6 lp  
      7 vcs  
     10 misc  
     13 input  
     21 sg  
     29 fb  
     81 video4linux  
     89 i2c  
     99 ppdev  
    108 ppp  
    116 alsa  
    128 ptm  
    136 pts  
    180 usb  
    188 ttyUSB  
    189 usb_device  
    216 rfcomm  
    226 drm  
    245 mei  
    246 media  
    247 kfd  
    248 aux  
    249 bsg  
    250 watchdog  
    251 rtc  
    252 dimmctl  
    253 ndctl  
    254 tpm  
    Block devices:  
    259 blkext  
      7 loop  
      8 sd  
      9 md  
     11 sr  
     65 sd  
     66 sd  
     67 sd  
     68 sd  
     69 sd  
     70 sd  
     71 sd  
    128 sd  
    129 sd  
    130 sd  
    131 sd  
    132 sd  
    133 sd  
    134 sd  
    135 sd  
    252 device-mapper  
    253 virtblk  
    254 mdp  
    nix@Dell ~ $
    

    ඊළගට අපි බලමු අපි දෙන වචනය සම්පුර්ණ වචනයක් ලෙස හෝ වචනයක කොටසක් ලෙස ඇතුලත් lines ටික /proc/devices කියනfile එකෙන් තෝරල බේරල print කරගන්නෙ කොහොමද කියල.

    අපි බලමු "sd" කියන වචනය තියෙන lines ටික ප්‍රින්ට් කරගන ආකාරය.

    ට්‍රයි grep sd /proc/devices හෝ grep 'sd' /proc/devices හෝ grep "sd" /proc/devices

    nix@Dell ~ $ grep sd /proc/devices   
      8 sd  
     65 sd  
     66 sd  
     67 sd  
     68 sd  
     69 sd  
     70 sd  
     71 sd  
    128 sd  
    129 sd  
    130 sd  
    131 sd  
    132 sd  
    133 sd  
    134 sd  
    135 sd  
    nix@Dell ~ $
    

    ට්‍රයි grep "usb" /proc/devices

    nix@Dell ~ $ grep "usb" /proc/devices  
    180>  usb  
    189>  usb_device  
    nix@Dell ~ $
    

    ඔයාලට මතක ඇති මම මේ grep කමාන්ඩ් එක pipe මගින් cat කමාන්ඩ් එකත් එකක කලින් පාඩම් වලදි බාවිතා කරා. මෙන්න මේ වගේ.

    ට්‍රයි cat /proc/devices | grep sd

    nix@Dell ~ $ cat /proc/devices | grep sd  
      8 sd  
     65 sd  
     66 sd  
     67 sd  
     68 sd  
     69 sd  
     70 sd  
     71 sd  
    128 sd  
    129 sd  
    130 sd  
    131 sd  
    132 sd  
    133 sd  
    134 sd  
    135 sd  
    nix@Dell ~ $
    

    මම දැකපු UNIX / Linux admins ල සියලු දෙනාම වගේ grep කමාන්ඩ් එක use කරන්නෙ cat  සහ | එකත් එක්ක. මමත් එහෙම තමයි. ඔයාලට පුළුවන් තමන් කැමති විදියකට grep බාවිතා කරන්න.

    අපි දැන් grep කමාන්ඩ් එකත් සමග switches කිහිපයක් ට්‍රයි කරලා බලමු.

    ට්‍රයි grep -v "sd" /proc/devices හෝ cat /proc/devices | grep sd -v

    nix@Dell ~ $ grep -v "sd" /proc/devices  
    Character devices:  
      1 mem  
      4 /dev/vc/0  
      4 tty  
      4 ttyS  
      5 /dev/tty  
      5 /dev/console  
      5 /dev/ptmx  
      5 ttyprintk  
      6 lp  
      7 vcs  
     10 misc  
     13 input  
     21 sg  
     29 fb  
     81 video4linux  
     89 i2c  
     99 ppdev  
    108 ppp  
    116 alsa  
    128 ptm  
    136 pts  
    180 usb  
    188 ttyUSB  
    189 usb_device  
    216 rfcomm  
    226 drm  
    245 mei  
    246 media  
    247 kfd  
    248 aux  
    249 bsg  
    250 watchdog  
    251 rtc  
    252 dimmctl  
    253 ndctl  
    254 tpm  
    Block devices:  
    259 blkext  
      7 loop  
      9 md  
     11 sr  
    252 device-mapper  
    253 virtblk  
    254 mdp  
    nix@Dell ~ $
    

    අපි මෙහිදී grep ට v කියන switch එක ලබාදීමෙන් "sd" කියන වචනය නොමැති lines ටික විතරක් තෝරලා ගන්න පුළුවන් වුනා.

    ට්‍රයි grep -c "sd" /proc/devices හෝ cat /proc/devices | grep sd -c

    nix@Dell ~ $ grep -c "sd" /proc/devices  
    16  
    nix@Dell ~ $
    

    අපිට c කියන switch එක ලබාදීමෙන්, අපි ලබාදීපු වචනය (sd) අඩංගු lines කියක් file එකේ තියෙනවද කියල දැන ගන්න පුළුවන්. මේ කමාන්ඩ් එකෙන් වන දෙයම අපිට මෙවිදියටත් කරගන්න පුළුවන්.

    ට්‍රයි cat /proc/devices | grep sd | wc -l හෝ grep "sd" /proc/devices | wc -l

    nix@Dell ~ $ cat /proc/devices | grep sd | wc -l  
    16  
    nix@Dell ~ $
    

    අපි මේ දක්වා කරපු උදාහරණ වල අපි දෙන වචනය සම්පුර්ණ වචනයක් හෝ වචනයක කොටසක් ලෙස අන්තර්ගතව තිබුනත් grep මගින් තෝරා දීමක් සිදු කරා.

    නමුත් ඇතැම් අවස්ථාවල අපිට හරියටම අපි දෙන වචනය පමණක් තිබෙන lines ටික තෝරා ගන්න අවශ්‍ය විටකදී අපි w කියන switch එක බාවිතා කරනව. එවිට අපිට ලැබෙන්නෙ හරියටම අපි දෙන වචනයම තිබෙන lines ටික විතරයි. අපි උදාහරණ ටිකක් ට්‍රයි කරලම බලමු.

    ට්‍රයි grep -w "usb" /proc/devices

    nix@Dell ~ $ grep -w "usb" /proc/devices  
    180 usb  
    nix@Dell ~ $
    

    ට්‍රයි cat /proc/devices | grep "usb" -w

    nix@Dell ~ $ cat /proc/devices | grep "usb" -w  
    180 usb  
    nix@Dell ~ $
    

    දැන් අපි බලමු අපි සොයන වචනය තියෙන්නෙ කීවෙනි line එකේද කියල දන ගන්න විදිය. එකත් හරිම පහසුයි.

    ට්‍රයි grep -nw "usb" /proc/devices හෝ cat /proc/devices | grep "usb" -wn

    nix@Dell ~ $ grep -nw "usb" /proc/devices  
    23:180 usb  
    nix@Dell ~ $
    

    දැන් ඔයාලට grep කමාන්ඩ් එක ගැන හොද දැනුමක් ලැබුන කියල මම හිතනව. අපිට DevOps පාඩම් ටික ඉදිරියට කරගෙන යන්න මේ දැනුම හොදටම ප්‍රමාණවත්.  තව පොඩි සංකීර්ණ කරුණු කිහිපයක් grep ගෙ තියෙනව. මම ඉදිරියේදී ඒවත් විස්තර කරල දෙන්නම්.

    දැන් අපි යමු අපේ ඊලග කමාන්ඩ් එක වෙතට.

    2) sleep

    අපි මේ sleep කියන කමාන්ඩ් එක යොදාගන්නෙ අපිට යම්කිසි කමාන්ඩ් එකක් කිසියම් කාලයකට පසු execute කරගැනීමට. අපි terminal shell එකේදි sleep එතරම් යොදා නොගත්තත් අපිට shell scripts වලදි හුගක් වැදගත් වෙනව. අපි උදාහරණයකින්ම තේරුම් ගන්න බලමු.

    ට්‍රයි (sleep 120; echo -e "Hey, It's me.\n now you can press Enter")&

    nix@Dell ~ $ (sleep 120; echo -e "Hey, It's me.\n now you can press Enter")&  
    [1] 13515  
    nix@Dell ~ $
    

    තත්පර 120ක් ගියාට පස්සෙ අපිට මෙන්න මේ වගේ output එකක් ලැබෙනව

    nix@Dell ~ $ Hey, It's me.  
     now you can press Enter
    

    මේ තියෙනෙ අපි echo කම්න්ඩ් එකෙන් ප්‍රින්ට් වෙන්න දාපු text එක. අපිට කමාන්ඩ් prompt එක ගන්න නම් Enter කීඑක press කරන්න වෙනව. Enter කී එකට කෙටුවට පස්සේ අපිට මේ වගේ පෙනවා.

    [1]+  Done                    ( sleep 120; echo -e "Hey, It's me.\n now you can press Enter" )  
    nix@Dell ~ $
    

    මේකෙන් කියන්නේ අපි (sleep 120; echo -e "Hey, It's me.\n now you can press Enter") කමාන්ඩ් එක & යොදා background job එකක් විදියට දීපු නිසා එම ජොබ් එකේ status එක ලෙස Done ලැබුන කියල.

    අපිට Linux වලදී sleep 120 වෙනුවට sleep 2m කියල යොදාගන්නත් පුළුවන්. නමුත් UNIX වලදී අපිට යොදාගන්න වෙන්නේ තත්පර ගණන integer value එකෙකින් පමණයි.

    මේ sleep කමාන්ඩ් එකට switches / options මොනවත් නෑ හොදද. interview වලදී හිටපු ගමන් අපි අහනව ඒවගේ දේවල්. මතකයි නේ ls ගැන. ? :)

    3) disown
    මේ කමාන්ඩ් එක සම්බන්ද වෙන්නේ UNIX / Linux processes වලට තමයි. නමුත් මම එදා මේ ගැන කතා කරේ නෑ. මොකද අද තමයි හොදම දවස :)

    මම ඔයාලට කියල දුන්න කොහොමද අපි process එකක් job එකක් කරන්නේ කියල. ඔයාල දන්නව job එකක් කියන්නෙ daemon එකක් නොවෙන background process එකකට කියල. අපි කිසියම් process එකක් background එකේ රන් කරනවිට  එය අපිට jobs -l කියන කමාන්ඩ් එකෙන් බලාගන්න පුළුවන් කියල.

    අමතක අය මේ විදියට මතක් කරගන්න හොදේ .

    ට්‍රයි  sleep 100 &

    nix@Dell ~ $ sleep 100 &  
    [1] 14319  
    nix@Dell ~ $
    

    ට්‍රයි jobs -l

    nix@Dell ~ $ jobs -l  
    [1]+ 14319 Running                 sleep 100 &  
    nix@Dell ~ $
    

    දැන් මතකයි නේ ....

    අපි මේ disown කමාන්ඩ් එකෙන් කරන්නෙ මෙන්නමේ jobs list එකේ තිබෙන job එකක් එයින් ඉවත් කරන ක්‍රියාවයි. අපි මේ විදියට jobs list එකෙන් අයින් කලත් එය පෙර පරිදිම process එකක් විදියට රන් වෙනව. අපි disown යොදාගෙන කිසියම් job එකක් jobs list එකෙන් අයින් කලපසු. shell එක terminate වුවත් එය පෙර පරිදිම background process එකක් විදියට රන් වෙනව. නමුත් එය තවදුරටත් background job එකක් නොවේ. අපි කිසියම් job එකක් disown කලට පසු තවදුරටත් අපිට jobs -l කමාන්ඩ් එක මගින් බලා ගැනීමට නොහැක. නමුත් ps බාවිතා කිරීමෙන් බලාගන්න පුළුවන්. තවදුරටත් උදාහරණ මගින් මේ කරුණු පැහැදිලි කරගන්න ට්‍රයි එකක් දෙමු.

    ට්‍රයි sleep 120 &

    nix@Dell ~ $ sleep 120 &  
    [1] 11657  
    nix@Dell ~ $
    

    අපි දැන් බලමු background job එකක් විදියට ඒක රන් වෙනවද කියල.

    ට්‍රයි jobs -l

    nix@Dell ~ $ jobs -l  
    [1]+ 11657 Running                 sleep 120 &  
    nix@Dell ~ $
    

    ඔය තියෙන්නේ [1]+ 11657 Running කියල . දැන් අපි disown කමාන්ඩ් එක දීල බලමු.

    ට්‍රයි disown %1

    nix@Dell ~ $ disown %1  
    nix@Dell ~ $
    

    අපි මෙහිදී disown කමාන්ඩ් එකට % සමග job number එක දීල තමයි job එක disown කරන්නෙ.  දැන් අපි බලමු තාමත් අපේ sleep කමාන්ඩ් එක current shell එකේ job list එකේ තියෙනවද කියල.

    ට්‍රයි jobs -l

    nix@Dell ~ $ jobs -l  
    nix@Dell ~ $
    

    අපිට jobs -l කමාන්ඩ් එකට කිසිම දෙයක් ලැබුනෙ නෑ. හරි දැන් sleep කමාන්ඩ් එක අපේ current shell එකෙන් job එකක් නෙවි. දැන් ඒක background process එකක් විතරයි. මේ බලන්න.

    ට්‍රයි ps -lf -C "sleep"

    nix@Dell ~ $ ps -lf -C "sleep"  
    F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD  
    0 S nix      11657 11640  0  80   0 -  1824 hrtime 13:59 pts/0    00:00:00 sleep 120  
    nix@Dell ~ $
    

    අපි දැන් terminal එක closed කරත් sleep process එක background එකේ රන් වෙනව.

    මේකත් හරියට nohup වගේ. නමුත් nohup යෙදිය යුත්තෙ job එක ආරම්බ කරනවිට. නමුත් disown අපිට job එක රන් වෙන අතරෙදි දෙන්න පුළුවන්.

    මේ කරුණත් හොදින් මතක තියාගන්න මම මේ පාඩම් මාලාවෙ UNIX / Linux Job control ගැන ඔයාලට කියල දුන්නෙ bash shell එක හා සම්බන්ද කරුණු පමණයි.

    UNIX / Linux processes සහ job control කරන ආකාරයන් ටිකක් සංකීර්ණ හා පැටලිලි සහිතයි. අපි බාවිතා කරන shell එක අනුව වෙනස් වෙනව. දැනට මේ කියල දුන්නු කරුණු ටික ගැන අවදානය යොමුකරන්න. වැඩි විස්තර මගේ සංකීර්ණ UNIX / Linux කමාන්ඩ් පාඩම් මාලාවෙන් කතා කරනව.

    4) wait

    අපි දැන් බලමු මොකක්ද මේ wait කියන්නේ කියල. මේකත් හරියට "wait for me" කියනව වගේ දෙයක්. අපිට මේ විදියට විස්තර කරන්න පුළුවන්. අපි හිතමු දැන් අපිට කමාන්ඩ් කිහිපයක් එක පෙලට රන් කරගන්න ඕන කියල නමුත් එම කමාන්ඩ්ස්  රන් වෙන්න ඕන එකක් රන් වෙලා අවසන් වුනාට පස්සෙ අනෙක් එක රන්වන ආකාරයට යි. අපි එහිදී wait බාවිතා කරනව.

    (අපිට terminal shell එකෙදිනම් wait නැතුව වෙන පහසු ක්‍රමයකටත් මෙය කළ හැකියි) .

    දැන් උදාහරණයක් ගෙන බලමු.

    ටයි seq 1000000000 1>/dev/null& wait; echo -e "Hey, I'm Echo"

    nix@Dell ~ $ seq 1000000000 1>/dev/null& wait; echo -e "Hey, I'm Echo"  
    [1] 13894  
    [1]+  Done                    seq 1000000000 > /dev/null  
    Hey, I'm Echo  
    nix@Dell ~ $
    

    අපි මේ කමාන්ඩ් එක දීපු ගමන්ම අපිට මෙන්න මේ වගේ output එකක් ලැබෙන්නෙ.

    nix@Dell ~ $ seq 1000000000 1>/dev/null& wait; echo -e "Hey, I'm Echo"  
    [1] 13894
    

    නමුත් අපිට command prompt එක ලැබෙන්නෙ නැ. "seq 1000000000" කියන background job එක අවසන් වුනාට පස්සෙ තමයි echo -e "Hey, I'm Echo" කියන කමාන්ඩ් එක රන් වෙලා. අපිට

    [1]+  Done                    seq 1000000000 > /dev/null  
    Hey, I'm Echo
    

    මේ ටික දැක ගන්න ලැබෙන්නෙ

    අපි ඉහත කම්න්ඩ් එක wait නැතුව දීල ලැබෙන output එකෙන් වෙනස වැටහ ගනිමු.

    ට්‍රයි seq 1000000000 1>/dev/null& echo -e "Hey, I'm Echo"

    nix@Dell ~ $ seq 1000000000 1>/dev/null& echo -e "Hey, I'm Echo"  
    [1] 13938  
    Hey, I'm Echo  
    nix@Dell ~ $
    

    අපි seq 1000000000 1>/dev/null& echo -e "Hey, I'm Echo" කමාන්ඩ් එක දීපු ගමන්ම අපිට මේ

    [1] 13938  
    Hey, I'm Echo
    

    output එක ලැබුන.  එහිදී "Hey, I'm Echo" ප්‍රින්ට් වෙන්න "seq 1000000000" කමාන්ඩ් එක ඉවර වෙනකම් හිටියේ නැ. දැක්ක නේද වෙනස. ?

    අපි දැන් තවත් කමාන්ඩ් එකක් ඉගෙන ගනිමු.

    5) tee
    මේ tee කමාන්ඩ් එක ටිකක් පුදුමාකාර කමාන්ඩ් එකක්. මේ tee කමාන්ඩ් එකට පුළුවන් එයාගෙ stdin එකට ලැබෙන දේ 1:1 කොපියක් වගේ stdout එකට සහ තවත් file එකකට හෝ file කිහිපයකට කොපි කරන්න. අපි උදාහරණයක් කරල බලමු. මම මේ උදාහරණයට යොදාගන්නෙ මගේ ~/lsmore directory එකට ls -l කමාන්ඩ් එක දීල එහි stdout එක tee කමාන්ඩ් එකට pipe කිරීමයි.

    ට්‍රයි ls -l ~/lsmore|tee ~/tee_out_file1

    nix@Dell ~ $ ls -l ~/lsmore|tee ~/tee_out_file1  
    total 80  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 0  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 1  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 1dir  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 2  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 2dir  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 3  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 3dir  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 4  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 5  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 6  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 7  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 8  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 9  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 a  
    -rwxr----- 1 nix nix    0 Jun 19 09:15 about  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 adir  
    -rw-r--r-- 1 nix nix    9 Jun 23 15:17 ayubowan.txt  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 b  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 bdir  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 c  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 cdir  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 computer  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 d  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 ddir  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 did  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 e  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 edir  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 fdir  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 file  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 how  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 is  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 iso  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 mp3  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 my  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 names  
    -rw-r--r-- 1 nix nix    0 Jun 20 12:17 new007  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 see  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 songs  
    -rw-r--r-- 1 nix nix   75 Jun 23 14:39 stdout_example1  
    -rw-r--r-- 1 nix nix   75 Jun 23 14:44 stdout_example2  
    -rw-r--r-- 1 nix nix   75 Jun 23 15:03 stdout_example3  
    -rw-r--r-- 1 nix nix  225 Jun 23 15:33 stdout_example4  
    -rw------- 1 nix nix    4 Jun 25 10:58 test_edit.txt.save  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 that  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 these  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 videos  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 where  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 windows  
    -rwxr-xr-x 1 nix nix    0 Jun 19 09:15 you  
    nix@Dell ~ $
    

    දැන් අපි බලමු ~/tee_out_file1 file එකේ තියෙන දේවල් මොනවද කියල

    ට්‍රයි cat  ~/tee_out_file1

    nix@Dell ~ $ cat  ~/tee_out_file1                
    total 80  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 0  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 1  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 1dir  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 2  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 2dir  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 3  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 3dir  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 4  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 5  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 6  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 7  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 8  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 9  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 a  
    -rwxr----- 1 nix nix    0 Jun 19 09:15 about  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 adir  
    -rw-r--r-- 1 nix nix    9 Jun 23 15:17 ayubowan.txt  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 b  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 bdir  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 c  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 cdir  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 computer  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 d  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 ddir  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 did  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 e  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 edir  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 fdir  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 file  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 how  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 is  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 iso  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 mp3  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 my  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 names  
    -rw-r--r-- 1 nix nix    0 Jun 20 12:17 new007  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 see  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 songs  
    -rw-r--r-- 1 nix nix   75 Jun 23 14:39 stdout_example1  
    -rw-r--r-- 1 nix nix   75 Jun 23 14:44 stdout_example2  
    -rw-r--r-- 1 nix nix   75 Jun 23 15:03 stdout_example3  
    -rw-r--r-- 1 nix nix  225 Jun 23 15:33 stdout_example4  
    -rw------- 1 nix nix    4 Jun 25 10:58 test_edit.txt.save  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 that  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 these  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 videos  
    -rw-r--r-- 1 nix nix    0 Jun 19 09:15 where  
    drwxr-xr-x 2 nix nix 4096 Jun 19 09:16 windows  
    -rwxr-xr-x 1 nix nix    0 Jun 19 09:15 you  
    nix@Dell ~ $
    

    ඔයාලට පේනවා නේද ~/tee_out_file1 file එක තුල තියෙන්නෙත් tee හි stdout එකේ දුන්න දේම කියල.

    අපිට tee කමාන්ඩ් එක මේ විදියටත් බාවිතා කරන්න පුළුවන්.

    ට්‍රයි ls -l ~/lsmore|tee 1> ~/tee_out_file0 ~/tee_out_file1 ~/tee_out_file2

    nix@Dell ~ $ ls -l ~/lsmore|tee 1> ~/tee_out_file0 ~/tee_out_file1 ~/tee_out_file2  
    nix@Dell ~ $
    

    මෙහිදී අපිට tee_out_file0, tee_out_file1 සහ tee_out_file2 කියල files තුනක් ලැබුන.

    අපි දැන් බලමු කොහොමද අපි tee කමාන්ඩ් එකෙන් දැනට තියෙන file එකක් overwrite කරන්නැතුව ඒකට data append කරන්නෙ කියල. අපි මේ සදහා tee සමග a කියන switch එක යොදාගන්නව.

    ට්‍රයි ls -l ~/lsmore|tee -a 1> ~/tee_out_file0 ~/tee_out_file1 ~/tee_out_file2

    nix@Dell ~ $ ls -l ~/lsmore|tee -a 1> ~/tee_out_file0 ~/tee_out_file1 ~/tee_out_file2  
    nix@Dell ~ $
    

    මේ කමාන්ඩ් එකෙන් වෙන්නෙ කලින් පාර tee හදපු ~/tee_out_file1 හා ~/tee_out_file2 කියන files දෙකට නැවත වාරයක් data එකතුවෙන එක. ඒ කියන්නෙ මෙම කමාන්ඩ් එක දුන්නට පස්සෙ  ~/tee_out_file1 හා ~/tee_out_file2 කියන file දෙකේ ~/tee_out_file0 ගෙ තියෙන lines ප්‍රමාණය වගේ දෙගුණයක් lines තියෙන්න ඕන බව.

    අපි ඒක මේ විදියට චෙක් කරල බලමු.

    ට්‍රයි cat ~/tee_out_file0|wc -l

    nix@Dell ~ $ cat ~/tee_out_file0|wc -l  
    50
    nix@Dell ~ $
    

    ට්‍රයි cat ~/tee_out_file1|wc -l

    nix@Dell ~ $ cat ~/tee_out_file1|wc -l  
    100
    nix@Dell ~ $
    

    ට්‍රයි cat ~/tee_out_file2|wc -l

    nix@Dell ~ $ cat ~/tee_out_file2|wc -l  
    100
    nix@Dell ~ $
    

    ~/tee_out_file0 එකේ lines ගණන 50ක් වෙන්නෙ ls -l හි stdout එකෙන් tee ට pipe කරන්නෙ lines 50ක් නිසා. මම ඔයාලට මුලින්ම කිවුව tee ට පුළුවන් කියල tee ගෙ stdin එකෙ 1:1 කොපියක් stdout එකෙන් පිටකරන්න. මෙහිදී  1> මගින් කරන්නෙ එම stdout එක standard output redirect මගින් file එකකට දෙන එකයි.

    අපිට මේ tee කමාන්ඩ් එක binary data සමගත් යොදාගන්න පුළුවන්. අපි video encoding වැඩ කරනකොට එක Video source එකක් tee කමාන්ඩ් එක මගින් FFMpeg වගේ encoders කිහිපයකට දෙනව. මම ඉදිරියේදී ට්‍රයි එකක් දෙන්නම් ඔයාලට ඒ ගැනත් කියල දෙන්න.

    අපිට දැන් මූලික UNIX / Linux කමාන්ඩ්ස් ගැන හොද අවබෝදයක් තියෙන නිසා. shell script පාඩම් ටික පටන්ගන්න පුළුවන්.

    නැවතත් shell script වලින් හමුවෙමු.

    ස්තුතියි!





Looks like your connection to UNIX/Linux ඉගෙන ගනිමු සිංහලෙන් was lost, please wait while we try to reconnect.