Caracteres especiais nos nomes de arquivo do Samba


18

Ao exibir arquivos contendo caracteres especiais como "() ?:" no nome do arquivo através do Samba, os nomes são transformados em um formato irreconhecível. Por exemplo, um arquivo

my_file:_(important).txt

é exibido como

M43J1E~0.TXT

Existe uma maneira de evitar esse comportamento (sem renomear os arquivos, obviamente)? Estou assumindo que a codificação de caracteres não é a culpada, porque vários caracteres UTF-8 parecem funcionar bem.


Samba versão 2: 3.4.0-3ubuntu5.5 no Ubuntu 9.10
Matti

3
A adição de "nomes confusos = não" ao smb.conf resolveu isso (obrigado, Dennis Williamson).
quer

Respostas:


10

O Windows não permite alguns caracteres nos nomes de arquivos permitidos pelo Unix. O Samba "manipula" os nomes dos arquivos para fazê-los cumprir com as restrições do Windows. Você pode verificar o arquivo /etc/smb.confou /etc/samba/smb.confver quais configurações estão em vigor. Para mostrar essas configurações mais os padrões, use este comando:

testparm -vs | less

Para restringir um pouco isso:

testparm -vs|grep "case\|mangl"

Veja esta página para mais informações. Além disso, consulte cerca da metade desta página (as mesmas informações do link anterior).


9

Eu uso uma pasta compartilhada no OS-X e Windows. Alguns arquivos têm o mesmo problema, porque se enquadram no seguinte: Eles usam caracteres no nome do arquivo, não suportados pelo Windows.

Consulte: http://support.microsoft.com/kb/177506

Ele lista os caracteres, não suportados pelo Windows, em arquivos ou diretórios. Eu acho que o Samba usa a mesma lista de caracteres ao listar arquivos e diretórios.

A filename cannot contain any of the following characters:
\ / : * ? " < > |

Um pouco mais abaixo, eles escreveram:

Os caracteres válidos para nomear arquivos, pastas ou atalhos incluem qualquer combinação de letras (AZ) e números (0 a 9), além dos seguintes caracteres especiais:

^   Accent circumflex (caret)
&   Ampersand
'   Apostrophe (single quotation mark)
@   At sign
{   Brace left
}   Brace right
[   Bracket opening
]   Bracket closing
,   Comma
$   Dollar sign
=   Equal sign
!   Exclamation point
-   Hyphen
#   Number sign
(   Parenthesis opening
)   Parenthesis closing
%   Percent
.   Period
+   Plus
~   Tilde
_   Underscore

Mas eu, pessoalmente, tomei a lista de caracteres não permitidos como referência para informar alguns clientes aqui;)


7
  • Eu possuo um laptop Apple Macbook Pro com o OS X 10.11 "El Capitan" de 64 bits executando o Samba 3 que eu instalei através do Macports .

  • Também possuo um laptop Dell Inspiron com GNU / Linux XUbuntu 16.04 de 64 bits "Xenial Xerus" executando o Samba 3 que eu instalei através do APT.

Ambas as máquinas têm pastas compartilhadas na rede e usam o Samba para se comunicar na minha WLAN (LAN sem fio).

Ambos os meus sistemas estão em português do Brasil. Assim, uso caracteres especiais como ç , á , ã , â , ô , é , ó etc.

Quando uso meu laptop Linux para acessar meus compartilhamentos do OS X Samba, todas as strings são mostradas corretamente: palavras como maçã , ônus e bênção são mostradas corretamente. Arquivos e pastas com nomes longos também são mostrados e seus nomes são mostrados corretamente. Assim, o servidor Samba em execução no OS X já está configurado corretamente ...

... mas as coisas não estavam funcionando do contrário: se eu usasse o aplicativo Finder no OS X para acessar meus compartilhamentos Linux Samba, todos os arquivos e pastas com pelo menos um desses caracteres especiais não seriam mostrados (eles permaneceriam invisíveis para eu) e os nomes longos de arquivos e pastas foram convertidos em nomes curtos estranhos. Portanto, havia algo errado com o servidor Samba em execução na minha máquina Linux.

=> No meu caso, o que resolveu esse problema foi adicionar as seguintes linhas à [global]seção dentro do smb.confarquivo na minha máquina Linux:

mangled names = no
dos charset = CP850
unix charset = UTF-8

Depois disso, abri uma janela do terminal shell e reiniciei o servidor Linux Samba com este comando:

sudo service smbd restart

... que pode ser substituído por esse outro comando (caso o comando acima não funcione na sua distribuição Linux):

sudo systemctl restart smbd.service

Depois que reiniciei o servidor Linux Samba, o aplicativo Finder no OS X finalmente mostrou corretamente todos os arquivos e pastas que estavam ocultos anteriormente por causa de seus nomes terem um ou mais caracteres especiais. Os nomes mutilados ("encurtados") também foram "não mutilados".

Notas de rodapé :

  1. Nos sistemas GNU / Linux, o local padrão do smb.confarquivo é/etc/samba/smb.conf
  2. Presumindo que o seu sistema Linux tenha o smb.confarquivo armazenado no local padrão /etc/samba/: existem várias maneiras diferentes de editar o smb.confarquivo. Por exemplo, se você não estiver usando um ambiente de área de trabalho (por exemplo, seu sistema possui apenas um terminal shell, sem janelas), você pode instalar o editor de texto Nano , emitindo um comando como sudo apt-get install nano -you sudo dnf -b -y install nanoou qualquer outra coisa (dependendo da distribuição do Linux) estão usando) e, em seguida, execute sudo nano /etc/samba/smb.conf. Caso esteja usando um ambiente de área de trabalho, você pode instalar um editor de texto gráfico, como o GNOME Edit , emitindo um comando como sudo apt-get install gedit -you sudo dnf -b -y install geditou qualquer outra coisa (dependendo da distribuição do Linux que estiver usando) e, em seguida, execute sudo gedit /etc/samba/smb.conf.
  3. No Samba 3+, o display charsetparâmetro está obsoleto.
  4. O dos charsetparâmetro não suporta o UTF-8argumento. Portanto, ele deve usar o argumento padrão CP850.
  5. mangled names = noinstrui o servidor Samba a não encurtar nomes longos de arquivos e pastas. Portanto, como o cliente Samba apenas replica para o usuário o que o servidor Samba forneceu ao cliente, uma vez que o servidor esteja configurado corretamente, o cliente não exibirá mais o nome abreviado do usuário.

4

da documentação do samba você pode usar estes:

dos charset = ISO8859-1
unix charset = ISO8859-1
display charset = ISO8859-1

4
Este e adicionando nomes mutilados = não para [global] fixa o meu em nas4free
Christopher perseguição
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.