Linux - perintah untuk membuat daftar file (kecuali ls)

27

Bayangkan Anda sedang mengerjakan suatu sistem dan seseorang secara tidak sengaja menghapus lsperintah ( /bin/ls). Bagaimana Anda bisa mendapatkan daftar file di direktori saat ini? Cobalah.

Saya mencoba banyak metode dan juga mencari di Internet tetapi tidak ada. Saya ingin bertanya di samping lsperintah perintah apa yang dapat kita gunakan untuk mencantumkan semua file.

Eduard Florinescu
sumber

Jawaban:

35
echo *

... akan menampilkan file di folder saat ini melalui globbing file pada shell yang kompatibel dengan Bourne.

Ini mencantumkan semua file di satu tingkat:

echo */*

Di Bash, jika globstar diatur (diset dengan shopt -s globstar, tidak disetel dengan shopt -u globstar), ini akan mencantumkan semua file secara rekursif:

echo **
0xC0000022L
sumber
10
Di luar latihan pekerjaan rumah, echo *berguna dalam praktiknya, ketika Anda telah mengacaukan sistem Anda sehingga Anda tidak dapat menjalankan program apa pun (misalnya Anda menghapus libc.soatau ld.so), tetapi Anda masih memiliki shell yang berjalan.
Gilles 'SO- stop being evil'
3
Di bash4 (saya pikir) dan zsh, Anda dapat menggunakannya echo **/*untuk melakukan ini secara rekursif juga.
Reid
@ Reid: akan mengujinya. Temuan yang bagus.
0xC0000022L
Bagus, @Gilles. Mempelajari hal itu dari sistem DEC lama yang tidak dapat memiliki akses ke / usr atau / bin dalam kondisi boot dan skrip boot tertentu yang diperlukan untuk membuat fungsi 'cat' dan 'ls' sendiri.
Arcege
1
bagus, saya pertama kali belajar tentang gema * dari ee.ryerson.ca/~elf/hack/recovery.html
Mark McKinstry
23
find -maxdepth 1 
find -maxdepth 1 -ls

kurang TAB TAB

menemukan -l switch tidak tergantung pada / bin / ls dan memiliki format sendiri, dan menampilkan informasi detail:

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

yang lain, detail yang menunjukkan kemungkinan, adalah 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
Pengguna tidak diketahui
sumber
10

Agar terlihat seperti ls, saya akan menggunakan forloop Bash :

for i in *; do echo $i; done

Jika itu tidak berhasil, saya akan mencoba Python ;):

python -c "import glob; print '\n'.join(glob.glob('/home/*'))"
Blender
sumber
import glob; print '\n'.join(glob.glob('/home/*'))akan bekerja dengan baik.
Arcege
6

Good ol 'vim;) (dengan penyortiran, penelusuran, dll)

vim .
Gorsky
sumber
6
find .

Meskipun Anda mungkin ingin memasukkan parameter pembatasan apa pun yang Anda butuhkan.

bebek
sumber
3

lsattr ./*

getfacl ./* akan menampilkan izin juga

grep -l '.*' ./*

awk 'FNR==1 {print FILENAME}' ./* bekerja dengan GNU awk

debugfs /dev/sdX ganti sdX dengan partisi apa pun yang ingin Anda lakukan ls, maka Anda dapat ls di dalam 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 dengan asumsi Anda memiliki komandan tengah malam diinstal

Mark McKinstry
sumber
3

Mirip dengan echoversi, tetapi ini mencetak satu entri per baris untuk lebih mudah dibaca:

printf %s\\n ./*

atau

printf '%s\n' ./*

Secara rekursif (untuk bash 4+; shell lain memerlukan opsi lain untuk menyetelnya atau mengaktifkan globstar secara default):

shopt -s globstar
printf %s\\n ./**/*
Evilsoup
sumber
Tidak perlu untuk '/ *', sebuah simple **akan muncul kembali ke semua direktori jika globstardiatur. Ubah saja ke printf '%s' **.
2

Bagaimana dengan dirperintah? :)

/bin/dir

benteng
sumber
1

Yah jika saya tidak bisa menggunakan ls dalam mode shell emacs, saya mungkin beralih ke mode eshell atau hanya dired.

Jerry Asher
sumber
1

Jika saya telah memulai bash shell (atau shell lain dengan selesai), saya mungkin cukup ketik '*' lalu tab.

Atau karena saya biasanya sudah mulai X, saya mungkin juga hanya melakukan 'nautilus.', Tapi oke itu untuk manusia.

Saya juga dapat mencoba / usr / bin / lsattr

Tapi di dunia nyata apa yang akan saya benar-benar lakukan jika hal seperti itu terjadi kepada saya tentu akan menjadi:

sudo apt-get install --reinstall coreutils
Kriss
sumber
1

Di bash, atau shell dengan penyelesaian tab yang serupa, Anda tidak perlu menggunakan perintah nyata sama sekali: wibblediikuti oleh dua tab akan memberi Anda daftar file di direktori saat ini, dan wibble /bin/diikuti oleh dua tab akan menunjukkan kepada Anda apa kiri / bin. Saya pernah menemukan diri saya dalam situasi ini (sebenarnya, saya telah membunuh / bin sepenuhnya bersama dengan beberapa hal lain), dan mulai menggunakan echo *pendekatan @STATUS_ACCESS_DENIED yang disarankan, tetapi akhirnya menemukan penyelesaian tab lebih nyaman.

Gordon Davisson
sumber
0

Cara lain dengan tree, tidak disebutkan di mana saja di sini, itu berjalan secara rekursif dan tidak seperti menemukan atau ls Anda tidak memiliki kesalahan (seperti: Permission denied, Not a directory) Anda juga mendapatkan path absolut jika anda ingin memberi makan file ke xargsatau perintah lain

tree -fai /pathYouWantToList >listOfFiles.list

arti opsi:

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