ln(1) and System V
David Harrison
harrison at utfyzx.uucp
Tue Nov 1 05:17:01 AEST 1988
Recently Geoff Collyer (utstat!geoff) has pointed out that under System
V the command:
ln old new
will destroy "new" if it already exists. Historically and under other
UNIX versions the same command will complain and refuse to make the link.
Geoff calls the System V behaviour "an unintuitive shock". It certainly
breaks any program that relies on `ln' refusing to link to "new" as a way
of doing locks (including parts of Cnews).
There certainly are lock problems under SV: the print spooler will
croak if it is fed a large number of jobs nearly simultaneously; a
number of users changing their passwords nearly simultaneously can
leave you without an /etc/passwd file; etc. Both of these have happened
to me and the fix I use is to write a SV IPC onionskin around these
commands with semaphores to implement real kernel-level locks.
I have some questions and one comment on this situation.
First the questions: if one re-writes ln (as Geoff has done) to
reproduce the old behaviour and replaces the SV `ln' in /bin
with this version what will break? People have been using the
old `ln' behaviour for some years, but are people now relying on
the new behaviour too? If so, how? Will implementing such a change
make passwd and lp more reliable with lots of users? What does
POSIX say?
Finally the comment: if one adheres to traditional UNIX philosophy
the System V `ln' is correct. It now behaves just like its cousins
`cp' and `mv': tell it to do something and it will. If one wishes
to test for the existence of file "new" this philosophy says that
one should use a tool for that, not some behaviour of a program that
is supposed to make links. I know one problem with the above
statement; code like:
if [ !exists new ] # new command `exists'
then
ln old new
fi
leaves a terrible window of vulnerability between the test and the
link. What is needed is a proper lock mechanism, and System V provides
it with its IPC facilities in the kernel where they belong.
--
David Harrison, Dept. of Physics, Univ. of Toronto | "Why do 3 notes make a
UUCP: {utgpu,sq,oscvax}!utfyzx!harrison | triad and not a triangle?"
BITNET: HARRISON at UTORPHYS | - Ernst Mach
More information about the Comp.unix.wizards
mailing list