Vamos tentar entender de básico.
mkdir test
touch file
mkdir test1
mkdir test2
O ? procura por um e apenas um caractere.
Agora, quando emitimos o comando ls tes? , a saída seria, file .
Funcionou porque criamos um arquivo dentro do diretório. De man page de ls ,
NAME
ls - list directory contents
O diretório test tem o file dentro e, portanto, o comando ls lista os arquivos que estão presentes no diretório.
Agora, vamos criar um arquivo como abaixo.
touch ramesh
ls rames?
ramesh
A razão pela qual o comando acima funcionou é porque ramesh é um arquivo e está presente no diretório atual (Como no ls working, ele lista o conteúdo do diretório e no diretório atual existe um arquivo chamado ramesh ).
Agora, vamos criar um diretório chamado ram1 , conforme abaixo.
mkdir ram1
ls ram?
O acima não produz nada. É porque o diretório ram1 atualmente não possui arquivos dentro dele. Agora, se criarmos outro diretório chamado ram2 e tentar, ele funcionará porque primeiro verifica se o diretório ram1 tem algum arquivo e, em seguida, verifica se o diretório ram2 possui algum arquivo. Lembre-se de que ls funciona na classificação.
Se você quiser ver mais sobre o funcionamento interno, emita o comando stat .
Nesse caso, stat ram? produziria a saída como
File: 'ram1'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 805h/2053d Inode: 6743976 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2014-06-30 18:17:06.000000000 -0500
Modify: 2014-06-30 18:17:03.000000000 -0500
Change: 2014-06-30 18:17:03.000000000 -0500