Temel Linux öğrenme notlarım — 5

Semih Saydam
8 min readSep 28, 2022

--

Merhaba,

Önceki yazımızda Dosya işlemleri için komutlarımızı inceledik. Bu yazımıza ise dosya arşiv işlemleri ile başlıyor olacağız. Ardından önemli bir konu olan erişim yetkilerini inceleyeceğiz. Hadi başlayalım 😃

Burada dosya arşivleme, dosya sıkıştırma ve sıkıştırılmış dosyaları açma işlemleri yapacağız. Arşivleme işlemi yüksek boyutlu dosyaların küçültülmesi veya veri kaybı olmadan güvenli transfer amacıyla kullanılıyor. Daha çok .zip uzantılı arşivleri tanıyorsunuzdur ama illa ki tar.gz uzantılı dosyaları da görmüşsünüzdür. “tar”, tape archive’in kısaltmasıdır.

tar : bu komut dosyaları arşivlememize yarar. tar -cf dosyalar.tar yeni* komutu ile aşağıda sol tarafta gördüğünüz 4 dosyayı arşivliyoruz. Komuttaki “-c” parametresi create anlamındadır ve arşiv oluşturacağımızı belirtir. “f” ise oluşturulan arşivin içine dosyaları atacağımızı belirtir. “dosyalar.tar” ifadesiyle arşive isim veriyoruz ve son olarak da “yeni*” ifadesiyle yeni ile başlayan her şeyi arşivle demiş oluyoruz.

Ardından sağ tarafta, öncelikle rm yeni* komutuyla yeni ile başlayan tüm dosyaları siliyoruz(arşivlediklerimizi çıkarabildiğimizi görebilmek için). tar -xf dosyalar.tar komutu ile de arşivi dışarı ayıklıyoruz, zaten buradaki “-x” parametresi de extract(ayıklamak) anlamına gelmektedir.

  • Burada herhangi bir konum belirtmediğimiz için terminalin o an çalıştığı konum olan Masaüstüne çıkardı. Eğer siz farklı bir konuma çıkarmak isterseniz “-C” parametresiyle tar -xf dosyalar.tar -C <path> şeklinde path verebilirsiniz, örneğin tar -xf dosyalar.tar -C / ile masaüstündeki bu tar arşivini root (“ / ”) konumuna çıkarabiliriz.
  • Dosyayı dışarı ayıklamadan içeriğini okumak istersek tar -tf dosyalar.tar şeklinde bir komut yazabiliriz, burada “-t” parametresi table of content(içindekiler tablosu) anlamındadır.
  • Var olan arşivinize yeni bir dosya eklemek isterseniz, tar -rf dosyalar.tar <dosya_ismi> şeklinde “-r” parametresiyle ekleyebilirsiniz. Bu işlemleri yaparken, yaptığınız işlemleri ayrıntılı bir biçimde takip etmek isterseniz “-v” parametresini kullanabiliriz. “-v” parametresi verbose(ayrıntılı)’dan gelir ve bunu çoğu yerde görüyor olacağız (ör: curl). tar -rvf dosyalar.tar <dosya_ismi> şeklinde yazarak verbose ile eklenen dosyanın bize bildirilmesini sağladık, çoklu eklemelerde kontrol amaçlı bu parametreyi kullanabiliriz. Yani -v parametresiyle yaptığımız işlemleri takip edebiliriz.

gzip/ bzip2 : Önceki kısımda tar ile arşiv içine aldık fakat bir sıkıştırma işlemi uygulamamıştık. gzip ve bzip2 araçlarını bu sıkıştırma işlemlerini yapmak için kullanacağız.

gzip ile sıkıştırma yapmak için <gzip> dosya_adi şeklinde komut giriyoruz ve ardından dosya_adi.gz şeklinde sıkıştırılmış dosya elde ediyoruz. Sıkıştırılmış dosyayı eski haline getirmek için de “-d” parametresi kullanıyoruz gzip -d dosya_adi.gz şeklinde.

bzip2 dosya_adi şeklinde de bzip ile sıkıştırma yapıyoruz ve ardından dosya_adi.bz2 şeklinde sıkıştırılmış dosya elde ediyoruz. Yine dosyayı açmak için bzip2 -d dosya_adi.bz2 şeklinde “-d” parametresini kullanıyoruz.

Hem arşivleme hem de sıkıştırmayı öğrendik, şimdi ikisini birlikte nasıl yaparız? Bu tar.gz sıkıştırılmış arşiv dosyaları nasıl oluşuyor? Görelim :

tar -czvf dosya_adi.tar.gz yeni* Burada aşağıda gördüğünüz gibi parametrelerimizi -czvf şeklinde giriyoruz :

Bu parametrelerden “-z” bizim için yeni ve bu parametre sayesinde sıkıştırmayı yapıyoruz, tar da bildiğiniz üzere arşivlemeyi hallediyor ve ortaya tar.gz sıkıştırılmış arşivimiz çıkıyor. Bu dosyaları arşivden çıkarmak için zaten bildiğiniz “-x” parametresini kullanarak tar -xzvf deneme.tar.gz -C çıkaracağın_pathşeklinde komutumuzu girebiliriz, spesifik bir yere çıkarmayacaksan “-C” parametresini girmeden devam edebilirsin, girmezsen “.” alanına yani olduğun path’e çıkaracaktır.

tar -cjvf dosya_adi.tar.bz2 yeni* şeklinde de bzip2 aracını kullanıp, “-j” parametresi ve tar.bz2 uzantılı olarak komutu işletebiliriz. Sıkıştırılmış arşivi açmak için yine “-x” parametresini kullanabiliriz.

zcat | bzcat/ zgrep | bzgrep : Daha önce terminal üzerinden cat ile dosyaların içeriğini okumuş, grep ile de dosya içerikleriyle ilgili filtrelemeler yapmıştık. Şimdi bu komutları sıkıştırmış olduğumuz arşiv dosyaları üzerinde işleteceğiz, bunun için zcat / zgrep komutlarını öğreneceğiz.

Gördüğünüz üzere cat ile içeriğini görüntüleyebildiğimiz dosyayı gzip ile sıkıştırdıktan sonra tekrar cat ile içeriğini göremedik. Burada zcat komutunu kullanarak sıkıştırılmış dosyanın içeriğini okuyabildik. Aynı durum tahmin edebileceğiniz gibi bzip2 için de geçerlidir, bzip2ile sıkıştırılmış dosyanın içeriğini da bzcat komutu ile okuyabiliyoruz.

grep komutu ile de dosyalarımız üzerinde filtreleme yapabiliyorduk fakat tahmin edebileceğiniz gibi eğer dosyaları sıkıştırırsanız bu filtreleme için yine yeni komutlara ihtiyacımız olacak :

Burada da yukarıdakine benzer şekilde, grep komutunu sıkıştırılmış dosyalar için işletebilmek için zgrep ve bzgrep komutlarını kullanıyoruz.

zip / unzip : Son olarak sizlere daha tanıdık gelebilecek, zip dosyalarını nasıl oluşturabileceğimize/açabileceğimize bakalım :

zip <oluşturulacak zip ismi> <içine eklenecek dosya> şeklinde dosyamızı sıkıştırabiliyoruz ve burada size yüzde ne kadar sıkıştırdığını veriyor. Bu dosyayı dışarı çıkarmak için de :

unzip <açılacak zip ismi> şeklinde zip’i açıyoruz. Burada dikkat etmeniz gereken şey, gzip gibi sıkıştırmalarda dosyayı kesip .gz dosyası içine alıyordu fakat zip dosyayı kopyalayıp .zip içine alıyor. Yani dosyanız sıkıştırılıyor ama o konumda var olmaya devam ediyor, bu sebeple de yukarıda bize çıkarılacak dosyanın dışarıda zaten var olduğunu, hangi işlemi yapmamız gerektiğini soruyor :)

Şimdi önemli bir konu olan “Erişim yetkileri”ni anlamaya çalışacağız. Linux yapısı gereği güvenlik açısından dosya/dizinlere ait birçok yetkilendirme ve kısıtlama ayarları vardır. Bizim başından beri kullandığımız “root” kullanıcısı bu yetkilerin hepsine sahip “super user”dır.

Temel olarak kullanıcılar dosya/dizinlerle ilgili okuma, yazma ve çalıştırma eylemlerini gerçekleştirebilir.

  • Okuma(read[r]) : Klasör listesini ve dosya içeriğini görüntüleme.
  • Yazma(write[w]) : Dosya veya klasör üzerinde değişiklik yapma.
  • Çalıştırma(execute[x]) : Hedef dosyayı çalıştırma veya klasör içerisine erişme.

Yukarıdaki fotoğrafta da gösterdiğimiz gibi, Örneğin ls -l yazdığınızda drwxr-xr-x gibi bir çıktı geliyorsa

burada [d]:dizin olduğunu belirtir, ilk kısımdaki [rwx] dosyayı oluşturan kişinin yetkileridir, read write ve execute yetkileri var(rwx). ikinci kısım [r-x] dosyayı oluşturan kişiyle aynı grupta yer alan kişinin yetkileridir, read var write yok(-) ve execute yetkisi vardır(r-x). Son kısım ise [r-x] diğer kullanıcıların(dosyayı oluşturmamış veya oluşturanla aynı grupta değil) yetkileridir, okuyabilir ve çalıştırabilir(r-x). “-” işareti o yetkinin olmadığıdır örneğin, rwx hepsini yapabilenken r-- sadece okur, yazamaz ve çalıştıramaz. Daha önce chmod komutunu kullanarak bir dosyaya executable yetkisi(x) verdiğimizi hatırlarsınız :) Yani anlayacağınız buradaki erişim yetkilerini değiştirebiliyoruz, hadi inceleyelim :

chmod : Change mode’un kısaltması olup, aşağıdaki parametrelerden de anlayabileceğiniz gibi :

Kullanıcılar için erişim yetkilerini düzenlememize yarar. Şimdi bir dosyanın tüm yetkilerini sildim ve sizlerle beraber bu dosyayı kullanıcılar için yetkilendirelim(yetkiler ekleyelim) :

Öncelikle dosyamıza chmod u+x <dosya_adi> şeklinde dosyayı oluşturan kullanıcının çalıştırabileceğini yetkisini veriyoruz. Ardından g+rw ile dosyayı oluşturan kişiyle aynı grupta olan kişilerin(bunu açıklayacağız ileride) dosyayı okuyabileceğini ve yazabileceğinin yetkisini veriyoruz. Ardından o+rwx ile diğer kullanılara okuma, yazma ve çalıştırma yetkisi veriyoruz. En son olarak, tüm kullanıcıların yetkilerini tek seferde vermek için a+rwx şeklinde yetkilendirme yapabildiğimizi görüyoruz.

Yetkileri eksiltmek için ise yukarıdaki mantığın tamamı işliyor. Yani herkesteki yetkileri almak istersen örneğin a-rwx yapıyoruz gibi. Örneğin dosyayı oluşturan kişiden read-write yetkilerini almak istersek, u-rw şeklinde chmod komutunu kullanabiliriz.

Eğer siz ekleme ve çıkarma yapmadan direkt o yetkiyi vermek isterseniz, bunun için = i kullanabiliriz. Örneğin :

a=x ile tüm kullanıcılara dosyayı çalıştırma yetkisi ver, demiş oluyoruz. Burada mesela -rwxrwxrwx yetkilerini yukarıdaki gibi ---x--x--x yapmak için tüm kullanıcılardan rw yetkilerini çıkarmanız gerekirdi (a-rw ) bunun yerine daha pratik bir şekilde = kullanabiliyoruz. Örneğin tüm dosyada tüm kullanıcılardaki her yetkiyi almak için a-rwx yazabiliriz, bunun karşılığı = için a= şeklinde olacaktır. chmod a= <dosya_adi>.

Şimdi de erişim yetkilerini aktarmaya çalışalım. Bir dosya/dizinin yetkilerini direkt dosyaya/dizine aktarmak için --reference kullanacağız :

chmod --reference <yetkileri aktarılcak dosya> <yetkileri alacak dosya> şeklinde komutumuzu yazıyoruz ve yukarıda gördüğünüz üzere yeni_dosya’nın yetkileri yeni2_dosya’ya aktarılmış oldu.

Son olarak da erişim yetkisini tüm alt klasörlere eklemek için “-R” parametresini kullanabiliriz. Örneğin sizin bir dizin’iniz ve içinde dosyalarınız olsun. Bu dizine bir yetki verdiğinizde içindeki dosyalar için geçerli olmaz. Eğer dizine eklenen yetkinin içindeki dosyalarda da geçerli olmasını istiyorsak-R parametresini kullanmamız gerekir chmod -R a=rwx <dizin_adı>.(a=rwx yerine a+rwx de yapabileceğimizi biliyorsunuz)

Buraya kadar gördüğümüz read, write ve execute ifadelerini rakamlarla da ifade edebiliyoruz. Read → 4 / write → 2 / execute → 1 olacak şekilde, örneğin dosyanın sahibinde tüm izinleri, aynı gruptakilere sadece yazma ve diğer kişilere de tüm izinleri vermek istersek(-rwxr--rwx) bunun için komutumuzu chmod 747 <dosya_adi> şeklinde yazıyoruz. Bu size biraz tuhaf gelmiş olabilir :) Bir çizimle açıklayalım :

Bu kullanımı daha önce çokça görmüş olabilirsiniz. Harfler yerine rakamlarla yetki verme kullanımında üç basamaklı sayının yüzler basamağı dosya-dizin sahibini, onlar basamağı dizin sahibiyle aynı grupta olanları ve birler basamağı da diğer kullanıcılar belirtir. Yukarıda gördüğünüz gibi de toplama işlemiyle yetkiler toplanarak, hangi yetkiyi vereceğinizi söylersiniz. Örneğin chmod 666 yetkisi -rw-rw-rw- yı verecektir. r+w → 4+2 = 6 olacağı için read ve write yetkileri verilir. Başka bir örnek olarak çokça gördüğünüz chmod 500 yetkisi, dosya dizin sahibine 5 yani r-x(read ve execute) yetkisi verir. Diğer kullanıcılara yetki vermez.

Isattr / chattr : Önemli gördüğümüz dosyaları (bir şekilde) silinmeden önce koruma altına almamız mümkün ve bunu chattr komutu ile yapabiliyoruz. Sadece silmeyi engellemenin yanında erişim yetkilerini de korumamızı sağlıyor. Bu komutla, Yanlışlıkla silme vb. durumlarına karşı “root” kullanıcısının bile silmesini engelleyebiliyoruz. chattr +i <dosya_adi> şeklinde kullanabiliriz. lsattr ise bu dosyada koruma işlemi olup olmadığına bakmamızı sağlıyor :

Öncelikle lsattr ile koruma altında olmadığını gördüğümüz dosyayı chattr +i <dosya_adi> komutu ile koruma altına alıyoruz. Ardından lsattr ile koruma altına alındığını teyit ettikten sonra rm ve chmod komutlarıyla silme ve yetkilendirme işlemlerini deniyoruz. Gördüğünüz gibi “root” kullanıcısında bile bunlara izin verilmiyor. Korumayı kaldırmak için de mantıken de olduğu gibi -i parametresiyle chattr -i <dosya_adi> şeklinde kaldırıyoruz. Ardından dosyaya yetki verebildiğimizi ve silebildiğimizi teyit ediyoruz.

Burada biraz soluklanalım, sonraki yazıda görüşmek üzere. “Bilgi paylaştıkça çoğalır.”

Kaynakça :

- https://www.udemy.com/course/kali-linux-ile-sifirdan-temel-linux-egitimi/

--

--