Há duas coisas confundindo você. A primeira é que existem limites rígidos e flexíveis para cada recurso. ulimit -n 512
define ambos deles, mas ulimit -a
mostra apenas o limite flexível. Quando o limite rígido for definido, só pode ser diminuído.
$ ulimit -n
256
$ ulimit -Hn # There's no initial hard limit
unlimited
$ ulimit -n 512 # This sets both the hard and soft limits
$ ulimit -n
512
$ ulimit -Hn
512
$ ulimit -n 1024 # Once set, the hard limit cannot be increased
-bash: ulimit: open files: cannot modify limit: Operation not permitted
A segunda coisa que está te confundindo é que sudo ulimit
não faz o que você acha que faz. Ele gera um subprocesso (raiz), define os limites de arquivos abertos para esse subprocesso e, em seguida, sai do subprocesso. Os limites são uma configuração por processo, portanto, fazer uma alteração neles não faz nada útil.