Cree un directorio separado para jugar (para facilitar la limpieza más tarde, principalmente); esto usa el valor de $TMPDIR
si está configurado, de lo contrario /tmp
:
mkdir "${TMPDIR-/tmp}/testing"
cd "${TMPDIR-/tmp}/testing"
Cree archivos que están separados, pero que se parecen entre sí debido al espacio en blanco (espacio, tabulación, nueva línea, retorno de carro, retroceso):
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
Crédito por lo anterior a Patrick . Los dos códigos hexadecimales son separadores de espacio UTF-8 conocidos como tuerca y cordero ; "en contexto bidireccional, actúa como espacio en blanco y (no) se refleja. Los glifos pueden, en circunstancias, confundirse con otros 20 glifos".
Cree un archivo simple y uno que se expandiría al primero si fuera tratado como un globo:
touch -- x '[x]'
Crédito por lo anterior a Wumpus Q. Wumbley .
En un sentido similar:
touch -- 'a?b' 'a*b'
Crédito por lo anterior a dave_thompson_085 en los comentarios aquí.
touch -- foo\`echo\ malicious\`bar
Crédito por lo anterior a Godlygeek .
Un nombre de archivo que se expandirá a algo diferente (¡y una ejecución potencialmente arbitraria!) Si se evalúa en un contexto de shell:
touch '$( echo boom )'
Utilizar:
touch -- single\'quote double\"quote back\\slash
para detectar intentos de poner un nombre de archivo entre comillas sin escapar de las comillas.
touch -- -a -b -c -r -R - a=x
Crédito por lo anterior a Stéphane Chazelas .
Cree una tubería con nombre y un enlace simbólico (para crear archivos que no sean "regulares"):
mkfifo fifo
ln -s a alink
Cree subdirectorios que tengan varios espacios en blanco incluidos en sus nombres, junto con archivos de token dentro de ellos:
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
Cree nombres de archivo que solo contengan *
(posiblemente problemático de eliminar), un nombre de archivo que consta de solo un espacio (¡normal!), Un enlace simbólico muerto, un enlace simbólico que se repite sobre sí mismo y un subdirectorio con un enlace al directorio principal:
touch -- '*' '**' '***' ' '
ln -s /does/not/exist dead
ln -s loop loop
mkdir subdir_with_link
(cd subdir_with_link && ln -s .. parent)
Más nombres de archivos misceláneos. Los dos últimos son unicode para "barra fraccional" y "barra divisoria".
touch -- '(' '!' '!!' $'\xe2\x81\x84' $'\xe2\x88\x95'
Ideas de Scott :
touch -- '-' '--' ';' '&' '|' '<' '>' '$' ')' '{' '}' = \\ '!' '#' '{a,b}'
Personajes que son inofensivos en algunos lugares pero peligrosos en otros:
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 ordenan lo mismo en algunas configuraciones regionales:
touch ① ② # sorts the same in GNU locales, order non-deterministic.
Archivos que escapan al .[!.]* *
globo (a veces se usan para expandir archivos ocultos y no ocultos)
touch ..foo ...
a?b
ya*b
(citado por supuesto). @muru: las secuencias de bytes E2 80 82/83 son la codificación UTF-8 de U + 2002 EN SPACE y U + 2003 EM SPACE-
y--
, aunque, dependiendo de los requisitos del script, quizás sea imposible acceder a ellos sin un líder./
. Y me sorprende que haya tan pocos con caracteres especiales de shell no glob, como;
,&
,|
,<
,>
,$
,(
,)
,{
,}
,=
,\
,!
, y#
- por ejemplo,{a,b}
.