Soru Kişinin .bashrc'ye ne gibi yararlı şeyler ekleyebilir? [kapalı]


Olmadan yaşayamayacağınız bir şey var mı ve hayatımı çok daha kolaylaştıracak mı? İşte kullandığım bazı ('diskspace' & 'klasörler' özellikle kullanışlı).

# some more ls aliases
alias ll='ls -alh'
alias la='ls -A'
alias l='ls -CFlh'
alias woo='fortune'
alias lsd="ls -alF | grep /$"

# This is GOLD for finding out what is taking so much space on your drives!
alias diskspace="du -S | sort -n -r |more"

# Command line mplayer movie watching for the win.
alias mp="mplayer -fs"

# Show me the size (sorted) of only the folders in this directory
alias folders="find . -maxdepth 1 -type d -print | xargs du -sk | sort -rn"

# This will keep you sane when you're about to smash the keyboard again.
alias frak="fortune"

# This is where you put your hand rolled scripts (remember to chmod them)
PATH="$HOME/bin:$PATH"

142


Menşei


Bu topluluk wiki olmalı - Toro
Topluluk vikisine dönüştü. Keyfini çıkarın. - Gareth
daha fazla boru? Bahse girerim daha az veya daha az -F ile daha mutlu olursunuz - derobert
Sıralamadan önce bu "sıralama" nın dışında, sıralama tam girdiye ihtiyaç duyduğundan, daha az -F, sıralama işlemini daha hızlı görebilmenizi sağlardı ve bahse girerim oldukça hızlıdır. - GreenKiwi
Birinin ilgilenmesi durumunda, bir listeye göz atmanıza, bir liste oluşturmanıza ve diğer adlarınız için kaynak oluşturmanıza olanak veren bir hizmet vardır: alias.sh - Sam152


Cevaplar:


Arşivleri ayıklayan küçük bir senaryom var, onu net bir yerde buldum:

extract () {
   if [ -f $1 ] ; then
       case $1 in
           *.tar.bz2)   tar xvjf $1    ;;
           *.tar.gz)    tar xvzf $1    ;;
           *.bz2)       bunzip2 $1     ;;
           *.rar)       unrar x $1       ;;
           *.gz)        gunzip $1      ;;
           *.tar)       tar xvf $1     ;;
           *.tbz2)      tar xvjf $1    ;;
           *.tgz)       tar xvzf $1    ;;
           *.zip)       unzip $1       ;;
           *.Z)         uncompress $1  ;;
           *.7z)        7z x $1        ;;
           *)           echo "don't know how to extract '$1'..." ;;
       esac
   else
       echo "'$1' is not a valid file!"
   fi
 }

81



Güzel. Yine de, bellekten komutları bilmek için bu IDE / Vim argümanı var. Yine de harika bir senaryo. Kesinlikle .bashrc Şerefe gidiyor! - Gareth
"Unp" denilen hoş ve basit bir linux komutu, bunu yapan Unpacker ve daha fazlası var. - Sander Marechal
Komutta bir eksik özellik var. 7z paketini açamaz boost.org/doc/libs/1_39_0/more/getting_started/... doğru şekilde. Sorunu nasıl çözeceğinizi biliyor musunuz? - Léo Léopold Hertz 준영
Tar'in daha yeni sürümleri arşiv türünü otomatik olarak algılar, bu nedenle tüm desteklenen formatları sadece 'tar xvf' ile ayıklayabilirsiniz. - Prof. Moriarty
@Sander dtrx da bu konuda kötü değil. Arşivin kendi alt dizinine çıkarılmasını sağlar. - Tobu


Çok farklı makineler kullandığım için .bashrc her zaman, diğer şeylerin yanı sıra şu anda oturum açtığım sunucunun adını dahil etmek için komut istemini ayarlar. Bu şekilde, telnet / ssh derinliklerinde üç seviyedeyken, yanlış pencerede yanlış şeyi yazmam. Gerçekten berbat rm -rf . yanlış pencerede! (Not: Evde, tüm makinelerde telnet devre dışıdır. İşyerinde, ssh her zaman etkin değildir ve çok fazla makineye erişimim yoktur.)

Bir senaryom var ~/bin/setprompt Bu benim tarafından yürütülür .bashrc, içerir:

RESET="\[\017\]"
NORMAL="\[\033[0m\]"
RED="\[\033[31;1m\]"
YELLOW="\[\033[33;1m\]"
WHITE="\[\033[37;1m\]"
SMILEY="${WHITE}:)${NORMAL}"
FROWNY="${RED}:(${NORMAL}"
SELECT="if [ \$? = 0 ]; then echo \"${SMILEY}\"; else echo \"${FROWNY}\"; fi"

# Throw it all together 
PS1="${RESET}${YELLOW}\h${NORMAL} \`${SELECT}\` ${YELLOW}>${NORMAL} "

Bu komut dizisi, ana bilgisayar adını ve ardından :) son komut başarılı olsaydı ve :( son komut başarısız olursa.


39



$? Çek oldukça güzel bir fikir, hoşuma gitti. - derobert
Aynı zamanda durumumdaki durumu da gösteriyorum, fakat sayısal değeri koru ve sıfırdan farklıysa kırmızı renkte, aksi halde yeşil renkte. - pgs
İlginç.... - imapollo


Daha az man tabloları için renk, man sayfalarını okumayı biraz daha kolaylaştırır:

export LESS_TERMCAP_mb=$'\E[01;31m'
export LESS_TERMCAP_md=$'\E[01;31m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;44;33m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;32m'

Renkli man tabloları da en fazla yükleme ve MANPAGER env değişkeni olarak kullanılarak elde edilebilir. Bu çağrı cihazını sadece insan için kullanmak istemiyorsanız, PAGER değişkenini aşağıdaki gibi kullanın:

export PAGER="/usr/bin/most -s"

25





Artık cd yok ../../../ .. ama yukarı 4

Hiçbiri varsayılan olarak 1'e giderse (stackoverflow.com'daki bir yorumda bir bağlantıda bulunur ve biraz değiştirilir), argüman olarak geçirilen sayı olarak birçok dirs gider

up(){
  local d=""
  limit=$1
  for ((i=1 ; i <= limit ; i++))
    do
      d=$d/..
    done
  d=$(echo $d | sed 's/^\///')
  if [ -z "$d" ]; then
    d=..
  fi
  cd $d
}

24



Yukarı () bu sürümü gereksiz karmaşık görünüyor. Bu sürümü kullanıyorum: up () {cd $ (eval printf '../'%.0s {1 .. $ 1}) && pwd; }. Açıkça isterseniz, 'pwd' çağrısını kaldırabilirsiniz. - Matthew G
Şunun gibi bir şey kullanıyorum: # Dizin navigasyon takma adları alias ..='cd ..' alias ...='cd ../..' alias ....='cd ../../..' alias .....='cd ../../../..' - Matt Kenefick


Çok sayıda farklı makineyle uğraşırım, sık kullandığım her makine için sık sık SSH'ye ihtiyacım olan takma adlardan biri:

alias claudius="ssh dinomite@claudius"

Bir iyi kurmak için de yararlıdır .ssh/config ve ssh tuşları Makineler arasında atlamayı daha da kolaylaştırmak için.

Favori takma adlarından bir diğeri dizinleri taşımaktır:

alias ..="cd .."
alias ...="cd ../.."
alias ....="cd ../../.."
alias .....="cd ../../../.."

Ve bazıları yaygın olarak kullanılan varyasyonları için ls (ve yazım hataları):

alias ll="ls -l"
alias lo="ls -o"
alias lh="ls -lh"
alias la="ls -la"
alias sl="ls"
alias l="ls"
alias s="ls"

Tarih çok yararlı olabilir, ancak çoğu dağıtımda varsayılan olarak, her bir kabuk çıkarken geçmişiniz uçurulur ve başlangıçta fazla bir şey kalmaz. 10.000 satırlık bir tarihim var:

export HISTFILESIZE=20000
export HISTSIZE=10000
shopt -s histappend
# Combine multiline commands into one in history
shopt -s cmdhist
# Ignore duplicates, ls without options and builtin commands
HISTCONTROL=ignoredups
export HISTIGNORE="&:ls:[bf]g:exit"

Bu şekilde, eğer daha önce bir şey yaptığımı bilseydim ama özellikleri hatırlayamazsam, hızlı history | grep foo hafızamı çalıştırmaya yardım edecek.

Sık sık kendimi çıkış boruları ile buldum awk Çıktının belirli bir sütununu almak için df -h | awk '{print $2}' disklerimin her birinin boyutunu bulmak için. Bunu kolaylaştırmak için bir işlev oluşturdum fawk benim .bashrc’imde:

function fawk {
    first="awk '{print "
    last="}'"
    cmd="${first}\$${1}${last}"
    eval $cmd
}

Şimdi koşabilirim df -h|fawk 2 Bu da iyi bir yazı yazıyor.

Bir sınırlayıcı belirtmeniz gerekiyorsa (Örneğin., awk -F: için /etc/passwd), bu işlev açıkça bununla başa çıkamaz. Biraz revizyonlu sürümü bu durum keyfi işleyebilir awk alan numarasından önce argümanlar (ama yine de stdin'den giriş gerektirir).


19



Ssh takma adlarını ve ssh tuşlarını da kullanıyorum. - devin
Geçmiş kontrol ipuçları için +1. - Rene Saarsoo
aynı etkide ana bilgisayar adı takma adlarını .ssh / config içine koyabilirsiniz. Bu durumda, 'username dinomite' ile bir 'Host cloudius' girişi ekleyin. - Sirex


GPG şifreli bashrc

Eminim ki hepimiz serseriler tarafından kolayca okunmasını istemediğimiz bashrc'ımıza koymak istediğimiz şeyler vardır. Benim çözümüm şu:

if [ -f ~/.bash_private.gpg ]; then
   eval "$(gpg --decrypt ~/.bash_private.gpg 2>/dev/null)"
fi

Bunu yapan bir GPG ajanım var, bu yüzden her birkaç saatte bir özel anahtarın şifresini girmem gerekiyor. Sistem kullanıcılarına hala güvenmeniz gerekiyor, çünkü tanımladığınız değişken, işlevler ve diğer adlarınız RAM'den ayıklanabilir. Ancak, bunu çoğunlukla dizüstü bilgisayarım için kullanıyorum. Eğer çalınırsa, birinin kolayca görmesini istemiyorum:

alias MYsql='mysql -uadmin -psecret'
wglatest(){ wget -O https://admin:secret@server.com/latest; }

15



Aynı zamanda tarihinizi de şifreliyor musunuz? Neden $ home'ınızı şifrelemiyorsunuz? - Rqomey
@Rqomey, asıl nokta, şifrelerim takma adlar veya işlevler tarafından gizlendikleri için .bash_history'de görünmediğimde, geçmişimi şifrelemek zorunda olmadığım. İçinde böyle şeyler görüyorsun MYsql < garbagecollect.sql yerine mysql -uadmin -psecret < garbagecollect.sql - Bruno Bronosky


Bunun için harika bir kaynak:

göster bize .bashrc


12





Bunları her yer üzerinde kuruyordum, ancak daha sonra onları 'elle' nasıl yapacağımı hatırlamanın daha iyi olduğunu anladım çünkü 1) tam olarak ne olduğunu anlayabiliyordum ve 2) bu yeteneklere erişebiliyor olsa bile benim özel .bashrc yüklü değildi.

Bu günlerde takma adlar kullanmamın tek yolu, gerçekten uzun satırların tekrarlı yazılmasını azaltmaktır (örn. alias myhost='ssh -T user@my.remote.host screen -dAr' )


12



Uzun yararlı komutları ezberlemeyle ilgili anlaştılar. Yine de, oldukça sık olarak, kaçak sunucularda 'diskspace' çalıştırıyorum (yani php, her yerde devasa bir iştir). - Gareth
evet, aslında her gece (du / home / * --max-derinlik 1 | sort -n> /home/.sizes) benzer bir şey var, bu yüzden kullanıcılarınızın uzay tüketimine büyük bir dikkat gösterebilirim. paylaşılan makine. - pjz
Yine de, özel yapılandırmanızı düzenli olarak kullandığınız sistemlere dağıtmak için yeterince kolaydır. - Tobu
Tıpkı ssh takma adının bir takibi gibi, her zaman yaptığım bir şey. DNS kesintisi durumunda bunu her zaman IP ile yaparım. - jwbensley


Dışarıdaki tek gömlekler ve minik betikler sonsuza kadar devam edebilir. Adamın başını ve yazıyı kendim yazmasını öneririm. Bazı iyi kısa bash şeyler http://www.commandlinefu.com. Heres birkaç şey.

#use extra globing features. See man bash, search extglob.
shopt -s extglob
#include .files when globbing.
shopt -s dotglob
#When a glob expands to nothing, make it an empty string instead of the literal characters.
shopt -s nullglob
# fix spelling errors for cd, only in interactive shell
shopt -s cdspell
# vi mode
set -o vi

s() { # do sudo, or sudo the last command if no argument given
    if [[ $# == 0 ]]; then
        sudo $(history -p '!!')
    else
        sudo "$@"
    fi
}

prompt_command() {
    p=$PWD  # p is much easier to type in interactive shells
    # a special IFS should be limited to 1 liners or inside scripts.
    # Otherwise it only causes mistakes.
    unset IFS
}
PROMPT_COMMAND=prompt_command


# smart advanced completion, download from
# http://bash-completion.alioth.debian.org/
if [[ -f $HOME/local/bin/bash_completion ]]; then
    . $HOME/local/bin/bash_completion
fi


extract () { # extract files. Ignore files with improper extensions.
    local x
    ee() { # echo and execute
        echo "$@"
        $1 "$2"
    }
    for x in "$@"; do
        [[ -f $x ]] || continue
        case "$x" in
            *.tar.bz2 | *.tbz2 )    ee "tar xvjf" "$x"  ;;
            *.tar.gz | *.tgz ) ee "tar xvzf" "$x"   ;;
            *.bz2 )             ee "bunzip2" "$x"   ;;
            *.rar )             ee "unrar x" "$x"   ;;
            *.gz )              ee "gunzip" "$x"    ;;
            *.tar )             ee "tar xvf" "$x"   ;;
            *.zip )             ee "unzip" "$x"     ;;
            *.Z )               ee "uncompress" "$x" ;;
            *.7z )              ee "7z x" "$x"      ;;
        esac
    done
}

9



Ben beğendim history -p hile. - Tobu