1 2 3 4 |
snap create test (source vol) hourly.0 (snapshot name) vol restrict test2 (dest vol) vol copy start -s hourly.0 test test2 vol online test2 |
HTTP İsteklerinin Zamanlamalarını cURL İle Görme
Basit bir istek 4 temel aşamadan oluşur,
Bazen sayfa yüklenme sürelerinin tespitini (daha doğrusu sayfanın indirilme )sürelerinin tespiti için curl mükemmel bir tercih olabilir.
Basit Kullanım:
1 2 |
curl -s -w "%{time_total}\n" -o /dev/null http://www.mynet.com/ 0.549 |
ZSH ile döngüye sokabiliriz:
1 2 3 4 |
for i in {1..3}; curl -s -w "%{time_total}\n" -o /dev/null http://www.mynet.com/ 0.735 0.832 0.604 |
BASH ile:
1 2 3 4 |
for i in {1..3};do curl -s -w "%{time_total}\n" -o /dev/null http://www.mynet.com/; done 1 ↵ 0.866 0.825 0.644 |
CURL komutu için varsayılan davranış GET’dir, ancak POST, DELETE PUT ve daha karmaşık istekleri yapabilirsiniz. Eğer cURL ‘e aşina değilseniz, başlamak için en iyi yer manpage ‘dir.
Bu şekilde HTTP zamanlama testi için bir “şablon” oluşturabilirsiniz :
1 2 3 4 5 6 7 8 9 10 |
\n time_namelookup: %{time_namelookup}\n time_connect: %{time_connect}\n time_appconnect: %{time_appconnect}\n time_pretransfer: %{time_pretransfer}\n time_redirect: %{time_redirect}\n time_starttransfer: %{time_starttransfer}\n ----------\n time_total: %{time_total}\n \n |
Şablon dosyası olarak yukarıdaki içerik ile “curl-format” adında dosya oluşturup bu dosya ile bir istek yapabiliriz. Aşağıdaki gibi dns araması,transter öncesi,yönlendirme,toplam süre gibi zamanlamaları ayrı ayrı görebiliriz.
1 2 3 4 5 6 7 8 9 |
curl -w "@curl-format" -o /dev/null -s http://mynet.com/ time_namelookup: 0.131 time_connect: 0.139 time_appconnect: 0.000 time_pretransfer: 0.140 time_redirect: 0.000 time_starttransfer: 0.149 ---------- time_total: 0.149 |
Options:
- -w “@curl-format”Biçim dosyası olarak curl-format’ın kullanma cURL söyler
- -o /dev/null isteğin output’unu /dev/null’ a yönlendirir.
- -s ilerleme çubuğu göstermemek için kullanılır.
- http://www.mynet.com/ istek yapılan URL..
Daha ayrıntılı bir sonuç arıyorsanız Apache Benchmark deneyebilirsiniz: Daha önceki paylaşımımda ab ile ilgili yazımı inceleyebilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
ab -n 3 http://www.mynet.com/ This is ApacheBench, Version 2.3 <$Revision: 1706008 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.mynet.com (be patient).....done Server Software: Mynet Server Hostname: www.mynet.com Server Port: 80 Document Path: / Document Length: 482094 bytes Concurrency Level: 1 Time taken for tests: 0.679 seconds Complete requests: 3 Failed requests: 0 Total transferred: 1447746 bytes HTML transferred: 1446282 bytes Requests per second: 4.42 [#/sec] (mean) Time per request: 226.363 [ms] (mean) Time per request: 226.363 [ms] (mean, across all concurrent requests) Transfer rate: 2081.93 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 8 9 1.9 10 12 Processing: 193 217 28.4 229 248 Waiting: 11 11 0.3 11 12 Total: 201 226 30.3 239 260 Percentage of the requests served within a certain time (ms) 50% 218 66% 218 75% 260 80% 260 90% 260 95% 260 98% 260 99% 260 100% 260 (longest request) |
SendGrid ile Komut Satırından E-Posta Göndermek
Mail gönderimi oldukça zahmetli ve zor bir iş özellikle mailleri kullanıcının gelen kutusu’na düşürmek (inbox) oldukça zorlaştı. Bundan dolayı mail’lerinizi sadece bu işi yapan platformlar üzerinden göndermek isteyebilirsiniz. Sendgrid, mail gönderimlerinizi yapabileceğiniz birçok platformdan biridir. Benim tercihim Sendgrid oldu. Aylık 12 bin mail’e kadar gönderim ise ücretsiz. Sendgrid API gayet başarılı. Projenize entegre etmek’de gayet basit.
Sendgrid API dokümanları için sayfayı ziyaret edebilirsiniz.
SendGrid ile Komut Satırından E-Posta Göndermek;
1 |
curl -d '[email protected]&toname=Destination&subject=Example Subject&text=testingtextbody&[email protected]&api_user=your_sendgrid_username&api_key=your_sendgrid_password' https://api.sendgrid.com/api/mail.send.json |
Shell script olarak değişken kullanarak göndermek için,
1 2 3 4 5 6 7 8 9 |
#!/bin/sh SGTO=onerromerr@gmail.com SGTONAME='Some Name' SGSUBJECT='Email Subject' SGFROM=from@mail.omeroner.com SGTEXT='Email Text' SGUSER=user SGPASS=password curl -d "to=${SGTO}&toname=${SGTONAME}&subject=${SGSUBJECT}&text=${SGTEXT}&from=${SGFROM}&api_user=${SGUSER}&api_key=${SGPASS}" https://api.sendgrid.com/api/mail.send.json |
Dig İle DKIM Kaydı Sorgulama
DKIM Nedir?
Dig İle DKIM Kaydı Sorgulama kısmında gelmeden önce dkim nedir ? kısaca bilgi vermek gerekir ise;
Dkim, RFC4871‘de standartları belirlenmiş bir e-mail kimlik denetleme yöntemidir. Kısacası Sunucu tarafından şifreleme sistemi kullanılarak gönderilen her emailin barkodlanmasıdır.
Bu yöntem, gönderilen postaların gerçekten ilgili adresten gönderilip gönderilmediğinin tespit edilebilmesi için kullanılmaktadır.
Örneğin bir spammer ya da phising saldırısı amaçlayan birisi sizin e-posta adresinizi From: adresine yazarak herhangi birine bir mail gönderebilir. İşte DKIM aslında gerçek adres sahibinden gönderilmeyen forge edilmiş bu tip postaların saptanmasını amaçlamaktadır.
Dig İle DKIM Kaydı Sorgulama
Aşağıdaki şekilde shell üzerinden dig komutunu kullanarak ilgili domain’e ait dkim kaydı(TXT record) sorgulayabiliriz.
1 |
[16:01:57] omeroner:~ $ dig google._domainkey.protodave.com TXT +short |
örnek çıktı:
1 |
"v=DKIM1\; k=rsa\; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhArxYH88+A76Gk7/8ENefN5RhMFhoYJp8T3KLPYYpejDI45PKWTO+2r8ZJZOtuk7tsG07bmJyU8PFvU48Lf1xtb4WcFxKKjd7N5MF6JcHD51Xb8XDAJA2ldqxH4hBbw9dRjsT7WBFXbp2x6MSWxgi9f1w+7Z2IFG+AtUjrf8/9N3gLieaZKZT1SEhR8TnhfOm" "FG0LfMyS0YtfHKrkUkBCEmWBPisB2CcZBShKr6/T8/UB/oZF8XMRd0NOsru9MGx9Yp89jIYS5YRuvbA0/TLgOOiqrSU5Ms1egMwfFyy4BMDUKayZzF6BxNPc/+UoFrYHKRZpyD/kEd4FXNEddlksQIDAQAB" |
Dig İle Çoklu Dns Kaydı Sorgulama
Birden fazla alan adına ait dns kayıtlarının sorgulanması için ufak bir script.
script içeriği:
1 2 3 4 5 6 7 8 9 10 11 |
#!/bin/bash # omer oner # fulldnsej.txt icerigi sorgulanacak alan adlari yazilir. DOMAINLIST=$(cat /tmp/fulldnsej.txt) for DOMAIN in $DOMAINLIST; do NS=$(dig NS $DOMAIN +short | head -1 ) A=$(dig A $DOMAIN +short | head -1 ) MX=$(dig MX $DOMAIN +short | head -1 ) echo -e "$DOMAIN NS Record ==> $NS A Record ==> $A MX Record ==> $MX" done |
Örnek Output:
1 2 3 4 5 |
# bash dig.sh omeroner.com NS Record==> dns1.markum.net. A Record==> 178.210.175.25 MX Record==> 20 mx2.omeroner.com. mynet.com NS Record==> ns01.mynetgroup.com. A Record==> 212.101.122.34 MX Record==> 10 mbmail.mynet.com. google.com NS Record==> ns3.google.com. A Record==> 216.58.208.110 MX Record==> 30 alt2.aspmx.l.google.com. yahoo.com NS Record==> ns2.yahoo.com. A Record==> 98.138.253.109 MX Record==> 1 mta6.am0.yahoodns.net. |
Linux InActive Memory
Uzun süredir çalışmadığı halde hafızada yer tutan işlemlerin bellekten silinmesi:
İnactive olmuş olan processlerin memory üzerinde ne kadar yer kapladığını görebilmek için;
1 |
# vmstat -s |
örnek çıktı;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# vmstat -s 889452 total memory 587820 used memory 356920 active memory 95688 inactive memory 301632 free memory 23000 buffer memory 171680 swap cache 524284 total swap 0 used swap 524284 free swap 885 non-nice user cpu ticks 24 nice user cpu ticks 2391 system cpu ticks 1045297 idle cpu ticks 188 IO-wait cpu ticks 11 IRQ cpu ticks 287 softirq cpu ticks 0 stolen cpu ticks 192452 pages paged in 56594 pages paged out 0 pages swapped in 0 pages swapped out 200024 interrupts 649245 CPU context switches 1471939923 boot time 6946 forks |
Aşağıdaki komut dizisiyle bu processleri hafızadan silebilirsiniz.
1 |
free && sync && echo 3 > /proc/sys/vm/drop_caches && echo "" && free |
1 2 3 4 5 6 7 8 9 10 11 |
[root@basic ~]# free && sync && echo 3 > /proc/sys/vm/drop_caches && echo "" && free total used free shared buffers cached Mem: 889452 587944 301508 236 23024 171712 -/+ buffers/cache: 393208 496244 Swap: 524284 0 524284 total used free shared buffers cached Mem: 889452 380368 509084 236 476 14704 -/+ buffers/cache: 365188 524264 Swap: 524284 0 524284 [root@basic ~]# |
Linux Sunucusunu Ping(ICMP) Erişimlerine Kapatma
Linux Sunucusunu Ping(ICMP) Erişimlerine Kapatma için;
/etc/sysctl.conf dosyasındaki ;
net.ipv4.icmp_echo_ignore_all=0 değerini 1 yapmanız yeterli.
Bu komutu özellikle sadece mysql server olarak kullanılan sunucular tarafından tercih edilmektedir.
1 2 |
#vim /etc/sysctl.conf net.ipv4.icmp_echo_ignore_all=1 |
1 |
sysctl -p /etc/sysctl.conf |
Belirli Bir Klasör İçin INODE Sayısını Öğrenme
SSH erişiminiz olan bir sunucuda belirli bir klasördeki inode sayısını görmek için aşağıdakı komut bütünü’nü kullanabilirsiniz:
1 |
echo "Detailed Inode usage for: $(pwd)" ; for d in `find -maxdepth 1 -type d |cut -d\/ -f2 |grep -xv . |sort`; do c=$(find $d |wc -l) ; printf "$c\t\t- $d\n" ; done ; printf "Total: \t\t$(find $(pwd) | wc -l)\n" |
Yum Reposu Silme
Yum Reposu Silme için CentOS/RHEL sistem’leri üzerinde için aşağıdaki yöntemleri kullanabilirsiniz.
CentOS/RHEL sistemler üzerinde repo ayar dosyaları /etc/yum.repos.d/ dizininde bulunur.
Yum Reposu Silme için Yöntemler
Yöntem #1: rm komutu kullanarak silme
1 |
# cd /etc/yum.repos.d/ |
Örnek output:
1 2 3 4 5 6 7 8 9 |
# ls -l -rw-r--r--. 1 root root 1991 May 18 22:47 CentOS-Base.repo -rw-r--r--. 1 root root 647 May 18 22:47 CentOS-Debuginfo.repo -rw-r--r--. 1 root root 289 May 18 22:47 CentOS-fasttrack.repo -rw-r--r--. 1 root root 630 May 18 22:47 CentOS-Media.repo -rw-r--r--. 1 root root 6259 May 18 22:47 CentOS-Vault.repo -rw-r--r--. 1 root root 204 Aug 18 10:17 mysql56-community.repo -rw-r--r--. 1 root root 1250 Aug 18 10:10 puppetlabs.repo |
puppetlabs.repo reposunu silmek için sırasıyla:
1 2 3 |
# rm -rf puppetlabs.repo # rm -rf /etc/pki/rpm-gpg/RPM-GPG-KEY-puppetlabs # yum clean all |
Yöntem #2: .rpm paketini silme
ilk olarak paket adını tespit edelim:
1 2 |
# rpm -qa | grep puppet puppet-3.8.7-1.el6.noarch |
puppet reposunu silmek için sırasıyla:
1 2 |
# yum remove puppet-3.8.7-1.el6.noarch # yum clean all |
Strace Nedir? Strace Kullanımı
Sürecin çıktılarını stdout’a, kendi çıktılarını stderr’e yazar. more ile sayfa sayfa görmek istiyorsanız. en basit (primitive) kullanımı aşağıdaki gibidir.
1 |
# strace <süreç> 2>&1 | more |
Strace Parametreleri:
- -e parametresi ile sadece bir fonksiyon için çıktı üretebiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 |
[root@omeroner ~]# strace -e "open" cd /tmp open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libtinfo.so.5", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 open("/dev/tty", O_RDWR|O_NONBLOCK) = 3 open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3 open("/proc/meminfo", O_RDONLY|O_CLOEXEC) = 3 open("/usr/lib64/gconv/gconv-modules.cache", O_RDONLY) = 3 open("/usr/bin/cd", O_RDONLY) = 3 +++ exited with 0 +++ [root@omeroner ~]# |
- -o parametresi ile aşina olduğumuz üzere çıktıları bir dosyaya yönlendirebiliriz.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@omeroner ~]# strace -e "open" -o /tmp/strace cd /tmp [root@omeroner ~]# more /tmp/strace open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libtinfo.so.5", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3 open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 open("/dev/tty", O_RDWR|O_NONBLOCK) = 3 open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3 open("/proc/meminfo", O_RDONLY|O_CLOEXEC) = 3 open("/usr/lib64/gconv/gconv-modules.cache", O_RDONLY) = 3 open("/usr/bin/cd", O_RDONLY) = 3 +++ exited with 0 +++ [root@omeroner ~]# |
- -t parametresi ile zamansal olarak sistem fonksiyonlarının çalışma dilimlerini gösterir.
1 2 3 4 5 6 7 8 9 10 11 12 |
[root@omeroner ~]# strace -t -e "open" cd /tmp 03:31:06 open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 03:31:06 open("/lib64/libtinfo.so.5", O_RDONLY|O_CLOEXEC) = 3 03:31:06 open("/lib64/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3 03:31:06 open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 03:31:06 open("/dev/tty", O_RDWR|O_NONBLOCK) = 3 03:31:06 open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3 03:31:06 open("/proc/meminfo", O_RDONLY|O_CLOEXEC) = 3 03:31:06 open("/usr/lib64/gconv/gconv-modules.cache", O_RDONLY) = 3 03:31:06 open("/usr/bin/cd", O_RDONLY) = 3 03:31:06 +++ exited with 0 +++ [root@omeroner ~]# |
- -c ise raporsal bir çağrı çıktısı üretir.
1 2 3 4 5 6 7 |
[root@omeroner ~]# strace -c -t -e "open" cd /tmp % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 100.00 0.000048 5 9 open ------ ----------- ----------- --------- --------- ---------------- 100.00 0.000048 9 total |
- -p herhangi bir çalışan uygulamayı
<PID>
değerini vermek suretiyle trace edebiliriz.
1 |
# strace -f -c -p $(pidof mysqld) |