9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
學習啦 > 學習電腦 > 操作系統 > Linux教程 > Linux中rsh怎么遠程使用shell命令

Linux中rsh怎么遠程使用shell命令

時間: 春健736 分享

Linux中rsh怎么遠程使用shell命令

  rsh命令用于連接到遠程的指定主機并執行指定的命令。那么Linux中rsh怎么遠程使用shell命令呢?學習啦小編分享了Linux中rsh遠程使用shell命令的方法,希望對大家有所幫助。

  Linux中rsh遠程使用shell命令方法

  rsh有兩種使用模式:

  rsh $host : 遠程登錄,啟動交互式進程。

  rsh $host $command :遠程執行命令,并顯示輸出。

  rsh hosthostcommand

  rsh $host $command的作用是:

  1.在遠程機器上執行命令$command

  2.通過網絡連接(socket)重定向當前進程和遠端進程的標準輸入和標準輸出

  3.遠端rsh進程在遠端進程結束后結束

  4.本地rsh進程讀取遠端進程的標準輸出直到結束(EOF)

  深刻理解這個執行過程有助于理解各種“奇怪”的現象和用法。

  代碼如下:

  + Suspended (tty input)

  $ rsh localhost infinite-loop &

  [1] + Suspended (tty input) rsh pv007 infinite-loop

  $ rsh -n localhost infinite-loop &

  # 執行正常

  后臺執行rsh命令時,提示了和標準輸入相關的錯誤信息。這是因為rsh默認會把當前窗口的標準輸入重定向到遠端進程。

  而本地rsh進程作為后臺程序運行的話,標準輸入被“阻塞”了。

  通過-n選項制定不需要重定向標準輸入(stdin)。

  遠端進程的執行

  執行命令

  代碼如下:

  rsh somehost infinite-loop

  在遠端機器上查看相關進程:

  代碼如下:

  $ pstree -a -p 3353

  in.rshd,3353

  └─csh,3363 -c infinite-loop

  └─infinite-loop,3632 /u/szhang/bin/infinite-loop

  可以看出,遠端機器上的rshd進程負責啟動遠端進程。而且可以看出是通過csh -c的方式啟動的(這里用戶的默認Shell是C Shell)。

  遠端進程的標準IO

  檢查遠端進程的文件描述符:

  代碼如下:

  $ ls -l /proc/3363/fd /proc/3632/fd

  /proc/3363/fd:

  total 0

  lrwx------. 1 Jul 30 23:47 16 -> socket:[1184748899]

  lrwx------. 1 Jul 30 23:47 17 -> socket:[1184748899]

  l-wx------. 1 Jul 30 23:47 18 -> pipe:[1184749092]

  lrwx------. 1 Jul 30 23:47 19 -> socket:[1184748899]

  代碼如下:

  /proc/3632/fd:

  total 0

  lrwx------. 1 Jul 30 23:47 0 -> socket:[1184748899]

  lrwx------. 1 Jul 30 23:47 1 -> socket:[1184748899]

  l-wx------. 1 Jul 30 23:47 2 -> pipe:[1184749092]

  可以看出遠端里程的標準輸入輸出是被重定向到socket上的:

  1.stdin 和 stdout 共享一個socket連接

  2.stderr 則通過一個pipe重定向(重定向到stdout ???)

  3.rsh 的返回值

  rsh程序自身的返回值表明的是rsh自身的運行狀況,而不是遠端進程的返回值。

  獲得遠端進程的返回值

  代碼如下:

  # 遠端是C Shell

  $ rsh $host "$command ; echo $status"

  代碼如下:

  # 遠端是Bash Shell

  $ rsh $host "$command ; echo $?"

  代碼如下:

  # 遠端Shell類型不確定

  $ rsh $host "sh -c '$command ; echo $?'"

  啟動遠端進程所用的Shell

  由于用于啟動遠端進程的Shell類型是未知的,而有些操作的語法在不同Shell里是不同的。

  比如輸入輸出重定向、命令返回值等。

  解決該問題的方法之一是通過明確指定的Shell來啟動真正需要的里程。比如:

  代碼如下:

  # 不確定遠端Shell的類型,顯式通過Bash Shell來啟動需要的進程

  $ rsh -n $host "sh -c '$command > /dev/null 2>&1'"

  另一種思路,則是通過一個wrapper程序來啟動真正的命令。

  通過rsh在遠端執行后臺進程

  想在遠端機器上執行后臺進程。命令rsh $host "$command &"是不起作用的,會導致本地的rsh進程不能結束。

  背后的原因應該是,$command的標準輸入輸出通常仍然綁定在rsh連接的socket上,從而導致本地的rsh進程無法讀取到文件結束符EOF。

  知道了原因就知道該怎么辦了,關鍵是關閉后臺進程續定在rsh連接上的標準輸入輸出。

  代碼如下:

  # 如果遠端Shell是C Shell

  $ rsh -n $host "$command >& /dev/null &"

  代碼如下:

  # 如果遠端Shell是Bash Shell

  $ rsh -n $host "$command > /dev/null 2>&1 &"

  代碼如下:

  # 不確定遠端Shell的類型

  $ rsh -n $host "sh -c '$command > /dev/null 2>&1 &'"

  但上面這樣重定向的辦法有個缺點是不能得到任何遠端進程的輸出,而有時我們希望獲得一些輸出信息。

  這時就需要遠端進程能夠以守護進程(daemon)的方式運行。

  這種情況下,rsh命令可以簡單地寫作:$ rsh -n $host "$command &"

  遠端后臺進程的內容用Tcl表示,大意如下:

  代碼如下:

  #/bin/env tclsh

  puts "I am a background job"

  puts "This Can Be Seen by Remote rsh Process"

  close stdout

  close stderr

  # rsh連接到此應該結束。

  puts "This Can NOT Be Seen by Remote rsh Process"

  更進就步,我們可以甚至忽略rsh命令中的后臺運行符:$ rsh -n $host "$command"

  這時遠端進程需要通過fork的方式結束自己,并啟動真正的后臺進程(守護進程)。

  rsh進程的阻塞和超時處理

  在程序中調用rsh $host $command時可能由于各種奇怪的原因發生rsh進程的阻塞,這不是我們希望看到的。

  我們希望設置一個超時(timeout)機制來解決這個問題。

  在Tcl程序中的一種實現可以這樣: TODO

  TCP Connection連接數過多引起的rsh失敗

  監控郵件顯示rsh $host $command命令失敗,錯誤提示為“poll: protocol failure in circuit setup"

  懷疑是網絡連接數過多所引起。

  rsh $host $command 的網絡連接過程

  命令rsh $host連接遠程主機的513端口。

  命令rsh $host $command則連接遠程主機的514端口,并隨后發送一個本地端口號給遠程主機,要求遠程主機建立一個新的TCP連接到這個端口(還不清楚這個新的連接有什么作用)。然后才是傳送命令和等待命令結束。

  這樣做的結果就是在rsh $host $command進程過多時,本地開放的端口資源被消耗完了,從而導致新的rsh $host $command失敗。

  這是rsh $host的使用則依然正常。

  這里提到的rsh的缺陷,也是建議盡量使用ssh的原因之一。

  沒有完全關閉的網絡連接:

  在遠程主機上kill掉相關的rsh進程后,會導致TCP連接沒有完全關閉。

  netstat命令顯示CLOSE_WAIT狀態,端口資源并沒有釋放出來。

  根據配置文件/proc/sys/net/ipv4/tcp_keepalive_time顯示,需要等待2個小時,那些端口才會因為超時而被真正關閉,從而釋放出來。

  代碼如下:

  %> netstat -a | grep localhost

  tcp 0 0 localhost:933 localhost:935 CLOSE_WAIT

  %> cat /proc/sys/net/ipv4/tcp_keepalive_time

  7200 ;# in seconds. = 2 hours

  %> echo "net.ipv4.tcp_keepalive_time = 120" >> /etc/sysctl.con

看過“Linux中rsh怎么遠程使用shell命令”的人還看了:

1.怎么在windows系統中使用linux的shell腳本

2.怎么查看Linux中的shell指南

3.Linux必學的幾個個命令

4.如何查閱Linux系統正在使用的Shell版本

5.如何在windows系統中使用linux的命令

6.Linux系統常用命令合集

1095161 主站蜘蛛池模板: 亚洲三区在线观看内射后入| 国产日韩综合av在线| 精品午夜福利短视频一区| 欧美日韩中文字幕久久伊人 | 亚洲精品无码日韩国产不卡av| 起碰免费公开97在线视频| 99在线 | 亚洲| 国产不卡一区二区三区视频| 国产成人无码免费视频麻豆| 五月综合激情婷婷六月| 亚洲熟妇自偷自拍另欧美| 亚欧美闷骚院| 四虎影院176| 国产亚洲精品2021自在线| 国产一级av在线播放| 一区二区三区综合在线视频| 风韵丰满熟妇啪啪区老熟熟女| AV无码免费不卡在线观看| 老少配老妇老熟女中文普通话 | 国产精品制服丝袜无码| 日韩有码中文字幕国产| 中文字幕第一页国产精品| 亚洲午夜福利网在线观看| 亚洲精品中文字幕尤物综合| 久久大香伊蕉在人线免费AV| 亚洲国产精品久久久天堂麻豆宅男 | 国产精品高清一区二区三区| 欧美人与动欧交视频| 人妻中文字幕精品系列| 四虎永久在线高清免费看| 国产午夜亚洲精品久久| 国产成人综合网在线观看| 最新国产精品好看的精品| 久久久久香蕉国产线看观看伊| 91久久精品国产性色也| 国产精品亚洲精品日韩已满十八小 | 国产福利片一区二区三区| 亚洲熟女乱色综一区二区| 欧美国产日韩久久mv| 国产SM重味一区二区三区| 免费a级毛片18以上观看精品|