> 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