thats because cat tries to open the noteid file of your rc shell (running as none). and not the noteid file of its own process (cat).
static void nonone(Proc *p) { if(p == up) return; if(strcmp(up->user, "none") != 0) return; if(iseve()) return; error(Eperm); } nonone() is always ok for p == up. in your case, p != up so it fails (as expected). -- cinap