26 Ağustos 2019 Pazartesi

bash history expansion

Giriş
Otutum (session) kapandıktan sonra komutlar şu dosyaya yazılır.
~/.bash_history
!!
En son girilen komut ile yer değiştirir.
Örnek
Açıklaması şöyle
!! is a history command of bash, it gets replaced by the last command you‘ve executed. You can try ls followed by echo !!
Şöyle yaparız.
some command
echo !!
!komutu ismi yani event designator
Örnek
Şöyle yaparız
cp company-sso /usr/local/bin/company-sso ; sudo chmod +x !cp:$
Açıklaması şöyle
This is history expansion, introduced by !; the $ must be intepreted in that context. !cp:$ has two parts, separated by :. !cp is the event designator, it means “find the most recent command starting with cp”. $ is a word designator, it means “take the last word (argument) in the selected command”.

So, assuming the last command in the history (of previously-run commands) is also cp company-sso /usr/local/bin/company-sso, !cp:$ is replaced with /usr/local/bin/company-sso, and the command run is sudo chmod +x /usr/local/bin/company-sso.

!#:number
En çok kullanılan şeylerden birisi bu. history komutu ile tarihçe listelenir Her satırın yanında bir sayı vardır. "!Sayı" şeklinde kullanarak o komutu tekrar edebiliriz. Sayı olarak sondan geriye doğru gitmek için eksi bir sayı verilebilir.

Örnek
Açıklaması şöyle
!-n    Refer to the current command minus n
Sondan bir önceki komutu çalıştırmak için şöyle yaparız
!-2
Örnek
Şöyle yaparız.
echo "echo 'Hello World'" >script.sh&&chmod +x !#:3
Açıklaması şöyle.
History Expansion replaces !#:3 with the fourth word from the current command line, which in your case is the filename script.sh.

su komutu

Giriş
Açıklaması şöyle.
The general purpose of su is to open a new shell under another user's login account. That other user could be root (and perhaps most often is), but su can be used to assume any identity the local system can authenticate.
-l seçeneği
Yeni bir login shell başlatır. Açıklaması şöyle
If you only give a username as argument, su changes user without changing much else:

So su postgres stays in the same directory. However since HOME is set to the new 
user’s home directory, cd will take you to the right place.

To log in and start from the user’s default directory, you need to ask su to start 
a login shell set up appropriately:

su -l postgres
or its common synonym,

su - postgres
Örnek
Şöyle yaparız
13:27:20 /home/jim> su -l mike
Password:(I type mike's password (or have him type it) and press Enter)
13:27:22 /home/mike> id
uid=1004(mike) gid=1004(mike) groups=1004(mike)
13:27:25 /home/mike> exit  # this leaves mike's login shell and returns to jim's
13:27:29 /home/jim> id
uid=1001(jim) gid=1001(jim) groups=1001(jim),0(wheel),5(operator),...

readarray komutu

Giriş
Genellikle bir komutun çıktısını bir satır dizisi olarak okumak için kullanılır.

Neden Lazım
Örnek
Elimizde şöyle bir bash döngüsü olsun
for i in ${usbs[@]}; do
  echo $i
done
bash komut çıktısındanki boşlukları hesaba katarak her kelimeyi teker teker verir. readarray komutu ile tüm satırı okumak mümkün.

-t seçeneği
Sondaki newline karakterini siler.

Örnek
Dosyadaki tüm satırları okumak için şöyle yaparız. readAllLines() gibidir.
readarray -t dirs < subdirs2search.txt
find "${dirs[@]}" ...
Örnek
Bir komutun çıktısını okumak için şöyle yaparız. arr isimli değişkene okur.
$ str='25 results [22 valid, 2 invalid, 1 undefined]'

$ readarray -t arr < <( grep -E -o '[0-9]+' <<<"$str" )
Daha sonra göstermek için şöyle yaparız.
$ printf 'value: %s\n' "${arr[@]}"
value: 25
value: 22
value: 2
value: 1
Örnek
Şöyle yaparız
readarray -t usbs < <(lsblk -o NAME,TRAN,VENDOR,MODEL | grep usb)
Komutun çıktısı olarak usbs değişkeni şu değeri alır
usbs=(
'sdb   usb    Kingston DataTraveler 2.0'
'sdc   usb    Kingston DT 101 G2'
)
Örnek
Bir komutun çıktısını okumak için şöyle yaparız
#!/bin/bash
readarray -t array< <(sed 's/"//g; s/  *//g; s/,/"/; s/,//g; s/"/,/' "$1")
for element in "${array[@]}";do
    echo "|ELEMENT|$element|"
done
Array içindeki double quote,space karakterlerini silmek için şöyle yaparız.
#!/bin/bash
readarray -t array< "$1"
array=( "${array[@]// /}" ) space sil
array=( "${array[@]//\"/}" ) double quote sil
array=( "${array[@]/,/\"}" )
array=( "${array[@]//,/}" )
array=( "${array[@]/\"/,}" )

for element in "${array[@]}"; do
    echo "|ELEMENT|$element|"
done

25 Ağustos 2019 Pazar

wpa_passphrase komutu

Örnek
Şöyle yaparız.
$ wpa_passphrase MyNetworkName MySecretPassword

Windows netsh komutu

advfirewall
reset
Firewall kurallarını en baştaki haline getirmek için şöyle yaparız
netsh advfirewall reset
interface
ipv4
IPV4 ağ arayüzlerini görmek için şöyle yaparız.
netsh interface ipv4 show interface
wlan
export
Geçerli wifi şifresini verir. Şöyle yaparız.
netsh wlan export profile key=clear

23 Ağustos 2019 Cuma

mkfifo komutu

Giriş
İsmi olan bir FIFO (named pipe) yaratır. FIFO'ya bir uygulama yazar ve diğeri okur. Pipe Verisi Nerede Saklanır yazısına göz atabilirsiniz.

Örnek
Şöyle yaparız.
mkfifo foobar

22 Ağustos 2019 Perşembe

tree komutu

Giriş
Şöyle yaparız.
$ tree test/
test/
├── dir1
│   ├── file1
│   ├── file2
│   └── file3
├── dir2
│   ├── file1
│   ├── file2
│   └── file3
└── dir3
    ├── file1
    ├── file2
    └── file3
-d seçeneği
Sadece directory'leri gösterir.

-H seçeneği
ftp seçenekleri oluşturur. Şöyle yaparız.
tree -H /ftp-root test/ > directory-list.html

20 Ağustos 2019 Salı

ifne komutu

Giriş
Açıklaması şöyle.
NAME
       ifne - Run command if the standard input is not empty

SYNOPSIS
       ifne [-n] command

DESCRIPTION
       ifne  runs  the  following command if and only if the standard input is
       not empty.
Örnek
Şöyle yaparız. Çıktı boş değilse myfile ve /dev/null'a gönderilir.
command | ifne tee myfile > /dev/null



4 Ağustos 2019 Pazar

/dev/mem

Giriş
Açıklaması şöyle
/dev/mem is a character device file that is an image of the main memory of the computer. It may be used, for example, to examine (and even patch) the system.
Yeni sistemlerde /dev/mem tüm belleğe erişim vemiyor. Açıklaması şöyle.
On older Linux systems, the program dd can be used to read the contents of physical memory from the device file /dev/mem. On recent Linux systems, however, /dev/mem provides access only to a restricted range of addresses, rather than the full physical memory of a system. On other systems it may not be available at all. Throughout the 2.6 series of the Linux kernel, the trend was to reduce direct access to memory via pseudo-device files. 
CONFIG_STRICT_DEVMEM 
Bu seçenek ile belli yerlere erişim verilebilir. Açıklaması şöyle.
Since Linux 2.6.26, and depending on the architecture, the CONFIG_STRICT_DEVMEM kernel configuration option limits the areas which can be accessed through this file.
Açıklaması şöyle.
/dev/mem protection Some applications (Xorg) need direct access to the physical memory from user-space. The special file /dev/mem exists to provide this access. In the past, it was possible to view and change kernel memory from this file if an attacker had root access. The CONFIG_STRICT_DEVMEM kernel option was introduced to block non-device memory access (originally named CONFIG_NONPROMISC_DEVMEM).
CONFIG_DEVMEM
Bu seçenek ile /dev/mem hiç kullanılmayabilir. Açıklaması şöyle.
/dev/mem is protected by the usual filesystem access permissions, and the CAP_SYS_RAWIO capability. iopl() and ioperm() are also restricted through the same capability.

/dev/mem can also be compiled out of the kernel altogether (CONFIG_DEVMEM).
Örnek
Şöyle yaparız.
$ head /dev/mem | hexdump -C