It's the same argument order for mv and cp, also the same for rsync and scp<p>Hell, it's even the same argument order for git-clone.<p>Pretty much all command lines use "source destination" order.<p>Why is 'ln' confusing? Because people think of "linking" in a backwards way, it seems that if you're creating a link from A -> B, A is the source and B is the destination. But that's not the meaning of "source destination" that command lines expect<p><pre><code> mv B A
</code></pre>
A is the new B<p><pre><code> cp B A
</code></pre>
A is the new B, but B is still there<p><pre><code> ln -s B A
</code></pre>
A is the new B, except it's just a link, and yes, B is still there.<p>B is the source, A is the destination. B is the source of the data, A is the destination for that data; the command will create 'A' (or modify it), that's why it's the destination.<p>For the link itself, B is the destination, but for the operation of creating the link, B is the source, and that's the meaning that's consistent with all other commands.