Como lidar com utilitários com o mesmo nome, mas se comportam de maneira diferente entre variantes do Unix?

3

Por algum motivo, escolhi o Macbook como meu computador para gerenciar servidores Linux remotos.

Às vezes, encontro problemas com os utilitários que têm o mesmo nome, mas se comportam de maneira diferente entre esses dois sistemas operacionais.

Como eu usei find ./ -name 'vim*' -exec stat -c "%y %n" {} \; bem para encontrar arquivos e mostrar suas informações bem como:

2015-01-08 15:14:30.000000000 +0800 ./vimrc

Mas isso não funcionará no meu OSX. Depois de ler o manual, acho que devo usar outros sinalizadores como -f "%t%Sm %N" para obter um resultado:

Mar  5 18:22:00 2015 ./vimrc

Esse tipo de coisa realmente me incomoda.

Na minha opinião, acho que a versão do Linux de gadgets semelhante a stat é melhor, porque tem mais desenvolvedores contribuindo para isso e continua atualizando. E a maioria dos usuários do OSX não usa esses gadgets, eles usam a GUI. Assim, muitos de seus gadgets se comparam ao Linux como antiguidade.

Eu realmente gostaria de tratar a versão do Linux como padrão, e deixar a versão do OSX (não toque neles). Mas há uma voz irritante no meu cérebro que diz que isso não está certo, diz "você deve encarar o problema em vez de evitá-lo", "Aprenda todos eles", disse.

Como devo lidar com utilitários que tenham o mesmo nome, mas com comportamentos diferentes no Unix e no Linux?

    
por Zen 05.03.2015 / 11:38

2 respostas

3

Unix tem um complexo histórico . Com o tempo, as muitas variantes acumularam muitos comandos e opções diferentes.

Existe um padrão que a maioria dos sistemas do tipo Unix, ou melhor, uma hierarquia de padrões: POSIX , e POSIX + XSI (anteriormente conhecido como Single Unix - Unix único é agora POSIX com as partes XSI marcadas como opcionais). Você pode contar com qualquer coisa do tipo Unix e não antiga ou incorporada implementando o POSIX-2004, conhecido como Single Unix v3, também conhecido como Open Group Base Specification, Edição 6 ; A versão mais recente (POSIX-2008 = SUSv4 = Problema 7) não é totalmente suportada em qualquer lugar até hoje.

Se você estiver interessado apenas no OSX (e no FreeBSD, que é de onde a maioria dos utilitários OSX são) e no Linux não embarcado, você pode contar com mais comandos e opções: ambos têm mais recursos que a média. Você precisa verificar o manual para ver o que ambos os sistemas operacionais suportam.

Sistemas Linux não embarcados (e alguns sistemas Linux embarcados de ponta), assim como o Cygwin, vêm com GNU utilitários. Os utilitários GNU geralmente têm muitos recursos mais convenientes do que o restante da concorrência.

O comando stat é um exemplo onde o POSIX não diz nada, o OSX tem uma certa sintaxe e o GNU tem funcionalidade semelhante, mas com uma sintaxe diferente.

Você pode instalar utilitários GNU na maioria das variantes Unix. Para o OSX, consulte link .

Se manter o núcleo comum ou instalar as mesmas versões em todos os lugares é uma decisão pessoal. Se você tiver controle sobre todas as máquinas que você usa, apenas certifique-se de que todas elas tenham todos os utilitários desejados. Se você escreve um código que roda em máquinas onde nem sempre consegue instalar tudo o que deseja, então você precisa se ater ao material portátil.

    
por 06.03.2015 / 01:25
4

Não é Unix vs. Linux, mas sim BSD vs. GNU.

Ambas as famílias estão disponíveis como código-fonte e podem ser instaladas em qualquer sistema operacional. Apenas pesquisando "GNU for Mac" encontrou várias páginas com instruções sobre como usar o Homebrew, ou outro gerenciador de pacotes OSS para mac, para substituir as ferramentas BSD pela sua versão GNU.

Sobre como manter a prudência ao trabalhar com os dois conjuntos de ferramentas:

A maioria das diferenças que vi caiu em dois campos: mais opções e mais flexibilidade de análise.

O "mais opções" é o que você se refere na pergunta: as ferramentas GNU foram criadas usando as ferramentas BSD e System V como exemplos, então os autores tiveram a chance de começar do zero e adicionar algumas opções extras, especialmente em opções de exibição extravagantes. Alguns deles são comuns para várias ferramentas. Por exemplo, muitos comandos aceitam uma opção -h ou -H para exibir "unidades legíveis por humanos", como Kilo-Mega-Giga-, etc.

A flexibilidade de análise vem porque a maioria dos comandos usa a biblioteca getopt , que, na versão GNU, é mais moderna e capaz. A consequência mais óbvia é que, enquanto a maioria dos comandos é documentada como:

command [options] file file...

se eles usarem a biblioteca getopt do GNU, as opções podem ser intercaladas com os arquivos. Por exemplo, no GNU você pode usar:

ls -lt fileA fileB

ou

ls -l fileA -t fileB

e obtenha o mesmo resultado, porque os -l e -t podem estar presentes em qualquer lugar na linha de comando. Nos sistemas BSD, o segundo formulário fornece um erro ou pode tentar encontrar um arquivo chamado -t .

Com tudo isso em mente, se você se encontrar em uma linha de comando do MacOS onde você não instalou ferramentas GNU, lembre-se de colocar todas as opções logo após o nome do comando, e não espere que ele tenha muitas exibições. opções de formato.

    
por 05.03.2015 / 14:43