Linux'te pdflerin birleştirilmesi

03:07

Linux'te birden fazla pdf'i birleştirmek için pdftk programı kullanılabilir.



Sisteminizde pdftk kurulu değilse kurulumun ardından (sudo apt-get install pdftk) aşağıda gösterildiği gibi komut çalıştırılarak pdf dosyaların birleştirilme işlemi gerçekleştirilir.



lsof komutu ve açılan dosyalar

05:01 ,
lsof komutu işletim sisteminde açılan dosyaları listeler. Linux'te her şey dosya olduğu için kullanım imkanları oldukça fazladır.



  • lsof -i tcp : TCP connectionlarını listeler
     
  • lsof -i udp : UDP connectionlarını listeler
     
  • lsof -i -u <user> :parametre olarak verilen user'ın hangi dosyaları açtığını listeler.
     
  • lsof -i :3128 :3128 portunu kimin kullandığını gösterir
     
  • lsof -i :tüm network connectionlarını listeler.
     
  • lsof -p 1753 :belli bir processin açtığı dosyaları listeler. 

lsof çıktısında bilinmeyen kısaltmaların anlamı:

TYPE – dosya tipleri ile ilgili kısaltmalar

  •     REG – Regular File
  •     DIR – Directory
  •     FIFO – First In First Out
  •     CHR – Character special file

FD –file descriptor tipleri

  •     cwd – Current Working Directory
  •     txt – Text file
  •     mem – Memory mapped file
  •     mmap – Memory mapped device
  •     NUMBER – Represent the actual file descriptor. 


strace komutu ile sistem çağrılarını ve sinyalleri izleme

Linux'te bir process'in yaptığı çağrıları izlemek, runtime 'de neler yaptığına ilişkin fikir vermek ve sistem programlama ile ilgili testler yapmak için kullanılabilecek güzel bir linux programlarından biridir. Basitce kullanımı strace ve ardından executable dosyadır. man programını inceleyalim:



strace parametreleri:


  • -e parametresi ile sadece bir fonksiyon için çıktı üretebiliriz.

  • -o parametresi ile aşina olduğumuz üzere çıktıları bir dosyaya yönlendirebiliriz.
  • -t parametresi ile zamansal olarak sistem fonksiyonlarının çalışma dilimlerini gösterir.
  • -e trace=open ile open ile ilişkili olan fonksiyonları da ekrana basar
  • -c ise raporsal bir çağrı çıktısı üretir.



  • Var olan bir process'i de trace edebiliyoruz. Yapmamız gereken şey önce takip edilmek istenen process'in id'sini bulmak
    • ps -C firefox
         PID TTY          TIME CMD
         4029 pts/2    00:00:01 firefox
    • ardından strace komutunu çalıştırmak
      sudo strace -p 4029 -o firefox_trace.txt
ardından dosyayı okuyarak firefox'un hangi sistem çağrıları yaptığını görebiliriz.

    • tail -f firefox_trace.txt

ssh root bağlantı problemi

03:19


Uzak makinaya SSH bağlantısı yaparken karşımıza çıkacak problemlerden biri de root bağlantı yaparken gerekli iznin olmamasıdır. Bunu için yapılması gereken şey "/etc/ssh/sshd_config" dosyasını açarak PermitRootLogin yes ayarının yapılması gerekir.



Linux'te dosya sıkıştırma işlemleri

02:44 , ,



  • tar -zcvf    <dosyaadi.tar.gz>  <directory>
    belirtilen dizini dosyaadi.tar.gz şeklinde sıkıştırır.
      
  • tar -zxvf <dosyaadi.tar.gz> 
    verilen sıkıştırılmış dosyayı açar.
      
  • tar -cvf data.tar getopt/
    belirtilen dizinin tar arşiv dosyası oluşturur.
      
  • tar -xvf getopt.tar
    • tar -xvf getopt.tar bulunduğu dizine arşiv dosyasını çıkartır.
    • tar -xvf getopt.tar -C /home/workspace/getopt/get/hello/get/ belirtilen dizine arşiv dosyasını çıkartır.
  • apt-get install zip
    • zip -r data * bulunduğu dizini ve alt dizinleri sıkıştırır. Klasörle aynı isimde zip dosya oluşturur.
       
    • zip data * bulunduğu dizinin tamamını ve alt dizinlerin sadece klasörlerini sıkıştırır. Alt klasörlerin içeriğini zip'e dahil etmez.

       
  • apt-get install unzip
    • unzip data.zip bulunduğu dizine çıkartır.
       
    • unzip -l data.zip zip dosyanın içeriğini listeler.
       
    • unzip -tq data.zip zip içeriği ile ilgili özet bir bilgi yazdırır. -zip dosyada hata var mı yok mu gibi-
       
    • unzip data.zip  cv.doc sadece belirtilen dosyayı çıkartır.
        
    • unzip data.zip -d /tmp belirtilen dizine çıkartır. 

Kabuk (shell) nedir?

05:57 ,

 Kabuk temelde verilen komutlara uygun olarak ilgili komutları işleyen veya komutlara uygun olarak yeni process yaratan programdır denilebilir. İşletim sisteminde çekirdek ile kullanıcı arasında yer alır.



Kabuk scriptleri
LINUX sistemlerde sürekli yazmanın maliyetli olan işlemleri hızlı gerçekleştirmek için  diğer yüksek seviyeli programlama dilleri gibi kabukta da değişkenler, akış denetim yapıları, işlevleri bulunur ve bir dosyada toplanan komutların bütününe kabuk scriptleri denir. Kabuk bu komutları yorumlayan bir yapıya sahiptir. Bu da ona bir script language (yorumlamalı dil) özelliği katmaktadır. Kabuk programlam dili ile yazılan tüm betikler "#!/bin/bash" ile başlamalıdır. Kabuk bir yorumlayıcıdır (command interpreter ) ve komutları yorumlar-çalıştırır.


Kabuklar etkileşimli ya da etkileşimsiz kullanılabilirler. Etkileşimli kipte, girdi klavyeden kabul edilirken, etkileşimsiz kipte bir dosyadan okunur. Kabuk arayüzünde karşımıza çıkan
  • $ (dolar) işareti normal bir kullanıcı için varsayılan işarettir.
  • # (diyez) root kullanıcısı için varsayılan işarettir.
UNIX için bilinen kabuklar:
  • tcsh
  • bash (Bourne Again Shell) 
  • ve ksh (Korn Shell) gelmektedir.


Meta karakterler:
Kabuk için özel anlam ifade eden karakterlerdir. Kabuğumuzu daha verimli ve fonksiyonel olarak kullanmamızı sağlayan özel karakterlerdir. Mesela  pipe ( | ) karakteri bir komutun çıktısını diğer programa input olarak vermemizi sağlar.




Terminal ile ilgili faydalı scriptler

01:02 ,



history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
: history de bulunan en çok kullanılan komutları listeler.


while sleep 1;do tput sc;tput cup 0 $(($(tput cols)-29));date;tput rc;done &  
: terminalin sağ üst köşesine saat koyar.


ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/' : bulunduğunuz konumda ağaç yapısında dizin ağacını gösterir.


for code in {0..255}; do echo -e "\e[38;05;${code}m $code : Test"; done :256 rengin numeric karşılığını gösterir.


function man2pdf(){ man -t ${1:?Specify man as arg} | ps2pdf -dCompatibility=1.3 - - > ${1}.pdf; } 
: tanımlandıktan sonra  man2pdf ls ile pdf oluşturulur.


while true; do cat /proc/net/dev; sleep 1; done | awk -v dc="date \"+%T\"" '/eth0/{i = $2 - oi; o = $10 - oo; oi = $2; oo = $10; dc|getline d; close(dc); if (a++) printf "%s %8.2f KiB/s in %8.2f KiB/s out\n", d, i/1024, o/1024}' 
: show bandwidth in - out


cd /home/complicated/path/.I/dont/want/to/forget 
pushd /tmp ile bulunduğunuz dizini push edin 
cd ???
cd ???
popd (returns you to /home/complicated/path/.I/dont/want/to/forget) daha sonra popd ile tekrar kullanabilirsiniz.

Terminal ile ilgili kısa bilgiler -2

01:02 ,


  • lshw -html > hardware.html donanımları html çıktısı olarak verir
     
  • watch vmstat -sSM ram kullanım yüzdelerini gösterir.
     
  • zdump Turkey Türkiyenin o anki zamanını gösterir.
     
  • dmidecode -t bios bios bilgilerini ekrana basar
     
  • hdparm -t /dev/sda test disc read speed
     
  • hwinfo --block --short mount edilebilir diskleri(Drives/Partitions/BlockDevices) gösterir.
     
  • dmidecode | grep Product kullanılan bilgisayar modellerini gösterir.
     
  • ps aux | sort -nk +4 | tail memory'yi en çok kullanan 10 program
     
  • cat /etc/issue ekrana hangi distrosunun kurulduğunu ekrana basar.
     
  • man hier Dosya sistemi hiyerarşisini ekrana basar.
     
  • Dizin sembolleri
    • .    bulunulan dizin
    • ..   bir üst dizin
    • -    bir önceki dizin
    • ~   kullanıcının ev dizini
       
  • file <dosya adı>
    verilen dosyanın tipini verir.
     
  • bash <x.sh>
    x.sh'ın çalıştırılmasını sağlar.
     
  • head -n 6
    üstten 6 satırın gösterilmesini sağlar.
     
  • ipath="//home/devserver/workspace/procom"
    cd $ipath ile başarılı bir şekilde aliasing işleminin yapıldığı görülecektir.
     
  • shutdown -h now      :kapama işlemini gerçeleştirir.
    shutdown -r now      :yeniden başlama işlemini gerçeleştirir.
    shutdown -r 17:50   :zamansal olarak yeniden başlama işlemini gerçeleştirir.

Network ile ilgili faydalı Bash komutları -1

06:54 ,



  • lsof -Pni4 | grep LISTEN 
    açık portları kontrol eder.
  • lsof -i tcp:80 
    80. portu kimin kullandığını gösterir.
  • lsof -Pan -i tcp -i udp  
    PID ile birlikte port listesini verir.
  • lsof -P -i -n 
    internet bağlantısını kullanan process'leri gösterir.
  • lsof -i 
    Gerçek zamanlı olarak network servisinin aktivitelerini izlememezi sağlar.
  • watch "netstat -plan | grep 80|awk {'print \$5'} | cut -d: -f 1 | sort | uniq -c | sort -nk 1" Açık olan httpd bağlantılarını görüntüler.
  • netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -caktif bağlantıları listeler.
  • fuser -v 80/tcp 80. portu hangi user ve process'in kullandığını gösterir.
  • tcpdump -i eth0 -n ip | awk '{ print gensub(/(.*)\..*/,"\\1","g",$3),$4, gensub(/(.*)\..*/,"\\1","g",$5) }' | awk -F " > " '{print $1"\n"$2}' 
    host cihazla iletişim içinde olan bilgisayarları gösterir.
  • watch -n 1 "netstat -tpanl | grep ESTABLISHED" 
    TCP açık bağlantıları izler.
  • ss -p
    bağlantıda olan process' leri gösterir.
  • curl ifconfig.me
    dış IP adresini geri döndürür.
  • curl ip.appspot.com
    dış IP adresini geri döndürür.
  • ifconfig | convert label:@- ip.png  
    komutun çıktısını png formatında kaydeder.
  • netstat -town 
    tcp bağlantılarında KeepAlive sayacı
  • iperf -s
    Network verimlilik test işlemleri için
    server için: iperf -s
    client için: iperf -c ip.add.re.ss

Terminal ile ilgili kısa bilgiler -1

01:01 ,


  • man ascii
    ASCII tablosuna erişmek için kullanılır.
     
  • CTRL +l
    Terminal ekranını temizler.
     
  • CTRL +u
    Cursor'un bulunduğu satırı siler.
     
  • CTRL +w
    Cursor'un bulunduğu satırdaki kelimeleri siler.
     
  • <space>command
    Çalıştırılan komutun history' de yer almasını engeller.
     
  • showkey -a
    Klavyeden girilen karakterlerin ASCII karşılığını gösterir.
     
  • pushd /tmp
    o an çalışılan dizini stack'e atar daha sonra popd ile geri alırız.
     
  • :> file.py
    touch file.py 'ye alternatif
     
  • CTRL +z
    Mevcut process'i durdurur.
     
  • fg
    Durdurulan process'i geri başlatır.
     
  • pinfo
    info sayfası
     
  • truncate -s0 <filename>
    filename isminde dosya oluşur. ( touch file.py 'ye alternatif )
     
  • timeout 5s command
    komut çalışır ve verilen süre içinde bitmezse sonlandırılır.
     
  • nl <dosya adı>
    dosya içeriğine satır numarası vererek ekrana basar.
     
  • vim -x <FILENAME>
    dosyaya şifre koyarak kaydeder.
     
  • gcc -dM -E - < /dev/null
    gcc predefined MACROLARI gösterir.
     

iki dosyanın içeriğini karşılaştırma

05:35



iki dosyanın içeriğini karşılaştırmak için kullanılacak komutlardan biri de diff komutudur. man sayfası aşağıdaki gibidir.



 diff idiff-1.c idiff-2.c komutu çalıştırıldığında bir çıktı oluşmaz bu da dosyaların benzer olduğunu gösterir.

idif-2.c içeriğine bir boşluk karakteri koyulup komut çalıştırıldığında :





Burada dikkat edilmesi gereken diğer bir nokta dosya içerikleri aynı yerleri farklı ise bu durumda yapılması gereken sort ile dosyaları aynı kurala göre sıralamak ardından diff komutunu çalıştırmak olacaktır.

  • sort -k 1 idiff-1.c > idiff-1-new.c
  • sort -k 1 idiff-2.c > idiff-2-new.c
  • diff idiff-1-new.c idiff-2-new.c


DHCP server'dan farklı IP adresi alma

08:13 , ,

Bir network'te DHCP server çoğunlukla size aynı IP adresini verme eğilimindedir. Farklı bir IP adresi istediğimizde yapmamız gerekenler aşağıdaki gibidir:


  • sudo dhclient -r eth0 komutu girilir
  • sudo dhclient eth0 çalıştırıldığında IP adresinize bakarsanız yeni bir IP adresi aldığınız görülecektir.

Ikinci bir yöntem ise ifconfig ile istediğiniz IP adresini alma:

  • ifconfig eth0 192.168.1.? netmask 255.255.255.0 up
  • ifconfig eth0

Sistem Logged On bilgilerinin alınması

06:56

w: komut çalıştırıldığı anda bağlantı yapılan connection'ları listler




last: history komutu gibi bu komutta sistem bağlantılarının geçmişini gösterir.





Sistemin band genişliğini izleme (Bandwidth Monitoring Tools)

04:16

Linux'te network band genişliğini izlemek için temel düzeyde kullanabileceğimiz birkaç program bulunmakta. Aşağıda neler olduğu, nasıl kullanılacağı ve ekran görüntüsüne yer verdim.

TCPTRACK:



BMON:


IFTOP:


Speedometer:

apt-get install python-urwid
sudo cp speedometer.py /usr/local/bin/speedometer (speedometer.py dosyasını internette bulabilirsiniz)
sudo chown root: /usr/local/bin/speedometer
sudo chmod 755 /usr/local/bin/speedometer

/usr/local/bin/speedometer -tx eth0
/usr/local/bin/speedometer -rx eth0




Linux Açılış Süreci ( Linux Boot Process -Startup Sequence )

06:48


Linux işletim sisteminin açılış süreci BIOS'un açılışı ile başlar BIOS giriş çıkışları kontrol eder. Boot Loader programını bulur. Boot Loader'ı bulduktan sonra memory'ye programı yükler ve kontrolü ona bırakır. Kısaca BIOS MBR yükler ve çalıştırır.

MBR bootable diskin 1. sektöründe bulunmaktadır. Yeri genellikle /dev/sda veya /dev/hda olan MBR 512 byte'dan küçük boyuttadır. Üç parçadan oluşur:
  1. İlk 446 bytes Primary boot loader bilgisi
  2. Sonraki 64 bytes Partition table bilgisi
  3. Son 2 bytes MBR validation check bilgisi

Kısaca MBR GRUB'u eski sistemlerde LILO 'yu yükleyip çalıştırmakla yükümlüdür.

GRUB (Grand Unified Bootloader) kısaca Kernel and initrd imajlarını yükler ve çalıştırır. Eğer sistemininzde birden fazla kernel kurulu ise bu aşamada hangisinin açılacağı size sorulur. GRUB ayrıca dosya sistemi hakkında bilgiye sahiptir. Eski sistemlerde bulunan LILO ise dosya sistemini anlayamamaktaydı.

Kernel /sbin/init programını çalıştırır. Root dosya sistemini mount eder. initrd (Initial RAM Disk) kernel tarafından gerçek root file sistem mount edilene kadar geçici root file sistem olarak kullanılır.

Init Process'i başlatılırken başlangıç seviyeleri (run level):
  •     0 – halt
  •     1 – Single user mode
  •     2 – Multiuser, without NFS
  •     3 – Full multiuser mode
  •     4 – unused
  •     5 – X11
  •     6 – reboot

  • Sistemin o anki run level'ini öğrenmek için:  runlevel  veya who -r komutu kabuğa girilebilir. 
  • Sistemin run level'ini değiştirmek için ise aşağıda görüldüğü gibi rc-sysinit.conf  dosyası açılır ve ilgili yer değiştirilir.



Ayrıca init process'inin PID'sine bakılırsa 1 olduğu görülecektir.


init processinin ardından runlevel denilen kullanıcı seviyesinde programlar çalışmaya başlar. Bu programlar
  •     Run level 0 – /etc/rc.d/rc0.d/
  •     Run level 1 – /etc/rc.d/rc1.d/
  •     Run level 2 – /etc/rc.d/rc2.d/
  •     Run level 3 – /etc/rc.d/rc3.d/
  •     Run level 4 – /etc/rc.d/rc4.d/
  •     Run level 5 – /etc/rc.d/rc5.d/
  •     Run level 6 – /etc/rc.d/rc6.d/

şeklinde klasörlerde listelenmiştir. Bu klasörlerde genelde sembolik linkleri olan programlar başlatılarak boot işlemi tamamlanmış olur. Eğer sizde açılış sürecinde bir program çalıştırılmasını istiyorsanız link'ini veya çalıştırılabilir dosyanın kendisini uygun Run Level klasörünün içine koyarsanız init process'inin ardından çalışacaktır.







Mobaxterm ( Winscp ve Putty 'ye alternatif )

22:48 ,
MobaXterm winscp ve putty 'ye alternatif ve hatta daha yetenekli bir araç. Uzak makinalara bağlanmada şu ana kadar gördüğüm en yetenekli uygulama diyebilirim. Adresi: http://mobaxterm.mobatek.net/

MobaXterm uzak bir server'da bağlantı kurma konusunda putty benzeri bir iş çıkarma, dosya kopyalama,silme gibi işlemlerde Winscp benzeri çalışmaktadır. Bunun yanında MobaXterm'i faklı kılan özellik ise karşıda kurulu olan bir uygulamayı ( Eclipse,Kate vb. ) açarak bu uygulamaların client tarafta kurulu olmasına gerek kalmadan çalıştırabilme yeteneğidir.




Test amaçlı olarak server makinasına Kate text editör kurulmuş ve uzak terminalden çalıştırılarak editörün açılabildiği gözlemlenmiştir.




locate ile daha hızlı dosya arama

06:13

locate dosya aramada hızlı sonuç alınabilecek bir shell komutudur. Bu komutu kullanırken dikkat edilmesi gereken nokta aslında dosya arama işinin bir veri tabanından yapıldığı ve bu veri tabanının günlük olarak update edildiğidir. Bu nedenle yapılması gereken şey updatedb komutu çalıştırılarak veri tabanının güncellenerek ondan sonra arama işlemi yapılması daha sağlıklı sonuçlar elde edilmesini sağlamış olacaktır. Aşağıda bununla ilgili bir örnek bulabilirsiniz.


man sayfası yukarıdaki gibidir. dosyayı sadece isme göre aradığı unutulmamalıdır. Bu konuda find 'den daha az yeteneklidir.


locate find ile aramadan daha hızlı sonuçlar ürettiği kendi sisteminizde arama yaparken de net olarak göreceksiniz.


Bir process'in çalışmasından itibaren sistem çağrılarını ve signal' lerini izleme


strace bir programın çalıştırdıktan sonra neler yaptığı ile ilgili bilgiler veren bir komuttur. Bu komut sayesinde sistem çağrılarının izi sürülebilir ve hangi dosyalar açılmış bunlarla ilgili olarak bilgileri çıkartır.




man sayfası strace'in nasıl kullanılacağına ilişkin bilgiler vermektedir. Yukarıda kısa bir ekran görüntüsüne yer verdim. Şimdi strace man diyerek man programı çalışırken neler yaptığını kısaca inceleyelim:


/usr/bin/man path'indeki programın çalıştığı görülmektedir. access - mmap - open stat ...  gibi sistem fonksiyonlarının çağrıldığı görülmektedir. Daha pek çok bilgiye çıktılara bakarak incelenebilir. Sistem programlama ile ilgili programlar yazarken bu komut yardımıyla teknik bilgi edinilebilir.

echo "Hello World"

05:56

Nuri Bilge Ceylan artık pek anlatmaya gerek yok kanımca. Benim açımdan bozkırı Ahmet Uluçay' la birlikte en iyi anlayan sinemacılar olarak düşünmekteyim. Ahmet Uluçay rahmetli olduğundan beri elimizde bu konuda tek kalan isim. 







Bu yolculuğun sonunda biz de çürüklerin arasında yerimizi alacak mıyız bilmiyorum ama burada Linux ile ilgili teknik bilgiler vermeye çalışacağım.