Специальные символы в именах файлов Samba

18

При передаче файлов, содержащих специальные символы, такие как «() ?:» в имени файла через Samba, имена преобразуются в неузнаваемый формат. Например, файл

my_file:_(important).txt

отображается как

M43J1E~0.TXT

Есть ли способ избежать такого поведения (без переименования файлов, очевидно)? Я предполагаю, что кодировка символов не виновата, потому что несколько символов UTF-8, кажется, работают нормально.

Матти
источник
Samba версия 2: 3.4.0-3ubuntu5.5 в Ubuntu 9.10
Матти
3
Решение проблемы с добавлением «искаженных имен = нет» в smb.conf (спасибо, Деннис Уильямсон).
Матти

Ответы:

10

Windows не допускает некоторые символы в именах файлов, которые разрешает Unix. Samba «искажает» имена файлов, чтобы они соответствовали ограничениям Windows. Вы можете проверить файл /etc/smb.confили /etc/samba/smb.confпосмотреть, какие настройки на месте. Чтобы показать эти настройки плюс значения по умолчанию, используйте эту команду:

testparm -vs | less

Чтобы сузить это немного:

testparm -vs|grep "case\|mangl"

Смотрите эту страницу для получения дополнительной информации. Кроме того, смотрите примерно на полпути вниз по этой странице (та же информация, что и предыдущая ссылка).

Приостановлено до дальнейшего уведомления.
источник
9

Я использую общую папку на OS-X и Windows. Некоторые файлы имеют ту же проблему, потому что они попадают в следующее: Они используют символы в имени файла, не поддерживаемые Windows.

См .: http://support.microsoft.com/kb/177506

В нем перечислены символы, не поддерживаемые Windows в файлах или каталогах. Я предполагаю, что Samba использует тот же список символов при перечислении файлов и каталогов.

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

Чуть дальше они написали:

Символы, допустимые для именования файлов, папок или ярлыков, включают любую комбинацию букв (AZ) и цифр (0-9), а также следующие специальные символы:

^   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

Но я, лично, взял список недопустимых персонажей в качестве справки для ознакомления некоторых клиентов здесь;)

SimonSimCity
источник
7
  • У меня есть ноутбук Apple Macbook Pro с 64-битной OS X 10.11 «El Capitan» под управлением Samba 3, который я установил через Macports .

  • У меня также есть ноутбук Dell Inspiron с 64-битным GNU / Linux XUbuntu 16.04 «Xenial Xerus» под управлением Samba 3, который я установил через APT.

Обе машины имеют общие сетевые папки и используют Samba для связи по моей WLAN (беспроводной локальной сети).

Обе мои системы на бразильском португальском. Таким образом, я использую специальные символы , такие как ç , á , ã , â , ô , é , ó и так далее.

Когда я использую свой ноутбук Linux для доступа к общим ресурсам OS X Samba, все строки отображаются правильно: слова, такие как maçã , ônus и bênção , отображаются правильно. Файлы и папки с длинными именами также отображаются, и их имена отображаются правильно. Таким образом, сервер Samba, работающий на OS X, уже правильно настроен ...

... но все происходило иначе: если я использовал приложение Finder в OS X для доступа к общим ресурсам Linux Samba, все файлы и папки, содержащие хотя бы один из этих специальных символов, не отображались (они оставались невидимыми для я), и длинные имена файлов и папок были преобразованы в странные короткие имена. Таким образом, что-то не так с сервером Samba, работающим на моей машине с Linux.

=> В моем случае эта проблема была решена путем добавления следующих строк в [global]раздел smb.confфайла на моей машине с Linux:

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

После этого я открыл окно терминала оболочки и перезапустил сервер Linux Samba с помощью этой команды:

sudo service smbd restart

... которая может быть заменена этой другой командой (в случае, если приведенная выше команда не работает в вашем дистрибутиве Linux):

sudo systemctl restart smbd.service

После того, как я перезапустил сервер Linux Samba, приложение Finder в OS X наконец-то правильно показало все файлы и папки, которые ранее были скрыты, поскольку их имена имели один или несколько специальных символов. Изуродованные («укороченные») имена также были «неоправданными».

Сноски :

  1. В системах GNU / Linux стандартное расположение smb.confфайла/etc/samba/smb.conf
  2. Предполагая, что ваша система Linux smb.confхранит файл в стандартном расположении /etc/samba/: существует несколько различных способов редактирования smb.confфайла. Например, если вы не используете среду рабочего стола (например, ваша система имеет только терминал оболочки, без окон), вы можете установить текстовый редактор Nano , введя такую ​​команду, как sudo apt-get install nano -yили, sudo dnf -b -y install nanoили что-то еще (в зависимости от того, какой дистрибутив Linux вы используете. используете), а затем запустить sudo nano /etc/samba/smb.conf. В случае, если вы используете среду рабочего стола, вы можете установить графический текстовый редактор, такой как GNOME Edit , введя команду, например sudo apt-get install gedit -yили sudo dnf -b -y install geditили что-то еще (в зависимости от того, какой дистрибутив Linux вы используете), и затем запустить sudo gedit /etc/samba/smb.conf.
  3. В Samba 3+ этот display charsetпараметр устарел.
  4. dos charsetПараметр не поддерживает UTF-8аргумент. Таким образом, он должен использовать аргумент по умолчанию CP850.
  5. mangled names = noуказывает серверу Samba не сокращать длинные имена файлов и папок. Следовательно, поскольку клиент Samba просто копирует пользователю то, что сервер Samba предоставил клиенту, после правильной настройки сервера клиент больше не будет показывать пользователю сокращенное имя.
Юрий Сукупира
источник
4

из документации samba вы можете использовать их:

dos charset = ISO8859-1
unix charset = ISO8859-1
display charset = ISO8859-1
Пол Халлен
источник
4
Это и добавление искаженных имен = нет в [global] исправило мое на nas4free
Кристофер Чейз