LİNUX’TA KULLANICI VE DOSYA-DİZİN İŞLEMLERİ
KULLANICI İŞLEMLERİ Linux işletim sisteminde birden çok ve farklı yetkilerde kullanıcılar oluşturulabilir ve bu kullanıcılar aynı anda veya farklı zamanlarda sisteme bağlanıp, yetkileri çerçevesinde, kendi işlemlerini yürütebilirler. Tüm kullanıcılar arasında, hiç bir kısıtlamaya tabi olmayan root kullanıcısıdır. Çok kullanıcılı sistemlerde, belirli kullanıcı politikaları oluşturmanın diğer bir yolu da grup (group} kullanmaktır. Dosya ve dizinleri yazma/okuma ve çalıştırma işlemleri grup bazında da yapılabilir. Sistem kullanıcısı oluşturmak için: useradd alper Sistem kullanıcısna şifre atamak için: passwd alper
Aynı zamanda chage komutuyla parola süresi değiştirilebilir Aynı zamanda chage komutuyla parola süresi değiştirilebilir. Örneğin Ali kullanıcısının parolasının süresinin 27 Ağustos 2014 de dolması isteniyorsa chage -E 2014/08/27 ali komutu kullanılmalıdır. Whoami hangi kullanıcı ile giriş yapılmış öğrenilir. Ve who komutları yazılarak hangi kullanıcılar sistemde olduğu öğrenenilebilir.
Yukarıdaki komut girildiğinde, öntanımlı olarak home dizini altında alper {/home/alper) adlı bir dizin oluşur. Bu dizin kullananın kendi dizinidir. Şayet alper kullanıcısı için farklı bir home dizini tanımlanacaksa: -d parametresiyle home dizini elle tanımlanır. -p parametresi kullananın giriş şifresini atamak için; -g kullanıcının atanacağı grubu belirlemek için; -s kullanıcının ön-tanımlı kabuğunu seçmek için kullanılır. Sistem kullanıcısını silmek için: userdel alper
Grup oluşturmak için: groupadd yöneticiler Grup silmek için: groupdel yöneticiler Bir kullanıcıyı grubunun atayarak oluşturmak: useradd -g yönetici alper Kullanıcının ait olduğu grubu teyit etmek için: id alper Grup adını değiştirmek için: groupmod -n admins yöneticiler Bir kullanıcının grubunu değiştirmek için: usermod -g admins alper Bir kullanıcının grubunu görmek için: groups alper Bir kullanıcıyı kilitlemek için: usermod alper Kilitli bir kullanıcıyı yeniden etkinleştirmek için: usermod -u alper
Sistemde var olan kullanıcıları ve bu kullanıcılara ait bir takım bilgiler /etc/passwd dosyasında tutulur. Bu dosyada tutulan ve birbirleriyle ile ayrılan bilgileri sırayla yazalım. Kullanıcı adı Şifre (Sadece x olarak görünür.) Kullanıcı tanımı/ID (Her kullanıcıya ait farklı bir sayıdır.) Grup tanımı/ID Bilgi/tanıtım home dizini (ön tanımlı olarak /home/<kullanici_adi>) Ön tanımlı kabuk Kullanıcı İşlemleri ve Hakları /etc/shadow kullanıcı şifrelerinin kriptolu olarak tutulduğu dosyadır. etc/group ise grup bilgilerinin saklandığı dosyadır. Bu dosyada yer alan bilgiler ise: Grup adı Grup şifresi (Çok nadir kullanılır.)
Kullanıcılar Terminal ekranında kullanıcınızı değiştirmek için: su alper Yukarıdaki komutu girdiğinizde sizden alper kullanıcısının şifresini isteyecektir. Şifreyi girdikten sonra artık terminal üzerinde alper kullanıcısının haklarım kullanarak işlem yapmaya devam edeceksiniz. exit komutu verilerek kullanıcı çıkış yapabilir. Eğer başka bir kullanıcı olmak isteyen kullanıcı root ise herhangi bir şifreye gerek olmadan istediği kullanıcı olarak devam edebilir. Herhangi bir kullanıcı root olmak isterse, satıra önce su komutunu girip root şifresini girmesi gerekecektir.
Dosya ve Dizinlere Erişim Sistemde tanımlı her kullanıcı her dosyaya erişemez. Zira herkes her yere erişecekse, farklı kullanıcılar oluşturmanın bir anlamı kalmaz. Linux, bir dosyaya erişimi üç sınıfa ayırır. Bunlar: Okuma hakkı Yazma hakkı Çalıştırma hakkı Böyle bir sınıflandırma sayesinde kullanıcıların, “ya hep ya hiç” yerine kısmi haklarla erişimine imkan sağlanmış olunur. Bir dosyanın sahibi, doğal olarak o dosyayı oluşturan kullanıcıdır. Dosya sahibinin o dosyayı okuma, yazma ve çalıştırma hakkı vardır.
d varsa dizin olduğu anlaşılır. Bir dosyaya erişecek kullanıcılar şu şekilde sınıflandırılır: Dosya sahibi Dosya sahibinin grubundaki kullanıcılar Diğer kullanıcılar Bir dosyanın erişim haklarım görmek için ls -l komutu kullanılabilir. ls -l dosyam - rwxr-x--x- 1 alper admins 0 Apr 2 4 19:10 dosyam r harfi okuma hakkını; w harfi yazma hakkını; x ise çalıştırma hakkını işaret eder. Detaylı listeleme (ls –l) yaptığımızda listelenenlerin başında – varsa dosya, d varsa dizin olduğu anlaşılır.
-rwxrw-r-- İzinlerin belirtildiği kısım Dosyanın sahibi Grup Diğer kullanıcılar -rwxrw-r--
Şimdi yukarıdaki dosyanın erişim hakkım anlamaya çalışalım: Sahibi Grubu Diğer -rwx r-x —x Bu dosyanın sahibi okuma, yazma ve çalıştırma (rwx} hakkına sahiptir. Dosya sahibiyle aynı gruba dahil olanlar okuma ve çalıştırma (r-x) hakkına sahiptir. Diğer tüm kullanıcılar ise sadece çalıştırma (--x) hakkına sahiptir. Dosya sahibi veya root kullanıcısı bir dosyanın erişim özelliklerini chmod komutuyla dilediği gibi değiştirebilir. Bu komut kullanılırken: u: Kullanıcıları (user) g:Grubu (group) o: Diğerlerini (other) işaret eder.
Örneğin dosya sahibi [u: user) kendisini dosyasını çalıştırmaktan mahrum bırakmak isterse: chmod u-x dosyam Kendisine tekrar çalışma hakkı vermek isterse: chmod u+x dosyam Dikkat edileceği gibi ilgili hakkı kaldırmak; ise o hakkı vermek için kullanılır. Şimdi grup kullanıcılarının çalıştırma ve okuma hakkım kaldıralım: chmod g-rx dosyam
Grup kullanıcılarına tüm hakları verelim: chmod g+rwx dosyam Diğer kullanıcıların okuma hakkım kaldıralım: chmod o-r dosyam chmod komutunu sadece dosyalar için değil, aynı zamanda dizinler için de kullanabiliriz. Bunun için -R parametresi kullanmamız yeterlidir. "root" kullanıcısı chown ile herhangi bir dosyanın sahibini de değiştirebilir. Örneğin aşağıda, "alper" kullanıcısına ait olan dosyayı root kullanıcısı "kemal" kullanıcısına vermiştir. chown kemal /home/alper/dosyam
Örneğin “alper” kullanıcısının tüm dosya ve dizinlerini “kemal” kullanıcısına vermek için: chown kemal -R /home/alper/ Benzer şekilde dosyanın grubunu değiştirmek için: chgrp yöneticiler /home/alper/dosyam Dosya sahibini ve grubunu tek hamlede değiştirmek için: chown kemal yöneticiler /home/alper/dosyam Ev dizinimizde belge1 adında bir dosya olsun. Bu dosyayı değiştirilemez yapmak için : chattr +i belge1 komutunu kullanabiliriz. Tekrar eski haline getirmek için chattr +i belge1
SAYISAL TANIMLA İZİN DEĞİŞTİRME chmod izin kodu dosya/dizin Diğerleri için çalıştırma 0001 Diğerleri için yazma 0002 Diğerleri için okuma 0004 Gruptakiler için çalıştırma 0010 Gruptakiler için yazma 0020 Gruptakiler için okuma 0040 Dosya sahibi için çalıştırma 0100 Dosya sahibi için yazma 0200 Dosya sahibi için okuma 0400 İzin durumu Kod Diğerleri o Grup g Dosya sahibi u Kullanıcılar Sembolik Kod
Sayısal tanımla izin değiştirme Dosya sahibine okuma izni 400 Dosya sahibine yazma izni 200 Gruba okuma izni 40 Diğerlerine okuma izni 4 Toplam 644 # chmod 644 orn.dat
Örnekler chmod 674 adosya chmod 700 adosya -rw-rwxr– 1 seckin users 0 Nov 15 00:11 adosya chmod 700 adosya -rwx------ 1 seckin users 0 Nov 15 00:17 adosya
cd komutundan sonra bir boşluk bırakıp .. yazmanız gerekir Temel Dizin İşlemleri cd komutundan sonra bir boşluk bırakıp .. yazmanız gerekir Yeni dizin oluşturmak için: mkdir yeni_dizin Bir alt dizine geçmek için: cd alt_dizin Bir üst dizine çıkmak için: cd .. İki dizin arasında kolay geçiş yapmak için: cd – (örneğin home dizinindeydim /tmp dizine geçtim. Tekrak home dizinine döndüm. ) Kök dizine doğrudan geçmek için: cd / Bulunan dizine ait yolu (path) görmek için: pwd Bulunulan dizin altındaki dosya ve dizinlerin listesini görüntülemek için: ls Ayrıntılı listeleme yapmak için (kullanıcı hakları, dosyanın sahibi, tarih vb. bilgiler içerir): ls -l
İsminde “tr” karakteri içeren dosya dizinleri listelemek için: ls ‘tr’ tr iie başlayan dosyaları listelemek için: ls tr? Bulunulan dizini alt dizinlerindeki varlıklarla birlikte listelemek için: ls -lRt
TEMEL DOSYA İŞLEMLERİ Bir metin dosyayı okumak için: cat metin_dosya Bir metin dosyayı sayfa sayfa okumak için: more metin_dosya Bir metin dosyayı sayfa sayfa ileri geri alabilerek okumak için: less metin_dosya Bir metin dosyasının baştan ilk on satırını okumak İçin: head metin_dosya Bir metin dosyasının baştan belirli sayıda (örneğin 25) satırını okumak için: head -25 metin_dosya Bir metin dosyasının sondan ilk on satırım okumak için: tail metin_dosya
Bir metin dosyasının sondan belirli sayıda (örneğin 25) satırını okumak için: tail -25 metin_dosya Özellikle log dosyalarına bakmak için tail çok kullanışlı bir araçtır. Terminal ekranında metin dosya oluşturmak için: cat > metin_dosya 62 Tekrar komut satırına düşmek için Ctrl+D tuş takımına basılır. Mevcut bir metin dosyaya ilave yapmak için: cat >> metin_dosya Birden fazla metin dosyayı tek bir dosyada birleştirmek için: cat metin_dosya1 metin_dosya2 >> metin_dosya Bulunulan dizinde boş dosya oluşturmak için: touch bos_dosya Bir dosya içerisindeki satır sayısını saymak için: wc -l metin_dosya
Dosya İçerisindeki kelime sayısını hesaplamak için "-w", karakter sayısını hesaplamak için "-c" parametresi kullanılır. Bir dosyanın kopyası çıkarmak için: cp asıl_dosya kopya_dosya veya cp asıl_dosya /hedef_dizin/kopya_dosya Bir dizinin kopyası çıkarmak için: cp -rf asıl_dizin kopya_dizin veya bir üst dizin içerisine kopyalayalım: cp -rf asıl_dizin /kopya_dizin Bir dosyayı başka bir dosyaya taşımak İçin: mv asıl_dizin taşınmış_dizin Kopyalanacak dosyanın bulunduğu adres yazılmalı Dosyayı kopyalayacağımız adres yazılmalı
rm silinecek dosya rm –r silinecek dizin
STANDART GİRİŞ-ÇIKIŞ VE HATA Linux işletim sisteminde standart giriş birimi klavyemizdir. Standart çıkış birimimiz ise çalıştığımız terminal ekranımızdır. Ancak girişimizi klavye yerine bir dosyadan alabileceğimiz gibi, çıktımızı ise ekran yerine bir dosyaya gönderebiliriz.
Linux İşletim sisteminde standart girdi, çıktı ve hata birer sayıyla ifade edilir. Standart Girdi: Klavye: 0 Standart Çıktı: Ekran: 1 Standart Hata: 2 Örneğin terminale ls komutunu girdiğimizde standart olarak sonucu ekranımıza gönderir. Ancak biz istersek bu komutun çıktısını bir dosyaya yazdırabiliriz. Örneğin: ls > ls.txt
Yukarıdaki komutu girdiğimizde ls Yukarıdaki komutu girdiğimizde ls.txt dosyası yoksa da otomatik olarak oluşacaktır. Ancak daha önceden bu dosya içerisinde her ne varsa tümü yok olacaktır. Peki, önceki bilgilerin yok olması engellemek için ne yapabiliriz? ls >> ls.txt Böylece ls.txt dosyasının var olan içeriği yok etmeden, son satırdan itibaren eklenmek üzere çıktımızı göndermiş olduk. cat komutu normalde girdisini klavyeden alır. Ancak biz girdi yönlendirmeyle cat komutunun bir dosyayı okuyup terminal ekranına yazmasını sağlayabiliriz. cat << ls.txt
Benzer biçimde, bir komutun çıktısını başka bir komuta girdi olarak vermek de mümkündür. Bunun için "komutlar arasında boru (pipeline | ) kullanılır. ls –l | wc –l Peki biz bu standart hata girdi çıktı vb. komutu sunucu yönetiminde nerde kullanabiliriz? Örneğin bir dosya inceleyeceğimiz zaman bu dosya içerisinde oluşan hataları başka bir dosyaya aktarmak isteyebiliriz. Cat /var/log/access.log >>2 dosya.txt
Peki başka bir dosyaya aktarmak yerine hataları görmek istemezsek yani sadece rapor dosyasında hata raporunun haricindeki kayıtları görmek istersek: cat <<2 /dev/null dev/null : linux un karadeliği gibi düşünebiliriz. Yani dev/null içerisine ne gönderirsek ne kaydedersek bulunmayacak üzere kaybolur.
Arşivleme, Sıkıştırma ve Şifreleme tar (Tape archive) ve gzip (GNU zip) Kendi formatında dosya arşivi oluşturmayı sağlayan ve Linux/Unix işletim sistemlerinde oldukça yaygın olarak kullanılan arşivlerde aracıdır. Tek başına kullanılabileceği gibi genellikle gzip, bzip2 gibi bir sıkıştırma aracıyla birlikte kullanılır. Şimdi dosyalarım adlı dizinimizi tar ile tek bir dosyaymış gibi arşivleydim. tar -cvf dosyalarım.tar dosyalarım Arşivlediğimiz bir dizini yeniden açmak için ise: tar -xvf dosyalarım.tar
gzip (GNU zip) \ Bİr GNU projesi olan gzip ise dosyalarımız sıkıştırmaya yarayan ve tıpkı tar gibi oldukça sık kullanılan bir araçtır, gzip, bir dosyayı sıkıştırmadan önce CRC-32 sağlama toplamını (checksum) alır ve sıkıştırılan dosya yeniden açıldığında sağlama toplamını yeniden alarak orjinal haliyle arasında bir fark var mı diye kontrol eder. Şimdi gzip ile deneme adlı dosyamızı sıkıştıralım. gzip deneme Sıkıştırma sonrasında deneme adlı dosyamız kaybolacak ve yerine deneme. gz adlı dosyamız oluşacaktır. Sıkıştırdığımız bir dosyayı yeniden açmak için ise: gunzip deneme. gz tar ve gzip'i birlikte Kullanmak Pratikte arşivlediğimiz bir dizini sıkıştırmak bize yer tasarrufu sağlar. Üstelik bu tür dizinleri bir ağ ortamında başkalarıyla da paylaşacaksak sıkıştırma daha önem kazanır.
Şimdi bir dizini tek bir hamleyle hem arşivleyip, hem de sıkıştıralım, tar komutuna -z parametresi verdiğimizde gzip’i otomatik olarak çağıracaktır. tar -czf dosyalarım.tar.gz dosyalarım Hangi dosyaları arşivleyip sıkıştırdığımızı görmek için: tar -tzf dosyalarım.tar.gz dosyalarım / dosyalarım /deneme3 dosyalarım /deneme2 dosyalarım /deneme1 Arşivleyip sıkıştırdığımız dosyalan yeniden açmak için ise: tar -xzf dosyalarım.tar.gz
Dosya ve Dizin Arama find Komutu Sahip olduğu çok fazla parametre sayesinde her yönüyle arama yapma imkanı sağlayan bir komuttur. Bulunulan dizinde “tr” ile başlayan tüm dosya veya dizinleri bulup listelemek için: find .-name 'tr*' Eğer sadece “tr” ile başlayan dosya bulup listelemek istersek: find . -name ‘tr*’ -type f Eğer sadece “tr” ile başlayan dizin bulup listelemek İstersek: find . -name 'tr*' -type d Eğer dosyamızı bulunduğumuz dizin yerine tüm dizinler İçinde aratmak istersek: find / -name "dosyam" -type f -print
Eğer dosyamızı bulunduğumuz dizin yerine belirli bir dizin içinde aratmak istersek: find /home/alper -name "dosyam" -type f -print var dizini altında son yarım saatte oluşturulan veya değiştirilen dosyalan listelemek için: find /var/ -cmin 30 -print Eğer sy uzantılı dosyaları buldurup, sildirmek istersek: find / -name "*.sy" \ xargs rm
locate Belirli aralıklarla dosya ve dizilerin indeksini tutan ve böylece find komutundan çok daha hızlı cevap veren arama komutudur. Ancak find komutu gibi ayrıntılı arama yapılamaz. Sadece isme göre yapılacak aramalar için daha kullanışlı ve hızlı bir komuttur. Kullanımı basitçe: locate dosyam
ALIŞTIRMA SORULARI Kullanıcı şifrenizi değiştiriniz. Başka bir kullanıcının hesabıyla giriş yapınız. paylasim adında bir dizin oluşturunuz. Bu dizin içerisine ogrnoad-soyad.txt adında bir dizin oluşturunuz. Bu dosyanın içerisine Adınız soyadınız ve memleketinizi yazınız. ogrnoad-soyad.txt dosyasını sıkıştırıp arşivleyiniz. ogrnoad-soyad.doc adına bir dosya oluşturunuz. Bu dosyanın sahibini başka bir arkadaşınız yapınız. Dahil olduğunuz grubu öğreniniz.
paylasim klasörünü tüm kullanıcılar için okuma yazma ve çalıştırma hakkı veriniz. paylasim klasörüne ogrnoad-soyad.txt dosyasını gönderiniz (kopyalayınız). var dizini altında access dosyasını aratınız. /home dizini altında 12 ile başlayan dizinleri listeleyiniz / dizini altındaki dosya ve klasörleri ayrınıtılı bir şekilde listeleyiniz. / dizini altındaki dosya ve klasörleri tüm alt varlıkları ile listeleyeniz. / dizini altındaki tüm dizinleri oluşturacağınız liste.txt adında bir dizini yazdırınız. /var/log dizini altındaki error dosyasının içeriğini oluşturacağınız hata.txt dizinine aktarınız.
KAYNAKLAR Linux Sistem ve Ağ Yönetimi (Linux başucu Kitapçığı) Alperen ÖZBİLEN http://tr.wikipedia.org/wiki/Linux