"Enter"a basıp içeriğe geçin

Linux Temel Komutlar 2

 

Önceki yazımda bahsettiğimiz linux temel komutlar konusunu daha gelişmiş kullanımlar ile inceleyeceğiz. Temel komutlar 1 yazısına tam hakim olmadan bu konuya geçmeyin.

linux komutlar

Meta Karakterler

Özel anlamlara gelen bazı karakterler vardır. Bunlara meta karakter denir.
* ve . birer meta karakterdir. argümanlarda öncesini ve sonrasını tamamlamayı sağlar.
isim* dersek sonrasını tamamlar. isim1, isim2, isim3 … tüm olası seçenekleri argüman olarak yollar

*isim dersek öncesini tamamlar (birinciisim, ikinciisim…),

*isim* dersek hem öncesini hem sonrasını tamamlar (yani içinde isim geçen her seçeneği argüman olarak sayar.

isim? : ? tek bir karakter tamamlar. yani isim1 isim2 vb  olabilir. Ama isim1233 olmaz. Yani soru işaretinin yerine tek bir karakter koyabildiği tüm seçenekleri getirir.

[] meta karakteri ile ? yerine belli seçenekler konabilir
[abc]* a b yada c ile başlayanlar demektir
yani [] arasındaki harflerden herhangi biri o yeri doldurabiliyorsa demektir
[0-9] 0dan 9a kadar olan sayılar demektir
[a-z] a ile z arasındaki harfler demektir.

^ değil demektir.
[^a]* dersek a ile başlamayanlar anlamı katar

Şu anda muhtemelen anlamsız geldi. Ama birazdan örneklerle açıklayacağız.

cat komutu

Temel konular 2 adında bir klasör oluşturdum ve içine farklı isimlerde dosyalar ekledim. Her bir dosyanın içinde aşağıda gözüktüğü gibi, hangi dosyanın içi olduğunu gösteren bir metin yazıyor. Bu dosyalar ve cat komutu ile az önce anlattığım meta karakterleri test edeceğiz.

linux komutlar

cat dene* : adı dene ile başlayan tüm dosyaları yazdırır
cat *me  : me ile biten tüm dosyaları yazdırır.
cat *em*  : içinde em geçen herşeyi yazar.

cat deneme? : başı deneme olan ve daha sonra sadece 1 harf olanları yazdırır.
cat deneme[1234] :deneme1 deneme2 deneme3 ve deneme4’ü yazdırır.
cat deneme[1-4]

 

cat [abc]*  : a b yada c ile başlayanların hepsini yazdırır.
cat *[e23]  : e 2 yada 3 ile bitenlerin hepsini yazdırır.
cat [^db]* : d yada b ile başlamayanların hepsini yazdırır.

cat -s : üstüste birden çok boş satır yani \n varsa, bunları teke indirir.
-n parametresi, satırların yanına satır numarasını da ekler
cat -b :  -b parametresiyle sadece dolu satırları numaralandırırız.

linux komutlar

Özel karakterler kullanarak tek bir dosyanın çıktısını da manipüle edebiliriz.

cat metin | grep ^den : satırın başında den olan satırları getirir
cat metin | grep eme$ : eme ile bitenleri listeler
cat metin | grep .den. :içinde den geçen bütün satırları listeler. ama sağında ve solunda en az 1 karakter olmalıdır.
Bu özel karakterleri bir arada da kullanabiliriz ör:
cat metin | grep ^d…e$ d ile başlayıp e ile bitenleri listeler // . sayısına dikkat

-v parametresi hariç demektir. cat metin | grep -v me2 içinde selam geçmeyen tüm satırları listeler.
-c parametresi, şartları sağlayan kaç satır olduğunu söyler.

cat metin | grep ^d…e$ komutunda kaç tane . kullanıldığı da önemlidir. Bu örnekte d ile e harfleri arasında 3 nokta yani 3 karakter var. Bu yüzden deneme dahil hiçbir şey yazmadı.

cat metin1 | grep ^d | grep e$   d ile başlayıp e ile bitenlerin hepsini yazdırır. Ancak bunda da büyük-küçük harf duyarlılığı var. Bu duyarlılığı kaldırmak için cat metin1 | grep ^[Dd] | grep [Ee]$ 

cat komutunda > ile yönlendirdiğimizde yanlışlıkla üstüne yazıp verileri kaybetme ihtimalimiz vardı.
Bunu engellemek için set -o noclobber komutunu kullanabiliriz. Böylece yanlışlıkla bir dosyanın içeriğini silmez

tac: içeriği aynı cat gibi ama tersten bastırır

Meta karakter kullanımını yeterince anlattığımı düşünüyorum. Diğer çoğu komutta da kullanımları aynıdır.

cp komutu

cp dosya* : adı dosya ile başlayan tüm dosyaları kopyalar.

ls komutu

ls *dos : adı dos ile başlayan tüm dizinlerin içini listeler
ls ~ : home klasörünün içeriğini listeler
ls deneme : deneme varsa gösterir
ls d?ne?e : bazı harflerini bilmiyosak kullanırız
ls -l [ad]* : a yada d ile başlayanları listeler
ls -l *[ad] : a yada d ile bitenleri listeler

echo komutu

{} işareti sayesinde, echo dahil pek çok komutta kombinasyonlar oluşturabiliriz.

echo deneme{1,2,3} dersek deneme1 deneme2 deneme3 yazar. Yani deneme ile başlar ve parantez içindeki tüm olasılıkları dener.
Eğer denemeden sonra boşluk bırakmasını istiyorsak echo deneme{\ 1,\ 2,\ 3} yada echo deneme\ {1,2,3} şeklinde kullanmalıyız. Boşluk bir escape karakter olduğundan başına \ geldi

echo {1,2,3,par}dus : 1dus 2dus 3dus pardus yazar
echo deneme{1..10} dersek deneme1 deneme2 deneme3 … deneme10 yani 1den 10a kadar yazar.
echo deneme{1..50..3} dersek 1’den 50’e kadar 3’er artarak yazar deneme1 deneme4 deneme7…
echo {1,2,3}{a,b,c} diyerek permutasyon da yapabiliriz.
echo $((4+2)) : işlemin sonucunu yani 6 basar
echo $SHELL : shell konumunu bastırır

history : daha önce yazılan komutları ekrana basar ve her komut için bir numara verir.
diyelim 300 olsun. !300 diyerek aynı komutu tekrarlayabiliriz. Uzun komutlarda kullanışlıdır.

 

touch komutu

touch dosya{1..5} : dosya1 dosya2 dosya3 dosya4 dosya5 adında 5 tane dosya oluşturur
touch dosya{1..5}{a..e} : permutasyon yapar.
touch -d “31 July 2001” deneme : dosya ile ilgili tüm zamanları düzenler
touch -c deneme : tüm zamanları şuanki zaman yapar
touch -m deneme :sadece değiştirilme zamanını şuanki zaman yapar, erişim zamanını korur
touch -a deneme :sadece erişim zamanını değiştirir. Değiştirme zamanını korur

mkdir

mkdir dizin{1..5}   5 tane dizin oluşturur.

Komut birleştirme

; karakteri ile aynı satırda iki komut çalıştırabiliriz
echo Hello > deneme;cat deneme

Daha önce | sembolünün iki komudu birleştirdiğini görmüştük, ancak bu output her zaman inputun kabul ettiği bir arguman olmayabilir. Mesela buna şöyle bir örnek verebiliriz.
ls | tar cvf arşiv.tar : Burada beklediğimiz şey, o dizindeki her şeyi listeleyecek, ardından da arşive ekleyecek. Ancak bu komut çalışmaz, çünkü ls komutunun çıktısı, tar komutunun girdisi olmaya uygun bir argüman değil. Bu durumda xargs komutunu kullanmalıyız.

xargs

Bu komut, | ile birleştirilen komutlarda outputun inputa uyumlu olmasını sağlar.
ls | xargs tar cvf arşiv.tar : Bu sefer oldu. xargs komutu, ls’in çıktısını tar’ın kabul edebileceği bir hale çevirdi.

xargs komutunun birçok kullanım alanı var. örneğin touch komutu da cat yada ls gibi komutların outputlarını input olarak almaz.
elimizde liste adında bir dosya olsun. Ve içinde dosya1 dosya2 dosya3 yazsın. Bizde cat ile Liste dosyasını okuyalım ve listenin içindeki isimleri kullanarak touch ile dosyalar oluşturalım
cat Liste | touch : cat komutunun çıktısı, touch komutunun girdisi ile uyumlu değil. xargs kullanmalıyız
cat Liste |xargs touch : dosya1 dosya2 dosya3 adında 3 tane dosya başarıyla oluşturuldu.

Arama komutları

find /home -name “den*” : den ile başlayan tüm dosya ve dizinleri bulur.
find /home -name “*en*” : içinde en geçen tüm dosya ve dizinleri bulur.
find /home | grep bu : adında bu geçen tüm dosya ve dizinleri bulur.
find /home -type f name dosya1 : sadece dosyaları (file) bulur.
find /home -type d name dosya1 : sadece dizinleri bulur (directory)
find /home -type f -size 5M : boyutu 5mb’den büyük dosyaları bulur.
find /home -type f | cat > bulunanlar : tüm dosyaları bulur ve bulunanlar isimli dosyaya yazar.
find /home -type f -name “*.txt” | xargs tar cvf text.tar : tüm metin dosyalarını bulur ve arşivler
xargs komutu sayesinde, find komutunun çıktısı tar komutunun girdisi oldu.

 

    Bir cevap yazın

    E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir