Linux - Ubuntu İşletim Sistemi Üzerinden Django- MySQL ile Web Server Çalışması
Tanımlar :
Linux : Linux açık kaynak kodlu özgür bir yazılımdır. Gönüllüler tarafından geliştirilen ve türevleri olan bir İşletim sistemidir.
Neden Linux?:
- Özgür yazılım,
- Açık kaynak
- Kararlı bir yapı,
- Lisans maliyetinin olmaması,
- işlemciyi en iyi ve en verimli olarak kullanan işletim sistemi olması.
- (Bellek kullanımı çok iyi. Çok sayıda prosesi beraber çalıştırabiliyor)
Ubuntu: Linux çekirdeğini temel alarak geliştirilen açık kaynak kodlu, özgür ve ücretsiz bir işletim sistemidir. Masaüstü, sunucu ve akıllı telefonlara yönelik olarak geliştirilen türevleri bulunur.
MySQL: Altı milyondan fazla sistemde yüklü bulunan çoklu iş parçacıklı , çok kullanıcılı , hızlı ve sağlam bir veri tabanı yönetim sistemidir.
Web Server: Web server ya da ağ sunucusu, internet üzerinde bir web sitesinin yayınından sorumlu olan sunucudur. Web server, Hosting ya da “barındırma” işlemini internet protokolü üzerinden sunan bir sunucudur. Barındırma ya da hosting, Web sayfalarını internette yayınlamak için gerekli alanın kiralanmasıdır. Diğer bir ifade ile hosting, bir Web sitesinde yayınlanmak istenen sayfaların, resimlerin veya dokümanların internet kullanıcıları tarafından erişebileceği bir bilgisayarda tutulmasıdır.
İzlenecek Adımlar:
Çalışmayı yapabilmek için öncelikle indirimini tamamladığımız ubuntu ve virtualbox programlarını bilgisayarımıza yüklememiz gerekmektedir.
Ubuntu indirmek için; https://www.ubuntu.com/download/server adresini kullanabilirsiniz.
Virtualbox indirmek için; https://www.virtualbox.org/wiki/Downloads adresini kullanabilirsiniz.
Ubuntu ve Virtualbox bilgisayarımıza kurduktan sonra, Virtualbox programını üzerinden Ubuntu işletim sistemini kurma adımlarını izleyeceğiz.
VirtualBox sayfası açıldığında panelin sol tarafında bulunan "Yeni" linkine tıklıyoruz. Küçük ara pencere çıkacaktır, bu pencere doldurulması istenilen isim, tür ve sürüm bilgilerini verip bu adımı 'ileri' butonu ileri geçiyoruz.
VirtualBox sayfası açıldığında panelin sol tarafında bulunan "Yeni" linkine tıklıyoruz. Küçük ara pencere çıkacaktır, bu pencere doldurulması istenilen isim, tür ve sürüm bilgilerini verip bu adımı 'ileri' butonu ileri geçiyoruz.
Not: Bu nokta da ön bir uyarı yapmak isterim, verdiğiniz tanımlamaları/isimleri bir kenara not etmenizdir. İleri ki aşamalarda bu bilgiler sizlere gerekli olacaktır. Benim ve diğer birçok kişinin yaşadığı problemlerinden biride verilen ifadelerin veya şifrelerin unutulması nedeniyle olmuştur.
Bir sonraki aşamada bizden Ram miktarını belirtmemizi isteyecek, yaklaşık 900MB yeterli olacaktır.
Tekrar "ileri" diyoruz ve default olarak çıkan seçeneklere "ileri" diyerek "Dosya Yeri ve Boyutu" penceresine kadar geliyoruz. Burada yapacağımız işlemlerin düzeyine göre sistemden ayırmasını istediğimiz sabit disk boyutunu belirleyip "oluştur" seçeneğini seçiyoruz. (8 GB yeterli olacaktır).
Oluşturmuş olduğumuz ve sol taraftaki panelde görülen sanal makineye sağ tıklayıp "Ayarlar" daha sonra "Depolama" sekmesine tıklıyoruz. Aşağıdaki resimdeki adımları sırasıyla işleyerek bu aşamayı da bitirelim.
Bir sonraki aşamada bizden Ram miktarını belirtmemizi isteyecek, yaklaşık 900MB yeterli olacaktır.
Tekrar "ileri" diyoruz ve default olarak çıkan seçeneklere "ileri" diyerek "Dosya Yeri ve Boyutu" penceresine kadar geliyoruz. Burada yapacağımız işlemlerin düzeyine göre sistemden ayırmasını istediğimiz sabit disk boyutunu belirleyip "oluştur" seçeneğini seçiyoruz. (8 GB yeterli olacaktır).
Oluşturmuş olduğumuz ve sol taraftaki panelde görülen sanal makineye sağ tıklayıp "Ayarlar" daha sonra "Depolama" sekmesine tıklıyoruz. Aşağıdaki resimdeki adımları sırasıyla işleyerek bu aşamayı da bitirelim.
Nat seçilirse: ana makine ve
sanal makine iç yapılarında birbirinden tamamen bağımsız IP adreslerinden
oluşurken, dışarıdan ise aynı IP adresli olarak gözükürler. Nat yapısının kötü
yanı; dışarıdan sanal makineye bağlanılamaz bunun nedeni ise az önce söylemiş
olduğumuz sanal makinenin dış dünyayla iletişimdeki IP adresi ana makinenin IP adresi ile aynı olmasıdır.
Bridge(Köprü)
seçilirse: ana
makine ve sanal makine aynı ağ üzerinde olup farklı IP adreslerine sahip
olurlar. Bunun kötü yanı ise kısıtlamalar varsa sanal makine için ikinci bir IP
adresi verilemeyebilir. Bu yüzden biz "Nat"ı seçeceğiz.
Bu sayfada port
yönlendirmeleri yapıldı. Anamakine işletim sistemimizin ilgili portuna
gelen bağlantılar, sanal makinemizin portuna yönlendirildi. "2222"
=> "22"
Ardından sol taraftaki sanal makinemiz seçili iken yukarıda bulunan panelden "Başlat" linki tıklanır ve işletim sistemi kurulumu başlar.
Yazılımları seçin ekranında aşağıdaki resimde belirtilen "OpenSSH Server" alanı boşluk tuşunu kullanarak işaretleyiniz.
- Dil seçimi yapılır
- "Ubuntu sunucu sürümünü kurun" seçilir
- "Kuruluma seçilen dille devam edilsin mi?" sorusuna "evet" yanıtı verilir
- Ülke-bölge seçilir
- Klavye düzeni ayarlanır
- Ek bileşenlerin yüklenmesi için bekleme
- Makine isim verilir
- Sistem için bir parola belirlenir,
- "Ev diziniz için şifrelensin mi?" sorusuna "hayır " yanıtı verilir
- Saat ayarı yapılır
- "Bölümleme Yöntemi" ekrana geldiğinde ilk seçenek yani "yardımcı ile diskin tamamını kullan" seçilir.
- Bölümlenecek disk seçilir
- Sistem kurulumu için beklem
- "Grub önyükleyici kaydına kurulsun mu?" sorusuna "Evet" yanıtı verilir.
- Kurulum bitirilme aşaması
- Sistem Açılışı
Aşağıdaki bu görüntü ile kullanıcı adı ve ardından gelecek olan şifrenizi girerek sisteme girebilir.
istediğiniz çalışmaları yapmaya başlayabilirsiniz...
Temel Linux Komut Bilgileri
Bu aşamada bilmemiz gereken bazı komutlar var (hepsi bu uygulama da kullanılmadı):
Not: Yapılan çalışmada komutların aktarımı için tercihen kullanılan Putty arayüzünü ben kullanmadım. Satır girişlerini manuel yaptım.
Komut satırı ve kabuk temel komutları :
- "$" : Kullanıcı olduğunu gösterir
- "#" : root admin olduğunu gösterir
- "~" : Kullanıcının home dizinini ifade eder.
- uname işletim sistemi bilgisini verir.
- uname –a : İşletim sistemi hakkında tüm bilgiyi verir.
- whoami : Kimlik hakkında bilgi verir (ben kimim)
- date : Tarihi verir.
- free : Kullanılan ve boşta kalan bellek (ram) bilgisini verir.
- free –m : MB cinsinden Ram bilgisini verir.
Kabuk Terminal Uygulamalarına geçiş (Linux türevlerinde farklılık gösterir)
- Alt+F2 : gnome-terminal
- console
- xterm
- Sanal Uç birimler kabuki ortamına geçiş Ctrl+Alt+F1…..F6
- Ctrl+Alt+F7 (Masaüstüne geçiş)
- who : sisteme giriş yapan (açık olan) kullanıcıları gösterir.
- who –uH à sistemdeki kullanıcıların ayrıntılı bilgisini verir.
- echo $SHELL à Hangi kabuğun kullanıldığı bilgisini verir.
- /bin/bash
- • sh
- • bash à Bourne Asign Shell GNU Aracı
- • csh
- • tsh
- • zsh
- who –uH komutunu verdiğimizde pts/0 …… (:0.0) : :0 grafik ekran olduğunu gösterir.
- Not : Linux büyük ve küçük harfe duyarlıdır.
- id komutu : kullanıcı kimliği hakkında bilgi verir. Üye olunan grupları gösterir.
- uid – user id, gid – group id, groups-gruplar, dip-ekran kartı, video- kullanılabilecek
- uygulamalar, plugdev- açma kapama izni, netdev-network aygıtları
- pwd : bulunduğumuz dizini ekrana gösterir.
- echo $HOME : Kullanici home dizinini gösterir.
- $ : Değişken o
- : bulunduğu kelimenin sonuna götürür.
- w : bir sonraki kelimenin başına gider.
- d+4+sağ : sağdan 4 karakter siler
- v : visiual mod
- yy : satırın tamamını kopyalar
- y : kopyalar
- p : yapıştırır
- x : keser
- /aranan kelime + esc
- n tuşuna basarak aramaya devam edilir
- shift+n yukarı doğru arar
- aynı şekilde ? işareti yukarı doğru arar
- :split üstüste 2 sayfa açar
- :split solucan_head : çalıştığım dosya ile solucan_head dosyasını beraber açar
- :vsplit yanyana 2 sayfa açar
- :w : kaydeder
- :wq : kaydedip çıkar
- :q! : kaydetmeden çıkar
- :10 : 10. satıra götürür.
- shift+g : editörün en sonuna atar
- gg : editörün en başına atar
- ctrl+r : en son yaptığın komutları gösterir.
- history : daha önce yazılan komutları gösterir.
- cp : kopyalama yapar
- örnek: cp kopyalayacağımız dosya kopyalanacak adres
- cp -R : alt dizinle birlikte kopyalar
- mv : taşıma işlemi yapar
- mv : isim değiştirmek için kullanılır
- ls Komutu : Listeleme komutu ls –la : gizli dosyalarla birlikte ayrıntılı listeleme
Not: Yeşil dosyalar çalıştırılabilir olduğunu, maviler ise dizin olduğunu ifade eder.
- touch : dosya oluşturur. Örn : touch dosya_adi
- / : Kök dizin olduğunu ifade eder.
- cd komutu : klasörler arasında gezinmeyi sağlar.
- cd : home dizinine gider. cd ~ : home dizinine gider.
- cd / : kök dizine gider.
- cd .. : bir üst dizine gider.
- cd klasor_adi : klasöre gider.
- echo : ekrana yazdırır.
Root İşlemleri
- su komutu : root olunur. (yönetici)
- passwd : şifre değiştirmek için kullanılır.
- passwd user : user şifresini değiştirmek için kullanılır. sadece passwd yazarsak root şifresini
- değiştirir.
- /root : su kök dizini
Sudo (Super User Do) : Sanal makine,
başlangıçta bizi standart(kısıtlı) kullanıcı olarak kabul eder ve root
yetkisindeki işlemlere izin vermez. Çünkü root yetkisinde yapılan işlemler
yanlış yapıldığında, sistemimiz için son derece tehlikeli durumlar
oluşturabilir. İşte komutların başına yazdığımız “sudo” bu kısımda devreye
giriyor. Root yetkisiyle, standart(kısıtlı) hesapta işlemler yapmamızı
sağlıyor. Bu direkt root yetkisine sahip olarak yapılan işlemlerden daha
güvenli bir ortam sağlıyor.
Linux’un birçok paketi-programı içerisinde barındıran bir
deposu vardır. Bu depo bize oldukça kolaylık sağlar. Çünkü birkaç komutla
istediğimiz paketi bu depodan kolayca indirip kurabiliriz. Bu depoyla ilgili:
“sudo apt-cache search x” : x paketinin
depoda olup olmadığını sorgular. Eğer varsa bu x paketiyle ilgili depoda
bulunan veriler listelenir.
“sudo
apt-get update install x” : Eğer
x paketi depoda var ise bu paketi yükler ve sistemimize kurar.
“sudo apt-get update” : Depoda olan yeni
paket sürümleri ile bizim sistemimizde olan paket sürümlerini karşılaştırır ve
yeni bir sürüm varsa bu sürümleri listeler.
“sudo apt-get update remove x” : x
paketiyle ilgili olan binary verileri sistemden kaldırır. Fakat daha önce paket
ile ilgili yaptığımız ayarları kaldırmaz.
“sudo apt-get update purge x” : x
paketini tamamen sistemden kaldırır. O paket ile ilgili her şey silinir.
Not: “ps aux”
yazarak görev yöneticisine gidebilir, çalışan komutları görebilirsiniz.
Not: “ps” yazarak
bizim çalıştırdığımız komutları görebilirsiniz.
Not: Siyah
terminaldeki geçmiş ekranını temizlemek için “clear” komutunu
kullanabilirsiniz.
Not: Komut
yazımını yarım bırakıp 2 kez “Tab” tuşuna basarak, yarım bıraktığımız komut
ifadesini tamamlayabilecek komutları görebilirsiniz.
Not: Dosyalar – Klasörler Üzerinde İşlemler
Linux’ta dosyalar-klasörler üzerinde değişiklik yapabileceğimiz
“mc” eklentisi vardır. Bu eklentiyi yüklemek için :
“sudo apt-get install mc” yazalım ve gelen soruya “E”
yanıtını vererek indirip kurmasını bekleyelim.
Not: Komut satırına direkt olarak “mc” yazarak dosya
yöneticisini açabilirsiniz.
MySQL ile
Veritabanı İşlemleri
MySQL : Altı milyondan fazla
sistemde yüklü bulunan çoklu iş parçacıklı, çok kullanıcılı, hızlı ve sağlam
bir veri tabanı yönetim sistemidir.
“sudo apt-get install mysql-server” yazarak MySQL-Server’ı yüklüyoruz.
“sudo apt-get install python-mysqldb” yazarak MySQL veritabanı için Python arayüzünü yüklüyoruz.
“mysql –u root -p” yazıyoruz ve biz
MySQL sunucusuna bir root şifresi veriyoruz. Veritabanı işlemleri yapacağımız
zaman burada vereceğimiz şifreyi kullanacağız.
Şimdi üzerinde çalışacağımız veritabanını oluşturalım. Ben
veritabanıma “veritabanim” ismini veriyorum. Siz komut üzerinde değişiklik
yaparak kendi istediğiniz bir isim verebilirsiniz.
“create database veritabanim;” Not: Komutun sonuna
“;” koyma şartı var.
Eğer sistemimizde
var olan veritabanlarını görmek istersek:
“show databases;” komutunu
yazıyoruz.
Az önce yazdığımız
komutla veritabınının oluşup/oluşmadığını denetleyelim:
Bu aşamada oluşturduğumuz veritabanı için bir admin ve şifresi tanımlayacağız. Ben “rky”
isminde, “r” şifresiyle oluşturuyorum.
“create user ‘rky’@’localhost’ identified by ‘r’;” admin ve şifre alanları ‘ ‘ içine alınmalıdır.
Şimdi ise
oluşturduğumuz admin için, “Grant” komutuyla tüm izinleri aktif edeceğiz.
“use veritabanim;” komutuyla
“veritabanim” isimli veritabanını kullanacağımızı bildiriyoruz.
“grant all on veritabanim.* to ‘rky’@’localhost’;” komutunu kullanıyoruz.
Bir tablo
oluşturalım.
“create table kisiler(kisinumarasi int, adisoyadi varchar(50));” kodu ile “kisiler” isminde, 2 alanı olan bir tablo oluşturduk.
Bu tabloya ekleme
yapmak istersek:
“insert into kisiler values(‘1’,’rky’);” komutu ile örnek amaçlı bir satır ekledik. İsterseniz bunu
çoğaltabilirsiniz.
"select * from kisiler;" yazıp
eklediğiniz kayıtları görebiliriz.
“quit;” yazıyoruz ve MySQL - Server
sisteminden ayrılıyoruz.
Python İle
Kodlama
Veritabanımızı oluşturduğumuza göre Python üzerinden etkileşim
işlemlerine geçebiliriz. Ama öncesinde sistemimize Python’u kuralım.
“sudo apt-get
install python-pip” yazalım “Devam etmek istiyor musunuz?” soruna “E”
yanıtını verelim.
Pip : Python’da Pip paket yöneticisidir. Python’da
modülleri uygulamalarınıza dahil edebilmeniz için kurduğunuz paket yöneticisi.
Halihazırda kullanmanızı bekleyen binlerce python modülunuzu çok basit bir
şekilde projenize entegre etmenizi sağlar.
Framework: Geliştiricilere
projelerinde kullanacakları sınıfların, eklentilerin toplu bir şekilde
sunulmasıdır.
Django : Python programlama
dili ile yazılmış MTV mimari desenini kullanan, yüksek seviyeli ve açık kaynak
bir web frameworküdür. Django uygulama çatısı içinde veri modelleri (Python sınıfları olarak
tanımlanır) ve ilişkisel veritabanı arasında aracı olarak çalışan bir nesne-ilişkisel eşleştirme bileşeni; düzenli ifadeler tabanlı bir url dağıtıcı; istekleri işlemek için bir görünüm sistemi; ve şablon sistemi barındırır.
“sudo apt-get install python-django” yazarak Django
framework'ü, Ubuntu deposundan indirip yüklüyoruz.
//bu özelliği ile kolaylık sağlamaktadır
Ardından
bir proje oluşturacağız ve adı “mysite” olsun.
“django-admin startproject mysite” yazıyoruz. Ve projemiz
\home\ubuntu\mysite adresinde oluşuyor.
Şimdi dosya
düzenleme işlemine gelelim. Az önce oluşturduğumuz “mysite” isimli projenin
içerisinde “settings.py” isimli bir dosya var. Bu dosya içerisinde düzenlemeler
yapacağız.
“sudo nano ~/mysite/mysite/settings.py” yazıyoruz ve bahsettiğimiz dosyanın içerisine giriyoruz.
Ok
tuşlarıyla dosyanın alt kısmına doğru geldiğinizde “DATABASES={” ile başlayan bir satır
var. Bu satırlar üzerinde değişiklik yapacağız. Daha önce oluşturduğumuz
veritabanını, bu dosya üzerinden tanıtacağız.
“DATABASES={” ile başlayan satıra geliyoruz ve bu
satırlarda aşağıdaki verileri entegre ediyoruz.
'ENGINE' = 'django.db.backends.mysql',
'NAME' = 'veritabanim’,
'USER' = 'rky',
'PASSWORD' = 'r',
'HOST' = '',
'PORT' = '',
Düzenleme bittiğinde “Ctrl + X” tuşlarına, sonra “E” tuşuna basıp
onaylıyoruz. Düzenleme bittiğinde “settings.py” dosyasının ilgili satırları
aşağıdaki gibi görünmelidir:
projemizin içerisine girmek için komut satırına “cd mysite” yazıyoruz .
Veritabanında
gerekli şablonları otomatik olarak oluşturması için :
“python manage.py
syncdb” yazıyoruz ve sorulan soruya “yes” yanıtını veriyoruz. Bizden
kullanıcı adı, e-mail adresi ve şifre girmemizi istiyor. Bu alanları
doldurduktan sonra süper kullanıcının başarıyla oluşturulduğu mesajı çıkıyor.
Not: bu aşamada verilen bilgileri kaydetmeyi unutmayınız, oluşabilecek hatalara karşı önlem almış olursunuz.
Son olarak
“manage.py” dosyasını server bağlantısını yapacağız.
Komut satırına :
“python manage.py
runserver 0.0.0.0:8000” komutunu yazıyoruz ve projemizi ağa sunmuş
oluyoruz.
Not: Eger port bağlantısı sağlanmaz ise 8000 değerinde değişiklik yapmak gerecektir.
Ana işletim sisteminize gelip,
tarayıcıda “localhost:8080” yazarak yayınladığınız siteye ulaşabilirsiniz.
Not: Bu aşamada alınan portlar her daim açık olmayabiliyor, başlangıçta 8080 olarak değer almama rağmen bu portla sanal makineye çıkmadığım için 8080 portunu daha sonra değiştirerek uygulamamı gerçekleştirdim. Sizde bu aşamada bu tip bir sorunla karşılaşmanız muhtemeldir.
Not: Buradaki 8080 portu; Ubuntu’yu kurarken ağ yapılandırmasındaki ana makine ile bağlantı noktasına verdiğimiz port değeridir.
Açılış sayfamızı biraz
özelleştirmek istersek, bunun için "sudo nano ~/mysite/mysite/views.py"
yazalım. ve "mysite" isimli projemizde yeni bir .py
uzantılı dosya oluşturalım. Bu dosyanın içerisine aşağıdakileri kod dizilimini yazalım :
# -*- coding: utf-8 -*-
from django.http import *
def DjangoDeneme(request):
return HttpResponse(u'<h1>Bilecik Şeyh Edebali
Üniversitesi</h1>')
Yani "views.py" dosyasının görünümü şu şekilde:
Burada tanımladığımız "DjangoDeneme" fonksiyonu, tarayıcımıza return
ile "Bilecik Şeyh Edebali Üniversitesi" metnini gönderecektir.
Oluşturduğumuz views.py
dosyasını, Django projesinde hazır olarak bulunan urls.py dosyasına
ekleyeceğiz. Bunun için komut satırına;
"sudo nano ~/mysite/mysite/urls.py" yazalım ve bu açılan
dosyanın içeriğini aşağıdaki gibi yapalım :
Ve projemizi ağa sunduktan sonra, ana makina
tarayıcımızın urls'ine "http://localhost:8080/deneme/" yazalım.
Projenin
başında veritabanına kaydettiğimiz verileri, tarayıcıda yazdırmak istersek eğer, bunun
için "views.py" dosyasını aşağıdaki gibi düzenlememiz gerekir:
# -*- coding: utf-8 -*-
from django.http import *
from django.http import HttpResponse
import MySQLdb
def DjangoDeneme(request):
conn = MySQLdb.connect
(host = "localhost",
user = "rky",
passwd =
"r",
db =
"veritabanim")
cursor = conn.cursor ()
cursor.execute
("select kisinumarasi, adisoayadi from kisiler") //adisoayadi girmemin nedeni veri tabanına bu şekilde girmiş olmamdan bu nedenle de hatayla karşılaştım
rows =
cursor.fetchall()
html="<html><body>"
for row in rows:
html1 = "Kişi Numarası : %s"% row[0]
html2 = "   Adı Soyadı : %s<br>"%
row[1]
html=html+html1+html2
kapanis="</body></html>"
html=html+kapanis
return
HttpResponse(html)
Yani "view.py" dosyası şu şekildedir :
Not: Komut satırında manuel olarak ifadeleri yazdığım içim benim karşılaştığım problemlerden biri yazım hatalarıydı.Boşluk ve bazı harf hataları sanal makineye bağlantı aşamasında problem olmakta. Tavsiyem bu konuya dikkat etmenizdir. Ayrıca kullanıcı ismi şifre gibi değerleri de bu aşamada kullandığımız için bu değerleri de doğru tanımlamış olmanız önemlidir.
Bir hata örneği:
Komut satırına "cd
mysite" ve ardından "python manage.py runserver 0.0.0.0:8000"
yazıp, ana makinemizin tarayıcısına "http://localhost:8080/deneme/"
yazarsak veritabanından çektiğimiz verileri görebiliriz. Ben bir değer tanımladım bu aşamada, siz sistemin sorunsuz çalıştığını gördükten sonra ayrıca değer girebilirsiniz.
bu satır gibi,
“insert into kisiler values(‘1’,’rky’);” komutu ile örnek amaçlı bir satır ekledik. İsterseniz bunu çoğaltabilirsiniz.
KAYNAK:
- https://toneofcomputer.blogspot.com.tr/
- https://www.ubuntu.com/download/server
- https://www.virtualbox.org/wiki/Downloads
- https://tr.wikipedia.org/wiki/Ubuntu_(i%C5%9Fletim_sistemi)
- https://tr.wikipedia.org/wiki/Linux
- https://www.digitalocean.com/community/tutorials/how-to-use-mysql-or-mariadb-with-your-django-application-on-ubuntu-14-04
- https://wiki.ubuntu-tr.net/index.php?title=Temel_Linux_komutlar%C4%B1
- http://www.ilkerkocager.net/linux-konsol-komutlari-3/linux-konsol-komutlari/
- http://www.ilkerkocager.net/linux-konsol-komutlari-3/mysql-konsol-komutlari-linux/
- https://tr.wikipedia.org/wiki/Django
- https://forum.ubuntu-tr.net/index.php?topic=15273.0
Hiç yorum yok:
Yorum Gönder