Como universal é a opção -L (referência simbólica de referência) do comando 'ls'?

2

Eu tenho alguns softwares que, entre outras coisas, precisam:

  • Avalie as permissões de rwxrwxrwx de um arquivo;
  • Trabalhe sob todos os tipos possíveis de Unix e Linux que você pode encontrar na natureza.

Atualmente, ele executa o comando ls -l . Se o arquivo é um link simbólico, eu tenho que obter as permissões do arquivo de destino. A opção -L funciona bem para isso.

A pergunta: existem sabores do Unix nos quais eu corro o risco de não estar disponível? Se sim, quais são? (Se eles são raros e antigos o suficiente, eu poderia simplesmente ignorar o problema.)

    
por JCCyC 29.11.2011 / 17:43

3 respostas

2

Bem, está no GNU , FreeBSD , OpenBSD e gerais BSD ls implementações, então eu diria que é muito provável que seja em qualquer lugar.

    
por 29.11.2011 / 18:02
6

Não analise ls se puder evitar. Dependendo do que você está fazendo, o utilitário test pode ser uma alternativa melhor.

test -r filename retornará sucesso se o arquivo for legível com as permissões do usuário atual e seguirá os links simbólicos automaticamente. Da mesma forma, -w e -x dirão se o arquivo é gravável ou executável. O comando test é especificado pelo POSIX e, portanto, deve funcionar com qualquer UNIX moderno.

Se você realmente precisa conhecer as permissões específicas do arquivo, ls pode ser a maneira mais portátil, contanto que você o use apenas em um arquivo por vez. Nesse caso, os sinalizadores -L e -l também são especificados por POSIX , portanto você deve estar razoavelmente seguro. (Veja " Não Analise ls " para um pouco mais de comentários sobre a portabilidade dos campos de saída de ls -l . )

Outra opção pode ser escrever um pequeno programa em C para aproveitar os stat(2) chamada de sistema, que estará disponível em todos os UNIX sob o sol. Se essa é uma pequena parte de um software maior que já está sendo compilado a partir de C, essa pode ser a melhor opção.

    
por 29.11.2011 / 18:37
3

Está no SUSv3 (Posix 2001) mas não no SUSv2 (também conhecido como Unix98).

    
por 29.11.2011 / 18:55