Какие символы действительны для использования в именах файлов?

Кажется, что можно создавать имена файлов в unix с любым допустимым символом.

touch \; && touch \\ && touch \" && touch $'\n' && touch $'\t' && touch $'\v' && touch $'\23' && touch $'\13' && echo "DONE!" 

Единственными символами, которые я нашел, которые не работают, являются / и NUL :

 touch / touch $'\0' 

Есть ли другие символы, которые недействительны или невозможны для использования в именах файлов?

Ответ: в Unix-подобных системах имена файлов состоят из байтов , а не символов. По крайней мере, с точки зрения ядра и его API.

Unix-подобное ядро, как правило, нейтрально относительно любого байтового значения, но \ 000 (ASCII: NUL) и \ 057 (ASCII: косая черта). В Linux нет никаких ограничений на уровне файловой системы, но некоторые драйверы FS и некоторые их режимы приводят к отказу от некоторых имен, как правило, из-за невозможности перевода. Например, нельзя создать имя файла с недопустимым UTF-8 на все, что установлено с -o iocharset=utf8 (например, cifs или vfat ). Ни один из совместимых с DOS / Windows-FSES не позволит вам сделать часть имени 134 (ASCII: обратная косая черта). Или тип msdos будет применять ограничения DOS в отношении имен 8.3.

Ext3 / ext4, как известно, не имеет ограничений, но вышеупомянутых \ 000 и \ 057.