July 2019

01/07/2019

In this month I plan to make researches about Linux systems in mornings with two sources below:

https://www.udemy.com/learn-linux-in-5-days/

https://www.hepsiburada.com/centos-sistem-ve-sunucu-yonetimi-yunus-ciftci-p-KKODLAB01579?magaza=Hepsiburada&wt_gl=cpc.nelk.kitap.pla&gclid=Cj0KCQjwu-HoBRD5ARIsAPIPencrkljkeEnNffnAOaKq5xwVT5tg_T1NqjKoxH_0WjePJEkRMOqk67oaAguyEALw_wcB

There are lots of Linux distributions. Most popular Linux distributions are listed below:
- Red Hat                                - CentOS
- Ubuntu                                 - Oracle Linux
- Debian                                  - Suse
- Fedora                                  - Slackware

   Debian project, generally developed by volunteers like other Linux distributions. Debian system is a totally free(özgür) system. The system uses Debian packet management system and uses .deb extended packets.
   Red Hat Enterprise Linux, open source Linux distribution and a professional software company. The company has big market share in server market on the world. This distribution uses GNOME gui type. RPM packet management system is developed and used by RHEL(Red Hat Enterprise Linux).
   Oracle Linux, is similar to RHEL. This distribution can be used freely, Oracle earns money from technical support solutions.
   Ubuntu project is started to be used in daily use of computer users. This distribution is the most popular daily use Linux distribution.
   Slackware is the oldest Linux distribution which is still developed. Default desktop environment is KDE.
   Fedora uses GNOME as desktop environment, but DKE, XFCE and LXDE can be used.
   Opensuse is developed in Germany. Suse distributions use YaST2 application manager.

C++ part:

I am tracing the course below to repeat C++ language fast.
https://www.udemy.com/cpluspusprogramlama_nesneyeyonelikprogramlama

Chapter 6 has finished out of 27 Chapters.

02/07/2019

Today I will install CentOS(which is a derivation of RHEL) on VMware.
This operating system's general requirements:
- CPU with 2.4 GHz speed
- 1 GB RAM
- A network card for Internet connection
- 10 GB hard disc

Where to download CentOS?
https://www.centos.org/download/

CentOS installation guide:
https://www.tecmint.com/centos-6-10-installation-guide/

Explanation of Live CD
http://ask-leo.com/whats_a_live_cd_and_why_would_i_want_one.html

Explanation of Live Booting
https://www.linux.com/learn/live-booting-linux

The paragraph below raised concern over Live Booting:
Another caveat you must understand is that the second you reboot, all is lost. Just because the system is running from memory, doesn’t mean you cannot install applications or save files. But, unless you’ve saved files to an external drive, as soon as the system is rebooted, everything you’ve saved (installed or configured) will be gone.

I will try live booting in the soonest time.

I have downloaded CentOS 7 iso for DVD. CentOS was installed in the VMware Workstation 15 Player.

                               Figure 1: CentOS installation

   After "Create a New Virtual Machine" is selected, Installer disc image file(iso) is selected in the second window. Then some changes was made and CentOS was started to be installed.

                                         Figure 2: CentOS installation summary

   In the Network & Hostname part, a network interface which is listed on the left of Network & Hostname window must be selected and it must be made ON from the right side of the window.

C++ part:

   I continued to watch the Udemy course from Chapter 7.

03/07/2019

CentOS part:

After installation was completed, one of the most important topics is remotely access. It can be provided by SSH, easily(but without GUI).
Console Access: SSH
SSH refers to Secure Shell. SSH is name of network protocol which establishes the client/server connection with cryptographic security and uses 22th port, generally.
SSH opens a terminal connection for us to remote systems. SSH is not installed previously in some distributions like Ubuntu. In such cases, SSH is installed considering the package management structure that distribution uses.
If we want to connect another computer by way of SSH, the command syntax is like below:
ssh -l [user_name] [address_to_be_connected] -p [port_number]
or
ssh user_name@hostadress
It is written that the default port is 22. It is a good behavior to alter the port number such as '23', as a security precaution.

Briefly,
We learn the host_address(ip number, in this case), by running "ifconfig" command.
In my CentOS, ip address is seen in "ens33:" part, next to "inet" word.
If we know the ip address and the user name, we can connect to the computer by the command below:
ssh root@192.168.207.129
After we enter the password of the user, we are connected to the computer, remotely.

Access upon Web: Webmin
Our remote computer can be managed with GUI, too. There are some ways to establish connection with GUI. Webmin is one of them.
Webmin is defined as a software which provides remote access to a Linux-based server.
It is similar to cpanel.

Use of Webmin,
Step 1: Login as root with the command below:
su -

Step 2: Create a directory for Webmin documents. Then come to this directory.
mkdir /root/kodlab
cd /root/kodlab

Step 3: Download Webmin with the command below:
wget http://sourceforge.net/projects/webadmin/files/webmin/1.700/webmin-1.700.tar.gz
* instead of
wget http://sourceforge.net/projects/webadmin/files/webmin/1.700/webmin-1.700.tar.gz/download
* because "wget" takes the document which is after the last '/'(slash)

Note: New versions can be sought from the link below:
http://sourceforge.net/projects/webadmin/files/webmin/

Step 4: Now we open the downloaded document to the directory where we are. With command below:
tar xf webmin-1.700.tar.gz

Step 5: Change directory as the one we extracted the documents.
cd webmin-1.700

Step 6: We allow the other users in the computer to access and use Webmin:
chmod 777 setup.sh

Step 7: We start the installation with the command below:
./setup.sh

After the installation started, some informations are asked like configuration, log, perl directions, port settings. Because the default settings are assigned automatically, it is suggested that you continue using "Enter" button except username and password. After these steps are passed, it is asked whether you want to start automatically in every booting operation. It can be altered later, so we say 'n' for now. Now, we can access remotely by using browser, but previously we must know the IP address that assigned to the machine. We can learn it again with "ifconfig" command. An IP address is written under eth0 section.
Let's open our browser and try to login by adding 10000 as the default port number of Webmin to end of the line of URL.

***
Use of tar files and extraction methods are explained in this page.

https://www.tecmint.com/18-tar-command-examples-in-linux/


Downloading files with "wget":

https://www.pair.com/support/kb/paircloud-downloading-files-with-wget/

C++ Part:

I finished Chapter 10(functions).

04/07/2019

Morning:

We installed Ubuntu on a computer that Altan brought with Ömer.

Afternoon:

I took an error from Windows 10 while partitioning disk.
I continued to read CentOS book.

05/07/2019

Morning:

I continued to read CentOS book.

Document Creation

Documents can be created with "touch" command, which uses syntax as shown below:

touch [parameters] [document_name]

For example:

touch essay.txt

To create multiple documents:

touch essay1.txt essay2.txt essay3.txt

Directory Creation

Directories can be created with "mkdir" command, which means "make directory" and uses syntax as shown below:

mkdir [parameters] [direction_name]

For example:

mkdir directory1

Change Directory command is used with "cd" abbreviation.

For example:

cd Desktop

Reading Document

Documents can be read with "cat" command. The syntax of "cat" is shown below:

cat [parameters] [document_name]

For example:

cat essay.txt

Our "cat" command syntax includes two special parameters.

First one is shown below:

cat > essay.txt

This command creates "essay.txt" if it does not exist. If it exists, removes the data inside it. Then it opens a gate to type what you want. So, you can edit the data. After you finish your typing, you must use "Ctrl+D" combination as End of File.

Second one is shown below:

cat >> essay.txt

This command does not remove the data inside the document. It opens a gate for you to type something you want, from end of the document. This gate is closed with "Ctrl+D" combination, too.




10/07/2019

The DronePi
https://www.instructables.com/id/The-Drone-Pi/

15/07/2019

File and directory permissions on Linux.

Important commands: chmod   and  chgrp

New repository is created on Github with Ömer. Link is here:
https://github.com/isaimadoglu/Arduino_Raspberry_Codes

16/07/2019

Basic Linux Commands:

ls : List Directory
cd : Change Directory
pwd : Print Working Directory
mkdir : Create New Directory
rmdir : Remove Directory
touch : Create New File
cp : Copy File from Existing Directory to the Current Directory
mv : Move(cut) File from Existing Directory to the Current Directory
rm : Remove File
clear : Clears the Terminal
cat : Read Content
find : Finds the Document and Shows Directories that Includes It
help : Gives Information about Command
man : Shows the Document of the Command
history : Lists the Command History
data : Shows the Current Date Informations
cal : Shows the Calendar of Current Month
exit : Logs out from the Current User or Exits from Terminal directly according to the Situation
whoami : Shows the User who is used currently

17/07/2019

I have read the book "Linux Komut Satiri".
Our Github repository is updated with some Arduino Projects. Repository link is here:
https://github.com/isaimadoglu/Arduino_Raspberry_Codes


19/07/2019

Linux -> kernel
Unix
1985 -> Stallman
GNU(GNU is not Unix)
emacs was written
gcc as compiler (included in GNU)
voice drivers (included in GNU)
Operating system provides communication between Hardware and Software.
Linux was Published in 1993 by Linus Torvalds. (minix -> linux)
Penguin was chosen as symbol of Linux.
Operating systems set up on Linux kernel are names as GNU/Linux distributions.
Slackware(1994), Redhat(1995), Suse, Debian...
GNU refers free software.
Suse ( public(kamusal) operating system )
Debian -> Ubuntu ( User friendly operating system ) -> lubuntu (for low power use)
Redhat ( for server operations )

Pyramid is designed as below:
Hardware -> Linux Kernel -> Operating System(includes User Space) -> User Space(Desktop Environment)

Desktop Environments ->
Gnome
KDE
XFCE
LXDE

VirtualBox can provide virtual machines, networks, etc...

NAT (bulunmus oldugum networkteki ip'm uzerinden internet istekleri yapiliyor)
(NAT yapilirsa tarama yapildiginda 1 cihaz gorulur)
Bridged Adapter (fiziksel bir ag karti gibi yeni bit ip ister)

Shared Folders property. Ntfs creation.

/ -> root (root directory)
swap (helps ram memory)


/ 8 GB
/tmp 1 GB
swap 1 GB

MBR (Master Boot Record) expression
In first part MBR holds information about partitions and it partitions disk into 4 parts.
We can create 3 Primary volume, then 1 Logical volume so as to create new volumes.
Linux standard file system is ext4.

Mount -> monte etmek diyelim.

Bootable flag is standard. Motherboards are designed according to Bootable flag.
Installation on Linux refers to copying.

Basarili ve kaliteli Linux sistem admininin 2 ozelligi:
Ihtiyaci oldugu dosyanin ne oldugunu bilip onu bulmak,
O dosyayi duzenlemek

Burada her sey dosyalardan olusuyor. Dosyalar okunuyor, yaziliyor, kopyalaniyor, yer degistiriliyor.

Mesela MySQL'deki config dosyalari bozulmussa ve data dosyalari bozulmamissa, data dosyalarini alarak alarak, yeni MySQL kurup ayaga kaldirabiliriz.

Package Management is one of the important parts of Linux system.
.exe, .deb, .rpm.
Tek tusla indirip kurulabilen paketler mirror'larda tutuluyor.

BIOS -> MBR -> GRUB(512 MB) (Holds the indexes of operating systems) -> Operating System
(Windows'ta da boot manager(bootloader) var)


20/07/2019

GNU philosophy -> Free Software
Rules:
0 - You can share it
1 - You can edit
2 - You can use it in every way
3 - Edited software must be shared

These rules are protected by licenses such as GPL(GNU), MIT, APACHE.

Open Source
Source codes are open. It is protected with licenses, too. All of the open source projects are not free software.

How can RedHat gain money?
RedHat produced an operating system. Produced packages on RPM repository. These special packages and online support is obtained by being subscribed.

Creative Commons Licenses
is not only software, you can use it to make license someting.
Copyright is used to show ownership of a product.

Copyleft is like Share Alike part of Creative Commons Licenses.

MIT license

On Debian:

Tilda(~) refers to "home" directory.
Dollar sign($) refer that we are using terminal as normal user.
Diyez(#) refer that we are using terminal as root user.
Shell(kabuk), BASH(bourne again shell),
A computer can use more than one shell.

SHELL types; Bash, zsh...
Shell provides communication between kernel and user.

apropos -> search the manual page names and descriptions
whatis -> display one-line manual page descriptions
pwd -> print name of current/working directory

ls -> list
cd -> change directory
cd .. -> top directory
absolute directory, absolute path can be used as shown in the example below:
cd /home/username/Desktop/

We can use Relative Path as shown in the example below:
cd Desktop/
The command works if our current directory is home/username.
 

 After 14:30

1 - Bilgisayar nedir?

CPU (islemci)
GPU (ekran karti)
Harddisc (depolama)
Ram (bellek)
Psu (guc kaynagi)
Motherboard (anakart)
Ag karti

2 - Bilgisayar nasil acilir?

BIOS -> MBR -> GRUB -> Operating System

3 - Isletim sistemi nasil acilir?

Operating system initiates operating system services.

4 - Kaynaklar nelerdir?

 RAM and Cpu

5 - Kaynak paylasimi nedir?

RAM and CPU are shared according to operations.

6 - Oncelik kavrami nedir?

CPU handles processes according to priorities so as to we see a smoothly working operating system.

Linux File System Hierarchy

https://www.blackmoreops.com/2015/02/14/linux-file-system-hierarchy/

Bin -> Calistirilabilir derlenmis dosyalar bulunur
Boot -> Static files of boot loader
/etc -> kurulu olan dosyalarin ayar dosyalari tutulur
/usr -> local, share, bin, include, ..
programin ihtiyac duydugu kutuphaneler, ikon temasi, normal temalar, .. kullaniciya ozel seyler burada tutuluyor,
usr/local/bin -> disaridan yuklenen programlarin bin'leri,
/usr/lib -> kutuphaneler hep ayni yerde tutuluyor, boylece tekrar tekrar yuklemenin onune geciliyor.
/var -> variable data files(degisken data dosyalari), bir uygulama kurduk, bu uygulama veriler olusturuyor, kullanacagi veriler olusturuyor, program, kullanicilarini falan var dosyasinin altina ekleyip tutuyor
/sbin -> disk formatlama gibi sistemin tamamini ilgilendiren programlari konvansiyon olarak sbin altinda topluyor gnu linux larda.
/tmp -> uygulamalar, biz, gecici olan dosyalari buraya atiyoruz. yetkili, yetkisiz her kullanici buraya dosya yazabilir. sistem yeniden basladiginda bu dosyanin ici silinir.
/dev (device) -> aygitlar, diskler, usb'ler, isletim sistemine bagli olan aygitlar, monitorler burada gorunur.
/home -> home dizinimizi istedigimi yere ayarlayabiliriz, standart olarak ev dizinimiz home dizinindedir. her kullanici kendi dizinini kullanir.
/lib -> library and kernel modules. cekirdegin donanimsal modulleri olabilir(ekran karti, ses karti gibi) bunlari kullanacagi moduller bulunur.
/mnt -> hard disk, usb, agdan gelen disk olabilir, bunlar gecici olarak mnt dizinine baglanir.
/opt -> windowstaki gibi yuklenen uygulamalar icin acilmistir. Linuxta normalde her program ortak kutuphane kullanir. netbeans opt dizinine, tek dosya olarak (bundle sekilde) kurulur.
/root home directory for root user

After 16:00

df -> mount edilmis file sistemleri listeler.
df -h    -> daha duzgun bir cikti verir.

komutlar, ihtiyacimiz dahilinde cagirilir, kullanilir. yuzde 99'unun manual page'leri var. amacim bu komutlari kullanarak sistemde istedigimiz islemleri yapmak. komutlar, c'de, python'da veya farkli dillerde yazilmis olabilir.
komut, o an sistemde yapmak istedigimiz ayarlar. komutlarin inputlari vardir. bir veya birden cok input verilebilir.

gcc -> stallman'in yazdigi C derleyicisidir.
gcc -a hello.c -o hello

whereis ->
whereis ciktisini cat'a basmaya bakacagiz ilerde.

cat $(echo "/usr/bin/ls")
sayesinde echo'nun ciktisini cat'e veriyoruz.
dollar sign provides this property.

nano editor
centos ve benzeri surumlerde standart olarak daha hafif olan vi gelir,
digerlerinde nano yuklu gelir.

file isa.mp3
iceriginde ne oldugunu gosterir.

Commands below show last modification date:
date -r yusuf.txt
or
ls -l [dir]

Packages

Debian -> .deb
RedHat -> .rpm

Debian'da paketin icinde control, readme, rules, license gibi dosyalar var. Debian diyor ki eger benim sistemime gore paket yapacaksan paketinin debian diye bir dizini olmali ve bu dosyalar icinde olmali.
Bu dosyalarin nereye atilacagi bilgisi en onemli parcalarindan biridir bir paketin. Debian'da, rpm'de hepsinde boyle. Linux'ta dosyalari attigi anda kurulum tamamlandi demektir.
Control dosyasinda, paketi maintain eden kisilerin (maintainer) isim ve mailleri olur.
Paketin bagimliliklari(mesela muzikcalar uygulamamiz olsun, bu uygulamanin arayuzunu gtk kutuphanesiyle (kernelle, ekran kartiyla iletisimi olan bir arabirimi olan ve bize bir gorsel saglayan bir kutuphane) gtk kutuphanesi kullanilmis)  control'de bildirmek gerekiyor.

KDE'de qt ve qml kullanilir gui olarak.

ffmpeg muzikcalar uygulamasi.

Boylece dependentler ve recommendedler yazilir.

Paketi mesela "muzik.deb" seklinde olustururuz.
Debian paket yoneticisi dpkg, redhat yum kullanirdi ama sonra dnf cikti.

dpkg -i muzik.deb
komutu ile muzik.deb paketi install edilir.

Kurulan paketler /bin 'e, /lib 'e ve gerekli dizinlere dagitilir.

Paketler kurulurken arkada cp kullanir, kaldirilirken rm kullanilir. Linux sistemi kullanici tarafindan anlasilir bir sistemdir.

21/07/2019

Practice ->

man
--help
-h
apropos
whatis

whoami
pwd

ls
cd

mkdir -p directoryName
touch a.txt
rm -r directoryName  // removes directories recursively
rm -rivf // recursive, interactive, verbose, force
rmdir directoryName // removes a directory which is empty

cat

We can find words in manual pages using '/' like below:
/word
And then we can switch to previous word by using 'p' and next word using 'n'.

We can analyse content of a file using "cat". Besides we can use "more" and "less" commands to analyse content more effective.

head -n3 sayilar.txt // We can view first 3 rows of "sayilar.txt" because of "-n3"
tail -n4 sayilar.txt // We can view last 4 rows of "sayilar.txt" because of "-n4"


Ctrl + C // Stops the process
Ctrl + Z // Islemi arka plana atar

We can follow log files transiently using "tail -f"
An example
"tail -f sayilar.txt"

>> // means append. We add new datas to end of a file using this parameter in front of relevant command.

command1 && command2 // run command2 if command1 was succeed.
command1 || command2 // run first command if it is succeed, if it fails, then run the next one.

command1 ; command2 ; command3 // ';' runs all of the commands without looking conditions of other commands.

> // output parameter
pwd > a.txt // writes the output of pwd into a.txt file
> // w(write) mode, deletes content of file and writes new input

Examples:
ls -l > a.txt

>> // append parameter, a(append) mode

Examples:
whoami >> a.txt
man whoami >> a.txt

echo "deneme" 1>1.txt 2>2.txt // hata almadigim outputlari 1.txt'ye, hata aldigim outputlari 2.txt'ye yazarim.

rm -rvf * 1>/home/isakilikyadeb/cikti.txt 2>/dev/null // boylece basarisiz outputlar yok edilir. output hicbir yere yazilmaz, ben de gormem.

< // input symbol

cat << OSMAN > a.txt // a.txt dosyasina, verilen girdiler girilir

PIPE
command1 | command2 // sends the output of command1 to command2

man rm | head -n70 | tail -n30 > rmman.txt  // write the rows between 40th row and 70th row of output of "man rm" command into rmman.txt

wc // counts lines, words and characters
man rm | wc -l // counts rows of input (wc -l)
wc -c // counts characters of input
wc -w // counts words of input
wc -L // counts characters of longest line

Copy command (cp)
cp a.txt b.txt // copies a.txt and pastes as b.txt
cp ../a.txt b.txt

cp -r ./dizin/ ./dizin2

echo "bu dosya degisti" >> dizin/b.txt
cp -rvu dizin/. dizin2/.
cp -rvuT dizin/ dizin2/
cp -rvu dizin/* dizin2/     // bunlar dizin'in icindeki dosyalari dizin2'nin icine update seklinde kopyalar.

* simgesinin oayi
komut a*  // a ile baslayan her sey
komut a * b // a ile baslayi b ile bitip a ile b arasinda her sey olabilir
komut *png  /// png ile biten her sey
komut a*b*cde*f*.png
(a)+(x)+(cde)+f+(x)+(.png)
* = bir veya birden fazla herhangi bir karakter

cp -v a?.txt /tmp/ // tmp'ye, a ile baslayip 2. harfini bilmedigimiz ve .txt ile bitenleri alir

GLOBS
? * []
? // bir karakter
* // bir veya birden fazla karakter
[] // icine ne yazarsam o

ls /dev/tty[0-9]?
ls /dev/tty[0-9][0-9]
ls /dev/tty[A-Z][0-9]

ls /dev/p[po]* // p ile baslayacak, 2. harf p veya o, sonunda yildiz oldugu icin kalanin onemi yok.

ip // komutu network ile ilgili islemleri yapmamizi sagliyor.
ip a //

ping 8.8.8.8 // google'un domain sunucusuna ping atiyor

Sunuculara istek atarken domain name giriyoruz ama sorgu aslinda ip adresine gonderiliyor.

deb (paketin uzantisi) -> dpkg (paketin icini acabilir) -> apt-get (yenisi apt)
rpm -> rpm -> yum (yenisi dnf)
apt ve dnf, repository bazli calisir.
Source list, debian'da /etc'nin altinda,

Debian source list

Root user

su // default root'a gecen
su ahmet // ahmet kullanicisina gecer
su - // cesitli profil ve environmentleri de yanina alarak

Source list degistirerek Debian 9'dan Debian 10'a gecebiliriz.

apt update // repolarin icerigini ceker, icindeki dosyalarin icerigini cekmez.
// paketin adi, versiyonu, surumu gibi bilgileri topladi.
kayitli source list'e gidiyor bilgileri toplayinca bende yuklu olanlarla listeyi karsilastiriyor, bendeki uygulamalardan yeni versiyonu gelmis olan uygulamalar varsa bunlarin listesini kaydediyor

apt list --upgradeable // apt update ile cekilen listeyi gosteriyor

apt upgrade  // eski paketin yerine yeni paketleri guncelliyor

apt update -> apt list --upgradeable -> apt upgrade

18:00

Guncelleme gecmisiyle ilgili bilgiler /var taraflarina kaydediliyor.

Root icinde
nano .bashrc // root oturumu acilinca calisan script

Mesela storage bagladik. cd $RESIMLERIM diyerek direk gidebilirim, .bashrc komutu sayesinde. Degiskeni, sistemi kapatip acmadan kullanabilmek icin source .bashrc yapabilirim.

apt search vim  // diyerek icinde source listte tanimladigimiz programlarin icinde adinda veya description(aciklamasinda)'unda vim gecen paketleri listeliyor.

apt komutu daha cok repository ile ilgili islerde kullanilir,
dpkg komutu ise bilgisayarimizdaki paketlerle ilgili islerde kullanilir.

apt install vim   // paket listesini okudu, tamam dedi, dependency agacini kurdu(dependencylere gore gerekli paketlerin kurulmasi gerekiyor). Bize kuracagi paketleri bildirir. Boyutunu belirttigi bir arsivi yukleyecegini belirtir, yuklenince ne kadar yer kaplayacagini da bildirir. Biz onaylarsak devam eder.

Debian'in guclu bir dagitim olmasini saglayan en onemli seylerden biri duzenli olmasi. Debian 1'i Debian 10'a kadar upgrade etsek bile, absurt bir sey yapmazsak hatasiz upgrade edebilir.

vim editor

Yalnizca insert modda yazdiklarimiz ekrana cikar.

:w org.c [ENTER] // org.c diye farkli kaydettik

ESC :q!  // kaydetmeden cik

:w  // dosyayi direk kaydeder

:wq  // dosyayi kaydedip cikar

j  // imlec asagi

k  // imlec yukari

h  // sola git

l  // saga git


insert mode disinda bastigimizda bu tuslar 300-400 farkli is yapabilir. normal kullanicilar 100-150 tanesini kullanir.

i  // insert moda girer yani yazma modu (imlecin oldugu yerde yazma moduna girer)

Bir moddan normal moda donmek icin ESC tusunu kullaniriz.

o  // bir alt satira gecip yazma moduna gecer

a  // bir harf sagina yazmaya baslar

r  // imlecimizin altindaki karakterle yer degistirir

gg  // basa don

G  // en alt satira git

Vim satirinda 80 karakteri gecme

:set nu  // satir numaralarini gosterir

Vim'in 30-40 bin tane eklentisi var.
En usta C ve C++ programcilari Vim editor kullaniyor.

^  // satir basi
$  // satir sonu
e  // kelime sonu
b  // kelime basi

d(x2) // satir silme
u  // geri al

d2k  // yukaridan 2 satir siliyorum

y(x2) // satiri kopyala

Vim tutorial var. Eklenti onemli

:colorscheme desert  // renklendirme

ODEV:
org.c dosyasini gcc ile derleyip derlenmis haliyle getirecegiz.

cat /dev/uranndom | hexdump -v -e '/1

cat usr/bin/vim > /dev/fb0 // vim'in binary dosyasini, ekran kartina basiyoruz.
/dev/fb0 // frame buffer 0

frame buffer, fps ile alakali.



22/07/2019

Icerik goruntuleme komutlari

cat
more
less
head
head -n20 // ilk 20 satiri goruntuler
tail
tail -n50
tail -f documentName  // dosyayi takip eder, iceriginde degisiklik yapildiginda yapilan degisikligi ekrana yazar.

cp kopyalanacak nereye/neIsimle  // kopyala, yapistir
cp -r  // recursive, directory'i, icindekilerle birlikte yapistirir
cp  -u  // update,
cp -v  // bilgilendirme
cp -T  // dizini

apt  // debian turevi isledim sistemlerinde depo yonetim sistemi
apt update  // depomdaki tum paketlerin tutuldugu repo list var, bir de repo sorgularini yapacagim adreslerin tutuldugu /etc/apt/source.list dosyam var.
RedHat turevlerinde /etc/yum.repos.d/ 'de bulabiliriz.
Suse turevlerinde "zypper" kullanilir.

apt upgrade //
// bir de disk upgrade var, onu arastirabiliriz.

apt search packageName  // paketi ariyoruz

apt show packageName  // paket hakkindaki temel bilgileri aliyoruz

apt remove packageName  //  bu paketin calisabilir dosyasini sistemden kaldirir ama configuration dosyalarim durur, yeniden kurdugumuzda oldugu gibi calisir
apt purge packageName  //  bin'in, lib'in altindaki o pakete dair ne varsa her seyi kaldirir.

apt autoremove  //  bir paket, dependency'leriyle birlikte gelir. dependency'lerle gelip, baska bir programin da kullanmadigi(diger paketlerin dependency listinde yoksa), artik ihtiyac olmayan paketlerle beraber silinir. yanina packageName vermeyince tum sistemi ona gore calistirir

apt clean  //

dpkg  // yine debian icindir. daha low level islemler yapabilecegimiz bir paket yoneticisi. apt'den daha basit bir paket yoneticisidir.
dpkg -i package.deb  // onceden sisteme indirilmis olan package.deb'i install eder.
dpkg -r package  // yuklu olan package'i kaldirir
dpkg -l  // yuklu olan paketleri listele
dpkg -L  // paket kurulurken nereye hangi dosyanin atildigini gosterir
dpkg -P // purge etme
dpkg --purge  // purge etme

Islemleri mumkun oldugunca apt ile yapmamiz lazim cunku bagimliliklar kontrol edilir, .. daha gelismis bir yapisi vardir. Sistemimize inmis dosyalar icin dpkg kullanilir.

Diyelim ki bir yazilim kurduk, paket kurulumu sirasinda bazi bilgiler bizden istenir. Bunun gibi islemleri kurulum sirasinda yanlis bilgiler girildiyse, paketin conf dosyasiyla oynayarak duzeltebiliriz. Veya asagidaki komutu kullaniriz:
dpkg-reconfigure packageName

apt install cdebconf  // sayesinde dpkg-reconfigure paketini indiririz.

mv a.txt b.txt  // rename gibi olur
mv ./tasinacak ./TASIMA/tasindi  // "tasinacak" dosyasini kesip TASIMA directory'sinin icine "tasindi" dosyasi olarak yapistirir

mv *txt A/  // bu komut sayesinde bulundugum yerdeki tum txt dosyalarini A dizininin icine atar.

mv A OSMAN // A dizinini OSMAN dizini diye tasir

mv OSMAN /tmp/YUSUF  // OSMAN dizinini kesip /tmp/ dizinine YUSUF isimli dizin olarak yapistirir.

man tar | wc -l  // tar komutunun man sayfasinin 1076 satir oldugunu ogrenmis oldum

wc -l *.txt  // dizindeki txt dosyalarinin iceriklerindeki satir sayilari gosterilir

sort pazartesi.txt  // pazartesi.txt dosyasinin icerigini siralayarak ekrana basar

sort pazartesi.txt | uniq  // unix sayesinde, alt alta olan ayni satirlari eleyerek ekrana basar

sort -u pazartesi.txt  // hem siralar hem de unique yapar

du -h *.txt  // dizindeki dosyalarin boyutlarina bakabiliriz

du osm/  // osm dizinindeki dosyalarin boyutlarini verir
du -sh osm/  // osm dizininin boyutunu verir, "-s" parametresi, "summarize" manasinda oldugu icin dizin boyutunu ogrenmemizi saglar

du -sh *txt | sort -h  // dizindeki txt dosyalarini, boyutlarina gore siralar

fusuma
Ruby ile yazilmis bir tool olup, bilgisayarimiza kurdugumuzda, configuration'unu yaparak touchpad'imizi efektif bir sekilde kullanmamiza yardimci olur.

Can I make Tab auto-completion case-insensitive in Bash?


CentOS
rpm -qv vim  // dpkg gibi
yum install vim  // apt install vim gibi, gitti CentOS'un repolarindan alip kurdu

/etc/yum.repos.d
gpgcheck=1  // paketlerin CentOS'tan geldigine dair bir onay aliyorum

su -c "apt install gcc"  // root'a gecmeden bu komutu root olarak calistirabilirim.

Unix Linux Shell Shortcuts

https://www.ostechnix.com/list-useful-bash-keyboard-shortcuts/

Ctrl + Z ile arka plana attigimiz processleri "fg" komutu ile geri getirip Ctrl+C ile durdurabiliriz.

Home'daki .bashrc'ye girip alias eklemeleri yapabiliriz.
alias ll='ls -la'
alias repoGuncelle='su -c "apt update"'
alias tmpTemizle='rm -rvf /tmp/.'

PROMPT

bash prompt colors
bashrc generator
export // o oturumluk tanimlama yapmak icin kullanilir.


.bashrc  // kullanicinin kullandigi kabuk oturumunu ayarlamak icin kullandigimiz bir ayar dosyasi

echo $PS1 // $ dollar sign refers that PS1 is a variable

export  // bu kabuk oturumunu oldurmeden bu kabuk oturumunun icerisine yeni bir kabuk oturumu acarsam, export ile tanimlanan degiskenler yine burada da gecerli olur.

bash completion diye bir sey var

!5 // history'deki 5 nolu satirdaki command'i calistirir.
!!  // history'deki son satirdaki command'i calistirir.

sudo

Bir normal kullanicimiz var, erisim kisitlari bulunuyor. Bir de erisim kisitlari olmayan root kullanicimiz var. "sudo" uygulamasini yukleyip, normal kullanicimiza sudo yetkilisi olarak ayar verirsek, root kullanicisi olmadan da root gibi islemleri yapmamizi saglar.

su ile root olurken yanina '-' koyuyoruz cunku root oturumunu acarken ayarlari, path'leri, bunlari set ederek oturum aciyor. global environment'lar set edilir ve bize tanimli bir sekilde gelir. aksi taktirde istedigimizi elde edemeyebiliriz.

sudo kullanirken bizden istenen parola, kendi kullanicimizin parolasidir, root'un parolasi degildir.

User Management (Kullanici Yonetimi) konusuna baslayacagiz.

23/07/2019

dpkg-reconfigure  //  bir paketin tekrardan ayarlariyla oynamamiza yarar. her paket icin gecerli degildir
dpkg-reconfigure tzdata  // ile time zone datalarimizin ayarlariyla oynayabiliriz.
sort  // verileri siralamaya yarayan komuttur
sort -u  // uniq siralama
sort -h  // human readable, dosyanin boyutuna gore siralama yapar ve boyutlari
KB, MB cinsinden gosterir
sort -r  // siralamayi tersten siralar

du -sh  // "du" -> dosyalarin boyutlarini gosterir. 's' -> summarize 'h' -> human readable

mv source.txt destination.txt  // move command
mv source.txt /tmp/  // moves "source.txt" into "/tmp/" directory as "source.txt"

cut -d":" -f1 /etc/passwd  // /etc/passwd dosyasinda alanlari ':' ya gore ayiracak ve 1. sutundakileri ekrana basacak, yani dosyadaki kullanici isimlerini cekmis olduk.
cut -d":" -f1,6 /etc/passwd  // 1. ve 6. sutunlari getirir.
cut -d":" -f1-4 /etc/passwd  // 1 ve 4 dahil ve arasindaki sutunlari getirir
cut -d":" -f1-3,7 /etc/passwd  // 1-3 dahil ve arasi ve 7. sutunu getirir
bu komut sayesinde .csv dosyalarindan faydalanabiliriz.

GREP
 Bir dosya icinde veya bir outputta arama yapmamizi saglar

Example:
echo << EOF > arama.txt
// icine bir seyler yaziyoruz

grep "osman" arama.txt

grep -i "osman" arama.txt // 'i' makes grep command case insensitive

grep -in "osman" arama.txt  // 'n' sayesinde hangi satirlarda gectigi de yazar

grep -inv "yusuf" arama.txt  // 'v' verdigim anahtar kelime disindakileri getirir

grep -Ri "osman" .  // 'R' recursive demek

grep -Ri "osman" /home/osm  // dizinin icindeki "osman" gecen satirlari bulur

grep -Ri --exclude="*.txt" "osman" /home/osm/  // sadece .txt dosyalarinda aramiyorum

grep -Ri --include="p*.txt" "osman" /home/osm/  // sadece 'p' harfi ile baslayan txt dosyalarina bakarim.

grep -Ril --color "osman" /home/osm/  // -l sayesinde hangi dosyalarda oldugu

cat arama.txt | grap -i "osman" // herhangi bir komutumun ciktisinin uzerinden grep yapabiliyorum

ls -l | grep KOPYA  //

grep -Ei "osman|yusuf" GREP/arama.txt  // 'E' aramalari ozellestiriyor

grep -Ei "^penguen" arama.txt  // ^ yani penguen ile baslayan satirlari getir

grep -i "here$" arama.txt  // satirin sonu "here" ile biten satirlari getir

grep -Ein "^$" arama.txt  //  bos satirlarin numaralarini verir


Regular expression'lar, txt dosyasi icindeki karakterlerin filtrelenmesini sagliyor.

Alistirma
1- Sistemde tanimli kullanicilardan kabuk olarak /bin/bash kullanan kullanicilarin isimlerini ve home dizinlerini bulup Home dizininiz altinda c1.txt olarak kaydedin.

grep -Ei "/bin/bash$" /etc/passwd | cut -d":" -f1,6 > /home/isakilikyadeb/c1.txt

2- /var/log dizini altinda .log uzantili dosyalarin icinde "event" kelimesi gecen dosyalarin isimlerini bulunuz ve home dizininiz altinda c2.txt olarak yazdirin hata ciktilarini c2hata.txt yazdirin

grep -ERill --include="*.log" "event" /var/log/ 1>/home/isakilikyadeb/c2.txt 2>/home/isakilikyadeb/c2hata.txt

3- Tek satir komut kullanarak home dizininizde bulunan en buyuk boyutlu 5 dosyayi home dizininiz altinda c3.txt dosyasina yazdirin.

du -h ~/ | sort -h | tail -n5 > ~/c3.txt

4- Tek satir komut kullanarak wc komutunun manuel'inde gecen en uzun satirin uzunlugunu bulup home dizininiz altinda c4.txt yazdirin.

 man wc | wc -L > ~/c4.txt

5- /etc dizini altinda "l" harfi ile baslayan ".conf" uzantili dosyalarin listesini kendi home dizininizde c5.txt kaydediniz

ls /etc/l*.conf > ~/c5.txt

14:30

User Management

Bir dosyanin izinlerine baktigimizda
-rw-r--r-- gibi bir izin kisiti goruruz.
ilk '-'(tire, dosyanin dosya oldugunu belirtir)den sonraki "rw-" kismi, dosyanin sahibinin haklarini gosterir, ikinci "r--" kismi grup haklari, ucuncu "r--" kismi others kisminin haklarini gosteriyor.
r -> read(okuma)
w -> write(yazma)
x -> execute(calistirma)

u -> user
g -> group
o -> others

Izinleri degistirebilecegimiz bir komutumuz var:
chmod  // yani change mode
chmod +x izin.txt  // others dahil herkese execute hakki verir
chmod -x izin.txt  // others dahil herkesten execute hakkini alir
chmod u+x izin.txt  //sadece user'a execute hakki verir

chmod go+x izin.txt  // group'a ve others'a execute hakki veriyorum
chmod g-rx izin.txt  // group'tan read ve execute haklarini aliyorum
chmod a-rwx ixin.txt  // all'dan tum yetkileri aliyorum

r -> sayisal karsiligi 4
w -> sayisal karsiligi 2
x -> sayisal karsiligi 1

chmod 651 izin.txt  // dedigimizde mesela 6 = 4+2 yani r ve w oldugu icin user'a r ve w izin haklari verir.

Bir directory olusturuldugunda otomatik yetkisi 755'tir.

chmod -v 644 *txt  // bulundugum dizindeki tum txt dosyalarinin yetkilerini degistirebilirim

chmod -R 755 IZINLER/  // bir dizin ve altindaki tum dosyalarin izinlerini degistirmek icin -R kullaniriz boylece islem recursive sekilde yapilmis olur.

chown root:vagrant sahip.txt  // chown sayesinde ':'dan onceki kisimdaki kullanici, ':'dan sonraki kisim grup olarak dosyanin sahibi guncellenir.

GNU/Linux sistemlerde genelde isletim sistemi kurulumu sirasinda, kullanici olusturulurken ayni isimli bir tane de grup olusturulur.

Dahil oldugumuz gruplari gormek icin asagidaki komutu kullanabiliriz:
cat /etc/group | grep isakilikyadeb

Bir dosyanin birden fazla sahibi olamaz.
Bir dosyanin birden fazla grubu olabilir.

root kullanici iken "visudo" komutunu kullanarak /etc/sudoers.tmp dosyasina giris yapabiliriz.

usermod -a -G groupName userName  // "-a" append, "-G" group name, boylece kullaniciyi grup'a ekliyoruz. /etc/group dizininde gruplar var. sudo da bir grup. Ama sudo diye bir kullanici yok, sudo diye bir grup var. bu dosyanin altina sudo diye bir grup tanimlanmis ve tum yetkiler verilmis.

id -Gn userName  //  userName isimli user'in bulundugu gruplari listeler

1) /etc/group 
2) /etc/sudoers  //
3) id -Gn userName  // ben bu kullanici grubuna dahil miyim degil miyim?
Dahil degilsem usermod kullanirim.

usermod ile kullaniciyi sudo grubuna eklemek, visudo kullanarak ayar yapmaktan daha dogru bir kullanistir.

Debian dagitiminda usb flash disk kullanimi icin kullanicinin "fuse" grubunda olmasi gerekiyor.

Root'a girip kendimizi scanner sinifindan cikaralim

deluser userName groupName  // user'i group'tan cikaririz
gpasswd -d userName groupName  // aynisi

HOMEWORK

Iki komut, gruptan kullanici silebilir.
Dahil oldugumuz bir gruptan kendimizi nasil cikaririz? Komutla degil, dosya editleyerek.
Gruplar ve kullanicilar bir yerlerde tutuluyor.
Biz gruplara eklendigimizde ve ciktigimizda bunlar bir yerlere yaziliyor.

18:00

Grup olusturalim, dosyalari gruplara ekleyelim.

groupadd groupName  // bilgisayarima groupName isminde bir grup ekledim

adduser userName  // bilgisayarima userName isminde bir user ekledim

$sudo -i  // user password ile root olma
$su -  // root password ile root olma

adduser ile kullanici olusturduk. /etc/passwd dosyasindan bakabiliriz kullanicinin eklenip eklenmedigine.

who  // komutu ile oturumu acik olan kullanicilari gorebiliriz

su - yusuf  // tire'yi kullanirsak yusuf kullanicisinin config dosyalari source edilir

passwd userName  // userName'in sifresini degistirme

useradd  // belirli conf dosyalari var, oralardan belirli ayarlari default olarak alir ve geri kalan her seyi size birakir.
Standart kullanici olusturma komutu "useradd" tir. "adduser", sadece Debian ve turevlerinde bulunuyor.

/etc/login.defs  // diye bir yer var
useradd -D  // default ayarlari gosteriyor

grep -Ri "SHELL=\/bin\/sh" /etc/default/useradd

grep slashlari ozel karakter olarak algiliyor. escape karakterlerden backslash ile kurtulabiliriz.

useradd -m -s /bin/bash -U userName  // user'in bash dosyasi sh degil de bash olur.

-m home dizini ile alakali
-s bash'i bin/bash yap
-U userName

getent passwd  // lists the users

kullanici adi -> osman
home -> /osman
userId -> 1299
SHELL -> zsh
Parola -> 1
group -> sudo
Aciklama -> OSman


userdel -r ahmet  // ahmet user'ini tum dosyalariyla beraber siler.

deluser --remove-all-files osman  // userle ilgili tum dosyalari siler.

useradd osman -d /osman --uid 1299 -g sudo -s /zsh -p 1 -c "OSman" -g 1599

25/07/2019

chmod -R ugo+rwx file  //
read -> 4
write -> 2
execute -> 1

chown userName:groupName file  //  changes the owner user of a file
chown -R userName:groupName directory  // dizin'in altindaki her seyi de ayni kullaniciya atayabiliriz
We can assign everything in a directory to a user

chgrp groupName file  // changes the owner group of a file
chown :scanner izin.txt  // changes the owner group of a file

useradd userName  //
useradd -u UID -g primaryGroup -G secondaryGroups -d setHomeDirectory

cat /etc/passwd | grep osman  //

man usermod

cat /etc/shadow  // user passwords are written in this file

suid  // valid only for root

Users that execute "passwd" command gain root authority, temporarily.

Dirty Info - If we want to define "suid", we use '4' before authority(yetki) number values, for example "chmod 4751"
If we want to define "sgid", we use '2' before authority(yetki) number values, for example "chmod 2751"

ls -l /usr/bin/wall
wall  // executes the file using group authorities, sends message to all of the members of group

id userName  //

chgrp scanner directoryName/  // changes group of directoryName as scanner

sticky bit  // ben bir dizine sticky bit tanimlamissam

If we want to define "sticky bit", we use '1' before authority(yetki) number values, for example "chmod 1751"

gzip mantar.txt  // mantar.txt dosyasini, kaynak dosyayi tutmadan direk sikistirir.

gunzip mantar.txt.gz  //

du -sh *

gzip -k mantar.txt  // -k means "keep" the original file

gzip -c mantar.txt  // mantar.txt'nin sikistirilmis halini ekrana basar
gzip -c mantar.txt > abc.txt.gz  //

file abc.txt.gz

gzip -k -1 fileName  // -1 means fast compression, -9 means best compression

gzip -r DENEME3/  // recursive bir sekilde dizindeki tum dosyalari tek tek compress ediyor

bzip2 mantar.txt  // gzip'teki gibi orijinal dosyami tutmaz, .bz2 damgasi koyarak compress eder

bunzip2 mantar.txt.bz2  //

xz mantar.txt  //  xz, txt dosyalarinda baya iyi

unxz mantar.txt

zcat mantar.txt.gz  // .gz uzantili dosyayi unzip etmeden okumamizi saglar

zmore mantar.txt.gz  //

z  // yazip cift tab yaparak kullanabilecegimiz komutlari gorebiliriz; mesela zcat, zmore, zless, zgrep

bz  // cift tab yaparak komutlari gorebiliriz; mesela bzcat, bzmore, bzless

xz  // xzcat, xzmore, xzless, xzgrep

ARSIVLEME

tar -cvf mantar.tar mantar.txt mantar2.txt buyukmantar.txt // -c create -v verbose -f file
Once cikacak olan dosyanin ismini belirtiyorum

tar -cvf deneme.tar directoryName  // archives the content of a directory under the directory

tar -czvf deneme.tar.gz directoryName  // archives the content of a directory under the directory and uses gzip compression on it (z)

tar -cjvf deneme.tar.gz directoryName  // archives the content of a directory under the directory and uses bzip2 compression on it (j)

tar -cJvf deneme.tar.gz directoryName  // archives the content of a directory under the directory and uses xz compression on it (J)

Arsivleme yaparsak dosyanin boyutu buyur

tar -tvf deneme.tar.xz  // tar dosyasinin icerigini listeler

tar -xvf deneme.tar DENEME3/mantar2.txt

tar -xvf deneme.tar  // tum tar arsivimizi oldugu yere cikarir
tar-xvf deneme.tar.gz  // -xvf ile tum arsivi cikarabilirim x -> extract

tar -xvf deneme.tar DENEME3/mantar.txt  // icinden tek bir dosya cikarma

How do I extract a specific file from a tar archive?


1)
TARDENEME
1.txt 2.txt abc.txt k.png

mkdir TarDeneme
touch TarDeneme/2.txt TarDeneme/2.txt TarDeneme/abc.txt TarDeneme/k.png

// cd TarDeneme
2)
textler.tar.xz = 1.txt, 2.txt, abc.txt
sayilar.tar.bz2 = 1.txt, 2.txt

tar -cJvf textler.tar.xz *.txt
tar -cjvf sayilar.tar.bz2 [1-9].txt

3)
textler.tar.xz iceriginin listesini liste.txt'ye yazdirin

tar -tvf textler.tar.xz > liste.txt

4)
sayilar.tar.bz2'nin icinden 1.txt'yi /tmp dizini altina cikarin

tar -xvf sayilar.tar.bz2 -C /tmp/

5)
osman.txt dosyasini olusturun ve textler.tar.xz icine ekleyin

unxz textler.tar.xz  // firstly we decompress the compressed archive file
tar -rvf textler.tar osman.txt k.png // we append new files using -rvf
tar -tvf textler.tar  // we list to see whether new files has beed appended
xz textler.tar  //  we compress archive file again
file textler.tar.xz  // we demonstrate the type of compressed archive file

 /*
touch deneme.txt
tar -r deneme.txt -f textler.tar
*/

HOMEWORK SOLUTION
groupadd osman -g 1599 && useradd osman -d /osman -m -u 1299 -g 1599 -G sudo -s /usr/bin/zsh -p &(openssl passwd -1 1) -c "OSman" -g osman

 wget

Now we will install chromium on Debian 10.

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

sudo dpkg -i google-chrome-stable_current_amd64.deb

sudo apt install -f  // searches for dependencies of all of the packages on our system, if there are required dependencies asks whether we want to install the dependencies , or asks whether we want to uninstall the package that has dependencies

/etc/apt/sources.list.d  // chrome, kendi reposunu buraya yazdi. Cunku guncelleme geldigi zaman buradaki link sayesinde otomatik haberimiz olacak

.d ile biten dizinlerle ilgili standartlar var. configuration ayarlariyla ilgili duzenlemeler sagliyor

dpkg -l  // lists packages which are installed
dpkg -L // bir paketin yuklenirken olusturdugu dosyalarin nerede oldugunu listeliyor

curl google.com  // sitenin source code'una bakiyor

elinks google.com  //

curl google.com > google.sourcecode  // source code'u google.sourcecode'a atar.

curl, http request atar json format ceker vs. Bash'in icinde rahatlikla kullanilabilir.

//Selectra python'la script yazilmis

// gitea

curl -x 'ile api'a request gonderme var.

curl, json parcalar, json okur..

HOMEWORK
bu scripti /usr/bin altina attim ben bir script yazdim, sadece ben cagirabileyim. Pathi sadece bende tanimli olsun.

/home/yusuf/bin diye bir dizin olusturacagiz. altina ilkbetigim.sh'i atacagiz ve yusuf kullanicisindayken komut gibi her yerden calistirabilecegim.
Digerleri sadece full path yazarak ulasabilir.
(path, environment)

/tmp/ dizinine girip ilkbetigim.sh yazip enter yaptigimda
.bashrc ayari olabilir, profile ayari olabilir..

2)
/home/yusuf/bin/ in altina calistirilabilir ne atarsam atayim calissin. yani burada dosyaya degil de dizine ozel bir seyler yapmaliyiz.


26/07/2019

suid  // bir script yazdik ya da sistemde uygulamalar var, gecici olarak root'un yapabilecegi isleri yapmamizi saglar

sgid  // yine ayni mantik gibi gecici olarak o uygulamayi calistirdigimizda, o uygulamayi o grubun yetkileriyle calistiriyor

wall // gruptaki herkesin ekranina bisey dusurebiliyoruz, tty yetkilerini alip kullanabiliriz.
/ls -l /usr/bin/wall

sticky bit  // bir klasor var, herkesin yazma hakki var diyelim. ama herkesin klasore yazma hakki oldugu icin osman, yusuf'un dosyalarini silebilir. bunu engellemek icin 't' diye bir bit yapmislar, herkes dosyalara yazabilsin ama sadece kendi dosyalarini silebilsin.

chmod u+s fileName  // o anki user'a suid yetkisi atar
chmod g+s fileName  // sgid yetkisi atar
chmod o+t fileName  // sticky bit yetkisi atar

-rwSr--r--  fileName // buradaki S biti, execute hakki alinirsa 'S' olarak, execute hakki alinmissa 's' olarak gorunur

/bin/bash a.sh // execute hakki  olmasa bile dosya yolunu vererek calistirabilirim

gzip // gunzip, zcat, zgrep
bzip2  // bunzip, bzcat, bzgrep
xz  // unxz, xzcat, xzgrep

tar -cvf A.tar o.txt b.txt  // o.txt and b.txt will be the content of A.tar file

We can compress tarball while we are creating using commands below:

tar -czvf A.tar.gz file1 directory1
tar -cjvf A.tar.bz2 file1 directory1
tar -cJvf A.tar.xz file1 directory1

tar -xvf A.tar -c /tmp/  // Extracts content of the archive

tar -rvf A.tar  // tar'in icine -r parametresiyle eklenecek dosyayi yazarsak, A.tar arsivinin icine dosya ekleyebiliriz. Compressed dosyalara dosya ekleyemeyiz. o yuzden once decompressed yapar, sonra ekleyip tekrar compressed yapariz.

unxz A.tar.xz
xz A.tar.xz

tar -tvf A.tar.xz  // lists the content of A.tar.xz

man chattr  //
chattr a.txt // mesela log file kaydi tutarken kullanabiliriz +a yaparak

lsattr a.txt  // lists files with attribute records

chattr +a fileName  // append only
chattr +i fileName  // immutable

find  // bir dosyanin niteliklerine gore arama yapiyor; mesela boyutuna gore, ismine gore, degistirilme tarihi, ulasilma tarihi, sahibi, izinleri, tipi

find /home/osm -name "a.txt"

find /home/isakilikyadeb/ -name "a.txt"

find /home/isakilikyadeb/ -type f | wc -l  // belirtilen dizinde kac file oldugunu soyler

"find" komutu, dosyanin icerigine bakmaz. Dosyanin adina bakarak arama yapar.

find /etc -iname "*.conf" 2>/dev/null  // /etc dizininin altindaki sonu .conf ile biten dosyalari listeler, permission hatalarini /dev/null'a yollar

find /home/isakilikyadeb/ -perm 755  // permisson'lari 755 olanlari bulur
find /home/isakilikyadeb/ ! -perm 755  // permisson'lari 755 olmayanlari bulur

grep -v "osm" /etc/passwd | wc -l  // osm bulamadiklarimin sayisini verir

find /usr/bin/ -perm /u=s  // belirtilen dizinde suid biti tanimli olanlari getirir

find /usr/bin/ -perm /g=s  // belirtilen dizinde sgid biti tanimli olanlari getirir

find /home/isakilikyadeb/ -type f -perm /a=x  // hem all'da execute hakki olan file'lari getirir

find /home/isakilikyadeb/ -type f -empty  // ici bos olan dosyalar

find /home/isakilikyadeb/ -type f -empty -iname "kkk*" -delete  // adi "kkk" ile baslayan, bos olan ve belirtilen dizinde olan dosyalari siler.

find /home/isakilikyadeb/ -user root  // isakilikyadeb dizininin altinda, kullanicisi root olan dosyalar

find /home/isakilikyadeb/ -group shadow -type f 2>/dev/null // isakilikyadeb dizininin altinda, group'u shadow olan dosyalar

find . -mtime -10 // bulundugum dizinde son 10 gun icinde degisiklik yapilmis dosyalari getir
find . -mtime +10  // bulundugum dizinde son 10 gun icinde degisiklik yapilmamis dosyalari getirir
find . -mtime 10  // bulundugum dizinde tam 10 gun once degisiklik yapilmis dosyalari getirir mi?

atime  //  access time, dosyaya en son ne zaman erisildi
mtime  // modified time, dosya en son ne zaman degistirildi
ctime  //  change time, siz bir dosyayi goruntulediniz, bir degisiklik yapmadiniz, ama dosyanin yetkilerini degistirdiniz. dosya kendi icinde metadatalar tutar; dosyanin boyutu, sahibinin degismesi, izinlerinin degismesi, bunlar ctime'a duser

stat a.txt  // komutuyla bir dosya hakkinda status bilgilerini alabiliriz

find /home/isakilikyadeb/ -mtime -1 -type f | wc -l  // son bir gun icinde degisiklik yapilmis dosyalarin sayisini verir

find /home/isakilikyadeb/ -mmin -10 -type f  // son 10 dakikada degisiklik yapilmis dosyalari getirir

find /home/isakilikyadeb/ -amin -60 -type f  // son 1 saat icinde access edilmis dosyalari getirir

find /home/isakilikyadeb/ -size +5M -size -10M -type f  // 5 MB'dan buyuk, 10 MB'dan kucuk dosyalari getirir

Pratice:

/bin/ dizininin altinda sahibi root olan calistirma izni olan boyutu 1MB'dan kucuk olan ismi 'l' veya 'L' ile baslayan dosyalarin listesini bulunuz
sudo find /bin/ -user root -perm /a=x -size -1000k -iname "l*"

find /home/isakilikyadeb/ -type f -iname "h*txt"  // 

find /home/isakilikyadeb/ -type f -iname "h*txt" -exec du -sh '{}' \;
 // "-exec" dedikten sonra du -sh dedikten sonra normalde fileName gelir, bunu bir degisken olarak dusundugumuzde gecici olarak '{}' degiskenini kullanir, -exec'in bittigini belirtmek icin de komutun sonuna "\;" yaziyorum.
'{}' degiskeni yerine dosya gelecek. ona gore kullanacagiz.

find /home/isakilikyadeb/ -type f -iname "h*txt" -exec cp -v '{}' /tmp/ \;

Practice:
home dizinimizde 777 yetkilerine sahip dosya yaratalim, bulup 644'e cevirelim.

touch ~/yetki.txt
chmod 777 ~/yetki.txt
sudo find /home/isakilikyadeb/ -type -f -perm 777 -exec chmod 644 '{}' \;

Socket

Socket'ler, sistemde kernel seviyesi uzerinen haberlesmeyi saglar.

df  // sisteme mount edilmis diskleri gosteriyor

lspci  // bilgisayara bagli donanimlar

lscpu  //
lsusb  // flash bellek, kamera, usb'den ne baglarsak onlari gorur, ama kesin calisacagi anlamina gelmiyor

inxi  //

cat /etc/os-release

Practice:
os-release'den Debian'in ID'sini alma

cat /etc/*release | awk -F= '/^ID/ {print $2}'

grep -Ei "^ID" /etc/*release | cut -d"=" -f2

source /home/isakilikyadeb/.profile

Softlink

touch a.txt
ln -s a.txt akisayolu.txt
ls -l

stat A // diyerek A dizininin inode'una ve cesitli ozelliklerine bakabiliriz.

Hardlink

Dosyanin ismiyle ilgilenmez, dosyayla ayni storage adresini gosterir.

ln a.txt akisaliyu.txt  // hard link

stat c.txt  // metadata bilgileri veriyor

http://www.linfo.org/hard_link.html



svg file

AWK

cat /etc/passwd | grep -i osman
cat /etc/passwd | grep -i osman cut -d: -f1,3
cat /etc/passwd | grep -i osman | cut -d: -f1,3  //  Delimiter(ayirici)(-d) olarak ':' kullaniyorum, "-f1,3" parametre kismiyla da 1. ve 3. sutunlari cekiyorum

Ustteki uc komut ve alttaki uc komut ayni 

cat /etc/passwd | awk '/osman/'
cat /etc/passwd | awk '/osman/ {print $1,$3}'
cat /etc/passwd | awk -F: '/osman/ {print $1,$3}'  //  Delimiter(ayirici)(-F) olarak ':' kullaniyorum, "$1,$3" parametre kismiyla da 1. ve 3. sutunlari cekiyorum



27/07/2019

Process - islem

Linux'ta process -> dosya, process'ler de birer dosyadir

process'ler /proc'ta tutulur, icine id'ler(sayilar) var.

ps  // process'leri goruntulemeye yarayan komuttur

ps -ef  // userId, processId, parentProcessId,
process baslamasi demek, /proc'un altinda sistemin vermis oldugu id ile bir dizin olusmasi ve o process'e dahil dosyalarin olusmasi demek oluyor.

ps aux  //

Process Id nedir?
osman.py diye bir python scripti dusunelim, bu scripti calistiracak olan interpreter nedir? python'dur ve /usr/bin/python'dadir varsayilan olarak. sistemimde kurulu halde, calistirilabilir bir python scripti duruyor.
/usr/bin/python'un PID'si 4 olsun desek, osman.py calistiginda PID'si 3 olsun desek, osman.py'nin calismasi icin digerine ihtiyaci oldugu icin osman.py'nin PPID'si 4 olur.

sudo apt install psmisc   // kurarsak,
pstree  // /proc'taki bilgileri alarak anlasilir bir agac yapisi sunar

ps -ef | grep

pstree -ap 377  // -ap yazip pid'sini yazinca sadece o process'i gosterdi

Bir komutun veya uygulamanin calisip basariyla sonuclandigini nasil ogrenebilirim?
Komut calistiktan sonra if{ $? == 0 } o zaman basarili
Komut calistiktan sonra if{ $? == 1 } o zaman basarisiz...
Komut calistiktan sonra if{ $? == 2 } o zaman basarisiz...

Bir komut basarisiz oldugunda, 0 disinda farkli sayilar veriyor. Bu komutlarin anlamlarini nasil ogrenebilirim? nereden ogrenebilirim?

kill -l  // kill -number seklinde numara aliyor ve sonra processId veriyoruz.
Mesela;
kill -9 1102 // pid'i 1102 olan process'i kill eder

kill -x PID // yaptigimizda $? = x + 128 yapariz, mesela
kill -9 1102 // oldugu zaman 9+128 = 137 olur ($?)
Yani disardan bir mudahale oldugu zaman 128 ile toplar.

top  // dizinlerden bilgileri alip canli olarak gosteriyor. cikmak icin 'q' tusunu kullaniyoruz.
En basta processId, yaninda uID, o process'in ne kadar cpu ya da ram kullandigini vs.. gosterir

sudo apt install htop // ile htop'u sistemimize yukleriz

htop  // biraz daha renkli, daha guzel bir ekranla karsilasiyoruz.

F* komutlari var, F5'e basarak Agac Gorunumu saglayabiliriz.

ps ve kill, tum linux dagitimlarinda yuklu gelir, htop gelmez.

htop penceresinde F3'e tiklayip "ping" yazarak diger sekmede ping 1.1.1.1 yaptigimiz komutun process'ini bulabiliriz. Daha sonra F9 ile Kill penceresi acip hangi sinyalle kill etmek istedigimizi secer ve process'i kill ederiz.

Practice
C kodlari, Python kodlarinin aksine, parent process'e ihtiyac duymadan calisabilir. O yuzden C ile bir alistirma yapacagiz.

stdin -> 0
stdout -> 1
stderr -> 2

tail -f /dev/null  // Ctrl+C

APP_PURPOSE=PARAveASK tail -f /dev/null // bunu calistirdiktan sonra bunu yan terminal sekmesinden izleyecegiz

ps -ef | grep tail  // process id'ye buradan bakacagiz

ls /proc/1557  // fd var, yani file description, yani stdin, stdout, stderr
stdin, stdout, stderr -> bunlara linux'ta file description denir.
// burasi bize, process'in bir dosya seklinde olusturuldugunu gosteriyor

ls -l /proc/1557/fd  // mavi oldugunda read oluyor. 0 means input, /dev/pts/0'i gosteriyor
// process calistiginda dogru ciktilarimin, hatali ciktilarimin, yazildigi dosyalar burada gosteriliyor

cat /proc/1557/environ | less  // programi calistirirken APP_PURPOSE diye bir sey tanimlamistik. Onu burada gorebiliriz.
2>hata.txt yazdigimizda, ls -l /proc/1557/fd ciktisindaki 2'yi kullaniyor.

cat /proc/1557/cmdline   // benim calistirmis oldugum uygulama. Bunun bir standardi olmak zorunda. Sonucta bu bir process. Aslinda biz her "ls" yaptigimizda buraya bir dizin acip geri siliyor.

Windows'ta defrag(disk birlestirme) islemi yapilabiliyor. Mesela diskimiz bir kutuphane olsun. Kutuphane yoneticisi de windows olsun. Kutuphane bosken, kutuphane yoneticisi, kitaplari rastgele dagitiyor. Bir sure sonra biri kimya kitabi istediginde arayip buluyor, tabii bu suruyor. Bu sureci azaltmak icin windows, disk birlestirici kullanmaya basladi.
Disk doldukca kutuphane corba haline geliyor ve bilgisayar yavasliyor. Windows 10'da disk birlestirici var. Suruculeri iyi duruma getir diye bir tool var. Windows hatanin farkinda ama duzeltilmesi mimari olarak mumkun degil, o yuzden farkli optimizasyon yontemleri deniyor. Komple duzeltilmesi icin Windows'un temelden duzeltilmesi gerekiyor.
Linux'ta kullandigimiz bilgisayarin hizi, kurmus oldugumuz paket veya uygulamalarla kolay kolay yavaslamaz, yani yavaslama orani cok dusuktur. Cunku disk planlamasi en bastan itibaren duzgundur.
Kaynak: https://www.techadvisor.co.uk/how-to/windows/how-defrag-hard-drive-3493358/

Windows'ta hoparlorumuzun maksimum noktasi 200 olsun, bu, otomatik olarak sistem tarafindan, yaklasik 150'ye kadar sinirlandirir. Linux'ta boyle bir limit var ama bunu yuzde 150'ye kadar artirabiliyoruz. Hatta hoparloru patlatabiliriz bile.

python redirect all print standard output  // tum printlerim standard output olarak verilsin.

https://stackoverflow.com/questions/4675728/redirect-stdout-to-a-file-in-python

Her print'im, ......

pidof meet  // direkt, process'in adini verdigimde, pid'sini veriyor. tail -f falan kullansam,oyle direk pid'sini vermez. O yuzden pidof'u kullanabiliriz.

ls /proc/1756  // yine process'ime dair dizinler olustu.
ls -l /proc/1756/exe  //  exe'nin bir link oldugunu gorduk. nereyi gosteriyor? "meet" dosyasini gosteriyor.
rm -rf meet  //  siliyorum
ls -l /proc/1756/exe  // tekrar bakiyorum, silindigini gosteriyor
cp /proc/1756/exe kurtardim  // diye kopyaladim. sildim ama process'ten geri getirdim
./kurtardim  // calistiririm ve gorurum ki calisiyor

// Process'in bir dosya oldugunun daha buyuk bir ispati olamaz herhalde.

mv kurtardim meet  // adini tekrar meet diye degistiriyorum

./meet  // yan sekmede aciyorum

pidof meet  // ./meet'in yan sekmesinden devam ediyorum

ls -l /proc/1777/exe  // aradaki link, softlink gibi gorunuyor ama hardlink gibi davraniyor. Sonucta bu bir process file, her file ayni davranmayabilir.

Burada anlamamiz gereken sey su, process, gercekten bir dosya.
Process calistiktan sonra, onu calistiran uygulama silinse bile o process dosyasi hala ayakta kaliyor. Sildikten sonra uygulamayi da kapatsaydik silinir giderdi.
Process ram'de calisiyor ama file kopyalayarak ram'deki process'i yedekleyebildik.

Capture The Flag
Bayrak 2 basamakli bir sayi,
167.71.71.61
Cumartesi 12:40
Pazartesi 12:40

Bildigimiz komutlari kullanarak cozebiliriz, bilmedigimiz birkac sey karsimiza cikarsa google'dan bakabiliriz. Islemlerin tamamini terminal'den rahatlikla yapabiliriz. Gerekirse tarayici da kullanabiliriz tabii. Bu sadece linux degil, icinde birkac kurnazlik yapmak gerekiyor.
Elimizde bir ip var, ogrendigimiz komutlar var, amacimiz iki basamakli bir sayi bulmak. Bu sayiyi bulunca hocaya telegram'dan mesaj atiyoruz. [10-99] arasi bir sayi.
Bir ipucu bulacagim, o ipucu beni baska bir ipucuna goturecek, bu sekilde sona kadar gidecegiz.
curl ogrendik, wget ogrendik, ipucu bulmak biraz sikinti tabii.

Solution:
curl 167.71.71.61 > ~/Desktop/capture.txt
cat ~/Desktop/capture.txt
wget 167.71.71.61/vim.jpg


pip'in kendine ozel reposu var, orada python paketleri bulunuyor.
pip install ile paketleri yukleyebiliyoruz.
mesela django ile web sitesi yapacak olsak 5-10 tane python paketi kullanman gerekiyor.
freeze gibi bir komutla kullandigimiz pip paketlerini toplayip baska sistemlere tasiyabiliriz.

maven java'da kullaniliyor. kurumsal uygulamalar yazilirken jsv, jsf gibi seyler kullanilirken maven kullaniliyor. gelistirme ortamini kurmak icin maven'in repository'sinden java kutuphanelerini indiriyor.

Bu tarz paket yonetim sistemleri sadece isletim sistemi icin degil, proje gelistirmede de kullaniliyor. Isletim sistemi repository'lerinde oldugu gibi, gelistirici paketlemiyor. Maven, pip gibilerde ise genelde kutuphaneyi gelistiren, yazan kisiler takibini yapiyor.

mpm de node.js gibi javascript kutuphanelerini kuruyor.
mpm install gereksinimler   //  gibi seyler kullanarak projemize bir suru kolaylik saglayabiliriz

Yeni bir depo adresini direk source.list'e de yukleyebiliriz,,,,,

Source.list Ekleme

google'da "virtualbox" aramasi yaptik.
virtualbox sitesine giriyorum.
indirmelere bakiyorum
Debian-based Linux distributions kismindaki command satirini kopyaliyorum.

source.list'e giriyorum,
### VirtualBox Official Repo
deb https://download.virtualbox.org/virtualbox/debian <buster> contrib
deb https://download.virtualbox.org/virtualbox/debian <mydist> contrib

apt update // diyoruz

The Oracle public key for apt-secure can be downloaded'den mavi here'e sag tiklayip copy link location diyoruz
apt-key add oracle_vbox_2016.asc  // indirdigim

Virtualbox'un bu paketleri oraya sunarken kullandigi imzayi indirdim ve bu imzaya guvenebilirsin dedim.
apt update  // simdi dedim, virtualbox linkleri geldi
apt search virtualbox  // simdi aradigimda paketler geldi.
nereden geldi?
apt-cache policy virtualbox-6.0  // diyip baktigimizda kendi sitesinden cektigini goruruz.

Bir tane source list adresi var, bir de key var. Bu keylerin toplandigi belirli guvenilir siteler var. Kendimiz de bazi yuklenebilir yerlere yukleyebiliriz. Aldigimiz key vardi, o keyle arayip yukluyoruz.

Delta kavrami, paketler var, guncellenirken,
Mesela firefox 50 mb, install diyip kurduk, sonra firefox versiyonn 70'ti, 71 geldi, biz apt upgrade dedik, sadece guncellenen 1 mb ise onu indirir. Buna delta upgrade denir. Bu tarz bir sey.

Log kayitlari

Loglar /var/log altinda tutuluyor

Sistem acilirken cekirdek ram'e yukleniyor, sonra ayni bios gibi kart uzerindeki donanimlarin hepsini kontrol ediyor, donanimla ilgili loglar dusuluyor. Sistemin acilisina engel bir hata varsa log'a duser. Engel olmayan hatalar da log'a duser, ama biz gormeyiz, sonradan acip bakabiliriz.
Guc -> [bios, anakart ] -> boot -> disk(MBR) -> grub -> linux kernel -> Ram

auth.log  // inceleyelim

Practice:
ipucu auth.log  ,  linux isletim sistemimizi kurduk kurali kac kere kendi kullanicimizla basariyla oturum acmisiz?

Oturum acarken girdigimiz bilgilerle passwd ve shadow'dan dogrulanip oturum aciyoruz.

Solution:
cat /var/log/auth.log | grep -a isakilikyadeb | grep "session opened" | grep -v lightdm | grep -v root | wc -l

Linux'ta log'lar, belirli araclar araciligiyla toplaniyor ve cesitli yontemlerle /var/log altindaki dosyalara yaziliyor. bu dosyalar bir sure sonra buyudukce buyuyor, ama, mesela "yusuf.log" diye bir dosyam olsun. "logrotate" toolu sistemde yuklu geliyor ve default olarak bazi isleri yapiyor. Default suresi neyse bu sure zarflarinda log dosyalarini compress eder, arsivler. Mesela 3. gun sonunda logrotate'in is yapma suresi geldiginde bu yusuf.log dosyasini "yusuf.log.1" diye bir dosyaya kaydeder. Belirli bir sure sonra tarih.yusuf.tar.gz gibi bir dosyaya compress eder. Sonra yusuf.log'un ici yine bos.


Linux'ta log'lar, belirli servisler tarafindan toplanir. Sizin uygulamanizin herhangi bir dosyaya yazdigi bir sey bir log. Bundan farkli olarak Linux'ta "rsyslog" diye bir servis var. Bunun sistemde yenisi cikti. Suan hali hazirda kullanilan sey rsyslog. Bu servis, soket uzerinden veya kendi haberlesme yontemi uzerinden .. Her uygulama, log bilgilerini "rsyslog"a gonderiyor, arsisLog duzenliyor. Bunun ana nedeni nedir? Duzenli olmasi. Bu duzen nasil saglaniyor? Mesela;
Bizde lightdm, ya da bazi sshd, ya da systemd servisi.. Bunlar basarili giris, basarisiz giris, hepsinin log'unu tutuyor. Bu ucu birbirinden farkli uygulamalar. Bunlarin hepsi log'lari "rsyslog"a getiriyor, "rsyslog" da hepsini auth.log dosyasina duzenli bir sekilde, kategorize ederek, ilgili loglari (birsuru log var) hepsini toplayip hepsini atiyor.
Timestamp diye bir zaman muhru var. Tum loglara bu muhur vuruluyor. Resmi bir anlam ifade etmiyor. Bazi kurumlar "timestamp" sertifikasi saglamaya calisiyor. Artik istihbarat, savcilik bu loglari aldiginda damgalanmis oluyor. rsyslog'a bu damgayi veriyorsunuz, "rsyslog" bunlari o sekilde damgalayip log'luyor.
Tabii sadece bu servisler degil. auth.log disinda, syslog dosyasi da var. icinde, sistemde akan bilgilerin cogunu bulunduruyor. Bu acilip-kapatilabilen bir sey. Syslog, log'larin toplama merkezi gibi bir sey, log'lari bir arada tutuyor. rsyslog, kendisi hem client'tir, hem server'dir.
rsyslog, servisimin adi, uygulamamin kendisi.

Facility code, gelen log'larin kodlari.
15'e kadar standartlastirilmis, 16 ve sonrasi bizim tarafimizdan ayarlanabilir.

rsyslog nasil hem client gibi hem de server gibi davranabilir?
Mesela 5 tane bilgisayar olsun. Yeri geldiginde A bilgisayari server olarak davranir, B bilgisayari, C bilgisayari ve D bilgisayari client olur; yeri geldiginde B bilgisayari server olur, diger bilgisayarlar client olur.
Mesela Config ayarlarindan, C bilgisayarindan log gelmisse bunu k dosyasina yaz gibi yonlendirme yapabiliriz.

Elastic search, NoSQL datalari uzerinde hizli arama yapabilen bir uygulama. MongoDB gibi programlarda .json search'i cok hizli yapiyor.
Elastic search sistemi kurulumlariyla cok iyi sistemler kurulabilir.

Severity level, log'un geldigi yer olur, mesaji olur, facilitysi(kategorisi), severity'si olur. Yani log'un ciddiyet seviyeleri olur. log, bu bilgileri icinde barindirir. Log'ta en buyuk mesele, mesaji parse etmek. Yani bunlara REGEX deniyor. Ortada karisik bir mesaj oldugunu gordugumuzde, bu mesajlari duzenli bir sekilde ayirabilirsek..

/etc altinda 2 tane rsyslog dosyasi var. biri conf dosyasi, biri dizini.
ls -l /etc/rsyslog*

dpkg -l rsyslog  // bu conf dosyasi varsa, sistemimizde bu rsyslog vardir, yoksa kurariz

rsyslog dosyalarinda filtre yazmak, zor bir istir. Bu configuration'u yapariz, sistem devam eder.

UDP/TCP protokolleri.

rsyslog'ta kurallar ve filtreler onemli.
RULES kismindan baska bir dizindeki log dosyalarini dinleyebiliriz.



28/07/2019

hostname'in yeri -> /etc/hostname

nano /etc/rsyslog.conf  // tan UDP portunu acabiliriz
systemctl restart rsyslog.service  //  Linux'taki servislerden sorumlu uygulamadir, 3 tane parametresi var; start, stop, restart
systemctl status rsyslog.service  //  we control the status

UDP portumda dinleyen 514 portum var. Biz de bilgisayarimizdan kendimizi client yapip oraya log gonderecegiz.

167.71.70.11  // VPS Rsyslog Server, gercek bir ip, dış ip
KAMP Linux101-B sinifi

root oluyoruz

#systemctl restart rsyslog

logger "test"  // rsyslog'a log gonderiyor

https://www.tecmint.com/setup-rsyslog-client-to-send-logs-to-rsyslog-server-in-centos-7/
Sitede bir hata var,
*. *  @192.168.10.254:514

yazilmis ama
*.* @192.168.10.254:514 // seklinde olmasi lazim, yani

Practice:

Herkesin loglarini, yolladiklari userName'lerine gore kaydetme.

14:30

apt install screenfetch

screenfetch | cut -c -52
screenfetch | colrm 52
screenfetch | awk '{print substr ($0, 1, 55)}'  // verdigimiz araliklarla parcalara ayiriyor.

rsyslog'un oraya bir .conf dosyasi olusturabilirim.
nano /etc/rsyslog.d/kampbuster.conf

$template UserDosyalari,  "var/log/kamp/%HOSTNAME%/userabd.log"
//%HOSTNAME% gelen user'in adinda hostname'inle dizine ac, icine at ??????

user.* ?UserDosyalari
// bunlari bu dosyalara yonlendiriyorum. "UserDosyalari", bizim tanimladigimiz bir degisken ismi

rsyslog'un icindeki
$IncludeConfig /etc/rsyslog.d/*.conf   // sayesinde conf dosyalarini takip eder

16:20

ls -i a  // dosyanin inode'unu bulmak icin

Dosyayi direk inode'uyla silebilirim.
rm -i 659975

find. -ecex rm {} \;

find -inum 659975

FDISK

Disk yonetimi.

root oluyoruz

df -h  //  mount olmus diskler

/dev/sda5   //  var

cd /dev
ls -l sd*   // standard disc'leri listeleriz

mount /dev/xxx   /yyy/???
umount /yyy/???/***

sudo fdisk -l  // tek tek /dev/sda'nin, /dev/sdb'nin parcalarini.. gosterir

lsblk   // disk olabilecek, bagli olan aygitlari gosterir

sudo fdisk -l /dev/sdc  // usb disk hakkinda bilgi alabilirim

fdisk /dev/sdc  // 
Sonra 'm' i seciyoruz
sonra 'p' yi seciyoruz


LVM, bazi islemleri sanal olarak yapmamizi saglayabiliyor.


Format atmak, diski, mesela FAT32 gibi dosya sistemiyle bicimlendirmek, yapilandirmak demek oluyor.

mkfs  //
mkfs.ext4 /dev/sdc1  // format atmak bu oluyor

man mount

Mount hakkında temel bilgileri içeren ve temel pratiklerin verildiği bir link:
https://www.geeksforgeeks.org/mount-command-in-linux-with-examples/

File system olmadan "mount" komutu calismaz. Oradaki file system'i belirli bir yeri isaret edecek sekilde baglamak anlamina geliyor.
Onemli parametrelerinden biri 't'.

mount -t exfat /dev/sdc1 /data

umount  // unmount demis oluyoruz

umount /data

/*
Mount meselesi; Mesela bizim bos bir diskimiz olsun, uzerinde sektorler olsun, trackler var diyelim, donanimsal bolumler var.. Bunlari Yerel Disk C, Yerel Disk D gibi bolumlere ayiracagiz diyelim. Mesela 500 GB depolamamiz var,
30 GB -> /
Root
8 GB -> /swap
Swap'i sisteme teslim ediyoruz, o kendi isliyor.
200 GB -> /D
Bu bolumlemeyi neyle yaparim? fdisk ile
200 GB da bos kalsin diyelim.

2. adim)Format
mkfs.ext4 mkfs.exfat

Formatimizi attik, bolumlemesi mesela
sda1
sda2
/swap
bos

Bunlari yaptik ama hala sisteme bagimli degil.

mount /dev/sda1 /D

Bu, link gibi, (softlink kisayoldu, hard link inode ile iliskiliydi) ,
/D diye bir klasorumuz var diyelim, bu da bir dosya, bunun da bir "inode" numarasi var ve bir yeri isaret ediyor.
mount komutuyla,
/dev/sda1 -> /D      // seklinde bir
/D'ye girdigimde, artik /dev/sda'nin altindaymisim gibi davraniyor sistem.
*/

GParted  // diye bir uygulama var, Windows disk bolumleyici gibi
// GNOME partition editor

cat /etc/fstab  //  mesela sda5'i /data'ya mount edeceksin diyebiliriz

NFS server

ip'sini ya da hostname'ini yaziyoruz, bilgisayar/data diyoruz, ....

Dosya partition'unun bazisini sadece okunabilir(read only) sekilde mount edebiliyoruz.

bir diskin uid'si nasil bulunur?
blkid


29/07/2019

fdisk  // format degildir, sadece duzenlemek icin kullanilir
ext4, exfat gibi dosyalama sistemleri var.

ncdu  // du gibi, en cok yeri kaplayan dosyalari siraliyor

rsync  // hoca cp command yerine parametreleriyle birlikte rsync kullaniyormus

https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-local-and-remote-directories-on-a-vps

1) Let's create a directory named "lys" now.
mkdir lys
2) Then we create "dir1" and "dir2" directories, because we will sync content of dir1 on dir2
mkdir dir1 dir2
3) Now, we create 100 files in dir1
touch dir1/kapi{1..100}
4) Finally, we sync files in "dir1" on "dir2"
rsync -r dir1/ dir2  // sends only the content of "dir1" directory to "dir2" directory

Different cases of rsync:

rsync -r dir1 dir2  //  not only content of "dir1", but also sends "dir1" completely

rsync -r dir1/kapi1 dir2  //

rsync -r dir1/kapi1 kapi101  // copies /dir1/kapi1 and pastes as kapi101 file

rsync -r dir1/kapi1 kapi102/  //  copies /dir1/kapi1, creates kapi102 directory because of '/' after "kapi102" word and pastes /dir1/kapi1 file into "kapi102/" directory


"rsync" command with "-z" parameter compresses files before sending to a destination machine. "rsync" application in the destination machine decompresses the file and it becomes ready-to-use.

alias  // if we use this command purely, it lists aliases defined in our system.

rsync -avz enesk@localhost:/home/enesk/lyk/dir1/ dir2/  //
// Copies the content of dir1/ which is in the @localhost and pastes under "dir2/"

//  localhost -> yusufComputer  olabilir mesela, uzak sunucudaki /home/enesk/lyk/dir1/ in altindakileri dosyalari alip, bulundugumuz yerdeki dir2/ 'nin altina atariz.

rsync -avz root@eposta.ulakbim.gov.tr:/home/enesk/lyk/dir1/ dir2/

rsync (on source machine) -> ssh -> eth0 ( ethernet) -> user (password) -> rsnc (on destination machine)

rsync -avz kamp@167.71.76.117:/home/kamp/dizin1/ syncDir/  //  takes the content of "kamp@167.71.76.117:/home/kamp/dizin1/" and pastes the content into "syncDir/"

rsync -avz syncDir/ kamp@167.71.76.117:/home/kamp/dizin1/  // takes the content of "syncDir/" and pastes into "kamp@167.71.76.117:/home/kamp/dizin1/"

rsync command is an improved command. It does not only copy files, it controls source directory and destination directory, writes only the altered files.

"rsync" command with "--delete" parameter deletes files which are in destination directory and were deleted from source directory

Example:
rsync -avz --delete kamp@167.71.76.117:/home/kamp/ bosDizin/
// deletes files which were deleted in "kamp@167.71.76.117:/home/kamp/"  in "bosDizin" directory

SCP command // secure copy
Implementation style is similar to "rsync", what is the difference?

Mesela bir switch'e, firewall'a baglanacaksin, ama rsync kurulu gelmeyebiliyor.
rsync, bu isi incremental olarak yapiyor. scp ise
Birincisi windows makinemiz var diyelim, scp'yi destekliyor ama rsync'i desteklemiyor.
Farki; rsync incremental, scp degil; scp cogu makinede hazir olarak bulunuyor.
rsync'in ekstra yapabildigi seyler var,


scp -prv mahmut kamp@167.71.76.117:/home/kamp/mehmet  // 

14:30

man md5sum

md5 is a hashing algorithm.

f(enes0) -> a512c

hashing algoritmalarinin amaci, mesela biz bir dosya indiriyoruz, oraya md5sum koymuslar. Dogru indi mi? bunu kontrol etmek icin, "md5sum enes"(enes, fileName olarak dusunulur) dedigimizde bize yine "enes"i verir.
md5sum dosyayi aliyor, 512 byte'lik parcalara boluyor,
ilk blok icin, bir fonksiyondan gecirip bir cikti elde ediyor,
Bir seyler yapip sifreliyor.

Sifreleme algoritmalarinda geri donus yapabilmek gerekiyor.
Bir anahtar kullaniliyor.
Mesela enes dosyasini sifrelediysek sifreyi karsiya da iletmek gerekiyor.

Peki sifrelemeyi nerelerde kullaniyoruz?
bos

AES

Asymmetric anahtarlar var
bir tane private anahtarimiz var, bundan bir tane de public anahtar olusturuyoruz.
ssl(enes + privateKey) = enes'
ssl(enes' + publicKey) = enes

https:

mesela ssl sertifikasi almak istesek, dunyada bunun icin yetkili kurumlar var,
kok sertifikalari var,
siz bana diyorsunuz ki bu kok sertifikalardan ureterek,
bana pardus.org.tr hesabim icin private key ver.
Bize kendi kok sertifinasindan pardus.org.tr icin private key verir, saklamamiz gereken tek parcamiz.
Bize baglanmak istediklerinde public key'imizi veriyoruz.
Mesela firefox, bu keyleri matematiksel olarak eslestiriyor, bunlarla sifreleyip kok sertifikaya sunuyor, onu onaylarsa,
bu https:// ile korunuyor, guvenlidir diye yesil bir "tik" isareti oluyor.
Biz private key ile dosya yolluyoruz, karsi taraf public key ile dosyayi aciyor.
Mesela icinde AES256 bit'in ayarlari olabilir.
Sifrelemeyi islemcinin daha hizli yapabilmesi icin kucuk bir donanim parcacigi var.
O yollanan dosya, sifrelenerek gonderilip geri aliniyor.

Simetrik sifreleme turleri, asimetrik sifreleme turleri.. arastiralim..

mount
Linux cekirdegine disk mount ediliyor.

Aygitlari cekirdek taniyor. Yeni bagladigimiz bir diski, flash diski, mount etmek demek, dosya hiyerarsisindeki bir yere baglamak olmus oluyor..

mesela /dev/sda1 bir disk bolumu(partition'u) , biz bunu hiyerarside bir yere bagliyoruz ki, icerigini gorebilelim. mount edilmemis haldeyken sadece diski goruyoruz.

Log neydi?
Bilgisayarin tuttugu gunlukler.
Bunun icin hangi tool vardi?
rsyslog, syslog.. // Debian'da kullandigimiz, rsyslog'tu

NETWORK

Networkte cesitli modeller var. Suan bilgisayarimizin haberlestigi model, OSI modeli(katmanlar). Tum network cihazlari ve yazilimlar buna uygun olarak uretiliyor.

7 Katmanli bir sistem.

Donanim Katmani -> Veri Katmani -> Ag Katmani -> Ulasim Katmani -> Oturum Katmani -> Sunum Katmani -> Uygulama Katmani


Donanim katmani dedigi fiziksel, network cihazlari, modem, rooter. Burada veri nasil halde? 0 veya 1 seklinde. Mesela ethernet kablosundan 0,1 geciyor. Temelde her sey elektrik sinyaline donusturulmus halde.

Veri katmaninda; Ethernet, Wifi, (Isin icine Mac adresi giriyor)

Ag Katmani (ip)  Frame'ler Paket'ler donusuyor

Ulasim katmani (Port) Paket'ler Segment'lere donusuyor

Osi katmani 7 katman gibi ama gercek hayatta, networkte, normalde 4 katman.
0,1 'ler ham hali.
Bir ust katmanda Mac adresi var. Yani fiziksel cihazin id'si.
Bir ust katmanda buna bir de ip ekleniyor.

Simdi diyelim ki A bilgisayari ve B bilgisayari var. Network karti falan var. En basta bir Paket var. Once Ag kartina gidiyor, burada Buna Mac adresi ekleniyor ve Frame oluyor. Ip ekleniyor Paket oluyor. Pakete Port ekleniyor(hangi port uzerinden gidecegi, TCP, UDP) Segment oluyor. Yollanmaya hazir oluyor ve yollaniyor. Karsiya yollaniyor. Karsiya gelen Segmentte mesela biz sadece .mp3 dosyasini istiyoruz. Diger bilgiler nereye gidiyor? Segment aciliyor, paket aciliyor, frame aciliyor, icindeki dosyayi aliyor ve biz kullaniyoruz.
Iki cihaz sadece Mac adresleriyle haberlesebilir. En azindan elimizdeki paketin gidecegi Mac adresini belirtelim ki gidebilsin.
Dunyadaki cihazlari dusundugumuzde bu cihazlarin sayisi cok cok fazla.
Mesela Amerika'dan dosya gelse... Amac minimum maliyet, maksimum hiz. Mesela icinde sadece IP varsa, Paketler yollarim, Segment yapmak zorunda degilim.
Mesela kucuk bir isletmede sadece Mac adresi uzerinden haberlesme yapilabilir.

Enes Hoca
Mesela .mp3 dosyasini gondermeyi istiyoruz, TCP katmani Ulasim Katmani'nda basliyor diyelim, bizim verimizi belki parcalara bolecek, dogrulugu kontrol edilebilsin diye hashing islemleri yapacak, ip'yi ekliyor, Onu asagiya, IP katmanina(Ag katmanina) teslim ediyor.
Katmanda temele giderken Decapsulation etmis oluyoruz.

Proxy mantigi
Mesela Sol tarafta Yusuf'unBilgisayari var, Sag tarafta Berlin(Burada VPN var) olsun,
Mesela diyelim ki Twitter yasak. Twitter'a gidemiyorum ama Berlin'deki sunucuma gidebiliyorum.
Berlin'den de Twitter'a gidebiliyorum.
Verilerin paketlenmesini falan topladigimizda bir kutu diyelim. Bu kutuyu, data'ymis gibi Donanim katmanindan Frame'liyoruz, Paket'liyoruz, ...
Iste bu durum VPN olmus oluyor.
VPN biraz daha yavas olabiliyor ama erisim saglanmis oluyor. Yavas olmasinin sebepleri, tekrardan paketlemeler ve yolun uzamasindan kaynaklaniyor.
VPN demek, direk sifreli veri demek degil. Bilgilerimiz sifrelenmemis halde gonderiliyor. Yani VPN kullandigimiz belirli olmus oluyor. Cunku bu durumlarda sifreleme kullanmak ekstra bir maliyet ve guc. Bu sefer herhangibir VPN'i izleyen kimse, sizin hangi sitelerle iletisimde oldugunuzu goremiyor.
Sifrelenebilecek tek yer data. VPN'e giden paket sifrelenip Destination'a, bu senaryoda Twitter'a giderse, izleyen kisiler sifrelenmis paketi gorur, sadece VPN sunucusunun bilgilerini alir, paket gizliligi saglanmis olur.

Mesela kendi kurumumda ssh 'i yasaklamak istiyorum.
Baglantinin basinda bu kadar paket gidip, bu kadar paket aliniyorsa,
gibi belirli kriterleri dusunerek tahmini engellemeler yapilirsa engellenebilir.
Mesela paketi aldim, VPN'e yonlendirdim, firewall, hedef adresi gorurse paketi dusurebilir.
Yurtdisini engelleyebilirsin. Bu tip engeller olabilir.
Aksi halde yuzde yuz engellenemiyor kolay kolay.
SSL girmedigimiz VPN uygulamalarinda kendi parolamizi, verilerimizi acik ediyor olabiliriz.


https'teki 's', SSL'den geliyor.
NFS, network diski.
Protokol, her cihazin ayni dili konusabilmesi icin uretilmis kurallar butunudur.
UDP, TCP, ICMP gibi protokoller var.

UDP, haberlesmede paket ulasti mi yoksa ulasmadi mi, bunun bilgisi iletilmiyor.
Chat yaparken mesaj her zaman gider, bu TCP'dendir.
Ama UDP'de bazi paketler kaybolur.

TCP'de her paket gidiyor. Gittigi iki taraf tarafindan da onaylaniyor. Handshake, A bilgisayari B bilgisayarina gidiyor, ikisinin de elinde anahtar var diyelim. Diyor ki senin anahtarin bende yok ama benim anahtarim var, konusabilir miyiz? B bilgisayari da diyor ki konusabiliriz ama benim anahtarimi al, senin anahtarini da ben alim diyor. Sonra A gidiyor, geri dondugunde B bakiyor, kendi anahtarini gorunce iletisimi kabul ediyor.
TCP'de hash mekanizmasina bakiliyor, paketlerin gittiginden emin olunuyor. TCP'ye yavas diyemeyiz ama UDP'ye kiyasla yavas.

IP -> haberlesme sirasinda sizi tanimlayan nickname gibidir. IP'lerde standart olarak ipv4 var, ipv6 var. ipv4, 4 bloktan olusuyor, her blok 8 bit. 2 uzeri 8 = 256, o zaman 0 ile 255 arasinda bir deger aliyor.

Bir network dusunelim, mesela okulun network'u. Bir her yerden ulasilabilen gercek ip'ler var, bir de okulun icindeki private ip'ler var.
private ip'lerin ilki
10.0.0
ikincisi
192.168.0.0
ucuncusu..
172.16.0.0

birinci 10'lu olan private ip grubunda 3 oktet var. Ikinci ve ucuncu olanlarda 4'er oktet var.

Genelde 192.168.1.1 modemin ip'sidir.

mesela ikincisine gore 192.168'i almak zorundayiz, diger kisimlari almaya basliyoruz.
Bizim bir modemimiz var, bunun dis ip'si yani gercek ip'si var. Sabit olmayabilir. Ama gercek bir ip'miz var. Icerdekiler, wifi'ye baglandigimizda
telefon 192.168.0.1 almis,
laptop 192.168.0.2 almis,

gibi

Universitelerde genelde 10.0.0.0 tarzi aliyor. Cunku bazi kriterlere gore kategorize ediliyor.

Sabit ip olunca ne oluyor?
DSP server tarafindan, degismeyecek olan ip'dir. Wifi'ye baglandigimizda bir ip verir, baska bir zaman baglandigimizda baska ip verir. Sabit ip yaptigimiz zaman, mesela 192.168.100.4 senin olur. Ne kadar zaman gecerse gecsin, kac kez cikip girersek girelim degismez. Ama bu gercek ip degildir.

Elimizdeki ip'ler yetmedigi icin ipv6 cikiyor.

192.168.68.1 diye bir ip'ye baktigimda anlayacagim birkac sey var.
192 ve 168, buralari kapatmisim, 68'i de kapatmisim. Acik olan sadece sondaki '1' biti.
192.168.68.1/16 dedigimde /16 kismi, alt ag oluyor yani subnet.

ip a   // dedikten sonra "inet" satirinda
buralarda "brd" diye gecen broadcast adresi oluyor.
ip'ler 32 bit'ten olusuyor.
Mesela 10.47.131.23/16 yi ikilik tabanda yazalim

00001010.00010111.01000011.00010111
11111111.11111111.00000000.00000000
AND
00001010.00010111.00000....  // bu kisim subnet adresimi belirliyor.
10.47.0.0


192.168.0.0 benim networkum
bunu iki alt dala bolecegim
192.168.0.0/16
Ben networku kucultmek istiyorum.
Cunku bazi durumlarda ag, kullanissiz olabiliyor.

Subnet'i 24 yapacagiz.
192.168. dan sonra bir sayi vermem lazim mesela
192.168.1.0/24 olsun, bilgisayar muhendisligi agi olsun
Bir de
192.168.2.0/24   de Egitim bolumu agi olsun.
Eger bu paket 192.168.2.    bu sekilde basliyorsa direk egitim bolumune gidiyor.
Daha kontrol edilebilir daha mantikli sayilara indirgemis oluyoruz.
Benim bu Bilgisayar Muhendisligi Agimi 2'ye bolecek olsam
/25'e cekerim.
192.168.128.  /25  // devami ve
192.168.0.  /25     // devami seklinde ikiye boler, boylece sistem, 192.168.  'dan sonraki ilk bite bakarak dogrudan ayirma yapar.

192.169.5.0/24

192.169.5.1  -> best practice olarak gateway adresi olarak verilir.
Switch'e soracak diyecek ki Twitter'in ip'si sende var mi diye soracak.
Switch diyecek ki bende yok. Sonrasi var.........

31/07/2019

TCP/ip
Bilgisayarimiza ip verme.

Network yapilandirmasini konsol uzerinden yapacagimiz mekan,
/etc/network/interfaces oluyor.
https://wiki.debian.org/NetworkConfiguration

Normalde hepimiz DHCP kullaniyoruz.

Mac adresleri, donanimin ustune yaziliyor, ama tamamen guvenli degil. Bir baskasi, bizim mac adresimizi alip, kendi mac adresiymis gibi kullanabiliyor.

Bize hangi ip'yi kullanacagimizi, DHCP server soyluyor.

DHCP uzerinde networkler tanimlanir, kendi ip havuzundan bir ip'yi bize tanimlar.

IP atamayi manuel olarak yapmak istedigimizde, atamayi dusundugumuz ip'ye once bir ping atariz ki, agda bulunup bulunmadigini anlayalim.

Netmask nedir? Cihaz, hangi agda oldugumuzu biliyor.

Gateway nedir? Bizim ag ile gorusecegimiz zaman, cikis yaptigimiz yer.

DNS ne yapar?

Routing Table var.

Route, yonlendirme.

Belirli tanimlar var.

Adres nedir? Bilgisayarimin id'si.
Gateway, benim networkten cikis???
Netmask, cihazin hangi networkte oldugunu tespit etmeme yarar.
DNS,
DHCP server bana neler verir? Mesela ben bir client'im, DHCP server'dan ip istedim. IP verir, netmask verir, ...

DHCP server, DHCP discover mesaji gonderir, broadcast(yayin)
DHCP server, aga yayin yapar.

Eger bir networkte firewall yoksa veya ayarlar yapili degilse, broadcast yayiniyla agi cokertebilirim.
Firewall'da ayar yoksa DHCP server gibi broadcast yapip client'leri kendi uzerimizden internete cikarip, verileri alabiliriz.

Firewall ne? Guvenlik duvari. Mesela ag kartimin 443 kartini kapat diyorum, oradan kimse istek atamiyor. Sunucu kurduktan sonra tum portlari kapatip, sadece hizmet verdigimiz portu acmamiz, guvenlik icin onemli bir onlemdir.

Virtual Machine'de NAT veya Bridged Adapter'e gore ip durumlari var.


SSH

ssh userName@ip

Network islerinde soketler onemli.
mesela ssh'a 22. porttan baglaniyorum, bu bir soket.
Whatsapp'tan goruntulu gorusuyoruz, bu da bir soket.
Ama ne soket? TCP/IP soket
Linux'ta ekstra, UNIX file socket var.
Temel amacimiz haberlesmek, iletisim kurmak. Bunu da network agda TCP/IP ile sagliyoruz.
UNIX file socket'ler, networkten degil de, kernel basinda haberlesme sagliyorlar.
UNIX file socket diyince network mekanizmasi degil,
tcp/ip socket  ve   unix file socket farki;
Mesela rsyslog icin konusalim, TCP/IP'de 443 nolu porttan rsyslog'a log attik, Remote Client Log'lari yolladik. Rsyslog benim serverim, ayni zamanda serverdaki loglari da kaydediyor. Bunlari rsyslog'a gonderen, o server sistemindeki araclar.
Bunu, Linux'larda rsyslog ile haberlesmek icin Unix file socket de kullaniliyor. TCP/IP meselesi bana hiz kaybettiriyor. Cunku araya network katmani girdiriyor. Kernel seviyesinde, servisler direk Rsyslog ile haberlesiyor. // rsyslog.sock
Bu hiz kaybetme orani, yaklasik %30'dur. Bu da ciddi bir hiz farki demek.
Bu tarz sistemlerin hem TCP/IP soketi, hem de Unix file soketi vardir.

TCP/IP 'nin avantaji,
TCP/IP ile uzaktaki bir makineyle haberlesme saglayabiliyorum, ama Unix File socket ile uzaktaki bir makineyle haberlesme saglayamiyorum.

14:30


11111111.11111111.11111111.11111111

Calisma yapmak istiyorum, birden fazla sanal makine actim, bunlarin hepsinin ayni networkte olmasini istiyorum, o zaman VirtualBox uzerinden sanal network olusturabiliriz. Host Network Manager uzerinden.

root oluyorum

dhclient kartIsmi   // agda bir dhcp server ariyor, bulabilirse otomatik olarak ip aliyor.
bulundugu networkte bir dhcp server varsa,

10'lu blokta otomatik

ifup  // dedigimde

Network ayarlari,
/etc/network/interfaces  // burada sadece localhost bolumu var

/*
auto lo
iface lo inet loopback

auto enp0s3
allow-hotplug enp0s3
iface enp0s3 inet dhcp

auto enp0s8
iface enp0s8 inet static
address 192.168.68.4    // address 192.168.68.4/29 yazarsam, alttaki netmask    //  satirini otomatik olarak algilar
netmask 255.255.255.248
gateway 192.0.2.254
*/

//   'li bolumu yazinca, DHCP'den ip'yi otomatik aliyor

enp0s3  // network interface'in adi bu

Linux'ta 1 sart haric asla yeniden baslatilmaz, servisler yeniden baslatilir.
Ne zaman yeniden baslatiriz? Sadece kernelde veya kernelin modullerinde degisiklik yaptigimiz zaman.

systemctl restart networking.service  // networking'i restart ettim,

faremiz hareket ettikce nasil ses kartindan ses cikarabiliriz?

apt install sl
apt install aptitude
apt moo

top 10 linux easter eggs

3 tane interface'imiz var,
birincisi localhost,
ikincisi NAT, ayni makine gibi davraniyor
ucuncusu ise, yine host makinem uzerinde olusturmus oldugum kendi networkum


/etc/sysconfig/network-scripts/ifcfg-  // CentOS'ta network ayari yapma yeri boyle bir yer
CentOS'ta ayri ayri dosyalarin icine her kartin kendi ayari yapiliyor.

delta kavrami, update ederken sadece guncelleme kadarlik kismi update ederiz.

LAMP

https://linuxconfig.org/how-to-install-a-lamp-server-on-debian-9-stretch-linux

ansible framework
ansible playbook for wordpress

Wordpress, PHP ile yazilmis, admin paneli de bulunabilen bir web sitesi.
Bunun icin ihtiyaclarim,
PHP -> Programlama dili. .php uzantisiyla biten kod dosyalarini, html'e parse ediyor, PHP icin web frameworku diyebiliriz. Dinamik sayfalar icin arkada bir fonksiyon kosturman gerekiyor.
MySQL  -> Veritabani olarak kullaniliyor
Apache  -> http (80/8080)
 veya
https (443)
uzerinden    http://ip
dedigimde, buraya istek gonderiyoruz, karsida ilgili portta bir soket bizi karsiliyor, ilgili yerde ne varsa onu bize gonderiyor.
Internet sayfasinda gezmek, ssh atmak, dosya indirmek, hepsi network tarafinda bir haberlesme.
Apache, php ile yazilmis wordpress dosyalarini, network uzerinden, gerekli portlardan TCP/IP soket aciyor.
SSH Server ise, 22 portundan TCP Socket sagliyor.
SSH'in sagladigi hizmet, bu ip uzerinden guvenli bir sekilde oturum acmak,
Apache'nin sundugu hizmet, bu ip uzerinden, gerekli dosyalari sunmak.

MySQL'in de portu var. 3306 gib bir port uzerinden TCP socket sagliyor, veritabanina sorgu atiyoruz.
MySQL ve apache ayni serverda oldugu icin aralarindaki baglantiyi Linux file haberlesmesiyle yapabiliriz.

Burada sistem admini MySQL kurabilir, gerekirse yedeklemesini yapabilir, veritabani olusturabilir,
Veritabani islerinde genelde DB Adminler is yapiyor.

Practice -> Bunlara yurtta bakabiliriz.

Jobs
Ctrl+Z
fg
bg(background)

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,











Yorumlar