Linux'ta Komut Dizileri Nasıl Kullanılır
Yayınlanan: 2022-01-29 Bir ikili dosya veya veri dosyası içindeki metni görmek ister misiniz? Linux strings
komutu, "dizeler" adı verilen metin parçalarını sizin için dışarı çeker.
Linux, sorun arayışında çözüm gibi görünebilecek komutlarla doludur. strings
komutu kesinlikle o kampa giriyor. Sadece amacı nedir? Bir ikili dosyadan yazdırılabilir dizeleri listeleyen bir komutun bir anlamı var mı?
Bir adım geriye gidelim. Program dosyaları gibi ikili dosyalar, insan tarafından okunabilen metin dizeleri içerebilir. Ama onları nasıl göreceksin? cat
veya less
kullanırsanız, asılı bir terminal penceresiyle karşılaşmanız olasıdır. Metin dosyalarıyla çalışmak üzere tasarlanmış programlar, bunların içinden yazdırılamayan karakterler beslenirse iyi bir şekilde başa çıkamazlar.
Bir ikili dosyadaki baytların çoğu insan tarafından okunamaz ve herhangi bir anlam ifade edecek şekilde terminal penceresine yazdırılamaz. Alfasayısal karakterlere, noktalama işaretlerine veya boşluklara karşılık gelmeyen ikili değerleri temsil edecek hiçbir karakter veya standart sembol yoktur. Bunlar toplu olarak "yazdırılabilir" karakterler olarak bilinir. Geri kalanlar “yazdırılamayan” karakterlerdir.
Bu nedenle, metin dizeleri için bir ikili dosya veya veri dosyasında görüntülemeye veya arama yapmaya çalışmak bir sorundur. İşte burada strings
girer. Dosyalardan yazdırılabilir karakter dizilerini çıkarır, böylece diğer komutlar yazdırılamayan karakterlerle uğraşmak zorunda kalmadan dizeleri kullanabilir.
dizeleri kullanma Komut
strings
komutunda karmaşık bir şey yoktur ve temel kullanımı çok basittir. strings
aramasını istediğimiz dosyanın adını komut satırında veriyoruz.
Burada, "jibber" adı verilen bir ikili dosyada (çalıştırılabilir bir dosyada) dizeleri kullanacağız. strings
, bir boşluk, "jibber" yazıp Enter'a basıyoruz.
dizeler gevezelik
Dizeler dosyadan çıkarılır ve terminal penceresinde listelenir.
Minimum Dizi Uzunluğunu Ayarlama
Varsayılan olarak, dizeler dört karakter veya daha uzun olan dizeleri arayacaktır. Daha uzun veya daha kısa bir minimum uzunluk ayarlamak için -n
(minimum uzunluk) seçeneğini kullanın.
Minimum uzunluk ne kadar kısa olursa, daha fazla önemsiz görme şansınızın o kadar yüksek olduğunu unutmayın.
Bazı ikili değerler, yazdırılabilir bir karakteri temsil eden değerle aynı sayısal değere sahiptir. Bu sayısal değerlerden ikisi dosyada yan yana olursa ve minimum iki uzunluk belirtirseniz, bu baytlar bir dizeymiş gibi rapor edilir.
strings
minimum uzunluk olarak iki kullanmalarını istemek için aşağıdaki komutu kullanın.
dizeler -n 2 jibber
Artık sonuçlara dahil edilen iki harfli dizilerimiz var. Boşlukların yazdırılabilir bir karakter olarak sayıldığını unutmayın.
Daha Az Geçişli Boru Hatları
strings
gelen çıktının uzunluğu nedeniyle, onu less
aracılığıyla aktaracağız. Daha sonra ilgilenilen metni arayan dosyada gezinebiliriz.
ipler jibber | az
Liste artık bizim için less
olarak sunuluyor ve listenin üst kısmı ilk önce görüntüleniyor.
Nesne Dosyaları ile dizeleri kullanma
Tipik olarak, program kaynak kodu dosyaları, nesne dosyalarına derlenir. Bunlar, ikili yürütülebilir bir dosya oluşturmak için kitaplık dosyalarıyla bağlantılıdır. Elimizde jibber nesne dosyası var, o yüzden o dosyanın içine bir göz atalım. “.o” dosya uzantısına dikkat edin.
jibber.o | az
Sekiz karakterden uzunlarsa, ilk dize kümesinin tümü sekizinci sütuna sarılır. Sarılmışlarsa, dokuzuncu sütunda bir "H" karakteri vardır. Bu dizeleri SQL ifadeleri olarak tanıyabilirsiniz.
Çıktıyı kaydırmak, bu biçimlendirmenin dosya boyunca kullanılmadığını ortaya çıkarır.
Nesne dosyası ile tamamlanmış yürütülebilir dosya arasındaki metin dizilerindeki farklılıkları görmek ilginçtir.
Dosyada Belirli Alanlarda Arama Yapma
Derlenmiş programların kendi içlerinde metin depolamak için kullanılan farklı alanları vardır. Varsayılan olarak, strings
metin arayan tüm dosyayı arar. Bu, -a
(tümü) seçeneğini kullanmış gibisiniz. Dizelerin yalnızca dosyada başlatılmış, yüklenmiş veri bölümlerinde arama yapmasını sağlamak için -d
(veri) seçeneğini kullanın.
dizeler -d jibber | az
İyi bir nedeniniz yoksa, varsayılan ayarı kullanabilir ve tüm dosyayı arayabilirsiniz.
Dize Ofsetini Yazdırma
strings
, her bir dizenin bulunduğu dosyanın başlangıcından itibaren ofseti yazdırmasını sağlayabiliriz. Bunu yapmak için -o
(ofset) seçeneğini kullanın.
dizeler -o parse_phrases | az
Ofset Octal cinsinden verilir.
Ofsetin ondalık veya onaltılık gibi farklı bir sayısal tabanda görüntülenmesini sağlamak için -t
(radix) seçeneğini kullanın. Taban seçeneğinin ardından d
(ondalık), x
(onaltılık) veya o
(Sekizlik) gelmelidir. -to
kullanmak, -o
kullanmakla aynıdır.
dizeler -td parse_phrases | az
Ofsetler artık ondalık olarak yazdırılır.
dizeler -tx parse_phrases | az
Ofsetler artık onaltılı olarak yazdırılır.
Boşluk dahil
strings
, sekme ve boşluk karakterlerini bulduğu dizelerin parçası olarak kabul eder. Yeni satırlar ve satır başları gibi diğer boşluk karakterleri, dizelerin parçasıymış gibi değerlendirilmez. -w
(boşluk) seçeneği, dizelerin tüm boşluk karakterlerine dizenin parçalarıymış gibi davranmasına neden olur.
dizeler -w add_data | az
İkinci satırın sonundaki (görünmez) satır başı ve yeni satır karakterlerinin bir sonucu olan boş satırı çıktıda görebiliriz.
Dosyalarla Sınırlı Değiliz
strings
, bir bayt akışı olan veya üretebilen herhangi bir şeyle kullanabiliriz.
Bu komut ile bilgisayarımızın rasgele erişim belleğine (RAM) bakabiliriz.
/dev/mem'e eriştiğimiz için sudo
kullanmamız gerekiyor. Bu, bilgisayarınızın ana belleğinin bir görüntüsünü tutan bir karakter aygıt dosyasıdır.
sudo dizeleri /dev/mem | az
Liste, RAM'inizin tüm içeriği değildir. Sadece ondan çıkarılabilen dizelerdir.
İLGİLİ: Linux'ta "Her Şey Bir Dosyadır" Ne Demektir?
Aynı Anda Birçok Dosyayı Arama
Joker karakterler, aranacak dosya gruplarını seçmek için kullanılabilir. *
karakteri birden çok karakteri temsil eder ve ?
karakter herhangi bir tek karakteri temsil eder. Komut satırında birçok dosya adı sağlamayı da seçebilirsiniz.
Bir joker karakter kullanacağız ve /bin dizinindeki tüm yürütülebilir dosyaları arayacağız. Listeleme birçok dosyanın sonuçlarını içereceğinden, -f
(dosya adı) seçeneğini kullanacağız. Bu, her satırın başında dosya adını yazdıracaktır. Daha sonra her bir dizenin hangi dosyada bulunduğunu görebiliriz.
Sonuçları grep aracılığıyla aktarıyoruz ve "Telif hakkı" kelimesini içeren dizeleri arıyoruz.
diziler -f /bin/* | grep Telif hakkı
/bin dizinindeki her dosya için her satırın başında dosyanın adıyla birlikte telif hakkı bildirimlerinin düzgün bir listesini alırız.
çözülmüş dizeler
Dizelerin gizemi yoktur; tipik bir Linux komutudur. Çok spesifik bir şey yapar ve bunu çok iyi yapar.
Bu, Linux'un diğer bir çarkıdır ve diğer komutlarla çalışırken gerçekten canlanır. İkili dosyalar ve grep
gibi diğer araçlar arasında nasıl oturduğunu gördüğünüzde, bu biraz belirsiz komutun işlevselliğini takdir etmeye başlarsınız.
Linux Komutları | ||
Dosyalar | tar · pv · kedi · tac · chmod · grep · diff · sed · ar · adam · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · birleştirme · jq · katlama · uniq · dergictl · kuyruk · stat · ls · fstab · yankı · daha az · chgrp · chown · rev · bak · diziler · tür · yeniden adlandır · zip · unzip · mount · umount · yükle · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · yama · dönüştürmek · rclone · parçalamak · srm | |
süreçler | takma ad · ekran · üst · güzel · renice · ilerleme · strace · systemd · tmux · chsh · geçmiş · at · toplu · ücretsiz · hangi · dmesg · chfn · usermod · ps · chroot · xargs · tty · pembemsi · lsof · vmstat · zaman aşımı · duvar · evet · öldür · uyku · sudo · su · zaman · groupadd · usermod · gruplar · lshw · kapatma · yeniden başlatma · durdurma · güç kapatma · passwd · lscpu · crontab · tarih · bg · fg | |
ağ | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · kazmak · parmak · nmap · ftp · curl · wget · kim · whoami · w · iptables · ssh-keygen · ufw |
İLGİLİ: Geliştiriciler ve Meraklılar için En İyi Linux Dizüstü Bilgisayarlar