Hexter

Mac पर एक SQLite डेटाबेस फ़ाइल कैसे देखें

आपको अपने Mac पर कहीं एक .sqlite, .db, या .sqlite3 फ़ाइल मिली, किसी ऐप के support फ़ोल्डर में, किसी backup में, किसी project में जिसे आप debug कर रहे हैं, और आप जानना चाहते हैं कि उसमें वास्तव में क्या है। डबल-क्लिक करने से कुछ उपयोगी नहीं होता। Quick Look आपको एक खाली पूर्वावलोकन या टूटा हुआ text दिखाता है। आपको एक असली SQLite फ़ाइल व्यूअर चाहिए, और यह स्पष्ट नहीं है कि कौन सा उपकरण उठाएँ।

आप इसे एक सामान्य फ़ाइल की तरह क्यों नहीं खोल सकते

SQLite डेटाबेस binary फ़ाइलें हैं, text नहीं। पहले 100 bytes एक निश्चित header होते हैं: एक magic string जो SQLite format 3 पढ़ती है, जिसके बाद page size, text encoding, और एक schema cookie जैसे fields आते हैं जो हर बार table संरचना बदलने पर बदलता है। उस header के बाद असली page data आता है, जो एक b-tree के रूप में व्यवस्थित होता है, यही वजह है कि एक text एडिटर इसे शोर के रूप में render करता है।

Finder का Quick Look इसमें से कुछ भी parse नहीं करता। TextEdit इसे सादे text के रूप में व्याख्यायित करता है और आपको ज़्यादातर अपठनीय अक्षर दिखाता है जिनके बीच कुछ पहचाने जाने योग्य strings मिली होती हैं (table नाम, column नाम, और tables में संग्रहीत कोई भी text data बचे रहते हैं क्योंकि SQLite strings को काफ़ी हद तक जैसे-का-तैसा संग्रहीत करता है)। इनमें से कुछ भी आपको नहीं बताता कि फ़ाइल वास्तव में मान्य है या नहीं, यह किस page size के साथ बनाई गई थी, या कोई दूसरा ऐप इसे खोलने से इनकार क्यों कर रहा है।

भीतर देखने के आपके विकल्प

sqlite3 कमांड लाइन उपकरण। macOS Terminal में sqlite3 के साथ आता है। sqlite3 yourfile.db ".schema" चलाएँ और आपको table परिभाषाएँ मिलेंगी, या एक त्वरित सूची के लिए .tables। यह अच्छी तरह काम करता है अगर आप पहले से जानते हैं कि यह एक मान्य डेटाबेस है और आप उससे query करना चाहते हैं। यह कम उपयोगी है अगर आप शुरू में यह सुनिश्चित नहीं हैं कि फ़ाइल मान्य है, क्योंकि एक दूषित header बस एक गूढ़ error देता है जिसमें यह विवरण नहीं होता कि क्या गलत है।

DB Browser for SQLite। यह सही उपकरण है अगर आपका असली लक्ष्य table rows browse करना, data संपादित करना, या SQL queries चलाना है। यह मुफ़्त है, अच्छी तरह अनुरक्षित है, और विशेष रूप से उसी काम के लिए बना है। अगर आपको tables के अंदर के data की पड़ताल करनी है, तो इसे पढ़ना बंद करें और DB Browser ले आएँ।

SQLite जागरूकता वाला एक hex एडिटर। यह एक अलग सवाल के लिए विकल्प है: “tables में क्या है” नहीं बल्कि “यह फ़ाइल वास्तव में क्या है।” यही वह खाई है जिसे Hexter भरता है। फ़ाइल खोलें और यह डिफ़ॉल्ट रूप से read-only पढ़ता है, इसलिए आप बस देखकर फ़ाइल को जोखिम में नहीं डाल रहे। Analyze टैब SQLite header को देखते ही पहचान लेता है और fields को अलग कर देता है, page size, encoding, schema cookie, कच्चे hex के साथ, ताकि आप पुष्टि कर सकें कि फ़ाइल वास्तव में SQLite है, जाँच सकें कि यह किस page size के साथ बनाई गई थी, या एक ऐसा header पकड़ सकें जो किसी ऐसी चीज़ को सौंपने से पहले कट गया है या overwrite हो गया है जो एक साफ़ डेटाबेस की उम्मीद करती है।

एक SQLite फ़ाइल के पहले 100 bytes को header fields में बाँटता आरेख: magic string, page size, encoding, और schema cookie, Hexter द्वारा दिखाई गई कच्ची hex bytes के बगल में।
किसी भी SQLite फ़ाइल के पहले 100 bytes एक निश्चित header होते हैं। Hexter इसे सीधे कच्ची bytes से पढ़ता है।

कब कच्ची-bytes वाला दृश्य वास्तव में मायने रखता है

कुछ स्थितियाँ जहाँ header को सीधे देखना, केवल query परिणाम नहीं, समय बचाता है:

  • एक फ़ाइल आपके ऐप में नहीं खुलती, और आप सुनिश्चित नहीं हैं कि यह वास्तव में SQLite है। कुछ ऐप्स .db extension वाली फ़ाइलें लिखते हैं जो बिल्कुल भी SQLite नहीं होतीं। पहले 16 bytes में SQLite format 3 magic string की जाँच करना इसका जवाब सेकंडों में देता है।
  • आप एक sync या backup pipeline को debug कर रहे हैं और आपको संदेह है कि कोई फ़ाइल पारगमन में कट गई या दूषित हो गई। एक ऐसा header जो छोटा कट गया है, या एक page size field जो फ़ाइल के असली आकार से मेल नहीं खाता, एक तेज़ निदान है।
  • आप एक डेटाबेस का text encoding पुष्टि करना चाहते हैं (UTF-8 बनाम UTF-16) उसे पढ़ने वाला कोड लिखने से पहले, बस एक सवाल पूछने के लिए एक पूरी database library शुरू किए बिना।
  • आप एक ऐप के local storage को reverse-engineer कर रहे हैं और यह तय करने से पहले कि क्या इसके खिलाफ़ एक उचित SQL query लिखना सार्थक है, ठीक-ठीक देखना चाहते हैं कि disk पर क्या है।

इसे कैसे करें

  1. .sqlite या .db फ़ाइल को Hexter में खोलें। यह read-only खुलती है, इसलिए एक ऐसे डेटाबेस को गलती से बदलने का कोई जोखिम नहीं है जिसे आपको बरकरार चाहिए।
  2. Inspector साइडबार खोलें और Analyze टैब पर जाएँ।
  3. Hexter SQLite header को अपने आप पहचान लेता है और आपको parse किए गए fields उन byte offsets के बगल में दिखाता है जिनसे वे आए।
  4. अगर आपको किसी विशिष्ट field को नज़दीक से देखना है, जैसे page size या schema cookie, तो उन bytes को hex ग्रिड में चुनें और Inspector आपको सीधे numeric व्याख्या दिखाता है।

अगर उसके बाद आपको वास्तव में tables से query करने की ज़रूरत है, तो वहाँ आप sqlite3 या DB Browser पर चले जाते हैं। वे उस काम के लिए सही उपकरण हैं। Hexter उससे पहले के दस सेकंड के लिए है, जब आपको बस यह जानना होता है कि आप क्या देख रहे हैं।

Hexter एक native macOS hex एडिटर है जो ठीक इसी तरह की फ़ाइल निरीक्षण को डिफ़ॉल्ट रूप से सुरक्षित बनाने के लिए बना है: जब तक आप स्पष्ट रूप से संपादन सक्षम न करें तब तक read-only, SQLite, PNG, ZIP, Mach-O, और WAV फ़ाइलों के लिए अंतर्निहित संरचना parsing के साथ।