Назад | Перейти на главную страницу

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

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

my_file:_(important).txt

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

M43J1E~0.TXT

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

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

testparm -vs | less

Чтобы немного сузить круг вопросов:

testparm -vs|grep "case\|mangl"

Видеть эта страница Чтобы получить больше информации. Также посмотрите примерно на полпути вниз эта страница (та же информация, что и по предыдущей ссылке).

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

Видеть: http://support.microsoft.com/kb/177506

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

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

Чуть ниже написали:

Допустимые символы для именования файлов, папок или ярлыков включают любую комбинацию букв (A-Z) и цифр (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

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

  • У меня есть ноутбук 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, все файлы и папки, содержащие хотя бы один из этих специальных символов, не отображались (они оставались невидимыми для me), а длинные имена файлов и папок были преобразованы в странные короткие имена. Таким образом, что-то не так с сервером 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 файл. Например, если вы не используете среду рабочего стола (например, в вашей системе есть только терминал оболочки, без окон), вы можете установить Нано текстовый редактор, введя такую ​​команду, как sudo apt-get install nano -y или sudo dnf -b -y install nano или что-то еще (в зависимости от того, какой дистрибутив Linux вы используете), а затем запустите sudo nano /etc/samba/smb.conf. Если вы используете среду рабочего стола, вы можете установить графический текстовый редактор, например GNOME Править, введя такую ​​команду, как 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 предоставил клиенту, после правильной настройки сервера клиент больше не будет показывать пользователю сокращенное имя.

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

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

Да это char кодирование в винить.

Проходить iocharset=iso8859-1 как вариант для mount.cifs или выберите iso8859-1 locale, вместо utf-8.

Вы также можете попробовать добавить LANG=C.ISO8859-1 или LC_ALL=C.ISO8859-1 вашим командам и т. д.