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-254697

z.h.'s questions

Martin Hope
z.h.
Asked: 2021-10-09 05:59:50 +0800 CST

É correto que o tipo de assinatura de uma chave ssh seja imutável?

  • 0

Ao gerar pares de chaves usando ssh-keygen, pode-se especificar o tipo de assinatura desejado por -t, como ssh-keygen -t ssh-rsa. Eu me pergunto, o tipo de assinatura de uma chave privada ssh é imutável , uma vez que os pares de chaves são criados?

Se for mutável, qual ferramenta posso utilizar para alterar o tipo de assinatura? e como?

Estou fazendo esta pergunta porque uma das minhas chaves antigas usa ssh-rsao tipo de assinatura e agora o ssh-rsaalgoritmo de assinatura ficou obsoleto.

ssh
  • 2 respostas
  • 418 Views
Martin Hope
z.h.
Asked: 2019-05-15 00:35:05 +0800 CST

mmap - mapear para o endereço acima de 2^48

  • 0

Eu entendo que o espaço de endereço usado de PCs de 64 bits é [0,2^48), mas posso usar mmap para mapear um arquivo para um endereço acima de 2 48 ?

Eu escrevi o seguinte código, mas descobri que o endereço mapeado ainda estava dentro [0,2^48).

int
main(void) {
    const char* name = "/tmp/file";

    int fd = open(name, O_RDONLY);
    if (fd < 0) {
        perror("open");
        exit(-1);
    }

    int pageSize = sysconf(_SC_PAGE_SIZE);
    void* targetAddr = (void*)(0UL - pageSize);

    char* str = mmap(targetAddr, pageSize, PROT_READ, MAP_SHARED, fd, 0);
    if (str == MAP_FAILED) {
        perror("mmap");
        exit(-1);
    }

    printf("addr: %p\n", str);

    return 0;
}

Saída de amostra:addr: 0x7fc761f6f000

É possível mapear algum arquivo para o endereço acima de 2 48 com mmap?

Se não, como posso usar o bit48-bit63 "não usado"?

Estou curioso para saber como usar os bits mais altos do endereço.

SO: Ubuntu16.04

Tamanho da memória: 4 GB

mmap
  • 1 respostas
  • 247 Views
Martin Hope
z.h.
Asked: 2019-05-06 00:55:54 +0800 CST

O que faz com que o Make exclua arquivos intermediários?

  • 19

Eu escrevi um Makefile e descobri que ao executar o makecomando, um inesperado rmfoi executado, depois que todos os comandos no Mmakefile foram feitos. Mas eu não escrevi o rmcomando no Makefile.

run-%: d/%.out
    $<

d/%.out: d/%.c
    gcc -o $(subst .c,.out,$<) $<

Saída de execução make run-a:

gcc -o d/a.out d/a.c
d/a.out
rm d/a.out

Observe o trailing rm d/a.out, que eu não escrevi.

Em que circunstância o rmcomando automático será adicionado?

make
  • 1 respostas
  • 4204 Views
Martin Hope
z.h.
Asked: 2019-03-23 02:49:23 +0800 CST

algo errado com meu makefile sobre curinga

  • 1

Eu tenho um monte de .carquivo de origem de teste no diretório tests/. Agora eu quero compilar e vinculá-los respectivamente e produzir o executável *.outem tests/. Então eu escrevi um makefile, que não funcionou.

# ...
TestDir := tests
TestSourceFile := $(shell sh -c "ls tests/*.c")
TestTargetFile := $(subst .c,.out,$(TestSourceFile))

TestFrame := testframe.o

TestNeededObjectFile := $(TestFrame) \
    + util.o \
    + tokennames.o \
    + lex.yy.o \
    + hex.o \

.PHONY: test-%

test-%: $(TestDir)/%.out
    $^

.PHONY: test

test: $(TestTargetFile)
    @for t in $(TestTargetFile); do \
        $$t ; \
    done

$(TestDir)/%.out: $(TestDir)/%.o $(TestNeededObjectFile)
    gcc -o $@ $^

%.o : %.c
    gcc -c $(CFLAGS) $^

clean:
    rm -rf *.o lextest *.yy.? *.tab.? *.output $(TokenNameFile) \
        $(TestDir)/*.out

Quando executo make test-add( add.cis in tests/), espero ver add.outin, tests/mas ocorre um erro:

> make test-add
make: *** No rule to make target 'tests/add.out', needed by 'test-add'.  Stop.

Eu quero saber como escrever este makefile corretamente e porque este makefile está errado.

linux make
  • 1 respostas
  • 1668 Views
Martin Hope
z.h.
Asked: 2019-01-07 00:06:09 +0800 CST

comando gdb-customize, como testar se uma variável está definida?

  • 0

Estou depurando com gdb e preciso definir alguns comandos auxiliares. Basicamente, quero que meu comando personalizado funcione de maneira diferente, dependendo do número de argumentos fornecidos.

Então tenho que testar se $arg*é dado, veja o código abaixo:

define pgdir

    set $pgdir = $arg0

    if ($arg1) {
        // show the corresponding PDE
    } else {
        // show the whole page directory
    }

end

É possível testar se uma variável é nula?

gdb
  • 3 respostas
  • 96 Views
Martin Hope
z.h.
Asked: 2018-08-26 16:43:54 +0800 CST

passe stdout fd para 'ler' a chamada do sistema, mas ainda funciona bem [duplicado]

  • 0
Essa pergunta já tem respostas aqui :
Como (e por que) usar stderr para leitura e escrita? (2 respostas)
Todos os fluxos padrão operam no mesmo arquivo (/dev/tty)? (1 resposta)
Fechado há 4 anos .

Eu passo 1(stdout)/ 2(stderr) para a readchamada do sistema, mas ainda funciona bem. Então eu passo 0(stdin) para a writechamada do sistema e descubro que funciona também!

int main(int argc, char** argv){
    char buf[1024] = "abcdefghi\n";

    write(0, buf, 10);

    char readbuf[1024] = {0};
    // read(1, readbuf, 10); works too
    read(2, readbuf, 10);
    write(2, readbuf, 10);

    return 0;
}

resultado:

abcdefghi
hey stdin  <-- I input this
hey stdin

Confuso, pensei que deveria ser um erro.

Experiência:

Então eu tentei redirecionar fd 2.

$ ./a.out 2>/dev/null

desta vez, tanto a leitura quanto a segunda gravação não são 'visíveis'. A saída é

abcdefgi

Então o stderr pode ser usado para leitura?

Eu então fecho o stdout & stderr e faço duas cópias do stdin:

int main(int argc, char** argv){
    char buf[1024] = "abcdefghi\n";

    close(1);
    close(2);

    dup2(0, 1);
    dup2(0, 2);

    write(0, buf, 10);

    char redbuf[1024] = {0};
    read(2, redbuf, 10);
    write(2, redbuf, 10);

    return 0;
}

Novamente funciona.

resultado:

abcdefghi
hey stdin  <-- I input this
hey stdin

Então stdin pode ser usado para escrever?

Preciso de uma explicação aqui.

Pergunta

Eu quero saber:

Por que stdout/stderr pode ser usado para leitura?

Por que stdin pode ser usado para gravação?

Os três fluxos ( stdin,stdout,stderr ) são internamente um fluxo?

Se não, por que estou obtendo esse resultado?

file-descriptors system-calls
  • 2 respostas
  • 2181 Views
Martin Hope
z.h.
Asked: 2018-07-01 16:36:00 +0800 CST

A variável de ambiente $ PATH de um ambiente de desktop é diferente daquela em um shell?

  • 1

Estou tentando encontrar o .desktoparquivo para qtcreator, então escrevo isso:

$ for p in ${XDG_DATA_DIRS//:/ }; do
    grep -rni 'qtcreator' $p;
done

E aqui estão as linhas mais relevantes:

/usr/share/app-install/desktop/qtcreator-plugin-ubuntu:ubuntusdk.desktop:2:X-AppInstall-Package=qtcreator-plugin-ubuntu
/usr/share/app-install/desktop/qtcreator-plugin-ubuntu:ubuntusdk.desktop:6:Exec=qtcreator %F
/usr/share/app-install/desktop/qtcreator-plugin-ubuntu:ubuntusdk.desktop:7:Icon=ubuntu-qtcreator
/usr/share/app-install/desktop/qtcreator:qtcreator.desktop:2:X-AppInstall-Package=qtcreator
/usr/share/app-install/desktop/qtcreator:qtcreator.desktop:6:Exec=qtcreator %F
/usr/share/app-install/desktop/qtcreator:qtcreator.desktop:7:Icon=QtProject-qtcreator
/usr/share/app-install/desktop/qhimdtransfer:qhimdtransfer.desktop:12:#Icon=qtcreator_logo_32

Eu acho que qtcreator:qtcreator.desktopé a entrada da área de trabalho para o QtCreator, então eu abro e descubro:

[Desktop Entry]
X-AppInstall-Package=qtcreator
X-AppInstall-Popcon=292
X-AppInstall-Section=universe

Exec=qtcreator %F
Icon=QtProject-qtcreator
Type=Application
Terminal=false
Name=Qt Creator
GenericName=Integrated Development Environment
MimeType=text/x-c++src;text/x-c++hdr;text/x-xsrc;application/x-designer;application/vnd.nokia.qt.qmakeprofile;application/vnd.nokia.xml.qt.resource;
Categories=Qt;Development;IDE;
InitialPreference=9

X-Ubuntu-Gettext-Domain=app-install-data

qtcreator não está na variável $PATH do shell . Mas ainda posso iniciar o QtCreator na unidade do gnome.

Nas variáveis ​​freedesktop-exec, notei

Se nenhum caminho completo for fornecido, o executável será pesquisado na variável de ambiente $PATH usada pelo ambiente de desktop.

Pergunta

A variável de ambiente $ PATH de um ambiente de desktop é diferente de um shell?

Em caso afirmativo, onde está o arquivo de configuração contendo a variável $PATH para ambiente de desktop?

Eu instalo uma versão mais recente do QtCreator, em seguida, inicio o QtCreator na área de trabalho e descubro que ele faz referência à versão mais recente sem alterar o qtcreator:qtcreator.desktoparquivo. Acho que tem algo a ver com o caminho do qt?

Ambiente de trabalho: gnome

SO: Ubuntu16.04

Editar

O problema real que encontrei não foi sobre $ PATH (veja minha resposta). A resposta de Gilles é na verdade a resposta para 'A variável de ambiente $PATH de um ambiente de desktop é diferente daquela em um shell?' então aceitei caso alguém tenha a mesma dúvida que eu.

desktop qt
  • 2 respostas
  • 1672 Views
Martin Hope
z.h.
Asked: 2018-05-12 00:31:40 +0800 CST

Comando com pipeline e redirecionamento

  • 3

Qual é a ordem dos comandos executados que possuem redirecionamento de pipeline e de saída?

Digamos que façamos o seguinte:

Charles@myzone:/tmp$ mkdir /tmp/testdir      
Charles@myzone:/tmp$ cd /tmp/testdir   
Charles@myzone:/tmp/testdir$ touch file1 file2  
Charles@myzone:/tmp/testdir$ ls | wc -l
2
Charles@myzone:/tmp/testdir$ ls | wc -l > ls_result
Charles@myzone:/tmp/testdir$ cat ls_result
3

Eu sei que se você fizer ls > resultisso result, conterá o nome de si mesmo, porque o shell fará algo como

1) criar/abrir arquivo chamado result 2) definir o fd resultpara ser stdout 3) execls

Eu esperava ls_resultter o valor 2, mas é 3.

Pergunta

Como o comando ls | wc -w > ls_resultacima é executado?

É equivalente a (ls | wc -w ) > ls_result?

Alguns links com informações relativas? (Pesquisei o manual do bash)

shell pipe
  • 2 respostas
  • 1013 Views
Martin Hope
z.h.
Asked: 2018-05-07 17:24:21 +0800 CST

inicialize normalmente mesmo com um loop infinito em /etc/rc.local

  • 1

Eu coloquei um script python com um loop infinito, /etc/rc.localmas a máquina inicializou com sucesso, o que me confunde.

O /etc/rc.localconteúdo:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

/home/pi/py/startsignal.py &
/home/pi/py/fan.py
touch /home/pi/thisisrun
exit 0

startsignal.py

#!/usr/bin/python
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)

GPIO.output(18, 1)

fan.py

#!/usr/bin/python
# coding: utf8
import RPi.GPIO as gpio

gpio.setmode(gpio.BCM)
upper_temp = 55
lower_temp = 45
# minutes
check_interval = 2

def get_temp():
    with open('/sys/class/thermal/thermal_zone0/temp', 'r') as f:
        temp = float(f.read()) / 1000
    return temp

def check_temp():
    if get_temp() > upper_temp:
        gpio.setup(23, gpio.OUT)
    elif get_temp() < lower_temp:
        gpio.setup(23, gpio.IN)

if __name__ == '__main__':
    # check every 2 minutes
    try:
        while True:
            check_temp()
            sleep(check_interval * 60)
    finally:
        gpio.cleanup()

Todo o código relevante está acima. Eu pensei sobre isso depois de pesquisar no Google.

  1. o #!/bin/sh -eindica que o script será encerrado assim que ocorrer um erro.
  2. o /home/pi/thisisrunarquivo não foi criado, então deve haver um erro acima desta linha
  3. depois de inicializar no sistema, posso ver que fan.pyestá em execução. Então eu acho que o erro ocorre durante a execução do fan.py. Mas o fan.pytem um loop infinito nele!

Como um script python pode gerar um erro, mas ainda é executado normalmente?

Como pode /bin/shdetectar o erro quando o fan.pynunca retorna?

SO: raspbian stretch

shell rc
  • 1 respostas
  • 1990 Views
Martin Hope
z.h.
Asked: 2018-05-06 23:27:01 +0800 CST

Tem permissão de grupo, mas não consegue criar arquivo

  • 9

Achei uma coisa estranha enquanto brincava com o pi3B. Eu quero criar um arquivo /sys/class/gpio( apenas bisbilhotando, sem motivo específico ), mas recebo uma permissão negada . Abaixo algumas informações.

pi@raspberrypi:/sys/class/gpio $ groups
pi adm dialout cdrom sudo audio video plugdev games users input netdev gpio i2c spi
pi@raspberrypi:/sys/class/gpio $ ls -ld .
drwxrwx--- 2 root gpio 0 May  6 00:28 .
pi@raspberrypi:/sys/class/gpio $ touch somefile
touch: cannot touch 'somefile': Permission denied

Como você pode ver, estou no grupo gpio e o grupo tem a permissão de gravação do diretório /sys/class/gpio.

Portanto, a questão é por que não consigo criar novos arquivos, /sys/class/gpiomesmo que o grupo do qual faço parte tenha permissão.

Eu tentei relogar e reiniciar depois de adicionar o usuário pi ao grupo gpio e isso foi há vários dias.

SO: raspbian stretch

tentounewgrp newgrp

permissions directory-structure
  • 1 respostas
  • 560 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