Como obter o fuso horário de uma imagem do sistema?

2

Gostaria de obter o fuso horário de um sistema. Agora algumas ressalvas ...

  • Estou usando o Linux e os sistemas de destino serão UNIX.
  • Vou usar apenas imagens do sistema, ou seja. não o sistema ao vivo, mas as partições serão montadas.
  • Eu eventualmente estarei escrevendo isso.

Eu estava pensando em usar o / etc / localtime, mas às vezes este é um arquivo real e, às vezes, um link simbólico. Em ambos os casos, não consigo obter uma descrição do formato de arquivo do qual analisar.

Alguém tem alguma ideia?

Obrigado

    
por Willi Ballenthin 16.07.2010 / 19:32

5 respostas

2

Esse arquivo estará no formato de arquivo tz, que é um formato binário. Você pode usar DateTime :: TimeZone :: Tzfile para analisar se você conhece Perl. Se for um link simbólico, ele não deve ser escrito, porque se estiver montado, você pode segui-lo.

Por fim, se você puder controlar a criação da imagem, é altamente recomendável que você defina a hora do sistema como UTC.

    
por 16.07.2010 / 19:53
0

Você sabe qual é o sabor do UNIX?

Além de / etc / localtime,

  • Variantes do Redhat usam /etc/sysconfig/clock
  • As variantes do Debian usam /etc/timezone
por 16.07.2010 / 20:21
0

A maneira cruel ....: p Se o monte é só de leitura, toque em um arquivo e depois ... ls -lah ....

então você terá o tempo que o arquivo foi criado. Significado ... tempo do sistema +/- alguns segundos.

Ou, de alguma forma, tente modificar algo de forma explícita ou implícita e veja a hora: >

    
por 16.07.2010 / 21:29
0

Uma maneira simples de lidar com isso em sistemas Linux é usar o comando file;

file /etc/timezone

ou

file /etc/sysconfig/clock

No entanto, como você pode estar usando imagens de sistemas UNIX (espero que seu Solaris seja o que eu conheço), pode ser um pouco diferente.

Sem realmente escrever o script para você, aqui está minha opinião sobre isso no pseudo código

get mount
if mount is ext3 ... then assume linux
 if exists /etc/timezone
 then
   check if file is ascii or gz
    if ascii then cat the timezone
    else
    if exists /etc/redhat-release
    then
     assume redhat
     TZ = cat /etc/sysconfig/clock
   fi

Sim, é menos que elegante, mas é melhor você me entender. Então você pode fazer algumas suposições no sistema operacional com base na montagem.

O processo seria o mesmo para dizer uma montagem do Solaris, você poderia descobrir onde o arquivo está, usar o comando file para determinar o tipo de arquivo e de lá obter seu conteúdo com cat ou grep ^ TZ

Espero que ajude.

    
por 16.07.2010 / 22:46
-1

Na linha de comando, você pode obtê-lo de uma maneira mais segura do que ler / etc / localtime executando:

date +%Z
    
por 16.07.2010 / 20:34