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 / Perguntas / 687592
Accepted
bomben
bomben
Asked: 2022-01-24 09:52:54 +0800 CST2022-01-24 09:52:54 +0800 CST 2022-01-24 09:52:54 +0800 CST

Como copiar um arquivo usando seu número inode?

  • 772

Este problema está relacionado ao Samba e os inodes não são necessários.


Estou com um problema ao lidar com um determinado arquivo que contém alguns caracteres especiais. Se eu pesquisar pelo seu inode, ele listará o arquivo:

 $ find . -inum 90505400 -exec ls {} \;
./12 String Quartet No. 16 in F Major Op. 135: Der schwer gefa?te Entschlu?: Grave, ma non troppo tratto (Mu? es sein ?) - Allegro (Es mu? sein !).flac

No entanto, se eu continuar a usar cpou rmno arquivo, ele gerará um file not founderro (em alemão 'Datei oder Verzeichnis nicht gefunden'):

 $ find . -inum 90505400 -exec cp {} ne.flac \;
cp: './12 String Quartet No. 16 in F Major Op. 135: Der schwer gefa?te Entschlu?: Grave, ma non troppo tratto (Mu? es sein ?) - Allegro (Es mu? sein !).flac' kann nicht zum Lesen geöffnet werden: Datei oder Verzeichnis nicht gefunden

Gostaria de saber se posso copiar o arquivo com outro comando que use o inode diretamente. Eu também tive esse problema há algum tempo. Posso remover todos os arquivos com rm *, mas gostaria de corrigir o nome do arquivo quebrado.


É um sistema de ext4arquivos que eu montei em um Raspi a partir de um HDD USB externo com esta linha (caminhos e IPs ofuscados alterados):

UUID=e3f9d42a-9703-4e47-9185-33be24b81c46   /mnt/test   ext4    rw,auto,defaults,nofail,x-systemd.device-timeout=15 0 2

Eu então compartilho com o samba:

[mybook]
path=/mnt/test
public = yes
browseable = yes
writeable = yes
comment = test
printable = no
guest ok = no

E eu montei isso em um Lubuntu 16 com isso:

//192.168.1.190/test         /home/ben/test               cifs auto,nofail,username=XXX,password=XXX,uid=1000,gid=1000

Eu me conecto ao Lubuntu 16 através VNCde um Macbook. Ou eu SSHdiretamente para ele. Estou apenas dizendo isso para obter informações completas.

Também monto o compartilhamento nesse Macbook (e outros) no Finder. O Finder não exibe o nome do arquivo corretamente.

insira a descrição da imagem aqui


Após um comentário útil de um usuário, percebi que deveria tentar manipular o arquivo no host com o sistema de arquivos original em vez de tentar fazê-lo sobre o samba.

SSHing no host revela este nome de arquivo (veja o sinal 0xF022após '135'):

'12 String Quartet No. 16 in F Major Op. 135 Der schwer gefa?te Entschlu? Grave, ma non troppo tratto (Mu? es sein ) - Allegro (Es mu? sein !).flac'

Consegui então copiar o arquivo cpno próprio host.

(Caso alguém se pergunte como cheguei ao nome do arquivo: divido um flacarquivo resumido com sua cueplanilha nos arquivos separados e eles foram nomeados automaticamente.)

cp inode
  • 2 2 respostas
  • 1245 Views

2 respostas

  • Voted
  1. Best Answer
    ilkkachu
    2022-01-24T13:04:11+08:002022-01-24T13:04:11+08:00

    Todos open()(para cópia) rename()e unlink()(remoção) funcionam por nomes de arquivos. Não há realmente nada que funcione diretamente em um inode, além de ferramentas de baixo nível como debugfs.

    Se você puder remover o arquivo com rm *, poderá renomeá-lo com mv ./12* someothername.flac, ou copiá-lo com cp ./12* newfile.flac(supondo ./12*que corresponda apenas a esse arquivo). findem si não deveria ser tão diferente.

    Mas você mencionou o Mac, e acho que o Mac exige que os nomes dos arquivos sejam UTF-8 válidos e isso pode causar problemas se os nomes dos arquivos estiverem quebrados. O Linux não nomeia UTF-8 inválido, mas é claro que também algumas ferramentas podem reagir de forma estranha. (Eu não testei.) Ter o Samba lá também pode não ajudar.

    Supondo que isso tenha algo a ver com o problema, você pode tentar SSH no host com o sistema de arquivos, pulando as partes intermediárias e renomeando os arquivos lá.

    • 10
  2. Gilles 'SO- stop being evil'
    2022-01-24T13:14:00+08:002022-01-24T13:14:00+08:00

    Não é possível abrir um arquivo através de seu inode. Este é um aspecto deliberado do design do sistema operacional, porque abrir um arquivo por meio de seu inode ignoraria as permissões.

    Chamar find . -inum $inode_number -exec … {} \;é o mais próximo possível de agir em um arquivo com base em seu inode. Mas isso usa o nome do arquivo e é garantido que funcione em um sistema sem bugs.

    Os ?na saída representam bytes que não constituem um caractere válido. Presumivelmente, um software está apresentando uma codificação de 8 bits herdada para uma ferramenta que espera UTF-8.

    Não tenho certeza se isso pode ser um sintoma de ferramentas do macOS trabalhando com um nome de arquivo com uma codificação inválida. Apenas no caso, tente executar os comandos em uma localidade C. Isso significa que todos os nomes de arquivos serão tratados como sequências de bytes, portanto, não há caracteres inválidos (no que diz respeito às ferramentas da terra do usuário - o kernel ainda pode ter problemas se o servidor remoto estiver fornecendo dados incorretos).

    LC_ALL=C find . -inum 90505400 -exec cp {} ne.flac \;
    

    Outra abordagem que você pode tentar é executar export LC_ALL=C, digitar mv 12e pressionar Tabpara concluir.

    Se isso não funcionar, então o problema é um sistema de arquivos com erros que reage de forma diferente quando solicitado a recuperar os metadados de um arquivo e quando solicitado a abrir um arquivo. Isso pode ser um bug ou uma configuração incorreta no cliente Samba ou no servidor Samba. Ou talvez o Samba esteja totalmente configurado para UTF-8 e não consiga lidar com um nome de arquivo no servidor que não esteja codificado em UTF-8. Eu recomendo verificar no servidor se o nome do arquivo está codificado em UTF-8. Se não estiver, renomeie-o no servidor. Se for, você tem um problema com a configuração do Samba.

    • 7

relate perguntas

  • No Unix, como eu copiaria /etc/passwd usando o caminho relativo para um diretório no meu diretório inicial? [fechado]

  • Existem arquivos criados e/ou ampliados pelo sistema além de correio e logs?

  • Como posso copiar um diretório e renomeá-lo no mesmo comando?

  • Como faço uma duplicata de uma árvore de diretórios com links simbólicos duplicados relativamente?

  • cp se comporta de maneira estranha quando . (ponto) ou .. (ponto ponto) são o diretório de origem

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