25 Haziran 2020 Perşembe

aptitude komutu - Debian Tabanlı Sistemler Tarafından Kullanılır

Giriş
Bu komut Debian tabanlı sistemlerde kullanılır.

why seçeneği
Örnek
Bir paketin elle kurulup kurulmadığını göstermek için şöyle yaparız.
aptitude why xterm
Örnek
Bir paketin bir uygulama tarafından neden ihtiyaç duyulduğunu görmek için şöyle yaparız. monitoring-plugins-standard uygulama ismi. gnupg ise bu uygulama tafaından kullanılan paket ismi.
$ aptitude why monitoring-plugins-standard gnupg
p   monitoring-plugins-standard Recommends smbclient
i A smbclient                   Depends    samba-common (= 2:4.9.5+dfsg-5+deb10u1)
i A samba-common                Recommends samba-common-bin
i A samba-common-bin            Recommends samba-dsdb-modules
i A samba-dsdb-modules          Depends    libgpgme11 (>= 1.2.0)
i A libgpgme11                  Recommends gpgsm
i A gpgsm                       Recommends gnupg (= 2.2.12-1+deb10u1)

24 Haziran 2020 Çarşamba

namei komutu

Giriş
Root dizinden belirtilen dizine kadar olan permission'ları gösterir.

Örnek
Şöyle yaparız
# namei -l /sys/kernel/debug/usb/devices
f: /sys/kernel/debug/usb/devices
drwxr-xr-x root root /
dr-xr-xr-x root root sys
drwxr-xr-x root root kernel
drwx------ root root debug
drwxr-xr-x root root usb
-r--r--r-- root root devices

unmount komutu

Giriş
Bu komutun etkisi kalıcı değil. Sistem tekrar başlatılınca etkisi geçiyor. Açıklaması şöyle.
Just reboot the machine. It is just temporarily and the permanent configuration in /etc/fstab is restored upon reboot.
Örnek
Şöyle yaparız
sudo umount /proc/meminfo
-a seçeneği
Tüm dosya sistemlerini unmout yapar.

BIOS

Giriş
Yeni makinelerde artık BIOS yok. Yerine UEFI kullanılıyor.

Farlı Üreticilerin BIOS'larını Yer Değiştirmek
Mümkün değil. BIOS anakarta göbekten bağlıdır. Açıklaması şöyle.
The BIOS is tailored for the specific motherboard, which will have a certain chipset for a certain CPU class, and therefore it also expects certain class of CPU to be present. Sometimes you even need to upgrade the BIOS to support newer CPUs, so it won't work even if you can physically fit the CPU in the socket.
IBM BIOS
Açıklaması şöyle.
IBM released the IBM 5150 Technical Reference manual in August, 1981, and included in it the fully commented source code listing for the BIOS.
Eski BIOS
DOS zamanında klavyeyi okumak için kullanılırdı. Açıklaması şöyle.
Whenever a keypress happens an interrupt occurs, in which the BIOS takes the waiting keycode, translates it and stores it in the buffer. Later to be read by any foreground program (via INT 16h or DOS). So it is a hardware event, but the buffer itself is handled by some (quite small) software.

The reason is rather simple, the original PC was fricking slow, but intended to be used in an office environment were users where experienced in fast typing (like on a typewriter). So the keyboard buffer was a way to equal out when the program did need time for like a redraw (scroll) or insert or whatsoever.
BIOS ve Boot Sector
BIOS diskin belli bir bölümünü okur ve Boot Sector ise işi oradaki Boot Loader'a devreder. Açıklaması şöyle
BIOS cannot simply load a file that represents your operating system from a disk, since BIOS has no notion of a file- system. BIOS must read specific sectors of data (usually 512 bytes in size) from specific physical locations of the disk devices, such as Cylinder 2, Head 3, Sector 5.

bash kodlama - set built-in komutu

-- seçeneği
Sanırım command line argument anlamına geliyor.
Örnek
Şöyle yaparız
set -- a b c
temp=$1
shift
echo "$@" "$temp"
-e seçeneği
Açıklaması şöyle.
This will cause the script to terminate early if any command exits with non-zero exit status.
-o seçeneği
Bu seçenek pipefail, vi, emacs, posix gibi bir sürü ilave şey ile kullanılır. Kabuğun hangi modda koşacağını belirtir.

Örnek - pipefail
Açıklaması şöyle.
set the exit status $? to the exit code of the last program to exit non-zero (or zero if all exited successfully).
Açıklaması şöyle.
You use set -o pipefail, which is supported in bash, zsh and ksh and should be included in a future version of the standard. But as explained above, this only affects the value of $? after the pipeline has exited, not within the pipeline itself.
Şöyle yaparız.
$ set -o pipefail
$ false | true; echo $?
1
Örnek - posix
Açıklaması şöyle.
bash will run in POSIX mode when either
- set -o posix has been used, or
- the shell is being invoked as sh.
Örnek - vi
Şöyle yaparız.
set -o vi
Örnek - emacs
Açıklaması şöyle.
For bash and zsh, emacs is the default editing mode. You can also choose vi mode with set -o vi.
Şöyle yaparız.
set -o emacs
-x seçeneği
İşletilen komutları da ekrana yazar.

Örnek
Elimizde şöyle bir kod olsun. Burada her bir komutun + ile başlayan satıra yazdırıldığını görebiliriz. En son satırda ise tüm komutun sonucu olan çıktı satırı görülebilir.
> set -x
> echo 9_00 | grep 9\.00
+ echo 9_00
+ grep 9.00
9_00
-v seçeneği
Açıklaması şöyle.
-v      Print shell input lines as they are read.
Yazılan komutu tekrar eder. Kapatmak için "set +v" yaparız. Özelliği görmek için şöyle yaparız.
# ls
ls
Desktop  Documents  Downloads 

# date
date
Mon Mar 19 11:24:59 EDT 2018

# echo "Hello, world!"
echo "Hello, world!" 
Hello, world!

bash kodlama - gömülü değişkenler

Giriş
bash içinde bazı değişkenler otomatik olarak tanımlı. Bu değişkenlere "built-in variables" deniyor.
bash içinde aynı zamanda bazı komutlar da otomatik olarak tanımlı. Bu komutlara "built-in commands" deniliyor.

Gömülü Değişkenler her zaman çift tırnak içinde kullanılmalı. Bazı örneklerde öyle gösterimese de bunu bir kural olarak benimsemek lazım. Şöyle yaparız.
$ echo 'echo "$1"' > injection.sh
$ bash injection.sh '/*'
/*
Değişken Listesi
Değişken listesi şöyle
Variable    Meaning
$0          Filename of script
$1          Positional parameter #1
$2 - $9     Positional parameters #2 - #9
${10}       Positional parameter #10
$#          Number of positional parameters
"$*"        All the positional parameters (as a single word) *
"$@"        All the positional parameters (as separate strings)
${#*}       Number of positional parameters
${#@}       Number of positional parameters
$?          Return value
$$          Process ID (PID) of script
$-          Flags passed to script (using set)
$_          Last argument of previous command
$!          Process ID (PID) of last job run in background

* Must be quoted, otherwise it defaults to $@.
Positional Parameter Değişkenleri
Positional Parameter için gömülü değişkenler yazısına taşıdım

"$*" değişkeni - tüm parametreleri tek bir string olarak temsil eder
Açıklaması şöyle.
   Special Parameters
       The shell treats several parameters specially.  These parameters may  only
       be referenced; assignment to them is not allowed.
       *      Expands  to the positional parameters, starting from one.  When the
              expansion is not within double quotes,  each  positional  parameter
              expands  to  a  separate  word.  In contexts where it is performed,
              those words are subject to  further  word  splitting  and  pathname
              expansion.   When  the  expansion  occurs  within double quotes, it
              expands to a single word with the value of each parameter separated
              by  the first character of the IFS special variable.  That is, "$*"
              is equivalent to "$1c$2c...", where c is the first character of the
              value  of  the  IFS  variable.  If IFS is unset, the parameters are
              separated by spaces.  If IFS is null,  the  parameters  are  joined
              without intervening separators.
Örnek ver

"$@" değişkeni - tüm parametreleri array olarak temsil eder
$@ değişkeni yazısına taşıdım.

$# değişkeni - number of positional parameters
Açıklaması şöyle
$# is a special variable in bash, that expands to the number of arguments (positional parameters) i.e. $1, $2 ... passed to the script in question or the shell in case of argument directly passed to the shell e.g. in bash -c '...' .....

This is similar to argc in C.
Örnek - betiğe geçen parametre sayısı
Şöyle yaparız
$ bash -c 'echo $#'
0

$ bash -c 'echo $#' _ x
1

$ bash -c 'echo $#' _ x y
2

$ bash -c 'echo $#' _ x y z
3
Örnek - betiğe geçen parametre sayısı
Belli sayıda parametre bekliyorsak betiğin başında şöyle yaparız.
if [[ $# -ne 1 ]]; then
  echo 'One argument required for file name'
  exit 1
fi
Örnek - metoda geçen parametre sayısı
Burada dikkat edilmesi gereken nokta eğer $# gömülü değişkenini bir metod içinde kullanırsak metoda geçen parametre sayısını dönmesi. Şöyle yaparız. Sonuç olarak 3 alırız.
#!/bin/sh

f() {
  echo "$#"
}

f a b c
Dolayısıyla şu kod betiğe geçen parametre sayısını kontrol etmek için uygun değil.
#!/bin/sh

check_args() { # doesn't work!
  if [ "$#" -ne 2 ]; then
    printf '%s: error: need 2 arguments, got %d\n' "$0" "$#" >&2
    exit 1
  fi
}

# Maybe check some other things...
check_args
# Do other stuff...
Doğru kod şöyle
#!/bin/sh

check_args() { # works -- the caller must pass the number of arguments received
  if [ "$1" -ne 2 ]; then
    printf '%s: error: need 2 arguments, got %d\n' "$0" "$1" >&2
    exit 1
  fi
}

# Maybe check some other things...
check_args "$#"
$? değişkeni
$? değişkeni yazısına taşıdım.

$$ değişkeni - process id of script
$$ değişkeni yazısına taşıdım.

$- değişkeni
set built-in komutu tarafından atanan seçenekler erişmek için kullanılır
Örnek
set -e yapılıp yapılmadığını anlamak için şöyle yaparız
if [[ $- == *e* ]]
$_ değişkeni
Açıklaması şöyle.
When Bash invokes an external command, the variable ‘$_’ is set to the full pathname of the command and passed to that command in its environment.
$! değişkeni
$! değişkeni yazısına taşıdım.

ls komutu

Giriş
list directory contents anlamına gelir. Seçeneksiz çalıştırırsa sadece dosya isimlerini gösterir. Şöyle yaparız.
$ ls
Applications Documents    Library      Music        Public
Desktop      Downloads    Movies       Pictures
- Eğer çıktıda "+" karakteri görüyorsak ACL atanmıştır. getfacl komutu yazısına bakabilirsiniz.

- Eğer çıktıda "t" veya "T"  karakteri görüyorsak, sticky bit atanmıştır. chmod ve sticky bit yazısına bakabilirsiniz. Bu dizinde herkes dosya oluşturabilir ancak sadece dizinin sahibi silebilir

- Eğer çıktıda "s" veya "S"  karakteri görüyorsak, SUID bit'i atanmıştır. chdmod ve suid biti yazısına bakabilirsiniz. root kullanıcı olmasak bile, dosyanın sahibi root ise, root kullanıcı gibi çalışabilmeyi sağlar.

Exit Code
Eğer belirtilen dosya varsa ls exit code olarak 0 verir.
Örnek
Bir dizinde belli bir isimdeki dosya varsa o dizinin ismini yazdırmak isteyelim. Şöyle yaparız. ls dosya varsa exit code olarak 0 vereceği için || tarafı da çalıştırılır.
while read line; do
    ls "$line/path2/file2" &> /dev/null || ls "path1/$line/path2"
done < /path_to_this_file/file.txt
Soru İşareti Karakteri Çıktısı
Non printable karakter varsa, bu karakter yerine ? karakteri gösterilir. Açıklaması şöyle.
The ls utility will replace non printable characters with ?. It is further unclear whether the non printable character really is the first character in the filename or whether there may be one or several spaces before that.
Glob Kullanmak
Örnek
*:2* örüntüsünü aramak istersek şöyle yaparız. ":" karakterini "\" karakteri ile escape ederiz.
ls -l *\:2,*T
-- seçeneği
Açıklaması şöyle
You can usually use -- to indicate the end of command options
Örnek
Dosya i-smleri - karakteri ile başlıyorsa şöyle yaparız.
ls -- -*
-1 seçeneği - Eksi bir
Eksi küçük L değildir. Eksi bir karakteridir. Her dosya ismini bir satıra yazar, başka bilgi eklemez.
Açıklaması şöyle
 -1      (The numeric digit "one".) Force output to be one entry per line.
         This is the default when output is not to a terminal.
Açıklaması şöyle
ls -1 lists one file per line. By default, when it’s outputting to a terminal, ls lists files in columns, whose number varies depending on the length of the file names and the available space on screen.
Örnek
Şöyle yaparız.
$ ls -1 -- *.tar.gz
file1.tar.gz
file2.tar.gz
file?3.tar.gz
-a seçeneği
Gizli dosyaları gösterir.

-d seçeneği
Sadece diizinleri gösterir.
Örnek
Şöyle yaparız.
$ ls -d */
archive/  DownloadImages/  fixed/  getNews/  html/  log/  MonumentData/  NewsData/
Örnek
En son yaratılan dizine gitmek için şöyle yaparız. Sadece dizinleri listeler. En sonuncu dizin bir değişkene alınır.
alias res='var=$(ls --directory /path/to/results/res* | tail -n 1); cd $var'
--color seçeneği
Örnek
ls komutunun çıktısı renkli değildir. Alias eklemek için şöyle yaparız.
## Colorize the ls output ##
alias ls='ls --color=auto'

## Use a long listing format ##
alias ll='ls -la'

## Show hidden files ##
alias l.='ls -d .* --color=auto'
Örnek
Şöyle yaparız.
/bin/ls --color > file1
Şöyle yaparız.
/bin/ls --color=auto
--group-directories-first seçeneği
Şöyle yaparız.
$ ls -b --group-directories-first | awk '{print NR ". " $0}'
1. dir1
2. dir2
3. dir3
4. z-dir1
5. z-dir2
6. z-dir3
7. file1
8. file2
9. file3
10. file4
11. file5
12. file6
13. file7
14. file\nnewline

-h seçeneği
Büyüklükleri human readable olarak gösterir

-i seçeneği
inode değerlerini gösterir.
Örnek
Şöyle yaparız.
ls -li 

 12582925 -rw-r--r--  1 root root   646 May 23 02:19 ?ssolveIncpUL46pK.txt
Örnek
Farklı dosya sistemleri aynı inode numarasına sahip olabilir. Görmek için şöyle yaparız. / ve /home dosya sistemleri aynı inode numarasına sahip.
$ ls -id / /home
2 /    2 /home
-I seçeneği - Ignore
Örnek
Şöyle yaparız
/bin/ls -1 -I *svn* src/main/resources/ddl
-l seçeneği - Eksi küçük L harfi

Permission bilgileri ile dosyaları gösterir. FAT32 dosya sisteminde permission yeteneği olmamasına rağmen FAT32 sürücüsü varmış gibi davranır.

Örnek
Şöyle yaparız. Dosyanın byte cinsinden büyüklüğü en başa yazılır. Bu dosya 8 byte büyüklüğünde
$ ls -ls test

8 -rw-rw-r-- 1 admin admin 0 feb 27 16:45 test
-N seçeneği
Açıklaması şöyle.
-N, --literal
print entry names without quoting
Örnek
Eğer bı seçeneği kullanmazsa içinde boşluk olan dosyalar tek tırnak içinde gösterilir. Şöyle yaparız
$ ls
 bar  'foo bar'
-t seçeneği
-l seçeneği normalde alfabetik olarak sıralar. -lt olarak kullanılırsa en yeni dosyadan başlayarak sıralar. Açıklaması şöyle.
ls -l will order files in alphabetical order. ls -lt will order files in order of modification time, newest first, to the greatest accuracy supported by the underlying filesystem.