Kategori Arşivi Linux

Linux: sed komutu belli bir yere satır ekleme, değiştirme

Bir dosya içerisinde bir satırın altına başka bir satır eklemek istiyorsanız sed komutunu kullanabilirsiniz. sed komutu bir dosyanın içeriğinin değiştirilmesinde kullanılır. Örnek olarak içeriği aşağıdaki gibi olan deneme.txt adında bir dosyamız olsun.

1
2
4
6

Aşağıdaki komut sayesinde 2’nin altına 3 ekleyeceğiz.

sed -i '/2/a 3' deneme.txt

Böylelikle dosya içeriği aşağıda şekle dönüşmüş oldu.

1
2
3
4
6

Peki eklemek yerine değiştirmek istiyorsak ne yapacağız. Bu durumda da aşağıdaki komutu kullanabiliriz.

sed -i 's/6/5/' deneme.txt

veya

sed -i s/6/5/ deneme.txt

Böylelikle dosyadaki 6, 5 ile yer değiştirecek ve dosya içeriği aşağıdaki gibi olacaktır.

1
2
3
4
5

Dosya içeriği değiştirilmesini sağlayan awk ve grep gibi komutlarında olduğunu söylemeliyim. Ayrıca sed komutuyla daha farklı şeyler de yapılabilmekte elbette. Fazlası için sed komutunun help‘inden yardım alabilirsiniz.

Linux: cp komutu omitting directory hatası

Bilindiği gibi cp komutu klasör yada dosya kopyalamak için kullanılıyor. Klasör kopyalarken bu hatayı alıyorsanız recursive anlamındaki -r komutunu eklemelisiniz. Böylece klasörü içindeki tüm dosyalarla birlikte kopyalayacaktır.

Gel gelelim bu hatayı çoklu dosya kopyalarken de alabilirsiniz. Örnek olarak

cp sample.txt /home/user/Desktop/*0/

komutunu çalıştırmaya çalıştığınızda birden fazla klasöre dosya kopyalaması gerekiyor ama cp komutu bu işlemi gerçekleştirmeye izin vermiyor. Peki buna çözüm olarak ne yapacağız. Ben küçük bir bash scriptiyle sorunu halletim. Aşağıdaki scriptte döngü ve cp komutunun bulunduğu satırda ilgili değişiklikleri yaparak bu sorunu halledebilirsiniz.

#!/bin/bash

for i in {20..100..10}
 do
 cp sample.txt /home/user/Desktop/$i/ 
 done

Linux: Dizinin içerisindeki bir klasör hariç tümünü başka sunucuya yada klasöre kopyalama

Bir dizindeki dosyalarınızı başka bir sunucuya yada dizine kopyalamak istiyorsunuz ama dizin içerisinden bir yada birden fazla klasörü kopyalamak istemiyorsunuz. Dosya boyutu büyük olmadığında aslında büyük bir sorun da teşkil etmiyor. Çünkü herşeyi kopyalayıp sonra istemediklerinizi silebilirsiniz. Ama klasör boyutu büyükse ya tek tek klasörleri kopyalayıp zaman kaybedeceksiniz yada uzun bir süre dosya kopyalamasını bekleyip zaman kaybedeceksiniz. Böyle bir durumda rsync’ten yararlanılabilir. Bildiğiniz gibi rsync bir senkronizasyon programıdır. Aşağıdaki komut ile bu sorunu basitçe çözebilirsiniz.

rsync -avzh --exclude istenmeyen_klasör_ismi kaynak_klasör/ /hedef_klasör/

Böylelikle kaynak klasör içerisinden kopyalanmasını istemediğimiz klasörü belirtiyor, diğer dosyaların kopyalanmasını sağlıyoruz.

Ubuntu rm: cannot remove ‘…’: Device or resource busy hatası ve çözümü

Ubuntu’da bir klasörü cp ile başka bir yere kopyalarken işlemi kesmek zorunda kaldım. Sonrası ilgili klasörü silmeye çalıştığımda rm: cannot remove ‘data/.nfs0000000004f9760f0000000c’: Device or resource busy hatasını aldım ve dosya silinemedi. Dosyayı silebilmek için lsof komutundan yararlandım. Öncelikle aşağıdaki kod ile ilgili dizinde çalışan process’in id‘sini öğrendim.

lsof +D /path

Daha sonra kill -9 id komutu ile process’i öldürdüm. İlgili dizin artık meşgul değil yada herhangi bir process tarafından kullanılmıyor. Dolayısıyla artık silebilirim.

Linux – copy cdrom files to .iso

sudo cat /dev/srx > /home/<user_name>/<file_name.iso>

Postgresql uzak sunucudan otomatik backup alma işlemi

sudo apt-get install postgresql-client

Öncelikle backup.sh adında bir script oluşturdum. Script’in içeriği şu şekilde olacak;

BACKUP_DIR=/directory_to_backup 
PGPASSWORD="password" /usr/bin/pg_dump -C -h hostname -U dbuser dbname | gzip > $BACKUP_DIR/"`date +\%Y-\%m-\%d-\%H\%M\%S`.gz"

İlk satırda backup’ın hangi dizine alınacağını belirliyoruz. İkinci satırda ise öncelikle bağlanacağımız postgresql veri tabanının şifresi, pg_dump binary’sinin bulunduğu dizin, sunucunun ip adresi yada hostname’i, veri tabanı kullanıcısının ismi, veri tabanının ismi yazıldıktan sonra backup’ın sıkıştırılma formatı olarak gzip belirleniyor ve backup’ın alınacağı dizine scriptin çalıştırılma tarihi ve saati eklenerek kaydediliyor. Scripti hazırladıktan sonra cron job olarak olarak ekleyip bu işlemi otomatikleştirebilirsiniz. Cron’a aşağıdaki şekilde eklediğiniz iş ile saat 12 ve 18’de olmak üzere günlük iki adet backup alacaktır.

30 12,18 * * * bash /root/backup.sh

Aşağıdaki cron job’ı ise her dakika çalışmaktadır.

*/1 * * * * bash /root/backup.sh

Iptables – fail2ban: Yararlı komutlar (Centos)

Iptables’ı kaydedip, servis restart işleminde silinmesini önlemek

iptables-save | sudo tee /etc/sysconfig/iptables

Kuralları listeleme (port numaraları nümerik olarak)

iptables -L -n

Herhangi bir chain’e accept kuralı ekleme

iptables -I chain_name 1 -s ip_address -j ACCEPT

Fail2ban için exception ekleme; /etc/fail2ban/jail.conf (yada duruma göre jail.local) dosyası içerisinde ilgili satırı düzenlemek gerekiyor.

ignoreip = 127.0.0.1/8 xx.xx.xx.xx # (xx eklemek istediğiniz ip adresi)

Linux: Aynı isimli bütün processler’i öldürme

Aşağıdaki script’le aynı isimdeki tüm process’leri öldürebilirsiniz.

for KILLPID in `ps ax | grep 'process_name' | awk ' { print $1;}'`; do 
  sudo kill -9 $KILLPID;
done