При обслуживании файлов, содержащих специальные символы, такие как «() ?:» в имени файла через 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 наконец-то правильно показало все файлы и папки, которые ранее были скрыты из-за того, что их имена содержали один или несколько специальных символов. Искалеченные («укороченные») имена также «распутаны».
Сноски:
smb.conf
файл /etc/samba/smb.conf
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
.display charset
параметр устарел.dos charset
параметр не поддерживает UTF-8
аргумент. Таким образом, он должен использовать аргумент по умолчанию CP850
.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
вашим командам и т. д.