Tag Archives: linux

Too Many Links

There are too many hard links to a file or directory on a filesystem. The exact number allowed is file-system dependent. Eg /usr/src/linux-2.4.19/include/linux/sysv_fs.h contains

enum {
XENIX_LINK_MAX = 126, /* ?? / SYSV_LINK_MAX = 126, / 127? 251? / V7_LINK_MAX = 126, / ?? */ COH_LINK_MAX = 10000,

while /usr/src/linux-2.4.19/include/linux/ext3_fs.h has

define EXT3_LINK_MAX 32000

and /usr/src/linux-2.4.19/include/linux/reiserfs_fs.h has


(for maximum unsigned integer on the system).

This could be caused by a directory having too many subdirectories (each subdirectory has .. as a hardlink to it’s parent directory which causes that directory’s hardlink count to be increased by one. So yes, this does mean that you are limited to 32000 subdirectories in one directory in ext3, even if you have hashdirs enabled.) As a consequence of this you can stat(2) a directory and add one (for ..) and you will know how many directories are in the current directory. (or subtract one (for .) to find out how many subdirectories there are).

Some file systems (such as FAT) don’t have hardlinks so the hardlink count can’t overflow, and you can’t rely on the hardlink count of a directory to be representive of how many subdirectories it has.

What a confusing world we live in.

logging with script

While you can log everything with screen’s logging functionality, or tee it to some file, you can also use script.

Script makes a typescript of everything printed on your terminal. It is useful for students who need a hardcopy record of an inter‐active session as proof of an assignment, as the typescript file can be printed out later with lpr(1).

% script foo
Script started, file is foo
% ps
  PID TTY          TIME CMD
11448 pts/3    00:00:00 zsh
11511 pts/3    00:00:00 ps
Script done, file is foo
% cat foo
Script started on Fri Jun 18 10:13:14 2010
% ps
  PID TTY          TIME CMD
11448 pts/3    00:00:00 zsh
11511 pts/3    00:00:00 ps
% <ctrl +d>
Script done on Fri Jun 18 10:13:25 2010                            

rxvt-unicode with 256 colors

# Make a place for rxvt-unicode
mkdir rxvt-unicode
cd rxvt-unicode/
# Get the source
apt-get source rxvt-unicode
cd rxvt-unicode-8.4/
# Apply 256 color patch, it's included with the source
patch -p1 < doc/urxvt-8.2-256color.patch
# Make sure you have all depdencies to build it
sudo apt-get build-dep rxvt-unicode
# Build it
dpkg-buildpackage -us -uc -rfakeroot

This will build 3 packages.