centos/redhat açılış sırası değiştirmek

Sisteminizin açılışındaki sıralamayı doğru bulmuyor değiştirmek istediğinizde “initlevel” ınıza göre ilgili klasöre girdiğinizde scriptler yerine sembolik bağlantı olduğunu göreceksiniz.

/etc/rc3.d/S85httpd -> /etc/init.d/httpd

Eğer “chkconfig httpd on” şeklinde açılacak şekilde ayarlandıysa, chkconfig init.d klasörünün içinde ilgili dosyanın içinde “# chkconfig:” parametrelerini arar ve açılış ve kapanış sıralamasını ona göre yapar.

örnek olarak;

[root@thehive]# cat /etc/init.d/httpd |grep chkconfig
# chkconfig: - 85 15

Buradaki 85 açılış 15 ise kapanış sırasıdır. Script içinde değişiklik yapılarak sıralama değiştirilebilir.

expect kullanarak bash’te toplu şifre değiştirme

Diyelim ki 10 tane kullanıcınız var basit bir döngü ile kullanıcıların şifrelerini değiştirmek istiyorsunuz. Expect kullanarak aşağıdaki gibi değiştirebilirsiniz.

#!/bin/bash
#Cem DOGAN - 11.07.2012 - expect ornegi

for c in `seq 1 10`
do

UNAME=kullaniciadi$c
PASS=sifresi$c
#gerekirse kullanici da eklenebilir
#useradd -s /sbin/nologin $UNAME

expect << EOF
spawn passwd $UNAME
expect "New UNIX password:"
send "${PASS}r"
expect "Retype New UNIX password:"
send "${PASS}r"
expect eof;
EOF

done

netcat ile port kontrol script’i

netcat kullanarak aşırı yükten dolayı cevap veremeyen/çalışmayan portlardan haberdar olabileceğimiz bir linux betiği yazmamız gerekirse;

#!/bin/bash
date
host=127.0.0.1
for port in  25 80 110 443 3306
do
if ! nc -n -z -w 1 $host $port
then
sonuc=${sonuc}" "$port
fi
done
if [ -n "${sonuc+x}" ]; then
echo Cevap vermeyen portlar : $sonuc
echo Cevap vermeyen portlar $sonuc | mail -s "baslik" alici1@e-mail.com,alici2@e-mail.com
fi

not1: nc(netcat) komutundaki -n parametresi dns sorgusunu iptal eder, -z bağlantıyı kontrol eder, -w 1 zamanaşımı süresini 1 saniye olarak belirler.

not2: crontab a da */5 * * * * şeklinde girilip sonuçları da log dosyasına kaydedilirse izlemek daha kolay olabilir.

logrotate düzgün çalışmıyorsa

Bildiğiniz gibi logrotate çok fazla ve büyük sistem kaydı üreten sistemlerin yönetimini kolaylaştırmak için dizayn edilmiş crontab kullanılarak günlük olarak çalışan, kayıt dosyalarının içeriğinin başka bir dosyaya aktarılıp boşaltılmasına(rotate), sıkıştırılmasına, silinmesine veya e-posta olarak gönderilmesine yaramaktadır.

Sistem kayıtlarınızı logrotate kullanarak düzenlemek istediniz /etc/logrotate.d/ klasörüne gerekli ayar dosyanızı oluşturdunuz fakat “rotate” işleminin düzgün çalışmadığını, bazı dosyaların düzgünçe “rotate” olduğunu bazılarının da göz ardı edildiğini gördünüz. Bu durumda göz atmanız gereken dosya /var/lib/logrotate.status dosyasıdır. Bu dosyada “rotate” edilecek dosyalar ve zaman bilgileri bulunmaktadır. Bir şekilde bu dosya bozulursa /etc/cron.daily/logrotate betiği düzgün çalışmayacaktır.

Örneğin:

"/var/log/boot.log" 2011-7-21
"
/var/log/cron" 2011-8-7
"/var/log/rkhunter.log" 2011-8-7

Örnekte rkhunter ve cron dosyaları “rotate” işlemine girmeyecektir. Bunu çözmek için basitçe /etc/cron.daily/logrotate dosyasının üstüne aşağıdaki satırları ekliyorum.

/bin/cat /var/lib/logrotate.status |/bin/egrep -vi '"$|^/' > /var/lib/logrotate.status.temp
/bin/cat /var/lib/logrotate.status |/bin/grep '^/' | /bin/awk '{print """$0}' >> /var/lib/logrotate.status.temp
/bin/cat /var/lib/logrotate.status.temp > /var/lib/logrotate.status

Böylelikle logrotate çalışmadan düzenlemiş logrotate.status dosyasını düzeltmiş ve sorunu gidermiş oluyorum.


	

Amilo M7440 ubuntu kablosuz bağlantı düğmesi

– http://fsam7440.sourceforge.net/ adresindeki yazılımını indirip

–  arşiv dosyasını ayıkladıktan sonra
cd fsam7440-0.4 && make && sudo make install

– test etmek için
modprobe fsam7440

** derlerken
fsam7440.c:168: error: ‘proc_root’ undeclared (first use in this function)

gibi hatalar alırsanız, fsam7440.c dosyasını favori editörünüzle açıp iki  “&proc_root”

değerini “NULL” olarak değiştirip hatayı giderebilirsiniz.

sort kullanarak ip adreslerini sıralamak

ipler.txt dosyasındaki karışık ip adreslerini,

10.1.1.11
10.1.1.20
10.1.1.1
10.1.1.12 
10.1.1.2 
192.168.1.9
192.168.2.1 
192.168.0.121
192.168.1.1 
192.168.1.12

GNU – Coreulits içinde bulunan Sort yazılımını kullanarak

sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4 ipler.txt

sıralayabiliriz.

Sonucu :

10.1.1.1
10.1.1.2
10.1.1.11
10.1.1.12
10.1.1.20
192.168.1.1
192.168.1.9
192.168.2.1
192.168.1.12
192.168.0.121

-n –numeric-sort
Sayısal değere bakarak sıralar.

-t –field-separator=ayraç
Geçiş için boşluk yerine ayraç kullanılır.

-k –key=konum1[,konum2]
Sıralama anahtarı belirtmek için kullanılan seçenek: konum1de başlayan konum2de biten bir anahtar belirler (alan numarasını ve karakterin kelime içindeki yerini 1’den başlayarak sayar).

Bir siteden istenen dosyaların hepsini indirmek

wget kullanarak bir site içinde istediğimiz dosya tipine uyacak bütün dosyaları indirmek için aşağıdaki örneği uyarlayabiliriz.

wget -r -A “*.ogg” -U “Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-us)” –wait=15 http://en.wikipedia.org/wiki/Wikipedia:Sound/list

-c         kaldığı yerden devam etme
-r         (Recursive) dizin içeriğini indirme
-A         (Accept) izin verilen uzantılar
-R         (Reject) izin verilmeyen uzantılar
-U         Belirtilen tarayıcı gibi davran
-w / –wait    istekler arasında saniye bekle


daha fazla yardım için “man wget”

php’nin mail fonksiyonuyla gönderilen posta kaydını tutmak


php’nin mail() fonksiyonuyla gönderilen e-postalar varsayılan olarak tanımlı sendmail yazılımı vasıtasıyla gönderilir. Sendmail’in ayarlarından LOG düzeyini arttırsanız da hangi dosyadan veya hangi kullanıcı tarafından gönderildiğini bulamazsınız. Hele web sağlayıcısı olarak hizmet veren bir makinanız varsa hangi kullanıcı sizin kaynaklarınızı kullanarak önemsiz e-posta gönderiyor tespit etmek zordur. Akla gelen yöntemse php ile posta sunucusu arasında sendmail e köprü görevi üstlenen ve aynı zamanda kayıt tutan bir yazılım eklemek. Şöyle;

vi /usr/sbin/sendmail.spamkontrol

diyerek içine

#!/usr/bin/perl
# use strict;
 use Env;
 my $date = `date`;
 chomp $date;
 open (INFO, ">>/var/log/spam_log") || die "Dosya Acilmadi ::$!";
 my $uid = $>;
 my @info = getpwuid($uid);
 if($REMOTE_ADDR) {
 print INFO "$date - $REMOTE_ADDR ran $SCRIPT_NAME at $SERVER_NAME n n";
 print 'n';
}
 else {
print INFO "$date - $PWD -  @infonn";
 print 'n';
}
 my $mailprog = '/usr/sbin/sendmail';
 foreach  (@ARGV) {
 $arg="$arg" . " $_";
 }
open (MAIL,"|$mailprog $arg") || die "cannot open $mailprog: $!n";
 while ( ) {
 print MAIL;
 }
 close (INFO);
 close (MAIL);

dosyayı kaydettikten sonra ;

chmod +x /usr/sbin/sendmail.spamkontrol 
touch /var/log/spam_log 
chmod 0777 /var/log/spam_log

Şeklinde gerekli yetkileri verdikten sonra isterseniz php.ini deki sendmail tarifini yeni dosyamız olan /usr/sbin/sendmail.spamkontrol olarak girebilirsiniz yada apache deki Virtual Host tanımına aşağıdaki gibi bir tanımlama girebilirsiniz.

php_admin_value sendmail_path '/usr/sbin/sendmail.spamkontrol'

Bu değeri herbir VirtualHost tanımına da girebilirsiniz.  Apache’yi tekrar başlattıktan sonra /var/log/spam_log dosyasında ağaşıdaki örnek kayıt dosyası gibi çıktı alacaksınız.

[root@immortal ~]# tail /var/log/spam_log
 Fri Aug 28 15:37:20 EEST 2009 - /home/testuser1 -
 Fri Aug 28 15:45:01 EEST 2009 - /home/testuser2 -
 Fri Aug 28 15:53:30 EEST 2009 - /home/testuser1 -
 Fri Aug 28 15:57:43 EEST 2009 - /home/testuser1 -
 Fri Aug 28 15:58:47 EEST 2009 - /home/testuser2 -
 Fri Aug 28 16:21:21 EEST 2009 - /home/testuser2 -

Eğer log dosyanızın boyutu çok büyürse log rotasyonu için /etc/logrotate.conf dosyasına aşağıdakileri ekleyebilirsiniz.


# SPAM LOG rotation
 /var/log/spam_log { 
 monthly 
 create 0777 root root     
 rotate 1
 }

[MattF ve ramprage’e teşekkürler]

bind dns konfigürasyon kontrolü

BIND kurulumu içinde gelen iki faydalı komutla hazırladığımız konfigürasyon kontrolümüzü yapabiliriz.

# named-checkconf /etc/named.conf

named-checkconf komutuna parametre olarak konfigürasyon dosyamızın adresini girdiğimizde bulduğu hatayı gösterecektir. Eğer hiç çıktı vermezse konfigürasyon dosyamızda sorun yok demektir. DNS sunucumuzu yeniden yükleyebiliriz.


# named-checkzone cemdogan.com /var/named/cemdogan.com.zone

named-checkzone komutuna parametre olarak önce alan adını daha sonra zone dosyamızın adresini girdiğimizde hata bulursa bulduğu hatayı, hatasızsa “OK” çıktısını alabiliriz. Kontrolümüzü tamamladıktan sonra DNS sunucumuzu yeniden yükleyebiliriz.

yedekleme yaparken kullanılabilecek faydalı komutlar

Bulunduğu çalışma dizininden başlayarak, boş alt klasörleri bulup silmek için;

find . -type d -empty -exec rmdir {} ;

İçeriği değiştirilmiş dosyaları bulmak için ;

find / -mmin 30 -type f (Son 30 dakika içinde değişenler)

find / -mtime -1  -type f (Son 24 saat içinde değişenler)

Bütün MySQL veritabanlarını kendi adlarında yedeklemek için;

for I in `echo “show databases;” | mysql | grep -v Database`; do mysqldump $I > “$I.sql”; done

A klasöründe bulunan dosyaları B klasöründen silmek için (yanlışlıkla açılan arşiv dosyaları) ;

for dosya in /*; do rm /`basename $dosya`; done

Uzaktaki web sunucusundaki dosyanın bulunup bulunmadığını kontrol etmek için ;

wget –spider -v http://www.google.com/robots.txt

Hard Disk model ve seri numarası bilgisini almak için;

hdparm -i /dev/sda1

GB,MB,KB ve Byte olarak, ağaç yapısında klasörlerin listelenmesi için;

du -b –max-depth 1 | sort -nr | perl -pe ‘s{([0-9]+)}{sprintf “%.1f%s”, $1>=2**30? ($1/2**30, “G”): $1>=2**20? ($1/2**20, “M”): $1>=2**10? ($1/2**10, “K”): ($1, “”)}e’

En fazla hafıza kullanan 10 işlemi ve detaylarını görmek için (top ve htop ile daha güzel sonuçlar alınabilir);

ps aux | sort -nk +4 | tail

[commandlinefu’ya teşekkürler]