29 Mayıs 2020 Cuma

grep Matching Control - Eşleşmenin Nasıl Olacağını Kontrol Eder

Giriş
Bu seçenekler eşleşmenin nasıl olacağını kontrol eder.

-e seçeneği
Birden fazla örüntü belirtilebilir.

Örnek
Şöyle yaparız.
root@grep -e tire_id -e appID /path/to/*/vehicle/production.json
/path/to/000001_000002/vehicle/production.json:    "tire_id": "1305436516186552",
/path/to/000001_000002/vehicle/production.json:        "appID": "1164562920689523",
/path/to/000001_000079/vehicle/production.json:    "tire_id": "1815123428733289",
/path/to/000001_000079/vehicle/production.json:        "appID": "18412365908966538",
/path/to/000001_000088/vehicle/production.json:    "tire_id": "138477888324",
-f FILE seçeneği
Her satırda aranacak pattern olan dosya belirtilir.

Örnek ver

-i, --ignore-case seçeneği
Örnek
Şöyle yaparız. Büyük küçük harf farkı gözetmeden tüm "sahil" kelimelerini bulur
[root@localhost playground]# cat file1.log 
hello 
i am sahil 
i am software engineer 
Sahil is a software engineer
sahil is a software engineer
 
[root@localhost playground]# grep -i 'sahil' file1.log 
i am sahil 
Sahil is a software engineer
sahil is a software engineer
[root@localhost playground]# 

-v seçeneği 
invert match anlamına gelir.  Aranan şeye uymayanları gösterir.
Örnek
Elimizde şöyle iki dosya olsun.
$ echo -e "a\nb\nc\nd" > list1
$ echo -e "c\nd\ne\nf" > list2
list1'de olup list2'de olmayanları görmek için şöyle yaparız. Burada komuta parametre olarak önce list2 geçiliyor.
$ grep -vxFf list2 list1
a
b

-w, --word-regexp seçeneği

Eşleşmeyi sadece kelimeler için yapar. Açıklaması şöyle
Select only those lines containing matches that form whole words. The test is that the matching substring must either be at the beginning of the line, or preceded by a non-word constituent character.
Örnek
Şöyle yaparız. Burada -E ile bir regex verilmiş ancak sadece kelimelere uygulanıyor
$ echo '1341 5415 fdad' |  grep -wE "[1-9]{1,5}" -o
1341
5415
Yani aslında şununla aynı şey. regex'in başına ve sonuna \b getirilmesi ile gibi
echo '1341 5415 fdad' | grep -E -o '\b[1-9]{1,5}\b'
Örnek
Şöyle yaparız.
if grep -wq -- "$user" "$file1" && grep -wq -- "$user" "$file2" ; then
   echo "string avail in both files"
elif grep -wq -- "$user" "$file1" "$file2"; then
   echo "string avail in only one file"
fi

-x, --line-regexp seçeneği

Örnek ver

28 Mayıs 2020 Perşembe

iptables komutu

Firewall Kelimesi Nereden Geliyor
İmalat sanayinden geliyor. Örneğin uçaklarda kullanılan iki tip panel var. Bunlar bulkhead ve firewall. Açıklaması şöyle. Yazılım dünyasında da firewall aynı imalat sanayindeki gibi iki yapıyı birbirinden ayırmak için kullanılıyor.
A bulkhead is any kind of structural panel separating two spaces in a fuselage. Like a solid panel in the tail cone that has only small holes for cables to pass, or the panel that forms the end of the baggage area. Pretty much any solid lateral partition with a structural use. On a large aircraft, any structural partitions separating parts of the cabin, like the flight deck bulkhead, or terminating the pressure hull at each end, the "pressure bulkheads".

A firewall is a firebreak. It's a bulkhead that is fireproof to separate a "hot" area like an engine compartment from adjacent structure, so that if you have an engine fire, you'll have more time to try to land, or if at high altitude, say your prayers. To be a firewall, the material of the bulkhead has to be flame resistant, with a much higher melting point than aluminum.

On GA airplanes, the firewall is usually stainless steel, but can be galvanized steel (antiques and homebuilts), or even special flame proof coatings on a normal bulkhead (some composite homebuilts). On transport airplanes, a firewall will be stainless or titanium.
Demilitarized Zone - DMZ Bölgesi
Demilitarized Zone yazısına taşıdım

Intrusion Detection System 
Intrusion Detection System  (IDS) gibi sistemler iç ağa kurulur ve bu ağdaki tüm bilgisayarları zararlı yazılımlara karşı belli aralıkta tarar.

-L seçeneği - list
Şöyle yaparız.
iptables -L -n
Çıktı olarak şunu alırız. Input, Forward, Output başlıkları görülebilir.
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
...

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
...

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
...
Input başlığı şöyledir.
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       all  --  151.101.52.0/24      anywhere
REJECT     tcp  --  151.101.52.84        anywhere             ...
DROP       all  --  151.101.52.84        anywhere
DROP       all  --  151.101.52.84        anywhere
DROP       tcp  --  151.101.52.84        anywhere
ACCEPT     tcp  --  anywhere             anywhere             ...
tcpmss modülü
tcpmss yazısına taşıdım.

Shebang

Giriş
Açıklaması şöyle. Shebang satırı, betiğimizi yani script'imizi hangi uygulamanın çalıştıracağını belirtir.
Shebang commands are meant to be script engines that execute the content of your script; it might be bash, perl, or whatever, but the expectation is that it is called with the file name of a script to execute.
Bash İçin Shebang
set komutu ile kullanılan seçenekler aynı zamanda Shebang olarak ta kullanılabilir. Açıklaması şöyle
All of the single-character shell options documented in the description of the set builtin command, including -o, can be used as options when the shell is invoked. [...]

Örnek
Şöyle yaparız
#!/bin/bash -e
Bash Dışında Başka Uygulama Çalıştırmak
Örnek - python
Python için şöyle yaparız
#!/usr/bin/env python
Örnek - python3
Şöyle yaparız.
#!/usr/bin/python3
print('Hello world!')
Örnek - calc
Elimizde şöyle bir kod olsun. Bunu addone.calc olarak kaydedelim.
#!/usr/local/bin/calc -f
$1 + 1
Şöyle yaparız.
$ ./addone.calc PI
4.141592...
Aslında şuna çevrilir.
/usr/local/bin/calc -f ./addone.calc PI
Örnek - sh
Şöyle yaparız.
#!/bin/sh
veya şöyle yaparız.
#!/usr/bin/env sh
Açıklaması şöyle.
Setting to #!/bin/sh will go directly to that file /bin/sh.

Setting to #!/usr/bin/env sh will execute /usr/bin/env with an argument of sh. This will cause the script to be executed by sh in your PATH variable rather than explicitly with /bin/sh.
Shebang Kullanmak Zorunda Mıyız ?
Değiliz :) Shebang'e sahip olmayan shell script'leri halen çalıştırılabiliyor. Ancak örneğin dosya perl dosyası ise işe yaramaz.

Shebang Yoksa Bu Nasıl Oluyor?
Açıklaması şöyle. Yani eğer shebang yoksa kabuk yine de dosyayı okuyup çalıştırabilir. Ancak dosyanın shell dosyası olması lazım.
There are different ways to "execute" a script, that have subtle differences:

- run sh /path/to/script: The script needs no execute permissions! In fact you execute sh, which in turn reads and interprets the script. So the moment you may read it, you can not execute it, but tell the shell to read it and act upon it which is nearly the same thing as executing it.

- directly run /path/to/script after adding a #!/bin/sh header and giving execution privileges. In this case you execute the script itself, with the shebang header telling which shell to load

- run . /path/to/script: This tells your current shell to load the script and interpret it as if you were inputing its content into the shell prompt. Again no execution privileges are needed, as you don't execute the file, but read it.

You can make the differences visible with a script, that says just echo "$0". In the first case it will output the path to sh, in the second case the path to the script and in the third case the path to your current shell.
Benzer bir açıklama şöyle.
The parent shell, where you entered ./myscript.sh, first tried to execve it, which is where the shebang line would take effect if present. When this works, the parent is unaware of the difference between scripts and ELFs because the kernel takes care of it.

The execve failed, so an ancient unix compatibility feature, predating the existence of shebang lines, was activated. It guessed that a file which has execute permission but is not recognized as a valid executable file by the kernel must be a shell script.

Usually the parent shell guesses that the script is written for the the same shell (minimal Bourne-like shells run the script with /bin/sh, bash runs it as a bash subprocess), csh does some more complicated guessing based on the first character because it predates shebang too and it needed to coexist with Bourne shell).

You need a shebang line when you know these guesses will be wrong (for example with the shebang is #!/usr/bin/perl), or when you don't trust the guessing to work consistently, or when the script needs to be runnable by a parent process that is not a shell itself.

27 Mayıs 2020 Çarşamba

Master Boot Record - MBR - Bir Partition Table Tipi

MBR Nedir
Açıklaması şöyle. Yani MBR bir partition table tipi. Partition table bir diskin nasıl bölümlendiği hakkında bilgi verir. Klasik MBR ile bir diski 4 bölüme ayırabiliriz.
Those are partition table styles. A partition table is a data structure on a storage device (typically a HDD or SSD) that describes virtual partitioning of that device. By virtual I mean that it doesn't really change anything physically about the device, it's just a description of user's intent. It's operating system's job to read the partition table and respect it, exposing the disk as a collection of independent partitions rather than one large storage device.

There are many old partition table styles invented by various companies for their purposes, but the one that stood the test of time is usually called MBR nowadays. It shows its age, but was good enough for a very long time. It has two major limitations: first, it supports up to four partitions. This was worked around by inventing extended partition: a partition that takes a single partition slot, but holds unlimited number of inner partitions. The other limitation is impossible to work around: it's unable to address sectors over 232-1. It sounds like a lot, but we've already hit it: it's 2 TB for 512-byte sector disks or 16 TB for 4k sector disks. If your disk is larger than this, MBR will only let you partition up to that much space.
GPT Nedir
GPT yazısına taşıdım

MBR Nerededir
MBR /dev/sda diskinin ilk bir kaç byte'ına denk gelir. Şu komut ile MBR bozulabilir.
Tdd if=/dev/urandom of=/dev/sda conv=fsync status=progress
MBR İçinde Küçük Bir Filesystem Driver Bulunur
 Açıklaması şöyleBIOS bu driver'ı yükleyip diske erişim sağlandıktan sonra, geri kalan şeyleri system partition'dan yüklenebilir.
... the Master Boot Record is tiny, so all advanced bootloaders try to fit a minimal filesystem driver in there and load the rest of their components from the system partition.
Yani BIOS kontrolü MBR BootLoader'a devreder.

Extended Partition Nedir
Açıklaması şöyle. Eğer diski 4'ten fazla bölüme ayırmak istersek kullanılır.
An Extended Partition is an artifact of MBR 'legacy' disk partitioning, as the MBR system only allows a maximum of four (4) partitions. To have more than four partitions, an Extended Partition is used to hold multiple Logical Partitions.
Açıklaması şöyle.
An extended partition is a partition that can be further divided to create additional partitions.

Basically, the extended partition allows you to have more partitions on a physical drive than you could otherwise have.
Windows 9
Açıklaması şöyle. Windows 9 bunu MBR'yi kullanarak yapıyor.
Windows 9x can employ two kinds of disk drivers: native protected-mode drivers and compatibility-mode DOS drivers, and the former are used in preference to the latter whenever possible.


26 Mayıs 2020 Salı

cron servisi

Giriş
Açıklaması şöyle
cron runs tasks (system or user chosen) which need to be run at regular intervals.
Ayar Dosyaları
Şu dosyaları okur.
/etc/crontab,  /etc/cron.d/* ve /var/spool/cron/cronstabs/*
Her kullanıcının dosyası şöyledir.
cat -v /var/spool/cron/crontabs/{user}
Bu dosyaları düzenlemek için crontab komutu kullanılabilir.

Loglama
Açıklaması şöyle.
The running of jobs is already logged in the cron log in /var/cron/log (the path may differ between systems).
-p seçeneği
Açıklaması şöyle.
-p     Allows Cron to accept any user set crontables.
Açıklaması şöyle.
All crontab files have to be regular files or symlinks to regular files, they must not be executable or writable for anyone else but the owner. This requirement can be overridden by using the -p option on the crond command line.

23 Mayıs 2020 Cumartesi

ssh-keygen komutu - Public/Private Key Pair Üretir

Giriş
openssh komutlarından bir tanesi. Uzaktaki sunucuya birisinin şifresiz olarak ssh ile bağlanabilmesi için bu komutun çalıştırılması gerekir. Üretilen key pair, passphrase ile korunabilir.

Üretilen Dosyalar
Bu komutu çalıştırınca iki tane dosya üretilir. Üretilen dosyalar normalde "~/.ssh" dizinindedir. Yani home dizinimdedir.

1. id_rsa - private key
2. id_rsa.pub - public key. Pub uzantısının açıklaması şöyle
...asks for a file in which to store the private key. The public key is stored in a file with the same name but ''.pub'' appended.
Açıklaması şöyle.
The utility will prompt you to select a location for the keys that will be generated. By default, the keys will be stored in the ~/.ssh directory within your user's home directory. The private key will be called id_rsa and the associated public key will be called id_rsa.pub.
Başka Makineye Kopyalama
Not : Karşı makineye public key kopyalanır.
1. ssh-copy-id komutu kullanılır. Önce kendi makinemde anahtar dosyalarını üretmek için şöyle yaparız
ssh-keygen -t rsa -b 4096 -C "comment"
Daha sonra karşı makineye kopyalamak için şöyle yaparız
ssh-copy-id user@ip
2. ssh ile kopyalanır. Şöyle yaparız.
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >>
  ~/.ssh/authorized_keys"
3. ~/.ssh/authorized_keys dosyasını açar ve kopyala yapıştır ile id_rsa.pub dosyasının içini ekleriz.

Dosya Formatı
Bu dosyalar openssl'in kendi formatındadır. PEM formatında değildir. id_rsa.pub dosyasının içi şuna benzer.
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test
Örnek
Şöyle yaparız.
not-marco@rinzwind-desktop:~$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/not-marco/.ssh/id_rsa): 
Created directory '/home/not-marco/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/not-marco/.ssh/id_rsa.
Your public key has been saved in /home/not-marco/.ssh/id_rsa.pub.
The key fingerprint is:
b1:25:04:21:1a:38:73:38:3c:e9:e4:5b:81:e9:ac:0f not-marco@rinzwind-desktop
The key's randomart image is:
+--[ RSA 2048]----+
|.o= . oo.        |
|*B.+ . .         |
|*=o .   o .      |
| = .     =       |
|. o     S        |
|E.               |
| o               |
|  .              |
|                 |
+-----------------+
Örnek
Eğer dosya ismi vermek istersek şöyle yaparız. Normalde dosya ismi vermesek daha iyi.
ssh-keygen
Enter file in which to save the key: /home/user/ssh/keys/server1key
~/.ssh Dizini
Eğer Linux'u baştan kuracaksak bu dizinin yedeğini almak gerekir. Açıklaması şöyle
For outgoing SSH connections, backing up your key pair is enough. For convenience, you might just backup your ~/.ssh directory and restore it onto the new installation.
Bu dizinin Windows'taki karşılığı C:\Users\acelya\.ssh

-A seçeneği 
Örnek
Şöyle yaparız
ssh-keygen -A
-b seçeneği 
bit size anlamına gelir.
Örnek
Şöyle yaparız
ssh-keygen -b 4096

-C seçeneği 
Comment anlamına gelir.
Örnek
Şöyle yaparız
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f $PWD/id_rsa
-e seçeneği
Public key dosyasını okur ve RFC 4716 SSH Public Key File Formatında stdout'a gönderir.
Şöyle yaparız.
ssh-keygen -e -f openssh_key.pub
-f seçeneği
Çıktı olarak kullanılacak dosya ismini belirtir. Public key bu dosya ismine bir uzantı daha eklenerek oluşturulur. Eğer RSA kullanıyorsak .pub eklenir. 
Örnek
Şöyle yaparız
ssh-keygen -e -f key -m PEM > key.pem
Örnek
Şöyle yaparız
ssh-keygen -t rsa -N “” -f /home/ubuntu/.ssh/id_rsa
-l seçeneği
fingerprint değerini gösterir. Açıklaması şöyle.
ssh-keygen -l followed by inputting the correct private key's filename will output that key's fingerprint.
Örnek
Şöyle yaparız.
pi@raspberrypi:~$ ssh-keygen -l
Enter file in which the key is (/root/.ssh/id_rsa): /etc/ssh/ssh_host_ecdsa_key.pub
256 SHA256:0xg...[redacted]...rduY. root@pi (ECDSA)
Örnek
Şöyle yaparız.
ssh-keygen -l -f .ssh/id_rsa
-N seçeneği
new passphrase anlamına gelir.
Örnek
Şöyle yaparız
ssh-keygen -t rsa -N “” -f /home/ubuntu/.ssh/id_rsa
-R seçeneği
Açıklaması şöyle. ~/.ssh/known_hosts Dosyası yazısına bakabilirsiniz.
Removes all keys belonging to hostname from a known_hosts file.
Örnek
Şöyle yaparız
ssh-keygen -f "$HOME/.ssh/known_hosts" -R 127.0.0.1
Örnek
Şöyle yaparız
$ ssh-keygen -R somehost
# Host somehost found: line 1
/Users/me/.ssh/known_hosts updated.
Original contents retained as /Users/me/.ssh/known_hosts.old
-t  seçeneği
Kullanılacak şifreleme algoritmasını belirtir.
Örnek
Şöyle yaparız.
ssh-keygen -t rsa
Örnek
Şöyle yaparız
ssh-keygen -t dsa
-y seçeneği
private key dosyasını kullanarak tekrar public key dosyasını üretir.
Örnek
Şöyle yaparız
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
Örnek
Şöyle yaparız
ssh-keygen -y -f path/to/private/key
-Y seçeneği
Belirtilen dosyayı belirtilen public key dosyasını kullanarak imzalar.
Örnek
Şöyle yaparız
ssh-keygen -Y sign -n file -f $HOME/.ssh/id_rsa.pub <FILE-TO-SIGN>
Açıklaması şöyle
This signs the file specified in <FILE-TO-SIGN> using your SSH public key at the standard location $HOME/.ssh/id_rsa.pub . The signature ends up at <FILE-TO-SIGN>.sig by default,
Doğrulamak için "thesigner" isimli bir dosya gerekir. Bu dosyayı yaratmak şöyle yaparız
echo "thesigner $(cat id_rsa.pub)" > allowed_signers
Daha sonra şöyle yaparız
cat <FILE-TO-VERIFY> | ssh-keygen -Y verify -n file -f allowed_signers -s <SIGNATURE>
-I thesigner