Estou com problemas ao usar dma_alloc_coherent(NULL, 1, &ack_physical_address, GFP_KERNEL); atingindo a desreferência de ponteiro nulo e, portanto, #PF. Quero criar um pequeno local de memória física contíguo de 1 byte.
Originalmente, mv(1)
era uma operação de renomeação; atualizava nomes em sistemas de arquivos e não copiava arquivos. Mais recentemente, um recurso de conveniência foi adicionado, pelo qual se a origem e o destino estivessem em sistemas de arquivos diferentes, ele copiaria e excluiria os arquivos. Também conhecido como "inter-device move".
Agora eu estava tentando arrumar meus backups. Eu queria mudar .../rest2/Public/Backups
para .../rest2/Backup/(Backups)
, então:
root@ts412:/QNAP/mounts/rest2# mv Public/Backups Backup/
Onde:
root@ts412:/QNAP/mounts/rest2# df -h /QNAP/mounts/rest2/Public/
Filesystem Size Used Avail Use% Mounted on
/dev/sdb10 831G 715G 75G 91% /QNAP/mounts/rest2
root@ts412:/QNAP/mounts/rest2# df -h /QNAP/mounts/rest2/Backup/
Filesystem Size Used Avail Use% Mounted on
/dev/sdb10 831G 715G 75G 91% /QNAP/mounts/rest2
Então, o mesmo sistema de arquivos:
(Para sua informação, rest2
é "o resto do espaço em disk2
")
Mas a mudança começou a se comportar como uma "mudança entre dispositivos" (alta CPU, discos ocupados, vários erros sobre diretórios não vazios etc.), então eu a eliminei.
Verificando de uma forma ligeiramente diferente (observe o .
):
root@ts412:/QNAP/mounts/rest2# df -h Backup/.
Filesystem Size Used Avail Use% Mounted on
/dev/sdb10 831G 715G 75G 91% /QNAP/mounts/rest2
root@ts412:/QNAP/mounts/rest2# df -h Public/Backups/.
Filesystem Size Used Avail Use% Mounted on
/dev/sdb10 831G 715G 75G 91% /QNAP/mounts/rest2/Public
Então eu lembro que EU TAMBÉM tinha um bind mount (ele torna os nomes compartilhados via NFS mais amigáveis). Então eu desmontei o bind mount extra:
root@ts412:/QNAP/mounts/rest2# umount /QNAP/mounts/rest2/Public
root@ts412:/QNAP/mounts/rest2# df -h Public/Backups/.
Filesystem Size Used Avail Use% Mounted on
/dev/sdb10 831G 715G 75G 91% /QNAP/mounts/rest2
root@ts412:/QNAP/mounts/rest2# mv Public/Backups Backup/
E mv(1)
foi instantâneo, como eu esperava.
Então, apesar dos s extras mount(8)
, a fonte e o alvo sempre estavam no mesmo sistema de arquivos , o que mount -o bind /QNAP/mounts/rest2/Backups /Backups
não afeta isso. Então, estou pensando se mv(1)
obtém pontos de montagem de volta /QNAP/mounts/rest2
para um e /QNAP/mounts/rest2/Public
para o outro, ele decide incorretamente que os dois arquivos estão em sistemas de arquivos diferentes?
Estou colaborando em uma implantação que visa fornecer Hadoop, Hive e Impala para fins de aprendizado e ensino. Usamos o Ubuntu 22.04 como sistema base em uma VM.
Enquanto tudo relacionado ao HDFS, Hadoop e Hive está funcionando bem (incluindo PostgreSQL para Hive Metastore), a instalação do Impala está sendo um desafio muito difícil. Eu apliquei os comandos recomendados na Documentação do Apache para construir o Impala, e então executei make install
.
Após a construção, ao tentar executar catalogd
o serviço, ele não inicia, registrando o seguinte:
cat /tmp/catalogd.pc.hadoop.log.ERROR.20250311-114741.4782
Log file created at: 2025/03/11 11:47:41
Running on machine: pc
Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
E0311 11:47:41.450573 4782 logging.cc:256] stderr will be logged to this file.
E0311 11:48:10.130164 4782 catalog.cc:101] NoSuchMethodError: org.apache.hadoop.hive.metastore.IMetaStoreClient.getThriftClient()Lorg/apache/hadoop/hive/metastore/api/ThriftHiveMetastore$Client;
. Impalad exiting.
Picked up JAVA_TOOL_OPTIONS: -Dsun.java.command=catalogd
statestored
e admissiond
estão trabalhando.
Usando o commit 34b17db7b473d6729ac6c9cf139fcf410f18d941 do Impala e o Hive 4.0.1 pré-compilado.
Debian 12. Se eu tento reproduzir um vídeo pelo meu fone de ouvido bluetooth, o vídeo congela na inicialização. Tentei mpv e vlc. Se eu usar pavucontrol e selecionar a placa de som da placa-mãe, o vídeo reproduz sem problemas e o áudio fica ótimo. Se eu alternar entre os dois, o vídeo para e começa.
Tentei reiniciar o bluetooth e o pulseaudio, mas sem sucesso.
Meu fone de ouvido funciona bem há anos. Esta é a primeira vez que isso acontece.
Como posso corrigir isso sem reiniciar?
Considere um exemplo artificial usando um objeto JSON como este, onde eu quero extrair os campos id
, firstname
e relacionados lastname
para cada um dos muitos objetos de array em variáveis de shell para processamento posterior (não JSON).
{
"customers": [
{
"id": 1234,
"firstname": "John",
"lastname": "Smith",
"other": "fields",
"are": "present",
"here": "etc."
},
{
"id": 2468,
"firstname": "Janet",
"lastname": "Green",
"other": "values",
"are": "probably",
"here": "maybe"
}
]
}
Para dados simples posso usar isto,
jq -r '.customers[] | (.id + " " + .firstname + " " + .lastname)' <data.json |
while IFS=' ' read id firstname lastname
do
# More processing, but omitted for the example
printf '%s -- %s -- %s\n' "$id" "$firstname" "$lastname"
done
Saída
1234 -- John -- Smith
2468 -- Janet -- Green
mas é claro que isso falhará com firstname
valores de duplo sentido, como Anne Marie
. Alterar o separador para outro caractere, como #
parece mais uma falsificação do que uma solução, mas pode ser aceitável.
Para situações mais complexas, eu poderia escolher a lista de id
valores e então trocar velocidade por precisão voltando para extrair os elementos firstname
and correspondentes lastname
. Algo assim:
jq -r '.customers[].id' <data.json |
while IFS= read id
do
block=$(jq -r --arg id "$id" '.customers[] | select(.id == $id)' <data.json);
firstname=$(jq -r '.firstname' <<<"$block")
lastname=$(jq -r '.lastname' <<<"$block")
# More processing, but omitted for the example
printf '%s -- %s -- %s\n' "$id" "$firstname" "$lastname"
done
Saída
1234 -- John -- Smith
2468 -- Janet -- Green
No entanto, nenhuma delas é correta e eficiente. Embora eu não vá executar o código real em alta frequência, gostaria de entender se há uma maneira mais apropriada de obter múltiplos elementos de dados de forma segura e eficiente de uma estrutura de objeto JSON para variáveis de shell?
Estou observando um comportamento no bash que só acontece na minha pasta pessoal. Não consegui reproduzi-lo em nenhuma outra máquina ou pasta.
$ echo --one [--two] --three
--one f --three
$ # Huh?
$ echo [--two] # Why is echo changing my string?
f
$ echo --two # Does it happen without the brackets?
--two
$ echo [--x] --x # Does it happen with a different string?
f --x
$ echo [--arg] --arg # So anything within [-- ... ] changes to f?
[--arg] --arg
$ # WHAT?
$ echo [-x] [--x] [---x] # Does the number of hyphens matter?
[-x] f [---x]
$ cd ./folder; echo [--x]
[--x]
$ # ?????
Então isso só acontece na minha pasta pessoal. Por quê?
Não encontrei nenhuma menção à expansão de uma string para f
no manual do bash. Por que algumas strings estão expandindo para, f
mas outras não? Poderia ser o meu IFS? Tentei esvaziar completamente meu arquivo ~/.bashrc
, e o problema persiste. No entanto, quando tentei isso em um alpine
contêiner Docker, não consegui fazer a f
expansão ocorrer. O que está acontecendo aqui?
(Postando porque encontrei a solução, o que é bastante embaraçoso.)
Estou automatizando o aumento de versão do meu projeto com este script bash:
#!/usr/bin/env bash
CHANGELOG="Changelog.md"
DEBIAN_CHANGELOG="debian/changelog"
UPSTREAM_VERSION=$(cat VERSION)
# Updating entries in rpm files
DEB_RELEASE_NOTES=$(awk '{print " * " $0}' < RELEASE_NOTES)
echo "Adding new Debian changelog entry for version $UPSTREAM_VERSION."
dch -D unstable -m "$DEB_RELEASE_NOTES" --newversion "$UPSTREAM_VERSION-0debian1-unstable1"
# Prompt user to edit Debian changelog
$EDITOR_CHOICE "$DEBIAN_CHANGELOG"
echo "Version updated successfully: $UPSTREAM_VERSION"
O que ele faz é sincronizar e colocar a versão em ambos os pacotes rpm e debian. Mas este comando:
dch -D unstable -m "$DEB_RELEASE_NOTES" --newversion "$UPSTREAM_VERSION-0debian1-unstable1"
Isso me dá alguns problemas porque em alguns lugares no debian/changelog o seguinte:
mkdotenv (0.2.0-0debian1-unstable1) unstable; urgency=medium
* * 1. Split codebase into multiple files. * 2. Use a seperate
version file and define built version upon compile. * 4. [BUGFIX]
If input file is same as output file copy input file into a
temporary one. * 5. Improved Documentation
-- Dimitrios Desyllas <[email protected]> Mon, 10 Mar 2025 20:08:00 +0200
Enquanto o RELEASE_NOTES
arquivo contém:
1. Split codebase into multiple files.
2. Use a seperate version file and define built version upon compile.
4. [BUGFIX] If input file is same as output file copy input file into a temporary one.
5. Improved Documentation
Você sabe por que todas as linhas estão presas como um único marcador???
No macOS, #!/bin/bash
isso significa que um script usará o bash do sistema, que é muito antigo (3.2, ano de 2006) e (para mim, pelo menos) praticamente inútil.
Então você pode instalar o bash moderno usando Homebrew ou MacPorts, e usar algo assim:
#!/usr/bin/env bash
Então, a terceira abordagem é
#!/opt/homebrew/bin/bash
Mas e se você executar esse script em um Mac onde o bash moderno é instalado usando MacPorts em vez do Homebrew?
Qual é a melhor prática aqui? (Talvez criar um link simbólico /usr/local/bin
que aponte para /opt/homebrew/bin/bash
, e depois #!/usr/local/bin
?)
Gostaria de ter parâmetros padrão, ou seja, meu exemplo mínimo reproduzível é:
#!/usr/bin/zsh
a=${1:a}
printf 'a: "%s"\n' "${a}"
b=${2:./build}
printf 'b: "%s"\n' "${b}"
Eu esperaria ver, ao executar ./demo.zsh
sem argumentos:
a: "a"
b: "./build"
Em vez disso eu recebo
a: ""
./demo.zsh:4: bad floating point constant
- por que
${1:a}
parece assumir$1
que está definido e não é zero, mas o$a
expandido é uma string vazia? - de onde vem a análise incorreta de ponto flutuante? Se eu substituir
./build
porbuild
, ele reclama sobreb
ser um modificador desconhecido.
Se eu corro ./demo.zsh asdf bar
, eu ganho
a: "/tmp/fasf"
./demo.zsh:4: bad floating point constant
o que, francamente, é ainda mais confuso; /tmp/
de onde vem (é o cwd).
Eu uso o arch e quero definir a localidade de todo o meu sistema para C
(e somente C
). C
não está listado dentro /etc/locale.gen
(e somente en_US.UTF-8 UTF-8
não está comentado), mas C
pode ser encontrado dentro de /usr/share/i18n/locales/
.
Executei o comando localectl set-locale C
e fiz logout/login, e o comando locale
mostra C
tudo -- bom.
minhas perguntas são:
preciso comentar uma linha
en_US.UTF-8 UTF-8
dentro do arquivolocale.gen
e executar um comandolocale-gen
para remover outros resquícios de localidade indesejados do meu sistema?antes de executar o comando
locale-gen
devo anexá-loC
ao arquivolocale.gen
e, se sim, qual<charmap>
é o padrão para isso?
Eu olho dentro do diretório, /usr/share/i18n/charmaps/
mas não vejo nada parecido com C.gz
isso. está UTF-8.gz
correto ou ANSI_X3.110-1983.gz
um ISO-*
/ ISO_*
?
Eu executo o comando localectl list-locales
e vejo:
C.UTF-8
en_US.UTF-8
isso significa que minha localidade não é inteiramente e somente ela C
e que tenho resquícios indesejados de outras pessoas?