Linux - polecenie wyświetlania listy plików (oprócz ls)

27

Wyobraź sobie, że pracujesz w systemie i ktoś przypadkowo usunął lspolecenie ( /bin/ls). Jak uzyskać listę plików w bieżącym katalogu? Spróbuj.

Próbowałem wielu metod, a także szukałem w Internecie, ale nic. Chcę zapytać obok lspolecenia, którego polecenia możemy użyć, aby wyświetlić listę wszystkich plików.

Eduard Florinescu
źródło

Odpowiedzi:

35
echo *

... pokaże pliki w bieżącym folderze poprzez globbing plików w powłokach zgodnych z Bourne.

Spowoduje to wyświetlenie listy wszystkich plików o jeden poziom niżej:

echo */*

W Bash, jeśli globstar jest ustawiony (ustawiony za pomocą shopt -s globstar, wyłączony za pomocą shopt -u globstar), to wyświetli listę wszystkich plików rekurencyjnie:

echo **
0xC0000022L
źródło
10
Poza ćwiczeniami domowymi echo *jest przydatny w praktyce, kiedy spieprzyłeś swój system, abyś nie mógł wykonać żadnego programu (np. Usunąłeś libc.solub ld.so), ale nadal masz działającą powłokę.
Gilles „SO- przestań być zły”
3
W bash4 (tak mi się wydaje) i zsh możesz także użyć echo **/*tego rekurencyjnie.
Reid
@Reid: to przetestuję. Niezłe znalezisko.
0xC0000022L
Dobry, @Gilles. Nauczyłem się tego ze starych systemów DEC, które nie mogły mieć dostępu do katalogu / usr lub / bin w określonych warunkach rozruchu i skryptów rozruchowych potrzebnych do samodzielnego wykonania funkcji „cat” i „ls”.
Arcege
1
fajnie, po raz pierwszy dowiedziałem się o echu * od ee.ryerson.ca/~elf/hack/recovery.html
Mark McKinstry
23
find -maxdepth 1 
find -maxdepth 1 -ls

mniej TAB TAB

przełącznik find -ls jest niezależny od / bin / ls i ma swój własny format oraz wyświetla szczegółowe informacje:

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

innym, szczegółami wskazującymi na możliwość, jest 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
nieznany użytkownik
źródło
10

Aby to wyglądało ls, użyłbym forpętli Basha :

for i in *; do echo $i; done

Jeśli to nie zadziała, wypróbuję Python ;):

python -c "import glob; print '\n'.join(glob.glob('/home/*'))"
Mikser
źródło
import glob; print '\n'.join(glob.glob('/home/*'))działałoby równie dobrze.
Arcege
6

Good ol 'vim;) (z sortowaniem, przeglądaniem itp.)

vim .
gorsky
źródło
6
find .

Chociaż prawdopodobnie chcesz wprowadzić dowolne parametry ograniczające, których potrzebujesz.

kaczka
źródło
3

lsattr ./*

getfacl ./* wyświetli również uprawnienia

grep -l '.*' ./*

awk 'FNR==1 {print FILENAME}' ./* współpracuje z GNU awk

debugfs /dev/sdX zamień sdX na dowolną partycję, na której chcesz zrobić ls, wtedy możesz ls wewnątrz 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 zakładając, że masz zainstalowany dowódca północy

Mark McKinstry
źródło
3

Podobne do echowersji, ale drukuje jeden wpis w wierszu dla większej czytelności:

printf %s\\n ./*

lub

printf '%s\n' ./*

Rekurencyjnie (dla bash 4+; inne powłoki albo potrzebują innej opcji, aby to ustawić, albo domyślnie mają włączoną globstar):

shopt -s globstar
printf %s\\n ./**/*
zła
źródło
Nie ma potrzeby używania **znaku „/ *”, proste powróci do wszystkich katalogów, jeśli globstarjest ustawione. Po prostu zmień na printf '%s' **.
2

Co powiesz na dirdowodzenie? :)

/bin/dir

wieża
źródło
1

Cóż, gdybym nie mógł użyć ls w trybie powłoki emacsa, mógłbym przejść do trybu eshell lub po prostu dired.

Jerry Asher
źródło
1

Jeśli mam uruchomioną powłokę bash (lub dowolną inną powłokę z ukończeniem), prawdopodobnie po prostu wpisałbym „*”, a następnie tab.

Lub, jak zwykle mam X, mogę również zrobić „nautilus”, ale OK, to jest dla ludzi.

Mogę także wypróbować / usr / bin / lsattr

Ale w prawdziwym świecie to, co naprawdę zrobiłbym, gdyby coś takiego mi się wydarzyło, to na pewno:

sudo apt-get install --reinstall coreutils
Kriss
źródło
1

W bash lub powłoce z podobnym uzupełnianiem tabulatorów nie musisz wcale używać prawdziwego polecenia: wibblepo dwóch kartach pojawi się lista plików w bieżącym katalogu, a wibble /bin/po dwóch kartach pokaże ci się na lewo od / bin. Kiedyś znalazłem się w tej sytuacji (właściwie zabiłem / bin całkowicie wraz z kilkoma innymi rzeczami) i zacząłem stosować echo *podejście sugerowane przez @STATUS_ACCESS_DENIED, ale ostatecznie uznałem, że uzupełnianie tabulacji jest wygodniejsze.

Gordon Davisson
źródło
0

Innym sposobem z tree, niewymienione nigdzie tutaj, to idzie rekurencyjnie iw przeciwieństwie do znalezienia lub ls nie masz żadnych błędów (takich jak: Permission denied, Not a directory) można również uzyskać bezwzględną ścieżkę w przypadku, gdy chcesz karmić plików xargslub innych poleceń

tree -fai /pathYouWantToList >listOfFiles.list

opcje oznaczają:

-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
źródło