UNIX komutları - bul


9

UNIX komutlarını öğrenmeye çalışıyorum ve öğrenmek için bu oyunu oynuyorum ve şu anda gerçekten takıldım. Ben ssh aracılığıyla bir sunucu ve dizin rastgele dosya ve klasörlerle dolu ve sonraki düzey için parola dosyalardan birinde. Dosyaya aşağıdaki attrbutes olduğu söylendi:

  • insan tarafından okunabilir
  • 1033 bayt
  • yürütülemez

findKomutu kullanmalıyım ve denedim find ! -executableama bu bir sürü dosya döndürdü tahmin ediyorum . Kılavuzda veya çevrimiçi olarak bulabildiğim tek insan tarafından okunabilir yardım, insan tarafından okunabilir dosya boyutlarını yazdırmaktır. Yani orada biraz kayboldum?

Ayrıca denedim find ~ -size 1033bama hiçbir şey döndürdü. Ama denediğimde find ~ -size -1033bdizindeki her dosyayı döndürdü.


Bu oyun hakkında daha fazla bilgi edinmek istiyorum!
ivanivan

2
@ivanivan bandit.overthewire.org
avgvstvs

Yanıtlar:


16

Okunabilir dosya adlarını filtrelemek için, [:print:]( yazdırılabilir ) karakter sınıfı adını kullanabilirsiniz. Bu sınıflar hakkında daha fazla bilgiyi kılavuzunda bulabilirsiniz grep.

find . -type f -size 1033c -name "[[:print:]]*" ! -executable

İkinci bir düşüncede, "insan tarafından okunabilir" gereksinimi dosyanın adı yerine dosyanın içeriğine atıfta bulunabilir. Başka bir deyişle, metin dosyaları arıyor olacaksınız . Bu biraz daha zor. @D_Bye bir yorumda önerildiği gibi file, dosya içerik türünü belirlemek için komutu kullanmalısınız . Ancak file, bir kanaldan sonra çalıştırmak iyi bir fikir olmaz, çünkü dosyanın adını görüntüleme görevini zorlaştırır. İşte önerim:

find . -type f -size 1033c ! -executable -exec sh -c 'file -b $0 | grep -q text' {} \; -print

file-Part'ın çalışma şekli kısaca şöyle:

  • -execYüklem yürütür sh -c 'file -b $0 | grep -q text' FILENAMEher biri için FILENAMEbu tatmin önceki tüm durumlar (tipi, boyutu, yürütülemez).
  • Bu dosyaların her biri için bir kabuk ( sh), bu kısa komut dosyasını çalıştırır : dosya adıyla file -b $0 | grep -q textdeğiştirir $0.
  • fileProgram, her dosyanın içeriği tipini belirler ve bu bilgiyi verir. Bu -bseçenek, test edilen her dosyanın adının yazdırılmasını önler.
  • grep"metin"file içeren satırları arayarak programdan gelen çıktıyı filtreler . ( Komutun tipik bir çıktısının nasıl göründüğünü kendiniz görün .)file
  • Ancak grep, filtrelenen metni vermez, çünkü verilen -q(sessiz) seçeneği vardır. Ne, sadece kendi değiştirecek gelmez çıkış durumu birine 0( "true" temsil - filtrelenmiş metin bulunmuştur) veya 1 (- Metin "hatası" anlamına "metin" den çıktıda görünmüyor file).
  • Gelen doğru / yanlış çıkış durumu grepile daha da geçirilir shiçin findve bütün "nihai sonucu olarak görür -exec sh -c 'file $0 | grep -q text' {} \;" test.
  • Yukarıdaki testin true olarak dönmesi durumunda -printkomut yürütülür (yani test edilen dosyanın adı yazdırılır).

Bu eski olduğunu biliyorum ama ben de kullanarak find . -type f -size 1033caynı yanıt döndürecek eklemek istiyorum .
Brandon Benefield

8
find . -type f -readable -size 1033c ! -executable

Dosya boyutu cyerine kullandığımı unutmayın b. b512 baytlık bloklar içindir. cgerçek bayt içindir.


2
Sanmıyorum -readablevasıta insan tarafından okunabilir (ikili değil yani)
hhaamu

1
@hhaamu - doğru. Ancak, kullanıcının okuma hakkı olmayan dosyaları filtrelemek muhtemelen kötü değildir! Bir dosya insan tarafından okunabilir içeriğe sahip olup olmadığını belirlemek için, boru adları döndürdüğü findiçin file.
D_Bye

2

tüm yazdığım şuydu:

find -size 1033c ! -executable

ve dosyayı aldım. Görünüşe göre insanın okuyabileceği kısım seni atmaktı.


0
find . -readable -size 1033c \! -executable

-readable, dosyaların hesap tarafından okunabileceği anlamına gelir, bu da onları insan tarafından okunabilir yapmaz.
Anthon

0

Bence oyun için doğru sözdizimi:

file ./* 

Her dosyanın neden oluştuğunu listeleyen bir dönüş elde edersiniz. Haydut oyununda başarmaya çalıştığınız şey için gerçekten iyi çalıştı. Bu görev için gerçek eğri topu her dosyanın - (tire) ile başlamasıdır.


Bu komuta böyle bir kısa çizgi ekleyerek bunu geliştirebilirsiniz file ./-*.
ConstantFun

0

Bence bu 3 koşulu da kapsayacak en iyi gerçek cevap

find inhere/ -type f -size 1033c ! -executable |xargs file | grep text

Ama birçok insanın söylediği gibi, yürütülebilir ve okunabilir insanlar bizi

find inhere/ -type f -size 1033c 

yeterli!

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.