Linux - comando para listar arquivos (exceto ls)

27

Imagine que você estava trabalhando em um sistema e alguém excluiu acidentalmente o lscomando ( /bin/ls). Como você pôde obter uma lista dos arquivos no diretório atual? Tente.

Eu tentei muitos métodos e também procurei na Internet, mas nada. Quero perguntar ao lado do lscomando que comando podemos usar para listar todos os arquivos.

Eduard Florinescu
fonte

Respostas:

35
echo *

... mostrará os arquivos na pasta atual por meio de globbing de arquivos em shells compatíveis com Bourne.

Isso lista todos os arquivos em um nível:

echo */*

No Bash, se globstar estiver definido (definido com shopt -s globstar, desabilitado com shopt -u globstar), isso listará todos os arquivos recursivamente:

echo **
0xC0000022L
fonte
10
Além do exercício de lição de casa, echo *é útil na prática, quando você danificou o sistema para não poder executar nenhum programa (por exemplo, você removeu libc.soou ld.so), mas ainda possui um shell em execução.
Gilles 'SO- stop be evil'
3
No bash4 (acho) e no zsh, você também pode echo **/*fazer isso recursivamente.
Reid
@ Reid: vai testar isso. Bom achado.
0xC0000022L
Bom, @Gilles. Aprendemos isso em sistemas DEC antigos que não podiam ter acesso a / usr ou / bin em determinadas condições de inicialização e scripts de inicialização necessários para criar as funções 'cat' e 'ls'.
Arcege
11
bom, eu aprendi primeiramente sobre echo * from ee.ryerson.ca/~elf/hack/recovery.html
Mark McKinstry
23
find -maxdepth 1 
find -maxdepth 1 -ls

Menos TAB TAB

A opção find -ls é independente de / bin / ls e tem seu próprio formato e exibe informações detalhadas:

127432    0 drwxr-xr-x   2 stefan   stefan         48 Apr  8 22:51 ./temp/falsch/.hiddenfalsch
127447    0 lrwxrwxrwx   1 stefan   stefan          9 Apr  8 22:51 ./temp/falsch/linkfalsch -> subfalsch
127427    0 drwxr-xr-x   2 stefan   stefan         48 Apr  8 22:51 ./temp/.hiddenmusik

outro, detalhes mostrando possibilidades, é stat

stat *
  File: `halx0o'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 807h/2055d  Inode: 102701      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/  stefan)   Gid: ( 1000/  stefan)
Access: 2011-04-08 22:38:18.000000000 +0200
Modify: 2009-07-23 03:16:15.000000000 +0200
Change: 2011-04-09 23:29:13.000000000 +0200
  File: `ho ho ho'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 807h/2055d  Inode: 115835      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/  stefan)   Gid: ( 1000/  stefan)
Access: 2011-04-08 22:38:18.000000000 +0200
Modify: 2010-07-24 14:12:48.000000000 +0200
Change: 2011-04-09 23:29:13.000000000 +0200
Usuário desconhecido
fonte
10

Para fazer parecer ls, eu usaria o forloop do Bash :

for i in *; do echo $i; done

Se isso não funcionar, eu tentaria o Python ;):

python -c "import glob; print '\n'.join(glob.glob('/home/*'))"
Liquidificador
fonte
import glob; print '\n'.join(glob.glob('/home/*'))funcionaria tão bem.
Arcege
6

Good ol 'vim;) (com classificação, navegação, etc)

vim .
Gorsky
fonte
6
find .

Embora você provavelmente deseje inserir os parâmetros limitadores necessários.

Pato
fonte
3

lsattr ./*

getfacl ./* também exibirá permissões

grep -l '.*' ./*

awk 'FNR==1 {print FILENAME}' ./* trabalha com o GNU awk

debugfs /dev/sdX substitua o sdX por qualquer partição em que você deseja executar um ls, então você pode ls dentro de debugfs

debugfs:  cd /
debugfs:  ls -l
      2   40755 (2)      0      0    4096  6-Apr-2011 01:01 .
      2   40755 (2)      0      0    4096  6-Apr-2011 01:01 ..
     11   40700 (2)      0      0   16384  5-Jul-2010 09:59 lost+found
 2392065   40755 (2)      0      0    4096  5-Jul-2010 09:59 boot
 2228225   40755 (2)      0      0    4096  5-Jul-2010 09:59 sys
 1376257   40755 (2)      0      0    4096  5-Jul-2010 09:59 proc
 4915201   40755 (2)      0      0    4096  5-Jul-2010 09:59 dev
 3473409   40755 (2)      0      0   12288 10-Apr-2011 22:05 etc
  98305  100644 (1)      0      0       0  6-Jul-2010 12:05 .autofsck
 3342337   40755 (2)      0      0    4096  5-Apr-2011 15:05 var
 3932161   41777 (2)      0      0    4096 10-Apr-2011 22:11 tmp
  ..........
debugfs:  

lynx ./

mc supondo que você tenha o comandante da meia-noite instalado

Mark McKinstry
fonte
3

Semelhante à echoversão, mas isso imprime uma entrada por linha para maior legibilidade:

printf %s\\n ./*

ou

printf '%s\n' ./*

Recursivamente (para o bash 4+; outros shells precisam de uma opção diferente para configurá-lo ou têm o globstar ativado por padrão):

shopt -s globstar
printf %s\\n ./**/*
evilsoup
fonte
Não é necessário o '/ *', um simples **será recursivo em todos os diretórios se globstarestiver definido. Apenas mude para printf '%s' **.
2

Que tal dircomando? :)

/bin/dir

torre
fonte
1

Bem, se eu não pudesse usar ls no modo shell do emacs, poderia mudar para o modo eshell ou apenas um dired.

Jerry Asher
fonte
1

Se eu iniciei o shell bash (ou qualquer outro shell com conclusão), provavelmente apenas digite '*' tab.

Ou como eu normalmente inicio o X, também posso fazer 'nautilus', mas tudo bem para os humanos.

Também posso tentar / usr / bin / lsattr

Mas, no mundo real, o que eu realmente faria se acontecesse isso certamente seria:

sudo apt-get install --reinstall coreutils
kriss
fonte
1

No bash, ou em um shell com conclusão de guia semelhante, você não precisa usar um comando real: wibbleseguido de duas guias, você obterá uma lista de arquivos no diretório atual e wibble /bin/seguido de duas guias mostrará o que é esquerda de / bin. Uma vez me encontrei nessa situação (na verdade, eu matei / bin completamente junto com algumas outras coisas) e comecei a usar a echo *abordagem sugerida por @STATUS_ACCESS_DENIED, mas finalmente achei a conclusão da guia mais conveniente.

Gordon Davisson
fonte
0

Outra maneira de tree, não mencionado em nenhum lugar aqui, ocorrer recursivamente e, ao contrário de find ou se você não tiver nenhum erro (como:, ) Permission denied, Not a directoryvocê também obtém o caminho absoluto no caso de desejar alimentar os arquivos xargsou outro comando

tree -fai /pathYouWantToList >listOfFiles.list

o significado das opções:

-a     All  files  are  printed.  By default tree does not print hidden files (those beginning with a dot
       `.').  In no event does tree print the file system constructs `.'  (current  directory)  and  `..'
       (previous directory).

-i     Makes tree not print the indentation lines, useful when used in conjunction with the -f option.

-f     Prints the full path prefix for each file.
Eduard Florinescu
fonte