Задачка на линуксе
От: Vain Россия google.ru
Дата: 31.03.18 20:31
Оценка:
Появилась задачка на линуксе после первого использования оного.
Задачка такая, создать папку с символами `*` и `.`
Можете даже в cygwin или здесь пробовать: https://www.tutorialspoint.com/execute_bash_online.php

(!) Подсказка: Я не пользователь Линукса, в основном Винды, поэтому у меня получилось с первого раза.

ЗЫЖ Это не задачка первого апреля, хотя ей станет.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Отредактировано 31.03.2018 20:50 Vain . Предыдущая версия .
linux hairyeyes
Re: Задачка на линуксе
От: Pzz Россия https://github.com/alexpevzner
Дата: 31.03.18 20:51
Оценка:
Здравствуйте, Vain, Вы писали:

V>Появилась задачка на линуксе после первого использования оного.

V>Задачка такая, создать папку с символами `*` и `.`

mkdir "*"
mkdir ".xxx"

Папку (и файл), имя которой состоит из одной или двух точек, создать нельзя.
Re[2]: Задачка на линуксе
От: Vain Россия google.ru
Дата: 31.03.18 21:00
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>mkdir "*"

Pzz>mkdir ".xxx"
V>Задачка такая, создать папку с символами `*` и `.`

Pzz>Папку (и файл), имя которой состоит из одной или двух точек, создать нельзя.

Уверен? Я вот после этого финта от линукса — не уверен.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[3]: Задачка на линуксе
От: Pzz Россия https://github.com/alexpevzner
Дата: 31.03.18 21:01
Оценка:
Здравствуйте, Vain, Вы писали:

Pzz>>Папку (и файл), имя которой состоит из одной или двух точек, создать нельзя.

V>Уверен? Я вот после этого финта от линукса — не уверен.

Уверен
Re[4]: Задачка на линуксе
От: Vain Россия google.ru
Дата: 31.03.18 21:09
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>>>Папку (и файл), имя которой состоит из одной или двух точек, создать нельзя.

V>>Уверен? Я вот после этого финта от линукса — не уверен.
Pzz>Уверен
Откуда, если оно позволяет создать такие папки с запрещёнными символами?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[5]: Задачка на линуксе
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 31.03.18 21:20
Оценка:
Здравствуйте, Vain, Вы писали:

Pzz>>>>Папку (и файл), имя которой состоит из одной или двух точек, создать нельзя.

V>>>Уверен? Я вот после этого финта от линукса — не уверен.
Pzz>>Уверен
V>Откуда, если оно позволяет создать такие папки с запрещёнными символами?

В линуксе для имен файлов вроде ничего не запрещено от слова совсем. Там и перевод строки в имени файла может быть. Просто некоторые символы shell интерпретирует, а ядру пофик.

В Винде по-другому — некоторые символы явно запрещены к использованию в файловой системе. Не уверен, правда, от ядра или от ФС это зависит
Маньяк Робокряк колесит по городу
Re[5]: Задачка на линуксе
От: watchmaker  
Дата: 31.03.18 21:28
Оценка:
Здравствуйте, Vain, Вы писали:

V>если оно позволяет создать такие папки с запрещёнными символами?


Почему ты решил, что это запрещённые символы?
В *nix только два символа запрещены к использованию в файловых именах: / и \0 (символ с кодом 0). На остальные нет явных ограничений у ОС: хоть звёздочки используй, хоть весь остальный юникод.
(Тут только файловая система что-то может запретить создавать, если, например, она старая и поддерживает только ASCII-кодировку, а не тот же произвольный юникод).

Pzz>>>>Папку (и файл), имя которой состоит из одной или двух точек, создать нельзя.

V>>>Уверен? Я вот после этого финта от линукса — не уверен.
Pzz>>Уверен
V>Откуда?

А они уже и так созданы в каждом каталоге :) Вполне себе причина почему их нельзя создать второй раз.
Re[6]: Задачка на линуксе
От: Vain Россия google.ru
Дата: 31.03.18 21:36
Оценка:
Здравствуйте, Marty, Вы писали:

M>В Винде по-другому — некоторые символы явно запрещены к использованию в файловой системе. Не уверен, правда, от ядра или от ФС это зависит

Так они и в винде создаются. Через cygwin.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[7]: Задачка на линуксе
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 31.03.18 21:39
Оценка:
Здравствуйте, Vain, Вы писали:

M>>В Винде по-другому — некоторые символы явно запрещены к использованию в файловой системе. Не уверен, правда, от ядра или от ФС это зависит

V>Так они и в винде создаются. Через cygwin.

'*', '?', '/' и '\'?
Маньяк Робокряк колесит по городу
Re[8]: Задачка на линуксе
От: Vain Россия google.ru
Дата: 31.03.18 21:48
Оценка:
Здравствуйте, Marty, Вы писали:

M>>>В Винде по-другому — некоторые символы явно запрещены к использованию в файловой системе. Не уверен, правда, от ядра или от ФС это зависит

V>>Так они и в винде создаются. Через cygwin.
M>'*', '?', '/' и '\'?
* и ? создаются
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[9]: Задачка на линуксе
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 31.03.18 21:56
Оценка:
Здравствуйте, Vain, Вы писали:

M>>>>В Винде по-другому — некоторые символы явно запрещены к использованию в файловой системе. Не уверен, правда, от ядра или от ФС это зависит

V>>>Так они и в винде создаются. Через cygwin.
M>>'*', '?', '/' и '\'?
V>* и ? создаются

Возможно, что '*' и '?' обрабатывает подсистема Win32, а ntkernel их не обрабатывает, чем цигвин и пользуется
Маньяк Робокряк колесит по городу
Re[5]: Задачка на линуксе
От: Pzz Россия https://github.com/alexpevzner
Дата: 31.03.18 22:07
Оценка:
Здравствуйте, Vain, Вы писали:

Pzz>>Уверен

V>Откуда, если оно позволяет создать такие папки с запрещёнными символами?

В юниксе нет запрещенных символов. Есть ровно два символа, которые имеют специальное значение: "/" — разделитель пути, и символ с кодом 0 — завершает строку.

"." — это имя текущей директории, ".." — имя ее "родителя", они уже присутствуют в каждой директории, и именно поэтому их нельзя создать. В венде, кстати, тоже.
Re[6]: Задачка на линуксе
От: Pzz Россия https://github.com/alexpevzner
Дата: 31.03.18 22:10
Оценка:
Здравствуйте, Marty, Вы писали:

M>В линуксе для имен файлов вроде ничего не запрещено от слова совсем. Там и перевод строки в имени файла может быть. Просто некоторые символы shell интерпретирует, а ядру пофик.


В юниксе можно создать имя файла, содержащее такую ESC-последовательность, что если на это имя посмотреть через ls, то терминал в ответ скажет "rm -rf /", или любую другую команду, благо что почти все терминалы — в той или иной степени клоны VT109.
Re[7]: Задачка на линуксе
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 31.03.18 22:21
Оценка:
Здравствуйте, Pzz, Вы писали:

M>>В линуксе для имен файлов вроде ничего не запрещено от слова совсем. Там и перевод строки в имени файла может быть. Просто некоторые символы shell интерпретирует, а ядру пофик.


Pzz>В юниксе можно создать имя файла, содержащее такую ESC-последовательность, что если на это имя посмотреть через ls, то терминал в ответ скажет "rm -rf /", или любую другую команду, благо что почти все терминалы — в той или иной степени клоны VT109.



"Это не баг, это — фича" (c) утерян
Маньяк Робокряк колесит по городу
Re[8]: Задачка на линуксе
От: Pzz Россия https://github.com/alexpevzner
Дата: 31.03.18 22:26
Оценка: +1 :))) :))
Здравствуйте, Marty, Вы писали:

Pzz>>В юниксе можно создать имя файла, содержащее такую ESC-последовательность, что если на это имя посмотреть через ls, то терминал в ответ скажет "rm -rf /", или любую другую команду, благо что почти все терминалы — в той или иной степени клоны VT109.


M>"Это не баг, это — фича" (c) утерян


"Это не правда, что UNIX — не дружественная к пользователю операционная система. Просто UNIX очень тщательно отбирает себе друзей" (ц)
Re[7]: Задачка на линуксе
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 01.04.18 11:22
Оценка: +1
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, Marty, Вы писали:


M>>В линуксе для имен файлов вроде ничего не запрещено от слова совсем. Там и перевод строки в имени файла может быть. Просто некоторые символы shell интерпретирует, а ядру пофик.


Pzz>В юниксе можно создать имя файла, содержащее такую ESC-последовательность, что если на это имя посмотреть через ls, то терминал в ответ скажет "rm -rf /", или любую другую команду, благо что почти все терминалы — в той или иной степени клоны VT109.


Не получится. Обычный ls от такого защищается (при выводе на терминал). Ubuntu, FreeBSD — одинаково:

$ cd /tmp
$ mkdir a
$ cd a
$ touch $'\x1baa'
$ ls
?aa
$ ls -b
\033aa


VT109 среди DECʼовских терминалов не встречается. Имелся в виду VT100?
The God is real, unless declared integer.
Re[5]: Задачка на линуксе
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 01.04.18 11:33
Оценка:
Здравствуйте, Vain, Вы писали:

V>Здравствуйте, Pzz, Вы писали:


Pzz>>>>Папку (и файл), имя которой состоит из одной или двух точек, создать нельзя.

V>>>Уверен? Я вот после этого финта от линукса — не уверен.
Pzz>>Уверен
V>Откуда, если оно позволяет создать такие папки с запрещёнными символами?

Смешиваете три существенно разные вещи:
1. Запрещённые символы в пути — их ровно два: '\0' и '/'.

2. Зарезервированные служебные имена — их тоже два: "." и "..", несмотря на то, что просто точка не является запрещённым символом, и имён, в которые входит точка, в любой реальной системе более 100500.
Но: этот резерв — дело конкретных FS, а не файловой подсистемы в целом. Теоретически возможна FS, где их нет (хотя реально ни один безумец такого не сделает).

3. Метасимволы шелла, в которые входит '*' (см. старт треда), но не точка и не косая черта. Они должны экранироваться для указания в именах, есть несколько разных методов экранирования. Их состав слегка разный для разных шеллов: например, bash и zsh дают специальную роль для ':', но не простой sh (включая bash в режиме совместимости с POSIX sh).

NB особый случай к (2), не меняющий общую картину: удалённый каталог. Делаем следующий эксперимент:

$ cd /tmp
$ mkdir b; cd b
$ ls -la
total 24
drwxr-xr-x  2 netch netch  4096 кві  1 14:28 .
drwxrwxrwt 33 root  root  20480 кві  1 14:28 ..
$ rmdir /tmp/b
$ ls -la
total 0
$ touch 111
touch: cannot touch '111': No such file or directory


Каталог ещё существует как текущий для данного процесса, но содержимого у него нет и ничего в нём сделать уже нельзя — это просто фантом бывшей vnode. То же, если он был открыт отдельно и использовался для openat() или аналога.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.