Bash komutları ve işleçleri
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 sudo
başı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 -r
gö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!