Crie um diretório separado para jogar (para facilitar a limpeza mais tarde, principalmente); isso usa o valor de $TMPDIR
se estiver definido, caso contrário, /tmp
:
mkdir "${TMPDIR-/tmp}/testing"
cd "${TMPDIR-/tmp}/testing"
Crie arquivos separados, mas que sejam semelhantes entre si por causa do espaço em branco (espaço, tabulação, nova linha, retorno de carro, retrocesso):
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
Acredite nos comentários acima para Patrick . Os dois códigos hexadecimais são separadores de espaço UTF-8 conhecidos como porca e mutton ; "no contexto bidirecional, ele age como espaço em branco e (não) é espelhado. O (s) glyph (s) podem, sob circunstâncias, ser confundidos com outros 20 glifos."
Crie um arquivo simples e um que seja expandido para o primeiro caso seja tratado como glob:
touch -- x '[x]'
Acredite nos comentários acima para Wumpus Q. Wumbley .
Na mesma linha:
touch -- 'a?b' 'a*b'
Acredite nos comentários acima para dave_thompson_085 nos comentários aqui.
touch -- foo\'echo\ malicious\'bar
Acredite nos comentários acima para godlygeek .
Um nome de arquivo que se expandirá para algo diferente (e potencialmente uma execução potencialmente arbitrária!) se avaliado em um contexto de shell:
touch '$( echo boom )'
Uso:
touch -- single\'quote double\"quote back\slash
para capturar tentativas de colocar um nome de arquivo entre aspas sem escapar de citações.
touch -- -a -b -c -r -R - a=x
Acredite nos comentários acima para Stéphane Chazelas .
Crie um pipe nomeado e um link simbólico (para criar arquivos que não sejam "regulares"):
mkfifo fifo
ln -s a alink
Crie subdiretórios com vários espaços em branco incluídos em seus nomes, junto com arquivos de token dentro deles:
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
Crie nomes de arquivo contendo apenas *
(possivelmente problemático para remover), um nome de arquivo consistindo em apenas um espaço (regular!), um link simbólico morto, um link simbólico que faz um loop em si mesmo e um subdiretório com um link de volta ao diretório pai:
touch -- '*' '**' '***' ' '
ln -s /does/not/exist dead
ln -s loop loop
mkdir subdir_with_link
(cd subdir_with_link && ln -s .. parent)
Mais nomes de arquivos diversos. Os dois últimos são unicode para "barra fracionária" e "barra de divisão".
touch -- '(' '!' '!!' $'\xe2\x81\x84' $'\xe2\x88\x95'
Idéias de Scott :
touch -- '-' '--' ';' '&' '|' '<' '>' '$' ')' '{' '}' = \ '!' '#' '{a,b}'
Caracteres inofensivos em alguns locais, mas perigosos em outros:
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
Caracteres que ordenam o mesmo em algumas localidades:
touch ① ② # sorts the same in GNU locales, order non-deterministic.
Arquivos que escapam do .[!.]* *
glob (às vezes usado para expandir arquivos ocultos e não ocultos):
touch ..foo ...