<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Files_transferred_over_shell_protocol</id>
	<title>Files transferred over shell protocol - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Files_transferred_over_shell_protocol"/>
	<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Files_transferred_over_shell_protocol&amp;action=history"/>
	<updated>2026-10-26T05:23:08Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>http://debianws.lexgopc.com/wiki143/index.php?title=Files_transferred_over_shell_protocol&amp;diff=2981904&amp;oldid=prev</id>
		<title>imported&gt;Cedar101: /* Session initiation */ sxhl</title>
		<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Files_transferred_over_shell_protocol&amp;diff=2981904&amp;oldid=prev"/>
		<updated>2025-03-20T11:38:11Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Session initiation: &lt;/span&gt; sxhl&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{short description|Computer protocol}}&lt;br /&gt;
{{More citations needed|date=December 2009}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Files transferred over Shell protocol&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;FISH&amp;#039;&amp;#039;&amp;#039;) is a network [[Protocol (computing)|protocol]] that uses [[Secure Shell]] (SSH) or [[Remote Shell]] (RSH) to [[file transfer|transfer files]] between computers and manage remote files.&lt;br /&gt;
&lt;br /&gt;
The advantage of FISH is that all it requires on the server-side is an SSH or RSH implementation, [[Unix shell]], and a set of standard [[Unix]] utilities (like [[ls]], [[cat (Unix)|cat]] or [[dd (Unix)|dd]]—unlike other methods of remote access to files via a remote shell, [[Secure copy|scp]] for example, which requires &amp;#039;&amp;#039;scp&amp;#039;&amp;#039; on the server side). Optionally, there can be a special FISH server program (called &amp;#039;&amp;#039;start_fish_server&amp;#039;&amp;#039;) on the server, which executes FISH commands instead of Unix shell and thus speeds up operations.&lt;br /&gt;
&lt;br /&gt;
The protocol was designed by Czech Linux Kernel Hacker, Pavel Machek, in 1998 for the [[Midnight Commander]] software tool.&amp;lt;ref&amp;gt;[https://github.com/MidnightCommander/mc/blob/master/src/vfs/fish/fish.c File: &amp;#039;&amp;#039;Fish.c&amp;#039;&amp;#039; - via Midnight Commander Official Repository]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Protocol messages ==&lt;br /&gt;
Client sends text requests of the following form:&lt;br /&gt;
&lt;br /&gt;
 #FISH_COMMAND arguments...&lt;br /&gt;
 equivalent shell commands,&lt;br /&gt;
 which may be multi-line&lt;br /&gt;
&lt;br /&gt;
Fish commands are all defined, shell equivalents may vary.&lt;br /&gt;
Fish commands always have priority: the server is expected to execute a fish command if it understands it. If it does not, however, it can try to execute a shell command.&lt;br /&gt;
When there is no special server program, Unix shell ignores the fish command as a comment and executes the equivalent shell command(s).&lt;br /&gt;
&lt;br /&gt;
Server replies are multi-line, but always end with&lt;br /&gt;
&lt;br /&gt;
 ### xyz&amp;amp;lt;optional text&amp;gt;&lt;br /&gt;
&lt;br /&gt;
line. &amp;lt;code&amp;gt;###&amp;lt;/code&amp;gt; is a prefix to mark this line, &amp;lt;code&amp;gt;xyz&amp;lt;/code&amp;gt; is the return code.&lt;br /&gt;
Return codes are a superset to those used in [[FTP]].&lt;br /&gt;
The codes 000 and 001 are special, their meaning depends on presence of server output before the end line.&lt;br /&gt;
&lt;br /&gt;
== Session initiation ==&lt;br /&gt;
The client initiates SSH or RSH connection with {{code|echo FISH:;/bin/sh|fish}} as the command executed on remote machine. This should make it possible for the server to distinguish FISH connections from normal RSH or SSH.&lt;br /&gt;
&lt;br /&gt;
The first two commands sent to the server are &amp;lt;code&amp;gt;FISH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;VER&amp;lt;/code&amp;gt; to negotiate FISH protocol, its version and extensions.&lt;br /&gt;
{{sxhl|2=fish|&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
 #FISH&lt;br /&gt;
 echo; start_fish_server; echo &amp;#039;### 200&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 #VER 0.0.2 &amp;lt;feature1&amp;gt; &amp;lt;feature2&amp;gt; &amp;lt;...&amp;gt;&lt;br /&gt;
 echo &amp;#039;### 000&amp;#039;&lt;br /&gt;
}}&lt;br /&gt;
The server may reply to VER command with a lines like&lt;br /&gt;
&lt;br /&gt;
 VER 0.0.0 &amp;lt;feature2&amp;gt; &amp;lt;...&amp;gt;&lt;br /&gt;
 ### 200&lt;br /&gt;
&lt;br /&gt;
which indicates supported version of the FISH protocol and supported extensions.&lt;br /&gt;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
* [[Midnight Commander]]&amp;lt;ref&amp;gt;{{cite web | url=https://github.com/MidnightCommander/mc/blob/master/src/vfs/fish/fish.c | title=Mc/Fish.c at master · MidnightCommander/Mc | website=[[GitHub]] }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[Far Manager#Linux, MacOS and BSD version|far2l]]&amp;lt;ref&amp;gt;{{cite web | url=https://github.com/elfmz/far2l/issues/1819 | title=Feature: Consider porting FISH(FIle transfer over SHell filesystem) from Midnight Commander · Issue #1819 · elfmz/Far2l | website=[[GitHub]] }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[Lftp]]&amp;lt;ref&amp;gt;{{cite web | url=https://github.com/lavv17/lftp/blob/master/src/Fish.cc | title=LFTP/SRC/Fish.cc at master · lavv17/LFTP | website=[[GitHub]] }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* fish:// [[KDE]] [[KIO|kioslave]]&amp;lt;ref&amp;gt;{{cite web | url=https://github.com/KDE/kio-extras/blob/master/fish/fish.cpp | title=Kio-extras/Fish/Fish.CPP at master · KDE/Kio-extras | website=[[GitHub]] }}&amp;lt;/ref&amp;gt; (with [[konqueror]], [[Krusader]] or [[Dolphin (file manager)|Dolphin]])&lt;br /&gt;
* fish as [https://github.com/greyltc/tcl-vfs/blob/master/library/template/fishvfs.tcl tcl-vfs]&lt;br /&gt;
* FISH was implemented in [[Emacs]] TRAMP some time ago, but support was removed&amp;lt;ref&amp;gt;[https://github.com/emacs-mirror/emacs/commit/03c1ad4351c10ec998410e8d34f52ac4a1a0decd#diff-96ee1cf8a36451f16ddf3f468f6ac74643eeee171d17054ca0c8cbf6653a26a8 related commit in Emacs]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{cite web | url=https://lists.gnu.org/archive/html/tramp-devel/2010-09/msg00001.html | title=Re: Tramp&amp;#039;s fish method }}&amp;lt;/ref&amp;gt; (although TRAMP still can use shell connections in a similar way using tramp-sh.el script file)&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[SSHFS]]&lt;br /&gt;
* [[SSH File Transfer Protocol]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://cvs.savannah.gnu.org/viewcvs/mc/mc/vfs/README.fish?view=markup README.fish from Midnight Commander]&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Files Transferred Over Shell Protocol}}&lt;br /&gt;
[[Category:Network file transfer protocols]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Cedar101</name></author>
	</entry>
</feed>