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
Nungesser Mcmindes
Asked: 2025-04-18 09:28:26 +0800 CST

fork() faz com que o buffer DMA na memória física retenha dados obsoletos em gravações subsequentes

  • 13

Estou trabalhando em uma aplicação C++ no Ubuntu 20.04 que usa PCIe DMA para transferir dados de um buffer de espaço do usuário para o hardware. O buffer é mapeado para uma região fixa de 1K de memória física por meio de uma biblioteca personalizada (plib->copyDataToBuffer). Depois de chamar fork() e executar um processo filho (que apenas chama um programa externo e sai), notei que as gravações subsequentes no buffer pelo processo pai não são refletidas na memória física — o kernel ainda vê os dados antigos de antes da bifurcação.

Detalhes principais: O buffer de 1K é mapeado especificamente para DMA; ele é fixado e mapeado para um endereço físico conhecido.

Antes do fork(), uma chamada para plib->copyDataToBuffer atualiza corretamente a memória física.

Após fork(), o processo pai chama plib->copyDataToBuffer novamente com novos dados, e msync retorna sucesso, mas o conteúdo da memória física permanece inalterado.

O processo filho não toca no buffer; ele apenas executa um comando não relacionado via execvp.

Minhas suposições e preocupações: fork() causa COW (Copy-on-Write), mas como somente o pai grava no buffer, eu esperava que o conteúdo atualizado refletisse na memória física.

O comportamento do COW ou o remapeamento de memória pós-bifurcação podem estar interferindo nas regiões de memória mapeadas por DMA?

Confirmei que plib->copyDataToBuffer executa a gravação corretamente de uma perspectiva de software, mas o conteúdo real da memória física (verificado a partir do espaço do kernel) permanece obsoleto.

Pergunta: Por que a memória física que dá suporte ao meu buffer DMA retém dados obsoletos após um fork() + exec em um processo filho, mesmo que o pai grave novos dados depois?

Quais são as melhores práticas para garantir atualizações consistentes de memória física para buffers DMA em chamadas fork()?

linux
  • 2 respostas
  • 553 Views
Martin Hope
learningtech
Asked: 2025-04-18 04:43:16 +0800 CST

Permissão de Cgroups negada no Ubuntu 22.04.5, mas funciona no Ubuntu 22.04.03

  • 6

Estou tentando aprender sobre cgroups. Executei estes dois comandos:

root@localhost:~# mkdir /sys/fs/cgroup/container_cpu
root@localhost:~# echo '50000 100000' | sudo tee /sys/fs/cgroup/container_cpu/cpu.max

Isso funcionou bem no meu Ubuntu 22.04.3 no meu VirtualBox, mas no Ubuntu 22.04.5 no linode.com, recebo o erro:

tee: /sys/fs/cgroup/container_cpu/cpu.max: Permission denied

Alguém pode me dizer o que fiz de errado?

ubuntu
  • 1 respostas
  • 27 Views
Martin Hope
Marc Le Bihan
Asked: 2025-04-18 00:16:46 +0800 CST

Um Vagrant multimáquina é uma boa escolha para simular um cluster Kubernetes?

  • 4

Estou diante de um livro sobre como aprender Kubernetes.

Ele contém muitos capítulos sobre como lidar com um cluster Kubernetes e incentiva o leitor a criar uma conta em um servidor em nuvem, se possível. Caso contrário, tente criar um cluster com alguns Raspberry Pis. Mas eu não quero ou não posso me dar ao luxo de fazer essas escolhas. Tenho meu próprio computador em casa, só isso.

É algo que me impede de criar um Vagrant multimáquina para criar todos os computadores que meu livro aborda?
Acredito que isso poderia funcionar...

Minha pergunta é simples e ingênua. Mas se houver um obstáculo ou uma grande dificuldade que eu certamente enfrentarei, gostaria de saber imediatamente antes de escolher esse caminho errado. Obrigado!

kubernetes
  • 1 respostas
  • 39 Views
Martin Hope
Paolo Lorenzini
Asked: 2025-04-18 00:09:08 +0800 CST

editar todos os valores em uma coluna específica com base no intervalo de números de linha

  • 6

Tenho um arquivo PDB (coordenadas de átomos em uma proteína) em uma máquina Linux:

ATOM      1   N  GLY A   1       0.535  51.766   5.682  1.00  0.00              
ATOM      2  CA  GLY A   1      -0.712  50.962   5.596  1.00  0.00              
ATOM      3   C  GLY A   1      -1.243  50.872   4.179  1.00  0.00              
ATOM      4   O  GLY A   1      -1.313  51.888   3.492  1.00  0.00              
ATOM      5   N  GLN A   2      -1.600  49.664   3.737  1.00  0.00              
ATOM      6  CA  GLN A   2      -2.221  49.468   2.423  1.00  0.00              
ATOM      7   C  GLN A   2      -3.542  48.719   2.507  1.00  0.00              
ATOM      8   O  GLN A   2      -3.722  47.844   3.356  1.00  0.00              
ATOM      9  CB  GLN A   2      -1.280  48.738   1.468  1.00  0.00              
ATOM     10  CG  GLN A   2      -0.976  47.294   1.830  1.00  0.00              
....     ..  ..   .. .   .       ....   ....     ....   ....  ....
TER   SPLIT LINE FOR INTERNAL USE ONLY
ATOM      1  O5'  G  A   1     -44.412  97.503  31.177  1.00  0.00              
ATOM      2  C5'  G  A   1     -45.447  96.803  31.882  1.00  0.00              
ATOM      3  C4'  G  A   1     -45.225  95.295  31.894  1.00  0.00              
ATOM      4  O4'  G  A   1     -46.441  94.578  31.654  1.00  0.00              
ATOM      5  C3'  G  A   1     -44.328  94.850  30.748  1.00  0.00              
ATOM      6  O3'  G  A   1     -42.943  94.877  31.129  1.00  0.00              
ATOM      7  C2'  G  A   1     -44.804  93.425  30.542  1.00  0.00              
ATOM      8  O2'  G  A   1     -44.163  92.592  31.466  1.00  0.00              
ATOM      9  C1'  G  A   1     -46.304  93.444  30.772  1.00  0.00              
ATOM     10  N9   G  A   1     -46.965  93.699  29.495  1.00  0.00
....     ..  ..   .  .   .     .......  ......   .....  ....   ...

O registro TER marca explicitamente o fim de uma cadeia de aminoácidos específica. Quero alterar o ID da cadeia da proteína na quinta coluna pelo awk para atribuir o ID correto à nova cadeia após TER.

Resultado esperado:

ATOM      1   N  GLY A   1       0.535  51.766   5.682  1.00  0.00              
ATOM      2  CA  GLY A   1      -0.712  50.962   5.596  1.00  0.00              
ATOM      3   C  GLY A   1      -1.243  50.872   4.179  1.00  0.00              
ATOM      4   O  GLY A   1      -1.313  51.888   3.492  1.00  0.00              
ATOM      5   N  GLN A   2      -1.600  49.664   3.737  1.00  0.00              
ATOM      6  CA  GLN A   2      -2.221  49.468   2.423  1.00  0.00              
ATOM      7   C  GLN A   2      -3.542  48.719   2.507  1.00  0.00              
ATOM      8   O  GLN A   2      -3.722  47.844   3.356  1.00  0.00              
ATOM      9  CB  GLN A   2      -1.280  48.738   1.468  1.00  0.00              
ATOM     10  CG  GLN A   2      -0.976  47.294   1.830  1.00  0.00                 
TER   SPLIT LINE FOR INTERNAL USE ONLY
ATOM      1  O5'  G  B   1     -44.412  97.503  31.177  1.00  0.00              
ATOM      2  C5'  G  B   1     -45.447  96.803  31.882  1.00  0.00              
ATOM      3  C4'  G  B   1     -45.225  95.295  31.894  1.00  0.00              
ATOM      4  O4'  G  B   1     -46.441  94.578  31.654  1.00  0.00              
ATOM      5  C3'  G  B   1     -44.328  94.850  30.748  1.00  0.00              
ATOM      6  O3'  G  B   1     -42.943  94.877  31.129  1.00  0.00              
ATOM      7  C2'  G  B   1     -44.804  93.425  30.542  1.00  0.00              
ATOM      8  O2'  G  B   1     -44.163  92.592  31.466  1.00  0.00              
ATOM      9  C1'  G  B   1     -46.304  93.444  30.772  1.00  0.00              
ATOM     10  N9   G  B   1     -46.965  93.699  29.495  1.00  0.00  

Tudo precisa ser separado com os mesmos espaços, o seguinte arranjo estaria errado:

ATOM   3674  CD1 PHE A 460       2.350  79.471  35.466  1.00  0.00              
ATOM   3675  CD2 PHE A 460       1.037  81.443  35.196  1.00  0.00              
ATOM   3676  CE1 PHE A 460       2.425  79.321  34.080  1.00  0.00              
ATOM   3677  CE2 PHE A 460       1.108  81.298  33.805  1.00  0.00              
ATOM   3678  CZ  PHE A 460       1.805  80.232  33.250  1.00  0.00              
TER SPLIT LINE FOR B USE ONLY
ATOM 1 O5' G B 1 -44.412 97.503 31.177 1.00 0.00
ATOM 2 C5' G B 1 -45.447 96.803 31.882 1.00 0.00
ATOM 3 C4' G B 1 -45.225 95.295 31.894 1.00 0.00
ATOM 4 O4' G B 1 -46.441 94.578 31.654 1.00 0.00
ATOM 5 C3' G B 1 -44.328 94.850 30.748 1.00 0.00

Além disso, o arquivo termina com isto:

TER
ENDMDL

Há uma linha em branco no final do arquivo que precisa ser deixada como está

text-processing
  • 3 respostas
  • 61 Views
Martin Hope
ivanbgd
Asked: 2025-04-17 23:55:11 +0800 CST

Como comparar a saída de um programa com um valor de referência em um script de shell?

  • 5

Tenho minha própria implementação de um servidor Redis que gostaria de testar por meio de um script de shell.

A ideia geral é alimentá-lo com alguns comandos por meio de nc, e como ncimprime a saída do meu programa (resposta) para stdout, capturar a resposta em uma variável de script e compará-la com a saída esperada.

Não consegui fazê-lo funcionar e não sei qual é o problema e como resolvê-lo.

Esta é uma parte do roteiro:

#!/bin/bash

set -eu

PORT=6380;

RUST_LOG=info ./run.sh --port $PORT 2>/dev/null & sleep 1; # Give it some time to start.

i=0;

i=$((i+1)); printf 'Running test #%d...' "$i";
response=$(printf "*1\r\n\$4\r\nPING\r\n" | nc localhost $PORT);
if [ "$response" = '+PONG\r\n' ]; then
  printf ' PASSED'
else
  printf ' FAILED\nGot:\n%s\n\n' "$response"
fi;
sleep 0.1;

pkill redis-server;

Este é apenas um exemplo de teste. Quando um usuário envia o PINGcomando, a resposta esperada é PONG, mas ela é codificada e enviada de volta como +PONG\r\n.

A saída CLI deste teste ( $ ./test.sh) é:

Running test #1... FAILED
Got:
+PONG

Então, parece que a variável $responserealmente contém o que deveria.

Tentei remover +, \r, \n, \r\nda saída de referência sem sucesso, só para ver se isso ajudaria.

Terei testes mais complicados que incluem um caractere que precisa ser escapado ( $), como \$5\r\nHello, na resposta.

A propósito, a configuração manual responsefunciona conforme o esperado.

response='+PONG\r\n';
if [ "$response" = '+PONG\r\n' ]; then
  echo Equal
else
  echo Different
fi;

Isto imprime Equal, como esperado.

Depois de adicionar a saída de depuração por meio de set -ex, posso ver que $responsearmazena +PONG\r, ou seja, sem \n.

Running test #1...++ printf '*1\r\n$4\r\nPING\r\n'
++ nc localhost 6380
+ response=$'+PONG\r'
+ '[' $'+PONG\r' = '+PONG\r\n' ']'
+ printf ' FAILED\nGot:\n%s\n\n' $'+PONG\r'
 FAILED
Got:
+PONG

Certo, então definir a saída de referência +PONG\rdeve funcionar, certo?

Running test #1...++ printf '*1\r\n$4\r\nPING\r\n'
++ nc localhost 6380
+ response=$'+PONG\r'
+ '[' $'+PONG\r' = '+PONG\r' ']'
+ printf ' FAILED\nGot:\n%s\n\n' $'+PONG\r'
 FAILED
Got:
+PONG

Claramente não.

Tentei encapsular responseem {}, assim: if [ "${response}" = '+PONG\r' ]; then, sem sucesso.

O que estou perdendo?

Também estou curioso para saber como e por que \nme perdi.

Estou executando-o zshem um Mac, se isso for mencionado, mas o comando diz claramente para usar bash.

Se eu executar ps -p $$o script de teste, obtenho 51547 ttys003 0:00.02 /bin/bash ./test.sh.

bash
  • 1 respostas
  • 100 Views
Martin Hope
Manuel Jordan
Asked: 2025-04-17 22:50:25 +0800 CST

SSH: Como verificar a senha de uma chave sem tentar uma conexão SSH?

  • 6

Sobre SSH, sei que o seguinte comando funciona:

ssh -i id_rsa <username>@<ip>

Claro:

  • O servidor remoto deve estar em execução
  • A senha da id_rsachave é solicitada e se for válida a conexão SSH acontece em paz

Até aqui está tudo bem


Gostaria de saber se é possível testar a senha, mas sem tentar se conectar ao servidor remoto. No caso de:

  • Se o servidor estiver inativo devido à manutenção e for necessário verificar se a senha está correta

Lembre-se : se o servidor estiver inativo, não será possível executar o ssh -i id_rsa <username>@<ip>comando.

Se for possível:

Pergunta

  • Como verificar a senha de uma chave, mas sem tentar uma conexão SSH?

Portanto algo como:

<command-requested> id_rsa
Write passphrase: <once written>
Passphrase is correct
ssh
  • 2 respostas
  • 51 Views
Martin Hope
gboffi
Asked: 2025-04-17 21:52:05 +0800 CST

Executar em segundo plano, evitando qualquer mensagem de controle de tarefa do shell [duplicado]

  • 9
Esta pergunta já tem respostas aqui :
desabilitando o controle de tarefas no bash (CTRL-Z) (4 respostas)
Fechado há 5 dias .

Vamos definir uma função shell (aqui o shell é Bash) e testá-la

$ s () { xterm -e sleep 5 & }
$ s
[1] 307926
$ 
[1]+  Done                    xterm -e sleep 5
$ 

Com meu significado específico de melhor , posso redefinir sassim

$ s () { xterm -e sleep 5 & disown ; }
$ s
[1] 307932
$ 
$ 

(nenhuma mensagem do shell quando o trabalho estiver concluído).

Aqui eu tenho que perguntar, é possível definir spara que eu tenha

$ s () { pre_magic xterm -e sleep 5 post_magic ; }
$ s
$ 
$ 

ou seja, suprimir as informações do trabalho impressas no terminal pelo shell?

bash
  • 1 respostas
  • 159 Views
Martin Hope
Mark
Asked: 2025-04-17 17:25:44 +0800 CST

O Audacity não consegue navegar no diretório /media mesmo que tenha permissões

  • 6

Estou usando o Ubuntu 24.10. Meu /mediadiretório (o ponto de montagem usual para HDD externo) tem as seguintes permissões:

$ ls -l / | grep media
drwxr-xr-x   4 root root       4096 mag 16  2024 media

O proprietário é root, mas tem permissões para executar (ou seja, entrar) no diretório. Como usuário normal, posso fazer:

$ ls /media/
mark  root

se eu executar o Audacity como usuário normal (instalado a partir de snap) e tentar abrir um arquivo de áudio, ele se recusa a entrar no /mediadiretório:

erro

Erro ao abrir o diretório /media: Permissão negada

Tentei:

sudo chmod -R a+rxw /media/

Mas nada mudou. O que devo fazer para permitir que o Audacity entre neste diretório?

permissions
  • 1 respostas
  • 42 Views
Martin Hope
user1887384
Asked: 2025-04-17 15:48:40 +0800 CST

Tentando fazer login no sftp falha

  • 5

Estou tentando configurar um servidor sftp usando o sftp integrado do openssh.

Subsystem       sftp    /usr/lib/openssh/sftp-server

e criei o usuário seguindo (mais ou menos (usando ansible), eu uso /sbin/nologin para shell e /dev/null é usado como skel) https://sftpcloud.io/learn/sftp/how-to-setup-sftp-server-on-ubuntu-22-04

mas quando tento conectar

sftp myuser@myip

Recebo o prompt e digito a senha, mas não funciona

client_loop: send disconnect: Broken pipe
Connection closed.  
Connection closed

O problema é que agora o diretório inicial do usuário está cheio de lixo.

$ ls -a
snap/  .cache  .local

e no syslog vejo MUITAS coisas acontecendo que parecem mais relacionadas ao login como um usuário normal (eu acho). Aqui estão algumas coisas

systemd[1]: Created slice user-1003.slice - User Slice of UID 1003.
systemd[1]: Starting [email protected] - User Runtime Directory /run/user/1003...
snapd-desktop-i[4568]: Detected new session 42 at /org/freedesktop/login1/session/_342
systemd[1]: Finished [email protected] - User Runtime Directory /run/user/1003.
systemd[1]: Starting [email protected] - User Manager for UID 1003...
systemd-xdg-autostart-generator[14091]: Exec binary 'start-pulseaudio-x11' does not exist: No such file or directory
systemd-xdg-autostart-generator[14091]: /etc/xdg/autostart/pulseaudio.desktop: not generating unit, executable specified in Exec= does not exist.
systemd[14080]: Queued start job for default target default.target.
systemd[14080]: Created slice app.slice - User Application Slice.
systemd[14080]: Created slice session.slice - User Core Session Slice.
systemd[14080]: Started ubuntu-report.path - Pending report trigger for Ubuntu Report.
systemd[14080]: Started launchpadlib-cache-clean.timer - Clean up old files in the Launchpadlib cache.
systemd[14080]: Starting gpg-agent-ssh.socket - GnuPG cryptographic agent (ssh-agent emulation)...
systemd[1]: Started [email protected] - User Manager for UID 1003.
systemd[1]: Started session-42.scope - Session 42 of User myuser.
systemd[14080]: Starting gnome-initial-setup-copy-worker.service - GNOME Initial Setup Copy Worker...
systemd[14080]: Started pipewire.service - PipeWire Multimedia Service.
systemd[14080]: Started filter-chain.service - PipeWire filter chain daemon.
systemd[14080]: Started snap.snapd-desktop-integration.snapd-desktop-integration.service - Service for snap application snapd-desktop-integration.snapd-desktop-integration.
systemd[14080]: Started wireplumber.service - Multimedia Service Session Manager.
systemd[14080]: Started pipewire-pulse.service - PipeWire PulseAudio.
systemd[14080]: Startup finished in 270ms.
systemd[14080]: Starting dbus.service - D-Bus User Message Bus...
pipewire[14099]: mod.jackdbus-detect: Failed to receive jackdbus reply: org.freedesktop.DBus.Error.ServiceUnknown: The name org.jackaudio.service was not provided by any .service files
wireplumber[14113]: SPA handle 'api.libcamera.enum.manager' could not be loaded; is it installed?
systemd[14080]: snap.snapd-desktop-integration.snapd-desktop-integration.service: Main process exited, code=exited, status=1/FAILURE
systemd[14080]: snap.snapd-desktop-integration.snapd-desktop-integration.service: Failed with result 'exit-code'.

Então, acho que o login aciona "outras coisas". Como desabilitar as coisas extras que estão acontecendo e usar apenas o SFTP? Tenho outros usuários "comuns" fazendo login no servidor que estou tentando configurar como um servidor SFTP, então preciso lidar com esses usuários SFTP de uma maneira especial. Mas como?

Eu uso o Ubuntu 24.04. Meu sshd_config diz:

UsePAM yes
ubuntu
  • 1 respostas
  • 41 Views
Martin Hope
BaRud
Asked: 2025-04-17 11:34:23 +0800 CST

alterar a cor da fonte stdio/stderr para o terminal

  • 5

Estou usando um tema escuro. Como você pode ver, os erros (ModuleNotFound do Python) são quase ilegíveis. Tenho duas perguntas.

  1. Essa cor é controlada pelo python ou pelo terminal?
  2. Como posso alterar a cor? Existe alguma configuração LS_COLOR?
terminal
  • 1 respostas
  • 22 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