Linux - Befehl zum Auflisten von Dateien (außer ls)

27

Stellen Sie sich vor, Sie arbeiten an einem System und jemand hat den lsBefehl versehentlich gelöscht ( /bin/ls). Wie können Sie eine Liste der Dateien im aktuellen Verzeichnis erhalten? Versuch es.

Ich habe viele Methoden ausprobiert und auch im Internet gesucht, aber nichts. Ich möchte neben dem lsBefehl fragen, mit welchem ​​Befehl wir alle Dateien auflisten können.

Eduard Florinescu
quelle

Antworten:

35
echo *

... zeigt Dateien im aktuellen Ordner durch Verschieben von Dateien auf Bourne-kompatiblen Shells an.

Dies listet alle Dateien auf einer Ebene auf:

echo */*

Wenn in Bash globstar gesetzt (gesetzt mit shopt -s globstar, nicht gesetzt mit shopt -u globstar) ist, werden alle Dateien rekursiv aufgelistet :

echo **
0xC0000022L
quelle
10
Über die Hausaufgaben hinaus echo *ist dies in der Praxis nützlich, wenn Sie Ihr System so vermasselt haben, dass Sie kein Programm ausführen können (z. B. Sie haben das Programm entfernt libc.sooder ld.so), aber Sie haben immer noch eine laufende Shell.
Gilles 'SO - hör auf, böse zu sein'
3
In bash4 (glaube ich) und zsh können Sie echo **/*dies auch rekursiv tun.
Reid
@Reid: werde das testen. Schöner Fund.
0xC0000022L
Gut, @Gilles. Wir haben erfahren, dass alte DEC-Systeme, die unter bestimmten Startbedingungen und Boot-Skripten keinen Zugriff auf / usr oder / bin haben konnten, 'cat' und 'ls' selbst funktionieren müssen.
Arcege
1
nett, ich habe zuerst von ee.ryerson.ca/~elf/hack/recovery.html
Mark McKinstry
23
find -maxdepth 1 
find -maxdepth 1 -ls

Weniger TAB TAB

Findet den Schalter -ls unabhängig von / bin / ls, hat ein eigenes Format und zeigt detaillierte Informationen an:

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

Ein weiteres Detail, das die Möglichkeit zeigt, ist 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
Benutzer unbekannt
quelle
10

Um es so aussehen zu lassen ls, würde ich die Bash- forSchleife verwenden:

for i in *; do echo $i; done

Wenn das nicht funktioniert, würde ich versuchen, Python ;):

python -c "import glob; print '\n'.join(glob.glob('/home/*'))"
Mixer
quelle
import glob; print '\n'.join(glob.glob('/home/*'))würde genauso gut funktionieren.
Arcege
6

Good ol 'vim;) (mit Sortieren, Durchsuchen usw.)

vim .
gorsky
quelle
6
find .

Wahrscheinlich möchten Sie jedoch die gewünschten einschränkenden Parameter eingeben.

Ente
quelle
3

lsattr ./*

getfacl ./* zeigt auch Berechtigungen an

grep -l '.*' ./*

awk 'FNR==1 {print FILENAME}' ./* arbeitet mit GNU awk

debugfs /dev/sdX Ersetzen Sie sdX durch die Partition, auf der Sie ein ls ausführen möchten. Dann können Sie ls in debugfs ausführen

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 vorausgesetzt, Sie haben Mitternachtskommandeur installiert

Mark McKinstry
quelle
3

Ähnlich wie die echoVersion, druckt jedoch zur besseren Lesbarkeit einen Eintrag pro Zeile aus:

printf %s\\n ./*

oder

printf '%s\n' ./*

Rekursiv (für Bash 4+; für andere Shells ist entweder eine andere Option erforderlich oder Globstar ist standardmäßig aktiviert):

shopt -s globstar
printf %s\\n ./**/*
Übelsuppe
quelle
Das '/ *' ist **nicht erforderlich , ein einfacher Befehl wird in alle Verzeichnisse zurückgeführt, wenn globstarfestgelegt. Wechseln Sie einfach zu printf '%s' **.
2

Wie wäre es mit dirBefehl? :)

/bin/dir

Turm
quelle
1

Nun, wenn ich ls nicht im Shell-Modus von Emacs verwenden könnte, würde ich vielleicht in den Eshell-Modus oder einfach in einen Dired-Modus wechseln.

Jerry Asher
quelle
1

Wenn ich eine Bash-Shell gestartet habe (oder eine andere Shell mit Abschluss), würde ich wahrscheinlich nur '*' und dann tab eingeben.

Oder wie ich normalerweise mit X angefangen habe, kann ich auch nur 'Nautilus' machen, aber OK, das ist für Menschen.

Ich kann auch versuchen, / usr / bin / lsattr

Aber in der realen Welt wäre das, was ich wirklich tun würde , wenn mir so etwas einfallen würde, mit Sicherheit:

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

In bash oder einer Shell mit ähnlicher Tabulatorvervollständigung müssen Sie überhaupt keinen echten Befehl verwenden: wibbleWenn Sie auf zwei Tabulatoren klicken, wird eine Liste der Dateien im aktuellen Verzeichnis wibble /bin/angezeigt , und wenn Sie auf zwei Tabulatoren klicken, sehen Sie, was passiert links von / bin. Ich befand mich einmal in dieser Situation (eigentlich hatte ich / bin vollständig zusammen mit einigen anderen Dingen getötet) und begann mit dem vorgeschlagenen echo *Ansatz @STATUS_ACCESS_DENIED, fand aber schließlich die Tab-Vervollständigung praktischer.

Gordon Davisson
quelle
0

Eine weitere Möglichkeit , mit treenicht überall hier erwähnt, es geht rekursiv und im Gegensatz zu finden oder ls Sie haben keine Fehler (wie: Permission denied, Not a directory) auch den absoluten Pfad für den Fall bekommen Sie die Dateien füttern xargsoder anderen Befehl

tree -fai /pathYouWantToList >listOfFiles.list

Die Optionen bedeuten:

-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
quelle