Bash komutları ve işleçleri

Tamamlandı

Her kabuk dilinin kendine has en çok kullanılan komutları vardır. Bash repertuvarınızı oluşturmaya en sık kullanılan komutları inceleyerek başlayalım.

Bash komutları

Sık kullanılan Bash komutlarına ve bunları nasıl kullanabileceğinize bakalım.

ls komut

ls geçerli dizininizin veya komuttaki bağımsız değişkende belirtilen dizinin içeriğini listeler. Tek başına kullanıldığında geçerli dizindeki dosyaları ve dizinleri listeler:

ls

Adı noktayla başlayan dosyalar ve dizinler varsayılan olarak gizlenir. Bu öğeleri dizin listelemesine dahil etmek için -a bayrağını kullanın:

ls -a

Geçerli dizindeki dosyalar ve dizinler hakkında daha fazla bilgi edinmek için -l bayrağını kullanın:

ls -l

Birkaç JPEG ve PNG dosyasının yanı sıra gifs adlı bir alt dizin içeren bir dizinin örnek çıkışı aşağıda gösterilmiştir:

-rw-rw-r-- 1 azureuser azureuser  473774 Jun 13 15:38 0001.png
-rw-rw-r-- 1 azureuser azureuser 1557965 Jun 13 14:43 0002.jpg
-rw-rw-r-- 1 azureuser azureuser  473774 Mar 26 09:21 0003.png
-rw-rw-r-- 1 azureuser azureuser 4193680 Jun 13 09:40 0004.jpg
-rw-rw-r-- 1 azureuser azureuser  423325 Jun 10 12:53 0005.jpg
-rw-rw-r-- 1 azureuser azureuser 2278001 Jun 12 04:21 0006.jpg
-rw-rw-r-- 1 azureuser azureuser 1220517 Jun 13 14:44 0007.jpg
drwxrwxr-x 2 azureuser azureuser    4096 Jun 13 20:16 gifs

Her satırda ilgili dosya veya dizinle ilgili ayrıntılı bilgiler yer alır. Bu bilgiler arasında öğeye atanmış olan izinler, sahibi, bayt cinsinden boyutu, son değiştirilme zamanı ve dosya veya dizin adı bulunur.

cat komut

Bir dosyanın içeriğini görmek istediğinizi düşünelim. Bunun için cat komutunu kullanabilirsiniz. Dosya bir metin dosyası değilse çıktı çok anlamlı olmayacaktır. Aşağıdaki komut /etc dizininde depolanan os-release adlı dosyanın içeriğini gösterir:

cat /etc/os-release

Bu, çalıştırdığınız Linux dağıtımını size söylediğinden faydalı bir komuttur:

NAME="Ubuntu"
VERSION="18.04.2 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.2 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

/etc dizini özel bir Linux dizinidir. Sistem yapılandırma dosyalarını içerir. Ne yaptığınızı bilmiyorsanız bu dizindeki dosyaları silmemeniz gerekir.

sudo komut

Bazı Bash komutları yalnızca kök kullanıcı tarafından çalıştırılabilir; bir sistem yöneticisi veya süper kullanıcı. Yeterli ayrıcalıklara sahip olmadan bu komutlardan birini denerseniz komut başarısız olur. Örneğin yalnızca süper kullanıcı olarak oturum açmış olan kullanıcılar cat komutuyla /etc/at.deny içeriğini görüntüleyebilir:

cat /etc/at.deny

at.deny, daha sonra yürütülecek işleri göndermek için diğer Bash komutlarını kimlerin kullanabileceğini belirleyen özel bir dosyadır.

Çoğu zaman kök olarak çalıştırmak istemezsiniz; Bu çok tehlikeli. Süper kullanıcı olarak oturum açmadan yönetici ayrıcalığı gerektiren komutları çalıştırmak için ile komutların sudobaşına geleceksiniz:

sudo cat /etc/at.deny

sudo "superuser do" anlamına gelir. Bunu kullandığınızda, kabuğuna bu komut için kök kullanıcı izin düzeyiyle hareket ettiğinizi söylemiş olursunuz.

cd, mkdir ve rmdir komutları

cd, "dizini değiştir" anlamına gelir ve tam da bu işlemi yapar. Geçerli dizin yerine başka bir dizine geçer. Windows'da olduğu gibi bir dizinden başka bir dizine geçmenizi sağlar. Aşağıdaki komut, orders adlı geçerli dizinin alt dizinine geçer:

cd orders

Dizin adı olarak .. kullanıp bir üst dizine geçiş yapabilirsiniz:

cd ..

Bu komut giriş dizininize değişir; ilk oturum açtığınızda aldığınız:

cd ~

mkdir komutunu kullanarak dizin oluşturabilirsiniz. Aşağıdaki komut, geçerli çalışma dizininde orders adlı bir alt dizin oluşturur:

mkdir orders

Tek bir komutla bir alt dizin ve onun altında bir alt dizin daha oluşturmak isterseniz --parents bayrağını kullanın:

mkdir --parents orders/2019

Komutu rmdir bir dizini siler (kaldırır), ancak yalnızca boşsa siler. Boş değilse, bunun yerine bir uyarı alırsınız. Neyse ki komutunu kullanarak rm boş olmayan dizinleri (özyinelemeli) bayrağıyla -r birlikte silebilirsiniz. Komut daha sonra gibi rm -rgörünür.

rm komut

Komutun rm kısaltması "kaldır"dır. Beklediğiniz gibi dosyaları rm siler. Bu nedenle şu komut 0001.jpg dosyasını ortadan kaldırır:

rm 0001.jpg

Şu komut da geçerli dizindeki tüm dosyaları siler:

rm *

rm komutunu kullanırken dikkatli olun. Oldukça tehlikeli bir komuttur.

rm komutunu -i bayrağıyla kullandığınızda silme işleminden önce bir kez daha düşünme şansınız olur:

rm -i *

-i bayrağını her rm komutunda kullanmayı alışkanlık haline getirin. Bu sayede Linux'un en çok kafa karıştıran komutlarından birinden zarar görmeden kurtulabilirsiniz. Düşünmesi bile korkutucu olan rm -rf / komutu ise sürücüdeki tüm dosyaları siler. Kök dizinin tüm alt dizinlerini ve onların alt dizinlerini yinelemeli olarak siler. -f ("zorlama") bayrağı, istemleri kaldırarak olası sorunları çözer. Bunu yapmayın.

orders adlı boş olmayan bir dizini silmek istiyorsanız rm komutunu şu şekilde kullanabilirsiniz:

rm -r orders

Bu komut orders alt dizinini ve diğer alt dizinler dahil olmak üzere içindeki her şeyi siler.

cp komut

cp komutuyla yalnızca dosyaları değil dizinleri (ve alt dizinleri) de kopyalayabilirsiniz. 0001.jpg ve 0002.jpg dosyalarını kopyalamak için şu komutu kullanın:

cp 0001.jpg 0002.jpg

0002.jpg zaten varsa Bash kullanıcıya sormadan değiştirir. Yapmak istediğiniz buysa oldukça kullanışlı bir komuttur ancak eski sürümün üzerine yazmak istemiyorsanız o kadar da iyi sayılmaz.

Neyse ki -i ("etkileşimli") bayrağını kullandığınızda Bash, var olan dosyaları silmeden önce sizi uyarır. Bu daha güvenlidir:

cp -i 0001.jpg 0002.jpg

Aynı anda birkaç dosyayı kopyalamak için joker karakterler kullanabilirsiniz. Geçerli dizindeki tüm dosyaları photos adlı bir alt dizine kopyalamak için şunu yapın:

cp * photos

photos adlı alt dizindeki tüm dosyaları images adlı alt dizine kopyalamak için şunu yapın:

cp photos/* images

Bu komut, images dizininin önceden oluşturulmuş olduğunu kabul eder. Dizin oluşturulmadıysa oluşturmak ve photos alt dizinin içeriğini kopyalamak için şu komutu kullanabilirsiniz:

cp -r photos images

"-rÖzyinelemeli" anlamına gelir. Bayrağın -r bir avantajı da, fotoğraflar kendi alt dizinlerini içeriyorsa, bunların da images dizinine kopyalanmış olmasıdır.

ps komut

ps komutu, çalışmakta olan tüm işlemlerin anlık görüntüsünü verir. Bağımsız değişken olmadan tek başına tüm kabuk işlemlerinizi gösterir; Başka bir deyişle, çok fazla değil. Ancak -e bayrağını eklediğinizde olay tamamen değişir:

ps -e

-e, çalışan tüm işlemleri listeler ve genellikle çok sayıda işlem vardır.

Sistemde çalışan işlemler hakkında daha kapsamlı bir görünüm elde etmek için -ef bayrağını kullanın:

ps -ef 

Bu bayrak çalışan tüm işlemlerin adlarını, işlem kimlik numaralarını (PID), üst öğelerinin PID değerlerini (PPID) ve ne zaman başladıklarını (STIME) gösterir. Ayrıca varsa hangi terminale bağlı olduklarını (TTY), ne kadar CPU süresi olduğunu (TIME) ve bunların tam yol adlarını gösterir. Aşağıda kısaltılmış bir örnek verilmişti:

UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 13:35 ?        00:00:03 /sbin/init
root          2      0  0 13:35 ?        00:00:00 [kthreadd]
root          3      2  0 13:35 ?        00:00:00 [rcu_gp]
root          4      2  0 13:35 ?        00:00:00 [rcu_par_gp]
root          5      2  0 13:35 ?        00:00:00 [kworker/0:0-cgr]
root          6      2  0 13:35 ?        00:00:00 [kworker/0:0H-kb]
root          8      2  0 13:35 ?        00:00:00 [mm_percpu_wq]
root          9      2  0 13:35 ?        00:00:01 [ksoftirqd/0]
root         10      2  0 13:35 ?        00:00:02 [rcu_sched]

Ayrıca bazı belgelerde ps komutunun şu şekilde kullanıldığını da görebilirsiniz:

ps aux

ps aux ve ps -ef aynıdır. Bu iki farklı kullanımın nedeni, POSIX Unix sistemleri (Linux'ta bunlardan biridir) ve BSD Unix sistemleri (macOS en yaygın örneğidir) arasındaki geçmişe dayanan farklardır. Başlangıçta POSIX sistemlerinde -ef kullanılırken BSD için aux gerekiyordu. Günümüzde iki işletim sistemi ailesi de iki biçimi birden kabul eder.

Bu, tüm Linux komutları için neden kılavuzu dikkatli bir şekilde incelemeniz gerektiğini gösteren noktalardan biridir. Bash'i öğrenmek ikinci bir dil olarak İngilizce öğrenmek gibidir. Kuralların birçok istisnası vardır.

w komut

Sistemlerdeki kullanıcı sayıları sürekli değişir ve bazen ortamda istemediğiniz kullanıcılar olabilir. Bir çalışan diğer fırsatları takip etmek üzere ayrıldığında, çalışanın artık şirketin bilgisayar sistemlerinde oturum açamamasını sağlamak için sysadmin çağrılır. Sysadmin'lerin kimlerin oturum açtığını ve kimlerin oturum açmaması gerektiğini bilmesi de beklenir.

Linux, sunucularınızdaki kullanıcıları görmek için w ("kim") komutunu sunar. Bu komut, bilgisayar sistemindeki kullanıcılar ve bu kullanıcıların etkinlikleri hakkında bilgiler görüntüler. w komutu kullanıcı adlarını, IP adreslerini, oturum açtıkları zamanı, çalıştırmakta oldukları işlemleri ve bu işlemlerin ne kadar zaman aldığını gösterir. Sistem yöneticileri için oldukça değerli bir araçtır.

Bash G/Ç işleçleri

Yalnızca Bash komutlarını ve bunların seçeneklerini kullanarak Linux'ta birçok işlem yapabilirsiniz. Ancak asıl potansiyele komutları G/Ç işleçleri kullanarak birleştirdiğinizde ulaşırsınız:

  • <, girişi klavye dışında bir kaynağa yönlendirmenizi sağlar
  • >, çıkışı ekran dışında bir hedefe yönlendirmenizi sağlar
  • >> aynı işlemi tekrarlamanızı ancak üzerine yazma yerine ekleme yapmanızı sağlar
  • | bir komutun çıkışını başka bir komutun girişi olarak yöneltmenizi sağlar

Geçerli dizindeki her şeyi listelemek istediğinizi ancak çıkışı listing.txt adlı bir dosyaya yazmak istediğinizi düşünün. Aşağıdaki komut tam da bunu yapar:

ls > listing.txt

listing.txt dosyası mevcutsa üzerine yazılır. Bunun yerine >> işlecini kullanırsanız ls çıkışı listing.txt dosyasındaki verilere eklenir:

ls >> listing.txt

Boru operatörü güçlüdür (ve sıklıkla kullanılır). İlk komutun çıkışını ikinci komutun girişine yönlendirir. Büyük bir dosyanın içeriğini görüntülemek için cat komutunu kullandığınızı ancak içeriğin okunamayacak kadar hızlı aktığını düşünelim. Sonuçları more gibi bir komuta yönelterek çıkışı daha kolay yönetilebilir hale getirebilirsiniz. Aşağıdaki komut, çalışmakta olan tüm işlemleri listeler. Ancak ekran dolduktan sonra çıkış duraklatılır ve Enter ile bir sonraki satıra geçebilirsiniz:

ps -ef | more

Ayrıca yalnızca ilk birkaç satırı görmek için çıkışı head komutuna yöneltebilirsiniz:

ps -ef | head

Veya çıkışı yalnızca "daemon" sözcüğünü içeren satırları içerecek şekilde filtrelemek istediğinizi varsayalım. Bunun bir yolu, çıktıyı ps Linux'un kullanışlı grep aracına göndermektir:

ps -ef | grep daemon

Çıkış şu şekilde görünebilir:

azureus+  52463  50702  0 23:28 pts/0    00:00:00 grep --color=auto deamon
azureuser@bash-vm:~$ ps -ef | grep daemon
root        449      1  0 13:35 ?        00:00:17 /usr/lib/linux-tools/4.18.0-1018-azure/hv_kvp_daemon -n
root        988      1  0 13:35 ?        00:00:00 /usr/lib/accountsservice/accounts-daemon
message+   1002      1  0 13:35 ?        00:00:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
daemon     1035      1  0 13:35 ?        00:00:00 /usr/sbin/atd -f
root       1037      1  0 13:35 ?        00:00:00 /usr/bin/python3 -u /usr/sbin/waagent -daemon
root       1039      1  0 13:35 ?        00:00:00 /usr/lib/linux-tools/4.18.0-1018-azure/hv_vss_daemon -n
azureus+  52477  50702  0 23:28 pts/0    00:00:00 grep --color=auto daemon

Dosyaları da giriş olarak kullanabilirsiniz. Standart giriş varsayılan olarak klavyeden gelir ancak bu da yönlendirilebilir. Klavye yerine dosyadan giriş almak için < işlecini kullanın. Sistem yöneticilerinin görevlerinden biri de dosyaların içeriğini sıralamaktır. sort komutu metinleri alfabetik olarak sıralar:

sort < file.txt

Sıralanmış sonuçları yeni bir dosyaya kaydetmek için giriş ve çıkışı yönlendirebilirsiniz:

sort < file.txt > sorted_file.txt

G/Ç işleçlerini kullanarak Linux komutlarını istediğiniz şekilde birbirine bağlayabilirsiniz. Aşağıdaki komutu inceleyin:

cat file.txt | fmt | pr | lpr

cat çıkışı fmt komutuna, fmt çıkışı pr komutuna gider ve bu şekilde devam eder. fmt, sonuçları düzenli bir paragraf şeklinde biçimlendirir. pr sonuçları sayfalara ayırır. lpr komutu da sayfalara ayrılan çıkışı yazıcıya gönderir. Tüm bunlar tek bir satırda gerçekleşir!