İçerik
Ağ yapılandırma, tanılama ve genel Linux sorun giderme, sistem yönetiminin önemli parçalarıdır. Linux sistemleriyle çalışan bir geliştirici için bile Linux ağ komutları hakkında bilgi sahibi olmak ek bir avantajdır.
Özellikle, DevOps mühendisi olmak veya SRE ekibinde yer almak istiyorsanız, günlük faaliyetlerinizin bir parçası olacağı için tüm Linux troubleshooting komutlarını bilmek önemlidir.
Bu yazıda, Linux sistemlerinde yerel olarak bulunan önemli Linux ağ ve troubleshooting komutlarını ele alacağız.
En İyi Linux Ağ ve Sorun Giderme Komutları Nelerdir?
Aşağıda yerel olarak mevcut olan troubleshooting komutlarının bir listesi bulunmaktadır:
| Terminal Komutu | Açıklama | 
|---|---|
| hostname | Sunucunun hostname’ini kontrol etmek ve ayarlamak için kullanılır. | 
| host | Host DNS ayrıntılarını almak için kullanılır. | 
| ping | ICMP protokolünü kullanarak uzak sunucunun erişilebilir olup olmadığını kontrol eder. Ayrıca paketlerin round trip time’ını gösterir. | 
| curl | Bir sunucudan veya sunucuya veri aktarmak için kullanılan cross-platform utility’dir. Birçok ağ sorununu gidermek için kullanılabilir. | 
| wget | Dosyaları indirmek için kullanılan utility’dir. Proxy bağlantılarını ve bağlantılarını troubleshooting için kullanılabilir. | 
| ip | ifconfig yerine kullanılan bir komuttur. Sistemlerin ağ arayüzlerini yapılandırmak ve bilgi almak için kullanılabilir. | 
| arp | ARP cache’i görüntülemek ve yönetmek için kullanılan utility’dir. | 
| ss/netstat | Öncelikle bağlantıları ve portlar üzerindeki PID’leri ve Unix soketlerini kontrol etmek için kullanılır. | 
| traceroute | ICMP protokolünü kullanarak hedef sunucuya ulaşan hopları bulur. Ayrıca hoplar arasındaki süreyi gösterir. | 
| mtr | mtr, ping ve traceroute’un bir karışımıdır. Ayrıca intermediate hosts ve responsiveness gibi ek bilgiler sağlar. | 
| dig | Bir domain adıyla ilişkili DNS kayıtlarını almanıza yardımcı olur. | 
| nslookup | dig’e benzer bir komuttur. | 
| nc | TCP/UDP soketlerini debug etmek için kullanılan utility’dir. | 
| telnet | Portlar üzerinde uzak bağlantıyı test etmek için kullanılabilir. | 
| route | Tüm route tablosu bilgilerini almanıza yardımcı olur. | 
| tcpdump | Ağ paketlerini yakalamanıza ve ağ sorunlarını analiz etmenize yardımcı olan utility’dir. | 
| lsof | Açık tüm dosyaları ve bunları açan işlem bilgilerini listeler. | 
Her komutu anlayalım ve Linux’u troubleshooting için nasıl kullanabileceğimizi görelim.
Önemli Not: Bu yazıda bahsedilen her komutun/utility’nin birçok seçeneği ve flag’i vardır. Her komutun bir man sayfası vardır ve kullanmanız gereken flag’leri ve seçenekleri belirlemek için bunu kullanabilirsiniz. Örneğin, ip komutu için terminalde
man ipyazarak o komut hakkında tüm detayları alabilirsiniz.
hostname
Hostname komutu, makinenin hostname’ini görüntülemek ve hostname’i ayarlamak için kullanılır.
hostnameHostname komutunu kullanarak makine için yeni bir hostname ayarlayabilirsiniz. Örneğin,
sudo hostname sezer.inEğer hostname’i hostname komutuyla ayarlarsanız, makineyi yeniden başlattığınızda, hostname, hostname dosyasında belirtilen isme değişir (örn: /etc/hostname).
Bu nedenle hostname’i kalıcı olarak değiştirmek istiyorsanız, sunucuda bulunan /etc/hosts dosyasını veya ilgili hostname dosyasını kullanabilirsiniz.
- Ubuntu makineler için /etc/hostname dosyasını değiştirebilirsiniz.
 - RHEL, CentOS ve Fedora için /etc/sysconfig/network dosyasını değiştirebilirsiniz.
 
host
Host komutu, bir IP veya DNS adının tersine lookup’ı için kullanılır.
Örneğin, bir IP’ye bağlı DNS’yi bulmak istiyorsanız, aşağıdaki gibi host komutlarını kullanabilirsiniz.
host 8.8.8.8Ayrıca bir domain adıyla ilişkili IP adresini bulmak için de kullanabilirsiniz. Örneğin,
host google.comping
Ping networking utility’si, uzak sunucunun erişilebilir olup olmadığını kontrol etmek için kullanılır. Öncelikle bağlantıyı kontrol etmek ve ağ sorunlarını gidermek için kullanılır.
Şu ayrıntıları sağlar:
- Gönderilen ve alınan byte’lar
 - Gönderilen, alınan ve kaybolan paketler
 - Yaklaşık round-trip time (milisaniye cinsinden)
 
Ping komutunun aşağıdaki gibi sözdizimi vardır:
ping <IP veya DNS>Örneğin,
ping google.comBir IP adresine ping atmak için:
ping 8.8.8.8Ping çıktısını ctrl+c kullanmadan sınırlamak istiyorsanız, aşağıda gösterildiği gibi bir sayı ile “-c” flag’ini kullanabilirsiniz:
ping -c 1 google.comcurl
Curl utility’si öncelikle bir sunucudan veya sunucuya veri aktarmak için kullanılır. Ancak, ağ sorunlarını gidermek için de kullanılabilir.
Ağ sorunlarını gidermek için curl, DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET ve TFTP gibi protokolleri destekler.
Örneğin, curl telnet kullanarak port 22’de bağlantıyı kontrol edebilir.
curl -v telnet://192.168.33.10:22FTP bağlantısını kontrol etmek için curl kullanabilirsiniz.
curl ftp://ftptest.netWeb server bağlantısını troubleshooting için de kullanabilirsiniz.
curl https://google.com -Iwget
Wget komutu, öncelikle web sayfalarını fetch etmek için kullanılır.
Wget, ağ sorunlarını gidermek için de kullanılabilir.
Örneğin, wget kullanarak proxy server bağlantılarını troubleshooting yapabilirsiniz.
wget -e use_proxy=yes http_proxy=<proxy_host:port> https://google.comBir web sitesinin çalışıp çalışmadığını kontrol edebilirsiniz.
wget www.google.comip (ifconfig)
ip komutu, routes ve ağ arayüzlerini görüntülemek ve manipulate etmek için kullanılır. ip komutu, ifconfig’in yeni versiyonudur. ifconfig tüm sistemlerde çalışır, ancak ifconfig yerine ip komutunu kullanmak daha iyidir.
ip komutunun birkaç örneğine bir göz atalım.
Ağ cihazlarını ve konfigürasyonu görüntüleyin
ip addrBu komutu pipes ve grep ile kullanarak daha ayrıntılı çıktılar alabilirsiniz, örneğin eth0 arayüzünün IP adresini almak gibi. Bu, IP’nin dinamik olarak fetched edilmesi gereken automation tools üzerinde çalışırken çok yararlıdır.
Aşağıdaki komut, eth0 ağ arayüzünün IP adresini alır.
ip a | grep eth0  | grep "inet" | awk -F" " '{print $2}'Belirli bir arayüzün ayrıntılarını alın
ip a show eth0Routing tablolarını listeleyebilirsiniz.
ip route
ip route listarp
ARP (Address Resolution Protocol), yerel ağların IP adresleri ve MAC adresleri hakkında sistemin etkileşimde bulunduğu cache tablosunu gösterir.
arpÖrnek çıktı:
root@sezer:~$ arp
Address                  HWtype  HWaddress           Flags Mask            Iface
10.0.2.3                 ether   52:54:00:12:35:03   C                     eth0
192.168.33.1             ether   0a:00:27:00:00:00   C                     eth1
10.0.2.2                 ether   52:54:00:12:35:02   C                     eth0ss (netstat)
Ss komutu, netstat’ın yerini almıştır. Hâlâ tüm sistemlerde netstat komutunu kullanabilirsiniz.
Ss komutunu kullanarak, netstat komutundan daha fazla bilgi alabilirsiniz. Ss komutu hızlıdır çünkü tüm bilgileri kernel userspace’den alır.
Şimdi ss komutunun birkaç kullanımına göz atalım.
Tüm bağlantıları listeleme
ss komutu, makinenizdeki tüm TCP, UDP ve Unix soket bağlantılarını listeleyecektir.
root@sezer:~$ ss
Netid  State      Recv-Q Send-Q   Local Address:Port       Peer Address:Port
u_str  ESTAB      0      0                    * 7594                  * 0
u_str  ESTAB      0      0      @/com/ubuntu/upstart 7605                  * 0  
u_str  ESTAB      0      0                    * 29701                 * 0
u_str  ESTAB      0      0      /var/run/dbus/system_bus_socket 29702                 * 0
tcp    ESTAB      0      400      172.31.18.184:ssh         1.22.167.31:61808ss komutunun çıktısı büyük olacaktır, bu yüzden çıktıyı kaydırmak için ss | less komutunu kullanabilirsiniz.
TCP, UDP ve Unix soketlerini filtreleme
TCP, UDP veya Unix soket ayrıntılarını filtrelemek istiyorsanız, ss komutuyla birlikte “-t”, “-u” ve “-x” flag’lerini kullanın. Belirli portlara yapılan tüm bağlantıları gösterecektir. Bağlı ve dinlenen portları listelemek istiyorsanız, aşağıda gösterildiği gibi belirli flag ile birlikte a kullanabilirsiniz.
ss -ta
ss -ua
ss -xaTüm dinleyen portları listeleme
root@sezer:~$ ss -lt
State      Recv-Q Send-Q      Local Address:Port          Peer Address:Port
LISTEN     0      128                     *:ssh                      *:*
LISTEN     0      50                     :::http-alt                 :::*
LISTEN     0      50                     :::55857                   :::*
LISTEN     0      128                    :::ssh                     :::*
LISTEN     0      50                     :::53285                   :::*Tüm kurulan bağlantıları listeleme
Tüm kurulan portları listelemek için, aşağıda gösterildiği gibi state established flag’ini kullanın.
ss -t -r state establishedDinleme durumundaki tüm soketleri listelemek için,
ss -t -r state listeningtraceroute
Eğer sisteminizde veya sunucunuzda traceroute utility’si yoksa, yerel depodan kurabilirsiniz.
Traceroute, bir ağ sorun giderme utility’sidir. Traceroute kullanarak, belirli bir paketin hedefe ulaşması için gereken hop sayısını bulabilirsiniz. Esasen, paketin sunucunuzdan uzak ana bilgisayara kadar olan yolunu izleyebilirsiniz.
Örneğin,
traceroute google.comÇıktı aşağıdaki gibi olacaktır;
traceroute to google.com (173.194.33.163), 30 hops max, 60 byte packets 1 ec2-50-112-0-84.us-west-2.compute.amazonaws.com (50.112.0.84) 1.974 ms 1.895 ms 1.899 ms 2 100.64.1.247 (100.64.1.247) 1.414 ms 100.64.1.137 (100.64.1.137) 1.127 ms 100.64.1.97 (100.64.1.97) 1.313 ms 3 100.64.0.198 (100.64.0.198) 1.443 ms 100.64.0.62 (100.64.0.62) 2.160 ms 100.64.0.60 (100.64.0.60) 2.116 ms 10 66.249.94.214 (66.249.94.214) 6.313 ms 7.104 ms 209.85.249.34 (209.85.249.34) 5.986 ms 11 209.85.244.65 (209.85.244.65) 6.157 ms 6.341 ms 6.574 m. 12 sea09s18-in-f3.1e100.net (173.194.33.163) 6.302 ms 6.517 ms 6.071 msYukarıdaki çıktı, sezer.in AWS ec2 sunucusundan google.com’a ulaşmak için hop sayısını (12) gösterir.
Bu utility, ağ paketlerinin ana bilgisayara ulaşmaması ile ilgili sorunları gidermek istediğinizde çok kullanışlıdır.
mtr
mtr utility’si, ağ darboğazlarını gidermek için kullanılan bir ağ tanılama aracıdır. Ping ve traceroute’un işlevselliğini birleştirir.
Örneğin, aşağıdaki komut, gerçek zamanlı olarak traceroute çıktısını gösterir.
mtr google.com
Mtr report
–report flag’ini kullanarak bir rapor oluşturabilirsiniz. mtr raporunu çalıştırdığınızda, hedefe 10 paket gönderir ve raporu oluşturur.

dig
Eğer DNS lookup ile ilgili bir işiniz varsa, “dig” komutunu kullanarak DNS name server’ları sorgulayabilirsiniz.
Dig ile tüm DNS kayıtlarını alın
Aşağıdaki komut, x.com’un tüm DNS kayıtlarını ve TTL bilgilerini döndürür.
dig x.com ANY
Verbose olmadan çıktı almak için +short kullanın.
dig google.com ANY +shortDig ile belirli bir DNS kaydını alın
Örneğin, belirli bir domain adı için A kaydını almak istiyorsanız, dig komutunu kullanabilirsiniz. +short, bilgiyi verbose olmadan sağlar.
dig www.google.com A +shortBenzer şekilde, diğer kayıt bilgilerini ayrı ayrı almak için aşağıdaki komutları kullanabilirsiniz.
dig google.com CNAME +short
dig google.com MX +short
dig google.com TXT +short
dig google.com NS +shortDig ile ters DNS lookup yapın
Dig kullanarak ters DNS lookup gerçekleştirebilirsiniz. Aşağıdaki komutu kullanarak 8.8.8.8 IP adresini istediğiniz IP ile değiştirin.
dig -x 8.8.8.8nslookup
Nslookup (Name Server Lookup) utility’si, DNS girişlerini kontrol etmek için kullanılır. Dig komutuna benzer.
Bir domain’in DNS kayıtlarını kontrol etmek için aşağıdaki komutu kullanabilirsiniz
nslookup google.comAyrıca IP adresi ile tersine lookup yapabilirsiniz.
nslookup 8.8.8.8Bir domain adının tüm DNS kayıtlarını almak için aşağıdaki komutu kullanabilirsiniz.
nslookup -type=any google.comBenzer şekilde, mx, soa gibi kayıtlar için sorgu yapabilirsiniz.
nc (netcat)
nc (netcat) komutu, ağ komutlarının İsviçre çakısı olarak bilinir.
nc kullanarak, belirli bir portta çalışan bir hizmetin bağlantısını kontrol edebilirsiniz.
Örneğin, ssh portunun açık olup olmadığını kontrol etmek için aşağıdaki komutu kullanabilirsiniz.
nc -v -n 192.168.33.10 22netcat ayrıca TCP/UDP üzerinden veri transferi ve port taraması için kullanılabilir.
Port taraması bulut ortamlarında önerilmez. Ortamınızda port tarama işlemlerini gerçekleştirmek için bulut sağlayıcısına başvurmanız gerekir.
telnet
Telnet komutu, bir porttaki TCP bağlantılarını troubleshooting için kullanılır.
Telnet kullanarak port bağlantısını kontrol etmek için aşağıdaki komutu kullanın.
telnet 10.4.5.5 22route
“route” komutu, sisteminizin route tablosunun ayrıntılarını almak ve manipulate etmek için kullanılır. Route komutunun birkaç örneğine bakalım.
Tüm rotaları listeleme
Mevcut rotaların tümünü listelemek için “route” komutunu herhangi bir argüman olmadan çalıştırın.
root@sezer:~$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         ip-172-31-16-1. 0.0.0.0         UG    0      0        0 eth0
172.17.0.0      *               255.255.0.0     U     0      0        0 docker0
172.31.16.0     *               255.255.240.0   U     0      0        0 eth0Çıktıyı herhangi bir hostname olmadan sayısal formda almak istiyorsanız, “route” komutuyla birlikte “-n” flag’ini kullanabilirsiniz.
root@sezer:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.31.16.1     0.0.0.0         UG    0      0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.31.16.0     0.0.0.0         255.255.240.0   U     0      0        0 eth0tcpdump
tcpdump komutu, öncelikle ağ trafiğini troubleshooting için kullanılır.
Not: tcpdump komutunun çıktısını analiz etmek belirli bir öğrenme gerektirir, bu nedenle bunun açıklanması bu makalenin kapsamı dışındadır.
tcpdump komutu, sistemin ağ arayüzleriyle çalışır. Bu nedenle komutu çalıştırmak için yönetici ayrıcalıklarına ihtiyacınız vardır.
Tüm ağ arayüzlerini listeleme
Tüm arayüzleri listelemek için aşağıdaki komutu kullanın.
sudo tcpdump --list-interfacesBelirli bir arayüzde paketleri yakalama
Belirli bir arayüzdeki paketlerin dump’ını almak için aşağıdaki komutu kullanabilirsiniz.
Not: Paket yakalamayı durdurmak için ctrl + c tuşlarına basın.
sudo tcpdump -i eth0Paket yakalamayı sınırlama
Paket yakalamayı sınırlamak için -c flat’ini bir sayı ile kullanabilirsiniz.
Örneğin,
sudo tcpdump -i eth0 -c 10Tüm arayüzlerde paket yakalama
Tüm arayüzlerde paketleri yakalamak için aşağıda gösterildiği gibi any flag’ini kullanın.
sudo tcpdump -i anylsof
lsof, günlük Linux troubleshooting’de kullanılacak bir komuttur. Bu komut, Linux sistemleriyle çalışan herkes için eşit derecede önemlidir.
Tüm açık dosyaları listelemek için lsof komutunu çalıştırın.
lsofGeliştiricilerin ve DevOps mühendislerinin sıkça karşılaştığı hatalardan biri “Bind failed error: Address already in use” hatasıdır. Bu durumda, bir port ile ilişkili işlem kimliğini aşağıdaki komutu kullanarak bulabilirsiniz. Ardından, portu serbest bırakmak için işlemi sonlandırabilirsiniz.
lsof -i :8080Üçüncü Parti Ağ Sorun Giderme Araçları
Üçüncü parti çözümlerden temin edilebilecek daha fazla ağ sorun giderme komut satırı utility’si mevcuttur.
Bu araçları ayrı ayrı yüklemeniz ve sorun giderme amaçlarınız için kullanmanız gerekir. Güvenlik uyumluluğu nedenleriyle, her kuruluş bunu yapmanıza izin vermeyebilir.
Ancak, üçüncü taraf araçları kullanma seçeneğiniz varsa, onları keşfedebilirsiniz.
Aşağıdaki tabloda, farklı kategoriler altında bazı araç bilgilerini organize ettim:
| Kategori | Açık Kaynak Araçlar | 
|---|---|
| Network Scanners | Nmap, Zenmap (Nmap için GUI) | 
| Packet Analyzers | Wireshark, Tcpdump | 
| Bandwidth Monitors | BandwidthD, Cacti | 
| Port Scanners | Nmap, Masscan | 
| Ping/Traceroute Tools | MTR (My Traceroute) | 
| Wireless Network Analyzers | Wireshark (kablosuz için), Kismet | 
| Network Simulators | GNS3, Mininet | 
| DNS Tools | DNSperf | 
| Network Performance Testing | iperf | 
Sonuç
Bu makalede, ağ sorun giderme ve yapılandırma için önemli Linux komut satırı utility’lerini ele aldık.
Sistem yönetimi, DevOps veya SRE rolleriyle yeni başlıyorsanız, üzerinde çalıştığınız projeleri desteklemek için bu utility’leri öğrenmek önemlidir.
Her utility’nin birçok işlevselliği vardır ve gereksinimlerinizi karşılamak için daha fazlasını keşfedebilirsiniz.
Eğer ilginizi çekerse Helm Chart : Yeni Başlayanlar İçin 1 Konuda Detaylı Rehber konuma da göz atabilirsiniz.
