Descritor de arquivo
O número que o kernel usa internamente para saber a qual arquivo, socket ou pipe aberto um processo está se referindo.
Os números são índices numa tabela que o kernel mantém por processo. Três já nascem ocupados: 0 é a entrada padrão, 1 a saída padrão, 2 a saída de erro padrão. O próximo open() sempre recebe o menor número livre disponível — um comportamento que o shell explora deliberadamente ao redirecionar streams com truques como 2>&1.
"Tudo é um arquivo" no Unix, na prática, quer dizer que tudo é um descritor de arquivo — o mesmo read() e o mesmo write() funcionam contra uma conexão de rede tanto quanto contra um arquivo de texto comum. A quantidade é limitada por processo, controlada por ulimit -n, e too many open files está entre os erros de produção mais comuns em servidores sob carga pesada. Quase sempre é alguém esquecendo de fechar o que abriu.