27 Şubat 2020 Perşembe

ssmtp komutu

Giriş
Komut satırından e-posta göndermek içindir. Konfigürasyon dosyası burada.
/etc/ssmtp/ssmtp.conf
Örnek
Şöyle yaparız
ssmtp receiver_mail@gmail.com < msg.txt

23 Şubat 2020 Pazar

Message Of The Day

Giriş
Açıklaması şöyle.
In general, the motd is the daily message from you the administrator to users as they log on.
Mesaj /etc/motd dosyasına yazılır. Açıklaması şöyle.
Place the warning in your motd file, conventionally /etc/motd.
Örnek
Şöyle yaparız.
echo "Server will be going down at 11:00pm UTC, March 1st, for updates." | 
    sudo tee -a /etc/motd


20 Şubat 2020 Perşembe

/dev/input/mouse Özel Dizini

Örnek
Fare hareketlerini görmek için şöyle yaparız.
cat /dev/input/mouse0 > /dev/fb0

X11 Window System

X11 Pencere Sistemi Nedir?
Grafik arayüz altyapısıdır. Basitçe iki kısımdan oluşur
1. Display Server
2. Xlib kütüphanesi

Display Server Nedir
Açıklaması şöyle. X11 ağ üzerinden de çalışmak üzere tasarlandığı için istemci-sunucu yapısındadır. Örneğin bir başka bilgisayarda çalışan tarayıcının görüntüsünü kendi bilgisayarımda görebilir. Window terminoloji ile konuşursak Remote Desktep (Uzak Masaüstü) açmış gibi olurum. Farklı olarak karşı bilgisayardaki tüm masaüstü yerine sadece bir uygulamaya erişimin olur. 

Bu yapı yüzünden X11 bir sunucuya ihtiyaç duyar.
A display server or window server is a program whose primary task is to coordinate the input and output of its clients to and from the rest of the operating system, the hardware, and each other. The display server communicates with its clients over the display server protocol, a communications protocol, which can be network-transparent or simply network-capable. For instance Xorg and Wayland are display server communications protocols.
Şeklen şöyle

Display Server Olmak Zorunda mı ?
Eğer sadece yerel bilgisayarda bir şey yapmak istiyorsam, gerekli değil. Açıklaması şöyle
You can display graphics using the Linux frame-buffer interface without X11 or Wayland at all.

The fbida package includes the fbi image viewer, which can run directly on the virtual console. You can't get much more light-weight than that.
DISPLAY Ortam Değişkeni
Açıklaması şöyle
The remote server knows where it has to redirect the X network traffic via the definition of the DISPLAY environment variable which generally points to an X Display server located on your local computer.

The value of the display environment variable is:

hostname:D.S
where:

hostname is the name of the computer where the X server runs. An omitted hostname means the localhost.

D is a sequence number (usually 0). It can be varied if there are multiple displays connected to one computer.

S is the screen number. A display can actually have multiple screens. Usually, there's only one screen though where 0 is the default.
Örnek
Şöyle yaparız. Yerel makinedeki ekranın ne kadar süredir kullanılmadığını gösterir.
DISPLAY=":0" xprintidle
Örnek
Şöyle yaparız.
$xset -display :0 q
...
Monitor is Off
X.Org Nedir
Açıklaması şöyle. Yani X11 pencerece sistemini Linux üzerinde gerçekleştirir.
Most Linux distribution uses X.Org Server which is the free and open-source implementation of the display server for the X Window System (X11) stewarded by the X.Org Foundation.
İsmi Neden X11
Açıklaması şöyle. X protokolünün geliştirilmesine 1984 yılında başlandı. 1987 yılında ise 11. sürümü yayınlandı. İsmi de X11 olarak kaldı.
The X Window System, X11 (X version 11) is a windowing system for bitmap displays, common on Unix-like operating systems, X provides the basic framework for a GUI environment: drawing and moving windows on the display device and interacting with a mouse and keyboard. X does not mandate the user interface, this is handled by individual programs. As such, the visual styling of X-based environments varies greatly; different programs may present radically different interfaces. X originated at the Project Athena at Massachusetts Institute of Technology (MIT) in 1984. The X protocol has been at version 11 (hence "X11") since September 1987.
X11 Script Dizini
X11 scriptleri /etc/X11 dizininde bulunur. X11 yerine ileriki zamanlarda Wayland kullanılacak.
Konuyla ilgili startx komutu yazısına bakabilirsiniz.

Ayrıca X11 İstemcisi yazısına da bakabilirsiniz

Mimari
Mimarisel olarak şöyle.
┌───────────────────────────────────────────────┐
│                       User                    │
│     ┌─────────────────────────────────────────┤
│     │             Application                 │
│     │            ┌──────────┬─────┬─────┬─────┤
│     │            │      ... │ SDL │ GTK │ SDL │
│     │            ├──────────┴─────┴─────┴─────┤
│     │            │            xLib            │
│     │            ├────────────────────────────┤
├─────┴───┬────────┴──┐         X11             │
│   Gnu   │ Libraries │        Server           │
│   Tools │           │                         │
├─────────┘           │                         │ 
├─────────────────────┤                         │
│   Linux (kernel)    │                         │
├─────────────────────┴─────────────────────────┤
│                    Hardware                   │
└───────────────────────────────────────────────┘
X11 User Space' te Çalışır
Açıklaması şöyle.
This runs in user-land (outside of the kernel): it is just another process, with some privileges. The kernel does not get involved, except to give access to the hardware. And providing inter-process communication, so that other processes can talk with the X11 server.
Forwarding
X11 uzaktaki makineye bitmap değil sadece çizim talimatlarını gönderir. Açıklaması şöyle.
The X11 protocol was never meant to handle graphically (in terms of bitmaps/textures) intensive operations. Back in the day when X11 was first designed computer graphics were a lot simpler than they are today.

Basically X11 doesn't send the screen to your computer, but it sends the display-instructions so the X-server on your local computer can re-create the screen on your local system. And this needs to be done on each change/refresh of the display.
So your computer receives a stream of instructions like "draw line in this color from coordinates x,y to (xx,yy), draw rectangle W pixels wide, H pixels high with upper-left corner at (x,y), etc."
The local client isn't really aware what needs to be updated and the remote system has very little information on what the client actually needs, so basically the server must send a lot of redundant information that the client may or may not need.
This is very efficient if the display to be rendered consists of a limited number of simple graphical shapes and only a low refresh frequency (no animations and such) is needed. Which was the case back in the days when X11 was first developed.

But modern GUI's have a lot of eye-candy and much of that needs to be send from the remote system to your client in the form of bitmaps/textures/fonts which take quite a lot of bandwidth. And all sorts of eye-candy includes animated effects requiring frequent updates. And the displays keep getting bigger too, twice as wide/high is 4x the number of pixels.
Açıklaması şöyle.
The reason X11 forwarding is called "X11 forwarding" is because it transports the actual X protocol messages used by applications to render their windows on the "X server" (typically Xorg). Those messages are commands for creating/moving windows, drawing text and graphical primitives (lines/rectangles), drawing bitmaps, etc.

You could say it's conceptually the opposite of "full screen image" protocols such as VNC/RFB. I think it is somewhat comparable to Windows' RDP, which was also made for transporting GDI drawing commands.
X11 Verimsizliği
Ancak zamanla bu durum değişti. Açıklaması şöyle.
Over time this changed, programs started doing the rendering by themselves, and many of those instructions became just "here's a bitmap which I already rendered, put this on screen" – very fast locally, but very slow over the network due to X11 lacking any image compression.

This means programs built using modern toolkits are much slower over networked X11, even if it's something as basic as antialiased fonts.

(In contrast, RDP has adapted over time and includes various forms of image compression such as JPEG and even H.264; you can often notice the compression artifacts while the full image is loading.)


18 Şubat 2020 Salı

bash kodlama - exit built-in komutu

Giriş
Açıklaması şöyle.
exit exits the current shell process.
Örnek
Açıklaması şöyle.
Bash's exit status is the exit status of the last command executed in the script. If no commands are executed, the exit status is 0.
Şöyle yaparız.
my_ip=$(resolve_ip) || exit
master_ip=$(resolve_ip "$hostname") || exit
if [ "$my_ip" = "$master_ip" ]; ...
Örnek
Şöyle yaparız.
#!/bin/bash
if ...
then
  ...
else
  exit 1
fi

17 Şubat 2020 Pazartesi

ip route komutu - static route ekler

Giriş
ip komutu ile birlikte birçok object kullanılabilir. Bunlar şöyle
link, addr, addrlabel, route, rule, neigh, tunnel,  maddr, mroute, monitor.

Bu yazıda route anlatılıyor.

Seçeneksiz Kullanım
Örnek
Şöyle yaparız.
$ ip route
default via 10.2.0.1 dev enp9s0 proto dhcp metric 100 
default via 192.168.178.1 dev wlp6s0 proto dhcp metric 600 
10.2.0.0/24 dev enp9s0 proto kernel scope link src 10.2.0.2 metric 100 
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown 
192.168.178.0/24 dev wlp6s0 proto kernel scope link src 192.168.178.210 metric 600
default ile başlayan satırlar ağ kartlarını (network card) gösterir. Açıklaması şöyle.
If you have multiple WAN connections and both are set up correctly, the system will set up default routes for you. Those are a "catch-all" rule for everything that is sent.
Hangi kartın tercih edileceği sondaki sayı ile belirtiliyor. Açıklaması şöyle.
One of those connections (10.2.0.1) is a LAN connection, the other is wireless (192.168.178.1). If both are present, the number at the end decides which connection should be preferred, the lower number having higher importance.
Eğer her iki kart aynı önceliğe sahipse ilki terchi edilir. Açıklaması şöyle.
And if both default routes have the same metric, then the first one added will take priority. 
add seçeneği
Örnek
Açıklaması şöyle.
It's important to notice that the ip command will only block the return traffic not the incoming traffic. That means incoming traffic from that IP range may still consume some resources on your host by creating half-open TCP connections or sending packets to stateless services (usually UDP based).

For those reasons a firewall rule such as those created with ufw will likely work better for your particular use case than an ip route command.
Şöyle yaparız.
ip route add unreachable 78.128.113.0/24
del seçeneği
Şöyle yaparız.
ip route del 10.0.0.1 via 192.168.1.1 dev eth0
eth0'ın ip'si 192.168.1.1 olmasına rağmen niye bir daha yazılır bilmiyorum.

get seçeneği
Bir IP adresine nasıl ulaşacağımı öğrenmek için kullanılır. Kullanım şekli şöyledir.
ip route get <address>
Örnek
Kendi IP adresimi öğrenmek için şöyle yaparız.
ip route get 1|awk '{print$NF;1/0}'
eth0'daki IP adresim 192.168.0.121  olsun. awk olmasaydı çıktısı şöyle olurdu
$ ip route get 1
1.0.0.0 via 192.168.0.1 dev wlan0  src 192.168.1.22 
    cache 
Örnek
Şöyle yaparız.
ip route get 8.8.8.8  | awk ' /^[0-9]/ { print $7 }'  
Örnek
Şöyle yaparız.
$ ip route get 4.2.2.1
4.2.2.1 via 192.168.0.1 dev eth0  src 192.168.0.121 
    cache 
Örnek
Şöyle yaparız.
$ ip route get 192.168.0.116
192.168.0.116 dev eth0  src 192.168.0.121 
    cache 
Örnek
Eğer birden fazla arayüz kartım varsa ve 255.255.255.255 broadcast adresine mesaj göndermek istersem hangi arayüzünü kullanılacağını öğrenmek için şöyle yaparız.
$ ip route get 255.255.255.255
broadcast 255.255.255.255 dev eth0  src  192.168.0.121
    cache <local,brd> 
Bazı eski kodlarda, arayüzün broadcast adresi yerine 255.255.255.255 adresi kullanılıyor. Sorun çıkarsa bu yöntem işe yarıyor.

nmcli komutu - Network Manager İçin Komut Satırı

Giriş
Network Manager için komut satırıdır.  Bu komut biraz karışık.
komut + seçenek + object + object için command şeklinde bir söz dizilimi var

-a seçeneği
ask anlamına gelir. Şöyle yaparız.
nmcli -a con up [SSID]
1. general Object'i
Şöyle yaparız.
nmcli g
Çıktı olarak şuna benzer bir şey alırız.
DURUM  BAĞLANTI  WIFI-HW  KABLOSUZ  WWAN-HW  WWAN  
bağlandı    tam                 etkin            etkin                etkin                 etkin 
2. networking Object'i
Örnek
Wifi kartını kapatmak için şöyle yaparız
nmcli networking off
Örnek
Bağlantı durumunu öğrenmek için şöyle yaparız
  nmcli networking connectivity
Açıklaması şöyle
connectivity [check]
  Get network connectivity state. The optional check argument tells NetworkManager to
  re-check the connectivity, else the most recent known connectivity state is displayed
  without re-checking.

Possible states are:

  none
    the host is not connected to any network.

  portal
    the host is behind a captive portal and cannot reach the full Internet.

  limited
    the host is connected to a network, but it has no access to the Internet.

  full
    the host is connected to a network and has full access to the Internet.

  unknown
    the connectivity status cannot be found out.
3. radio Object'i
Örnek ver

4. connection Object'i
Network kartlarını (NIC) yönetmek için kullanılır. NIC'leri listelemek için şöyle yaparız.
nmcli con
Çıktı olarak şuna benzer bir şey alırız.
İSİM                           Kullanıcı Kimliği                                        TİP                     AYGIT 
AIRTIES_RT-204      48103e7e-726f-4ac8-85b3-20d3d521fc79  802-11-wireless    --    
...
delete komutu
Bir NIC'i silmek için şöyle yaparız
nmcli con delete eth0
down komutu
Örnek
Şöyle yaparız.
nmcli con up id wifiman
modify komutu
Şöyle yaparız.
nmcli connection modify {networkwifiname} connection.autoconnect-priority 10
up komutu
Örnek
Şöyle yaparız.
nmcli con down id wifiman
Örnek
Şöyle yaparız.
nmcli -a con up [SSID]
5. device Object'i
Şöyle yaparız.
nmcli d
Çıktı olarak şuna benzer bir şey alırız.
AYGIT   TİP  DURUM  BAĞLANTI 
wlan0      wifi  bağlandı    --    
...
6. agent Object'i
Örnek ver

7. monitor Object'i
Örnek ver

less komutu

Giriş
more komutunun daha gelişmiş halidir. Açıklaması şöyle.
more is the oldest, less is an improvement and most is an improvement on that.
Kısayollar
Açıklaması şöyle
Navigate:
j: go one line down
k: go one line up
z: go one page down
w: go one page up
g: go to the top
G: go to the bottom

You can also search in the documentation:
/: search from the cursor downwards
?: search from the cursor upwards
n: go to the next match
N: go to the previous match

Karşılaştırma
Açıklaması şöyle.
Short comparison:

more: forward navigation and limited backward navigation.

less: both forward and backward navigation and also has search options. You can go to the beginning and the end of a file instantly. Plus you can switch to an editor (like open the file in vi or vim). It is noticeably quicker than editor for when the file is large.

most: has all the features of more and less but you can also open multiple files, close 1 file at a time when you have multiple files open, allows locking and scrolling of the open windows and allows for splitting of open windows.
Bellek Kullanımı
Çok az bellek kullandığı için büyük dosyaları görmek için kullanılabilir. Açıklaması şöyle.
GNU less only uses a default of 64k of buffer space when viewing an arbitrarily large file.
Sayfalama
Açıklaması şöyle.
The output is paged through less by default, and long lines are "truncated" to screen
width. The hidden part can be viewed by using the left-arrow and right-arrow keys. Paging
can be disabled; see the --no-pager option and the "Environment" section below.
-F seçeneği
Açıklaması şöyle.
Exit if the entire file can be displayed on the first screen (F)
Şöyle yaparız
git config --global core.pager 'less -FRSX'
-R seçeneği
Açıklaması şöyle.
Output the raw control characters for terminal formatting (R)
-S seçeneği
Açıklaması şöyle.
Chop long lines (S)
-X seçeneği
Açıklaması şöyle.
Don't send the init/de-init strings to the terminal - avoids clearing the screen on exit (X)
Tuşlar
less kullanırken bazı tuşlar da işe yarar.
1. Q Tuşu
less uygulmasından çıkış sağlar. Açıklaması şöyle.
 q or Q or :q or :Q or ZZ
          Exits less.





bash kodlama $! gömülü değişkeni - Arka Planda Çalıştırdığımız Son İşin Numarasını Verir.

Giriş
$! değişkeni arka planda çalıştırdığımız son işin numarasını verir. Arka planda çalıştırmak için komut& şeklinde kullanmak gerekir.

Örnek
Şöyle yaparız.
./called.sh &
called_pid=$!

# Later
kill $called_pid
Örnek
Elimizde şöyle bir kod olsun.
$(sleep 5) &
echo $!
Bu kod arka planda çalıştırılan işin numarasını dönmez. Açıklaması şöyle.
runs a shell which runs sleep. The pid given by $! is the shell’s.
Düzeltmek için şöyle yaparız.
sleep 5 &echo $!