Linux Temel Komutlarla Dosya Dizin İşlemleri
u makalemizde dosya ve dizinler üstünde işlemler yaparken hangi temel komutları(cp,mv,mkdir gibi..) kullanacağımızı göreceğiz. Bu temel komutların iyi kullanılabilmesi ileriki dersler açısından ve sizin iyi bir Unix&Linux İşletim Sistemi okur-yazarı olabilmeniz için gereklidir.
Temel komutlara geçmeden önce şunu unutmayın Linux&Unix sistemlerde komut yapısı şu şekildedir.
Komut [options(seçenekler)] parametreler
Yani komutun seçeneği (option’i) varsa “–“ (eksi/tire) işareti ile onu hemen komuttan sonra yazarız(birden fazla options kullanmak istiyorsak bütün optionsları bitişik yazarız.) sonra da parametresini ekleriz.
Şimdi kurmuş olduğumuz CentOS sunucumuza bağlanalım. Şimdilik Vmware Workstation ara yüzünden sistemi -> Power On edip, cozumpark kullanıcısı ve şifresi ile sisteme login olup, masaüstünde sağ Mouse klik ve gelen menüden Konsole diyerek bir konsol açalım.
İsterseniz bir ssh client programı bularak Putty,Secure Crt gibi sisteme vermiş olduğunuz ip’yi hostname alanına girerek yine cozumpark kullanıcısı ve şifresi ile login olabilirsiniz.Bu servisleri sonra anlatacağımız için şimdilik ara yüzden giriş yapmanızı tavsiye ediyorum.
Konsolda şöyle bir ifade göreceksiniz;
[cozumpark@artemis ~]$ |
Login olduğunuz kullanıcı ismi@hostname ve yanıp sönen imleç(cursor)i görebilirsiniz. Kısaca bahsedersek bu konsol bizlere shell(kabuk) üstünden sistem çekirdeğine(kernel’e) komut yollayacağımız bir taşeron görevini görecek. Yani biz ne yazarsak onu yorumlayacak, işleyecek sonra kernel’e gönderecek, kernel’den gelen cevabı da bize getirecek.
Sistem bizim kullanıcı bilgimize bakıp konsol’un çalışma dizinini bizim home dizinimizden başlatır.İsterseniz shell ayarları ile başka bir yerden de başlatabilirsiniz.
Ağaç yapısı üstünden gösterecek olursak biz şu an kırmızı ile belirtilmiş(Current Working Directory= bizim çalışma dizinimiz) yerdeyiz.
Ben File System’de Neredeyim?
pwd: File System’de nerede olduğumuzu görmek istiyorsak pwd komutunu kullanırız.Açılımı Print Working Directory olarak geçer.Bizim sisteme ilk Login olduğumuzda çalışma dizinimiz ev dizinimiz olduğu için komutun cevabı resimdeki home dizinimizin yolunu vermeli.
[cozumpark@artemis~]$pwd
/home/cozumpark
Ben File System’de Bir yerlere Gitmek İstiyorum,Nasıl Giderim?
cd: Bulunduğumuz dizinden başka bir dizine gitmek istiyorsak cd komutunu kullanırız. Açılımı da change directory olarak geçer.5 adet seçeneğimiz var.
cd — > sadece cd komutunu çalıştırırsanız nerede olursak olalım, bizi ev dizinimize getirir. Ayrıca ev dizini Linux&Unix sistemlerde ~ karakteri olarakta kullanılır. Path ismi verirken ~ karakterini de kullanabilirsiniz. ~= ev dizinimiz(home directory)!
cd ~ahmet ; Ahmet kullanıcısının ev dizinine gidilir.(Root değilseniz tabi o kullanıcının ev dizinine geçmek için izniniz olmayabilir.)
cd . –> cd’yi bir nokta ile kullanırsak bulunduğumuz dizini gösterir. Hiçbir yere hareket etmeyiz.
”.” bulunduğumuz yeri gösterir.
cd .. — >cd’yi iki nokta ile kullanırsak bulunduğumuz yerden hiyerarşik yapıda bir üst dizine geçeriz.
”..” bir üst dizini gösterir.
cd – — > Bulunduğumuz dizine gelmeden önce neredeysek bizi tekrar oraya götürür.(Bir önceki dizine götürür.)
cd path_ismi à cd komutuna parametre olarak bir path ismi verdiğimizde bizi oraya götürür,fakat bu path ismi relative path mi ,absolute path mi olacak ona karar vermek gerekir.Bu relative ve absolute path kavramlarını neredeyse bütün komutlar içinde kullanacağımız için iyi bilmek gerekiyor.
Full path/Absolute Path: Sizin çalışma dizininize bağlı olmadan /’dan başlayarak dosya veya dizinin yerinin gösterimi. Yani mesela /tmp dizinine gitmek istiyoruz.tmp dizini /’un altında olduğu için full path olarak cd komutuna /tmp vermemiz yeterli.Çizimde siyah ok olarak gösterilmiştir bizim örneğimiz için.
[cozumpark@artemis ~]$ cd /tmp
[cozumpark@artemis tmp]$
[cozumpark@artemis tmp]$ pwd
/tmp
Relative Path: Sizin çalışma dizininize(ağaçta nerede bulunduğunuza) bağlı olarak dosya veya dizinin yerinin gösterilmesi.
Biz home dizinimizden /tmp dizinine relative path kullanarak gitmek istersek, şekilde mavi okla gördüğünüz gibi iki kere yukarı çıkıp tekrar tmp’ye geri inmemiz gerekiyor ağaçta.
[cozumpark@artemis tmp]$ cd àsadece cd komutu ile /tmp altından ev dizinime döndüm,
[cozumpark@artemis ~]$ àev dizinimiz altındayız /home/cozumpark
[cozumpark@artemis ~]$ cd ../../tmp à/tmp’ye gidebilmemiz için iki yukarı çıkıp tmp yazmamız gerek.
[cozumpark@artemis tmp]$
[cozumpark@artemis tmp]$ pwd
/tmp
Bu Komutların Yardım Sayfaları Nerede?
Man,info,help: Bir komut hakkında sistemde bulunan yardım dosyalarından açıklamaları incelemek istiyorsak bu komutları kullanacağız. Biz şimdiye kadar cd,pwd komutlarını gördük.Hemen bunları inceleyebiliriz.pwd komutu için konsolda “man pwd” diyelim ve enter’a basalım.Karşımıza pwd komutu için man (manual pages) gelecek.
[cozumpark@artemis ~]$ man pwd
“
PWD(1) User Commands PWD(1)
NAME
pwd – print name of current/working directory
SYNOPSIS
pwd [OPTION]
DESCRIPTION
Print the full filename of the current working directory.
–help display this help and exit
–version
output version information and exit
NOTE: your shell may have its own version of pwd, which usually supersedes the version described here. Please
refer to your shell’s documentation for details about the options it supports.
…..
…..
“
Bu manual pages’de gezinmek için, sayfa sayfa ilerlemede space tuşunu,satır satır ilerlemede aşağı-yukarı yön tuşlarını ,sayfadan çıkmak içinde q tuşunu kullanacağız.
Aynı şekilde info komut_ismi vererek veya komut_ismi –help diyerek eğer komutların sisteme yüklenmiş yardım sayfaları var ise, onlardan yararlanabilirsiniz.
Dosya ve Dizinleri Nasıl Listelerim?
ls: Bulunduğumuz dizinin altındaki dosya ve dizinleri listelemek istiyorsak ls komutunu kullanırız. Hiç dosya veya dizin ismi vermezsek current directory(.) yani ağaçta olduğumuz dizini listeler. Listeleme yaparken standart olarak alfabetik sırayı gözetir.
ls [seçenekler][dosya_veya_dizin_ismi]
Ls komutu ile en çok kullanılan seçenekler aşağıdaki gibidir ama bunlarla sınırlı değildir „man ls“ diyerek diğer seçenekleri inceleyebilirsiniz.
Seçenekler(Options) |
Açıklama |
-a |
Gizli dosyalar(. Nokta ile başlayan) dahil dizinin bütün içeriğini listeler. |
-l |
Liste biçiminde listeleme yapar,daha çok ayrıntı verir. |
-h |
Dosya boyutlarını okunabilir formatta(human readable) gösterir.Yani byte olarak değil de KB,MB cinsinden. |
-R |
Recursive(özyinelemeli) olarak dizinin içeriğini gösterir.Yani ağaçta bulunduğumuz dizinden itibaren altlara doğru iner. |
-F |
Listeleme yaparken dizinleri dosyalardan ayırmak için dizin isimlerinin sonuna / işareti koyar. |
-t |
Dosya ve dizinlerin time stamp(last modification time)’ine göre listeleme yapar. |
-i |
Dosya ve dizinlerin i-node numaralarını listeler. |
Örnek;
~ tilda karakterinden gördüğünüz gibi ev dizinimdeyim,sadece ls komutunu vererek ev dizinimin altında Desktop dizinin olduğunu görüyorum.
[cozumpark@artemis ~]$ ls
Desktop
Şimdi de ls –l komutu ile Desktop dizinin ayrıntılı özelliklerini görmek istiyorum.
[cozumpark@artemis ~]$ ls -l
total 4
drwx—— 2 cozumpark cozumpark 4096 Jun 16 20:46 Desktop
Şimdi ise ev dizinimin altında gizli dosyalarıda görebilmek için –a seçeneğinide ekliyorum.Dosya isimlerinde “.“ nokta ile başlayan dosyalar gizli dosyalardır.
[cozumpark@artemis ~]$ ls -al
total 116
drwx—— 12 cozumpark cozumpark 4096 Jun 24 12:20 .
drwxr-xr-x 3 root root 4096 Jun 16 20:30 ..
-rw——- 1 cozumpark cozumpark 701 Jun 23 18:38 .bash_history
-rw-r–r– 1 cozumpark cozumpark 33 Jan 22 2009 .bash_logout
-rw-r–r– 1 cozumpark cozumpark 176 Jan 22 2009 .bash_profile
-rw-r–r– 1 cozumpark cozumpark 124 Jan 22 2009 .bashrc
-rw-rw-r– 1 cozumpark cozumpark 54 Jun 24 12:20 .DCOPserver_artemis__0
…
…
Değiştirilme zamanlarına göre sıralamak içinde –t seçeneğini komuta ekliyorum.
[cozumpark@artemis ~]$ ls -alrt
total 116
-rw-r–r– 1 cozumpark cozumpark 124 Jan 22 2009 .bashrc
-rw-r–r– 1 cozumpark cozumpark 176 Jan 22 2009 .bash_profile
-rw-r–r– 1 cozumpark cozumpark 33 Jan 22 2009 .bash_logout
-rw-r–r– 1 cozumpark cozumpark 658 Jan 21 04:04 .zshrc
drwxr-xr-x 3 root root 4096 Jun 16 20:30 ..
-rw——- 1 cozumpark cozumpark 26 Jun 16 20:46 .dmrc
drwxr-xr-x 4 cozumpark cozumpark 4096 Jun 16 20:46 .kde
…
…
ls komutunun çıktısını yorumlayacak olursak;
ilk bölüm,dosya/dizinin izinlerini gösterir.
İlk işaret “–“ olursa normal bir dosya,
“d” olursa onun bir dizin.
“c” olursa onun bir character device’i
“b” olursa onun bir block device’i
“l” olursa başka bir dosyayı işaret eden link olduğunu gösterir.
İkinci bölüm,dosya/dizine bağlı olan link sayısını gösterir.
Üçüncü bölüm, dosya/dizinin kime ait olduğunu gösterir.
Dördüncü bölüm, dosya/dizinin hangi gruba ait olduğunu gösterir.
Beşinci bölüm, dosyanın/dizinin boyutunu gösterir.
Altıncı bölüm, dosyanın/dizinin son değiştirilme tarihini gösterir.
Yedinci bölüm, dosyanın/dizinin ismi gösterir.
BILGILENDIRME!!: İzinler ve sahiplik konularını kullanıcı ve gruplar makalesinde inceleyeceğiz.
Dosya oluşturmak (Create File)
Touch: Genelde sıfır boyutlu dosya oluşturmak için kullanılır.
Touch [seçenekler] tarih [dosya ismi] veya sadece touch dosya_ismi şeklinde kullanılır.
Örnek;
File1 isminde bir dosya oluşturalım.
[cozumpark@artemis ~]$ touch file1 -> Bir tane file1 isimli dosya oluşturalım.
[cozumpark@artemis ~]$ ls -l file1
-rw-rw-r– 1 cozumpark cozumpark 0 Jun 24 12:58 file1
[cozumpark@artemis ~]$ ls -l
total 4
drwx—— 2 cozumpark cozumpark 4096 Jun 16 20:46 Desktop
-rw-rw-r– 1 cozumpark cozumpark 0 Jun 24 12:58 file1
[cozumpark@artemis ~]$ touch file2 file3 ->Birden fazla oluşturmak istiyorsak sırayla dosya isimlerini touch komutuna vermemiz yeterli.
[cozumpark@artemis ~]$ ls -l
total 4
drwx—— 2 cozumpark cozumpark 4096 Jun 16 20:46 Desktop
-rw-rw-r– 1 cozumpark cozumpark 0 Jun 24 12:58 file1
-rw-rw-r– 1 cozumpark cozumpark 0 Jun 24 13:00 file2
-rw-rw-r– 1 cozumpark cozumpark 0 Jun 24 13:00 file3
Ayrıca touch komutu dosyaların son erişim(access time) ve son değiştirme(modification time) zaman etiketlerini değiştirmek içinde kullanılır.Unix&Linux sistemlerde bir dosyanın 3 adet timestamp’i (zaman etiketi) vardır.
Access time(atime);Dosya/Dizi ‘ nin son okunma zamanını gösterir.
Modification time(mtime); Dosya/Dizi ‘ nin son içeriğinin değiştirildiği zamanı gösterir.
Change the status time(ctime); Dosya/Dizi ‘ nin son içeriğinin,sahipliklerinin,izinlerinin değiştirildiği zamanı gösterir.
Seçenekler(Options) |
Açıklama |
-a |
Access time’i değiştirmek için kullanılır. |
-c |
Eğer öyle bir dosya yoksa oluşturma. |
-m |
Modification time’i değiştirmek için kullanılır. |
-t time |
MMDDhhmm[YY] :
|
Örnek;
Dosyanın değişim zamanını 17 Nisan 2009 12:05 yapmak için :
touch –m 0417120509 dosya_ismi
Dosyanın erişim zamanını 23 Ocak 2000 16:35 yapmak için :
touch –a 0123163500 dosya_ismi
Ayrıca stat komutu ile , bütün bu zaman etiketlerini görebiliriz. stat dosya_ismi diyerek komutu çalıştırıyoruz.
[cozumpark@artemis ~]cd /tmp;touch armegedon
[cozumpark@artemis tmp]$ stat armegedon
File: `armegedon’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 851973 Links: 1
Access: (0664/-rw-rw-r–) Uid: ( 500/cozumpark) Gid: ( 500/cozumpark)
Access: 2011-07-24 17:09:56.000000000 +0300
Modify: 2011-07-24 17:09:05.000000000 +0300
Change: 2011-07-24 17:09:56.000000000 +0300
Dizin Oluşturmak (Create Directory)
Mkdir: Dizin oluşturmak için kullanılır.İç içe dizin oluşturmak isteniliyorsa –p seçeneği ile beraber kullanılmalı.
Mkdir [seçenek] [dizin_ismi]
Örnek;
[cozumpark@artemis ~]$ mkdir dir1 ->dir1 isimli dizini oluşturduk.
[cozumpark@artemis ~]$ mkdir -p dir2/dir3 ->dir2 ile beraber dir2’nin altında dir3 dizinini oluşturduk.
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ ls -l
total 12
drwx—— 2 cozumpark cozumpark 4096 Jun 16 20:46 Desktop
drwxrwxr-x 2 cozumpark cozumpark 4096 Jun 24 13:04 dir1
drwxrwxr-x 3 cozumpark cozumpark 4096 Jun 24 13:04 dir2
-rw-rw-r– 1 cozumpark cozumpark 0 Jun 24 12:58 file1
-rw-rw-r– 1 cozumpark cozumpark 0 Jun 24 13:00 file2
-rw-rw-r– 1 cozumpark cozumpark 0 Jun 24 13:00 file3
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ ls -lR dir2
dir2:
total 4
drwxrwxr-x 2 cozumpark cozumpark 4096 Jun 24 13:04 dir3
dir2/dir3:
total 0
[cozumpark@artemis ~]$ ls -l dir2
total 4
drwxrwxr-x 2 cozumpark cozumpark 4096 Jun 24 13:04 dir3
Dosya ve Dizinlerin Silinmesi(Remove Files and Directories)
Rm,rmdir: Dosya ve dizinleri silmek için ortak olarak rm komutu ,içi boş dizinleri silmek için ise rmdir komutu kullanılabilir.
Dosyalar için : rm [seçenekler] dosya_ismi
Dizinler için : rm –r [seçenekler] dizin_ismi
Rm komutunda –r seçeneğini içi dolu dizinlerin altını recursive (özyinelemeli) olarak silmesi için kullanıyoruz.
UYARI! Kullanıcıların –r seçeneğini hangi kullanıcı yetkisi ile hangi dizinde çalıştırdıklarına çok dikkat etmeleri gerekir. Eğer yetkili bir kullanıcı ile ağaç yapısında daha üst dizinlerde çalıştırırsanız bilinçsizce sistemin çok önemli dosyalarını silerek sistemi bozabilirsiniz.
Seçenekler(Options) |
Açıklama |
-f |
Hiçbir şey sormadan siler geçer. |
-i |
Etkileşimi modda dosyaların silinmesini sağlar.(Sileyim mi,silmeyeyim mi?) |
-r |
Recursive(özyinelemeli) olarak çalışarak bulunduğu dizinin altından itibaren her şeyi siler. |
-v |
Verbose mode,ne yapıldığının bilgisini kullanıcıya döner. |
Örnek;
[cozumpark@artemis ~]$ rm -vi file1 à file1 isimli dosya verbose ve etkileşimli modda sildik.
rm: remove regular empty file `file1′? y
removed `file1′
[cozumpark@artemis ~]$ ls -lR dir2 à dir2 dizinin altında dir3 dizinin olduğunu gördük.
dir2:
total 4
drwxrwxr-x 2 cozumpark cozumpark 4096 Jun 24 13:04 dir3
dir2/dir3:
total 0
[cozumpark@artemis ~]$ rmdir dir2 à dir2 dizinini silmeye çalışıyoruz ama altında dir3 dizini olduğu için hata verecek.
rmdir: dir2: Directory not empty
[cozumpark@artemis ~]$ rm -r dir2 à dir2’nin altında bulunan dir3 dizininide silmek için –r seçeneğini kullanıyoruz.
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ ls -lR dir2 à dir2 ve dir3’ün silindiğini teyit ediyoruz.
ls: dir2: No such file or directory
[cozumpark@artemis ~]$ ls –lrt à ev dizinimiz altında en son duruma bakıyoruz.
total 8
drwx—— 2 cozumpark cozumpark 4096 Jun 16 20:46 Desktop
–rw-rw-r– 1 cozumpark cozumpark 0 Jun 24 13:00 file3
–rw-rw-r– 1 cozumpark cozumpark 0 Jun 24 13:00 file2
drwxrwxr-x 2 cozumpark cozumpark 4096 Jun 24 13:04 dir1
Dosyalara Link Yapmak (Hard-Link and Soft-Link)
ln: Dosyalara farklı isimler verebilmek, sık kullanılan ama sürümlerle değişecek dosya isimlerini standart hale getirebilmek, dosyalara farklı yerlerden ulaşabilmek amacıyla dosyalara link (bağ) tanımı yaparız. Türlerine gore iki çeşit link tanımı yapılabilir.Hard-link ve soft (sembolic)-link.
ln [seçenekler] hedef link_ismi
Hard-link adı üstünde link olduğu dosya içeriği değişirse kendi içeriğide değişir. Ama orjinal dosya silinirse hard-linkli dosya sabit kalır ve bağımsız bir dosya haline dönüşür.
Sembolik linkle orjinal dosyaya link atılmış dosyalar sadece kısayol görevi görür. Windows ortamında masaüstünde kullandığımız kısayollardan hiçbir farkı yoktur. Sembolik linkli dosyada yaptığımızı zannettiğimiz değişiklikler aslında orjinal dosyada yapılır.
Örnek;
[cozumpark@artemis ~]$ touch link_ornek à link_ornek isminde bir dosya oluşturduk
[cozumpark@artemis ~]$ ls –lrt link_ornek
total 8
–rw-rw-r– 1 cozumpark cozumpark 0 Jul 6 23:27 link_ornek
[cozumpark@artemis ~]$ echo “ln komutu icin bir ornek” >> link_ornek à dosyanın içine birşeyler yazdık
[cozumpark@artemis ~]$ cat link_ornek à dosyanın içeriğini okuduk.
ln komutu icin bir ornek
[cozumpark@artemis ~]$ ln link_ornek hard_link à hard_link dosyasını link_ornek dosyasına hard link yaptık; böyle bir dosya olmasada kendisi oluşturur!
[cozumpark@artemis ~]$ ls -lrt
total 16
drwx—— 2 cozumpark cozumpark 4096 Jun 16 20:46 Desktop
–rw-rw-r– 1 cozumpark cozumpark 0 Jun 24 13:00 file3
–rw-rw-r– 1 cozumpark cozumpark 0 Jun 24 13:00 file2
drwxrwxr-x 2 cozumpark cozumpark 4096 Jun 24 13:04 dir1
–rw-rw-r– 2 cozumpark cozumpark 25 Jul 6 23:28 link_ornek
–rw-rw-r– 2 cozumpark cozumpark 25 Jul 6 23:28 hard_link
[cozumpark@artemis ~]$ diff link_ornek hard_link à diff komutu ile iki dosya arasında içerik olarak fark olmadığını gördük
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ echo “hardlinkli dosyada gozukmesi gerek” >> link_ornek àorjinal dosyanın içine birşeyler yazdık
[cozumpark@artemis ~]$ cat hard_link à orjinal dosyada yazdığımız şeyleri hard linkli dosyada gördük.
ln komutu icin bir ornek
hardlinkli dosyada gozukmesi gerek
[cozumpark@artemis ~]$ ln -s link_ornek soft_link à orjinal dosyamıza soft link yaptık
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ ls -lrt
total 16
drwx—— 2 cozumpark cozumpark 4096 Jun 16 20:46 Desktop
-rw-rw-r– 1 cozumpark cozumpark 0 Jun 24 13:00 file3
–rw-rw-r– 1 cozumpark cozumpark 0 Jun 24 13:00 file2
drwxrwxr-x 2 cozumpark cozumpark 4096 Jun 24 13:04 dir1
–rw-rw-r– 2 cozumpark cozumpark 60 Jul 6 23:38 link_ornek
–rw-rw-r– 2 cozumpark cozumpark 60 Jul 6 23:38 hard_link
lrwxrwxrwx 1 cozumpark cozumpark 10 Jul 6 23:39 soft_link -> link_ornek
[cozumpark@artemis ~]$ echo “soft_linkte gozukmesi gerek” >> soft_link à soft linkli dosyaya birşeyler yazmayı deneyeceğiz
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ cat soft_link à yazdığımız şeyler softlinkli dosya tarafından gösterildi.aslında orjinal dosyayı gösteriyor.
ln komutu icin bir ornek
hardlinkli dosyada gozukmesi gerek
soft_linkte gozukmesi gerek
[cozumpark@artemis ~]$ rm link_ornek àorjinal dosyayı siliyoruz
[cozumpark@artemis ~]$ cat soft_link àsoftlinki okumaya çalışıyoruz ama gördüğünüz gibi kendisi sadece orjinal dosyaya kısayol olduğu için “No such file or directory” hatası veriyor.
cat: soft_link: No such file or directory
[cozumpark@artemis ~]$ cat hard_link àHardlinkli dosya yerinde duruyor ama hard link olduğu orjinal dosya silindiği için artık bağımsız bir dosya haline geldi.
ln komutu icin bir ornek
hardlinkli dosyada gozukmesi gerek
soft_linkte gozukmesi gerek
Dosya ve Dizinlerin Taşınması ve Kopyalanması (Copying and moving files and directories)
cp,mv:Kopyalama işlemini gerçekleştirmek için cp ,taşıma ve isim değiştirme işleminde mv komutlarını kullanacağız.
cp [seçenekler] kaynak(source) hedef(destination)
cp komutu ile kullanabileceğimiz seçenekler aşağıdaki tabloda belirtilmiştir.Kaynak ve hedef dosya veya dizin olabilirler.
Seçenekler(Options) |
Açıklama |
-f |
Hedef bölgede kopyalanacak dosya varsa, orada var olanı hiçbirşey sormadan siler ve diğer dosyaları kopyalar. |
-i |
Etkileşimi modda dosyaların kopyalanmasını sağlar.(Hedef bölgesinde aynı dosya veya dizin var ise kopyalama yapayım mı? Diye sorar.) |
-r |
Recursive(özyinelemeli) olarak çalışarak bulunduğu dizinin altından itibaren her şeyi hedef bölgesine kopyalar. |
-v |
Verbose mode,ne yapıldığının bilgisini kullanıcıya döner. |
-p |
Bu seçenekle kopyalanacak dosya ve dizinlerin izinlerin ve sahiplerinin korunmasını sağlar. |
-u |
Kaynak dosya Hedef dosyadan daha yeni ise veya karşı tarafta kaynak dosya yok ise kopyalama yapar. |
-d |
Cp komutu standart olarak bir linki kopyalarken linkin belirtmiş olduğu asıl dosyayı kopyalar ama bu seçenek ile dosyanın kendisi yerine linkini kopyalarız. |
-l |
Kaynak dosya ile Hedef dosya arasında link oluşturulur. Eğer Kaynak dosya değişir ise otomatikman Hedef dosyanın içeriğide değişir. |
-s |
Kopyalama işlemi yerine Hedef dosya kaynak dosyanın bir sembolik linki haline gelir. |
BILGILENDIRME!!: Unix&Linux sistemlerde herhangi bir ayar dosyasının üstünde işlem yapmadan önce muhakkak dosyanın yedeğini alın,sistemde çok büyük değişiklik olacaksa ayar dosyalarını sistemden lokalinize çekin.Eşeğini sağlam kazığa bağlayan dizini dövmez vesselam. Örnek; cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf._tarih_isim_original
Örnek;
[cozumpark@artemis ~]$ ls -rlt
total 16
drwx—— 2 cozumpark cozumpark 4096 Jun 16 20:46 Desktop
-rw-rw-r– 1 cozumpark cozumpark 0 Jun 24 13:00 file3
-rw-rw-r– 1 cozumpark cozumpark 0 Jun 24 13:00 file2
drwxrwxr-x 2 cozumpark cozumpark 4096 Jun 24 13:04 dir1
-rw-rw-r– 1 cozumpark cozumpark 88 Jul 7 23:43 hard_link
lrwxrwxrwx 1 cozumpark cozumpark 10 Jul 7 23:47 soft_link -> link_ornek
-rw-rw-r– 1 cozumpark cozumpark 88 Jul 8 00:01 link_ornek
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ ls -l dir1
total 0
[cozumpark@artemis ~]$ cp file2 dir1
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ ls -l dir1
total 0
-rw-rw-r– 1 cozumpark cozumpark 0 Jul 8 00:02 file2
[cozumpark@artemis ~]$ ls -rlt
total 16
drwx—— 2 cozumpark cozumpark 4096 Jun 16 20:46 Desktop
-rw-rw-r– 1 cozumpark cozumpark 0 Jun 24 13:00 file3
-rw-rw-r– 1 cozumpark cozumpark 0 Jun 24 13:00 file2
-rw-rw-r– 1 cozumpark cozumpark 88 Jul 7 23:43 hard_link
lrwxrwxrwx 1 cozumpark cozumpark 10 Jul 7 23:47 soft_link -> link_ornek
-rw-rw-r– 1 cozumpark cozumpark 88 Jul 8 00:01 link_ornek
drwxrwxr-x 2 cozumpark cozumpark 4096 Jul 8 00:02 dir1
[cozumpark@artemis ~]$ cp -d soft_link dir1 à -d seçeneği nedeniyle dir1 altına linki kopyalayacak,orijinal dosyayı değil
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ ls -lrt dir1
total 0
-rw-rw-r– 1 cozumpark cozumpark 0 Jul 8 00:02 file2
lrwxrwxrwx 1 cozumpark cozumpark 10 Jul 8 00:31 soft_link -> link_ornek
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ cp soft_link dir1 à hiç seçenek kullanmazsak orijinal dosyayı hedefe kopyalar.
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ ls -lrt dir1
total 4
-rw-rw-r– 1 cozumpark cozumpark 0 Jul 8 00:02 file2
lrwxrwxrwx 1 cozumpark cozumpark 10 Jul 8 00:31 soft_link -> link_ornek
-rw-rw-r– 1 cozumpark cozumpark 88 Jul 8 00:31 link_ornek
Dosya&Dizinleri Taşımak veya Isimlerini Değiştirmek (Moving files&directories or Renaming files&directories)
mv: Dosya ve dizinleri taşırken veya isimlerini değiştirmek istediğimizde mv komutunu aşağıdaki şekliyle kullanıyoruz.Kaynak ve hedef, dosya veya dizin olabilir.Seçenek olarak cp komutuna benzer seçenekleri vardır. –f,-v,-i aynı özelliklere sahip seçenekleridir.
mv [seçenek] kaynak(source) hedef(destination)
Örnek;
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ mkdir dir2 — > dir2 isimli bir dizin oluşturduk.
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ ls –rtl — > Home dizinimiz altında bulunan dosya ve dizinleri listeledik,dir1 ve dir2 isimli dizinleri gördük.
total 20
drwx—— 2 cozumpark cozumpark 4096 Jun 16 20:46 Desktop
-rw-rw-r– 1 cozumpark cozumpark 0 Jun 24 13:00 file3
-rw-rw-r– 1 cozumpark cozumpark 0 Jun 24 13:00 file2
-rw-rw-r– 1 cozumpark cozumpark 88 Jul 7 23:43 hard_link
lrwxrwxrwx 1 cozumpark cozumpark 10 Jul 7 23:47 soft_link -> link_ornek
-rw-rw-r– 1 cozumpark cozumpark 88 Jul 8 00:01 link_ornek
drwxrwxr-x 2 cozumpark cozumpark 4096 Jul 8 00:31 dir1
drwxrwxr-x 2 cozumpark cozumpark 4096 Jul 8 00:42 dir2
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ mv dir1 dir2 — > dir1 isimli dizini dir2 isimli dizinin altına taşıdık.
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ ls –lrt — > dir1’in artık Home dizinimiz altında olmadığını gördük.
total 16
drwx—— 2 cozumpark cozumpark 4096 Jun 16 20:46 Desktop
-rw-rw-r– 1 cozumpark cozumpark 0 Jun 24 13:00 file3
-rw-rw-r– 1 cozumpark cozumpark 0 Jun 24 13:00 file2
-rw-rw-r– 1 cozumpark cozumpark 88 Jul 7 23:43 hard_link
lrwxrwxrwx 1 cozumpark cozumpark 10 Jul 7 23:47 soft_link -> link_ornek
-rw-rw-r– 1 cozumpark cozumpark 88 Jul 8 00:01 link_ornek
drwxrwxr-x 3 cozumpark cozumpark 4096 Jul 8 00:42 dir2
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ ls -lR dir2 — > dir2’nin altına recursive olarak(-R seçeneği ile) baktık ve dir2’nin altına taşınmış olduğunu gördük.
dir2:
total 4
drwxrwxr-x 2 cozumpark cozumpark 4096 Jul 8 00:31 dir1
dir2/dir1:
total 4
-rw-rw-r– 1 cozumpark cozumpark 0 Jul 8 00:02 file2
-rw-rw-r– 1 cozumpark cozumpark 88 Jul 8 00:31 link_ornek
lrwxrwxrwx 1 cozumpark cozumpark 10 Jul 8 00:31 soft_link -> link_ornek
[cozumpark@artemis ~]$ ls -rlt
total 16
drwx—— 2 cozumpark cozumpark 4096 Jun 16 20:46 Desktop
-rw-rw-r– 1 cozumpark cozumpark 88 Jul 7 23:43 hard_link
lrwxrwxrwx 1 cozumpark cozumpark 10 Jul 7 23:47 soft_link -> link_ornek
-rw-rw-r– 1 cozumpark cozumpark 88 Jul 8 00:01 link_ornek
drwxrwxr-x 3 cozumpark cozumpark 4096 Jul 8 00:50 dir2
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ mv dir2 dir4 –> dir2 ‘nin ismini dir4 olarak değiştirdik.
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ ls -lrt
total 16
drwx—— 2 cozumpark cozumpark 4096 Jun 16 20:46 Desktop
-rw-rw-r– 1 cozumpark cozumpark 88 Jul 7 23:43 hard_link
lrwxrwxrwx 1 cozumpark cozumpark 10 Jul 7 23:47 soft_link -> link_ornek
-rw-rw-r– 1 cozumpark cozumpark 88 Jul 8 00:01 link_ornek
drwxrwxr-x 3 cozumpark cozumpark 4096 Jul 8 00:50 dir4
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ ls -lrt dir4
total 4
-rw-rw-r– 1 cozumpark cozumpark 0 Jun 24 13:00 file3
-rw-rw-r– 1 cozumpark cozumpark 0 Jun 24 13:00 file2
drwxrwxr-x 2 cozumpark cozumpark 4096 Jul 8 00:31 dir1
[cozumpark@artemis ~]$ mv dir4 /tmp — > dir4’ü tamamen /tmp altına taşıdık.
[cozumpark@artemis ~]$ ls -ld /tmp/dir4 –> dir4’ü ls’in –d seçeneği ile dizin olarak path’ini gördük.
drwxrwxr-x 3 cozumpark cozumpark 4096 Jul 8 00:50 /tmp/dir4
[cozumpark@artemis ~]$ ls –rlt — > Home dizini altında işlem yaptığımız dizinlerin gerçekten taşındığını gördük.
total 12
drwx—— 2 cozumpark cozumpark 4096 Jun 16 20:46 Desktop
-rw-rw-r– 1 cozumpark cozumpark 88 Jul 7 23:43 hard_link
lrwxrwxrwx 1 cozumpark cozumpark 10 Jul 7 23:47 soft_link -> link_ornek
-rw-rw-r– 1 cozumpark cozumpark 88 Jul 8 00:01 link_ornek
Dosya mı, dizin mi, ya da başka ne olabilir?
File: File komutu ile üstünde herhangi bir fikir sahibi olmadığımız dosya veya dizin hakkında içeriğinin ne olduğuna dair sistem bize yardımcı olabiliyor.
File [dosya_veya_dizin_ismi]
Örnek ;
[cozumpark@artemis ~]$ file file1 – > file1 isimli dosyamız boş olduğu için empty olarak gösterdi.
file1: empty
[cozumpark@artemis ~]$ file dir1
dir1: directory
[cozumpark@artemis ~]$ echo “merhaba cozumpark” > file1 ->echo komutu ile file1 dosyasının içine “merhaba cozumpark” yazdırdık.
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ file file1 ->şimdi file1 ascii text dosyası olarak gözüküyor.
file1: ASCII text
(Text) Dosyaları nasıl okurum? (Reading text files)
Cat: Dosyanın tamamını tek seferde ekrana yazar. En çok kullanılan iki seçeneği aşağıdaki tablodadır.
Cat [seçenekler] dosya_ismi
Seçenekler(Options) |
Açıklama |
-E, –show-ends |
Ekrana dosyayı yazarken her satırın sonuna $ karakteri koyar. |
-n |
Dosyayı satır numaraları ile beraber yazar. |
Örnek;
[cozumpark@artemis ~]$ man cat > file1 à cat komutunun manual sayfasını file1 dosyasına yönlendirerek yazdırdık.
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ cat file1 à file1 dosyasını cat ile okuyoruz.
CAT(1) User Commands CAT(1)
NAME
cat – concatenate files and print on the standard output
SYNOPSIS
cat [OPTION] [FILE]…
..
..
More: Dosyayı okurken, dosyayı tek seferde ekrana yazmak yerine, sayfa sayfa halinde getirir. Dosyanın içeriğini ekranda Space tuşu sayfa sayfa,Enter tuşu satır satır ilerletir Dosya içinde arama yapmak istiyorsanız / karakteri deyip, hemen arayacağınız kavramı yazın ve Enter’a basın, başka yerde aramasına devam etsin diyorsanız “n“ ile (next anlamına geliyor) devam edin.
more [seçenekler] dosya_ismi
Seçenekler(Options) |
Açıklama |
-h |
More komutunun seçeneklerini listeler.= |
-n |
Dosyayı satır numaraları ile beraber yazar. |
= |
Bulunduğunuz satır numarasını gösterir. |
/pattern |
Dosya içinde Pattern(kavram) araması yapar. |
f |
Dosya ismini ve satır numarasını gösterir. |
v |
(/usr/bin/vi) VI editörünü bulunduğunuz satırdan başlatır. |
Less: Dosyaları okurken more komutuna benzeyen bir yapıdadır.Fakat büyük dosyaları okumada cat ve more komutlarına gore başarısı yüksektir.İlk seferde dosyanın tamamını okumaya çalışmaz.Dosya okurken ileri ve geri hareketlerde more’dan daha geniş seçenek sunar.
less [seçenekler] dosya_ismi
Dosyaları Başından Itibaren Nasıl Okurum?
Head: Dosyayı başından itibaren okumak isterseniz head komutunu kullanırız. Head komutuna hiçbir seçenek vermez isek sadece standartta ilk 10 satırı okur. –n seçeneğine herhangi bir satır sayısı verirsek dosyanın başından itibaren o kadar satır okur.Mesela more -5 dosya_ismi ile o dosyanın ilk 5 satırını okur.
Head [seçenekler] dosya_ismi
Örnek;
Kısa bir bash script ile file6 isminde kendi içinde satır numaralarını yazan bir dosya oluşturduk.file6 dosyasında 15 satır olacak ve her satırda “bu n. satirdir” ifadesi geçecek.
[cozumpark@artemis ~]$ while [ $c -le 15 ]; do echo “bu $c. satirdir ” >> file6; ((c++)); done
[cozumpark@artemis ~]$ ls -lrt
total 20
drwx—— 2 cozumpark cozumpark 4096 Jun 16 20:46 Desktop
-rw-rw-r– 1 cozumpark cozumpark 88 Jul 7 23:43 hard_link
lrwxrwxrwx 1 cozumpark cozumpark 10 Jul 7 23:47 soft_link -> link_ornek
-rw-rw-r– 1 cozumpark cozumpark 88 Jul 8 00:01 link_ornek
-rw-rw-r– 1 cozumpark cozumpark 246 Jul 8 01:25 file5
-rw-rw-r– 1 cozumpark cozumpark 246 Jul 8 01:32 file6
[cozumpark@artemis ~]$ cat file6 à oluşturduğumuz dosyayı okuduk.
bu 1. satirdir
bu 2. satirdir
bu 3. satirdir
bu 4. satirdir
bu 5. satirdir
bu 6. satirdir
bu 7. satirdir
bu 8. satirdir
bu 9. satirdir
bu 10. satirdir
bu 11. satirdir
bu 12. satirdir
bu 13. satirdir
bu 14. satirdir
bu 15. Satirdir
[cozumpark@artemis ~]$ head file6 à dosyada normalda 15 satır olmasına rağmen ,head komutu seçeneksiz halde standartta sadece ilk 10 satırı verdi.
bu 1. satirdir
bu 2. satirdir
bu 3. satirdir
bu 4. satirdir
bu 5. satirdir
bu 6. satirdir
bu 7. satirdir
bu 8. satirdir
bu 9. satirdir
bu 10. Satirdir
[cozumpark@artemis ~]$ head -3 file6 à ilk 3 satırı okumak istersek –satir_sayisi seçeneğini vermemiz gerekiyor.
bu 1. satirdir
bu 2. satirdir
bu 3. Satirdir
Dosyaları sonundan itibaren nasıl okurum?
Tail: Dosyayı sonundan itibaren okumak istersek tail komutunu kullanırız. Bu komutta head gibi seçenek olmadan kullanılırsa standartta dosyanın son 10 satırını getirir, eğer –satir_sayisi seçeneği kullanılırsa sondan itibaren o kadar satır getirir.
Tail [seçenekler] dosya_ismi
[cozumpark@artemis ~]$ tail file6
bu 6. satirdir
bu 7. satirdir
bu 8. satirdir
bu 9. satirdir
bu 10. satirdir
bu 11. satirdir
bu 12. satirdir
bu 13. satirdir
bu 14. satirdir
bu 15. Satirdir
[cozumpark@artemis ~]$ tail -5 file6
bu 11. satirdir
bu 12. satirdir
bu 13. satirdir
bu 14. satirdir
bu 15. Satirdir
Eğer okuyacağınız dosya log dosyası gibi sürekli içine bir şeyler yazılan ve takip etmeniz gereken bir dosya ise dosyayı sürekli sonundan okuyabilmek için –f seçeneğini kullanmanız gerekir.
Tail –f dosya_ismi
Örnek;
Bu örnekte script ile bir dosyaya konsolun birinden sürekli bir şeyler yazdıracağız. Diğer konsoldan bu dosyayı tail –f ile okuyacağız.
Şimdi önünüzde iki konsol açık olsun.(masaüstü sağ klik à konsole) İkisininde çalışma dizini aynı olsun.Yani pwd komutu ile aynı cevaplar alınmalı.Biz iki konsoldada cozumpark kullanıcısının ev dizinindeyiz.
Birinci konsolda;
[cozumpark@artemis ~]$ c=1
[cozumpark@artemis ~]$ while [ true ]; do echo “bu $c. satirdir ” >> file7; ((c++));sleep 10; done
İkinci konsolda;
[cozumpark@artemis ~]$ tail -f file7
bu 1. satirdir
bu 2. satirdir
bu 3. satirdir
bu 4. Satirdir
..
..
Gördüğünüz gibi her 10 saniyede birinci konsoldaki script çalışıp file7 isimli dosyaya satır numarasını yazacak ve biz tail komutunun –f seçeneği ile diğer konsolda file7 isimli dosyanın sonuna ne yazıldıysa okuduk. İki konsoldaki işlemleri de iptal etmek için Ctrl+C ile çıkabilirsiniz.
Dosyaları Tar ile Arşivlemek
Tar: Tar komutu sistemde yeralan dosyalarınızı arşivlemek için kullanılır. Eğer farklı seçenekler kullanılır ise aynı anda sıkıştırma yapıp arşivleme işlemleride yapabilirsiniz.
Tar [seçenekler] arşiv_ismi arşiv_yapilacak_dosyalar
Seçenekler(Options) |
Açıklama |
-c |
Tar arşivi oluştur.(create) |
-x |
Var olan arşivi aç.(extract) |
-t |
Tar arşivinin içeriğini listele(list) |
-v |
Verbose mode,kullanıcıya ne olup ne bittiğini söyle |
-r |
Var olan bir tar arşivine ekleme yapmak için(add) |
-u |
Var olan bir tar arşivindeki dosyaları yenilemek için(update) |
-z |
Arşivleme ile beraber gzip/gunzip kullanarak sıkıştırma yapar |
-Z |
Arşivleme ile beraber compress/uncompress kullanarak sıkıştırma yapar. |
— remove |
Arşivleme işi bitince dosyaları sil |
Şimdi ev dizinimizde birkaç tane dosya oluşturup arşivleme ve sıkıştırma örnekleri yapacağız. Arşiv ismi verirken biz veriyoruz sistemin bize bir müdahalesi yok, ama kullanımı kolay olması açısından tar ile arşivlediğimiz dosyaları .tar ile, arşivleme+gzip ile sıkıştırma yapıyorsak .tar.gz ile, arşivleme+compress ile sıkıştırma yapıyorsak .tar.Z ile isimlendirme yapalım.
Örnek;
[cozumpark@artemis ~]$ mkdir tar_ornek
[cozumpark@artemis ~]$ cd tar_ornek/
[cozumpark@artemis tar_ornek]$ touch a.log b.log c.log d.log
[cozumpark@artemis tar_ornek]$ man cat> a.log
[cozumpark@artemis tar_ornek]$ man touch> b.log
[cozumpark@artemis tar_ornek]$ man cp> c.log
[cozumpark@artemis tar_ornek]$ man mv> d.log
[cozumpark@artemis tar_ornek]$ tar -cvf a.tar a.log
a.log
[cozumpark@artemis tar_ornek]$ ls -rlt
total 28
-rw-rw-r– 1 cozumpark cozumpark 2460 Jul 16 17:15 a.log
-rw-rw-r– 1 cozumpark cozumpark 3435 Jul 16 17:15 c.log
-rw-rw-r– 1 cozumpark cozumpark 2422 Jul 16 17:18 b.log
-rw-rw-r– 1 cozumpark cozumpark 3435 Jul 16 17:18 d.log
-rw-rw-r– 1 cozumpark cozumpark 10240 Jul 16 17:18 a.tar
[cozumpark@artemis tar_ornek]$ tar -zcvf ab.tar.gz a.log b.log à arşiv ismine dikkat!-z seçeneği ile .gz isme ekledik.
a.log
b.log
[cozumpark@artemis tar_ornek]$ ls -rlt
total 32
-rw-rw-r– 1 cozumpark cozumpark 2460 Jul 16 17:15 a.log
-rw-rw-r– 1 cozumpark cozumpark 3435 Jul 16 17:15 c.log
-rw-rw-r– 1 cozumpark cozumpark 2422 Jul 16 17:18 b.log
-rw-rw-r– 1 cozumpark cozumpark 3435 Jul 16 17:18 d.log
-rw-rw-r– 1 cozumpark cozumpark 10240 Jul 16 17:18 a.tar
-rw-rw-r– 1 cozumpark cozumpark 1793 Jul 16 17:22 ab.tar.gz
[cozumpark@artemis tar_ornek]$ tar -zcvf loglar.tar.gz *.log –remove à dosyaları arşivledik ve sildik
a.log
b.log
c.log
d.log
[cozumpark@artemis tar_ornek]$ ls -rlt
total 36
-rw-rw-r– 1 cozumpark cozumpark 10240 Jul 16 17:18 a.tar
-rw-rw-r– 1 cozumpark cozumpark 1793 Jul 16 17:22 ab.tar.gz
-rw-rw-r– 1 cozumpark cozumpark 2799 Jul 16 17:52 loglar.tar.gz
[cozumpark@artemis tar_ornek]$ tar -xvf a.tar à Arşivli dosyayı açmak
[cozumpark@artemis tar_ornek]$ ls -rlt
total 24
-rw-rw-r– 1 cozumpark cozumpark 2460 Jul 16 17:15 a.log
-rw-rw-r– 1 cozumpark cozumpark 10240 Jul 16 17:18 a.tar
-rw-rw-r– 1 cozumpark cozumpark 1793 Jul 16 17:22 ab.tar.gz
-rw-rw-r– 1 cozumpark cozumpark 2799 Jul 16 17:53 loglar.tar.gz
[cozumpark@artemis tar_ornek]$ tar -tvf loglar.tar.gz à Arşivli dosyanın için listelemek
-rw-rw-r– cozumpark/cozumpark 2460 2011-07-16 17:15:22 a.log
-rw-rw-r– cozumpark/cozumpark 2422 2011-07-16 17:18:10 b.log
-rw-rw-r– cozumpark/cozumpark 3435 2011-07-16 17:15:35 c.log
-rw-rw-r– cozumpark/cozumpark 3435 2011-07-16 17:18:18 d.log
[cozumpark@artemis tar_ornek]$ echo “icerik degisti” >> a.log
[cozumpark@artemis tar_ornek]$ tar -uvf loglar.tar.gz a.log àgzip ile sıkıştırılmış dosyalar update edilemez,arşivi açmanız gerekir
tar: Read 2799 bytes from loglar.tar.gz
tar: This does not look like a tar archive
tar: Skipping to next header
a.log
tar: Error exit delayed from previous errors
[cozumpark@artemis tar_ornek]$ gunzip loglar.tar.gz à arşivi sıkıştırılmamış hale getirdik
gunzip: loglar.tar.gz: decompression OK, trailing garbage ignored
[cozumpark@artemis tar_ornek]$ tar -uvf loglar.tar a.log à sonra a.log dosyasını tar arşivi içinde update ettik.
a.log
[cozumpark@artemis tar_ornek]$ tar -tvf loglar.tar
-rw-rw-r– cozumpark/cozumpark 2460 2011-07-16 17:15:22 a.log
-rw-rw-r– cozumpark/cozumpark 2422 2011-07-16 17:18:10 b.log
-rw-rw-r– cozumpark/cozumpark 3435 2011-07-16 17:15:35 c.log
-rw-rw-r– cozumpark/cozumpark 3435 2011-07-16 17:18:18 d.log
-rw-rw-r– cozumpark/cozumpark 2475 2011-07-16 18:00:21 a.log
UYARI!! : Tar komutu ile dikkat edilmesi gereken önemli bir nokta sıkıştırmanın nerede yapılacağıdır.
Mesela cozumpark kullanıcısının ev dizininde yani /home/cozumpark altindaki bütün dosyaları arşivlemek için şu iki yöntem birbiriyle farklılık gösterir,
1- tar –cvf cozumpark.tar /home/cozumpark/* (arşivlemeyi absolute path ile yapmak)
2- cd /home/cozumpark; tar –cvf cozumpark.tar ./* (arşivlemeyi relative path ile,yani bulunulan yerde/yere göre yapmak)
Birinci yöntemde arşiv açılmak istendiğinde eğer açılan yerde /home/cozumpark dizini yok ise sistem o dizini oluşturmaya çalışır ve sonra onun altina dosyaları arşivden çıkarır.
İkinci yöntemde arşiv açılmak istendiğinde komutun çalıştırıldığı yere arşiv dosyalarını çıkartır.
Dosyaları Gzip veya Zip ile Sıkıştırmak
Gzip/gunzip, Zip/unzip: Dosyalarda sıkıştırma işlemi yapılmak istendiğinde gzip ve zip komutları kullanılabilir. İkiside sıkıştırma işlevi görür ama sıkıştırma algoritmaları ve oranları birbirinden farklıdır.
Gzip [seçenekler] sıkıştırılacak_dosyalar
Seçenekler(Options) |
Açıklama |
-d |
Sıkıştırmayı aç |
-f |
Dosyalar açılırken bir benzerleri varsa üstüne yaz |
-h |
Help |
-l |
Sıkıştırılmış dosyanın içeriğini listele |
-r |
Eğer sıkıştırma dizin üstünde yapılıyorsa dizin altındakiler almak için kullanılır. |
-v |
Verbose mode,kullanıcıya ne olup ne bittiğini söyle |
-1 / -9 |
-1 ile sıkıştırmayı çok hızlı yapar,ama sıkıştırma oranı düşük olur,-9 ile sıkıştırma hızı düşük ama sıkıştırma oranı yüksek olur. |
[cozumpark@artemis zip_ornek]$ gzip a.log b.log — > a.log ve b.log dosyalarını gzip ile sıkıştırdık.
[cozumpark@artemis zip_ornek]$ ls –rlt — > dosya uzantıları .gz olarak değişti gördüğünüz gibi.
total 20
-rw-rw-r– 1 cozumpark cozumpark 1122 Jul 16 19:14 a.log.gz
-rw-rw-r– 1 cozumpark cozumpark 2424 Jul 16 19:15 b.log.gz
-rw-rw-r– 1 cozumpark cozumpark 2422 Jul 16 19:16 d.log
-rw-rw-r– 1 cozumpark cozumpark 3435 Jul 16 19:16 c.log
-rw-rw-r– 1 cozumpark cozumpark 1240 Jul 16 19:16 a.zip
[cozumpark@artemis zip_ornek]$ gzip -d a.log.gz — > -d seçeneği ile sıkıştırmayı açtık.
[cozumpark@artemis zip_ornek]$
[cozumpark@artemis zip_ornek]$ ls -lrt a.log
-rw-rw-r– 1 cozumpark cozumpark 2460 Jul 16 19:14 a.log
[cozumpark@artemis zip_ornek]$
[cozumpark@artemis zip_ornek]$ gunzip b.log.gz — > sıkıştırmayı açmak için isterseniz –d seçeneği yerine gunzip komutunu kullanabilirsiniz.
[cozumpark@artemis zip_ornek]$
[cozumpark@artemis zip_ornek]$ ls -lrt b.log
-rw-rw-r– 1 cozumpark cozumpark 6275 Jul 16 19:15 b.log
zip [seçenekler] dosya_ismi sıkıştırılacak_dosyalar
Seçenekler(Options) |
Açıklama |
-h |
Help |
-r |
Eğer sıkıştırma dizin üstünde yapılıyorsa dizin altındakiler almak için kullanılır. |
-v |
Verbose mode, kullanıcıya ne olup ne bittiğini söyle |
-1 / -9 |
-1 ile sıkıştırmayı çok hızlı yapar, ama sıkıştırma oranı düşük olur,-9 ile sıkıştırma hızı düşük ama sıkıştırma oranı yüksek olur. |
[cozumpark@artemis ~]$ cd
[cozumpark@artemis ~]$ mkdir zip_ornek;cd zip_ornek — > kendimize zip komutu için bir yer oluşturduk
[cozumpark@artemis zip_ornek]$ touch a.log b.log c.log d.log
[cozumpark@artemis zip_ornek]$ ls -rtl
total 0
-rw-rw-r– 1 cozumpark cozumpark 0 Jul 16 19:13 d.log
-rw-rw-r– 1 cozumpark cozumpark 0 Jul 16 19:13 c.log
-rw-rw-r– 1 cozumpark cozumpark 0 Jul 16 19:13 b.log
-rw-rw-r– 1 cozumpark cozumpark 0 Jul 16 19:13 a.log
[cozumpark@artemis zip_ornek]$ zip a.zip a.log — > a.log dosyasını sıkıştırdık ve a.zip ismini verdik.
adding: a.log (deflated 55%)
[cozumpark@artemis zip_ornek]$ ls –rtl — > a.zip’in o dizin altında olduğunu gördük.
total 24
-rw-rw-r– 1 cozumpark cozumpark 2460 Jul 16 19:14 a.log
-rw-rw-r– 1 cozumpark cozumpark 6275 Jul 16 19:15 b.log
-rw-rw-r– 1 cozumpark cozumpark 2422 Jul 16 19:16 d.log
-rw-rw-r– 1 cozumpark cozumpark 3435 Jul 16 19:16 c.log
-rw-rw-r– 1 cozumpark cozumpark 1240 Jul 16 19:16 a.zip
[cozumpark@artemis zip_ornek]$ unzip a.zip à sıkıştırmayı unzip komutu ile açtık.
Archive: a.zip
replace a.log? [y]es, [n]o, [A]ll, [N]one, [r]ename: y — > aynı dizinde o dosyadan olduğunu anladı ve bize ne yapmak istediğimizi sordu,bizde replace et dedik.
inflating: a.log
[cozumpark@artemis zip_ornek]$cd — > tekrar Home dizinimize döndük
[cozumpark@artemis ~]$ ls –rtl zip_ornek
drwxrwxr-x 2 cozumpark cozumpark 4096 Jul 16 19:25 zip_ornek
[cozumpark@artemis ~]$ zip -r zip_ornek.zip zip_ornek — > az önce oluşturduğumuz ornek dosyayı içindekilerle beraber –r seçeneği ile sıkıştırdık.
adding: zip_ornek/ (stored 0%)
adding: zip_ornek/a.log (deflated 55%)
adding: zip_ornek/c.log (deflated 57%)
adding: zip_ornek/d.log (deflated 53%)
adding: zip_ornek/a.zip (stored 0%)
adding: zip_ornek/b.log (deflated 62%)
[cozumpark@artemis ~]$ ls –lrt zip_ornek.zip
-rw-rw-r– 1 cozumpark cozumpark 8229 Jul 17 00:13 zip_ornek.zip
Standart Giriş,Çıkış,Hata Yönlendirme,Komut Çıktısını Yönlendirme
Unix&Linux sistemlerde bir komut çalıştırıldığı vakit , o komut veya iş için 3 adet dosya işaretcisi “file descriptor” denilen Input/Output(I/O) stream,kanalı açılır.
Bunlar
Standart giriş(Standart input (stdin),0 ile temsil edilir); Çalışan programın giriş/input kaynağını belirtmek için kullanılır, varsayılan giriş kaynağı terminaldir, çalıştığımız konsoldur.
Standart çıkış(Standart output(stdout), 1 ile temsil edilir);Çalışan programın normal çıktısını/output yönledirmek için kullanılır, varsayılan kaynak terminaldir, çalıştığımız konsoldur.
Standart hata(Standart error(stderr) ,2 ile temsil edilir); Çalışan programın hata çıktısını/error yönledirmek için kullanılır, varsayılan kaynak terminaldir, çalıştığımız konsoldur.
Numara |
Isim |
Tanımlama |
0 |
stdin |
Standart in |
1 |
stdout |
Standart out |
2 |
stderr |
Standart error |
Ayrıca bir komutun çıktısını, diğer komutun girişi yapmak için “|” işareti kullanılır.Pipe(boru) diyede anılır.İki komut arasında çıktının taşınması gibi bir işlev gördüğü için pipe denilmiştir.
Komut1|komut2 à Komut1’in çalışması neticesinde çıkan output/çıkışı, komut2’nin input/girişi olur.
Standart Girişin Yönlendirilmesi
Standart giriş’e terminal ekranından bir input verilmediğinde,”<” işareti ile yönlendirme yapılabilir.
Şimdi yonlendir isminde bir dosya oluşturup stdin’den bir dosya ismi bekleyen cat komutuna “<” işareti ile dosyayı vereceğiz.
[cozumpark@artemis ~]$ echo “selam,yonlendirme ornekleri” >> yonlendir
[cozumpark@artemis ~]$ ls -lrt yonlendir
-rw-rw-r– 1 cozumpark cozumpark 27 Jul 17 00:36 yonlendir
[cozumpark@artemis ~]$ cat < yonlendir
selam,yonlendirme ornekleri
Mesela,cat komutunun stdin’dne input beklediğini şu şekilde gösterebiliriz, cat yazın Enter’a basın sonra selam yazın ,size echo yani yankı verecektir.
[cozumpark@artemis ~]$ cat
Selam
Selam
Standart Çıkış ve Hatanın Yönlendirilmesi
Standart çıkış ve hata yönlendirmesini “>” veya “>>”karakteri ile yapacağız.
Komut n>dosya
Burada n karakteri verilmez veya standart çıkış olan 1 verilirse, komutun standart çıktısı dosyaya yönlendirilir.
N karakteri yerine 2 verilirse komutun çalışması neticesinde alınan hatalar dosyaya yönlendirilir.
Yönlendirmedeki yönlendirme işaretinin tek olması “>”,eğer yönlendirilecek dosya yok ise oluşturulur, dosya var ise içini sıfırlar ve çıktıyı yönlendirir.
Yönlendirmedeki yönlendirme işaretinin çift olması “>>”,eğer yönlendirilecek dosya yok ise oluşturulur, dosya var ise çıktıyı dosyanın sonuna yönlendirir.
UYARI!!: “>” yönlendirmesi var olan dosyalar var ise içeriğini uçurduğu için kullanırken dikkat edilmeli.
Yönlendirme |
Gösterimi |
Sdtout’u dosyaya yönlendir |
Komut > dosya |
Sdterr’yi dosyaya yönlendir |
Komut 2> dosya |
Sdtout ve sdterr’yi aynı dosyaya yönlendir |
Komut > dosya 2>&1, |
Sdtin’i dosyadan okumak |
Komut < dosya |
Sdtout’u dosyanın sonuna yönlendir |
Komut >> dosya |
Sdterr’i dosyanın sonuna yönlendir |
Komut 2>> dosya |
Sdtout’u ve sdterr’i dosyanın sonuna yönlendir |
Komut >> dosya 2>&1 |
Komut1 çıktısını,komut2’nin girişi yapmak |
Komut1|komut2 |
Örnek;
[cozumpark@artemis ~]$ mkdir io;cd io
[cozumpark@artemis io]$ touch a.log b.log c.log
[cozumpark@artemis io]$ man cp> a.log
[cozumpark@artemis io]$ man mv> b.log
[cozumpark@artemis io]$ man touch>c.log
a.log dosyasını listeledik ve a_dosya_cikti dosyasına yönlendirdik,normal ls komutunun çıktısı bu dosyanın içine yazılacak.
[cozumpark@artemis io]$ ls -lrt
total 16
-rw-rw-r– 1 cozumpark cozumpark 6275 Jul 17 01:07 a.log
-rw-rw-r– 1 cozumpark cozumpark 3435 Jul 17 01:07 b.log
-rw-rw-r– 1 cozumpark cozumpark 2422 Jul 17 01:07 c.log
[cozumpark@artemis io]$ ls -lrt a.log > a_dosya_cikti
[cozumpark@artemis io]$
[cozumpark@artemis io]$ cat a_dosya_cikti
-rw-rw-r– 1 cozumpark cozumpark 6275 Jul 17 01:07 a.log
Olmayan bir dosyayı(b_yanlis.log) listelemek istediğimizde normal çıktıyı b_dosya_cikti dosyasına,hataları b_dosya_cikti_hata dosyasına yönlendirdik. Dolayısıyla aradığımız dosya olmadığı için hata dosyasında hatanın yazması gerekli.
[cozumpark@artemis io]$ ls -lrt b_yanlis.log > b_dosya_cikti 2> b_dosya_cikti_hata
[cozumpark@artemis io]$
[cozumpark@artemis io]$ cat b_dosya_cikti
[cozumpark@artemis io]$
[cozumpark@artemis io]$ cat b_dosya_cikti_hata
ls: b_yanlis.log: No such file or directory
Normal çıktıyı ve hatayı aynı dosyaya b_dosya_ortak_cikti ya yönlendirdik.
[cozumpark@artemis io]$ ls -lrt b_yanlis > b_dosya_ortak_cikti 2>&1
[cozumpark@artemis io]$
[cozumpark@artemis io]$
[cozumpark@artemis io]$ cat b_dosya_ortak_cikti
ls: b_yanlis: No such file or directory
[cozumpark@artemis io]$
[cozumpark@artemis io]$
[cozumpark@artemis io]$ ls -lrt b_yanlis *.log > b_dosya_ortak_cikti 2>&1
[cozumpark@artemis io]$
[cozumpark@artemis io]$
[cozumpark@artemis io]$ cat b_dosya_ortak_cikti
ls: b_yanlis: No such file or directory
-rw-rw-r– 1 cozumpark cozumpark 6275 Jul 17 01:07 a.log
-rw-rw-r– 1 cozumpark cozumpark 3435 Jul 17 01:07 b.log
-rw-rw-r– 1 cozumpark cozumpark 2422 Jul 17 01:07 c.log
Tee; Standart girişten okuduğunu, hem standart çıkışa hem de belirtilen dosyaya yazar.
Tee [seçenekler] dosya
Seçenek(Options) |
Açıklama |
-a,–append |
Verilen dosyanın sonuna yaz |
-i |
İnterrupt sinyallerini göz ardı et. |
–help |
Yardımi görüntüle |
–version |
Versiyonu görüntüle |
[cozumpark@artemis io]$ echo “selam tee ornek” > ornek.out
[cozumpark@artemis io]$ ls -rlt ornek.out
-rw-rw-r– 1 cozumpark cozumpark 16 Jul 17 01:53 ornek.out
[cozumpark@artemis io]$
[cozumpark@artemis io]$ cat ornek.out
selam tee ornek
Cat komutu ile ornek.out’u okurken,tee komutu kenardan kenardan yazılanları okudu ve hem standart çıkışa hem de tee.out dosyasına yazdı.
[cozumpark@artemis io]$ cat ornek.out | tee tee.out
selam tee ornek
[cozumpark@artemis io]$ cat tee.out
selam tee ornek
[cozumpark@artemis ~]$ mkdir teee
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ cd teee/
[cozumpark@artemis teee]$
[cozumpark@artemis teee]$
[cozumpark@artemis teee]$ ls -rlt |tee tee_cikti1.out tee_cikti2.out tee_cikti3.out — > ilk önce dizin boşken çıktı dosyalarını oluşturdu,dosyalar oluştuktan sonra ls’le listeledi,ls’in çıktısını o dosyaların içine yazdı.
total 3
-rw-rw-r– 1 cozumpark cozumpark 0 Jul 17 02:00 tee_cikti3.out
-rw-rw-r– 1 cozumpark cozumpark 0 Jul 17 02:00 tee_cikti2.out
-rw-rw-r– 1 cozumpark cozumpark 0 Jul 17 02:00 tee_cikti1.out
[cozumpark@artemis teee]$
[cozumpark@artemis teee]$ ls -lrt
total 16
-rw-rw-r– 1 cozumpark cozumpark 263 Jul 17 02:00 tee_cikti3.out
-rw-rw-r– 1 cozumpark cozumpark 263 Jul 17 02:00 tee_cikti2.out
-rw-rw-r– 1 cozumpark cozumpark 263 Jul 17 02:00 tee_cikti1.out
[cozumpark@artemis teee]$ cat tee_cikti1.out
total 4
-rw-rw-r– 1 cozumpark cozumpark 0 Jul 17 02:00 tee_cikti3.out
-rw-rw-r– 1 cozumpark cozumpark 0 Jul 17 02:00 tee_cikti2.out
-rw-rw-r– 1 cozumpark cozumpark 0 Jul 17 02:00 tee_cikti1.out
Dosyalarda Metin Taraması ve Içerik Kontrolü Yapmak
Grep,Egrep,Fgrep; Unix&Linux sistemlerde dosyalar içerisinde metin taraması yapmak istiyorsanız Grep,Egrep,Fgrep komutlarını kullanırız. Grep ve Egrep komutları ile bir veya birden fazla dosya içinde sadece bir karakter,bir dizi karakter,bir kelime veya bir cümle halinde,yada regular expression(regex) ifadeleri ile metin(pattern) araması yapabilirsiniz. Fgrep komutu ile regex kullanamazsınız sadece bir dizi karakter taraması yapabilirsiniz.
Grep; Grep komutları ailesinin yaptığı şey dosya içinde satır satır gezinerek dosyanın orjinaline zarar vermeden aradığınız ifadeyi ekrana veya yönlendirdiğiniz başka bir dosyaya yazmaktır.
Hepsinin kullanım şekli aynıdır.
grep [seçenekler] aranacak_ifade(pattern) dosya_ismi
-w seçeneği hariç diğer bütün seçenekler egrep ve fgrep tarafında kullanılabilir.
Seçenek(Options) |
Açıklama |
-i |
Büyük ,küçük harf ayırt etmeden arar. |
-l |
Aranan ifadeyi barındıran dosyaların isimlerini listeler |
-n |
Aranan ifadenin dosya içinde geçtiği yerleri satır numaraları ile verir. |
-c |
Aranan ifadenin geçtiği satırların toplam sayısını verir. |
-w |
Aranan ifadeyi sadece kendisinin geçtiği satırları verir, substring(alt karakter kümesi) olarak geçtiği yerleri almaz. |
-v |
Aranan ifadenin olmadığı satırları verir.yani tam tersi. |
Örnek;
[root@artemis ~]# cd;mkdir grep_ornek; cd grep_ornek/
[root@artemis grep_ornek]# touch a.txt b.txt
[root@artemis grep_ornek]# echo “1.cozumpark,ali,veli,deli” > a.txt
[root@artemis grep_ornek]# echo “2.cozumpark,ALI,veli,geli” >> a.txt
[root@artemis grep_ornek]#
[root@artemis grep_ornek]# echo “3.COZUMPARK,Ali,celi,keli” >> a.txt
[root@artemis grep_ornek]#
[root@artemis grep_ornek]# echo “1.burak,kulak,veli,deli” >> b.txt
[root@artemis grep_ornek]#
[root@artemis grep_ornek]# echo “2.kurak,kabakulak,reli,teli” >> b.txt
[root@artemis grep_ornek]# cat a.txt
1.cozumpark,ali,veli,deli
2.cozumpark,ALI,veli,geli
3.COZUMPARK,Ali,celi,keli
[root@artemis grep_ornek]# cat b.txt
1.burak,kulak,veli,deli
2.kurak,kabakulak,reli,teli
[root@artemis grep_ornek]# ls -rlt
total 8
-rw-r–r– 1 root root 78 Jul 17 19:08 a.txt
-rw-r–r– 1 root root 52 Jul 17 19:08 b.txt
[root@artemis grep_ornek]# grep -i cozumpark *.txt — > büyük/küçük harf önemsiz olarak cozumpark kelimesini bütün sonu “.txt” ile biten dosyalarda ara
a.txt:1.cozumpark,ali,veli,deli
a.txt:2.cozumpark,ALI,veli,geli
a.txt:3.COZUMPARK,Ali,celi,keli
[root@artemis grep_ornek]#
[root@artemis grep_ornek]#
[root@artemis grep_ornek]# grep -w cozumpark *.txt — > sadece cozumpark ifadesi gecen satırları getir.
a.txt:1.cozumpark,ali,veli,deli
a.txt:2.cozumpark,ALI,veli,geli
[root@artemis grep_ornek]#
[root@artemis grep_ornek]#
[root@artemis grep_ornek]# grep -w veli *.txt
a.txt:1.cozumpark,ali,veli,deli
a.txt:2.cozumpark,ALI,veli,geli
b.txt:1.burak,kulak,veli,deli
[root@artemis grep_ornek]#
[root@artemis grep_ornek]# grep -v veli *.txt
a.txt:3.COZUMPARK,Ali,celi,keli
b.txt:2.kurak,kabakulak,reli,teli
[root@artemis grep_ornek]#
[root@artemis grep_ornek]#
[root@artemis grep_ornek]# grep -vl veli *.txt
a.txt
b.txt
[root@artemis grep_ornek]# grep -vcl veli *.txt
a.txt
b.txt
[root@artemis grep_ornek]# grep -vc veli *.txt
a.txt:1
b.txt:1
Dosyalar içerisinde metin taraması yaparken regex metakarakterleri elimizi güçlendirecek. Bu metakarekterleri grep’le beraber Unix&Linux sistemlerde her komutun içinde kullanabilirsiniz. Ama regex’leri ençok kullandığımız komutlar grep ailesi ve find komutu.
Regular Expression Metakarakterleri
Metakarakter |
Kapsam |
Örnek |
Sonuç |
^ |
Satır başını belirtir. |
‘^silgi’ |
Satır başlarında “silgi” geçen bütün satırları getirir. |
$ |
Satır sonlarını belirtir. |
‘kalem$’ |
Satır sonları “kalem” ile biten satırları getirir. |
. |
Sadece bir karakter ile eşleşir,bir karakter ifade eder |
‘ if..e’ |
“if” ile başlayan sonra herhangi iki karakter gelen ve sonu “e” ile biten ifadeler geçen satırları getirir. |
* |
Kendinden önceki karakterden 0 veya daha fazla olmasını belirtir |
‘[a-z]*’ |
Küçük alfabetik karakterlerle eşleşir veya hiçbirşeyle eşleşmez. |
[ ] |
Köşeli Parantez içindeki karakterlerden sadece biriyle eşleşir. |
‘[Kk]alem’ |
Kalem veya kalem içeren satırları getirir. |
[^] |
Köşeli parantez içinde olmayan karakterlerle eşleşir. |
‘[^a-t]alak’ |
A ile t harfleri dahil ve bunların arasındaki harflerle başlamayacak ve “alak” ile devam edecek satırlar. |
Şimdi az önce oluşturduğumuz grep_ornek dizini altındaki b.txt isimli dosyaya bazı eklemeler yaparak regex’leri kullanacağız.
Örnek2;
[cozumpark@artemis grep_ornek]$ echo “vatan,catan,katan,satan,sapan”>> b.txt
[cozumpark@artemis grep_ornek]$ echo “anavatan,yurt,kurt,durt,tello” >> b.txt
[cozumpark@artemis grep_ornek]$ echo “yavruvatan,alo,kaylo,caylo,neman” >> b.txt
[cozumpark@artemis grep_ornek]$ cat b.txt
1.burak,kulak,veli,deli
2.kurak,kabakulak,reli,teli
vatan,catan,katan,satan,sapan
anavatan,yurt,kurt,durt,tello
yavruvatan,alo,kaylo,caylo,neman
[cozumpark@artemis grep_ornek]$ grep -n ^vatan b.txt à satır başında “vatan” kelimesi ile başlayan satırları getirir.
3:vatan,catan,katan,satan,sapan
[cozumpark@artemis grep_ornek]$ grep -n an$ b.txt — > satır sonları “an” ile biten satırları getirir.
3:vatan,catan,katan,satan,sapan
5:yavruvatan,alo,kaylo,caylo,neman
[cozumpark@artemis grep_ornek]$ grep -n ‘…lo’ b.txt — > 5 harfli olan ve sonu “lo” ile biten kelimelerin geçtiği satırları getirir.
4:anavatan,yurt,kurt,durt,tello
5:yavruvatan,alo,kaylo,caylo,neman
[cozumpark@artemis grep_ornek]$ grep -n ‘[a-z]’vatan b.txt — > içinde “vatan” ifadesi olacak ama başına herhangi bir veya birden fazla harf gelebilecek olan kelimelerin olduğu satırları getirir.
4:anavatan,yurt,kurt,durt,tello
5:yavruvatan,alo,kaylo,caylo,neman
[cozumpark@artemis grep_ornek]$ grep -n ‘[a-z]’*vatan b.txt — > içinde “vatan” ifadesi olacak ama başında herhangi bir veya birden fazla harf olmayabilecek olan kelimelerin olduğu satırları getirir.
3:vatan,catan,katan,satan,sapan
4:anavatan,yurt,kurt,durt,tello
5:yavruvatan,alo,kaylo,caylo,neman
[cozumpark@artemis grep_ornek]$ grep -w sa[tp]an b.txt — >ifadenin başında “sa” ,sonunda “an” olan, ortasında t veya p harflerinden biri olan satırları getirir.
vatan,catan,katan,satan,sapan
egrep; Şimdi egrep komutunu inceleyeceğiz, egrep komutu “extended regular expression” diye bilinir, yukarıda görmüş olduğumuz metakarakterlerden farklı olarak egreple birkaç metakarakter daha eklenir.
egrep [seçenekler] aranacak_ifade(pattern) dosya_ismi
Metakarakter |
Kapsam |
Örnek |
Sonuç |
+ |
Kendinden önceki karakter en az 1 veya daha fazla karakteri ifade eder. |
[a-z]+tane |
En az bir küçük harf veya daha fazlası olacak sonra tane ile devam edecek kelimeler.Hastane,pastane,yatakhane gibi kelimeler türetilebilir. |
X|Y |
Ya X’i ,ya da Y’i ifade eder. İkisinden birisi. |
Kavun|Karpuz |
Satırda Kavun veya Karpuz geçen ifadeleri getirir. |
Örnek;
[root@artemis grep_ornek]# echo “kulak,dala,beli” >> b.txt
[root@artemis grep_ornek]# echo “ckulak,cala,reli” >> b.txt
[root@artemis grep_ornek]# cat b.txt
1.burak,kulak,veli,deli
2.kurak,kabakulak,reli,teli
kulak,dala,beli
ckulak,cala,reli
[root@artemis grep_ornek]# egrep [a-z]+kulak b.txt — > sonunda kulak ifadesi olacak ve başında en az bir veya birden fazla harf gelecek.
2.kurak,kabakulak,reli,teli
ckulak,cala,reli
[root@artemis grep_ornek]# egrep ‘kurak|beli’ b.txt — > kurak veya beli ifadeleri geçen satırları getirir.
2.kurak,kabakulak,reli,teli
kulak,dala,beli
fgrep; Fgrep komutu metakarakterleri düz karakter olarak algılar yani ‘*’ ın herhangi bir anlamı yoktur. Yıldız ifadesi geçen satırları getirir. Dümdüz arama yapar.Verdiğiniz string’I birşeylere yorayım derdinde değildir. Seçenek olarak grep komutundaki seçenekleri burada da kullanabilirsiniz.
fgrep [seçenekler] aranacak_ifade(pattern) dosya_ismi
[root@artemis grep_ornek]# echo “fgrep * i sadece yildiz olarak anlayacak”>> fgrep.txt
[root@artemis grep_ornek]# cat fgrep.txt
1.burak,kulak,veli,deli
2.kurak,kabakulak,reli,teli
kulak,dala,beli
ckulak,cala,reli
fgrep * i sadece yildiz olarak anlayacak
[root@artemis grep_ornek]# fgrep -n ‘*’ b.txt — > içinde yıldız karakteri geçen satırı getirir.
5:fgrep * i sadece yildiz olarak anlayacak
wc; word count kısaca wc olarak geçen komut bir text dosyası içindeki satır sayısını, karakter sayısını, kelime sayısını verir.
Wc [seçenekler] dosya_ismi Seçenekler(Options) |
Açıklama |
-c |
Dosyayı byte olarak ifade eder. |
-m |
Dosyadaki karakter sayısını verir. |
-l |
Dosyadaki satır sayısını verir. |
-w |
Dosya içerisindeki kelimeleri sayar. |
Örnek;
[root@artemis ~]#cd
[root@artemis ~]# mkdir wc_ornek;cd wc_ornek
[root@artemis wc_ornek]# echo “elma armut ceviz” >> wc.txt
[root@artemis wc_ornek]#
[root@artemis wc_ornek]# echo “seftali kavun” >> wc.txt
[root@artemis wc_ornek]#
[root@artemis wc_ornek]# cat wc.txt
elma armut ceviz
seftali kavun
[root@artemis wc_ornek]# wc wc.txt
2 5 31 wc.txt à2- satır sayısını,5-kelime adedini,31-toplam karakter sayısını veriyor.
Sort; Text dosyası içindeki satırları alfabetik olarak sıralama yapar. Dosyanın içine girmeden veya başka bir programa ihtiyaç olmadan dosyanızdaki değerleri sort komutu ile sıralayabilirsiniz.
Sonuçlar için bir dosya belirtmediğiniz sürece çıktıyı ekrana basar.
Seçenekler(Options) |
Açıklama |
-b |
Boş satırları geçer,göz ardı eder. |
-d |
Sözlük sıralaması yapar. |
-f |
Dosyadaki satır sayısını verir. |
-n |
Numeric-Sayısal sıralama yapar. |
-r |
Tersine sıralama yapar. |
-k pos1 pos2 |
Pos1. Sıradaki ifadelerden pos2.’ye kadar olan aradaki ifadeleri sıralar. |
-o cikti_dosyası |
Sıralamanın cevabını dosyaya yazar. |
-tx |
X’i ayıraç olarak kullanır. X’in yerine , veya : kullanılabilir. |
-u |
Sıralama yapıldıktan sonra birbirine benzeyen satırlar varsa sadece bir tanesini yazar. |
Örnek;
[cozumpark@artemis sort_ornek]$ cat borc2.out
ahmet araba:500:eskisehir
tom ev:400:antalya
veli yat:200:side
mehmet kira:20:mugla
[cozumpark@artemis sort_ornek]$ sort borc2.out — > borc2.out dosyasını ilk kelimelerine göre sıralar.
ahmet araba:500:eskisehir
mehmet kira:20:mugla
tom ev:400:antalya
veli yat:200:side
[cozumpark@artemis sort_ornek]$
[cozumpark@artemis sort_ornek]$ sort -t: +1 -2 borc2.out — > : karakterini ayıraç olarak kullanıp,ayrılmış kolonlardan 2. Sine göre sıralama yap
mehmet kira:20:mugla
veli yat:200:side
tom ev:400:antalya
ahmet araba:500:eskisehir
[cozumpark@artemis sort_ornek]$ sort -t: +2 -3 borc2.out — > : karakterini ayıraç olarak kullanıp,ayrılmış kolonlardan 3. Süne göre sıralama yap
tom ev:400:antalya
ahmet araba:500:eskisehir
mehmet kira:20:mugla
veli yat:200:side
[cozumpark@artemis sort_ornek]$ sort -t: -k 2,2 borc2.out– > : karakterini ayıraç olarak kullanıp,ayrılmış kolonlardan 2. Sine göre sıralama yap
mehmet kira:20:mugla
veli yat:200:side
tom ev:400:antalya
ahmet araba:500:eskisehir
[cozumpark@artemis sort_ornek]$ sort -t: -k 3,4 borc2.out -o siralama.out— > : karakterini ayıraç olarak kullanıp,ayrılmış kolonlardan 3 ile varsa 4. Kolan arasını sıralama yap
[cozumpark@artemis sort_ornek]$ cat siralama.out
tom ev:400:antalya
ahmet araba:500:eskisehir
mehmet kira:20:mugla
veli yat:200:side
Aradığımı bulamıyorum, dosyalarım ve dizinlerim nerede?
Find: Sistemde dosya veya dizin araması yapmak istediğimizde find komutunu kullanırız. Aldığı seçenekler ve paremetrelerle çok güçlü bir komuttur. İstediğiniz türde, istediğiniz şekilde dosya ve dizinleri arayıp, onlar üstünde istediğiniz değişikliği gerçekleştirebilirsiniz.
Find [aranmaya_baslanacak_bolge] [seçenekler] yapılacak_islem
Find komutundaki [aranmaya_baslanacak_bolge] ifadesi aramanın başlayacağı noktayı gösterir.Aradığınız şeyin nerede olduğunu biliyorsanız arama zamanını kısaltmak için o dizinin altından başlatabilirsiniz;mesela tmp altında ise /tmp,bulunduğunuz yerin altında ise sadece “.” gibi,eğer bilmiyorsanız sadece “/” vererek File System’de baştan aşağıya her yeri aramasını isteyebilirsiniz. Ama yetkili bir kullanıcı(root ) değilseniz “/” itibaren aramalarda istediğiniz cevaplar gelmeyebilir.Ayrıca find komutu arama esnasında kriterlere uygun dosya ve dizin bulamazsa komutun çıktısına bir şey gelmez. Yani herhangi Output göremezsiniz.
Find komutunda seçeneklerde sayısal arguman alan ifadelerde +/- işaretleri vardır, bunlar
+sayı = o sayıdan büyük değerleri,+t_süresi olursa t zamanından sonraki değişiklikleri
-sayı= o sayıdan küçük değerleri, -t_süresi olursa t zamanından önceki değişiklikleri
Sayı= sayının kendisini gösterir.
Seçenekler(Options) |
Açıklama |
-name [expression] |
En sık kullanılan seçenektir. Dosya veya dizin ismi vererek arama yapılmasını sağlar. –name “cozum.log” , -name “*.log” gibi |
-user [kullanıcı_ismi] |
Kullanıcı ismi veya kullanıcı id’si vererek o kullanıcaya ait dosya veya dizinleri bulur. –user cozumpark gibi |
-type [bcdflsp] |
Türüne göre arama yapmak için belirtilen seçeneklerden biri kullanılmalı. Bu seçeneklerin kısa açıklamaları şöyledir. |
-group [grup_ismi] |
Dosya veya dizinin grubunu belirterek arama yapabiliriz. |
-perm [izin] |
Belirtilen izne sahip dosya veya dizinleri arama yapar. |
-size [+/-dosya_boyutu] |
Aranılan dosya veya dizinin boyutuna göre arama yapmak için kullanılır. |
-nouser |
Hiçbir kullanıcya ait olmayan dosya&dizinleri bulur. |
-nogroup |
Hiçbir gruba ait olmayan dosya&dizinleri bulur. |
-newer [dosya_ismi] |
Belirtilen dosya_isminden daha yeni olan dosya&dizinleri bulur. |
–amin t |
t dakika önce erişilmiş dosyalar |
-atime t |
t*24 saat önce erişilmiş dosyalar |
-cmin t |
t dakika önce statusu değişmiş dosyalar |
-ctime t |
t*24 saat önce statusu değişmiş dosyalar |
-mmin t |
t dakika önce modifiye edilmiş dosyalar |
-mtime t |
t*24 saat önce modifiye edilmiş dosyalar |
-links l |
l tane linkli olan dosyalar |
-regex patern |
Dosya ismi regualar expression pattern olan dosyalar. |
Bulunacak dosyalar üstünde yapılacak_islem ler ise,
Bir komut çalıştırma şeklinde aşağıdaki gibi olabilir;
-exec komut {} \; à Direk komutu çalıştır. “{} \;” ifadesi find komutundan çıkan output simgeler. Mutlaka çalıştırılacak komuttan sonra yer alması gerekir.
-ok komut {} \; à Komutu çalıştırırken kullanıcıya sonuçları doğrula.
-ls à çıkan sonucu listele
-print -> çıkan sonucu print et, eğer printf kullanılırsa çeşitli biçimlerde print alınabilir.
| xargs komut à find komutunun çıktısını xargs’a vererek komutu işlettirir.
Örnekler;
Bulunduğunuz dizin ve altındaki dosyaların tamamını görmek için,her 3 komutta işe yarar;
find . -print
find -print
find .
/’dan itibaren belli bir dosya ismini aramak için;
find / -name dosya_ismi
Geçmiş 24 saatte(şimdi ile 1 gün öncesi arası) değiştirilmiş dosyaları bulmak için;
find . -mtime 0
Geçtiğimiz 24 saatten şimdiki ana kadar değişmiş olan dosyalar;
find . -mtime -1
24 saatle 48 saat arasında değişmiş dosyalar;
find . -mtime 1
48 saatten daha eski değişmiş tarihli dosyalar.49,50,51…
find . -mtime +1
/etc’nin altında şimdi ile 10 dk içinde değişmiş dosyaları bulmak için;
find /etc –mmin -10 à yani 9,8,7,6,…
/etc’nin altında 10 dk öncesinde değişmiş dosyaları bulmak için;
find /etc –mmin +10 à yani 11,12,13,14,…
/etc’nin altında 6. Ve 9. Dk’lar arasında değişmiş dosyalar;
find /etc –mmin +5 –mmin -10 à yani 6,7,8,9dk
/home dizini altında cozumpark kullanıcısına ait bütün dosyalar;
find /home -user cozumpark
/tmp altında ve cozumpark kullanıcısına ait izni 755 olan bütün dizinleri listelemek için;
find /tmp –type d –user cozumpark –perm 755 –ls
/tmp altında uzantısı “.log” olan dosyaları bul ve sil;
find /tmp –type f –name “*.log” -ls à UYARI! : silme işlemi yapmadan önce arama neticesinde çıkan dosyaları bir kere listeleyin emin olun, sonra rm komutunu find’la birleştirirsiniz.Aşağıdaki 3 komutta bulunanan dosyalar üstünde silmeişlemini gerçekleştirir.
find /tmp –type f –name “*.log” | xargs /bin/rm –f
find /tmp –type f –name “*.log” -exec rm {} \;
Find komutu ile dosyaları bulup daha güvenli bir silme işlemi yapmak istiyorsanız
find /tmp –type f –name “*.log” -ok rm {} \; à Bu –ok size işlemi yapmadan önce doğrulattıracaktır!.
Aramayı aynı anda birden fazla bölgede yapmak istiyorsak mesela hem /var hem de /tmp altını görmek istiyorsak,iki path’ide aranacak bölge kısmına ekleriz.
find /var /tmp -type f -name “*.log” –ls
/var/html altında bulunan html dosyalarının izinlerini 644’e çekmek için;
find /var/html -name “*.html” -type f -exec chmod 644 {} \;
Dosyaları bulup arşivlemek için;
cd /tmp
touch a.log b.log c.log
find /tmp -type f -name “[abc].log”| xargs tar -cvf loglar.tar
Dosyaları bulup arşivleyip, sıkıştırmak için;
find /tmp -type f -name “[abc].log”| xargs tar -cjvf loglar.tar.bz2
Dosyaları bulup(sonu .log ile biten) bir yere kopyalamak için;
find /home/cozumpark –type f –name “*.log” -exec cp {} /tmp \;