<em id="0a85b"><option id="0a85b"></option></em>

<abbr id="0a85b"></abbr>

      <nobr id="0a85b"></nobr>
        <tr id="0a85b"></tr>
        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日韩精品| 337P日本欧洲亚洲大胆在线| 久久一日本道色综合久久| 男女高潮喷水在线观看| 久久成人亚洲香蕉草草| 好吊视频专区一区二区三区 | 国产在线观看毛带| 久久综合色最新久久综合色| 精品久久久中文字幕人妻| 扒开腿挺进岳湿润的花苞视频| 天堂中文8资源在线8| 国产精品午夜福利免费看| 人妻精品久久无码区| 污污污污污污WWW网站免费| 无码大潮喷水在线观看| 麻豆精品一区二区综合av| 国产亚洲一二三区精品| 亚洲精品色一区二区三区| 国产三级+在线播放| 国产精品黄色片在线观看| 国产jlzzjlzz视频免费看 | 无码福利写真片视频在线播放| 一级做a爰片在线播放| 亚洲日本国产精品一区| 极品人妻少妇一区二区| 亚洲一区二区国产精品视频| 少妇办公室好紧好爽再浪一点| 国产一区二区三区在线观看免费| 日韩人妻久久精品一区二区| 他掀开裙子把舌头伸进去添视频 | 国产麻豆放荡av激情演绎| 毛片av在线尤物一区二区| 色欧美片视频在线观看| 精品中文字幕一区在线| 日韩黄色av一区二区三区| 精品麻豆国产色欲色欲色欲WWW| 国产又黄又猛又粗又爽的a片动漫| 免费看亚洲一区二区三区| 一级二级三一片内射视频在线| 国产精品最新免费视频|