6 Ekim 2019 Pazar

shutdown komutu

Giriş
Linux'ta shutdown komutu seçenekler ile kullanılıyor. Ubuntu'da seçenekleri hatırlamamak için poweroff ve reboot komutları var. Bu komutlar shutdown'ı çağırır.

shutdown komutu hiç bir seçenek vermezsek 1 dakika sonra bilgisayarı kapatır. Şöyle yaparız
sudo shutdown
Eğer belli bir saatte kapatmak istersek şöyle yaparız. But durumda 11:01 de bilgisayar kapanır
shutdown 11:00
Eğer 10 dakika sonra kapatmak istersek şöyle yaparız
sudo shutdown +10
Eğer hemen kapatmak istersek şöyle yaparız
sudo shutdown now
-c seçeneği
cancel anlamına gelir.
Örnek
Beklemekte olan shutdown işlemini iptal etmek için şöyle yaparız
shutdown -c
-h seçeneği - Halt ve poweroff
Böylece init scriptlerini de çalıştırarak sistemin elektriğini keser
Örnek
Şöyle yaparız.
shutdown -h now 
Örnek
1 dakika sonra kapatmak için şöyle yaparız. Bu komutu çalıştırınca artık root hariç kimse ssh ile login olamaz.
shutdown -h +1
-H seçeneği - Sadece Halt
Peki sadece Halt Nerede Kullanılır? Ben de hep bu soruyu merak ederdim. 

1. Örneğin bilgisayarı kapatmadan bir başka kernel'i yüklemek istersek halt yaparız.
2. Sanırım esas kullanımı şöyle. Günümüzdeki masaüstü Linux için anlamlı değil ancak daha eski ve daha büyük bilgisayarlarda elektriği birden kesmiyor
Some hardware (especially larger machines such as mainframes, let alone mini computers or super computers) having the machine shutdown creates power issues with the sudden loss of power being used (not a problem on the micros/PCs most of us use as they only use a few hundred/thousand watts) thus the power off is a unwanted feature. GNU/Linux isn't just a PC OS don't forget; so power off in all cases is unwanted
Benzer bir açıklama şöyle.
halt means flush buffers, unmount drives, close all processes in a graceful way. But not power off (though some systems may power off anyway). So the hardware is still provided with power.

After halt a hard power off (pressing the power button or unplugging the power supply) will not damage the system, because it is already halted in a graceful way.
Örnek
Şöyle yaparız.
sudo shutdown -H
-P seçeneği
Açıklaması şöyle.
Requests that the system be powered off after it has been brought down.
-r seçeneği
reboot anlamına gelir.
Örnek
Şöyle yaparız.
shutdown -r now
Örnek
10 dakika sonra reboot için şöyle yaparız.
$ sudo shutdown -r +10
Shutdown scheduled for Mon 2018-09-03 18:51:13 IDT, use 'shutdown -c' to cancel.

3 Ekim 2019 Perşembe

hostnamectl komutu

Giriş
Açıklaması şöyle. Yani Ubuntu'da bilgisayarın ismini değiştirmek için kullanıyoruz.
hostnamectl is part of systemd, and provides a proper API for dealing with setting a server's hostnames in a standardized way.

Previously each distro that did not use systemd, had their own methods for doing this which made for a lot of unnecessary complexity.
Hangi Dosyaları Okur
Ubuntu'da hostname'in yazıldığı iki dosya var. Bunlar şöyle.
/etc/hostname
/etc/hosts
/etc/hosts dosyası yazısına bakabilirsiniz.

Bu komuta benzer hostname komutu yazısına bakabilirsiniz.

Seçeneksiz Kullanım
hostname status seçeneği ile kullanım ile aynıdır.

set-hostname seçeneği
Şöyle yaparız.
hostnamectl set-hostname whatever
status seçeneği
Örnek
Şöyle yaparız.
hostnamectl             # equivalent to hostnamectl status
Örnek
Bu komut çıktısısında bir sürü bilgiyi birleştirip veriyor. Görmek için şöyle yaparız.
$ hostnamectl status
   Static hostname: mint
         Icon name: computer-laptop
           Chassis: laptop
        Machine ID: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
           Boot ID: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  Operating System: Linux Mint LMDE
            Kernel: Linux 3.16.0-6-amd64
Örnek
Bu komut çıktısısında bir sürü bilgiyi birleştirip veriyor. Görmek için şöyle yaparız.
$ hostnamectl
   Static hostname: centos7
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 1ec1e304541e429e8876ba9b8942a14a
           Boot ID: 37c39a452464482da8d261f0ee46dfa5
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-693.21.1.el7.x86_64
      Architecture: x86-64
Örnek
Sadece bize gereken hostname bilgisini görmek için şöyle yaparız.
sudo hostnamectl | grep hostname

uniq komutu

Giriş
Not : Eğer amacımızı tekil değerleri bulup sıralamaksa, direkt sort komutu da kullanılabilir. Şöyle yaparız
$ printf "lol\nlol\nfoo\n\n\n\n\nbar\nlol\nlol\nfoo\nlol\nfoo" | sort --unique

bar
foo
lol

Girdinin Sıralı Olmasını Bekler
Açıklaması şöyle
Filter adjacent matching lines from INPUT (or standard input), writing to OUTPUT (or standard output).
Örnek - sıralı olmayan veri
Elimizde şöyle bir kod olsun
printf "lol\nlol\nfoo\n\n\n\n\nbar\nlol\nlol\nfoo\nlol\nfoo" | uniq --unique
Çıktı olarak şunu alırız. Tekil değerleri vermez, çünkü girdi sıralı değildir.
foo
bar
foo
lol
foo
Doğru çıktı için şöyle yaparız
printf "lol\nlol\nfoo\n\n\n\n\nbar\nlol\nlol\nfoo\nlol\nfoo" | sort | uniq
Çıktı olarak şunu alırız
bar
foo
lol
Karşılaştırma Algortiması
Açıklaması şöyle. Yani bu komut aslında string karşılaştırması yapar.
Note that some uniq implementations like GNU uniq will give you the first of a sequence of lines that sort the same (where strcoll() returns 0) as opposed to are byte-to-byte identical (where memcmp() or strcmp() returns 0). To force a byte to byte comparison regardless of the uniq implementation, you can force the locale to C with:
Byte karşılaştırması için şöyle yaparız.
LC_ALL=C uniq your-file
Eğer hiçbir seçenek kullanmazsak tekil olmayan satır bulursa ilk bulduğunu çıktı olarak verir. Açıklaması şöyle
 With no options, matching lines are merged to the first occurrence.
-c seçeneği
count anlamına gelir. Satırın başına o satırın kaç kere bulunduğunu yazar. Elimizde şöyle bir dosya olsun
bird
bird
dog
rabbit
dog
cat
rabbit
dog
bird
cat
bird
bird
Şöyle yaparız.
uniq -c <(sort animal.txt) | awk '{print $2,$1}' 
Çıktı olarak şunu alırız.
bird 5
cat 2
dog 3
rabbit 2
-d seçeneği - Sadece birden fazla olan satırı çıktı verir
duplicate anlamına gelir. İki veya daha fazla olan satırları çıktı olarak verir. Şöyle yaparız.
sort input.txt | uniq -d
-u seçeneği - Sadece tekil olan satırı çıktı verir, duplicate olanları da eler
Bu seçenek zaten varsayılan davranış olduğu için aslında komuta eklemeye gerek yoktur. GNU uniq komutunda -u seçeneği yerine --unique olarak kullanılır.

Örnek
Elimizde şöyle bir dosya olsun
$ cat file
1
2
3
3
4
4
Eğer seçeneksiz kullanırsak çıktı olarak şunu alırız
$ uniq file
1
2
3
4
Eğer -u seçeneği ile kullanırsak çıktı olarak şunu alırız. Burada 3 ve 4 tekil olmadıkları için çıktıya dahil edilmezler.
$ uniq -u file
1
2


bash kodlama - $RANDOM Değişkeni

Örnek
Şöyle yaparız.
[ "$RANDOM" -lt 3277 ] && do_stuff

openssl req aracı

Giriş
Üç tane temel amacı var.
1. Certificate Signing Requests (CSR) Üretmek içindir
2. Self Signed Certificate Üretmek içindir

1 Ekim 2019 Salı

LANG Ortam Değişkeni - Temel Yerelleştirme Değişkenidir

Giriş
LANG ortamı değişkeninin açıklaması şöyle.
the "LANG" environment variable determines the language in which software programs communicate with the user.
Benim sistemimde LANG'ın değeri şu
tr_TR.UTF-8
Localization Değişkenlerinin Öncelik Sırası
Localization değerlerini değiştirmek için bir sürü değişken var. Bunların öncelik sırası şöyle
1. LANG_ALL - Her şeyi ezer
2. LC_XYZ değişkenleri - Eğer varsa bu değişkenler kullanılır
3. LANG - En düşük sıradaki değişken budur.
Örnek
Elimizde şöyle bir kod olsun. Burada LC_NUMERIC değişkeni LANG'dan önce gelir. Bu yüzden printf Almanca'da ayraç olarak virgül kullanıldığı için 3.14 değerini algılayamaz ve hata verir.
$ export LC_NUMERIC="de_DE.UTF-8"
$ export LANG=C
$ printf "%.2f\n" 3.14
-bash: printf: 3.14: invalid number
3,00
Ancak kodu şöyle değiştirelim. Bu durumda LC_ALL her şey ezecek ve yerelleştirmeyi C yapacaktır. Böylece printf çalışır.
$ export LC_NUMERIC="de_DE.UTF-8"
$ export LC_ALL=C
$ printf "%.2f\n" 3.14
3.14
C
Şöyle yaparız.
LANG=C 
en_US (Amerikan İngilizcesi)
Şöyle yaparız.
LANG=en_US
en_IE (İrlanda İngilizcesi)
Şöyle yaparız.
>LANG=en_IE.UTF-8 ls -1 foo*
foopa.png
foo.png
fooqa.png

>LANG=C ls -1 foo* 
foo.png
foopa.png
fooqa.png
Diğer

1. LANG Dışında Bazı Özel Ayarlar Yapmak
LANG değişkeninden memnunuz diyelim ancak örneğin zamanı kendi bölgemizin ayarından daha farklı bir şekilde görmek istiyoruz. Bu durumda LC_XYZ ortam değişkenlerini kullanmak gerekir.

Örnek
Açıklaması şöyle.
For example, I use LANG=en_US.utf8 on my Linux box, but I override LC_TIME=en_GB.utf8 to get 24-hour time in English. This would not be possible to do if LC_ALL were set.
2. Java
Elimizde şöyle bir kod olsun.
import java.io.File;

public class Test {
  public static void main(String[] args) {
    File f = new File("\u2026");
    f.toPath();
  }
}
LANG'ı C yaparsak exception fırlatır.
$ LANG=C java Test
Exception in thread "main" java.nio.file.InvalidPathException: Malformed input...
    at sun.nio.fs.UnixPath.encode(UnixPath.java:147)
    at sun.nio.fs.UnixPath.<init>(UnixPath.java:71)
    at sun.nio.fs.UnixFileSystem.getPath(UnixFileSystem.java:281)
    at java.io.File.toPath(File.java:2234)
    at Test.main(Test.java:6)
LANG'ı  en_US.UTF-8 yaparsak çalışır
$ LANG=en_US.UTF-8 java Test
# No crash!





modprobe komutu

Giriş
modprobe komutu insmod komutu gibi modül eklemek için kullanılır. Farklı olarak modülün tüm bağımlı olduğu modülleri de otomatik ekler.

/etc/modprobe.d/blacklist.conf Dosyası
Bir modülü kalıcı olarak etkizileştirmek istiyorsak bu dosyaya ekleriz.

/etc/modprobe.d/snd-blacklist.conf Dosyası
Bazı modüller kendi dosyalarını kullanırlar.

Örnek
Alsa ile sesi etkinsizleştirmek için şöyle yaparız
blacklist soundcore
blacklist snd
blacklist snd_pcm
blacklist snd_hda_codec_hdmi
blacklist snd_hda_codec_realtek
blacklist snd_hda_codec_generic
blacklist snd_hda_intel
blacklist snd_hda_codec
blacklist snd_hda_core
blacklist snd_hwdep
blacklist snd_timer

Yüklemek İçin
Örnek
Şöyle yaparız.
$ sudo modprobe ath10k_pci
Eğer hata olursa şuna benzer bir çıktı alırız.
modprobe: ERROR: could not insert 'ath10k_pci': Required key not available
Örnek
Modüle paramete geçmek için şöyle yaparız.
# add 2 virtual video devices
modprobe v4l2loopback devices=2 exclusive_caps=1,1
-r seçeneği
Oturum boyunca bir modülü etkisizleştirir. Şöyle yaparız.
modprobe -r uvcvideo