30 Eylül 2020 Çarşamba

taskset komutu - Uygulamanın Hngi İşlemciye Bağlanacağını Belirtir

Giriş
Komut satırından uygulama başlatılırken, hangi işlemciye bağlanmak istendiği belirtilir. Açıklaması şöyle
taskset komutu bir uygulamayı istenilen çekirdek yada çekirdekler üzerinde koşulmasını sağlayan komuttur.
Kullanım şekli şöyle
taskset [options] mask command [arg]...
taskset [options] -p [mask] pid
Örnek
Açıklaması şöyle
The below command will launch Google Chrome browser in CPU 1 & 2 (or 0 and 1). The mask is 0×00000003 and command is “google-chrome”.
Şöyle yaparız.
taskset 0×00000003 google-chrome
-c seçeneği
Bitmask kullanmak yerine CPU listesini verir.
Örnek
Şöyle yaparız
taskset -c 0 ffmpeg ...
Örnek
Şöyle yaparız
taskset -c 1 java -cp demo-all.jar main.TestLoop

/etc/services Dosyası - Port Numaralarına İsim Verir

Giriş
Açıklaması şöyle.
The canonical list of services is maintained by the IANA, but you can add local definitions; you might even see a “# Local services” comment at the end of your /etc/services file already.

Örnek
Şöyle yaparız
my-service-name    1234/tcp
Açıklaması şöyle.
Once that’s done, you’ll be able to write “0.0.0.0:my-service-name” instead of “0.0.0.0:1234”.
ssh
Örnek
Şöyle yaparız.
$ grep ssh /etc/services  
ssh             22/tcp         # SSH Remote Login Protocol 
ssh             22/udp

$ grep http /etc/services  
http            80/tcp          www             # WorldWideWeb HTTP            
http            80/udp                          # HyperText Transfer Protocol

28 Eylül 2020 Pazartesi

getfacl komutu

Giriş
ls komutu ile bakınca "+" karakteri görüyorsak özel izinler atanmış anlamına gelir. Açıklaması şöyle
The + indicates that the file has an Access Control List (ACL) with additional permissions.

getfacl {dir/file} to get more info on what is set

setfacl -b {dir/file} to remove ACL.
Örnek
Şöyle görürüz
(directory)rwxr-x---+

Ansible

Kurulum
Şöyle yaparız
sudo apt install ansible
Master/Worker Kurulumu
Master'da ssh-keygen ile üretilen public key, worker bilgisayara kopyalanır

/etc/ansible/hosts Dosyası
Bilgisayar grupları bu dosyada tanımlanır

Örnek
workers isimli bir grup tanımlamak için şöyle yaparız
[workers]
10.24.0.1
10.24.0.2
Kullanmak için şöyle yaparız
-hosts: workers
  remote_user: root
Bağlantı Ayarları
Ansible normalde uzaktaki bilgisayara bağlanmak için ssh kullanır. Eğer kendi Linux sistemimizde bir şey çalıştıracaksak şöyle yaparız
If you are connecting to localhost you shouldn't even need to use ssh, just make sure ansible_connection=local is set in your inventory for your localhost entry
Bu durumda şöyle yaparız
[mylocalhost]
localhost ansible_connection=local
Eğer localhost yerine farklı bir isim kullanmak istersek bir örnek burada.

Windows İçin Bağlantı
Windows uzak bağlantı için winrm kullanır.

Örnek
Şöyle yaparız
[windows]
13.233.160.153
[windows:vars]
ansible_user=LocalUsername
ansible_password=Password
ansible_connection=winrm
ansible_winrm_transport=basic
ansible_winrm_server_cert_validation=ignore
Bir başka örnek şöyle. Burada port numarası da belirtiliyor.
[windows]
13.233.160.153

[windows:vars]
ansible_port=5985
ansible_connection=winrm
ansible_winrm_transport=basic
ansible_user=<<ansible_user>>
ansible_password=<<ansible_password>>

Playbook Nedir?
Yaml formatında yazılırlar. Açıklaması şöyle. Playbokk asenkron da çalışabilir.
So rather than chaining ad-hoc commands together, you can set up a Playbook to run multiple commands at once.
...
Ansible provides the Asynchronous feature to allow an operation to run asynchronously such that the status may be checked. This can prevent interruption from SSH timeouts for long running operations.
Playbook Çıktısı
Çıktı olarak şuna benzer bir şey alırız
PLAY RECAP ******************************************************************************
 : ok=2    changed=1    unreachable=0    failed=0
Açıklaması şöyle
Here changed=1 means, playbook made a change in worker nodes. If we run the playbook again, you would see this changed=0 . Which means there is no state change.
Modules
Module one small specific task içindir. Playbook module'leri çalıştırır

Değişkenler
Örnek
Şöyle yaparız
-hosts: databases
  remote_user: root
  vars:
    tablename: foo
    tableowner: someuser

  tasks:
    -name Rename table {{ tablename }} to bar
      postgresql_table
        table: {{ tablename }}
        rename: bar

    -name Set owner to someuser
      postgresql_table
        table: {{ tablename }}
        owner: someuser
Kubernetes
Bazı örnekler burada

Roles
Büyük bir playbook'un daha küçük parçalara bölünmüş hali gibi düşünülebilir. Yani roles içinde birden fazla playbook bulunur. Şöyle yaparız
ansible-galaxy init /etc/ansible/roles/apache --offline
Şeklen şöyle
defaults
  -- main.yml
files
handlers
  -- main.yml
meta
  -- main.yml -- Role ile ilgili açıklamalar
tasks
  -- main.yml
templates
tests
  -- inventory
  -- test.yml
vars
  -- main.yml
tasks/main.yml
Diğer dosyaları çağırmak için şöyle yaparız
- include_tasks: install-docker-registry.yml
  run_once: true
  when: internal_registry == "docker_registry"
ansible-playbook komutu
Örnek
Şöyle yaparız
ansible-playbook komutu runsetup.yml
Örnek
Şöyle yaparız
ansible-playbook komutu runsetup.yml --syntax-check
Module Kullanımları
"become:true" hedef bilgisayarda "root" olmak istediğimizi belirtir.

apt module
Şöyle yaparız.
tasks:
  - name: Install VLC Media Player
    apt:                            # the package manager
      name: vlc-bin
      state: latest
Açıklaması şöyle
To remove a package, we just have to use the same syntax as the installation playbook. But
state: absent
command module
Şöyle yaparız
---
  - name: "Check if User exists sample"
    hosts: localhost
    connection: local
    vars:
      users:
        - nginx
        - root
        - user4
        - user3

    tasks:
      - name: "check for user in /etc/passwd"
        command: getent passwd {{ item }}
        register: check_user
        ignore_errors: yes 
        loop: "{{ users }}"
        register: all_checks
      
      - name: "iterate over checks"
        debug:
          msg:
          - "{{ item.rc }}"
          - "{{ item.item }}"
        when:
          - item.rc == 0
        loop: "{{ all_checks.results }}"
copy module
Açıklaması şöyle
The copy module is often used in writing playbooks when we want to copy a file from a remote server to destination nodes.
Örnek
Şöyle yaparız
- name : Copy configuration file
  copy: src=/data/httpd.original dest=/etc/httpd/conf/httpd.conf
Örnek
Şöyle yaparız
ansible test-servers -m copy -a 'src=/home/knoldus/Personal/blogs/blog3.txt dest=/tmp' 
  -u ec2-user
ping module
workers grubundaki tüm bilgisayarlara ping atmak için şöyle yaparız
ansible workers -m ping
Çıktı olarak şunu alırız
 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
Örnek
Açıklaması şöyle
---
  - name: installvlc      # name of the playbook
    hosts: workers        # where we need to install
    become: true          # run as sudo user
shell module
Açıklaması şöyle
When we want to run UNIX commands then we use shell module
Örnek
Şöyle yaparız
ansible test-servers -m setup -u ec2-user
service module
Açıklaması şöyle
When we want to ensure the state of a service that is service is running we use the service module.
Örnek
Şöyle yaparız
ansible test-servers -m service -a 'name=httpd state=started' -become -u ec2-user
setup module
Açıklaması şöyle
The setup module is used when we want to see the information of all the hosts, their configuration, and detailed information.
Örnek
Şöyle yaparız
ansible test-servers -m shell -a 'ls -la' -u ec2-user
yum module
Örnek
Şöyle yaparız. Burada -become seçeneği -u seçeneğinden önce kullanılmalı
ansible test-servers -m yum -a 'name=httpd state=present' -become -u ec2-user
Örnek
Şöyle yaparız
- name : Install httpd
  yum: name=httpd state=latest

/var/log Dizini

Giriş
/var/log dizinindeki sistem logları bulunur. Açıklaması şöyle. sistem loglarını görmek için journalctl komutu da kullanılabilir.
Here, you’ll see filenames like syslog, messages, auth.log, secure, cron, kern.log, apache2, mysql and more.
The Linux Log Format
Açıklaması şöyle.
The format of these logs is customizable. For example, you can log additional information by specifying extra fields in log configuration files. By default, however, log file entries are in a format close to this:

Timestamp, Hostname, Application name, Priority, Message

While Hostname is the server in the system where the message originated, Application name refers to the name of the application that generated the event, and Priority denotes how urgent or severe an event is. 
Uygulama Dosyaları
Açıklaması şöyle.
User applications often store their logs in this directory, as well. Notable examples are Apache and MySQL. They store their application logs in the apache2 and mysql files, respectively. Some applications can write directly into the syslog file as well.
auth.log ve secure Dosyaları
Açıklaması şöyle.
auth.log or secure stores authentication logs, including all successful and failed login attempts.
Açıklaması şöyle.
The sudo command also creates log entries in auth.log. Any failed or successful commands executed via sudo are logged.
cron Dosyası
Açıklaması şöyle.
cron stores cron job-related messages, such as cron initiations and failures
kern Dosyası
Açıklaması şöyle.
kern is for kernel logs and related warning messages.
syslog ve messages Dosyaları
Açıklaması şöyle.
The syslog or messages file contains general messages that log activities across the entire system.
syslog Servisi yazısına bakabilirsiniz.

nl komutu

Giriş
Kullanmak için şöyle yaparız
wolf@linux:~$ ls -lh | nl
     1  total 24
     2  -rw-rw-r-- 1 wolf wolf  186 Sep  24 22:18 01.py
     3  -rw-rw-r-- 1 wolf wolf  585 Sep  24 22:21 02.py
     4  -rw-rw-r-- 1 wolf wolf  933 Sep  24 22:26 03.py
-v seçeneği
Normalde nl komutu saymaya 1 sayısından başlar. Başka bir sayıdan başlasın istersek bu seçeneği kullanırız.

Örnek
Şöyle yaparız
$ ls -lh | nl -v 0
   0  total 24
   1  -rw-rw-r-- 1 wolf wolf  186 Sep  24 22:18 01.py
   2  -rw-rw-r-- 1 wolf wolf  585 Sep  24 22:21 02.py
   3  -rw-rw-r-- 1 wolf wolf  933 Sep  24 22:26 03.py

27 Eylül 2020 Pazar

rename komutu

-n seçeneği
İkinci "_" karakterinden sonrasını kesmek için şöyle yaparız
rename -n 's/[^_]*[_][^_]*[_]//' *

25 Eylül 2020 Cuma

TTY

Giriş
TTY açmak için şöyle yaparız. Aslında Ctrl + Alt + F4 ve diğer F tuşları da farklı TTY'ler açar.
Open TTY with CTRL + ALT + F3.
Login by typing your username and then your password. Note, while typing your password, nothing will appear on the screen.
Komutu çalıştırıp tekrar masaüstüne dönmek için Alt + sağ ok'a basarız
Repeatedly press ALT + ⇒ (right arrow) until you return to your desktop ...

23 Eylül 2020 Çarşamba

nanosleep metodu

Giriş 
Bu metod bir POSIX çağrısı. C diline ait değil

Örnek
Şöyle yaparız
#include <time.h>
struct timespec ts;
ts.tv_sec = 3;
ts.tv_nsec = 0;
nanosleep(&ts, NULL);

16 Eylül 2020 Çarşamba

bash kodlama - : (No Effect) built-in komutu. Subprocess Açılmasını Engeller

Giriş
Açıklaması şöyle.
: [arguments]
          No effect; the command does nothing beyond  expanding  arguments
          and  performing any specified redirections.  A zero exit code is
          returned.
Yani true döner.  Bu komutun esas kullanıldığı yer bash içinde echo, touch gibi çağrılarda yaratılan subprocess'lerin çalışmasını engellemesi. Bu komut yerine direkt > "..." şeklinde de kullanabiliriz.

Örnek
Elimizde şöyle bir kod olsun. Bu komut her alt dizin altında 500 tane fileX isimlide dosya oluşturur. Ancak bu komut yavaştır
for dir in /xfs/*/; do seq 1 1000000 | xargs -n1 -I% bash -c 'touch '$dir/file%' ; done;
Daha hızlı olsun diye şöyle yaparız.
for dir in /xfs/*/; do
    for ((i=1; i <= 1000000; i++)); do
        : > "$dir/file$i"
    done
done
Açıklaması şöyle
touch is an external program that you are having to start 5,000,000,000 times. You are also running seq 5,000 times. Don't run either of them.
Ya da şöyle yaparız.
> "$dir/file$i"
Örnek - Dosya Truncate
Açıklaması şöyle.
: is a "do nothing command" that will exit with success and produce no output, so it's simply a short method to empty a file. In most shells, you could simply do >file.txt to get the same result. It also could be marginally faster than other methods such as echo >file.txt as echo could potentially be an external command.
Şöyle yaparız. Dosyayı truncate eder.
root$ :>file.txt
Örnek - for Koşulu
Şöyle yaparız
$ time for i in $(seq 1000); do :; done

real    0m0,007s
user    0m0,002s
sys     0m0,004s
$ time for i in $(seq 1000); do /bin/true; done

real    0m0,686s
user    0m0,462s
sys     0m0,217s
Örnek - Sonsuz Döngü
Sonsuz döngü kurmada kullanılır. Şöyle yaparız.
while :
do
  something
done
Açıklaması şöyle.
This is perhaps best known for use in a while statement (while :; do break; done)