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

JoL's questions

Martin Hope
JoL
Asked: 2020-01-29 15:47:15 +0800 CST

É normal que as opções de montagem padrão do tune2fs não apareçam na saída de montagem?

  • 2

Eu tenho um SSD com 2 partições formatadas com ext4. Na segunda partição, habilitei discardcomo opção padrão no nível do sistema de arquivos com este comando:

$ sudo tune2fs -o discard /dev/sda2
tune2fs 1.45.5 (07-Jan-2020)
$ sudo tune2fs -l /dev/sda2 | grep 'mount options'
Default mount options:    user_xattr acl discard

Eu também adicionei a discardopção para ambas as partições em /etc/fstab:

/dev/sda2 /     ext4 rw,relatime,discard,stripe=8191 0 1
/dev/sda1 /boot ext4 rw,relatime,discard,stripe=8191 0 2

No entanto, quando observo a saída de mount, apenas aquele sem a discardopção de montagem padrão do nível fs parece tê-lo ativado:

$ mount | grep '^/dev'
/dev/sda2 on / type ext4 (rw,relatime,stripe=8191)
/dev/sda1 on /boot type ext4 (rw,relatime,discard,stripe=8191)

Percebo que as outras opções mencionadas por tune2fstambém não são mencionadas.

Então, posso confiar que discardestá habilitado na montagem atual , /dev/sda2apesar de mountnão mencioná-lo? Existe alguma maneira de verificar isso? Quero dizer, mesmo tune2fsa saída de 's não é sobre a montagem atual.

EDIT: Devo mencionar que também tentei montar mount -o discardna linha de comando e ainda não aparece na mountsaída:

$ sudo tune2fs -o discard /dev/sda1
tune2fs 1.45.5 (07-Jan-2020)
$ sudo umount /boot
$ sudo mount -o discard /boot
$ mount | grep sda1
/dev/sda1 on /boot type ext4 (rw,relatime,stripe=8191)
linux ext4
  • 1 respostas
  • 920 Views
Martin Hope
JoL
Asked: 2019-07-14 08:31:48 +0800 CST

"Herança" no bash; Existe uma maneira de chamar super na função de substituição (sem eval)?

  • 1

Dado o arquivo m.sh:

f() {
  echo foo
}

g() {
  f | sed -r 's/^|$/:/g' # random work
}

e e.sh:

. m.sh

old_f="$(type f | sed '3,$!d')"

f() {
  echo "$(eval "$old_f")bar"
}

g

existe uma solução melhor do que usar typee evalpara chamar a função antiga da função de substituição, mantendo o mesmo nome para que as referências em outras funções ainda funcionem?

Ambos m.she e.shfazem parte do mesmo projeto, e por isso podemos modificar m.shsem preocupação.

bash
  • 1 respostas
  • 491 Views
Martin Hope
JoL
Asked: 2019-01-23 18:07:59 +0800 CST

As interfaces típicas de chamadas de sistema permitem reduzir o tamanho de um arquivo (sem substituí-lo por um inode diferente)?

  • 9

Existe uma maneira de open()um arquivo e fazê-lo encolher? Pode-se, é claro, abri-los no modo de acréscimo ou procurar até o fim e escrever para fazê-los crescer. No entanto, até onde eu sei, não há método para reduzir um arquivo por meio de interfaces típicas de chamada de sistema no estilo unix.

A única maneira de fazer isso, até onde eu sei, é fingindo, criando um novo arquivo mais curto e rename()substituindo o antigo.

Eu só queria uma confirmação, porque vi uma resposta que sugeria que era possível fazer editores de arquivos que funcionassem diretamente em um arquivo em vez de passar pelo processo de criar um novo e renomeá-lo no local.

Eu sempre pensei que a api de arquivo nas interfaces de chamada de sistema libc e unix não permitia a redução de arquivos para facilitar a implementação de sistemas de arquivos e talvez evitar padrões de uso que possam contribuir para a fragmentação.

files filesystems
  • 2 respostas
  • 1016 Views
Martin Hope
JoL
Asked: 2019-01-19 09:42:31 +0800 CST

Por que `... | sed 's/^/stdout: /'` imprime em stdin vazio quando `... > >(sed 's/^/stdout: /')` não?

  • 4

Estou tentando entender o que causa a diferença nessas 2 construções que pensei serem funcionalmente equivalentes:

$ ( echo foo >&2 ) 2> >(sed 's/^/stderr: /') | sed 's/^/stdout: /'   
stdout: stderr: foo
$ ( echo foo >&2 ) 2> >(sed 's/^/stderr: /') > >(sed 's/^/stdout: /')
stderr: foo

EDIT: Se eu entendi user1133275 direito, ele sugere que >(sed 's/^/stdout: /')não seja executado, a menos que o subshell seja enviado ( echo foo >&2 )para stdout. No entanto, isso significaria que o seguinte:

$ ( echo foo >&2 ) 2> >(sed 's/^/stderr: /') > >(echo baz)   
baz
stderr: foo

não deve exibir baz.

EDIT 2: Talvez também de interesse, o sed não produz stdout:na entrada vazia, mesmo quando canalizado:

$ sed 's/^/stdout: /' < /dev/null
$ printf "" | sed 's/^/stdout: /'
$
bash sed
  • 4 respostas
  • 1857 Views
Martin Hope
JoL
Asked: 2018-12-11 16:06:58 +0800 CST

Como desligar quando não há systemd/init (por exemplo, usando init=/bin/bash)?

  • 11

poweroffreclama que não pode se conectar ao systemd via DBus (claro, não está vivo). Eu fiz syncseguido por kill $$, pensando que a morte do pid 1 faria com que o kernel fosse desligado, mas isso causou um pânico no kernel. Em seguida, segurei o botão liga / desliga para forçar o desligamento.

Qual é a maneira mais adequada de desligar neste cenário?

linux systemd
  • 5 respostas
  • 6971 Views
Martin Hope
JoL
Asked: 2018-08-18 16:02:40 +0800 CST

Existe um equivalente mais curto para long/path/**/^*.(complex|pattern)~long/path/(bad-1|bad-2)/*(.) que não requer repetição de long/path/ ?

  • 3

É um padrão glob estendido zsh. O objetivo é combinar todos os arquivos com um padrão em uma hierarquia de diretórios, com exceção de sub-hierarquias específicas. O padrão no título funciona, mas eu queria algo que não exigisse repetição long/path/.

Eu tentei o seguinte:

long/path/(^(bad-1|bad-2)/|)**/^*.(complex|pattern)(.)
long/path/(**~(bad-1|bad-2)/*)/^*.(complex|pattern)(.)

com KSH_GLOBadicionado:

long/path/?(^(bad-1|bad-2)/)**/^*.(complex|pattern)(.)

Todos eles resultam em um erro de padrão ruim. Parece que o problema é ter um /entre parênteses. A documentação diz:

Como mencionado acima, um `/' usado como separador de diretório pode não aparecer entre parênteses

Isso me confundiu porque (dir/)#é um bom padrão. É até mencionado nos documentos:

Um componente de nome de caminho no formato `(foo/)#' corresponde a um caminho que consiste em zero ou mais diretórios correspondentes ao padrão foo.

Acho que é a exceção.

Para ser claro, estou procurando equivalentes. Isso exclui:

long/path/^(bad-1|bad-2)/**/^*.(complex|pattern)(.)

uma vez que exclui coisas como long/path/good.pattern, e

long/path/(^(bad-1|bad-2)/)#/^*.(complex|pattern)(.)
long/path/**/^*.(complex|pattern)~*/(bad-1|bad-2)/*(.)

uma vez que excluem coisas como o que está sob long/path/good/bad-1.

EDIT: Só para mencionar, uma solução não precisa necessariamente usar apenas globbing. Se isso puder ser feito adicionando o uso de brace ou expansão de histórico ou algum outro recurso zsh, isso é ótimo.

EDIT 2: Seguindo minhas próprias ideias, tentei a expansão do histórico:

long/path/**/^*.(complex|pattern)~!{#$:s/\**//}/(bad-1|bad-2)/*(.)

No entanto, isso falhou porque 1) a última palavra da linha atual é a anterior àquela em que a expansão está e 2) porque a substituição do histórico parece ser feita após a expansão glob (devo estar entendendo mal algo aqui porque isso parece para ir contra os documentos; talvez todas as expansões sejam feitas palavra por palavra).

Eu também tentei expansão de chaves:

( IFS=\~; printf "%s\n" long/path/{**/^*.(complex|pattern),(bad-1|bad-2)/*(.)} )

Não funcionou. Os 2 padrões glob ainda foram tomados como palavras separadas em vez de serem unidos em um único padrão. Eu acho que IFSnão é levado em consideração aqui. Faz sentido.

Eu também tentei substituição em qualificadores glob:

+/**/^*.(complex|pattern)~+/(bad-1|bad-2)/*(.:s,+,long/path,)

Mas, é claro, isso não funcionaria porque a substituição seria feita após a correspondência, não antes.

zsh wildcards
  • 2 respostas
  • 119 Views
Martin Hope
JoL
Asked: 2018-06-14 08:01:39 +0800 CST

A análise de scripts em tempo de execução de script é onipresente nos shells ou está presente em outros interpretadores e como isso funciona?

  • 7

Eu sempre pensei que os shells analisam scripts inteiros, construindo um AST e, em seguida, executam esse AST da memória. No entanto, acabei de ler um comentário de Stéphane Chazelas e testei a execução deste script, edit-while-executing.sh:

#!/bin/bash

echo start
sleep 10

e então enquanto ele estava dormindo correndo:

$ echo "echo end" >> edit-while-executing.sh

e funcionou para fazer com que ele imprimisse "fim" no final.

No entanto, ao tentar modificar isso:

#!/bin/bash

while true; do
  echo yes
done

fazendo:

$ printf "%s" "no " | dd of=edit-while-executing.sh conv=notrunc seek=35 bs=1

Não funcionou e continuou imprimindo "sim".

Também me perguntei se outros intérpretes não shell também funcionavam assim e tentei o equivalente ao primeiro script com python, mas não funcionou. No entanto, talvez o python não seja mais um interpretador e seja mais um compilador JIT.

Então, para reiterar minha pergunta, esse é um comportamento onipresente aos shells e limitado a eles ou também presente em outros interpretadores (aqueles que não são considerados shells)? Além disso, como isso funciona de modo que eu possa fazer a primeira modificação, mas não a segunda?

shell-script shell
  • 3 respostas
  • 351 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