Создайте отдельный каталог для воспроизведения (в основном для упрощения очистки позже); это использует значение, $TMPDIR
если оно установлено, в противном случае /tmp
:
mkdir "${TMPDIR-/tmp}/testing"
cd "${TMPDIR-/tmp}/testing"
Создайте отдельные файлы, но они будут похожи друг на друга из-за пробелов (пробел, табуляция, перевод строки, возврат каретки, возврат на одну позицию):
touch -- a b 'a ' 'b ' 'a b' 'a b' $'a\bb'
touch -- a$'\xe2\x80\x82'b a$'\xe2\x80\x83'b a$'\t'b a$'\n'b a$'\r'b
Благодарю за вышесказанное Патрику . Два шестнадцатеричных кода - это разделители пространства UTF-8, известные как орехи и баранина ; «в двунаправленном контексте он действует как белое пространство и (не) не отражается. Глиф (ы) может, при определенных обстоятельствах, быть перепутан с 20 другими символами».
Создайте простой файл и файл, который будет расширяться до первого, если он будет рассматриваться как глобус:
touch -- x '[x]'
Кредит на выше Wumpus Q. Wumbley .
В том же духе:
touch -- 'a?b' 'a*b'
Кредит за вышеупомянутое dave_thompson_085 в комментариях здесь.
touch -- foo\`echo\ malicious\`bar
Отдайте должное вышеупомянутому godlygeek .
Имя файла, которое будет расширено до чего-то другого (и, возможно, произвольного выполнения!), Если оно будет оценено в контексте оболочки:
touch '$( echo boom )'
Использование:
touch -- single\'quote double\"quote back\\slash
отлавливать попытки поместить имя файла в кавычки без экранирования кавычек.
touch -- -a -b -c -r -R - a=x
Кредит для выше Stéphane Chazelas .
Создайте именованный канал и символическую ссылку (для создания файлов, которые не являются «обычными»):
mkfifo fifo
ln -s a alink
Создайте подкаталоги, в именах которых есть разные пробелы, а также файлы токенов внутри них:
mkdir subdir "subdir 1" "subdir 2" "subdir 3 " subdir$'\n'4
touch subdir/file0 "subdir 1"/file1 "subdir 2"/file2 "subdir 3 "/file3 subdir$'\n'4/file4
Создайте только имена файлов, содержащие *
(возможно, проблематично удалить), имя файла, состоящее только из (обычного!) Пробела, мертвой символической ссылки, символической ссылки, которая зацикливается на себя, и подкаталога со ссылкой на родительский каталог:
touch -- '*' '**' '***' ' '
ln -s /does/not/exist dead
ln -s loop loop
mkdir subdir_with_link
(cd subdir_with_link && ln -s .. parent)
Больше разных имен файлов. Последние два являются Unicode для «дробной черты» и «косой черты».
touch -- '(' '!' '!!' $'\xe2\x81\x84' $'\xe2\x88\x95'
Идеи от Скотта :
touch -- '-' '--' ';' '&' '|' '<' '>' '$' ')' '{' '}' = \\ '!' '#' '{a,b}'
Персонажи, которые безвредны в некоторых местах, но опасны в других:
touch $'X\xa0Y' # non-breaking space in iso8859-1 which is considered
# "blank" and "space" in some locales
touch $'\xa3\x5c' $'\xa3\x60' # α and ε in BIG5 or BIG5-HKSCS charset, but
# �\ and �` in ASCII
Символы, которые сортируются одинаково в некоторых локалях:
touch ① ② # sorts the same in GNU locales, order non-deterministic.
Файлы, которые экранируют .[!.]* *
глобус (иногда используются для расширения как скрытых, так и не скрытых файлов):
touch ..foo ...
a?b
иa*b
(цитирую конечно). @muru: байтовые последовательности E2 80 82/83 являются кодировкой UTF-8 U + 2002 EN SPACE и U + 2003 EM SPACE-
и--
, хотя, в зависимости от требований сценария, может быть невозможным получить к ним доступ без ведущего./
. И я удивлен , что так мало с не-Глоб оболочки специальные символы, как;
,&
,|
,<
,>
,$
,(
,)
,{
,}
,=
,\
,!
, и#
- например,{a,b}
.