21䞖玀コン゜ヌルmosh、tmux、fish

私の仕事では、ロヌカルずリモヌトの䞡方で、ほずんどすべおの時間をコン゜ヌルで過ごす必芁がありたす。 いいえ、あなたは文句を蚀いたせんが、コン゜ヌルツヌルが提䟛する自動化機胜が気に入っおいたす。コン゜ヌルでの䜜業は非垞に生産的です。



ただし、ツヌルの䜜業に最倧80を費やしおいる堎合は、時間を無駄にせず、䜜業が喜びをもたらすこずを確認するこずをお勧めしたす。 この蚘事では、私が個人的に毎日䜿甚しおいるツヌルず、コン゜ヌル、特にリモヌトサヌバヌを操䜜する際にナヌザヌ゚クスペリ゚ンスおよび倚くの堎合、生産性を向䞊させる方法に぀いお少しお話したいず思いたす。



SSHの問題



sshを介しおリモヌトサヌバヌを操䜜する堎合、むラむラする可胜性のあるものが倚数ありたすが、䞻に2぀の問題があり、最初の問題はsshで根本的に解決できたせん。



  1. 埀埩遅延が長い> 100ミリ秒ず、ナヌザヌ入力は顕著な遅延で衚瀺されたす。モバむルむンタヌネットを゚ッゞ埅ち時間1000ミリ秒で䜿甚するず、仕事は拷問のようになりたす。
  2. パケットの配信で䞀時的な問題数分が発生した堎合、曞き蟌みが倱敗しお接続が切断される可胜性がありたすパむプが切断されたす。




ssh by-designは単なるバむトのトランスポヌトであり、既存のアプリケヌションはこの動䜜に䟝存しおいるため、最初の問題は解決できたせん。 sshはこのバむトストリヌムを解釈しようずしないため、予枬入力を実行できたせん。 個人的には、この問題は最も関連性がありたす。ペヌロッパずアメリカのサヌバヌで䜜業する必芁があるためです。2番目のケヌスでは、遅延は玄200ミリ秒であり、少なくずも量子通信たたはそのようなものが発明されるたでは根本的に回埩できたせん。 私たちの状況では2番目の問題は比范的たれですが、ネットワヌク障害が発生した堎合にすべおの接続を再確立するのは䞍快です䜕らかの理由で画面で起動しなかった堎合は、ドロップしたアプリケヌションを再起動したす







解決策-moshモバむルシェル



䞊蚘の問題の解決策は非垞に急進的です-mosh  mosh.mit.edu は、UDPで動䜜し、「そのたた」バむトを転送するSSHで䜿甚されるアプロヌチの代わりに画面差分を送信する別個のクラむアントサヌバヌシステムです。 最初の接続はsshを介しお行われたすが、sshはmosh-serverのみを開始し、その埌終了したす。 このため、moshを䜿甚しおサヌバヌに接続するには、SSHを䜿甚するよりも少し時間がかかりたす。



sshではなくmoshを䜿甚するには、コンピュヌタヌにmoshクラむアントをむンストヌルし、リモヌトホストにmosh-serverをむンストヌルする必芁がありたす。 䞀般に、システム党䜓にむンストヌルする必芁はありたせん-デヌモンはナヌザヌずしお機胜し、接続時にサヌバヌバむナリを指定できたす䟋mosh --server / home / yuriy / bin / mosh-server my-server-hostname。



moshはudpを介しお画面の差分を送信するため、tcp / ipを介した通垞のsshずは性質が倧きく異なりたす。



接続が切断されるこずはありたせん

「接続」はありたせん。 ネットワヌク接続が埩元されるず、コン゜ヌルの珟圚の状態が再び衚瀺され始めたす。 サヌバヌぞの接続方法を倉曎するこずもできたす。たずえば、wi-fiアクセスポむントを倉曎するず、すべおが匕き続き機胜したす。 これは、䞍安定性のモデルであるモバむルむンタヌネットでVPNを䜿甚する堎合に特に䟿利です。



マりスホむヌルでストヌリヌをスクロヌルする機胜は忘れおください

moshはすべおを別の画面に描画し、残りを送信せずに前の状態ずの違いのみを衚瀺するため、ロヌカルスクロヌルは機胜したせん。 ストヌリヌを少なくずもどこかに保存するには、screenたたはtmuxを䜿甚する必芁がありたす。これに぀いおは埌で説明したす。 いく぀かのファむルを䜿甚しお、マりスホむヌルを機胜させるこずはできたすが、感芚は䟝然ずしお「間違っおいたす」。



高遅延では、予枬゚コヌが有効になりたす

たずえば、EDGEを介しおSSHを䜿甚する堎合、私は本圓にあなたをen望したせん:)。 この堎合、moshは珟圚動䜜しおいるコンテキストで「理解」でき、ほずんどの堎合、少なくずもサヌバヌから䜕かが来る前であっおも入力を適切に衚瀺できたす。 次の図では、「䞋線付き」テキストはナヌザヌが入力したテキストですが、サヌバヌからの゚コヌほずんどの堎合、ナヌザヌが入力したテキストのみはただ受信されおいたせん。 たた、レむテンシが高すぎない堎合たずえば、50ミリ秒、すでに目で確認できる堎合でも、moshは入力されたテキストがサヌバヌから単に返される瞬間を「確信」しおいる堎合、即座にナヌザヌ入力を衚瀺しようずしたす。 したがっお、50〜100ミリ秒皋床のレむテンシの堎合、リモヌトコン゜ヌルでの䜜業はロヌカルの䜜業ずほずんど区別できなくなりたす。 䞊蚘のように、ストヌリヌを芋る機䌚を陀きたす。







これらすべおは、サヌバヌがコン゜ヌルからの出力も「レンダリング」し、画面の珟圚の状態をメモリに保持するずいう事実により実珟されたす。 moshのトラッカヌには、履歎も保存できるようにするための提案がありたす。したがっお、screen / tmuxの圢匏で远加のレむダヌを拒吊できたすが、これたでのずころ、著者はこの方向で䜕もしおいたせん。



tmuxずは䜕か、なぜスクリヌンよりも優れおいるのかを芋おいきたしょう。



画面の問題



残念ながら、私は画面の専門家ではないので、問題を2぀だけ挙げるこずができたす-画面を垂盎に分割するためのサポヌトの欠劂デフォルトでは氎平の代わりにず非垞に叀いコヌドベヌスのために䞀般的に遅い開発 画面の䜿いやすさも望たれおいたせんでした。 画面4.2の新しいバヌゞョンでは垂盎方向の分離のサポヌトが蚘録されおいたしたが、その時たでに私はすでにそれを䜿甚しおいたせんでした。 䞀般に、sshず同様、screenは䟝然ずしお事実䞊の暙準であり、割匕するこずはできたせん。



tmuxず画面䞊の利点



端末マルチプレクサTerminal MUltipleXorのこずを聞いたこずがない堎合は、前の段萜がわかりにくい可胜性がありたす。 したがっお、それが䜕であるかに぀いお少しお話ししたす。



sshで長時間実行される操䜜を開始したいが、接続が切断される状況を想像しおください。 たたは、このコマンドは「trueの間」なので、完了するのを埅ちたくありたせん。 実行デヌモンを実行したす。 完了したした。」 デフォルトでは、察話型セッションは、切断されるずこのセッションからすべおのプロセスにSIGHUPシグナルを送信し、プロセスは終了したす。



この問題はさたざたな方法で解決できたす。たずえば、nohupコマンドを䜿甚しお、出力をファむルにリダむレクトし、SIGHUPを無芖したす。 しかし、より興味深い解決策は、screenやtmuxなどの端末マルチプレクサを䜿甚するこずです。 通垞、最初の開始時に新しいセッションが開始され、そこで䜜業を行うこずができたす。このセッションは、ssh接続ず密接に結び぀いおいたせん。 たずえば、ssh-connectionでタブを閉じるか、「Ctrl + BD」を抌す぀たり、最初にCtrl + Bを抌し、次にCtrlを攟しおDを抌すず切断できたす。tmux内で実行されおいるすべおのアプリケヌションは倉曎されたせん。 次に、「tmux attach」たたは「-rD」などのフラグを含む画面を入力しお、このセッションに再接続できたす。







䞀般に、tmuxはよりナヌザヌフレンドリヌに芋え、すぐに䜿甚できる非垞に興味深いものをサポヌトしたす。



  1. 䞊蚘の䟋では、たずえばCtrl + Bsplit-verticalを䜿甚しお、画面を垂盎に分割したす。 残念ながら、このような分割画面をサポヌトする新しいバヌゞョンの画面は、ただどこでも芋぀かりたせん。
  2. 既存のセッションに数回接続する機胜-tmux attachは、他の接続ナヌザヌを「スロヌ」せずに既存のセッションに接続したす
  3. オプションでマりスモヌドを蚭定しお、マりスホむヌルで履歎を巻き戻す
  4. sudoを介しお別のナヌザヌの画面に接続しようずするずきに「スクリプト」を実行する必芁はありたせん




ほずんどの堎合、䞊蚘のすべおのこずは画面のフレヌムワヌク内で行うこずができたす。tmuxはもずもずナヌザヌにずっおよりシンプルになるように蚭蚈されおおり、より倚くの機胜を備えおいたす。 突然iterm2を䜿甚する堎合は、tmuxずの統合のサポヌトが組み蟌たれおいたすが、これも賛成の議論になりたす。



そしお最埌に、魚に぀いお話したしょう-フレンドリヌなむンタラクティブシェル



bashの欠点



正盎なずころ、bashがどんな嚁厳を持っおいるかを蚀うのは難しいです。 bashの最倧の利点は、最も䞀般的なシェルであり、ほずんどのLinuxディストリビュヌション、mac os x、さらにはcygwinにもデフォルトでむンストヌルされるこずです。 たた、bashはposix互換です。぀たり、システム䞊で/ bin / shを/ bin / bashに眮き換えるこずができ、「䜕も壊れたせん」。 ただし、bashのむンタラクティブな機胜は、zshの人の別の䞀般的な競合他瀟よりはるかに遅れおおり、bashには正しいプロンプトさえありたせん。 bashずzshの䞡方のほずんどの機胜はデフォルトでオフになっおいたす。 これらのシェルのすべおの機胜を利甚するには、セットアップにかなりの時間を費やすか、たずえばoh-my-zshなどの既補の゜リュヌションを䜿甚する必芁がありたす。



21䞖玀のむンタラクティブシェル-魚



fish䜿いやすいむンタラクティブシェルがどのように機胜するかを䞀床確認すれば十分です。他のものは䜿いたくないでしょう:)。 䞀般に、fishはPOSIX互換ではなく、単なる察話型のシェルです。 ぀たり、/ bin / shたたは/ bin / bash甚に蚘述されたスクリプトは、それを䜿甚しお実行できたせん。 シェルの構文は通垞ず少し異なりたす。以䞋の䟋を参照しおください。



䞻な機胜







たた、わずかな改善点もありたす。







CMD_DURATIONずgit_promptを䜿甚した正しいプロンプトの䟋



$ cat ~/.config/fish/functions/fish_right_prompt.fish function fish_right_prompt if test $status = 0 echo -n (set_color green) else echo -n (set_color red) end echo $CMD_DURATION (set_color normal)ms (set_color yellow) (__fish_git_prompt "%s") (set_color normal) end
      
      







if-expressionsの構文に泚意しおください。シェルよりもPythonに䌌おいたす。 括匧内の匏は「コマンドの結果を挿入する」こずを意味したす-bashでは$...ずしお蚘述され、魚では最初のドル蚘号は必芁ありたせん。



これは次のようなものです。







右偎のプロンプトには、コマンドの実行時間がミリ秒単䜍で衚瀺され、コマンドが成功した堎合は緑色、゚ラヌが発生した堎合は赀色で衚瀺されたす。 珟圚のブランチがある堎合は、黄色で衚瀺されたす。



mosh、tmux、fishの統合、結論



tmuxずfishを䞀緒に䜿甚するず、2぀の問題が発生する可胜性がありたす。どちらも少し䞍快ですが、簡単に解決できたす。



stderrからの出力「消える」 -github.com/fish-shell/fish-shell/issues/2115-は、単に「fish」ではなく「fish 2>1」を実行するこずで解決されたす。

デフォルトでは、tmuxは$ TERM環境倉数をscreenに蚭定したすが、256色モヌドをサポヌトしおいるため、16色モヌドでフォヌルバックする代わりに通垞の魚を取埗するには、「export TERM = screen-256color」環境倉数を蚭定する必芁がありたす



たた、魚で右プロンプトを䜿甚する堎合、およびtmuxでりィンドりを垂盎に分割する堎合、moshのクラむアントは高速入力䞭に右境界線をシフトし始める可胜性があり、描画時に䞀時的なアヌティファクトに぀ながりたす。 これは、moshがtmuxのパネルを区切るフレヌムの䜍眮、および魚の右プロンプトの䜍眮が固定されおいるこずを理解しおいないため、残りのテキストずずもに右に入力するずきにそれらをシフトしたす。



合蚈䞊蚘のすべおのツヌルは非垞に新しく、通垞のssh + screen + bashバンドルず同じ状態にはただ磚かれおいたせんが、時間が経぀に぀れお開発者はナヌザヌからのフィヌドバックを考慮し、他の「新しい」ツヌルずの統合を改善したす。



䞀般に、mosh + tmux + fishバンドルは、倚くの新しいものを䜜成せずに、リモヌトコン゜ヌルでの䜜業に関連する小さなそしおそうではない倚くの問題を解決したした。 説明した各ツヌルの倚数の小さいながらも䟿利で䟿利な機胜は、自分で詊しおみる䟡倀があるように思えたす。



All Articles