AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / 问题

All perguntas(unix)

Martin Hope
terdon
Asked: 2023-08-17 00:08:44 +0800 CST

Agora é seguro analisar a saída de GNU ls?

  • 26

A sabedoria aceita nas últimas décadas é que nunca é uma boa ideia analisar a saída de ls( [1] , [2] ). Por exemplo, se eu quiser salvar a data de modificação de um arquivo junto com seu nome em uma variável shell, esta não é a maneira correta de fazer isso:

$ ls -l file
-rw-r--r-- 1 terdon terdon 0 Aug 15 19:16 file
$ foo=$(ls -l file | awk '{print $9,$6,$7,$8}')
$ echo "$foo"
file Aug 15 19:16

Assim que o nome do arquivo for ligeiramente diferente, a abordagem falha:

$ ls -l file*
-rw-r--r-- 1 terdon terdon 0 Aug 15 19:16 'file with spaces'
$ foo=$(ls -l file* | awk '{print $9,$6,$7,$8}')
$ echo "$foo"
file Aug 15 19:16

Fica pior se a data de modificação do arquivo não for próxima de hoje, pois isso pode alterar o formato da hora:

$ ls -l
total 0
-rw-r--r-- 1 terdon terdon 0 Aug 15 19:21  file
-rw-r--r-- 1 terdon terdon 0 Aug 15  2018 'file with spaces'

No entanto, as versões mais recentes do GNU coreutils lstêm duas opções que podem ser combinadas para definir um formato de hora específico e produzir uma saída delimitada por NULL:

      --time-style=TIME_STYLE
              time/date format with -l; see TIME_STYLE below
[...]
     --zero end each output line with NUL, not newline
[...]
       The TIME_STYLE argument can be full-iso,  long-iso,  iso,  locale,  or
       +FORMAT.   FORMAT  is  interpreted like in date(1).  If FORMAT is FOR‐
       MAT1<newline>FORMAT2, then FORMAT1 applies  to  non-recent  files  and
       FORMAT2  to recent files.  TIME_STYLE prefixed with 'posix-' takes ef‐
       fect only outside the POSIX locale.  Also the  TIME_STYLE  environment
       variable sets the default style to use.

Aqui estão os arquivos novamente, com essas opções definidas (o zero no final de cada linha de saída é substituído por #e uma nova linha aqui para melhorar a legibilidade):

$ ls -l --zero --time-style=long-iso -- *
-rw-r--r--+ 1 terdon terdon 0 2023-08-16 21:35 a file with a
newline#
-rw-r--r--+ 1 terdon terdon 0 2023-08-15 19:16 file#
-rw-r--r--+ 1 terdon terdon 0 2018-08-15 12:00 file with spaces#

Com essas opções disponíveis, posso fazer muitas das coisas que lstradicionalmente são ruins. Por exemplo:

  1. Obtenha o nome do arquivo modificado mais recentemente em uma variável:

    $ touch 'a file with a'$'\n''newline'
    $ last=$(ls -tr --zero | tail -z -n1)
    bash: warning: command substitution: ignored null byte in input
    $ printf -- 'LAST: "%s"\n' "$last"
    LAST: "a file with a 
    newline"
    
  2. O exemplo que gerou essa pergunta. Outra pergunta, no Ask Ubuntu, onde o OP queria imprimir o nome do arquivo e a data de modificação. Alguém postou uma resposta usando lse um awktruque inteligente e, se somarmos --zeroa ls, parece ser bem robusto:

    $ output=$(ls -l --zero --time-style=long-iso -- * | 
               awk 'BEGIN{RS="\0"}{ t=index($0,$7); print substr($0,t+6), $6 }')
    $ printf 'Output: "%s"\n' "$output"
    Output: "a file with a
    newline 2023-08-16"
    

Não consigo encontrar um nome que quebre qualquer um desses dois exemplos. Então, minhas perguntas são:

  1. Existe um caso que falharia em um dos dois exemplos acima? Talvez alguma esquisitice local?
  2. Se não, isso significa que as versões modernas do GNU lspodem realmente ser usadas com segurança com nomes de arquivo arbitrários?
shell
  • 3 respostas
  • 3946 Views
Martin Hope
Damn Vegetables
Asked: 2023-03-20 11:31:18 +0800 CST

Por que a escala fracionária do Gnome é 1,7518248558044434 em vez de 1,75?

  • 26

Se eu definir a escala de 175% nas configurações do Gnome, o valor será salvo como 1.7518248558044434em ~/.config/monitors.xml:

<monitors version="2">
  <configuration>
    <logicalmonitor>
      <x>0</x>
      <y>0</y>
      <scale>1.7518248558044434</scale>
      <primary>yes</primary>
      <monitor>
        <monitor spec>
          <connector>DP-3</connector>

Por que é tão? A princípio, pensei que poderia ser devido a um erro de arredondamento de ponto flutuante, mas 1,75 é um daqueles números felizes cujo valor exato pode ser expresso.

Gnomo Wayland 43.3

gnome
  • 2 respostas
  • 7516 Views
Martin Hope
S M Tushar Ibne Salam
Asked: 2019-11-24 01:09:27 +0800 CST

Por que o rm manual diz que podemos executá-lo sem nenhum argumento, quando isso não é verdade?

  • 26

Podemos ver que a sinopse do rmcomando é:

rm [OPTION]... [FILE]...

Isso não significa que podemos usar apenas rmo comando sem nenhuma opção ou argumento?
Quando executo o comando rmsozinho, o terminal mostra o seguinte erro:

rm: missing operand
Try 'rm --help' for more information.

Alguém pode me dizer por que este é o caso?

linux rm
  • 2 respostas
  • 7929 Views
Martin Hope
peterh
Asked: 2019-05-04 02:24:17 +0800 CST

Como pedir ao systemd para não iniciar um serviço do sistema na inicialização?

  • 26

Não quero remover o serviço, só quero evitar que ele inicie na inicialização. Ainda preciso da opção de iniciá-lo manualmente mais tarde (com o systemctl start <service>comando).

Eu tentei usar systemctl disable <service>. Não funciona, porque remove o serviço.

Há outra possibilidade. Em seu arquivo de serviço,

[Install]
#WantedBy=multi-user.target

poderia ser comentada (e então, systemctl daemon-reload). Funciona no caso dos meus próprios serviços, porque seus arquivos de serviço foram escritos por mim.

No entanto, os arquivos de serviço pertencentes à distribuição estão em formato /lib/systemd/system. Os arquivos neste diretório são gerenciados pelo sistema operacional, ou seja, eles seriam substituídos por atualizações, outras partes do sistema podem supor que eles não foram modificados e assim por diante. Simplesmente editar arquivos do sistema fora do /etcé uma prática ruim, e eu não quero fazer isso. Não quero editar arquivos de configuração no meu arquivo /lib.

O que fazer?

systemd
  • 2 respostas
  • 27458 Views
Martin Hope
mitanyen
Asked: 2019-04-08 21:05:16 +0800 CST

Localizando arquivos para os quais um comando falha

  • 26

Eu gostaria de encontrar recursivamente todos os arquivos para os quais um script que aceita um arquivo como argumento retorna um valor diferente de zero. Alguma idéia de como fazer isso usando 'find' ou uma ferramenta semelhante?

files scripting
  • 1 respostas
  • 1113 Views
Martin Hope
Atul
Asked: 2019-02-26 02:09:50 +0800 CST

Como o vim substitui o modo somente leitura? [duplicado]

  • 26
Essa pergunta já tem respostas aqui :
O que faz o '!' realmente quando é adicionado a um comando ex (:wq! | :w! | :q! )? (2 respostas)
Fechado há 3 anos .

Muitas vezes vemos que o arquivo que estamos tentando salvar no vim após a edição é relatado como somente leitura. A maneira de contornar isso é adicionar !wq, estou tentando descobrir o que acontece internamente que permite que o programa vim obtenha permissão suficiente para gravar o arquivo somente leitura?

Existe um sinalizador interno que é comutado ou o vim ganha temporariamente os privilégios por algum tempo?

shell vim
  • 4 respostas
  • 8193 Views
Martin Hope
iBug
Asked: 2019-02-21 02:38:00 +0800 CST

Por que as leituras de /dev/zero não contam como IO_RBYTES?

  • 26

Estou esvaziando um disco rígido em algum sistema operacional Linux 4.x usando este comando:

sudo sh -c 'pv -pterb /dev/zero > /dev/sda'

E eu abri outro tty e comecei sudo htope notei isso:

  PID USER      PRI  NI CPU%   RES   SHR   IO_RBYTES   IO_WBYTES S   TIME+  Command
 4598 root       20   0 15.5  1820  1596        4096    17223823 D  1:14.11 pv -pterb /dev/zero

O valor para IO_WBYTESparece bastante normal, mas IO_RBYTESpermanece em 4 KiB e nunca muda.

Eu executei alguns outros programas, por exemplo

dd if=/dev/zero of=/dev/zero
cat /dev/zero > /dev/zero

e fiquei surpreso ao ver que nenhum deles gera muito IO_RBYTESou IO_WBYTES.

Eu acho que isso não é específico para nenhum programa, mas por que não lê /dev/zeroe grava para /dev/{zero,null}contar como bytes de E/S?

linux devices
  • 1 respostas
  • 3066 Views
Martin Hope
Luís de Sousa
Asked: 2019-02-01 02:03:26 +0800 CST

Tecla Print Screen no i3

  • 26

Por padrão, o i3 ignora a Print Screentecla disponível na maioria dos teclados. Como pode ser ativado?

i3
  • 2 respostas
  • 24569 Views
Martin Hope
confetti
Asked: 2019-01-31 00:30:29 +0800 CST

Subtrair o tempo usando data e bash

  • 26

Todas as outras questões na rede SE tratam de cenários em que a data é assumida como now( Q ) ou onde apenas uma data é especificada ( Q ).

O que eu quero fazer é fornecer uma data e hora e, em seguida, subtrair uma hora disso.
Aqui está o que eu tentei primeiro:

date -d "2018-12-10 00:00:00 - 5 hours - 20 minutes - 5 seconds"

Isso resulta em 2018-12-10 06:39:55- Adicionou 7 horas. Em seguida, subtraiu 20:05 minutos.

Depois de ler a página mane de , pensei ter corrigido com isso:infodate

date -d "2018-12-10T00:00:00 - 5 hours - 20 minutes - 5 seconds"

Mas, mesmo resultado. De onde ele tira as 7 horas?

Tentei outras datas também porque pensei que talvez tivéssemos 7200 segundos bissextos naquele dia, quem sabe lol. Mas mesmos resultados.

Mais alguns exemplos:

$ date -d "2018-12-16T00:00:00 - 24 hours" +%Y-%m-%d_%H:%M:%S
2018-12-17_02:00:00

$ date -d "2019-01-19T05:00:00 - 2 hours - 5 minutes" +%Y-%m-%d_%H:%M:%S
2019-01-19_08:55:00

Mas aqui torna-se interessante. Se eu omitir o tempo na entrada, funciona bem:

$ date -d "2018-12-16 - 24 hours" +%Y-%m-%d_%H:%M:%S
2018-12-15_00:00:00

$ date -d "2019-01-19 - 2 hours - 5 minutes" +%Y-%m-%d_%H:%M:%S
2019-01-18_21:55:00

$ date --version
date (GNU coreutils) 8.30

o que estou perdendo?

Atualização: adicionei um Zno final e isso mudou o comportamento:

$ date -d "2019-01-19T05:00:00Z - 2 hours" +%Y-%m-%d_%H:%M:%S
2019-01-19_04:00:00

Eu ainda estou confuso embora. Não há muito sobre isso na página de informações do GNU sobre data.

Suponho que este seja um problema de fuso horário, mas citando o The Calendar Wiki na ISO 8601 :

Se nenhuma informação de relação UTC for fornecida com uma representação de hora, assume-se que a hora está na hora local.

Que é o que eu quero. Minha hora local também está definida corretamente. Não sei por que date mexeria com o fuso horário neste caso simples de eu fornecer um datetime e querer subtrair algo dele. Não deveria subtrair as horas da string de data primeiro? Mesmo que ele converta para uma data primeiro e depois faça a subtração, se eu deixar de fora qualquer subtração, recebo exatamente o que quero:

$ date -d "2019-01-19T05:00:00" +%Y-%m-%d_%H:%M:%S
2019-01-19_05:00:00

Então, se isso realmente for um problema de fuso horário, de onde vem essa loucura?

date gnu
  • 5 respostas
  • 31699 Views
Martin Hope
piccolo
Asked: 2019-01-25 05:37:26 +0800 CST

Como tornar o python3.7 padrão

  • 26

Eu instalei o python3.7, mas não tenho certeza de como torná-lo o python padrão.

Veja abaixo:

~/Documents/robosuite$ python3.7
Python 3.7.1 (default, Oct 22 2018, 11:21:55) 
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
KeyboardInterrupt
>>> 

~/Documents/robosuite$ python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Eu quero que o python3.7 apareça quando eu usar o comandopython3

python3 python
  • 4 respostas
  • 67786 Views
Prev
Próximo

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve