Caracteres especiales en nombres de archivo Samba

18

Cuando se sirven archivos que contienen caracteres especiales como "() ?:" en el nombre del archivo a través de Samba, los nombres se transforman en un formato irreconocible. Por ejemplo, un archivo

my_file:_(important).txt

se muestra como

M43J1E~0.TXT

¿Hay alguna manera de evitar este comportamiento (sin renombrar los archivos, obviamente)? Supongo que la codificación de caracteres no tiene la culpa porque varios caracteres UTF-8 parecen funcionar bien.

Matti
fuente
Samba versión 2: 3.4.0-3ubuntu5.5 en Ubuntu 9.10
Matti
3
Agregar "nombres destrozados = no" a smb.conf resolvió esto (gracias, Dennis Williamson).
Matti

Respuestas:

10

Windows no permite algunos caracteres en los nombres de archivo que permite Unix. Samba "destroza" los nombres de los archivos para que cumplan con las restricciones de Windows. Puede verificar el archivo /etc/smb.confo /etc/samba/smb.confver qué configuraciones están en su lugar. Para mostrar esa configuración más los valores predeterminados, use este comando:

testparm -vs | less

Para reducir eso un poco:

testparm -vs|grep "case\|mangl"

Vea esta página para más información. Además, vea aproximadamente a la mitad de esta página (la misma información que el enlace anterior).

Pausado hasta nuevo aviso.
fuente
9

Yo uso una carpeta compartida en OS-X y Windows. Algunos archivos tienen el mismo problema, ya que se dividen en lo siguiente: usan caracteres en el nombre del archivo, que no es compatible con Windows.

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

Enumera los caracteres, no admitidos por Windows en archivos o directorios. Supongo que Samba usa la misma lista de caracteres cuando lista archivos y directorios.

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

Un poco más abajo, escribieron:

Los caracteres que son válidos para nombrar archivos, carpetas o accesos directos incluyen cualquier combinación de letras (AZ) y números (0-9), además de los siguientes caracteres especiales:

^   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

Pero, personalmente, tomé la lista de caracteres no permitidos como referencia para informar a algunos clientes aquí;)

SimonSimCity
fuente
7
  • Tengo una computadora portátil Apple Macbook Pro con OS X 10.11 de 64 bits "El Capitan" con Samba 3 que instalé a través de Macports .

  • También tengo una computadora portátil Dell Inspiron con GNU / Linux XUbuntu 16.04 de 64 bits "Xenial Xerus" con Samba 3 que instalé a través de APT.

Ambas máquinas tienen carpetas compartidas en red y usan Samba para comunicarse en mi WLAN (LAN inalámbrica).

Mis dos sistemas están en portugués brasileño. Por lo tanto, uso caracteres especiales como ç , á , ã , â , ô , é , ó etcétera.

Cuando uso mi portátil Linux para acceder a mis acciones OS X Samba, todas las cadenas se muestran correctamente: palabras como maçã , las ONU y Bênção se muestran correctamente. También se muestran archivos y carpetas con nombres largos, y sus nombres se muestran correctamente. Por lo tanto, el servidor Samba que se ejecuta en OS X ya está configurado correctamente ...

... pero las cosas no funcionaban al revés: si usaba la aplicación Finder en OS X para acceder a mis recursos compartidos de Linux Samba, no se mostraban todos los archivos y carpetas que tenían al menos uno de esos caracteres especiales (permanecían invisibles para yo), y los nombres largos de archivos y carpetas se convirtieron en nombres cortos extraños. Por lo tanto, había algo mal con el servidor Samba ejecutándose en mi máquina Linux.

=> En mi caso, lo que resolvió este problema fue agregar las siguientes líneas a la [global]sección dentro del smb.confarchivo en mi máquina Linux:

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

Después de eso, abrí una ventana de terminal de shell y reinicié el servidor Linux Samba con este comando:

sudo service smbd restart

... que puede ser reemplazado por este otro comando (en caso de que el comando anterior no funcione en su distribución de Linux):

sudo systemctl restart smbd.service

Después de reiniciar el servidor Linux Samba, la aplicación Finder en OS X finalmente mostró correctamente todos los archivos y carpetas que anteriormente estaban ocultos debido a que sus nombres tenían uno o más caracteres especiales. Los nombres destrozados ("acortados") también fueron "no alterados".

Notas al pie :

  1. En los sistemas GNU / Linux, la ubicación estándar del smb.confarchivo es/etc/samba/smb.conf
  2. Suponiendo que su sistema Linux tiene el smb.confarchivo almacenado en la ubicación estándar /etc/samba/: hay varias formas diferentes de editar el smb.confarchivo. Por ejemplo, si usted no está utilizando un entorno de escritorio (por ejemplo, el sistema sólo tiene un terminal de concha, sin ventanas) puede instalar el Nano editor de texto, mediante la emisión de un comando como sudo apt-get install nano -yo sudo dnf -b -y install nanoo algo más (dependiendo de la distro Linux están usando), y luego ejecutar sudo nano /etc/samba/smb.conf. En caso de que esté utilizando un entorno de escritorio, puede instalar un editor gráfico de texto como GNOME Editar , mediante la emisión de un comando como sudo apt-get install gedit -yo sudo dnf -b -y install gedito algo más (dependiendo de la distribución Linux que esté utilizando), y luego ejecutar sudo gedit /etc/samba/smb.conf.
  3. En Samba 3+, el display charsetparámetro está en desuso.
  4. El dos charsetparámetro no admite el UTF-8argumento. Por lo tanto, debe usar el argumento predeterminado CP850.
  5. mangled names = noindica al servidor Samba que no acorte nombres largos de archivos y carpetas. Por lo tanto, debido a que el cliente Samba simplemente replica al usuario lo que el servidor Samba le ha proporcionado al cliente, una vez que el servidor está configurado correctamente, el cliente ya no mostrará al usuario ningún nombre abreviado.
Yuri Sucupira
fuente
4

de la documentación de samba puede usar estos:

dos charset = ISO8859-1
unix charset = ISO8859-1
display charset = ISO8859-1
Pol Hallen
fuente
44
Esto y agregar nombres destrozados = no a [global] arregló mi en nas4free
Christopher Chase