UNIX pipe operatörü, UNIX ve UNIX benzeri işletim sistemlerinin geliştirilmesinde muazzam bir adımdır. Temel programların giriş ve çıkışlarını birbirine bağlayarak kullanıcıların karmaşık bilgi işlem görevlerini gerçekleştirmelerine olanak tanıdı. Bu makale, SSH protokolüne sahip bir ağ üzerinden Linux’ta bir UNIX kanalının nasıl kullanılacağını göstererek bunu genişletmektedir.
Unix Pipeline’ı Anlamak
Unix’teki (ve buna bağlı olarak Linux) pipe operatörü, programları birbirine zincirlemek ve birlikte çalışmalarını sağlamak için kullanılır. Örneğin, cat kullanarak bir dosyanın içeriğini gösterebilirsiniz, ancak dikey çizgi (|) kullandıysanız, dosyanın okunmasını kolaylaştırmak için cat komutunu more komutuna zincirleyebilirsiniz.
cat file1 | more
Buradaki temel fikir şudur: program1 fileX | program2. Ancak bu sadece bir dosya ve iki programla sınırlı değil. Pipe operasyonu, aklınıza gelebilecek kadar çok değiştiriciyle ihtiyaç duyduğunuz kadar gelişmiş olabilir.
SSH durumlarında dikey çizgiyi (|) iyi şekilde kullanmanın bazı yolları şunlardır.
Sıkıştırılmış Dizinleri Otomatik Olarak Aktarın
UNIX kanallarını kullanmanın en yaygın yollarından biri, bir programın çıktısını yerel sistemin herhangi bir yerindeki bir dosyaya depolamaktır. Örneğin echo “Merhaba, MakeTechEasier!” | tee Hello, “Merhaba, MakeTechEasier!” dizesini saklarken aynı zamanda echo programını çalıştıracaktır. “Merhaba” dosyasının içinde.
Bununla birlikte, dizinleri iki Linux bilgisayarı arasında aktarmak için bu fikri kullanabilirsiniz. Bunu yapmak için tar kullanarak göndermek istediğiniz klasörü okuyun ve ardından bunu SSH arka plan programınıza aktarın:
tar czf - "~/Documents/myfolder" | ssh ramces@remote.host "tar xzf - -C ~/Documents/"
Bu komut, klasörünüzü bir tar arşivinde paketleyecek ve onu komutun standart çıktısına gönderecektir. UNIX kanalı daha sonra bu verileri okuyacak ve SSH kullanarak uzaktaki Linux ana makinenize gönderecektir.
Dosyalarınızı uzak ana bilgisayarlardan çıkarmak için bu komutu da tersine çevirebilirsiniz:
ssh ramces@remote.host "tar czf - ~/Documents/myfolder" | tar xzf - -C "~/Documents/"
Uzak Bilgisayarlardan Dosya Aktarma ve Alma
Ağ üzerinden tek tek dosyalar göndermek için pipe operaatörü ve SSH’yi de kullanabilirsiniz. Bu, bir dosyanın içeriğini yüklemenin ve bunu SSH yoluyla göndermenin bir yolu olarak cat’i kullanarak çalışır:
cat < my.local.file | ssh ramces@remote.host "cat > my.remote.file"
Uzak bilgisayar, yerel cat işleminden çıktı akışını alacak ve dosyayı olduğu gibi yeniden oluşturacaktır.
Uzak bilgisayardan bir dosya almak için komutun sırasını tersine çevirmeniz ve uzak dosyanızın yolunu sağlamanız gerekir:
ssh ramces@remote.host "cat < my.remote.file" | cat > my.local.file
Sürücüleri Uzaktan Yedekleme ve Geri Yükleme
Dosya ve dizin göndermeye benzer şekilde, Linux’taki tüm sürücüleri bir UNIX kanalı ve SSH ile uzaktan yedeklemek mümkündür. Bu, iş yeri dışında hızlı yedeklemeler oluşturmak istiyorsanız ve şu anda yedek bir fiziksel sürücünüz yoksa yararlı olabilir.
Bir sürücünün tamamını yedeklemek için, yedeklemek istediğiniz sürücüye “if=” değişkeni ayarlanmış olarak dd’yi çalıştırın, ardından bunu SSH arka plan programınıza aktarın:
sudo dd if=/dev/sda | ssh ramces@remote.host "dd of=sda.img"
Bu komutu tersine çevirmek aynı zamanda uzak makinedeki disk görüntüsünü fiziksel diske geri yüklemenize de olanak tanır:
ssh ramces@remote.host "dd if=sda.img" | sudo dd of=/dev/sda
Ayrıca bu SSH kanalı sözdizimi ayrı disk bölümleriyle de çalışacaktır. Örneğin, sisteminizde “/dev/sda4” içerisinde bir /home bölümü varsa, bunun bir yedeğini oluşturmak için aşağıdaki komutu çalıştırabilirsiniz:
sudo dd if=/dev/sda4 | ssh ramces@remote.host "dd of=home.img"
Ses Girişini Uzak Bir Makineye Yönlendirme
SSH borularının faydalarından biri, uzaktaki makinelerle sanki yerel bir kaynakmış gibi etkileşim kurmanıza olanak sağlamasıdır. Bu, bir sistemin ses girişi gibi cihaz dosyalarına erişme yeteneğini de içerir.
Bunu yapmak için SSH kullanarak uzak bir ALSA alt kabuğunu çalıştırın ve çıktısını yerel ALSA arka plan programınıza gönderin:
ssh ramces@remote.host "arecord -f cd" | aplay
Bu, uzak makinedeki varsayılan ses giriş cihazını dinleyecek ve sisteminizde duyduklarını çalacaktır. Bununla birlikte, komutları ters çevirmek, yerel makinenizin ses girişini uzaktaki ana makinenizin ses çıkışına gönderecektir:
arecord -f cd | ssh ramces@remote.host "aplay"
ALSA SSH kanalı, onu diğer ses çalma araçlarıyla birleştirdiğinizde de çalışacaktır. Örneğin, arecord çıktısını bir SSH kanalından ffmpeg’e gönderebilirsiniz:
ssh ramces@remote.host "arecord -f cd" | ffplay -nodisp -
Uzak Web Kamerasından Canlı Video Akışı
Linux’ta SSH borularının bir başka harika kullanımı da canlı video web kamerası yayınlarının yayınlanmasıdır. Tıpkı seste olduğu gibi, bu da uzaktaki bir ana bilgisayarın aygıtından yararlanmanıza ve çıktısını yerel makinenizde oluşturmanıza olanak tanır.
Uzak bir ana bilgisayarın web kamerasından akış sağlamak için SSH’yi bir ffmpeg alt kabuğuyla çalıştırın ve ardından bunu yerel makinenizdeki bir video oynatma istemcisine yönlendirin:
ssh ramces@remote.host "ffmpeg -r 14 -s 640x480 -f video4linux2 -i /dev/video0 -f matroska -" | mpv --demuxer=mkv /dev/stdin
Bu komut, ham video çıkışını uzak makinenizdeki ilk web kamerasından yayınlayacaktır.
Uzak web kameranızdaki görüntüleri ayrı bir dosyaya kaydetmek de mümkündür. Bunu, verileri video oynatıcınıza yönlendirmeden önce SSH kanalından tee’ye göndererek yapabilirsiniz:
ssh ramces@remote.host "ffmpeg -r 14 -s 640x480 -f video4linux2 -i /dev/video0 -f matroska -" | tee my_recording.mkv | mpv --demuxer=mkv /dev/stdin
Uzak Konsolda Metin Yazdırma
Ses ve videonun yanı sıra, uzaktaki bir makinenin TTY’sine ham metin göndermek için SSH kanallarını da kullanabilirsiniz. GUI’si olmayan bir sisteme durum mesajları göndermek istiyorsanız bu kullanışlıdır.
Başlamak için yerel makinenizde bir FIFO kanalı oluşturun:
mkfifo my-fifo
FIFO’nuzla bir dinleme kuyruğu komutu çalıştırın ve çıktısını bir SSH arka plan programına gönderin:
tail -f my-fifo | ssh root@remote.host "cat > /dev/tty0"
echo komutunu kullanarak metin verileri göndererek yeni FIFO kanalınızın ağ üzerinden çalışıp çalışmadığını test edin:
echo "Hello, MakeTechEasier!" > my-fifo
Not: Makinenizin TTY’sine metin göndermek yalnızca makinenin root hesabıyla oturum açtıysanız işe yarar.
Uzak Verileri Yerel Panoya Aktarma
Sistem panosunun en büyük dezavantajı yalnızca yerel makineyle çalışmasıdır. Birden fazla bilgisayarla çalışıyorsanız ve geçici dosyalar oluşturmadan veri aktarmak istiyorsanız bu bir sorundur.
Bunu düzeltmenin bir yolu, uzak bir dosyayı doğrudan yerel sistem panonuza okuyabilen ve gönderebilen bir SSH kanalı oluşturmaktır:
ssh ramces@remote.host "cat < ~/ramces.txt" | xclip -sel clipboard
Bu komut uzaktaki makinenize bağlanacak, cat yardımcı programını çalıştıracak ve ardından “ramces.txt” dosyasını okumaya başlayacaktır. İşlem tamamlandıktan sonra uzak verileri yerel makinenize geri gönderecek ve bunu sistem panonuza yönlendirecektir.
Ayrıca aşağıdaki komutu kullanarak sisteminizin geçerli panosunu uzaktaki makinenize bir dosya olarak gönderebilirsiniz:
xclip -sel clipboard -o | ssh ramces@remote.host "cat > ~/clip.txt"
Yazının orijinalini buradan okuyabilirsiniz.