Muitos utilitários que trabalham com arquivos aceitam stdin (entrada padrão) como entrada em fluxo ou aceitam o nome do arquivo como um parâmetro. Seus exemplos < file estão redirecionando a saída do arquivo para o utilitário. O arquivo foi aberto pelo shell e passado para o seu utilitário via stdin .
Por outro lado, com cat file , cat está lidando com a abertura e a leitura do arquivo , e nenhum redirecionamento está envolvido.
ls nunca lê um arquivo, portanto não é necessário um nome de arquivo como parâmetro para abrir e ler o arquivo (ele aceita máscaras de nome de arquivo). Para ls , a ação de redirecionamento é, na verdade, ignorada porque nada no processo lê o arquivo aberto pelo shell ...
Para determinar como qualquer utilitário se comporta, basta digitar man utility-name no terminal ... man é uma contração de manual ... por exemplo. man cat apresenta-lhe o manual do gato