01/08/2019
systemd -> ilk calisan process bu, process id'si 1.
systemd calisiyor,
oncelikle service(daemon) nedir?
Bir amac uzere programlanmis, surekli hizmet veren bir uygulama.
rsyslog servisi surekli calisiyor. her oturum actigimizda, baska isler yaptigimizda, sistemle ilgili loglari duzenli bir sekilde topluyor.
systemd'de .service, .mount, .socket, .timer gibi parcalar var. systemd bunlara unit diyor.
unit -> .service
-> .socket
-> .mount
-> .device
-> .timer
seklinde kategorize edilmistir.
systemd basliyor, diger servisleri baslatiyor. initd basliyor, diger servisleri baslatiyor.
ssh servisi baslayacaksa, once network servisinin baslamasi lazim.
birbirine bagli,, bunlarin hiyerarsik bir sekilde baslamasini saglayan servis initd idi, simdi systemd oldu. initd, sisteme fazla karismiyordu, ama simdi systemd, hemen hemen her servise karisiyor.
system'nin artilari cok, mesela initd, servisleri sirayla baslatiyor. systemd kullanan bir sistemde, giris ekrani gelmeden ssh atma imkanina sahip olabilirim. cunku birbiriyle alakasi olmayan servisleri paralel olarak baslatabiliyor.
Boylece sistem daha hizli aciliyor.
systemd'de servisler bolunmus. mesela eskiden rsyslog'un sadece servis'i vardi. burada ise rsyslog'un servisi ayri, soketi ayri, timeri ayri...
servislerin yonetimi konusunda systemd'nin bazi ozellikleri var.
mesela;
unit1
unit2
unit3
.
.
.
olabilir.
Her uygulama, hizmet veren her seye unit diyoruz.
Bu unit'in .service'i olabilir, .socket'i olabilir, .mount'u olabilir...
Bu sekilde unit'ler bir araya gelince bunlar da target'lari olusturuyor.
Bu unit'ler, iliskiye gore target'larin icine atiliyor.
Mesela Windows'ta Safe Mode var.
Targetlarin mantigi soyle,
Target1 -> single mode // isletim sisteminizi bu modla baslattiginizda, kurtarma modunda basliyor
Bu sekilde targetlar arasinda farkliliklar bulunuyor.
Linux'ta 'x' diye bir servis var, goruntuyle ilgili servisler sunuyor.
x -> wayland // olma yolunda
cat /var/log/boot.log // sistem acilirken gecen yazilarin yazildigi dosya
less /etc/fstab // file system, yani kernel, buraya bakarak sistemi boot ediyor. ilk root(file system) kernel'e mount olur
14:30
Dizinler
ilk dizin, / yani kok dizin, root dizin,
/bin -> executable files, calistirilabilir dosyalar
boot ->
/etc -> ayar dosyalari
/home -> normal user'lar, home ve tmp disinda baska yerlere yazamaz.
/lib -> uygulamalarin, baska uygulamalarla birlikte ortaklasa kullanacaklari dosyalar burada tutulur.
/dev -> linux'ta her sey bir dosyadir, donanimlar da birer dosyadir. o dosyaya ulastigimizda donanima ulasmis oluyoruz. mesela sda, bizim diskimiz
/tmp -> dizini, tum kullanicilarin yazabildigi bir yer. kullanicilar gecici dosya olusturmak istediginde tmp'nin altinda yaratiyor.
/mnt -> bu dizinin konmasinin temel nedeni, diskimizi ozel bir yere mount etmeyeceksek, buraya mount ederiz.
/media -> takilabilir, cikarilabilir aygitlarin yine on tanimli olarak baglandigi yerdir. sisteme etki ederek baska yerlere de baglayabiliriz ama default olarak bu boyledir.
/root -> /*home'u ayri bir diske atarsak, bilgisayar baslarken root, o diskle beraber baslamasin diye
baska bir diski home'a mount edersek, bilgisayar baslarken o 2. disk gec baslarsa,*/
home'u networkte bir yerden mount etsek, bilgisayar acildiginda networkteki o dizin baglanmazsa, bu noktada sistemi girip duzeltecek olan kim? root. eger root home'un altinda olsaydi root dizini gitmis olacakti. root ayri oldugu icin, home'dan bagimsiz olarak giris yapip sistemi duzeltebilir.
/sbin -> normal kullanicinin kullandigi path uzerine kayitli komutlarin arasina "sbin"deki komutlar gelmez. o yuzden root'a ozeldir ve full path yazarak erisilebilir.
/usr -> burada da root dizininin altindakiler gibi dizinler var. neden? boot sirasinda bilgisayarin calistirilmasi sirasinda gerekli olmayan dosyalar /usr 'in altina verilmis,
eskiden /usr'in altina da ayri bir disk bolumu yapilabiliyordu. olur da /usr mount olmazsa diye ayri yerlere ayrilmis bu sekilde.
Cunku zaman icerisinde /usr'nin ayri bir disk olarak baglanmasi pratigi kaybedilmis. Eskiden disk pahali oldugu icin tasarruf ediyorlardi. Artik disk ucuz oldugu icin 300 mb icin ugrasmiyorlar. Artik sembolik baglaniyor.
/opt -> normalde biz linux'ta calisitirilabilir dosyalar bin'e gidiyor, kutuphaneler lib'e gidiyor.. bazi programlar var ki, bunlara laf dinletemiyoruz. /bin'in altina falan dosya koydugumuz zaman calismiyor. bazi uygulamalara karismiyoruz, kendi dizininin altinda calismasi gereken, /etc veya /bin gibi dizinlere dagitamadigimiz uygulamalari, /opt altinda bir dizin acarak oraya yerlestiriyoruz.
/bin /lib /etc gibi hiyerarsilere uymayan dosyalarin gittigi yer.
/proc -> her bir surec icin bir dizin aciliyor. bu gercek bir dosya sistemi degil, sanal. o dizinin icerisinde o surecle ilgili bilgiler yer aliyor. mesela biz ps yazariz, calistigi zaman aslinda /proc'un altindan bilgileri aliyor.
networkle ilgili bilgi vs. yapmislar, sonra
/sys gelmis, proc ta olmamasi gerekenler buraya gitmis
/var -> uygulamalarin urettigi veri dosyalaridir. bunlar log'lar olabilir, yaziciya gonderilen veri dosyalari olabilir. mesela siz bin'i ucursaniz, sbin'i ucursaniz geri yukleyemez misiniz? yukleriz. var'in altindaki giderse, geri yukleyemeyiz. Mesela var/log'takiler, uygulamalar calisirken gelen dosyalar. /var/lib/mysql veritabani sunucusunun veri dizini. Buradaki dosyalarin bir kismi vazgecebilecegimiz dosyalar. Bu yuzden
/srv -> dedigimiz bir dizin olusturulmus, sistemler adapte edilirse daha aktif kullanilacak.
Network
Network,
Her birimizin bir bilgisayari var, bunlarin birbirleriyle haberlesebilmesi icin bunlara birer adres vermek gerekiyor.
Bilgisayarlarin her birine birer ip adresi vermek gerekiyor ki, dosyalarin nereye gidecegi ve nereden geldigi bilinebilsin.
Bunun icin 4 tane haneden olusan bir adresleme metodu olusturmuslar.
___.___.___.___
Mesela bir sokakta kac tane ev olabilir? Bu ip adresine gore 255 tane ev olabilir.
Neden boyle? Cunku ya 128 olacakti, ya 512 olacakti. 256 daha optimize olarak hesaplanmis.
Il Ilce Sokak Ev
255. 255. 255. 255
Mesela biz bir ip verdik, 195.112.152.2
Meltem, Zagor'a ulasmak istediginde,
Zagor'un ip'si de 195.112.152.33 olsun
Ayni agdaki bilgisayarlar, birbirleriyle, broadcast denilen bir adresten haberlesiyorlar. Bu Broadcast dedigimiz adres, mesela 195.112.152.255 olsun. Sen buraya bir sey gonderdigin zaman, o agdaki herkese ulasiyor. Bu noktada eger Meltem, Zagor'a ulasmak isterse, genel yayina veriyor, uzerine de Zagor'a diye yaziyor. Zagor'un onunden gecerken Zagor bakiyor bu paket benim diyor ve aliyor.
Peki Meltem'in Zagor'a gonderdigi paketi, Ceyhun'un almasini engelleyen sey nedir?
Zaten ag uzerinden gecen paketler, aslinda ag uzerindeki herkesin onunden geciyor. Anlasilmamasi istenirse aradaki paketler sifreleniyor. Aslinda Meltem'in gonderdigi seyi herkes gorebiliyor.
Bir de Varsayilan Ag Gecidi diye bir sey var.
Meltem'in bir router kablosu var. Routing table diyor ki bu networkteysen o zaman bagirsan yeter.
Diyelim ki Mesela Kastamonu'ya, yani 139.179.179.3'e gidecek. O zaman bir ust aga git diyor. Orada da bir yonlendirme tabelasi(routing table) geliyor. Burada Meltem, Kastamonu'ya ne kadar zamanda gidecegini bilmiyor, sadece ne tarafa gidecegini ogreniyor. Iste iki tane bilgisayar bu sekilde haberlesiyor.
O routing table, DHCP protokoluyle, o sunucu sevisi sana veriyor o tabloyu. Sen burdan ciktigin anda yeni bir aga giriyorsun, bu sefer o yeni ag, sana yeni bir tablo veriyor.
DNS var.
Netmask var. Ne ise yariyor?
Her sokakta 255 tane evim olmak zorunda mi?
En fazla 255 ev olmak zorunda, ama 255 tane ev olmak zorunda degil.
Kucuk bir ilcede 50 tane sokak olabilir.
IP'ler bitmesin diye yontem gelistirmisler.
Mesela 0-32 arasi bir sokak olabilir.
32-48 arasi da bir sokak olsun
48-128 arasi da bir sokak olsun
128-255 arasi da bir sokak olsun
Bu ag maskesi(netmask) sayesinde -> o bize, bulundugumuz agda ne kadar ip kullanabilecegimizi soyluyor.
Sizin, maskelemek dedigimiz sey ne, siz artik surekli goremezsiniz. Ag maskesi de kapatmak icin kullaniliyor. Ben bu kadarlik kismi kapatiyorum, sizin sahip olabileceginiz maksimum ip havuzu bir miktar kaliyor. diyor.
Bu sekilde network'un alt aglara bolunup bolunmedigini, bolunduyse hangi kisimda yer aldigimizi belirtiyor.
Internette birsuru ip hesaplamasi testi var. Buraya girip maskemizi falan yazabiliriz.
Bu hesaplamalar daha cok Ag Yonetimi konularina giriyor.
Interfaces var, network configuration dosyalari. Ag aygiti dosyalari var.
Bir bilgisayarin ip'si olmaz, bilgisayarin uzerindeki aygitin ip'si olur.
Ethernet aygiti, Wifi aygiti, bunlar birer ag aygitidir. Sanal ag aygitlari da var. Her aygitin ayri ayri ip adresleri var.
Interface'leri ayarlarken o sekilde dusunmemiz daha iyi olur.
Portlar,
Aslinda yaptiginiz sey, ip adresini bolmek. Simdi normalde, yaptiginiz sey, aslinda ip adresinizi bolmek.
Elimizde 139.179.179.3 diye bir adres var diyelim. Biz kapisini caldigimizda ssh'la konusmak isteyebiliriz, bir baskasi caldiginda dns konusmak isteyebilir. O yuzden adreste ayri ayri kapilar var, bu kapilar,
Boylece kapi calindigi zaman, http icin konusmak isteyen, http ile haberlesiyor, ssh ile haberlesmek isteyen, ssh ile haberlesiyor.
ip'yi 65535'e bolmusuz, her birinin ardina, o dilden anlayan bir eleman dikmisiz.
Bu kapilara da port demisiz.
Teorik olarak, tek bir port uzerinden farkli servisleri calistirabiliriz, birden fazla dili anlayan bir servis kullanirsak.
Iki tane surec ayni anda 535 portunu dinleyemez, ama farkli dillerden anlayan bir surec o kapiya sunulabilir.
Mac adresi nedir?
Aygitin adresi. TCP/IP networkunde calisan ama mac adresi olmayan bir aygit yok. Mac adresi sabit degil, degistirilebilen bir sey. Aslinda ilk basta, bulundugumuz networkte haberlesmemizi sagliyor.
DHCP sorgusu hangi adresten yapiliyor ve donuste hangi adrese geliyor? Iste bu durumu cozen sey, MAC adresi. Mac adresi ile soruyor ve yanitini aliyor.
Mesela Meltem bu agdan cikti, o agdakiler Meltem'in mac adresini bulabilirler mi?
Mac adresi, bulundugumuz networkun disina cikmaz, tasinmaz. Ayni agdakiler Mac adresi uzerinden haberlesebiliyor.
Ip, ag disinda haberlesebilmek icin kullaniliyor.
Mac adresine gore sabit bir ip adresi verilebilir, ya da Mac adresine ip vermeyebilir. Mac adresi, TCP/IP paketleri tasimiyor.
SSH kullaniminda anahtarla erisim.
Script nedir? neye diyoruz? neye demiyoruz?
bir C kodu yazdik, 10 satir surdu, kisa yoldan bir isi yapmami sagladi, bu bir script mi?
Programlama dilleriyle ilgili temelde ikiye ayrilir.
1= derlenen dil,
2- Yorumlanan dil.
Yorumlanan dilde siz programi veriyorsunuz ve alet o programi isliyor.
Herhangi bir sekilde derlemeye ihtiyac duymadan kullanilabilen dillere script dili deniyor.
Mesela bash script dedigimiz sey ne? 5-6 tane alt alta komut yaziyoruz, basina da
#!/bin/bash
yaziyoruz.
Burada bir script var, bu scripti sen, su komutu calistirarak yorumlayacaksin.
Normalde '#' yorumdur ama, #! seklinde kullanilirsa, bu dilin hangi komutla yorumlanacagini soyluyor.
Derlenenler derlenir, bunlarin derlendikten sonra binary'si olur. Bilmedigim bir dilde yazmislar, derlemisler, biz de o binary'i calistiriyoruz.
rsync
rsync nedir?
boyle bir komut var, kendisine bir dizin soyluyorsunuz, mesela /home/zagor diyorsunuz,
sonra baska bir dizin soyluyorsunuz
/mnt/zagor
rsync'e diyorsunuz ki birinci dizinle ikinci dizin esit olacak. O da gidiyor ve kiyas yapiyor. Destination directory'de olmayip, Source Directory'de olan ne varsa onlari alip Destination directory'e tasiyor, ... birkac detay daha
destination'da olan ve source'ta olmayanlari da destination'dan siliyor. Bunlarin parametreleri de var.
bash
bash
Mesela bir kullanicimiz var, biz bu kullanicidayken sahip oldugumuz ortam degiskenlerimiz var, biz bu kullanicinin altindayken mesela
$var="merhaba"
dedigimde,
baska bir kullaniciya gectigimizde,
surecler ve rsyslog
jobs, servis, systemd, initd, crond systemd, dns, bash, script, git
02/08/2019
Cloud nedir?
System as a service nedir?
Mesela digitalocean bize apache server hazirlayip verdi..
Software as a service nedir?
Donanim...
Docker...
Git altyapisi, Wordpress, kurulu sekilde, bu da Program as a service.
Mesela Spotify da program as a service.
Jobs
Ctrl+Z yapinca isleri yarim birakip, arka plana atmis oluyoruz.
// Mesela single user mod'da oldugumuzu dusunelim.
Mesela rsync baslattik diyelim, devam ediyor, yeni terminal acamiyoruz, bir sure arka plana atabiliriz.
fg // komutuyla foreground yaparak isi geri one alabiliriz.
bg // bu da background
for i in $(ls -l) ; do echo "<html> $i" ; done
14:30
Bir yaziliminn ozgur olmasi icin 4 temel madde vardir.
Ozgurluk 0: Yazilimi, istedigimiz herhangi bir amac icin kullanabilmeliyiz.
Ozgurluk 1: Yazilim, her turlu ihtiyac icin herhangi bir engel olmadan degistirilebilmeli.
Ozgurluk 2: Yazilimi, istedigimiz herkesle, engel olmadan paylasabilmeliyiz
Ozgurluk 3: Yazilim, uzerinde degisiklik yapildiktan sonra da ozgurce dagitilabilmeli
Programlama dilleri, bilgisayarla, makineyle iletisime gecebilmemiz icin ara dillerdir.
16:00
https://wiki.archlinux.org/index.php/systemd
systemctl list-units
systemctl restart rsyslog.service
systemctl --failed
systemctl status ssh
https://stackoverflow.com/questions/15328623/simple-file-server-to-serve-current-directory
Python'la yapilabilen bir sey
Vermis oldugum dizindeki dosyalari, benim acmis oldugum port uzerinden kullanicilara sunuyor.
create and enable a simple systemd service
https://www.oueta.com/linux/create-and-enable-a-simple-systemd-service/
systemd'de stop yazmazsam daha iyi. initd'den farklarindan biri olarak.
/* bu sekilde servis olusturdugumuzda eksikler var...
uygulamamizda eksikler var, log kayitlarini duzgun tutabilen bir servis degil.
network servisine ihtiyaci var, network'un online olmasi lazim.
*/
python http serve kutuphanesiyle tcp socket acabiliyoruz
python3 -m .....
Pyhton programlama dilinin http kutuphanesini kullanarak, file serve edebildik, tcp socket acip, ilgili porttan bu dosyayi sunabildik.
Bu pythonla tek satirlik bir bash script yazdik.
/bin/bash /opt /sunsun_runner // ne yazarsak onu execute ediyor.
systemctl daemon-reload
Homework:
ekrani restart edince restart ettim desin
git 'i tab'layinca parametreleri geliyor,
Bunlar da var olan projeyi bilgisayarimiza indirmek icin
git clone http://github.com/ysfduzgun/selectra
icine giriyorum
ls -a
diyince .git diye bir dizin var.
cat README.md
python selectra.py
xsel not found
sudo apt install xsel
python3 selectra.py
sudo apt install xsel python3-bs4 python3-urllib3
notify-send command not found
sudo apt install libnotify.bin
notify-send "yusuf"
python3 selectra.py // dedigimizde, tarayicida secili olan kelimeyi Tureng'te aratip sonuclari bize doner.
Bunu kisayol olarak bir tusa atarak kullanabiliriz.
git status // o anki bulundugumuz git dizininde neler var onlari kontrol ediyor.
o anki git dizinimizin durumuna bakiyoruz
git branch // o an bulundugumuz branch'i gosteriyoruz
git checkout master // branch'i degistiriyoruz, burada master branch'e gectik
Mesela bir dosyayi degistirdik,
git status // dersem modified uyarisi alirim mesela,
git add . // degisiklik yaptigim her seyi ekler
git add README.md // tek dosyayi ekler.
Tek tek aciklama yaparak yazmak daha iyidir. Her dosyada yapilan degisikligin aciklamasini yazariz.
git commit -m "bagimliliklara libnotify-bin paketi eklendi" // diyince hata aldik cunku git'i ilk kurdugumuzda push etmek icin, repository olusturmak icin bazi ayarlari yapmak gerekiyor.
git config --global user.email "yzduzgun@gmail.com"
git config --global user.name "yzduzgun"
git commit -m "bagimliliklara libnotify-bin paketi eklendi" // simdi commit ettik
git status // commit edilmis
git push -u origin master // master branch'a, burada kullanici adi ve sifre istiyor.
git status // dedigimizde commit edilmis oldugunu gorebiliriz.
Github uzerinden yeni ssh key yaratabiliriz.
03/07/2019
Cron ile zamanlanmis gorevler
https://www.ostechnix.com/a-beginners-guide-to-cron-jobs/
man crontab
man cron
crontab -l // herhangi bir gorev listesini gormek icin
crontab -e // diyerek edit mode'a geciyoruz.
buradan bir edit mode sececegiz
/tmp/crontab.iDTJOE/crontab // file'inin icine sunu yazacagiz:
* * * * * echo `date` >> /home/yusuf/cronjob1
how to redirect dev random soundcard
https://unix.stackexchange.com/questions/13732/generating-random-noise-for-fun-in-dev-snd
https://stackoverflow.com/questions/6465624/how-to-pipe-dev-urandom-to-linux-sound-output
With Proton and Steam Play, many Windows games now work on Linux!
https://www.protondb.com/
Steam Play ozelligi var,
https://snapcraft.io/store
snapd // sudo snap install diyerek cross platform tarzi uygulama indirebiliyoruz
Linux platformlariyla Ilgili Bilgi alabilecegimiz ve takip edebilecegimiz siteler:
github
https://github.com/
distowatch
https://distrowatch.com/
gitlab
https://about.gitlab.com/
salsa debian
https://salsa.debian.org/public
forum pardus
https://forum.pardus.org.tr/
forum ubuntu tr
https://forum.ubuntu-tr.net/
mint forum turkiye
https://forum.linuxmint.net.tr/
forum manjaro
https://forum.manjaro.org/
noobslab
https://www.noobslab.com/
phoronix linux // en guncel, en hizli, cekirdekle, donanimla, genel uygulamalarla ilgili, takip edilebilecek bir site
https://www.phoronix.com/scan.php?page=home
omgubuntu
https://www.omgubuntu.co.uk/
linuxinsider
https://www.linuxinsider.com/
reddit
https://www.reddit.com/
https://www.reddit.com/r/unixporn/ // ornek kanal
archlinux
https://wiki.archlinux.org/ // cok iyi anlatilmis bir site, IRC channnels'ta takilabiliriz, bu sitede takilirsak bircok konuda bilgi sahibi olabiliriz.
debbian wiki lvm // sonuna kadar okunmasi gereken bir konu
https://wiki.debian.org/LVM
Linux'ta domain server'lar,
cat /etc/resolv.conf // ta tutuluyor. Degistirsek bile, Network degisince Network Manager tarafindan yeniden duzenleniyor.
/etc/dhcp/dhclient.conf // burada da dhcp ile ilgili bir seyler var
07/08/2019
Morning
C++
Header File solution
https://latedev.wordpress.com/2014/04/22/common-c-error-messages-2-unresolved-reference/
Afternoon
Django
https://github.com/django-erp/django-erp // bu proje bir denenmeli
https://virtualenv.pypa.io/en/latest/ // python virtual environment hakkinda bilgi verir
https://projecteuler.net/archives // bazi matematik problemlerini kod algoritmalariyla cozebiliriz
09/08/2019
Python modules
16/08/2019
Python
19/08/2019
SQLite Database
SQLite Database doesn't have to set up a database server.
How to create a database on SQLite?
We can write the Python script below:
********
import sqlite3
con = sqlite3.connect("library.db")
cursor = con.cursor()
con.close()
********
How to create a table on a SQLite Database?
********
def create_table():
cursor.execute("CREATE TABLE IF NOT EXISTS bookcase (Name TEXT, Author TEXT,
Publisher TEXT, Page_Count INT)")
con.commit()
********
All the commands belong to the Python Course owned by Mustafa Murat Coskun are inside this page:
https://nbviewer.jupyter.org/github/mustafamuratcoskun/Sifirdan-Ileri-Seviyeye-Python-Programlama/tree/master/Sqlite%20Veritaban%C4%B1/
20/08/2019
Python Decorator, Iterator, Generator...
25/08/2019
Anaconda Distribution provides ide
26/08/2019
Pillow module of Python can be used to make basic image manipulations.
PyQt5
We can use the link below to install pyqt5 on an anaconda environment:
https://anaconda.org/anaconda/pyqt
PyQt5 installation and popular resources about this topic are in the link below:
https://nbviewer.jupyter.org/github/mustafamuratcoskun/Sifirdan-Ileri-Seviyeye-Python-Programlama/blob/master/PyQt5%20-%20Aray%C3%BCz%20Geli%C5%9Ftirme/PyQt5%20Kurulumu.ipynb
Resources as:
PyQt5 Documentation : http://pyqt.sourceforge.net/Docs/PyQt5/class_reference.html
ZetCode Tutorial : http://zetcode.com/gui/pyqt5/
Tutorials Point : https://www.tutorialspoint.com/pyqt/pyqt_tutorial.pdf
28/08/2019
I worked on a plan to start a web application with Emre.
29/08/2019
PyQt5
systemd -> ilk calisan process bu, process id'si 1.
systemd calisiyor,
oncelikle service(daemon) nedir?
Bir amac uzere programlanmis, surekli hizmet veren bir uygulama.
rsyslog servisi surekli calisiyor. her oturum actigimizda, baska isler yaptigimizda, sistemle ilgili loglari duzenli bir sekilde topluyor.
systemd'de .service, .mount, .socket, .timer gibi parcalar var. systemd bunlara unit diyor.
unit -> .service
-> .socket
-> .mount
-> .device
-> .timer
seklinde kategorize edilmistir.
systemd basliyor, diger servisleri baslatiyor. initd basliyor, diger servisleri baslatiyor.
ssh servisi baslayacaksa, once network servisinin baslamasi lazim.
birbirine bagli,, bunlarin hiyerarsik bir sekilde baslamasini saglayan servis initd idi, simdi systemd oldu. initd, sisteme fazla karismiyordu, ama simdi systemd, hemen hemen her servise karisiyor.
system'nin artilari cok, mesela initd, servisleri sirayla baslatiyor. systemd kullanan bir sistemde, giris ekrani gelmeden ssh atma imkanina sahip olabilirim. cunku birbiriyle alakasi olmayan servisleri paralel olarak baslatabiliyor.
Boylece sistem daha hizli aciliyor.
systemd'de servisler bolunmus. mesela eskiden rsyslog'un sadece servis'i vardi. burada ise rsyslog'un servisi ayri, soketi ayri, timeri ayri...
servislerin yonetimi konusunda systemd'nin bazi ozellikleri var.
mesela;
unit1
unit2
unit3
.
.
.
olabilir.
Her uygulama, hizmet veren her seye unit diyoruz.
Bu unit'in .service'i olabilir, .socket'i olabilir, .mount'u olabilir...
Bu sekilde unit'ler bir araya gelince bunlar da target'lari olusturuyor.
Bu unit'ler, iliskiye gore target'larin icine atiliyor.
Mesela Windows'ta Safe Mode var.
Targetlarin mantigi soyle,
Target1 -> single mode // isletim sisteminizi bu modla baslattiginizda, kurtarma modunda basliyor
Bu sekilde targetlar arasinda farkliliklar bulunuyor.
Linux'ta 'x' diye bir servis var, goruntuyle ilgili servisler sunuyor.
x -> wayland // olma yolunda
cat /var/log/boot.log // sistem acilirken gecen yazilarin yazildigi dosya
less /etc/fstab // file system, yani kernel, buraya bakarak sistemi boot ediyor. ilk root(file system) kernel'e mount olur
14:30
Dizinler
ilk dizin, / yani kok dizin, root dizin,
/bin -> executable files, calistirilabilir dosyalar
boot ->
/etc -> ayar dosyalari
/home -> normal user'lar, home ve tmp disinda baska yerlere yazamaz.
/lib -> uygulamalarin, baska uygulamalarla birlikte ortaklasa kullanacaklari dosyalar burada tutulur.
/dev -> linux'ta her sey bir dosyadir, donanimlar da birer dosyadir. o dosyaya ulastigimizda donanima ulasmis oluyoruz. mesela sda, bizim diskimiz
/tmp -> dizini, tum kullanicilarin yazabildigi bir yer. kullanicilar gecici dosya olusturmak istediginde tmp'nin altinda yaratiyor.
/mnt -> bu dizinin konmasinin temel nedeni, diskimizi ozel bir yere mount etmeyeceksek, buraya mount ederiz.
/media -> takilabilir, cikarilabilir aygitlarin yine on tanimli olarak baglandigi yerdir. sisteme etki ederek baska yerlere de baglayabiliriz ama default olarak bu boyledir.
/root -> /*home'u ayri bir diske atarsak, bilgisayar baslarken root, o diskle beraber baslamasin diye
baska bir diski home'a mount edersek, bilgisayar baslarken o 2. disk gec baslarsa,*/
home'u networkte bir yerden mount etsek, bilgisayar acildiginda networkteki o dizin baglanmazsa, bu noktada sistemi girip duzeltecek olan kim? root. eger root home'un altinda olsaydi root dizini gitmis olacakti. root ayri oldugu icin, home'dan bagimsiz olarak giris yapip sistemi duzeltebilir.
/sbin -> normal kullanicinin kullandigi path uzerine kayitli komutlarin arasina "sbin"deki komutlar gelmez. o yuzden root'a ozeldir ve full path yazarak erisilebilir.
/usr -> burada da root dizininin altindakiler gibi dizinler var. neden? boot sirasinda bilgisayarin calistirilmasi sirasinda gerekli olmayan dosyalar /usr 'in altina verilmis,
eskiden /usr'in altina da ayri bir disk bolumu yapilabiliyordu. olur da /usr mount olmazsa diye ayri yerlere ayrilmis bu sekilde.
Cunku zaman icerisinde /usr'nin ayri bir disk olarak baglanmasi pratigi kaybedilmis. Eskiden disk pahali oldugu icin tasarruf ediyorlardi. Artik disk ucuz oldugu icin 300 mb icin ugrasmiyorlar. Artik sembolik baglaniyor.
/opt -> normalde biz linux'ta calisitirilabilir dosyalar bin'e gidiyor, kutuphaneler lib'e gidiyor.. bazi programlar var ki, bunlara laf dinletemiyoruz. /bin'in altina falan dosya koydugumuz zaman calismiyor. bazi uygulamalara karismiyoruz, kendi dizininin altinda calismasi gereken, /etc veya /bin gibi dizinlere dagitamadigimiz uygulamalari, /opt altinda bir dizin acarak oraya yerlestiriyoruz.
/bin /lib /etc gibi hiyerarsilere uymayan dosyalarin gittigi yer.
/proc -> her bir surec icin bir dizin aciliyor. bu gercek bir dosya sistemi degil, sanal. o dizinin icerisinde o surecle ilgili bilgiler yer aliyor. mesela biz ps yazariz, calistigi zaman aslinda /proc'un altindan bilgileri aliyor.
networkle ilgili bilgi vs. yapmislar, sonra
/sys gelmis, proc ta olmamasi gerekenler buraya gitmis
/var -> uygulamalarin urettigi veri dosyalaridir. bunlar log'lar olabilir, yaziciya gonderilen veri dosyalari olabilir. mesela siz bin'i ucursaniz, sbin'i ucursaniz geri yukleyemez misiniz? yukleriz. var'in altindaki giderse, geri yukleyemeyiz. Mesela var/log'takiler, uygulamalar calisirken gelen dosyalar. /var/lib/mysql veritabani sunucusunun veri dizini. Buradaki dosyalarin bir kismi vazgecebilecegimiz dosyalar. Bu yuzden
/srv -> dedigimiz bir dizin olusturulmus, sistemler adapte edilirse daha aktif kullanilacak.
Network
Network,
Her birimizin bir bilgisayari var, bunlarin birbirleriyle haberlesebilmesi icin bunlara birer adres vermek gerekiyor.
Bilgisayarlarin her birine birer ip adresi vermek gerekiyor ki, dosyalarin nereye gidecegi ve nereden geldigi bilinebilsin.
Bunun icin 4 tane haneden olusan bir adresleme metodu olusturmuslar.
___.___.___.___
Mesela bir sokakta kac tane ev olabilir? Bu ip adresine gore 255 tane ev olabilir.
Neden boyle? Cunku ya 128 olacakti, ya 512 olacakti. 256 daha optimize olarak hesaplanmis.
Il Ilce Sokak Ev
255. 255. 255. 255
Mesela biz bir ip verdik, 195.112.152.2
Meltem, Zagor'a ulasmak istediginde,
Zagor'un ip'si de 195.112.152.33 olsun
Ayni agdaki bilgisayarlar, birbirleriyle, broadcast denilen bir adresten haberlesiyorlar. Bu Broadcast dedigimiz adres, mesela 195.112.152.255 olsun. Sen buraya bir sey gonderdigin zaman, o agdaki herkese ulasiyor. Bu noktada eger Meltem, Zagor'a ulasmak isterse, genel yayina veriyor, uzerine de Zagor'a diye yaziyor. Zagor'un onunden gecerken Zagor bakiyor bu paket benim diyor ve aliyor.
Peki Meltem'in Zagor'a gonderdigi paketi, Ceyhun'un almasini engelleyen sey nedir?
Zaten ag uzerinden gecen paketler, aslinda ag uzerindeki herkesin onunden geciyor. Anlasilmamasi istenirse aradaki paketler sifreleniyor. Aslinda Meltem'in gonderdigi seyi herkes gorebiliyor.
Bir de Varsayilan Ag Gecidi diye bir sey var.
Meltem'in bir router kablosu var. Routing table diyor ki bu networkteysen o zaman bagirsan yeter.
Diyelim ki Mesela Kastamonu'ya, yani 139.179.179.3'e gidecek. O zaman bir ust aga git diyor. Orada da bir yonlendirme tabelasi(routing table) geliyor. Burada Meltem, Kastamonu'ya ne kadar zamanda gidecegini bilmiyor, sadece ne tarafa gidecegini ogreniyor. Iste iki tane bilgisayar bu sekilde haberlesiyor.
O routing table, DHCP protokoluyle, o sunucu sevisi sana veriyor o tabloyu. Sen burdan ciktigin anda yeni bir aga giriyorsun, bu sefer o yeni ag, sana yeni bir tablo veriyor.
DNS var.
Netmask var. Ne ise yariyor?
Her sokakta 255 tane evim olmak zorunda mi?
En fazla 255 ev olmak zorunda, ama 255 tane ev olmak zorunda degil.
Kucuk bir ilcede 50 tane sokak olabilir.
IP'ler bitmesin diye yontem gelistirmisler.
Mesela 0-32 arasi bir sokak olabilir.
32-48 arasi da bir sokak olsun
48-128 arasi da bir sokak olsun
128-255 arasi da bir sokak olsun
Bu ag maskesi(netmask) sayesinde -> o bize, bulundugumuz agda ne kadar ip kullanabilecegimizi soyluyor.
Sizin, maskelemek dedigimiz sey ne, siz artik surekli goremezsiniz. Ag maskesi de kapatmak icin kullaniliyor. Ben bu kadarlik kismi kapatiyorum, sizin sahip olabileceginiz maksimum ip havuzu bir miktar kaliyor. diyor.
Bu sekilde network'un alt aglara bolunup bolunmedigini, bolunduyse hangi kisimda yer aldigimizi belirtiyor.
Internette birsuru ip hesaplamasi testi var. Buraya girip maskemizi falan yazabiliriz.
Bu hesaplamalar daha cok Ag Yonetimi konularina giriyor.
Interfaces var, network configuration dosyalari. Ag aygiti dosyalari var.
Bir bilgisayarin ip'si olmaz, bilgisayarin uzerindeki aygitin ip'si olur.
Ethernet aygiti, Wifi aygiti, bunlar birer ag aygitidir. Sanal ag aygitlari da var. Her aygitin ayri ayri ip adresleri var.
Interface'leri ayarlarken o sekilde dusunmemiz daha iyi olur.
Portlar,
Aslinda yaptiginiz sey, ip adresini bolmek. Simdi normalde, yaptiginiz sey, aslinda ip adresinizi bolmek.
Elimizde 139.179.179.3 diye bir adres var diyelim. Biz kapisini caldigimizda ssh'la konusmak isteyebiliriz, bir baskasi caldiginda dns konusmak isteyebilir. O yuzden adreste ayri ayri kapilar var, bu kapilar,
Boylece kapi calindigi zaman, http icin konusmak isteyen, http ile haberlesiyor, ssh ile haberlesmek isteyen, ssh ile haberlesiyor.
ip'yi 65535'e bolmusuz, her birinin ardina, o dilden anlayan bir eleman dikmisiz.
Bu kapilara da port demisiz.
Teorik olarak, tek bir port uzerinden farkli servisleri calistirabiliriz, birden fazla dili anlayan bir servis kullanirsak.
Iki tane surec ayni anda 535 portunu dinleyemez, ama farkli dillerden anlayan bir surec o kapiya sunulabilir.
Mac adresi nedir?
Aygitin adresi. TCP/IP networkunde calisan ama mac adresi olmayan bir aygit yok. Mac adresi sabit degil, degistirilebilen bir sey. Aslinda ilk basta, bulundugumuz networkte haberlesmemizi sagliyor.
DHCP sorgusu hangi adresten yapiliyor ve donuste hangi adrese geliyor? Iste bu durumu cozen sey, MAC adresi. Mac adresi ile soruyor ve yanitini aliyor.
Mesela Meltem bu agdan cikti, o agdakiler Meltem'in mac adresini bulabilirler mi?
Mac adresi, bulundugumuz networkun disina cikmaz, tasinmaz. Ayni agdakiler Mac adresi uzerinden haberlesebiliyor.
Ip, ag disinda haberlesebilmek icin kullaniliyor.
Mac adresine gore sabit bir ip adresi verilebilir, ya da Mac adresine ip vermeyebilir. Mac adresi, TCP/IP paketleri tasimiyor.
SSH kullaniminda anahtarla erisim.
Script nedir? neye diyoruz? neye demiyoruz?
bir C kodu yazdik, 10 satir surdu, kisa yoldan bir isi yapmami sagladi, bu bir script mi?
Programlama dilleriyle ilgili temelde ikiye ayrilir.
1= derlenen dil,
2- Yorumlanan dil.
Yorumlanan dilde siz programi veriyorsunuz ve alet o programi isliyor.
Herhangi bir sekilde derlemeye ihtiyac duymadan kullanilabilen dillere script dili deniyor.
Mesela bash script dedigimiz sey ne? 5-6 tane alt alta komut yaziyoruz, basina da
#!/bin/bash
yaziyoruz.
Burada bir script var, bu scripti sen, su komutu calistirarak yorumlayacaksin.
Normalde '#' yorumdur ama, #! seklinde kullanilirsa, bu dilin hangi komutla yorumlanacagini soyluyor.
Derlenenler derlenir, bunlarin derlendikten sonra binary'si olur. Bilmedigim bir dilde yazmislar, derlemisler, biz de o binary'i calistiriyoruz.
rsync
rsync nedir?
boyle bir komut var, kendisine bir dizin soyluyorsunuz, mesela /home/zagor diyorsunuz,
sonra baska bir dizin soyluyorsunuz
/mnt/zagor
rsync'e diyorsunuz ki birinci dizinle ikinci dizin esit olacak. O da gidiyor ve kiyas yapiyor. Destination directory'de olmayip, Source Directory'de olan ne varsa onlari alip Destination directory'e tasiyor, ... birkac detay daha
destination'da olan ve source'ta olmayanlari da destination'dan siliyor. Bunlarin parametreleri de var.
bash
bash
Mesela bir kullanicimiz var, biz bu kullanicidayken sahip oldugumuz ortam degiskenlerimiz var, biz bu kullanicinin altindayken mesela
$var="merhaba"
dedigimde,
baska bir kullaniciya gectigimizde,
surecler ve rsyslog
jobs, servis, systemd, initd, crond systemd, dns, bash, script, git
02/08/2019
Cloud nedir?
System as a service nedir?
Mesela digitalocean bize apache server hazirlayip verdi..
Software as a service nedir?
Donanim...
Docker...
Git altyapisi, Wordpress, kurulu sekilde, bu da Program as a service.
Mesela Spotify da program as a service.
Jobs
Ctrl+Z yapinca isleri yarim birakip, arka plana atmis oluyoruz.
// Mesela single user mod'da oldugumuzu dusunelim.
Mesela rsync baslattik diyelim, devam ediyor, yeni terminal acamiyoruz, bir sure arka plana atabiliriz.
fg // komutuyla foreground yaparak isi geri one alabiliriz.
bg // bu da background
for i in $(ls -l) ; do echo "<html> $i" ; done
14:30
Bir yaziliminn ozgur olmasi icin 4 temel madde vardir.
Ozgurluk 0: Yazilimi, istedigimiz herhangi bir amac icin kullanabilmeliyiz.
Ozgurluk 1: Yazilim, her turlu ihtiyac icin herhangi bir engel olmadan degistirilebilmeli.
Ozgurluk 2: Yazilimi, istedigimiz herkesle, engel olmadan paylasabilmeliyiz
Ozgurluk 3: Yazilim, uzerinde degisiklik yapildiktan sonra da ozgurce dagitilabilmeli
Programlama dilleri, bilgisayarla, makineyle iletisime gecebilmemiz icin ara dillerdir.
16:00
https://wiki.archlinux.org/index.php/systemd
systemctl list-units
systemctl restart rsyslog.service
systemctl --failed
systemctl status ssh
https://stackoverflow.com/questions/15328623/simple-file-server-to-serve-current-directory
Python'la yapilabilen bir sey
Vermis oldugum dizindeki dosyalari, benim acmis oldugum port uzerinden kullanicilara sunuyor.
create and enable a simple systemd service
https://www.oueta.com/linux/create-and-enable-a-simple-systemd-service/
systemd'de stop yazmazsam daha iyi. initd'den farklarindan biri olarak.
/* bu sekilde servis olusturdugumuzda eksikler var...
uygulamamizda eksikler var, log kayitlarini duzgun tutabilen bir servis degil.
network servisine ihtiyaci var, network'un online olmasi lazim.
*/
python http serve kutuphanesiyle tcp socket acabiliyoruz
python3 -m .....
Pyhton programlama dilinin http kutuphanesini kullanarak, file serve edebildik, tcp socket acip, ilgili porttan bu dosyayi sunabildik.
Bu pythonla tek satirlik bir bash script yazdik.
/bin/bash /opt /sunsun_runner // ne yazarsak onu execute ediyor.
systemctl daemon-reload
Homework:
ekrani restart edince restart ettim desin
git 'i tab'layinca parametreleri geliyor,
Bunlar da var olan projeyi bilgisayarimiza indirmek icin
git clone http://github.com/ysfduzgun/selectra
icine giriyorum
ls -a
diyince .git diye bir dizin var.
cat README.md
python selectra.py
xsel not found
sudo apt install xsel
python3 selectra.py
sudo apt install xsel python3-bs4 python3-urllib3
notify-send command not found
sudo apt install libnotify.bin
notify-send "yusuf"
python3 selectra.py // dedigimizde, tarayicida secili olan kelimeyi Tureng'te aratip sonuclari bize doner.
Bunu kisayol olarak bir tusa atarak kullanabiliriz.
git status // o anki bulundugumuz git dizininde neler var onlari kontrol ediyor.
o anki git dizinimizin durumuna bakiyoruz
git branch // o an bulundugumuz branch'i gosteriyoruz
git checkout master // branch'i degistiriyoruz, burada master branch'e gectik
Mesela bir dosyayi degistirdik,
git status // dersem modified uyarisi alirim mesela,
git add . // degisiklik yaptigim her seyi ekler
git add README.md // tek dosyayi ekler.
Tek tek aciklama yaparak yazmak daha iyidir. Her dosyada yapilan degisikligin aciklamasini yazariz.
git commit -m "bagimliliklara libnotify-bin paketi eklendi" // diyince hata aldik cunku git'i ilk kurdugumuzda push etmek icin, repository olusturmak icin bazi ayarlari yapmak gerekiyor.
git config --global user.email "yzduzgun@gmail.com"
git config --global user.name "yzduzgun"
git commit -m "bagimliliklara libnotify-bin paketi eklendi" // simdi commit ettik
git status // commit edilmis
git push -u origin master // master branch'a, burada kullanici adi ve sifre istiyor.
git status // dedigimizde commit edilmis oldugunu gorebiliriz.
Github uzerinden yeni ssh key yaratabiliriz.
03/07/2019
Cron ile zamanlanmis gorevler
https://www.ostechnix.com/a-beginners-guide-to-cron-jobs/
man crontab
man cron
crontab -l // herhangi bir gorev listesini gormek icin
crontab -e // diyerek edit mode'a geciyoruz.
buradan bir edit mode sececegiz
/tmp/crontab.iDTJOE/crontab // file'inin icine sunu yazacagiz:
* * * * * echo `date` >> /home/yusuf/cronjob1
how to redirect dev random soundcard
https://unix.stackexchange.com/questions/13732/generating-random-noise-for-fun-in-dev-snd
https://stackoverflow.com/questions/6465624/how-to-pipe-dev-urandom-to-linux-sound-output
With Proton and Steam Play, many Windows games now work on Linux!
https://www.protondb.com/
Steam Play ozelligi var,
https://snapcraft.io/store
snapd // sudo snap install diyerek cross platform tarzi uygulama indirebiliyoruz
Linux platformlariyla Ilgili Bilgi alabilecegimiz ve takip edebilecegimiz siteler:
github
https://github.com/
distowatch
https://distrowatch.com/
gitlab
https://about.gitlab.com/
salsa debian
https://salsa.debian.org/public
forum pardus
https://forum.pardus.org.tr/
forum ubuntu tr
https://forum.ubuntu-tr.net/
mint forum turkiye
https://forum.linuxmint.net.tr/
forum manjaro
https://forum.manjaro.org/
noobslab
https://www.noobslab.com/
phoronix linux // en guncel, en hizli, cekirdekle, donanimla, genel uygulamalarla ilgili, takip edilebilecek bir site
https://www.phoronix.com/scan.php?page=home
omgubuntu
https://www.omgubuntu.co.uk/
linuxinsider
https://www.linuxinsider.com/
https://www.reddit.com/
https://www.reddit.com/r/unixporn/ // ornek kanal
archlinux
https://wiki.archlinux.org/ // cok iyi anlatilmis bir site, IRC channnels'ta takilabiliriz, bu sitede takilirsak bircok konuda bilgi sahibi olabiliriz.
debbian wiki lvm // sonuna kadar okunmasi gereken bir konu
https://wiki.debian.org/LVM
Linux'ta domain server'lar,
cat /etc/resolv.conf // ta tutuluyor. Degistirsek bile, Network degisince Network Manager tarafindan yeniden duzenleniyor.
/etc/dhcp/dhclient.conf // burada da dhcp ile ilgili bir seyler var
07/08/2019
Morning
C++
Header File solution
https://latedev.wordpress.com/2014/04/22/common-c-error-messages-2-unresolved-reference/
Afternoon
Django
https://github.com/django-erp/django-erp // bu proje bir denenmeli
https://virtualenv.pypa.io/en/latest/ // python virtual environment hakkinda bilgi verir
https://projecteuler.net/archives // bazi matematik problemlerini kod algoritmalariyla cozebiliriz
09/08/2019
Python modules
16/08/2019
Python
19/08/2019
SQLite Database
SQLite Database doesn't have to set up a database server.
How to create a database on SQLite?
We can write the Python script below:
********
import sqlite3
con = sqlite3.connect("library.db")
cursor = con.cursor()
con.close()
********
How to create a table on a SQLite Database?
********
def create_table():
cursor.execute("CREATE TABLE IF NOT EXISTS bookcase (Name TEXT, Author TEXT,
Publisher TEXT, Page_Count INT)")
con.commit()
********
All the commands belong to the Python Course owned by Mustafa Murat Coskun are inside this page:
https://nbviewer.jupyter.org/github/mustafamuratcoskun/Sifirdan-Ileri-Seviyeye-Python-Programlama/tree/master/Sqlite%20Veritaban%C4%B1/
20/08/2019
Python Decorator, Iterator, Generator...
25/08/2019
Anaconda Distribution provides ide
26/08/2019
Pillow module of Python can be used to make basic image manipulations.
PyQt5
We can use the link below to install pyqt5 on an anaconda environment:
https://anaconda.org/anaconda/pyqt
PyQt5 installation and popular resources about this topic are in the link below:
https://nbviewer.jupyter.org/github/mustafamuratcoskun/Sifirdan-Ileri-Seviyeye-Python-Programlama/blob/master/PyQt5%20-%20Aray%C3%BCz%20Geli%C5%9Ftirme/PyQt5%20Kurulumu.ipynb
Resources as:
PyQt5 Documentation : http://pyqt.sourceforge.net/Docs/PyQt5/class_reference.html
ZetCode Tutorial : http://zetcode.com/gui/pyqt5/
Tutorials Point : https://www.tutorialspoint.com/pyqt/pyqt_tutorial.pdf
28/08/2019
I worked on a plan to start a web application with Emre.
29/08/2019
PyQt5
Yorumlar
Yorum Gönder