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

cat's questions

Martin Hope
cat
Asked: 2018-10-30 11:52:56 +0800 CST

Função para definir condicionalmente uma variável somente leitura

  • 4

Se eu tivesse um script que define variáveis ​​somente leitura para alguns valores ímpares e define errexitpor causa de outras operações inseguras:

#!/bin/bash
set -e 
declare -r NOTIFY=$(case "$OS" in (macosx) echo macos_notify ;; (linux) echo linux_notify ;; (*) echo : ;; esac)
declare -r SAY=_say # _say is a function
declare -r VERSION=0.99
set +e 

E eu a fonte para obter as definições, na segunda vez porque está em desenvolvimento:

$ . s.bash 

$ . s.bash 
bash: declare: NOTIFY: readonly variable
Exited

Normalmente declare -r EXISTING_VAR, não pararia o script nem removeria a definição antiga e funcional de EXISTING_VAR.

Mas com errexit, atribuir a uma variável existente é compreensivelmente uma falha. As opções fáceis são remover -rou usar set +eessa parte do script.

Exceto isso, é possível escrever uma função Bash para substituir, declare -rmas não reatribuir, se o nome já existir ?

Eu tentei:

# arg #1: var name, #2: value
set_var_once () {
  # test whether the variable with the 
  # name stored in $1 exists 
  if [[ -z "${!1}" ]] 
  then # if it doesn't, set it
    declare -r $1=$2
  fi
}

Eu também tentei coisas ao longo das linhas de eval "declare -r $1=$(eval $2)", parece que evalé necessário em algum lugar aqui, mas não tenho certeza de onde.

Todas as versões de set_var_onceresultam em não definir a variável que deveriam.

bash shell-script
  • 3 respostas
  • 3363 Views
Martin Hope
cat
Asked: 2018-10-29 15:02:32 +0800 CST

Escrever um arquivo atomicamente sem alterar os inodes (preservar o link físico)

  • 5

A maneira normal de escrever um arquivo atomicamente com segurança Xno Unix é:

  1. Grave o novo conteúdo do arquivo em um arquivo temporário Y.
  2. rename(2) YparaX

Em duas etapas, parece que não fizemos nada além de mudar X"no local".

Ele é protegido contra condições de corrida e perda de dados não intencional (onde Xé destruído, mas Yestá incompleto ou destruído).

A desvantagem (neste caso) disso é que ele não grava o inode referido por Xin-place; rename(2)faz Xreferência a um novo número de inode.

Quando Xera um arquivo com contagem de links > 1 (um link físico explícito), agora ele não se refere ao mesmo inode de antes, o link físico está quebrado.

A maneira óbvia de eliminar a desvantagem é escrever o arquivo no local, mas isso não é atômico, pode falhar, pode resultar em perda de dados etc.

Existe alguma maneira de fazer isso atomicamente, rename(2)mas preservar links físicos?

Talvez para alterar o número do inode de Y(o arquivo temporário) para o mesmo que X, e dar o Xnome? Um "renomear" no nível do inode.

Isso efetivamente escreveria o inode referido por Xwith Y's new contents, mas não quebraria sua propriedade de link físico e manteria o nome antigo.

Se o hipotético inode "rename" fosse atômico, acho que isso seria atômico e protegido contra perda de dados / corridas.

rename inode
  • 1 respostas
  • 898 Views
Martin Hope
cat
Asked: 2018-10-18 09:23:24 +0800 CST

Fazendo backup do Linux em um sistema de arquivos Windows para restauração posterior

  • 0

Eu preciso fazer backup/copiar os arquivos da minha instalação do Linux para uma unidade externa, para que eu possa restaurá-los no novo disco maior.

O disco de destino para a restauração é duas vezes maior e terá partições maiores ext4e arquivos linux-swap. A criação de imagens de todo o disco ou de sua primeira partição não é realmente uma boa opção, porque ambos exigem re-particionamento posterior que eu gostaria de evitar.

Estou fazendo backup em uma unidade formatada com exFAT, mas existem alguns problemas ao copiar uma instalação do Linux ext4 para exFAT

  • pode destruir links físicos importantes e links simbólicos rápidos* do ext4sistema de arquivos (vai quebrar o Linux)

  • não preservará a propriedade/permissões e setuidbits do arquivo (vai quebrar o Linux)

  • não preservará os recursos (vairá quebrar o Linux)

  • também não preservará os atributos estendidos dos arquivos (xattrs), pois acredito que muitos arquivos têm informações importantes lá (não me importo com as ACLs do Unix, pois acho que não tenho nenhum arquivo usando-as)

Se eu copiasse os arquivos diretamente para NTFS, FAT32, exFAT, etc, muitos desses metadados seriam destruídos.

Eu não me importo com a compactação, pois o disco original é menor que minha unidade de backup, mas (GNU) tarparece preservar apenas permissões/propriedade (com -pe extrair com --same-owner), links e xattrs, mas o suporte ao recurso de arquivo é necessário para fazer backup do Linux moderno .

Parece que as outras opções principais são um sistema CloneZilla Live, e cpioque parece criar tararquivos.

Então as principais opções são

  1. CloneZilla ou apenas imaginando a partição
  2. tarem si, o que pode quebrar as coisas
  3. cpio, que pode ser limitado pelo tarformato do arquivo?

*80.000 dos 83.000 links simbólicos são links simbólicos rápidos , e eu gostaria de preservar sua rapidez, se possível

linux backup
  • 1 respostas
  • 838 Views
Martin Hope
cat
Asked: 2018-09-09 16:10:30 +0800 CST

Quem bloqueia todas as taxas de atualização do monitor?

  • 0

Eu tenho dois monitores (em uma configuração "Join Displays"), uma GPU móvel NVIDIA 1070 GTX e GNOME 3 no OpenGL 4.6.

A taxa de atualização do monitor embutido do laptop está definida para o máximo de 120,02 Hz, e a taxa de atualização do segundo monitor (por VGA) está no máximo de 59,88 Hz.

Quando o 2º monitor não está conectado, glxgearsrelata 20.000 FPS. Mas, quando o 2º monitor está conectado e glxgearsroda no monitor embutido, glxgearsfica travado em 60 FPS, como se a GPU integrada da Intel estivesse em uso.

O X11 ou OpenGL está bloqueando a taxa de atualização de todos os monitores para a taxa comum mais baixa?

Existe uma maneira de evitar isso e permitir que cada monitor tenha sua própria taxa de atualização ou é por design e necessário?

linux nvidia
  • 1 respostas
  • 693 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