Pratik Bilgiler Komutlar: Linux
Merhabalar. Serimizin bu yazısındaki ipuçları linux işletim sistemleri ile ilgili olacak.
- İki linux bilgisayar arasında nasıl dosya kopyalanır?
- Linux’ta her şeye otomatik olarak yes demek. Elle her sorulduğunda yes demekten kurtulmak – otomatik yes demek – otomatik evet demek.
- Linux CentOS7’de zaman dilimini İstanbul olarak ayarlamak.
- Linux CentOS7’de tarih saati güncellemek
- Aramada büyük-küçük harf duyarlılığını kaldırmak(name -> iname)
- Bir dosya içinde sadece TC kimlik numaralarını yakalayan düzenli ifade (regex)
- Bir dizin içinde kaç dosya var?
- Bir dosya hangi diskte ve mount point üzerinde?
- CentOS7 ntpd or chronyd
- Windows ana makineden linux sanal makineye dosya/klasör kopyalamak
- Bir dosyanın içeriğini tamamen silmek
- Linux bir port kullanılıyor mu? Kullanılıyorsa kim ve pid’si nedir?
- CentOS7 Linux repoyu kapatmak (disable repo with command)
- Ubuntu üzerine Pycharm kurmak ve Pycharm’ı arayüzden başlatmak
- Ubuntu üzerine Postman hızlı ve pratik şekilde nasıl kurulur?
- VMWare üzerindeki sanal Ubuntu Desktop makineye sabit ip adresi belirleme (set ubuntu static ip)
- Linux bir klasörü izlemek (watch a directory)
- Ubuntu Desktop klavyeyi Türkçe yapmak
- Birden fazla sunucuya paralel dosya kopyalama (pscp-pssh)
- Kafka topic içinde kaç tane kayıt var?
- Kafka topic 100 MB’yi geçmesin ve 10 dk sonra silinsin
- Linux bit port kullanılıyor mu? Kullanılıyorsa öldür lsof
1. İki linux bilgisayar arasında nasıl dosya kopyalanır?
scp ile kopyalama yapabiliriz.
scp [options] username1@source_host:directory1/filename1 username2@destination_host:directory2/filename2
2. Linux’ta her şeye otomatik olarak yes demek. Elle her sorulduğunda yes demekten kurtulmak.
Başına yes deyip | ile ayırdıktan sonra komut çalıştırırsak yes/no sorularına yes cevabını otomatik olarak verebiliriz.
yes | mkfs.ext4 /home/myBlockDevice
İkinci bir örnek de şu olsun: 6 adet sunucum var ve her birinde tensorflow=2.2.0 yüklü. Ben bunları kaldırmak istiyorum. Ancak 6 makineye komutu gönderdiğimde pip bana kaldırayım mı diye soracaktır. Ben de peşinen evet demiş olacağım.
[root@cdh1 ~]# dsh -aM -c "yes | python3.6 -m pip uninstall tensorflow"
3. Linux CentOS7’de zaman dilimini İstanbul olarak ayarlamak.
timedatectl set-timezone 'Europe/Istanbul'
4. Linux CentOS7’de tarih saati güncellemek
timedatectl set-time '2015-11-20 16:14:50'
Bu değer /etc/timezone dosyasında saklanır.
cat /etc/timezone Europe/Istanbul
5. Dosya aramada büyük-küçük harf duyarlılığını kaldırmak(name -> iname)
Genelde aramaları name ile yaparız. Eğer aramada büyük küçük harf duyarlılığını kaldırmak (making case-insensitive) istiyorsak iname kullanmamız yeterlidir.
[root@utility ~]# find /etc -iname "test*" /etc/test.txt /etc/TEST.txt
6. Bir dosya içinde sadece TC kimlik numaralarını yakalayan düzenli ifade (regex) nedir?
grep ' [0-9]\{11\} ' numbers_names.txt
7. Bir dizin içinde kaç dosya var?
Aşağıdaki komut /home dizininde kaç tane dosya olduğunu gösteriyor.
[root@cloudera]# ls -l /home/ | wc -l 4
8. Bir dosya hangi diskte ve mount point üzerinde?
df -Th /home/murat/movies.json Filesystem Type Size Used Avail Use% Mounted on /dev/sdc2 ext4 99G 79G 15G 85% /
9. CentOS7 ntpd or chronyd
RHEL 7’de ntpd, varsayılan ağ zaman protokolü arka plan programı olarak chronyd ile değiştirilir. Chronyd daha doğru ve akıllı zaman senkronizasyonu mekanizmasıdır. O yüzden ntpd kullanacağım diye zorlamayın.
10. Windows ana makineden linux sanal makineye dosya/klasör kopyalamak
Çoğumuz ana işletim sistemi Windows üzerine Virtualbox veya VMWare ile sanal linux makineler kurup çalıştırıyoruz. Peki ana makinemizdeki bir dosyayı sanal linux makinesine kopyalamak istersek ne yapmalıyız. Örnek Windows gitbash terminal üzerinden verilmiştir. Bunun için scp kullanabiliriz. Varsayılan portu 22’dir.
scp -p port_numarasi <windows_dosya> <kullanıcı>@<linux_sanal_makine_ip_veya_adi>:/linux/dizin Örnek: scp complex.txt root@k81:
Yukarıdaki örnek windows üzerindeki complex.txt dosyasını linux root diznine root kullanıcısı ile taşıdı. Benim makinem k81 ip adresi Windows hosts dosyasında tanımlı olduğu için ip yerine isim kullandım. Bu örnek dosya içindi şayet klasör kopyalayacaksanız complex: not a regular file şeklinde bir hata alacaksınız. Klasör ve içeriğini kopyalamak için -r eklemeniz yeterlidir.
11. Bir dosyanın içeriğini tamamen silmek
Linux üzerinde dosya içerikleriyle uğraşırken genelde nano veya vi gibi editörler kullanıyoruz. Ancak bu editörler Nodepad++ kadar konforlu değiller. Bazen bir dosya içini tamamen temizlemek isteriz. Bunu bahsi geçen editörlerle yapmak biraz güç. Dolayısıyla bu sorunu basit ve pratik olarak dosya dışından komut satırı üzerinden çözeceğiz.
> içi_temizlenecek_dosya.uzantı
12. Linux bir port kullanılıyor mu? Kullanılıyorsa kim ve pid’si nedir?
Zaman zaman bir portun açık olup olmadığını bilmek isteriz. Aşağıda paylaşacağım komut 5000 numaralı portun açık olup olmadığı bilgisini bize verecektir.
sudo netstat -tulnp | grep 5000 Sonuç: tcp 0 0 192.168.206.110:5000 0.0.0.0:* LISTEN 12080/python
Evet 5000 portu açık ve 192.168.206.110 numaralı ip üzerinden dinliyor. Komutta kullanılan -tulnp anlamı ise:
t – TCP bağlantıları göster.
u – UDP bağlantıları göster.
l – Sadece dinleme yapan (listening) prosesi göster bağlantı yapanlar değil.
n – Ip adreslerin isimlerini çözmeye çalışma
p – İlgili portu dinleyen prosesin adını göster
13. CentOS7 Linux repoyu kapatmak (disable repo with command)
CentOS’un paket yöneticisi yum’dur. yum ise paketleri /etc/yum.repos.d dizininde bulunan .repo uzantılı dosyalardan faydalanarak yönetir. .repo uzantılı dosyada temel olarak paketlerin nerede olacağı ve repo’nun aktif mi pasif mi olduğu bilgisi yer alır. Bazen repo^’yu silmek istemeyiz ancak kullanmak da istemeyiz. repo’yu pasif hale getirmenin iki yolu var. İlki editör ile repo içine girip enabled değerini 0 yapmak. İkincisi ise aşağıdaki komutu kullanmak. Komut öncesi ius.repo
cat /etc/yum.repos.d/ius.repo [ius] name = IUS for Enterprise Linux 7 - $basearch baseurl = https://repo.ius.io/7/$basearch/ enabled = 1 repo_gpgcheck = 0 gpgcheck = 1 gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-IUS-7
yum-config-manager --disable ius
Bu komut ius.repo olarak kayıtlı repoyu pasif hale getirecektir.
cat /etc/yum.repos.d/ius.repo [ius] name = IUS for Enterprise Linux 7 - $basearch baseurl = https://repo.ius.io/7/$basearch/ enabled = 0 repo_gpgcheck = 0 gpgcheck = 1 gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-IUS-7
14. Ubuntu üzerine Pycharm kurmak ve Pycharm’ı arayüzden başlatmak
Pycharm pyton geliştirme ortamlarından en popüler olanlarından biri. Bu soruda hızlı bir şekilde Pycharm’ı Ubuntu Desktop üzerinde nasıl kurarız ve terminalden başlatmak yerine arayüz/kısayol ile nasıl başlatırız onun cevabını veriyor olacağım. Çünkü terminalden başlattığımızda terminali meşgul ediyor ve sürekli açık bir terminal bunu çok istemiyoruz.
- Browser üzerinden PyCharm’ı indirin
- PyCharm Downloads’a inecektir. Onu kullanıcı home dizinine taşıyalım (/home/erkan)
- erkan@ubuntu:$ mv Downloads/pycharm-community-2020.1.2.tar.gz .
- Paketi açalım
- tar xzf /pycharm-community-2020.1.2.tar.gz
- pycharm olarak soft link verelim
- ln -s pycharm-community-2020.1.1 pycharm
- sudo nano /etc/environment komutu ile
PYCHARM_HOME=”/home/erkan/pycharm”
PATH sonuna :$PYCHARM_HOME/bin
ekleyelim - source /etc/environment ile değişiklikleri geçerli kılalım.
- pycharm.sh ile PyCharmı’ı başlatalım. Burada terminal açık kalıp boşuna terminali meşgul edecektir.
- Pycharm Arayüzünden Tools -> Create Desktop Entry işaretleyelim.
Dilerseniz bunu tüm kullanıcılar için yapabilirsiniz ancak sudo yetkisi ister. - PyCharm’ı normal olarak kapatalım.
- Şekil-1’deki noktalara tıklayıp PyCharm diye aradığımızda artık PyCharm icon karşımıza gelecektir. Ona tıklayarak terminali meşgul etmeden PyCharm kullanabiliriz.
15. Ubuntu üzerine Postman hızlı ve pratik şekilde nasıl kurulur?
Postman daha çok makine öğrenmesi modellerini bir web uygulaması üzerinden sunacakların, özellikle Python Flask ile, kullanabileceği bir araç. Özet olarak Postman API geliştirmenize ve test etmanize yardımcı oluyor. Şimdi bunu Ubuntu Desktop üzerine nasıl kurarız onun komutunu paylaşıyor olacağım.
erkan@ubuntu:$ sudo snap install postman [sudo] password for erkan: Çıktı: postman 7.25.2 from Postman, Inc. (postman-inc✓) installed
16. VMWare üzerindeki sanal Ubuntu Desktop makineye sabit ip adresi belirleme (set ubuntu static ip)
Sanallaştırma yazılımları ile sık sık linux makineler oluşturuyor ve bu makinelere ana bilgisayardan isim ile erişmek istiyorsanız ana bilgisayarın hosts dosyasına bu ip ve belirlediğiniz ismi eklemeniz gerekir. Ancak oluşturduğunuz sanal makine VMWare DHCP ile dinamik ip adresi alıyor ise makineyi müteakip açışınızda isim ip eşleşmesi bozulabilir ve artık siz isim ile sanal makineye ana makinenizden erişemez hale gelebilirsiniz. Aşağıda VMWare NAT ağına bağlı bir Ubuntu Desktop sanal makinenin ip adresini nasıl static yaparız onu göreceğiz. Genelde oluşan sanal bağlantı noktası adı ens33’dür, yine de ifconfig ile kontrol etmenizde yarar var.
/etc/netplan
içinde bulunan dosyanın adını değiştirerek yedekleyin ve 01-netcfg.yaml
adında yeni dosya oluşturun. Dosya içeriğini aşağıdaki gibi hazırlayın.erkan@ubuntu:~# cd /etc/network/netplan erkan@ubuntu:/etc/netplan$ cat 01-netcfg.yaml network: version: 2 ethernets: ens33: dhcp4: no addresses: [192.168.206.194/24] gateway4: 192.168.206.2 nameservers: addresses: [8.8.8.8, 8.8.4.4]
Değişikliği yaptıktan sonra makineyi yeniden başlattıktan sonra ifconfig komutuyla kontrol ettiğinizde ip numarasının 192.168.206.194 olduğunu göreceksiniz. Yukarıdaki değerleri kendinize uyarlamayı unutmayın.
17. Linux bir klasörü izlemek (watch a directory)
Bir klasörü izlemek istediğimizde özellikle streming veya log hareketleri watch gibi faydalı bir komut bulunuyor. Format:
watch [options] "komut /izlenecek/klasör"
Örnek:
watch -n 1 -d "ls -lh /home/myuser/log"
Seçeneklerin açıklamasını olduğu gibi buraya ekliyorum:
Options: -b, --beep beep if command has a non-zero exit -c, --color interpret ANSI color and style sequences -d, --differences[=<permanent>] highlight changes between updates -e, --errexit exit if command has a non-zero exit -g, --chgexit exit when output from command changes -n, --interval <secs> seconds to wait between updates -p, --precise attempt run command in precise intervals -t, --no-title turn off header -x, --exec pass command to exec instead of "sh -c"
18. Ubuntu Desktop klavyeyi Türkçe yapmak
System Sttings -> Keyboard -> Text Entry -> Input resourse to use -> + -> Turkish
Başka bir yazıda görüşmek dileğiyle hoşça kalın…
19. Birden fazla sunucuya paralel dosya kopyalama (pscp-pssh)
# Format pscp.pssh -h sunucular kaynak_dosya hedef_klasör pscp.pssh -h otherhosts /var/kerberos/krb5kdc/kadm5.acl /var/kerberos/krb5kdc/kadm5.acl
Yukarıdaki otherhosts dosyası içinde hedef sunucuların isim veya ip adresleri bulunur. Ayrıca pssh kurulu olmalıdır. yum -y install pssh
20. Kafka topic içinde kaç tane kayıt var?
How many records in a Kafka topic?
kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092 --topic test1 --time -1 --offsets 1 | awk -F ":" '{sum += $3} END {print sum}' 159
21. Kafka topic 100 MB’yi geçmesin ve 10 dk sonra silinsin
Topic bazlı konfigürasyonları kullanarak sadece o topic için topic boyutunu ve mesajların ömrünü belirleyebiliriz. Aşağıdaki rakamlar yanlış değilse 95 MB ve 10 dk yaptık.
kafka-topics.sh --bootstrap-server localhost:9092 --create --topic test2 replication-factor 1 --partitions 3 --config max.message.bytes=64000 --config flush.messages=1 --config retention.bytes=100000000 --config retention.ms=604800
22. Linux bit port kullanılıyor mu? Kullanılıyorsa öldür lsof
Baze aşağıdakine benzer hatalar alabiliriz
bind: Address already in use channel_setup_fwd_listener_tcpip: cannot listen to port: 8080 Could not request local forwarding.
Bunun sebebi aynı portun başka bir proses tarafından dinleniyor olmasıdır. Peki bir portu dinleyen prosesin PID numarasını bulup onu öldürebilir miyiz? Evet. Aşağıdaki örnek lsoft ile yapılmıştır.
erkan@ubuntu:~$ lsof -ti:8080 65350
8080’i dinleyen 65350 numaralı proses imiş. Onu sudo kill -9 65350 komutuyla öldürebiliriz.