Linux - dosyaları listeleme komutu (ls hariç)


27

Bir sistem üzerinde çalıştığınızı ve birisinin yanlışlıkla lskomutu ( /bin/ls) sildiğini hayal edin . Geçerli dizindeki dosyaların listesini nasıl edinebilirsiniz? Dene.

Birçok yöntem denedim ve internette de bir şey aradım. lsKomutun yanında tüm dosyaları listelemek için hangi komutu kullanabiliriz diye sormak istiyorum .

Yanıtlar:


35
echo *

... geçerli klasördeki dosyaları, Bourne uyumlu mermilerde globbing yoluyla gösterecektir.

Bu, tüm dosyaları bir düzeyde aşağıya listeler:

echo */*

Bash'de, globstar ayarlanmışsa (set shopt -s globstar, unset with shopt -u globstar), bu tüm dosyaları tekrar tekrar listeleyecektir:

echo **

10
Ödev alıştırmasının ötesinde, echo *pratikte, herhangi bir programı (örneğin kaldırmış libc.soveya kaldırmış ld.so) çalıştıramamak için sisteminizi kurduğunuzda kullanışlıdır , ancak hala çalışan bir kabuğunuz vardır.
Gilles 'SO- kötülük' dur

3
Bash4 (bence) ve zsh'da bunu tekrarlı bir echo **/*şekilde yapmak için kullanabilirsiniz .
Reid,

@Reid: bunu test edeceğim. Güzel buldum.
0xC0000022L

Güzel, @Gilles. Bazı önyükleme koşullarında / usr veya / bin dizinine erişemeyen eski DEC sistemlerinden ve 'cat' ve 'ls' işlevlerini kendileri yapmak için gereken önyükleme komut dosyalarından öğrendim.
Arcege


23
find -maxdepth 1 
find -maxdepth 1 -ls

az TAB TAB

find -ls anahtarı / bin / ls değişkeninden bağımsızdır ve kendi biçimine sahiptir ve ayrıntılı bilgi görüntüler:

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

başka bir olasılık, olasılığı gösteren detaylar 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

10

Öyle görünmesi lsiçin Bash'in fordöngüsünü kullanırdım:

for i in *; do echo $i; done

Bu işe yaramazsa, Python'u deneyeceğim ;):

python -c "import glob; print '\n'.join(glob.glob('/home/*'))"

import glob; print '\n'.join(glob.glob('/home/*'))aynı şekilde çalışırdı.
Arcege

6

İyi ol 'vim;) (sıralama, tarama vb. İle)

vim .

6
find .

Muhtemelen ihtiyacınız olan sınırlayıcı parametreleri girmek istersiniz.


3

lsattr ./*

getfacl ./* izinleri de gösterecek

grep -l '.*' ./*

awk 'FNR==1 {print FILENAME}' ./* GNU awk ile çalışır

debugfs /dev/sdX sdX'i bir ls yapmak istediğiniz bölümle değiştirin, sonra debugfs içinde ls yapabilirsiniz.

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 gece yarısı komutanının yüklü olduğunu varsayarsak


3

echoVersiyona benzer , ancak bu daha iyi okunabilirlik için satır başına bir giriş basar:

printf %s\\n ./*

veya

printf '%s\n' ./*

Tekrarlayan şekilde (bash 4+ için; diğer kabuklar ayarlamak için farklı bir seçeneğe ihtiyaç duyar veya globstar'ı varsayılan olarak etkin kılar):

shopt -s globstar
printf %s\\n ./**/*

'/ *' 'A gerek yok, **eğer globstarayarlanmışsa basit tüm dizinlere tekrar girecek Sadece değiştir printf '%s' **.


1

Peki, ls emacs'ın kabuk modunda kullanamazsam, eshell moduna veya sadece bir yönlendirmeye geçebilirim.


1

Eğer bash kabuğuna başladım (ya da tamamlanmış başka bir kabuğum), muhtemelen sadece '*' yazıp sekmeye yazarım.

Ya da genellikle X'i başlattığım gibi, sadece 'nautilus' da yapabilirim, ama tamam bu insanlar için.

Ayrıca / usr / bin / lsattr 'ı deneyebilirim.

Fakat gerçek dünyada , eğer böyle bir şey meydana gelirse , gerçekten ne yapacağım, kesinlikle:

sudo apt-get install --reinstall coreutils

1

Bash veya benzer sekme tamamlama özelliğine sahip bir kabukta, gerçek bir komut kullanmanıza gerek yoktur: wibbleardından iki sekme mevcut dizindeki dosyaların bir listesini alır ve wibble /bin/ardından iki sekme size ne olduğunu gösterir / bin'in solunda. Bir zamanlar kendimi bu durumda buldum (aslında, tamamen diğer bazı şeylerle birlikte öldürdüm / echo *depolandım ) ve @STATUS_ACCESS_DENIED @ yaklaşımını kullanmaya başladım , ancak sonuçta sekme tamamlamanın daha uygun olduğunu gördüm.


0

İle bir başka yolu tree, bu yinelemeli, her yerde burada gider belirtilmeyen ve aksine bulmak veya ls Eğer herhangi bir hata yoktur: (gibi Permission denied, Not a directoryaynı zamanda durumunda mutlak yolunu almak) alanına dosya beslemek istiyorum xargsya da diğer komut

tree -fai /pathYouWantToList >listOfFiles.list

seçenekler anlamı:

-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.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.