29 Haziran 2021 Salı

bash kodlama - exec built-in komutu

Örnek
Elimizde şöyle bir kod olsun
#!/bin/bash

# Prepare the JVM command line
...

$JAVA_EXECUTABLE $JAVA_ARGS

# Clean up
...
Açıklaması şöyle
In this case the TERM signal is received by the shell process, but Bash will not forward that signal to the child process. This means that the shell process will stop, but the JVM will continue to run.
Şöyle yaparız
#!/bin/bash
... exec $JAVA_EXECUTABLE $JAVA_ARGS
Örnek
Sadece bazı komutların çıktısını stdout'a diğerlerini /dev/null'a yönlendirmek için şöyle yaparız
exec 3>&1 &>/dev/null
some_command
another_command
command_you_want_to_see >&3
command3
Açıklaması şöyle
You can use the exec command to redirect everything for the rest of the script.

You can use 3>&1 to save the old stdout stream on FD 3, so you can redirect output to that if you want to see the output.

27 Haziran 2021 Pazar

mosh komutu

Giriş
Açıklaması şöyle
mosh is something that unfortunately not enough people know about. It basically provides SSH access over unreliable, slow, or laggy networks.

ss komutu - netstat Yerine Kullanılır

Giriş
netstat yerine bu komut kullanılabilir. Açıklaması şöyle
We use it to see all the connections in the network from the current computer.

Açıklaması şöyle
-n lists processes using numeric addresses (eg, IP addresses instead of DNS names)
-t lists TCP connections
-a lists all connections — listening and established
-u lists UDP connections
-p shows the process using the socket — probably the most useful
-e shows some extended information, like the uid.
-n seçeneği
Şöyle yaparız
sudo root@mindstorm: ss -ntpl
State  Recv-Q Send-Q     Local Address:Port     Peer Address:PortProcess
LISTEN 0          64           0.0.0.0:46465              0.0.0.0:*
LISTEN 0          64           0.0.0.0:2049                0.0.0.0:*
LISTEN 0          4096       0.0.0.0:58947              0.0.0.0:*    users:(("rpc.statd",pid=2811,fd=10))
LISTEN 0          5             0.0.0.0:35587              0.0.0.0:*    users:(("ecbd",pid=2767,fd=5))
LISTEN 0          50           0.0.0.0:139                  0.0.0.0:*    users:(("smbd",pid=2770,fd=54))

23 Haziran 2021 Çarşamba

find komutu delete seçeneği - Kabul Edilen Dosya ve Dizinleri Siler

Giriş
Açıklaması şöyle. Yani - delete find komutunun sonunda veya başında olursa farklı davranır
... if you want to delete files you find with the find command, you can use the -delete flag at the end of your find code. If you put it first, it will delete everything in the folder you specify. So be careful.
Açıklaması şöyle. Bu seçenek standart POSIX seçeneği değil ancak çoğu sistemde bulunuyor.
-delete Delete files; true if removal succeeded. If the removal failed, an error message is issued. If -delete fails, find's exit status will be nonzero (when it eventually exits). Use of -delete automatically turns on the -depth option.
Örnek
Şöyle yaparız.
find . -name "*.txt" -delete
Örnek
Şöyle yaparız.
find -type f -name '*abc*' -delete
delete ve empty birlikte kullanımı
Elimizde şöyle bir dizin olsun. dir4 hariç her dizin doludur, çünkü içinde alt dizin var
mkdir -p dir1/dir2/dir3/dir4
Şöyle yaparız ve tüm dizinlerin silindiğini görürüz. Çünkü delete en derinden (depth first) işleme başlar ve daha sonra yukarıya çıkar.
find dir1 -empty -delete
Açıklaması şöyle
That's possibly they've considered that it's more commonly useful to be able to delete some files and then possibly the directory containing those files if it was emptied at the same time 

17 Haziran 2021 Perşembe

Kernel Module ve Export Symbol

Giriş
Bir module bir başka modülün sadece exported sembollerine erişebilir. Açıklaması şöyle
Modules can only access exported symbols, and exit_task_namespaces isn’t exported — so even though it is visible in the header files, it can’t be used in a module.

Exported symbols can be accessed as you’d expect, there’s nothing special to do.
Örnek
Export edilen şey veri yapısı ise şöyle yaparız
struct snd_card *snd_cards[SNDRV_CARDS];
EXPORT_SYMBOL(snd_cards);
Örnek
modul1 şöyle olsun
/* mod1.c */
#include <linux/module.h>

static int mod1_exp_func(int i)
{
  pr_info("%s:%d the value passed in is %d\n",
            __func__, __LINE__, i);

  return i;
}
EXPORT_SYMBOL(mod1_exp_func); /* export static symbol */

static int __init mod1_init(void)
{
  pr_info("Initializing simple mod\n");
  return 0;
}

static void __exit mod1_exit(void)
{
  pr_info("This module is exiting\n");
}

module_init(mod1_init);
module_exit(mod1_exit);
MODULE_LICENSE("GPL v2");
module2 export edilen sembolleri kullanabilir. Şöyle yaparız
/* mod2.c */
#include <linux/module.h>

extern int mod1_exp_func(int);

static int __init mod2_init(void)
{
  pr_info("Initializing mod2\n");
  pr_info("Calling exported function in mod1\n");
  mod1_exp_func(3);
  return 0;
}

static void __exit mod2_exit(void)
{
  pr_info("mod2 exiting\n");
}

module_init(mod2_init);
module_exit(mod2_exit);
MODULE_LICENSE("GPL v2");

14 Haziran 2021 Pazartesi

bash expansion Sırası

Giriş
Açıklaması şöyle.
The order of expansions is: brace expansion; tilde expansion, parameter and variable expansion, arithmetic expansion, and command substitution (done in a left-to-right fashion); word splitting; and filename expansion.
3. Parameter Expansion - ${variable,,} şeklindedir. String işlemleri gibi düşünülebilir.
3. Variable Expansion - "$var" şeklindedir. Değişkenin değerini açarak bir metoda geçer.
4. Arithmetic expansion
5. Command Substitution
yazılarına da bakabilirsiniz.

 Parameter Expansion vs Variable Expansion
Aslında Parameter Expansion ve Variable Expansion çok benziyor. 

- Eğer değişkenin değerine erişmek istiyorsak "$var" şeklinde kullanırız. Bu durumda variable expansion olur
- Eğer değişken bir string içinde kullanılacaksa bu sefer Parameter Expansion yapmak gerekir. Değişken bu sefer Brace ile sarmalanır string double quote içine alınmaz. Çünkü zaten string içindedir

Örnek - Variable Expansion 
Şöylee yaparız
$ IFS=" elr"
$ var="Hello World"
$ printf '<%s> ' $var; echo
<H> <> <> <o> <Wo> <> <d>

$ printf '<%s> ' "$var"; echo
<Hello World>
Örnek - Parameter Expansion 
Şöyle yaparız
$ var=one
$ echo "The value of var is $varvalue"
The value of var is
$ echo "The value of var is ${var}value"
The value of var is onevalue



8 Haziran 2021 Salı

epoll_ctl metodu

Giriş
epoll_ctl() metodunu anlamadan önce epoll_event yapısını anlamak gerekir.

epoll_create1() ile yaratılan socket set'ine yeni bir socket eklemek için kullanılır

Örnek - EPOLL_CTL_ADD
İzlenecek yeni fd  eklemek için şöyle yaparız. Bu fd'de bir olay olursa ev yapısı geri verilir.
epoll_event ev;
ev.data.fd = timerfd;

epoll_ctl(epollfd, EPOLL_CTL_ADD, timerfd, &ev); 
Örnek - EPOLL_CTL_ADD
Şöyle yaparız.Burada socketin EPOLLIN ve EPOLLRDHUP olayları dinleniyor
int servFd = socket (...);

int efd = epoll_create1 (EPOLL_CLOEXEC);
struct epoll_event epollEvt;
epollEvt.events = EPOLLIN | EPOLLRDHUP;
epollEvt.data.u32 = servFd;
epoll_ctl (efd, EPOLL_CTL_ADD, servFd, &epollEvt);
Örnek
Açıklaması şöyle
A detail to note: it’s important to set the level-trigger (EPOLLIN) but not the edge-trigger (EPOLLET) on the listening socket.
Şöyle yaparız. EPOLLIN olayı dinleniyor
void register_fd(int efd, int fd) {
  struct epoll_event event;
  event.data.fd = fd;
  event.events = EPOLLIN;
  epoll_ctl(efd, EPOLL_CTL_ADD, fd, &event);
  // Error check.
}

6 Haziran 2021 Pazar

ip6tables INPUT Modülü

Giriş
iptables komutu IPv4 içindir. ip6tables komutu IPv6 içindir.

-A seçeneği
Örnek
Şöyle yaparız
ip6tables -A INPUT -p tcp --dport 22 -j REJECT

2 Haziran 2021 Çarşamba

numfmt komutu - Sayıları Kolay Okunabilecek Şekilde Formatlar

Giriş
Açıklaması şöyle
numfmt - Convert numbers from/to human-readable strings
--from seçeneği
Örnek
Kısal sayıdan uzun sayıya çevirmek için şöyle yaparız
$ numfmt --from=iec-i 50.1Gi
53794465383
String'den tekrar sayıya çevirmek için şöyle yaparız
$ echo "50.1Gi" | numfmt --from=iec-i
53794465383