> On Sa, 28 Jan 2012, Tony Mechelynck wrote:
>
>> Beware that the order of the arguments of the "ln" command is
>> unintuitive: target first, then link name.
>
> If you think of it as a command, that always needs a target, but does
> not necessarily need a link name, then it is not intuitive.
The ``ln`` command became intuitive to me when I realized that
its syntax is uniform with that of the ``cp`` command:
Copy source file(s) into destination:
  $ cp source destination
  $ cp source1 source2 source3 destination
Hard link source file(s) into destination:
  $ ln source1 source2 source3 destination
  $ ln source destination
Symlink source file(s) into destination:
  $ ln -s source1 source2 source3 destination
  $ ln -s source destination
With only one source, ``destination`` may be a directory or a
filename.  With multiple sources, ``destination`` must be a
directory.
In all of the above cases, the last argument on the right
represents where to create the new item(s).  Each new item is
either a copy of an existing file, a hard link to an existing
file, or a symlink to an existing file.  At some level, all of
the new items "point back" to the original source.  A symlink
points back in the most directly visible way, since the ``ls``
command uses an arrow to show the linkage:
  $ mkdir ~/tmp/linkdemo
  $ cd ~/tmp/linkdemo
  $ touch source
  $ ln -s source symlink
  $ ls -l symlink
  lrwxrwxrwx 1 mike mike 6 2012-01-28 08:06 symlink -> source
 
In my opinion, this arrow notation is what makes the
command-line syntax seem counter-intuitive, since ``symlink`` is
displayed on the left and ``source`` is on the right.  It helps
me to recall that ``symlink`` was created as a (linked) copy of
``source``, so it's pointing back to the original.
Hard links work similarly:
  $ ln source hardlink
  $ ls -li
  13239823 -rw-rw-r-- 2 mike mike 0 2012-01-28 08:06 hardlink
  13239823 -rw-rw-r-- 2 mike mike 0 2012-01-28 08:06 source
  13239824 lrwxrwxrwx 1 mike mike 6 2012-01-28 08:06 symlink -> source
The ``-i`` flag shows the "inode" number in the first column.
``hardlink`` and ``source`` now share the same inode number,
which means both filenames link to the same underlying stream of
bytes, so they are linked together.  For example:
  $ echo "Some new text" > source
  $ cat hardlink
  Some new text
  $ diff -s source hardlink
  Files source and hardlink are identical
This syntax has the nice feature that you can do wildcard copies
or links in the same way:
Copy multiple pictures to a backup directory:
  $ cp ~/pictures/*.jpg /path/to/backup/directory/
Symlink pictures of Snowmen into a separate directory:
  $ mkdir ~/tmp/snowmen
  $ ln -s ~/pictures/snowman*.jpg ~/tmp/snowmen
Michael Henry
-- 
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
 
No comments:
Post a Comment