UNIX कमांड - खोजें


9

मैं UNIX कमांड सीखने की कोशिश कर रहा हूं और सीखने के लिए मैं यह गेम खेल रहा हूं और मैं इस समय वास्तव में फंस गया हूं। मैं ssh के माध्यम से सर्वर में हूं और निर्देशिका यादृच्छिक फ़ाइलों और फ़ोल्डरों से भरी है और अगले स्तर के लिए पासवर्ड फ़ाइलों में से एक के अंदर है। मुझे बताया गया है कि फ़ाइल में निम्नलिखित एट्रिब्यूट्स हैं:

  • मानव पठनीय
  • 1033 बाइट्स
  • गैर निष्पादन

मैं अनुमान लगा रहा हूं कि मुझे findकमांड का उपयोग करना चाहिए और मैंने कोशिश की find ! -executableलेकिन उसने फाइलों का एक भार लौटा दिया। एकमात्र मानव-पठनीय मदद जो मुझे मैनुअल या ऑनलाइन मिल सकती है, वह मानव पठनीय में फ़ाइल साइज़ को प्रिंट कर रहा है। तो मैं वहाँ खो गया हूँ?

इसके अलावा मैंने कोशिश की find ~ -size 1033bलेकिन वह कुछ नहीं लौटा। लेकिन जब मैंने कोशिश की तो find ~ -size -1033bयह निर्देशिका में हर फाइल को वापस कर दिया।


मैं वास्तव में इस खेल के बारे में अधिक जानना चाहूंगा!
ivanivan

2
@ivanivan bandit.overthewire.org
avgvstvs

जवाबों:


16

मानव-पठनीय फ़ाइल नामों को फ़िल्टर करने के लिए, आप [:print:]( प्रिंट करने योग्य ) वर्ण वर्ग के नाम का उपयोग कर सकते हैं । आपको मैनुअल में ऐसी कक्षाओं के बारे में अधिक जानकारी मिलेगी grep

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

एक दूसरे विचार पर, "मानव-पठनीय" आवश्यकता फ़ाइल नाम के बजाय, फ़ाइल की सामग्री को संदर्भित कर सकती है। दूसरे शब्दों में, आप पाठ फ़ाइलों को खोज रहे होंगे । वह थोड़ा और मुश्किल है। जैसा कि @D_Bye ने एक टिप्पणी में सुझाव दिया है, आपको तब fileफ़ाइल सामग्री प्रकार निर्धारित करने के लिए कमांड का उपयोग करना चाहिए । लेकिन यह fileएक पाइप के बाद चलाने के लिए एक अच्छा विचार नहीं होगा , क्योंकि यह फ़ाइल के नाम को प्रदर्शित करने के कार्य को जटिल करेगा। यहाँ मेरा सुझाव है:

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

यह संक्षेप में है कि कैसे file-पार्ट काम करता है:

  • -execविधेय कार्यान्वित sh -c 'file -b $0 | grep -q text' FILENAMEप्रत्येक के लिए FILENAMEकि संतुष्ट सभी पिछले शर्तों (प्रकार, आकार, गैर निष्पादन योग्य)।
  • उन फ़ाइलों में से प्रत्येक के लिए, एक शेल ( sh) इस संक्षिप्त स्क्रिप्ट को चलाता है :, फ़ाइल नाम के साथ file -b $0 | grep -q textबदल रहा है $0
  • fileकार्यक्रम प्रत्येक फ़ाइल की सामग्री प्रकार निर्धारित करता है और इस जानकारी को आउटपुट। -bविकल्प रोकता प्रत्येक परीक्षण किया फ़ाइल का नाम मुद्रण।
  • grepfileप्रोग्राम से आने वाले आउटपुट को फ़िल्टर करता है , "टेक्स्ट" वाली लाइनों की खोज करता है । (अपने लिए देखें, fileकमांड का एक सामान्य आउटपुट कैसा दिखता है।)
  • लेकिन grepफ़िल्टर्ड टेक्स्ट को आउटपुट नहीं करता है, क्योंकि इसमें -q(शांत) विकल्प दिया गया है। यह क्या करता है, बस इसकी निकास स्थिति को या तो बदल दें 0(जो "सही" का प्रतिनिधित्व करता है - फ़िल्टर किया गया पाठ पाया गया था) या 1 (जिसका अर्थ है "त्रुटि" - पाठ "पाठ" से आउटपुट में प्रकट नहीं हुआ था file)।
  • से आने वाली सच्ची / झूठी निकास स्थिति को और पूरी तरह से " " परीक्षण के अंतिम परिणाम के रूप में grepपारित किया shजाता है ।find-exec sh -c 'file $0 | grep -q text' {} \;
  • उपरोक्त परीक्षण सही होने पर , -printआदेश निष्पादित किया जाता है (अर्थात परीक्षण की गई फ़ाइल का नाम मुद्रित होता है)।

मुझे पता है कि यह पुराना है, लेकिन मैं यह जोड़ना चाहता हूं कि उपयोग करने find . -type f -size 1033cसे भी समान प्रतिक्रिया मिल जाएगी।
ब्रैंडन बेनिफिट

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

ध्यान दें कि मैंने फ़ाइल आकार के cबजाय उपयोग किया था bb512 बाइट ब्लॉक के लिए है। cवास्तविक बाइट्स के लिए है।


2
मुझे नहीं लगता -readableकि मानव-पठनीय (यानी बाइनरी नहीं)
हामामू

1
@ हहमु - सही। हालाँकि, फ़ाइलों को फ़िल्टर करना शायद बुरा नहीं है, जिसे उपयोगकर्ता के पास पढ़ने का कोई अधिकार नहीं है! निर्धारित करने के लिए अगर एक फ़ाइल मानव पठनीय सामग्री शामिल है में, पाइप नामों से लौटे findकरने के लिए file
D_Bye

2

मैंने जो लिखा था वह था:

find -size 1033c ! -executable

और फ़ाइल मिल गई। जाहिर है कि मानव पठनीय हिस्सा आपको फेंकना था।


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

अपठनीय का मतलब है कि फाइलों को खाते द्वारा पढ़ा जा सकता है, इससे उन्हें जरूरी नहीं कि मानव पठनीय हो।
एंथन

0

मुझे लगता है कि खेल के लिए सही सिंटैक्स है:

file ./* 

आपको एक रिटर्न मिलता है जो सूचीबद्ध करता है कि प्रत्येक फ़ाइल में क्या शामिल है। यह वास्तव में अच्छी तरह से काम करता है कि आप दस्यु खेल में क्या हासिल करना चाहते हैं। इस कार्य के लिए असली वक्र बॉल यह है कि प्रत्येक फ़ाइल के साथ शुरू होता है - (हाइफ़न)।


आप इस तरह उस आदेश में एक हाइफ़न जोड़कर इस पर सुधार कर सकते हैं file ./-*
कॉन्स्टैंटफुन

0

मुझे लगता है कि यह सबसे अच्छा वास्तविक उत्तर है जो सभी 3 स्थितियों को कवर करेगा

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

लेकिन जैसा कि कई लोगों ने कहा, निष्पादन योग्य और मानव पठनीय हमें फेंकना था, इसलिए उपयोग करना

find inhere/ -type f -size 1033c 

काफी है!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.