DevOps_UNIX / Linux_11_UNIX / Linux - disown, sleep, wait සහ තවත් අමතර commands කිහිප

ja2k17ja

Member
May 10, 2017
185
166
0
තිස්සමහාරාම
DevOps_UNIX / Linux_11_UNIX / Linux - disown, sleep, wait සහ තවත් අමතර commands කිහිප

DevOps_UNIX / Linux_11_UNIX / Linux - disown, sleep, wait සහ තවත් අමතර commands කිහිපයක්
අපි අද පාඩමෙන් කතා කරන්න යන්නෙ තවත් අපිට වැදගත් වෙන 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 වලින් හමුවෙමු.
ස්තුතියි!
 
Last edited: