Bir dosyanın boş olup olmadığını kontrol etme

Shell script yazarken bir dosyanın boş olup olmadığını kontrol etmemiz gerekebilir. Bunu yapmak için birkaç yöntem yazacağım.

satirsayisi=`wc  -l 194.27.108.90  | awk '{split($0,a," "); print a[1]}'`
if [ $satirsayisi == 0 ]; then echo "dosya bos"; fi
if [ -z $(cat dosyaadi) ]; then echo "dosya bos"; fi
if [ -z `cat dosyaadi` ]; then echo "dosya bos"; fi

Ve en güzeli

if [ -s dosyaadi ]; then echo "Dosya dolu"; else echo "Dosya bos"; fi

Subversion sunucu kurulumu

Linux üzerinde kurulumdan bahsedeceğim. Öncelikle kullandığınız dağıtımın paket deposundan subversion paketini kurmalısınız. Ben debian kullandığım için

sudo apt-get install subversion

Kurulum tamamlandıktan sonra gerekli tüm araçlara sahip olmuş oluyoruz.

Bir depo oluşturalım.

svnadmin create depom

depom adli dizinde bir depo oluşturmuş olduk. Bu depo üzerinde gerekli düzenlemeleri yapalım.
depom/conf/svnserve.conf bu dosya temel ayarlarimizi yapacağımız dosya. Bu dosyayı açıp [general] başlığı altındaki ayarları düzenliyoruz. Burdaki tüm ayarlar yorum satırı haline getirişmiş, bunlardan işimize yarayanları aktif hale getirmemiz gerekiyor.

# anon-access = read

Tanımladığımız kullanıcılar dışında kalan kişilerin yetkilerini düzenlemek için kullanıyoruz. Eğer yorum satırı halinde bırakırsak tanımsız kullanıcılar depo üzerinde okuma hakkına sahip oluyorlar. Eğer bu şekilde bırakırsak okuma yapamazlar. Eğer read yerine write yazarsak depomuzda herkes okur-yazar oluyor.

# auth-access = write

Kayıtlı kullanıcıların yetkilerini burdan belirliyoruz. Yorum satırı olmaktan çıkartırsak depomuzda tanımlı kullanıcılar yazma hakkına sahip olur.

# password-db = passwd

Depoya erişim yetkisi verdiğimiz kullanıcıların kullanıcı adı ve parolaların tutulduğu yeri belirtir. Kullanıcıları tanımlamak için yorum satırı halinden çıkartıp istediğimiz yolu belirtmeliyiz, daha sonra ilgili dosyayı düzenlemeliyiz.
Dosya içeriği

[users]
askin = parolam

Parolalar şifrelenmemiş halde tutuluyor.

# authz-db = authz

Kullanıcıların izinlerini daha detaylı olarak ayarlamak istersek bu satırı yorum satırı halinden çıkartıp, istediğimiz bir yolu girmemiz gerekmekte.

# realm = My First Repository

Depomuzun adı, bu satırı yorum satırı olmaktan çıkartıp istediğimiz bir isim veriyoruz.

Tüm bunları yaptıktan sonra depomuzu yayınlayabiliriz. Bunu yapmak için svnserve adında bir programdan yararlanıyoruz.

/usr/bin/svnserve -d -r /home/svn/repositories --log-file /var/log/svnserve

Bu komut /home/svn/repositories dizinindeki tüm depoları yayınlar.

Depoyu chekout etmek için

svn checkout svn://sunucu.com/depom

UDP Broadcast sunucu - istemci

Sunucu:

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define MY_PORT 3333

int main(int argc, char *argv[])
{

    int sockfd, new_fd;
    struct sockaddr_in my_addr;    // hedef adres
    struct sockaddr_in their_addr; // baglanti yapan adres

    int sin_size, rt;

    // gelen verinin tutuldugu buffer
    char buf[32];

    // islem yapmak icin gerekli dosya gosterici
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);

    sin_size = sizeof(struct sockaddr_in);

    // adres ile ilgili ayarlar
    my_addr.sin_family      = AF_INET;
    my_addr.sin_port        = htons(MY_PORT); // kullanilacak port
    my_addr.sin_addr.s_addr = INADDR_ANY;     // mevcut ip adresi
    memset(&(my_addr.sin_zero), 0, 8); // geri kalani 0la

    // socket ile dosyayi iliskilendir
    bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr));

    while ( 1 ) {
        rt = recvfrom (sockfd, buf, 12, 0, (struct sockaddr *)&their_addr, &sin_size);
        if (rt > 0) {
            printf ("recv: %s\n", buf);
        } else if (rt < 0) {
            printf("Baglanti koptu\n");
            break;
        }
    }

    close(sockfd);
    return 0;
}

İstemci:

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define DEST_IP   "255.255.255.255"
#define DEST_PORT 3333

int main(int argc, char *argv[])
{

    int sockfd, new_fd;
    struct sockaddr_in dest_addr; // hedef adres

    int sin_size, rt;
    sin_size = sizeof(struct sockaddr_in);

    // islem yapmak icin gerekli dosya gosterici
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);

    // adres ile ilgili ayarlar
    dest_addr.sin_family      = AF_INET;
    dest_addr.sin_port        = htons(DEST_PORT);
    dest_addr.sin_addr.s_addr = inet_addr(DEST_IP);
    memset(&(dest_addr.sin_zero), 0, 8); // geri kalani 0 la

    // Broadcast icin gerekli yetkiyi al
    int flag = 1;
    if (setsockopt (sockfd, SOL_SOCKET, SO_BROADCAST, &flag, sizeof(flag)) < 0)
        perror("setsockopt");

    // mesaji gonder
    rt = sendto (sockfd, "slm asl plz", 12, 0, (const struct sockaddr *)&dest_addr, sin_size);
    if ( rt < 0 )
        perror("Hata: ");

    // socketi kapat
    close(sockfd);

    return 0;
}

Mysql Kullanıcı - Database Oluşturma

Herzaman unutup google’a bakacağıma buraya bakayım daha kolay :)

Önce mysql sunucusuna bağlanalım:

mysql -u root -p

Kullanıcı oluşturma:

create user kullaniciadi;

Veritabanı oluşturma:

create database veritabaniadi;

Kullanıcı yetkilerini verme: Tüm yetkiler:

grant all on veritabaniadi.* to kullaniciadi@localhost identified by 'parola';

Sadece okuma (select):

grant select on veritabaniadi.* to kullaniciadi@localhost;

Yetkiler hemen devreye girsin:

flush privileges;

FSF

[FSF Associate Member]


Solariste Özyinelemeli grep

Özyinelemeli grep çok kullanışlı bir araç. Malesef solariste bulunan grep öz yinelemeli çalışmıyor. Ama bunu aşmak çok zor değil.

$ grep 'ara' `find . -name '*'`

Var olan bir SVN deposunun adresini değiştirme

Herhangi bir nedenle üzerinde çalıştığınız svn deposunun adresi değişirse aşağıdaki komutla gerekli değişikliği yapabilirsiniz.

svn switch --relocate \
    http://svn.example.com/path/to/repository/path/within/repository \
    http://svnnew.example.com/new/repository/path/within/repository

Android Galaxy Ace ile ekran görüntüsü alma

Android telefonumla uzun zamandır yanlışlıkla ekran görüntüsü alıyordum, birçok tuş kombinasyonunu denememe rağmen nasıl yapıldığını bulamamıştım. Bugün şans eseri nasıl yapıldığını buldum.

Önce “Ana Sayfa” tuşu ile “Geri” tuşuna birlikte basıyoruz. Ardından “Geri” tuşuna tekrar basınca ekran görüntüsü alınıp kaydediliyor.

Bukadar basitmiş :)


HY-1602B9 16x2 LCD Display

Eğer elinizde yukardaki gibi bir LCD ekran varsa, aman dikkatli olunuz. Üzerinde yazan bacak numaralarına inanmayınız. Sonra bizim gibi ekranları tek tek yakarsınız.

Normalde üzerinde

1 2 3 4 …. 16

şeklinde bir numaralandırma var. Ama aslında

14 13 12 ……. 1 15 16

şeklinde numaralandırılıyor.


Caps Lock'a ne gerek var.

Hiç gerek yok.

setxkbmap -option ctrl:nocaps