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
the_eraser
Asked: 2024-12-10 22:09:19 +0800 CST

bash - como remover uma variável local (dentro de uma função)

  • 12

Li o que está listado na Bibliografia sobre , unsete "Funções Shell".declarelocal

Minha versão do Bash é

GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)
var='outer'
declare -p var
unset var
declare -p var
function foo {
  echo \""I'm in"\"
  local var='inner'
  declare -p var
  unset var
  declare -p var
}
foo

(a citação estranha I'm inestá lá apenas para preservar o destaque da sintaxe no bloco de citação a seguir.) Isso imprime

declare -- var="outer"
bash: declare: var: not found
"I'm in"
declare -- var="inner"
declare -- var

Há uma diferença em desconfigurar uma variável global e desconfigurar uma variável local dentro de uma função. No primeiro caso, a variável é removida. No último, a variável permanece declarada (mas desconfigurada).

Existe uma maneira de remover completamente uma variável local dentro de uma função (antes que a função retorne)? Ou seja, a saída seria

declare -- var="outer"
bash: declare: var: not found
"I'm in"
declare -- var="inner"
bash: declare: var: not found

Isso seria útil para testar se uma variável não existe dentro de uma função, como em

function foo {
  local var
  while
    declare -p var
  do
    echo "$var"
    ((var++))
    [[ "$var" -eq 4 ]] \
    && unset var
  done
}

Este código é executado em loop indefinidamente, imprimindo


declare -- var="1"
1
declare -- var="2"
2
declare -- var="3"
3
declare -- var

declare -- var="1"
1
declare -- var="2"
2
declare -- var="3"
3
declare -- var
[omissis]

Há algo errado em verificar se uma variável existe usando declare -p?

A única menção que encontrei no manual de referência do Bash sobre a diferença entre desconfigurar uma variável global e uma local é

Se uma variável no escopo local atual não estiver definida, ela permanecerá assim (aparecendo como não definida) até ser redefinida naquele escopo ou até que a função retorne. (ref. Manual de referência do Bash - seção "Funções do Shell")

onde a palavra que aparece é a única pista.

Bibliografia

  • Manual de referência do Bash , seção "4 comandos internos do Shell"
  • O que o unset faz?
bash
  • 1 respostas
  • 486 Views
Martin Hope
maxammann
Asked: 2024-12-10 20:46:55 +0800 CST

Existe uma interface do kernel Linux (/proc) que conta mensagens de log de erros do kernel?

  • 5

O comando dmesg --level=emerg,alert,crit,errlista todas as mensagens de erro com alta gravidade.

Fiquei pensando, para fins de monitoramento, se a contagem de mensagens é de alguma forma exposta no /procsistema de arquivos. Seria ótimo dar uma indicação de problemas de hardware.

logs
  • 1 respostas
  • 41 Views
Martin Hope
Natasha Shorrock
Asked: 2024-12-10 08:24:12 +0800 CST

Tentando classificar com getopts com comandos diferentes e não consigo classificar por preço

  • 5

Estou tentando classificar uma lista de inventário em unix/linux abaixo. Estou conseguindo classificar por nome e ID e consegui abrir o menu de uso, mas não consigo classificar por preço, mesmo com uma função "awk".

Eu chamo o código com ./invOpt -pe a saída continua me dizendo que é um invalid option: -pentão puxa o menu de uso abaixo. Estou confuso porque ele se recusa a classificar o 4º campo onde está o preço. Não sei se o $ e/ou o sinal de vírgula estão bagunçando a classificação

"Usage: invOpts -i | -n | -p | -h
"  -i  sort by product ID"
"  -n  sort by product name"
"  -p  sort by price"
"  -h  display usage"
INVENTORY MENU:
Product ID   Product Name                   Quantity   Price        Total Value
-----------  ------------------------------ --------   -----        -----------
P101        Apple MacBook Pro           25      $2,399.99       $59,999.75
P102        Samsung Galaxy S23          40      $799.99         $31,999.60
P103        Apple iPhone 15             60      $999.99         $59,999.40
P104        Google Pixel 8              35      $899.99         $31,499.65
P105        Microsoft Surface Pro 9     18      $1,299.99       $23,399.82
P106        Dell XPS 13                 50      $1,099.99       $54,999.50
P107        Apple iPad Air              75      $599.99         $44,999.25
P108        Fitbit Charge 5             100     $179.95         $17,995.00
P109        Amazon Echo Dot 5th Gen     150     $49.99          $7,498.50
P110        Sonos One SL                80      $199.99         $15,999.20
P111        Logitech MX Master 3        120     $99.99          $11,998.80
P112        HP Spectre x360             25      $1,499.99       $37,499.75
P113        GoPro Hero 11               60      $399.99         $23,999.40
P114        Nintendo Switch OLED        45      $349.99         $15,749.55
P115        Canon EOS R6                15      $2,499.99       $37,499.85
P116        Seagate 2TB External Hard Drive 200     $69.99          $13,998.00
P117        Apple AirPods Pro 2nd Gen   130     $249.99         $32,498.70
P118        MSI GeForce RTX 4070        40      $599.99         $23,999.60
P119        Lenovo ThinkPad X1 Carbon   20      $1,799.99       $35,999.80
P120        Anker PowerCore 26800       180     $59.99          $10,798.20

CÓDIGO ATUAL:

#!/bin/bash

# Function to display usage information
usage() {
    echo "Usage: invOpts -i | -n | -p | -h"
    echo "  -i  sort by product ID"
    echo "  -n  sort by product name"
    echo "  -p  sort by price"
    echo "  -h  display usage"
}

# Process command-line options using getopts
while getopts ":inp:h" opt; do
    case $opt in
        i)
            # Sort by product ID (Field 1) and save to a temp file
            tempFile="/tmp/inventory_sorted_by_id_$$.txt"
            sort -t: -k1,1 ~/A09/inventory > "$tempFile"
            ;;
        n)
            # Sort by product name (Field 2) and save to a temp file
            tempFile="/tmp/inventory_sorted_by_name_$$.txt"
            sort -t: -k2,2 ~/A09/inventory > "$tempFile"
            ;;
        p)
            # Sort by price (Field 4) and save to a temp file
            tempFile="/tmp/inventory_sorted_by_price_$$.txt"
            sort -t: -k4,4n ~/A09/inventory > "$tempFile"
            ;;
        h)
            # Display usage and exit
            usage
            exit 0
            ;;
        ?)
            # Handle invalid options
            echo "Invalid option: -$OPTARG"
            usage
            exit 1
            ;;
    esac
done

# If no option is provided, default to original file
if [[ -z $tempFile ]]; then
    tempFile=~/A09/inventory
fi

# Source the myFunctions script to use the chkFile function
source ~/Homework9/myFunctions

# Store the inventory file name
filename=~/A09/inventory

# Check if the file exists using chkFile
chkFile $filename
if [[ $? -ne 0 ]]; then
    echo "Error: Inventory file does not exist."
    exit 1
fi

# Print the header
printf "%-12s %-30s %-10s %-15s %-15s\n" "Product ID" "Product Name" "Quantity" "Price" "Total Value"
printf "%-12s %-30s %-10s %-15s %-15s\n" "-----------" "------------------------------" "--------" "-----" "-----------"

# Initialize total inventory value
totalInventoryValue=0

# Read the sorted file line by line (either sorted or original)
while IFS=: read -r productID productName quantity price; do
    # Calculate the total value: Quantity * Price
    totalValue=$(echo "$quantity * $price" | bc -l)

    # Format the price and total value with commas
    formattedPrice=$(echo $price | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta')
    formattedTotalValue=$(echo $totalValue | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta')

    # Print the formatted data
    printf "%-12s %-30s %-10s $%-14s $%-14s\n" "$productID" "$productName" "$quantity" "$formattedPrice" "$formattedTotalValue"

    # Add total value to the overall inventory value
    totalInventoryValue=$(echo "$totalInventoryValue + $totalValue" | bc -l)
done < "$tempFile"

# Format the total inventory value with commas
formattedTotalInventoryValue=$(echo $totalInventoryValue | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta')

# Print the total inventory value
printf "\nTotal Inventory Value: $%-14s\n" "$formattedTotalInventoryValue"

# Clean up the temporary file
rm -f "$tempFile"
linux
  • 1 respostas
  • 13 Views
Martin Hope
VikHere
Asked: 2024-12-10 07:09:00 +0800 CST

Substitua wpa_supplicant pela sua própria implementação

  • 5

Eu tenho meu próprio processo, por exemplo, chamado de VikProcess, que herda com código possível de wps_supplicant( dport, systemd, events.c, scan.cetc.) para obter recursos de código essenciais de wps_supplicant.

Agora, alguém pode me orientar a substituir todos os serviços possíveis wps_supplicante usar VikPropcesspara se comunicar com os serviços do NetworkManager do Debian OS (RPI-3)? Qualquer dica seria útil e apreciada.

networkmanager
  • 1 respostas
  • 14 Views
Martin Hope
Le Nain Jaune
Asked: 2024-12-10 01:52:36 +0800 CST

Como inicializar uma partição desejada de um disco UEFI com o Qemu?

  • 7

Clonei um disco formatado em GPT que contém um dual boot (Windows + Linux Debian) que funciona perfeitamente bem na máquina real.

Tentei criar uma VM com o Qemu que usa o disco clonado para inicializar na partição Debian, mas o melhor que consegui fazer foi inicializar o Windows.

Aqui está o comando que usei:

virt-install \
    --name "vm-test_dual_boot" \
    --boot loader=/usr/share/OVMF/OVMF_CODE.fd \
    --vcpus 2 --memory 8192 --osinfo debian11 \
    --network bridge=br0 \
    --graphics=vnc \
    --disk path=/home/user/vm/clone.qcow2 \
    --import -v

Não consigo fazer a mesma coisa que a máquina UEFI real que associa um HD(1,GPT,unique_identifier)sistema de arquivos ao \EFI\debian\shimx64.efiarquivo.

Você poderia me ajudar a inicializar o Debian?


Graças ao @telcoM alterei o comando em:

boot_config=\
"loader=/usr/share/OVMF/OVMF_CODE_4M.fd,"\
"loader.readonly=yes,"\
"loader.type=pflash,"\
"nvram.template=/usr/share/OVMF/OVMF_VARS_4M.ms.fd,"\
"nvram=/home/user/vm/clone_nvram.fd" ;

virt-install \
    --name "vm-test_dual_boot" \
    --boot $boot_config \
    --vcpus 2 --memory 8192 --osinfo win10 \
    --network bridge=br0 \
    --graphics=vnc \
    --disk path=/home/user/vm/clone.qcow2 \
    --import -v

Notas:

  • do diretório /usr/share/OVMF loaderdeve corresponder ao nvram.templateentão OVMF_CODE_4M.fdpara OVMF_VARS_4M.ms.fd, então no meu caso isso disparou este erro: "O convidado não inicializou o display (ainda)".

  • o usuário definido em /etc/libvirt/qemu.conf(padrão : libvirt-qemu), deve ter direitos de leitura e execução no nvramarquivo, caso contrário isso acionará um erro de permissão.

  • no meu caso --osinfo win10é obrigatório, pois a inicialização EFI vHD padrão é o Windows (antes eu tentava, debian11mas terminava em BSOD ).

  • para a --networkparte assume-se que temos um br0dispositivo de ponte (veja aqui para ponte temporária com Network Managerou aqui com iproutee aqui para ponte permanente com ifup).

Depois de criada, configure a VM EFI para inicializar a partição correta (veja a resposta detalhada de @telcoM para fazer isso temporariamente ou permanentemente).

dual-boot
  • 1 respostas
  • 75 Views
Martin Hope
user1578026
Asked: 2024-12-09 12:27:00 +0800 CST

Existe algum motivo pelo qual não consigo usar o Find para verificar se há vírus e malware em arquivos modificados?

  • 8
Esta pergunta foi migrada do Server Fault porque pode ser respondida no Unix & Linux Stack Exchange. Migrada há 14 horas .

Preciso escanear sistemas Linux em busca de vírus/malwares, apenas todo o sistema de arquivos. Há algumas opções a considerar.

  • Uma delas é o que os usuários normalmente fazem: usar um antivírus para escanear o sistema uma vez por dia.
  • A segunda opção é encontrar arquivos modificados no último dia e fornecer essa lista ao programa antivírus.

Testei o seguinte comando bash findem um diretório com 5 milhões de arquivos vazios e ele é extremamente eficiente.

date;find /test/ -type f -ctime -1 -type f 1>./find_ctime.out 2>./find.errors;date

Leva apenas cerca de 5 segundos.

Estou usando a opção -ctime apenas para superar alguns horários de modificação de alterações de programas usando utilitários como o touch.

A maioria dos administradores, quando falam sobre uma verificação do sistema, falam sobre ter um antivírus fazendo a verificação completa.

Existe algum motivo pelo qual find não deve ser usado para obter uma lista de arquivos modificados e examiná-los?

find
  • 1 respostas
  • 521 Views
Martin Hope
branco
Asked: 2024-12-09 05:25:49 +0800 CST

Não consigo comparar a saída padrão de uma função posix shell com o texto que desejo testar

  • 6

Quero testar se a saída de uma função corresponde ao texto que imagino que ela deva escrever na saída padrão. Mas o código abaixo nunca imprime test PASSe não consigo descobrir o porquê. Também tentei colocar vários \ncaracteres ou excluí-los na variável GROUND_TRUTH, mas isso não ajudou.

error_out()
{
    printf "%s\n" "${ERROR}"
    printf "Return to exit\n"
    read -r THROW_AWAY
    exit
}

ERROR="Test output."
OUTPUT_TO_TEST=$(error_out)
GROUND_TRUTH="Test output.\nReturn to exit\n"
{ [ "${OUTPUT_TO_TEST}" = "${GROUND_TRUTH}" ] \
         && printf "error_out test PASS\n"; } \
    || { \
        printf "error_out test FAIL\n"; \
    }
shell
  • 1 respostas
  • 10 Views
Martin Hope
learningregularexpressions
Asked: 2024-12-09 02:35:46 +0800 CST

Como faço para mesclar a linha inferior com a linha anterior?

  • 6

Tenho um arquivo bem básico;

15
Chapter name


some text and some more text
some text and some more text

Eu estava tentando conseguir algo assim

Book: 15 Chapter name


some text and some more text
some text and some more text

Eu estava tentando fazer isso usando sed com este padrão;

sed 's/^\([[:digit:]]\+\)\n\([[:alpha:]].*$\)\n$/Book: \1 \2\n/g'

Aparentemente isso não funciona no terminal, mas funciona perfeitamente na versão VIM do sed.

text-processing
  • 3 respostas
  • 50 Views
Martin Hope
sylvainsab
Asked: 2024-12-09 01:40:28 +0800 CST

BSD sed/awk movendo parte da linha para a linha acima (trocando atributo no arquivo HTML)

  • 5

Minha situação é simples: tenho um arquivo HTML com várias linhas contendo apenas a <section>tag de bloco recuada , cada linha seguida por uma <h3 id="YYYY">...</h3> tag de título (também recuada) .

Assim:

    <section>
        <h3 id="2024"><a href="index.fr.html#2024">fr</a> 2024 <a href="index.html#2024">en</a></h3>

Ao usar o link ancorado para ir para um ano específico dentro da página (ou sua tradução), o título do ano fica oculto atrás do <header>.

O problema seria resolvido trocando o idatributo uma linha acima da <h3>tag <section>,

assim:

    <section id="2024">
        <h3><a href="index.fr.html#2024">fr</a> 2024 <a href="index.html#2024">en</a></h3>

Existe um comando ou uma linha simples que me permita alternar todos esses idatributos da <h3>tag para a <section>tag uma linha acima? Não descobri como combinar várias linhas em BSD sedou especialmente awk.

sed 's:<section>\(\s*\)<h3\( id="\[0-9\]{4}"\):<section\2>\1<h3:g' index.html não altera o arquivo. Nem \n\t\tno lugar de \s, ou usando barras invertidas duplas escapa.

Existe uma opção para corresponder a caracteres de espaço como eu presumo GNU sedque seria? Talvez apenas a inserção/uso de novas linhas/tabulações diretamente no comando , mas eu gostaria de aprender melhor e também sou forçado, pois estou trabalhando remotamente e tenho que usar termuxem Android... Também não sou habilidoso o suficiente para usar uma awksolução alternativa.

awk
  • 1 respostas
  • 34 Views
Martin Hope
Joseph Sible-Reinstate Monica
Asked: 2024-12-09 01:06:13 +0800 CST

Como posso substituir iptables por iptables-nft de forma não interativa no Arch Linux?

  • 6

Estou tentando criar um Dockerfile para uma imagem do Arch Linux com iptables-nftinstalado. Se eu executar a archlinuximagem do Docker interativamente e então pacman -Syu iptables-nft, me perguntam iptables-nft-1:1.8.10-2 and iptables-1:1.8.10-2 are in conflict. Remove iptables? [y/N]e Proceed with installation? [Y/n]. Responder sim para ambas as perguntas faz o que eu quero.

O problema surge quando tento fazer o script no Dockerfile, onde não consigo responder interativamente a essas perguntas. Minha primeira tentativa foi RUN pacman --noconfirm -Syu iptables-nft, mas isso não funciona porque --noconfirmsignifica ir com a resposta padrão, e a resposta padrão para a primeira pergunta é não. Então tentei remover iptablesprimeiro antes de instalar iptables-nft, mas iproute2depende de ou iptables, iptables-nfte basedepende de iproute2.

Isso me deixa com algumas abordagens que funcionam tecnicamente, mas todas me deixam com preocupações:

  1. RUN yes | pacman -Syu iptables-nftfunciona, mas responder cegamente ya qualquer pergunta que o pacman fizer quebraria se ele fizesse uma pergunta que não fosse sim-não, e se ele fizesse qualquer pergunta padrão não diferente de "Remover iptables?", provavelmente seria ruim responder sim cegamente a elas também.
  2. RUN pacman --noconfirm -Rdd iptables && pacman --noconfirm -Syu iptables-nftfunciona, mas se iptablesalguma vez surgirem dependências que iptables-nftnão sejam satisfatórias, o sistema ficará quebrado e, se houver pacotes que foram instalados apenas porque o antigo iptablesprecisava deles, eles ficarão para trás indefinidamente.
  3. RUN pacman --noconfirm -Rsdd iptables && pacman --noconfirm -Syu iptables-nftfunciona, mas apresenta o mesmo risco de quebra de sistema que o #2, e também desinstala vários outros pacotes apenas para reinstalá-los imediatamente.

Existe uma solução melhor do que qualquer uma das acima? Idealmente, eu gostaria apenas de um equivalente pacman de dnf swap, mas não consigo encontrar nada parecido.

arch-linux
  • 1 respostas
  • 101 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