26 Mart 2019 Salı

id komutu

Giriş
Belirtilen kullanıcı isminin uid değerini döner. User ID root için 0'dır.

Kullanıcı Başlangıç Numarası
Her işletim sistemi için farklıdır. Açıklaması şöyle
Many Unix systems start handing out UIDs to users at some particular number. Solaris will give the first general purpose user UID 100, on OpenBSD it's 1000, and on macOS it appears it's UID 501 that will be the UID for the first created interactive user...
Effective User ID
Şöyle yaparız.
#!/bin/bash
if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 
   exit 1
fi
Örnek
Şöyle yaparız.
# Root user only
if [[ "$EUID" != 0 ]]; then
  ...
fi

echo "do my ops"
Kullanım
Örnek
Şöyle yaparız.
$ id
uid=1000(attie) gid=1000(attie) groups=1000(attie),27(sudo),117(docker)
Örnek
Şöyle yaparız.
id username
Çıktı olarak tüm bilgileri alırız.
[root@my01 ~]# id sylvain
uid=1003(sylvain) gid=1005(sylvain) groups=1005(sylvain)
-n seçeneği
Açıklaması şöyle. Numara yerine isim gösterir.
That will query the account database (whether it's stored in /etc/passwd, LDAP, NIS+, a RDBMS...) for the first user name with that uid.
Örnek
Şöyle yaparız.
id -nu "$uid"
Örnek
Şöyle yaparız.
id -un -- myusername
-u seçeneği
Sadece uid bilgisini gösterir.
Örnek
Her kullanıcı kendi numarasını id komutu
id -u <username>
veya $UID ile görebilir.
echo $UID
Örneğin id komutu ile benim kullanıcı numaram 1000 olarak görünüyor.


24 Mart 2019 Pazar

FileSystem - Dosya Sistemi

Kernel Module
Açıklaması şöyle.
Basically, the initialization function of your filesystem driver module needs just to call a register_filesystem() function, and give it as a parameter a structure that includes a function pointer that identifies the function in your filesystem driver that will be used as the first step in identifying your filesystem type and mounting it. Nothing more happens at that stage.

When a filesystem is being mounted, and either the filesystem type is specified to match your driver, or filesystem type auto-detection is being performed, the kernel's Virtual FileSystem (VFS for short) layer will call that function. It basically says "Here's a pointer to a kernel-level representation of a standard Linux block device. Take a look at it, see if it's something you can handle, and then tell me what you can do with it."

At that point, your driver is supposed to read whatever it needs to verify it's the right driver for the filesystem, and then return a structure that includes pointers to further functions your driver can do with that particular filesystem. Or if the filesystem driver does not recognize the data on the disk, it is supposed to return an appropriate error result, and then VFS will either report a failure to userspace or - if filesystem type auto-detection is being performed - will ask another filesystem driver to try.

The other drivers in the kernel will provide the standard block device interface, so the filesystem driver won't have to implement hardware support. Basically, the filesystem driver can read and write disk blocks using standard kernel-level functions with the device pointer given to it.

The VFS layer expects the filesystem driver to make a number of standard functions available to the VFS layer; a few of these are mandatory in order for the VFS layer to do anything meaningful with the filesystem, others are optional and you can just return a NULL in place of a pointer to such an optional function.

19 Mart 2019 Salı

ubuntu-distro-info komutu

Giriş
Ubuntu desteğinin ne zaman biteceğini gösterir.

Örnek
Şöyle yaparız.
$ ubuntu-distro-info --all -yeol -f 
Ubuntu 14.04 LTS "Trusty Tahr" 29

pkill komutu

Giriş
kill "process id" ile çalışır. pkill ise uygulama ismi ile çalışır. Kullanması daha kolaydır. Eğer sadece process id'lerini bulmak istiyorsak pgrep komutu kullanılabilir.

pkill Alternatifi
Eğer sistemde pkill yoksa şöyle yaparız
kill $(pidof gnome-disks gnome-system-monitor)
Kullanım
Örnek

Şöyle yaparız.
pkill -9 mysql
Örnek
Şöyle yaparız. Böylece tek seferde birden fazla uygulamak öldürülebilir.
pkill 'process_name1|other_process|something_else'
Döndürülen Değer
Örnek
Açıklaması şöyle. pkill bir uygulamayı öldürürse true döner.
- If pkill compton succeeds, it means that there was one or several compton processes that have now been killed, or at least signalled, and exec compton -b will not be executed.

- If pkill compton fails (no process matched the name, or there was some internal error in pkill), the body of the if statement would call your exec compton -b, which would replace the shell process with that of compton -b.
Şöyle yaparız.
#!/bin/sh

if ! pkill compton; then
    exec compton -b
fi
-f seçeneği
Bir script'e gönderir

Örnek
Şöyle yaparız
pkill -USR1 -f my_fancy_script
-P seçeneği
-P ile belirtilen uygulama tarafından başlatılan (process group) tüm uygulamaları sonlandırılır.

Örnek
Şöyle yaparız. 1500 numaralı uygulamanın başlattığı ve ismi sleep olan uygulamalar sonlandırılıyor.
pkill -P 1500 sleep

17 Mart 2019 Pazar

fg komutu

Giriş
Arka plandaki (background) bir işi ön plana (foreground) getirir.  
- İşi arka plana atmak için Ctrl +Z kullanılır
- Arka plandaki işleri görmek için jobs komutu kullanılır. 
- Arka plandaki işi indeks numarası ile öldürmek için kill komutu kullanılabilir.

Örnek
Bir soru ve cevap şöyle. Burada uygulama terminalde başlatılıyor. Penceresi açıldıktan sonra Ctrl + Z ile arka plana gönderiliyor. Bu durumda artık çarpıya basarak kapatılamıyor. Kapatabilmek için önce fg komutuyla tekrar ön plana getirilmesi lazım
Q: I opened imagemagick through the terminal with $ display filename.jpg

Once it opened, the terminal was in use (?) as in no more prompt, just blank space where I could type anything like when you write to a file with 'cat'. I used CTRL + Z to get back to the prompt and the image stayed open in imagemagick. Now I can't close it - clicking the red X on the window doesn't do anything. How do I close this window/program?

A : type fg in the terminal to bring the stopped job back to the foreground. Then the red X should work again.

fg İle Kullanılacak Sayıyı Bulmak
Açıklaması şöyle.
When you send a process to the background, whether by using ctrl-z or by & at the end of the command, you get an output in the following format: [index] process-id. If you send multiple processes to the background, the index will keep incrementing every time.
Şöyle yaparız
$ sleep 100 &
[1] 41608
$ sleep 101 &
[2] 41609
$ sleep 102 &
[3] 41610
$ sleep 103 &
[4] 41611
$ sleep 104 &
[5] 41612
$ sleep 105 &
[6] 41613
$ sleep 106 &
[7] 41614
jobs Komutu
Örnek
Şöyle yaparız.
$ sleep 123 
[1] 26103
$ jobs
[1]+  Running                 sleep 123 &
$ fg 1
sleep 123
kill Komutu İle İşi Öldürmek
Açıklaması şöyle.
If it is your one and only background job you can kill it with kill %1. If not sure you can list all your background jobs with jobs and use kill %<n> where you replace n by the number of your ping job.
Diğer Örnekler
Örnek
Şöyle yaparız.
fg %2
Örnek
Ctrl + Z ile iş durdurulur. Daha sonra şöyle yaparız.
fg ; echo "Finished successfully!"

13 Mart 2019 Çarşamba

/etc/passwd dosyası

Giriş
Linux'ta kullanıcı ile ilgili bir çok bilgi /etc/passwd dosyasında bulunuyor. Bu dosyada 7 tane alan var.

Örnek
Bir satır şuna benzer.
username:x:1000:1000:your real name,,,:/home/username:/bin/bash
Örnek
Şuna benzer.
tom:x:1000:1000:Work:/home/tom:/bin/bash
Bu Dosyayı Elle Değiştirmek
Dosyayı hiç bir zaman elle değiştirmemek gerekir. Her bir alan için bir komut kullanılmalı.Komutlar usermod, passwd, chsh olabilir.

Bu Dosyayı Bir Çok Uygulama Okur
Açıklaması şöyle.
The password file is used every time a user logs in to a UNIX system and every time someone executes an ls -l command.
Açıklaması şöyle.
The file-system directly associates the numerical UID (User ID) and GID (Group ID) values with the file, not the user name and group name (which are strings). So the ls -l command (and any other command that displays the user and group owner of a file) need to get the user and group names from somewhere. The /etc/passwd file is one such source (probably the original and most common source).
İlginç Satırlar
Bazen dosyanında sonunda şöyle satırlar olabilir. Username +, diğer sütunlar ise boştur
+::::::
Bu satır NIS kullanıcılarının login olması içindir. Açıklaması şöyle. NIS (Network Information Service) LDAP'ten önce kullanılırdı.
It really seems to be NIS specific, because since I removed the line I cannot login (via NIS)
Sütun Açıklamaları
1. Hesap Adı - Login Name
usermode -l seçeneği ile değiştirilir. Kullanıcı adı değişince home dizini otomatik olarak değişmez.

Kullanıcı yaratmak için useradd komutuna bakınız. Aynı isimli iki kullanıcı olmasa iyi olur, ancak eğer varsa bile Linux User ID ile sahipliği takip ettiği için sorun olmaz.

2. Şifre
Şifre değiştirmek için passwd komutuna bakınız. Şifreler /etc/shadow dosyasında tutuluyor

Eğer şifre * ise kullanıcı login'i kullanarak sisteme giriş yapamaz.
auditor:*:11:0:Audit Activity Owner:/auditor:/bin/sh
rlogin ile giriş yapabilir.
If the encrypted password is set to an asterisk (*), the user will be unable to login using login(1), but may still login using rlogin(1), run existing processes and initiate new ones through rsh(1), cron(8), at(1), or mail filters, etc. Trying to lock an account by simply changing the shell field yields the same result and additionally allows the use of su(1).
3. User ID
User ID root için 0'dır. Yani aslında kullanıcı isminin root olmasının bir önemi yok.  id komutu yazısına taşıdım.

4. Primary Group ID
Her kullanıcının ana bir grubu vardır. Bu alan ana grup numarasını belirtir. Kullanıcının üyesi olduğu diğer grup bilgileri /etc/group dosyasında saklanır. Kullanıcının üyesi olduğu tüm grupları şöyle görebiliriz.
$ groups myuser
5. Kullanıcı Adı
Ekranda gösterilen isimdir. Genellikle kullanıcının tam adıdır. Gerçek bir satır şöyledir.
charlie:x:1003:1003:Charlie Haddock:/home/charlie:/bin/bash

6. Kullanıcı Home Dizini
usermod -d seçeneği ile değiştirilir.

7. Shell
Çoğu kullanıcı için kabuk bash'tir. bash için yol şöyledir.
/bin/bash
bash'in yolu şöyle değildir.
/usr/bin/bash
1. Kullanıcının kabuğunu öğrenmek için şöyle yaparız.
echo $SHELL 
/bin/bash
2. Shell değiştirme
Örnek
chsh komutu yazısına taşıdım

Eğer kullanıcı bir daha login olmasın istersek şöyle yaparız.
sudo chsh -s /bin/false Bob
Bu tür kullanıcılar sistem servisleri için kullanılabilir. Açıklaması şöyle
Actually, false is not a shell, but a command that does nothing and then also ends with a status code that signals an error. The result is simple. The user logs in and immediately sees the login prompt again.
Bir başka yöntem şöyle. Yani shell olarak /sbin/nologin kullanılıyor.
... it's a good idea to disable root login, e.g. by setting the root user's shell to /sbin/nologin instead of /bin/bash, and to use a non-root user with sudo rights.
Örnek
Eğer root için shell atanmasaydı yani şöyle olsaydı sudo komutu işe yaramazdı
root:x:0:0:root:/root:/usr/sbin/nologin


12 Mart 2019 Salı

bash Here String- Raw String

Giriş
Here Document ile kardeştir.

Temporary File Kullanır
Açıklaması şöyle.
Bash, ksh and zsh have a convenient syntax to pass a string as input via a temporary file. Note that they always append a newline to the string (even if there's already one).
Söz Dizimi
Açıklaması şöyle. Here String <<< karakteri ile başlar.
The <<< starts a “here string”: The string is expanded and fed to the program’s stdin. 
Here String'e hiçbir müdahale olmaz. Açıklaması şöyle
Bash no longer splits the expansion of here-strings, as the documentation has always said.
Örnek
Şöyle yaparız
md5sum <<< 'ddd'
Veya Here String kullanmak istemezsek şöyle yaparız. Here String ile echo + pipe aynı şeydir.
echo ddd | md5sum

Örnek - komut çıktısı
Şöyle yaparız.
#!/bin/bash
while read l
do
  echo $l
  echo "next one"
done <<< $(ps aux)
Örnek - değişken
Şöyle yaparız
cook <<<"$the_recipe"