Bash:

PSC_7 Komunikacja międzyprocesowa

  • IPC - InterProcess Communication

    mkfifo fff
    ll fff
  • tworzy fifo o nazwie fff

    cat fff &
  • tło wyświetli fff

    ls>fff
    ll fff
  • ... i wyświetla.

    cat fff &
    date>fff
    ll fff

    Top

Usuwanie rekursywne

find . -name plik -exec rm {} \; -print 
find . -type f -name plik -print | xargs rm 

Uwagi: W przypadku rozwiązania nr 1 przy każdym pliku wywoływany będzie osobny rm, używając xargs unikamy tej wady, dzięki czemu przy dużej ilości plików skrypt wykona się szybciej i mniej obciąży zasoby komputera.

find . -type f -name plik -print | sed 's/^/"/' | sed 's/$/"/' | xargs rm 

Uwagi: xargs czyta ze standardowego wejścia listę argumentów rozdzielonych spacjami lub znakami nowej linii. Argumenty zawierające spacje czy znaki nowej linii mogą być chronione poprzez ujęcie ich w cudzysłów podwójny, pojedynczy lub w backslashe. Powyższa komenda zawiera zabezpieczenie przed problemem spacji czy znaku nowej linii ("entera") w nazwie pliku.
Top

wget

  • -b background
  • -q quiet
  • -nc no clobber (nie przebijać - nie pobierać tego samego)

  • -c continue
  • -k --convert-links
  • -K --backup-converted
  • -m --mirror

  • -p pobiera całą stronę z wymaganymi plikami

    wget -r -l 2 http://I-ośrodek/1.html

    bez obrazka w 3.html //druga podstrona

    wget -r -l 2 -p http://I-ośrodek/1.html     

    z obrazkiem

    wget -r -l 1 -p http://I-ośrodek/1.html     

    jedna podstrona

    wget -p http://I-ośrodek/1.html         

    pojedyncza strona

    wget -r -l1 --no-parent -A.gif http://www.server.com/dir/

    tylko gif'y z katalogu
    Top

wget time

wget url &
WGETPID=$!
sleep (number of seconds to record for)
kill $WGETPID

-

LENGTH=(length of program in minutes)
wget url &
WGETPID=$!
sleep $((LENGTH*60))
kill $WGETPID
  • cron:

    start

    nohup wget url &
    echo $! > /tmp/recording-pid

    stop

    if ps -ef | grep `cat /tmp/recording-pid` | grep wget | grep -v grep
    then
    kill `cat /tmp/recording-pid`
    rm -f /tmp/recording-pid
    fi
  • at:

    script as '/export/home/user/record':

    $ echo /export/home/user/record | at 05:00


    Top

ssh

  • ssh - Tunelowanie

    ssh klimek@localhost -L 8080:localhost:3128
    • -L (port lokalny):(zdalny host):(zdalny port)
    • -R (zdalny port):(lokalny host):(lokalny port)
  • SSH - logowanie za pomocą kluczy

    ssh-keygen -t rsa   //dsa, rsa1
    scp ~/.ssh/id-rsa.pub user@remote:~/
    
    ssh user@remote
    cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

    prawa 600, bo pyta o hasło, gdy się chce zalogować sam do siebie

  • Kopiowanie z tar

    tar czf - ./* | ssh klimek@localhost 'cd /tmp; tar xzf -'; 
    • tar czf - ./* - stworzy z ./* na stdout (-)
    • ssh klimek@localhost 'cd /tmp; tar xzf -' - loguje się i rozpakowuje
  • X11 forwarding do uruchamiania aplikacji X na lokalnym jako zdalny

    ssh -X user@remote
    ssh -X user@remote 'psi' //'program'
    • -Y - bezpieczniejsze
    • -C - kompresja, przy już skompresowanych, spowalnia
  • -D - proxy
    Top

unzip

for f in *.zip; do unzip -d "${f%*.zip}" "$f"; done
  • ${f%*.zip} - nazwy bez .zip
    Top

zenity

  • notify-send klimek "sto lat"
  • txt=`/usr/games/fortune`
    zenity --info --text="$txt"
  • ls | zenity --list --column "Pokaż zawartość katalogu"
  • #!/bin/sh
    if zenity --question --text="Please press a button."; then
        zenity --info --text="You pressed Yes\!"
    else
        zenity --error --text="You pressed No\!"
    fi
  • n=1; while [ $n -le 3 ]; do zenity --info --text=$[RANDOM]; n=$[n+1]; done
  • i=`zenity --scale --title "Suwak" --text "Poprzesuwaj troszkę..." --min-value=1 --max-value=10 --value=5`
    
    zenity --info --text=$i
  • 36

    zenity --warning; 
    n=1; 
    while [ $n -le 36 ]; 
        do echo $n; 
        n=$[n+1]; 
    done | zenity --text-info
  • #!/bin/sh
    if zenity --question --text="Please press a button."; then
        zenity --info --text="You pressed Yes\!"
    continue
        n=1; 
        while [ $n -le 36 ]; 
        do echo $n; 
        n=$[n+1]; 
        done | zenity --text-info
    else
        zenity --error --text="You pressed No\!"
    fi
  • #!/bin/sh
    fn(){
        n=1; 
        while [ $n -le 36 ]; 
        do echo $n; 
        n=$[n+1]; 
        done | zenity --text-info
    exit 0
    } 
    if zenity --question --text="Please press a button."; then
        zenity --info --text="You pressed Yes\!"
        fn
    else
        zenity --error --text="You pressed No\!"
    fi


    Top