|
Chapter 50 Help--Online Documentation, etc.
|
|
For new UNIX users, one common frustration is that error messages are
often nonexistent, usually terse, and often extremely obscure.
Something like Command not found
is reasonably self-explanatory,
most of the time; but what about You don't exist. Go away.
?
Here, I cover some of the more common, obscure, or
amusing messages that are around [or were
around. Many versions of UNIX have been "sanitized."
Instead of "Intruder alert!," for example, SunOS 4.1.3 says
"no login associated with uid num
."
Pity. :-)
-JP
].
I'll try to keep it brief, which
means that it will be far from comprehensive.
A complete list of all
the messages you might get could easily fill a book - and lots of the
messages report situations that you'd have to try very
hard to
reconstruct.
arguments too long
UNIX has an unfortunate limit to the maximum length (in characters) of
all arguments you can put on the command line.
This limit was
originally fairly small; in the past few years, it's become
quite large (5120 characters on SVR4), but no one has yet fixed the
basic problem.
So if you give a command like ls
/*/*/*/* (15.1
)
,
you're very likely to find out that your argument list is too long.
Workarounds for this problem are discussed in articles
9.21
and
9.23
.
awk: bailing out near line
n
You're running an
awk
(33.11
)
script that has a syntax error.
The standard awk
is incredibly uninformative about syntax
errors; this is all the help you're likely to get.
Newer versions
(like
nawk
and gawk
(33.12
)
)
have more intelligent error messages.
bad magic number
You're most likely to get this message when you give a UNIX command.
You can also get this message from programs like ld
, the link
editor for programmers.
A "magic number" is a special number in an executable file that
tells the kernel what kind of file it's dealing with.
If you get this
message, the file you're trying to execute may have been corrupted; or
it may be an executable for another kind of computer;
or it may not be an executable file at all.
broken pipe
This message appears when you're running a pipeline, and one part of
the pipeline terminates before the rest.
For example, say you're
running the command:
% ls -l | more
If the more
program quits (for any reason, like using its
"quit" command) before
it has read all the data from ls
, you have a "broken
pipe."
bus error (core dumped)
This is similar in nature to a segmentation fault.
There's a subtle
difference in that a "bus error" means that the kernel didn't detect the
problem on its own; the memory system (i.e., hardware) realized that
there was a problem.
On many UNIX systems, this message can mean that you're trying to do
an I/O operation incorrectly - you may be trying to access a device
that doesn't exist, or something of that nature.
What does I/O have
to do with memory? A lot, but that's beyond the bounds of this book.
somecmd
: command not found
You probably either misspelled the name of the command or it isn't in your
search path (8.7
)
.
The more insidious form of this error happens when you're writing a
script for the shell, Perl, awk
, etc. with the
#!
notation (45.3
)
.
You double-check the command name and your path;
which
(50.8
)
tells you the command can be found.
The trouble is probably an incorrect pathname for the interpreter,
like #!/bin/hs
for an sh
script.
cross-device link
You attempted to create a hard link to a file on another filesystem.
Try a
symbolic link (18.4
)
instead.
directory not empty
You tried to delete a directory that's not empty, and rmdir
won't
let you.
The solution is simple enough; but
often, when you try to list the directory, it will look empty.
Did
you check for
"invisible" filenames (16.11
)
(most likely, filenames beginning
with a dot)?
There are probably a few "turds" left over from some
editing session.
If you're absolutely sure that none of these
invisible files are meaningful, just use
rm -rf
(23.10
, 23.17
)
.
intruder alert!
Comes from whoami
, and means that whoami
can't look you up in
the
/etc/passwd
(36.3
)
file.
This probably means that someone managed
to delete or corrupt /etc/passwd
.
make: must be a separator on rules line 46
The bane of everyone who uses
make
(28.13
)
.
make
's "rules" lines must begin with a TAB character.
Spaces are not
acceptable.
This means that you used spaces, rather than a tab.
Some
editors (and reportedly, even some networks) will change tabs to
spaces automatically - so even if you've been careful to observe the
rule, you may still run across this message.
not a typewriter
As someone on the Net said, "Damn right, this isn't a typewriter.
That's a problem?"
Seriously, though:
this is an obsolete message
that still crops up occasionally.
It means that the program attempted
to perform some I/O operation that would be legal on a terminal,
except that it wasn't writing to a terminal:
it was writing to a file,
or to a pipe, etc.
not enough memory
There isn't enough
swap space (52.9
)
to run your program.
Note that many
modern UNIX systems allow the system administrator
to create new "swapping files";
this may help you to work around the problem without reconfiguring a
disk drive.
Under SunOS, for example, you'd use the mkfile
and
swapon
commands to solve this problem.
segmentation fault (core dumped)
A segmentation fault means that the program you're running attempted
to read or write some address in memory that wasn't assigned to it.
If it's a program that you wrote, a segmentation fault probably means
that a pointer is pointing to something strange.
If it's a standard
UNIX utility, well - it really means the same thing (not that it
helps).
Most likely, though, you've given the program strange
input - the input may be illegal, there may be more than the program
can handle, etc.
typesetter busy
I've seen this when using
troff
(43.12
)
;
it usually means that you haven't specified the output device
correctly; i.e., that you haven't used the -t
option, which
sends the output to standard output, for post-processing by some
translator.
Actually, it's very rare for a user to invoke troff
directly.
troff
is usually run through some kind of a shell
script.
If you see this message, the shell script is doing the wrong
thing.
What does the message really mean?
Simple.
troff
, on
its own, generates output for a C/A/T phototypesetter.
These
typesetters were obsolete 10 or 15 years ago, and are now probably all
rusting in junk heaps.
But nobody bothered to change troff
. If
you don't include the -t
option, troff
tries to send the
output to the typesetter; when it fails (because the typesetter
doesn't exist), troff
decides that the typesetter must be "busy."
who are you?
Comes from
lpr
(43.2
)
,
and means that lpr
can't look you up in the
/etc/passwd
(36.3
)
file.
This probably means that someone managed
to delete or corrupt /etc/passwd
.
you don't exist. Go away.
I've never actually seen this message, though it's part of the UNIX
mythology.
Reportedly, it can come from the
talk
(1.33
)
program when you try to talk from a tty
or (usually) a
pty
(41.8
)
that isn't in the list of logged-in users, /etc/utmp
.
One of our readers
got the message as he tried to reboot his computer
after accidentally removing the root
entry in /etc/passwd
8-(
.
While a lot of the error messages are more-or-less standard, a lot of
them vary from vendor to vendor; some vendors have tried to protect
you from the worst abuse.
I hope that all systems
incorporating the legendary "Don't you hate obscure messages" error
message long since disappeared.
|