Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

Linux ipuçları

Başlatan elektronikhobi, 05 Aralık 2024, 07:42:06

elektronikhobi

1 - Dizinde kelime aramak

Uygulamamızın verileri A sunucusundan çektiğini düşünelim. Zamanla B sunucusuna taşınmış olsun.

Sunucu ismini güncellemek için hangi kütükte bulunduğunu öğrenmek gerekebilir.

Dizindeki kütüklerde kelime aratmak için aşağıdaki komutu kullanabiliriz :

grep -Ril "aranan" .

2 - Uzak sunucu değişikliklerini geri almak

Uygulama kaynak kodunu bir önceki sürüme çekmek için aşağıdaki komutları kullanabiliriz:

git reset --hard HEAD^
git push -f
"Osmanlı fethettiği topraklardan gençleri alır yetiştirir sonra yeniçeri yapardı. Amerika şimdi bize yetiştirtiyor, tam iş yapacakları zaman gençlerimiz gidip oraya hizmet ediyor."

Özdemir Bayraktar

mehmet

"ack", "grep"den daha maharetli...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

elektronikhobi

#2
Fish kabuğu kullanıyoruz.

config.fish kütüğünde ack ile ilgili bu kadar kısaltma varmış.

alias bul="ack $argv[1]"
alias dara="ack --type=dkutuk $argv[1]"
alias valaara="ack --type=valakutuk $argv[1]"
alias vapiara="ack --type=vapi $argv[1]"
alias cara="ack --type=ckutuk $argv[1]"
alias başlıkara="ack --type=cbaslik $argv[1]"
alias pythonara="ack --type=piton $argv[1]"
alias jpgara="ack --type=jpgkutuk $argv[1]"

ack ile sadece belirli uzantılı kütüklerde arama yapabiliyorsunuz. Kütük uzantısı yoksa ekleyebilirsiniz.

~/.ackrc kütüğüne D ve Vala dosyalarını eklemişiz.
--type-set
dkutuk:ext:d,dkutuk
--type-set
valakutuk:ext:vala,valakutuk
--type-set
jpgkutuk:ext:jpg,jpgkutuk

Bazen bul yerine ara yazıyoruz. O da yeni paket arıyor  :-[

grep ve ack'nin sonuçları getirmesi biraz farklıdır.

Aynı kelimeyi arayarak sonucu gözlemleyebilirsiniz. 
"Osmanlı fethettiği topraklardan gençleri alır yetiştirir sonra yeniçeri yapardı. Amerika şimdi bize yetiştirtiyor, tam iş yapacakları zaman gençlerimiz gidip oraya hizmet ediyor."

Özdemir Bayraktar

tunayk

Sanki konu başlığı ile içerik pek uyuşmamış, ya da kitabın direk ortasından başlanmış gibi  :)

elektronikhobi

#4
Yazılım geliştirmeden önce bazen hikayesi yazılıyor.

Olayı hikaye etmeye çalışalım.

Ali diye yazılım geliştirici bir arkadaş olsun. Bu arkadaş Kiraz isminde bir masaüstü yazılımı geliştiriyor. Kullanıcılar da mutlu mutlu kullanıyorlar.

Kiraz yazılımı verileri elma.net isimli bir sayfadan Json biçiminde çekiyor olsun.

Ali, 1 Ocak tarihinden itibaren elma.net'in yayınına son vereceğini ve bu tarihten sonra armut.net üzerinden verileri çekmesi gerektiğini öğreniyor.

Kaynak kod içerisinde hangi kütükte elma geçtiğini hatırlayamıyor. Bunun için ilk ipucunu kullanıyor.

grep -Ril "elma" .

Ana kaynak dizininde içerisinde elma geçen kütükleri armut yapıyor.

Uzaktaki git sunucuna yaptığı değişiklikleri gönderiyor.

Uygulamayı uzak sunucudan çekerek bilgisayarına kuruyor.

Ancak ne görsün? Uygulama çalışmıyor. Yeni sunucuda kiraz fiyatlarını veren GET işlevi çalışmıyor. Uygulamanın geliştiricisine haber veriyor.

Tekrar tüm yaptığı değişiklikleri geri almak için iki numaralı ipucunu kullanıyor.
"Osmanlı fethettiği topraklardan gençleri alır yetiştirir sonra yeniçeri yapardı. Amerika şimdi bize yetiştirtiyor, tam iş yapacakları zaman gençlerimiz gidip oraya hizmet ediyor."

Özdemir Bayraktar

tunayk

Eyvallah Hocam. Herhal biz biraz geri kalmışız.
Hani başlığa bakınca insan ilk mesajlarda Hangi Linux dağıtımında, elma mı yoksa armut derleyicisinde mi geliştirme yapılıyor bilse bizim gibiler de belki daha kolay anlar belki. 

Konu farklı bir arkadaşımıza cevaben  başladıysa da araya girdiğimiz için kusura kalmayın.

elektronikhobi

#6
Hâl-i hazırda ArcoLinux  kullanıyoruz.

Bu ipuçları tüm Linux dağıtımlarında kullanılabilir.

Geliştirdiğimiz uygulama Archlinux, Manjaro, Ubuntu, Debian, Fedora, Red Hat, Open Suse, Pardus 23 üzerinde çalışıyor.

Uygulamayı geliştirdikten sonra önce Archlinux paketi haline getiriyoruz. Sonra bunu Debian ve Red Hat paketlerine çeviriyoruz.

Uygulama kaynağı Free Pascal, Vala ve kabuk betiği kullanıyor.



Geliştirme ortamı olarak Emacs kullanıyoruz.
"Osmanlı fethettiği topraklardan gençleri alır yetiştirir sonra yeniçeri yapardı. Amerika şimdi bize yetiştirtiyor, tam iş yapacakları zaman gençlerimiz gidip oraya hizmet ediyor."

Özdemir Bayraktar

elektronikhobi

3- Masaüstü durumunu ileriki oturumlar için saklamak

Hali hazırda 5 tane masaüstü kullanıyoruz.

Örneğin 0 numaralı masaüstünde Arduino, 1 numarada Emacs, 2 numarada iki tane yan yana uç birim açılmış olabiliyor.

Diğer masaüstlerini de tarayıcı vb. uygulamaları açmak için kullanıyoruz.

Bilgisayarı çalışmaya hazır hale getirmek oldukça vakit alabiliyordu.



Gnome'de güç düğmesi davranışını hazırda beklet olarak seçerseniz, güç düğmesine bastığınızda bilgisayar kapanıyor.

Bilgisayarı tekrar açtığınızda kaldığınız yerden çalışmaya devam edebilirsiniz.
"Osmanlı fethettiği topraklardan gençleri alır yetiştirir sonra yeniçeri yapardı. Amerika şimdi bize yetiştirtiyor, tam iş yapacakları zaman gençlerimiz gidip oraya hizmet ediyor."

Özdemir Bayraktar

elektronikhobi

4 - Fritzing açılmıyor

Fritzing açılmıyordu.

Alıntı YapFritzing: error while loading shared libraries: libgit2.so.1.8: cannot open shared object file: No such file or directory

Bir kütüphaneyi bulamadığını ifade eden bir hata veriyordu.

sudo ln -s /usr/lib64/libgit2.so /usr/lib64/libgit2.so.1.8

sudo ln -s /usr/lib64/libquazip1-qt6.so /usr/lib64/libquazip1-qt6.so.1.4.0

Yukarıdaki komutları verince çalıştı.

Aslında bu kütüphaneler kuruludur.

Ancak yazılım bulamadığı için sembolik bağ oluşturmak gerekiyor.
"Osmanlı fethettiği topraklardan gençleri alır yetiştirir sonra yeniçeri yapardı. Amerika şimdi bize yetiştirtiyor, tam iş yapacakları zaman gençlerimiz gidip oraya hizmet ediyor."

Özdemir Bayraktar

elektronikhobi

5 - Git kullanarak iki kütüğü karşılaştırmak

Bazen kaynak kodun içinde birbirine çok benzer kütükler olabiliyor.

Aradan zaman geçince içeriği unutulabiliyor.

Acaba iki kütük arasında ne fark vardı diye merak edebilirsiniz.

Kıyaslama için aşağıdaki örneğe bakabilirsiniz :

git diff --no-index alici9/alici9.ino alici10/alici10.ino
"Osmanlı fethettiği topraklardan gençleri alır yetiştirir sonra yeniçeri yapardı. Amerika şimdi bize yetiştirtiyor, tam iş yapacakları zaman gençlerimiz gidip oraya hizmet ediyor."

Özdemir Bayraktar

elektronikhobi

6 - Emacs kod bloğunu hizalamak

Emacs ile çalışırken C-x h ve M-x indent yazarak kodu hizalayabilirsiniz.

Varsayılan hizalamada nedense if bloğundan sonra gelen parantezlerde biraz boşluk bırakıyor.

void hizlan()
{
   if (kosul)
     { <---
        int i;
        ...
     } <---
}

Hizalamayı aşağıdaki gibi yapmak ister misiniz?

void hizlan()
{
   if (kosul)
   {
      int i;
      ...
   }
}

Eğer yanıtınız evet ise .emacs kütüğüne aşağıdaki satırı eklemeniz yeterlidir.

(c-set-offset 'substatement-open 0)
"Osmanlı fethettiği topraklardan gençleri alır yetiştirir sonra yeniçeri yapardı. Amerika şimdi bize yetiştirtiyor, tam iş yapacakları zaman gençlerimiz gidip oraya hizmet ediyor."

Özdemir Bayraktar

seron

@elektronikhobi hocam, her türlü ipucu yazabiliyor muyuz, yoksa sizin yazdığınız gibi belli konularla sınırlı mı?

Belki ben de ufak tefek bilgiler atabilirim.

elektronikhobi

Tabi yazabilirsiniz ne demek ::ok

Meselâ bu Emacs ipucunu bugün öğrendik.

Kara düzen satırları tek tek hizalamaya çalışıyorduk.
"Osmanlı fethettiği topraklardan gençleri alır yetiştirir sonra yeniçeri yapardı. Amerika şimdi bize yetiştirtiyor, tam iş yapacakları zaman gençlerimiz gidip oraya hizmet ediyor."

Özdemir Bayraktar

seron

#13
XFCE-Thunar ortamlı debian sistemlerde sağtık menüsüne "Rar ile sıkıştır" ve "7z ile sıkıştır" Ekleyin.



Bu işlem işinizi çok kolaylaştırıyor ve hızlandırıyor. Öbür türlü dosya üzerinde sağtık>Arşivle>Uygun uzantı ara>isim yaz vb... İşlem süresi uzuyor.

Bu işlemle dosya üzerinde sağtık>RARla veya ZİPle deyip işi bitiyorsunuz.

Terminali açın:

sudo apt update
sudo apt install rar p7zip-full notify-send

İşlem ile ilgili betikleri oluşturmak için ilgili yere bir klasör oluşturacağız.

mkdir -p ~/bin

Şimdi betiği oluşturalım:

mousepad ~/bin/thunar_rar_compress.sh

Komut size not defteri açacaktır. İçerik boş olmalıdır; değilse tümünü seç-SİL (korkma).

Şu içeriği yapıştır:

#!/bin/bash
# Bu betik Thunar Özel Eylemi tarafından çağrılır.
# Seçilen dosyayı/klasörü RAR formatında sıkıştırır ve başlangıçta bir bekleme mesajı gösterir.
LOG_FILE="/tmp/rar_debug_$(date +%Y%m%d%H%M%S).log"
exec > "$LOG_FILE" 2>&1
notify-send "RAR Sıkıştırma Başladı" "Dosyalar sıkıştırılıyor... Lütfen işlemin tamamlanmasını bekleyin."
echo "--- RAR Sıkıştırma Hata Ayıklama Başlangıcı ---"
echo "Çalışma Dizini (PWD - Betik Başlangıcı): $(pwd)"
echo "Thunar %f değişkeni (Seçilen ilk dosya/dizin yolu): '$1'"
echo "Tüm argümanlar (Thunar %F'den): '$@'"
echo "Argüman Sayısı: $#"
if [ "$#" -eq 0 ]; then
    echo "HATA: Sıkıştırılacak hiçbir öğe seçilmedi."
    notify-send "RAR Hatası" "Sıkıştırılacak hiçbir öğe seçilmedi!"
    exit 1
fi
TARGET_DIR=$(dirname "$1")
echo "Hedef Dizin (TARGET_DIR): '$TARGET_DIR'"
cd "$TARGET_DIR" || { echo "HATA: Dizin değiştirilemedi: $TARGET_DIR"; notify-send "RAR Hatası" "Hedef dizine geçilemedi!"; exit 1; }
echo "Yeni Çalışma Dizini (PWD - cd sonrası): $(pwd)"
COMPRESS_ITEMS=()
for item_path in "$@"; do
    COMPRESS_ITEMS+=("$(basename "$item_path")")
done
echo "Sıkıştırılacak Öğeler (COMPRESS_ITEMS): ${COMPRESS_ITEMS[*]}"
# RAR hedef dosya adını oluştur
# Eğer birden fazla öğe seçiliyse, sıkıştırılacak öğelerin bulunduğu klasörün adını kullan
if [ "$#" -gt 1 ]; then
    ARCHIVE_BASE_NAME=$(basename "$TARGET_DIR" | sed "s/^['\"]*//;s/['\"]*$//")
    if [ -z "$ARCHIVE_BASE_NAME" ]; then
        ARCHIVE_BASE_NAME="Arşivlenmiş_Dosyalar"
    fi
else
    # Sadece bir öğe seçiliyse, o öğenin adını kullan ve uzantısını kaldır
    ARCHIVE_BASE_NAME=$(basename "$1" | sed "s/^['\"]*//;s/['\"]*$//;s/\.[^.]*$//")
fi
RAR_TARGET_NAME="${ARCHIVE_BASE_NAME}.rar"
echo "Oluşturulacak RAR Dosya Adı (RAR_TARGET_NAME): '$RAR_TARGET_NAME'"
rar a -m5 -ep "$RAR_TARGET_NAME" "${COMPRESS_ITEMS[@]}"
RAR_EXIT_STATUS=$?
echo "RAR Komutu Çıkış Durumu: $RAR_EXIT_STATUS"
if [ $RAR_EXIT_STATUS -ne 0 ]; then
    echo "HATA: RAR komutu başarısız oldu (Çıkış Kodu: $RAR_EXIT_STATUS)"
    notify-send "RAR Sıkıştırma Hatası" "Sıkıştırma işlemi başarısız oldu. Detaylar için log dosyası: $LOG_FILE"
else
    notify-send "RAR Sıkıştırma Başarılı" "Dosyalar başarıyla sıkıştırıldı: $RAR_TARGET_NAME"
fi
echo "--- RAR Sıkıştırma Hata Ayıklama Sonu ---"

Kaydet çık.

Çalıştırılabilir yapıyoruz:

chmod +x ~/bin/thunar_rar_compress.sh

Şimdi Thunar dosya yöneticisini aç.
Düzenle menüsünden > Özel Eylemleri Yapılandır'a gel.
+ düğmesine basıp,
Ad: Rarla
Tanım: Seçilen dosyayı rar formatında sıkıştırır.
Komut:

~/bin/thunar_rar_compress.sh %F

Görünüm koşullarına gel:
Dosya kalıbı (file pattern): *
Görünüm koşulları: Dizinler ve diğer tüm dosya tiplerinin kutucularını doldur.

Devam ediyoruz... Şimdi de 7z oluştur yapacağız.

mousepad ~/bin/thunar_7z_compress.sh

Şunu yapıştır ve kaydet deyip çık:

#!/bin/bash
# Bu betik Thunar Özel Eylemi tarafından çağrılır.
# Seçilen dosyayı/klasörü 7z formatında sıkıştırır ve başlangıçta bir bekleme mesajı gösterir.
LOG_FILE="/tmp/7z_debug_$(date +%Y%m%d%H%M%S).log"
exec > "$LOG_FILE" 2>&1
notify-send "7z Sıkıştırma Başladı" "Dosyalar sıkıştırılıyor... Lütfen işlemin tamamlanmasını bekleyin."
echo "--- 7z Sıkıştırma Hata Ayıklama Başlangıcı ---"
echo "Çalışma Dizini (PWD - Betik Başlangıcı): $(pwd)"
echo "Thunar %f değişkeni (Seçilen ilk dosya/dizin yolu): '$1'"
echo "Tüm argümanlar (Thunar %F'den): '$@'"
echo "Argüman Sayısı: $#"
if [ "$#" -eq 0 ]; then
    echo "HATA: Sıkıştırılacak hiçbir öğe seçilmedi."
    notify-send "7z Hatası" "Sıkıştırılacak hiçbir öğe seçilmedi!"
    exit 1
fi
TARGET_DIR=$(dirname "$1")
echo "Hedef Dizin (TARGET_DIR): '$TARGET_DIR'"
cd "$TARGET_DIR" || { echo "HATA: Dizin değiştirilemedi: $TARGET_DIR"; notify-send "7z Hatası" "Hedef dizine geçilemedi!"; exit 1; }
echo "Yeni Çalışma Dizini (PWD - cd sonrası): $(pwd)"
COMPRESS_ITEMS=()
for item_path in "$@"; do
    COMPRESS_ITEMS+=("$(basename "$item_path")")
done
echo "Sıkıştırılacak Öğeler (COMPRESS_ITEMS): ${COMPRESS_ITEMS[*]}"
# 7z hedef dosya adını oluştur
# Eğer birden fazla öğe seçiliyse, sıkıştırılacak öğelerin bulunduğu klasörün adını kullan
if [ "$#" -gt 1 ]; then
    ARCHIVE_BASE_NAME=$(basename "$TARGET_DIR" | sed "s/^['\"]*//;s/['\"]*$//")
    if [ -z "$ARCHIVE_BASE_NAME" ]; then
        ARCHIVE_BASE_NAME="Arşivlenmiş_Dosyalar"
    fi
else
    # Sadece bir öğe seçiliyse, o öğenin adını kullan ve uzantısını kaldır
    ARCHIVE_BASE_NAME=$(basename "$1" | sed "s/^['\"]*//;s/['\"]*$//;s/\.[^.]*$//")
fi
SEVENZ_TARGET_NAME="${ARCHIVE_BASE_NAME}.7z"
echo "Oluşturulacak 7z Dosya Adı (SEVENZ_TARGET_NAME): '$SEVENZ_TARGET_NAME'"
7z a -mx=9 -mmt=on "$SEVENZ_TARGET_NAME" "${COMPRESS_ITEMS[@]}"
SEVENZ_EXIT_STATUS=$?
echo "7z Komutu Çıkış Durumu: $SEVENZ_EXIT_STATUS"
if [ $SEVENZ_EXIT_STATUS -ne 0 ]; then
    echo "HATA: 7z komutu başarısız oldu (Çıkış Kodu: $SEVENZ_EXIT_STATUS)"
    notify-send "7z Sıkıştırma Hatası" "Sıkıştırma işlemi başarısız oldu. Detaylar için log dosyası: $LOG_FILE"
else
    notify-send "7z Sıkıştırma Başarılı" "Dosyalar başarıyla sıkıştırıldı: $SEVENZ_TARGET_NAME"
fi
echo "--- 7z Sıkıştırma Hata Ayıklama Sonu ---"

Çalıştırılabilir yap:

chmod +x ~/bin/thunar_7z_compress.sh

Yine Thunar'ı aç, önceki ayarları tekarla.

Ad: 7z'le
Tanım: Yaz birşeyler.
Komut:
~/bin/thunar_7z_compress.sh %F

Görünüm koşullarına gelip bir önceki ayarları tekrarla, tamam de çık.

Bu uygulama bende hemen çalışmadı. Sistemimi yeniden başlatınca sorunsuzca çalıştı. Şu an aktif kullanıyorum.

İyi çalışmalar.

seron

#14
Debian tabanlı sisteminizde sıkıştırma varsayılan olarak "en yüksek (maksimum)" ayarda yapılsın.

Linux tarafında GUI'ye sahip sıkıştırma yazılımlarının hiçbirinin arayüzünde sıkıştırma oranını seçme olanağı yok. Anca konsol ile sıkıştırırsan, öyle var. Ama komutla uğraşmamak için varsayılan sıkıştırma oranını kalıcı olarak doruk düzeye çekebilirsin. Böylece her sıkıştırmada bu ayarda sıkıştırır.

Şunu terminale girip ENTER'layın:

gsettings set org.gnome.FileRoller.General compression-level "maximum"

Komut, boş dönmelidir. Eğer öyleyse tamam demektir. Hata veriyorsa... Hata alırsanız bana sormayın, çünkü bilmiyorum :) Bende çalışıyor.

Yakında GUI kullanmayı tercih edenler için winrar çakması bir program hazırlayacağım. Ön hazırlık yapıyorum (ikonlar vb.) Rarlama özelliği falan da olacak. Bitince buradan da sunabilirim.

İyi çalışmalar.