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 / user-123460

FelixJN's questions

Martin Hope
FelixJN
Asked: 2022-07-02 06:33:48 +0800 CST

Definir arquivos de origem rsync como últimos argumentos

  • 0

Digamos que estou usando findpara definir arquivos de origemrsync para uma -operação, fazendo uso de recursos especiais que conheço apenas desses dois comandos:

find /path/to/data -mtime -7 -mtime +5 -exec rsync -aAXu {} /path/to/dest \; 

No entanto, neste caso, não posso usar +with -execas que rsyncleva o destino como último argumento.

Isso significa que rsyncestá sendo chamado uma vez por arquivo correspondente em vez de criar uma lista de argumentos e chamar rsyncapenas um mínimo de vezes.

O mesmo problema aparece xargscomo eu precisaria do -Isinalizador, o que implica -L 1.

O manual não parece mostrar uma --destination-dir=destopção.

Existe alguma maneira simples de criar um rsynccomando -built-up de uma lista de arquivos de origem?

Talvez esta seja uma pergunta XY e outros comandos sejam mais adequados?

find rsync
  • 1 respostas
  • 34 Views
Martin Hope
FelixJN
Asked: 2022-01-13 14:04:36 +0800 CST

Faça operações de alteração apenas na substring

  • 6

Em um arquivo que tenha algum texto ilegível antes e depois de uma seção marcada por padrões STARTe END(strings específicas que ocorrem apenas uma vez cada e na ordem correta e na mesma linha). Eu gostaria de fazer alguma manipulação de string SOMENTE na parte entre STARTeEND

Exemplo de entrada:

aomodi3hriq32| ¶³r 0q93aoiSTART_this_is_to_be_modified_ENDaqsdofuha23uru| ²23i ii3uhfia
oawpo3<9"§ A hSTART_this_also_needs_modification_ENDqa 032/a237(°1Q"§ >A_this_
START changeme ENDnot_this_modias

Em termos de sed-operações, a substring (e apenas a substring) entre STARTe ENDdeve ser modificada como se eu usasse sed 's/_this_// ; s/modi/MODI/ ; y/as/45/'.

Saída de exemplo:

aomodi3hriq32| ¶³r 0q93aoiSTARTi5_to_be_MODIfied_ENDaqsdofuha23uru| ²23i ii3uhfia
oawpo3<9"§ A hSTART4l5o_need5_MODIfic4tion_ENDqa 032/a237(°1Q"§ >A_this_
START ch4ngeme ENDnot_this_modias

awkcom FS="START|END"falha, pois OFSnão pode ser definido para vários valores em posições diferentes.

Eu tentei usar sedcom uma substituição de comando aninhada e separadores diferentes ( ~), mas falhei e também temo que possa haver caracteres antes START/ depois ENDque mexam com o comando (por exemplo, a /). A ideia era selecionar apenas a substring "interna" e fazer as operações e usá-la como parte da substituição:

sed "s/^\(.*\)START.*END\(.*\)$/\1$(sed 's~^.*START~~
                                         s~END.*~~
                                         s~_this_~~
                                         s~modi~MODI~
                                         y~as~45~' infile)\2/" infile

Eu não estou familiarizado com, por exemplo perl.... mas o que for preciso.

Existe alguma maneira de fazer com que um conjunto de sed-operações se aplique apenas a uma substring correspondente a REGEX de uma linha?

awk text-processing
  • 8 respostas
  • 528 Views
Martin Hope
FelixJN
Asked: 2021-09-16 12:12:31 +0800 CST

Entendendo as atribuições de variáveis ​​em segundo plano e o comando wait

  • 2

Nele man bashdiz:

espere [-fn] [id...]

Aguarde cada processo filho especificado e retorne seu status de encerramento. Cada ID pode ser um ID de processo ou uma especificação de trabalho; se uma especificação de trabalho for fornecida, todos os processos no pipeline desse trabalho serão aguardados. Se id não for fornecido, todos os processos filhos ativos no momento serão aguardados e o status de retorno será zero. Se a opção -n for fornecida, wait aguarda o término de qualquer tarefa e retorna seu status de saída.

E exemplos típicos como

 command1 & command2 & command3 & wait

significará que os três comandos serão executados em paralelo e o próximo passo só será feito quando TODOS eles estiverem concluídos.

Meu problema está nos resultados desses dois scripts bash:

#!/bin/bash
for i in 1 2 3 ; do
  a=$i
  echo "$a is $i"
done 2>/dev/null

Resultado:

1 is 1
2 is 2
3 is 3

Praticamente o que eu esperava. Agora suponho que atribuir a variável seja um processo longo, então espero por isso:

#!/bin/bash
  for i in 1 2 3 ; do
  a=$i & wait
  echo "$a is $i"
done 2>/dev/null

Resultado é:

3 is 1
3 is 2
3 is 3

e estou bastante confuso pelas seguintes razões:

  1. O único processo waitque deve esperar para terminar é atribuir a variável, então a próxima etapa do script deve ser executada ( echo). a=3deve acontecer apenas na última iteração do loop.
  2. Até onde eu sei, for-loops são executados em subshells e waittem um escopo apenas para o shell em que foi iniciado. Portanto, não deve nem esperar que o for-loop termine (já que este é o pai).
  3. Em nenhum momento eu especifiquei echopara correr em paralelo com algum outro processo, então não esperava uma condição de corrida.

Então, por aque a variável -variável é definida com a última iteração do loop quando a variável $inão é? Que parte do waitcomando eu não entendi? O comportamento está completamente fora das minhas expectativas.

GNU bash, versão 5.0.3(1) em um kernel Linux 5.7.0-0.bpo.2-amd64.

Desarmar aantecipadamente faz com que o segundo script retorne isso

 is 1
 is 2
 is 3

ou seja, a variável nunca é definida e foi arrastada da minha execução anterior.

bash shell-script
  • 1 respostas
  • 214 Views
Martin Hope
FelixJN
Asked: 2019-11-01 15:50:49 +0800 CST

timer systemd: habilita o serviço apenas para intervalos de tempo específicos

  • 1

Digamos que eu queira que um programa esteja ativo entre 12:00h e 13:00h em uma máquina desktop (ou seja, se o PC estiver ligado em qualquer horário não pode ser garantido). Vou assumir que posso usar unidades systemd para isso.

Iniciar o serviço Acom um temporizador e contabilizar os tempos de desligamento é simples:

A.temporizador

[Timer]
Unit=A
OnCalendar=*-*-* 12:00:00
Persistent=true

A interrupção Apode ser feita com um serviço conflitante, conforme sugerido anteriormente

A.service (com conflito):

#add conflict to A.service
[Unit]
Description=This is A.service
Conflicts=killA.service
#make sure killA considers A to be active
RemainAfterExit=yes

killA.service :

 [Unit]
 Description=kills A
 [Service]
 Type=oneshot
 ExecStart=/bin/true
 #kill only if A is running:
 Requires=A.service

killA.timer

[Timer]
Unit=killA
OnCalendar=*-*-* 13:00:00
Persistent=true

Agora existem vários cenários possíveis:

  • Ligado das 11h às 14h: inicie e pare conforme o esperado
  • Ligado das 11h às 12h30: inicia como esperado, mas nunca para -> o que acontecerá na próxima ligação?

    • às 12:45: A vai começar? (último início há menos de 24h)
    • às 14h: killA não deve ser executado, pois A não deve estar ativo
    • às 12:15 do dia seguinte? (última partida há menos de 24 horas, mas a partida killA foi perdida)
    • às 12:45 do dia seguinte? (última partida >24h atrás, mas killA <24h atrás. Será interrompido por killA?)
  • Ligado das 12h30 às 14h: iniciar e parar conforme o esperado (devido à persistência no A.timer)

  • ligado às 14h: A ​​inicia por persistência. O killA irá desativá-lo imediatamente devido à dependência? Começar A pode ser evitado em primeiro lugar?

Resumidamente:

Como usar timers systemd para garantir que um serviço esteja ativo em um determinado intervalo de tempo e inativo fora do intervalo de tempo, independentemente de desligamentos/inicializações?


Exemplo prático de caso de uso: permitir ssh-acesso somente no horário de trabalho.

PS: Talvez eu não entenda muito bem os temporizadores do systemd, ainda?

systemd
  • 1 respostas
  • 1627 Views
Martin Hope
FelixJN
Asked: 2019-10-29 12:02:51 +0800 CST

ausearch: operador NOT na correspondência de string

  • 2

Ao examinar os logs de atividade de rede de audit, quero excluir alguns programas que conheço, por exemplo, firefox.

ausearch -x firefox -i

traz todas as conexões relacionadas ao Firefox. Mas os operadores NOT comuns parecem falhar:

ausearch -x=!fire
ausearch -x \!fire
ausearch -x ^[fire]

Como NÃO corresponder a uma string em ausearch?

Nota: não se trata de definir as regras de log para excluir programas, mas apenas filtrar os próprios logs.

audit
  • 1 respostas
  • 435 Views
Martin Hope
FelixJN
Asked: 2019-05-22 00:51:20 +0800 CST

Alternativa de script do comando GUI executado no login - não deve

  • 0

Como meus dados principais não estão em $HOME, fiz um pequeno script (executável) para iniciar o gerenciador de arquivos da GUI ( caja) no diretório desejado e colocá-lo no meu diretório executável local ( ~/.local/bin):

#!/bin/bash
/usr/bin/caja /datadir

Para substituir o comando padrão caja, o script tem o mesmo nome e o caminho para meus executáveis ​​locais é listado primeiro em my ~/.profile:

if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

Funciona bem até agora, MAS sempre que eu faço login o gerenciador de arquivos é aberto por padrão. Nenhum salvamento de sessão é ativado, nenhum outro executável desse diretório é executado (tentei alguns echo-scripts e até outros comandos GUI).

Como posso suprimir esse comportamento?

Usando MATE como DE no Debian 10 (teste)

debian gui
  • 1 respostas
  • 65 Views
Martin Hope
FelixJN
Asked: 2019-02-02 13:55:42 +0800 CST

seq separador decimal

  • 6

Usando um seqcomando com números de ponto flutuante, minha saída vem com vírgulas em vez de pontos como separadores decimais, apesar de usar pontos na entrada:

seq 0.1 0.3 1.3
0,1
0,4
0,7
1,0
1,3

Presumi que isso estivesse vinculado ao locale LC_NUMERIC, que está definido como de_DE.UTF-8, no entanto, uma alteração para en_US.UTF-8não corrigi-lo e outro sistema que tenho usando as mesmas configurações de localidade retorna pontos. Mesmo definir explicitamente um formato via, por exemplo -f %1.2, não retorna pontos, mas vírgulas como separadores decimais.

Onde e como mudo esse comportamento? Como garantir que meu script esteja livre de erros em qualquer sistema? Obviamente, qualquer saída será inutilizável para processamento adicional se não for reprocessada por meio trde semelhante.

Usando uma instalação em inglês do Mint no fuso horário alemão e raspian na outra máquina.


Edit: localeconfigurações nas máquinas fornecidas:

A "vírgula":

LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=de_DE.UTF-8
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=de_DE.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=de_DE.UTF-8
LC_NAME=de_DE.UTF-8
LC_ADDRESS=de_DE.UTF-8
LC_TELEPHONE=de_DE.UTF-8
LC_MEASUREMENT=de_DE.UTF-8
LC_IDENTIFICATION=de_DE.UTF-8
LC_ALL=

O "ponto":

LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC=de_DE.UTF-8
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY=de_DE.UTF-8
LC_MESSAGES="C.UTF-8"
LC_PAPER=de_DE.UTF-8
LC_NAME=de_DE.UTF-8
LC_ADDRESS=de_DE.UTF-8
LC_TELEPHONE=de_DE.UTF-8
LC_MEASUREMENT=de_DE.UTF-8
LC_IDENTIFICATION=de_DE.UTF-8
LC_ALL=

A configuração LANGUAGEnão afeta o resultado.

shell-script terminal
  • 1 respostas
  • 3428 Views
Martin Hope
FelixJN
Asked: 2018-10-11 03:43:54 +0800 CST

globstar: `**string*` não desce em subdiretórios `**/*string*` faz

  • 3

Dado é um conjunto de arquivos em (sub)diretórios que correspondem a uma string como em, por exemplo:

find -name 'string' | sort
./1/2/3/4/string
./1/2/3/string
./1/2/string
./1/string
./string

Por que usar globstarpara corresponder aos arquivos como em

ls **string
string

falha ao percorrer os diretórios, enquanto

ls **/string
1/2/3/4/string  1/2/3/string  1/2/string  1/string  string

consegue? Do meu entendimento da descrição nas manpáginas, deve corresponder aos (sub)diretórios, não é?

Perguntas como essa geralmente são marcadas como duplicatas de "O resultado de ls * , ls ** e ls ***" , mas a resposta só lida com ls **, que de fato é recursiva por meio de diretórios. Parece que um asterisco duplo seguido por uma string iria quebrar globstar.

Correndo GNU bash v.4.4.19(1)_mint 19


A partir deman bash

estrela glob

Se definido, o padrão ** usado em um contexto de expansão de nome de caminho corresponderá a todos os arquivos e zero ou mais diretórios e subdiretórios. Se o padrão for seguido por um /, somente os diretórios e subdiretórios serão correspondentes.

bash shopt
  • 2 respostas
  • 725 Views

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