Kişinin .bashrc'sine hangi faydalı şeyler eklenebilir? [kapalı]


141

Onsuz yaşayamayacağın ve hayatımı çok kolaylaştıracak bir şey var mı? İşte kullandığım bazı ('disk alanı' ve 'klasörler' özellikle kullanışlıdır).

# 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"

3
Bu topluluk wiki olmalı
Toro

1
Topluluk wiki'sine çevrildi. Keyfini çıkarın.
Gareth

4
daha fazla borulu? İddiaya girerim daha az ya da daha az mutlu olursunuz -F
derobert

Daha önce "sıralama" olması dışında, sıralama tam girdiye ihtiyaç duyduğundan, daha az -F sıralamayı daha hızlı görmenize izin verirdi ve bahse girerim oldukça hızlı bir şekilde sarkar.
GreenKiwi

Yanıtlar:


81

Arşivleri çıkaran küçük bir senaryom var, net üzerinde 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
 }

1
Güzel. Yine de, IDE / Vim argümanı bellekten gelen komutları bilmesine rağmen var. Komut dosyası fantastik bit olsa. Kesinlikle .bashrc Şerefe gidiyor!
Gareth

19
Bunu ve daha fazlasını yapan Unpacker adında "unp" adında güzel ve basit bir linux komutu var.
Sander Marechal

Komutun bir eksik özelliği var. 7ost paketini boost.org/doc/libs/1_39_0/more/getting_started/… adresinde doğru açamıyor . Sorunu nasıl çözeceğinizi biliyor musunuz?
Léo Léopold Hertz 준영

7
Yeni tar sürümü, arşiv türünü otomatik olarak algılar; bu nedenle, tüm desteklenen biçimleri yalnızca 'tar xvf' ile çıkarabilirsiniz.
Prof. Moriarty,

@Sander dtrx bu konuda da fena değil. Arşivi kendi alt dizinine çıkarttığından emin yapar.
Tobu

39

Çok farklı makineler kullandığım için, .bashrcher zaman diğerlerinin yanı sıra, şu anda oturum açtığım sunucunun adını da içeren komut istemini ayarlarım. Bu şekilde, telnet / ssh'ın üç seviyesinden derin olduğumda, yanlış şeyi yanlış pencereye yazmam. Gerçekten rm -rf .yanlış pencerede berbat ! (Not: Evde, tüm makinelerde telnet devre dışı bırakılmıştır. İş yerinde, ssh her zaman etkin değildir ve çok fazla makineye kök erişimim yoktur.)

Benim ~/bin/setprompttarafından yürütülen ve .bashrcaşağıdakileri içeren bir komut dosyası var :

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 dosyası, istemciyi ana bilgisayar adına ayarlar ve ardından :)son komut başarılıysa ve :(son komut başarısız olursa.


$? çek çok hoş bir fikir, hoşuma gitti.
derobert

6
Ayrıca istemimdeki durumu da gösteriyorum, ancak sayısal değeri koru ve sıfır değilse kırmızı renkle değiştir, aksi takdirde yeşil.
pgs

İlginç ....
imapollo

25

Manpages'in daha az renkli olması man sayfalarının okunmasını biraz 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 sayfaları, çoğu yükleyerek ve MANPAGER env değişkeni olarak kullanarak da elde edilebilir. Bu çağrı cihazını sadece erkekler için kullanmak istemiyorsanız, PAGER değişkenini şu şekilde kullanın:

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

24

Daha fazla cd yok ../../../ .. ama 4

Sayı argüman olarak iletildiğinde birçok dizini yükseltir, eğer hiçbiri varsayılan olarak 1'e yükselmezse (stackoverflow.com'daki bir yorumda bir bağlantıda bulunur ve biraz değiştirilir)

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
}

Up () bu sürümü gereksiz yere karmaşık görünüyor. Bu sürümü kullanıyorum: up () {cd $ (eval printf '../'%.0s {1 .. $ 1}) && pwd; }. Açıkça dilerseniz 'pwd' aramasını kaldırabilirsiniz.
Matthew G

alias ..='cd ..' alias ...='cd ../..' alias ....='cd ../../..' alias .....='cd ../../../..'
Şunun

19

Birçok farklı makineyle uğraşıyorum, bu yüzden favorilerimden biri sık sık SSH'ye ihtiyacım olan her makine için takma ad.

alias claudius="ssh dinomite@claudius"

Makineler arasında atlamayı daha da kolaylaştırmak için iyi .ssh/configve ssh tuşlarını ayarlamak da faydalıdır .

Favori takma adlarımdan bir diğeri, dizinleri yükseltmek için:

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

Ve bazıları ls(ve yazım hataları) sık kullanılan varyasyonları için :

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 faydalı olabilir, ancak çoğu dağıtımda varsayılan olarak geçmişiniz her bir kabuk çıkması tarafından havaya uçurulur ve başlaması gereken pek bir şey yoktur. 10.000 satır geçmişim olmasını seviyorum:

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, daha önce bir şey yaptığımı bildiğim halde özelliklerini hatırlayamadığımı bilirsem, hızlı bir şekilde history | grep foohafızamı canlandırmaya yardımcı olur.

Diskimin her birinin boyutunu bulmak için awkolduğu gibi, çıktının belirli bir sütununu elde etmek için sık sık kendim çıktısı df -h | awk '{print $2}'alırdım. Bunu kolaylaştırmak için, fawk.bashrc dosyasında bir işlev oluşturdum :

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

Artık yazabilirim df -h|fawk 2ki bu da çalıştırabilir .

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. Bu kılavuzdaki küçük elden geçirilmiş sürüm awk, alan numarasından önce isteğe bağlı argümanları kullanabilir (ancak yine de stdin'den giriş gerektirir).


2
Ben de ssh takma adı ve ssh tuşlarını kullanıyorum ... her şeyi çok kolaylaştırıyor
devin

1
Geçmiş kontrolü ipuçları için +1.
Rene Saarsoo

2
hostname takma adlarını .ssh / config içinde aynı etkiye koyabilirsiniz. Bu durumda, 'username dinomite'
Sirex

15

GPG şifreli bashrc

Eminim hepimiz bashrc'mıza koymak istediğimiz, sudo'lar tarafından kolayca okunmasını istemediğimiz şeyler vardır. Buna benim çözümüm:

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

Bunu yapan bir GPG ajanı var, bu yüzden sadece birkaç saatte bir özel anahtarımın şifresini girmem gerekiyor. Yine de, sistemin kullanıcılarına biraz güvenmek zorundasınız çünkü değişkeniniz, fonksiyonlarınız ve takma adlarınız RAM'den çıkarılabilir. Ancak bunu daha çok dizüstü bilgisayarım için kullanıyorum. Çalınması durumunda, birinin kolayca görünmesini istemiyorum:

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

Bu durumda da geçmişinizi şifreliyor musunuz? Neden evinizi şifrelemesiniz
Rqomey

@Rqomey, bütün mesele şu ki, şifrelerim .bash_history'de görünmediğinden tarihimi şifrelemek zorunda değilim çünkü takma adlar veya işlevler tarafından gizlenmişler. İçinde onun MYsql < garbagecollect.sqlyerine bir şeyler görüyorsunmysql -uadmin -psecret < garbagecollect.sql
Bruno Bronosky


12

Bunları her tarafa yerleştirirdim ama sonra onları 'elle' nasıl yapabileceğimizi hatırlamanın daha iyi olduğunu anladım, çünkü 1) tam olarak ne olduğunu tam olarak anladım ve 2) bu yeteneklere erişebilse bile benim özel .bashrc yüklenmedi.

Bu günlerde takma isimler kullandığım tek şey, gerçekten uzun satırların tekrarlayan yazımlarını azaltmaktır (örn. alias myhost='ssh -T user@my.remote.host screen -dAr').


2
Uzun yararlı komutları ezberlemek konusunda anlaşmaya varıldı. Kaçak sunucularda oldukça sık sık 'disk boşluğu' çalıştırdığımı düşünüyorum (örn. Php her yere ortak kullanmaktadır).
Gareth,

evet, aslında (du / home / * --max-derinliği 1 | sort -n> /home/.sizes) her gece çalıştırılana benzer bir şeyim var, bu sayede kullanıcılarımın büyük oranda alan tüketimine göz kulak olabilirim paylaşılan makine.
pjz

1
Özel yapılandırmanızı düzenli olarak kullandığınız sistemlere uygulamak yeterince kolaydır.
Tobu,

Ssh takma adının bir takibinde olduğu gibi, bu her zaman yaptığım bir şey. DNS kesintisi durumunda bunu her zaman IP ile yapıyorum.
jwbensley

9

Bir gömlek ve küçük senaryolar sonsuza dek sürecek. Adam bash'ı ve bir şeyler yazmayı öneririm. Http://www.commandlinefu.com adresinde bazı iyi kısa bash şeyler . 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
}

2
Numarasını beğendim history -p.
Tobu,

9

Eğer bir sysadmin iseniz ve çok fazla kök ayrıcalıkla çalışıyorsanız Bash için küçük bir ipucu:

shopt -o noclobber

Bu, çıktısını (> dosyaadı) yeniden yönlendirirseniz, önceden var olan bir dosyanın içeriğini yanlışlıkla imha etmenizi önler. Üzerine yazmak için her zaman> | dosyaadı zorlayabilirsiniz.


8

Benim bashrc aşağıdakileri var

function __setprompt {
  local BLUE="\[\033[0;34m\]"
  local NO_COLOUR="\[\033[0m\]"
  local SSH_IP=`echo $SSH_CLIENT | awk '{ print $1 }'`
  local SSH2_IP=`echo $SSH2_CLIENT | awk '{ print $1 }'`
  if [ $SSH2_IP ] || [ $SSH_IP ] ; then
    local SSH_FLAG="@\h"
  fi
  PS1="$BLUE[\$(date +%H:%M)][\u$SSH_FLAG:\w]\\$ $NO_COLOUR"
  PS2="$BLUE>$NO_COLOUR "
  PS4='$BLUE+$NO_COLOUR '
}
__setprompt

Yerel bir makinede gibi görünüyor:

[17:57][user:~]$

ancak uzaktan kumandada (ssh aracılığıyla):

[17:57][user@machine:~]$

6

Bir süredir bu .bashrc bunu yaşadım ve faydalı buldum. Kutuya giriyorsanız, oturum açtığınızda otomatik olarak ekran başlar, bu şekilde ağ bağlantınız kesildiğinde veya ne olursa olsun, yaptığınız şeyi kaybetmezsiniz. Sonuna yerleştirilmelidir.

if [ "$PS1" != "" -a "${STARTED_SCREEN:-x}" = x  -a "${SSH_TTY:-x}" != x ]
then
STARTED_SCREEN=1 ; export STARTED_SCREEN
[ -d $HOME/lib/screen-logs ] || mkdir -p $HOME/lib/screen-logs

sleep 1
screen -U -RR && exit 0

echo "Screen failed! continuing with normal bash startup"
fi

Giriş kabuğunu ekran olarak ayarladıysanız (ve .screenrc'nizde örneğin bash'ı yapılandırırsanız), o zaman SSH'ye girdiğinizde, ekran otomatik olarak bağlantısı kesilen ekranlara yeniden bağlanmayı deneyecektir. Bu başarısız olursa, yeni bir ekran yaratacaktır.
Dan Udey

@Dan Udey Kendimi önerdiğin şeyi denemedim, ama gönderdiğim bash sadece ssh girişlerinde ekran başlatacak, giriş kabuğun gibi ayar ekranı olacaktı, yerel girişlerde de başlatacaktı. Hangi belki ne istersen. İstediğim sadece bu değil. :-)
baudtack 21.099

Bağlantıların kesilmesi konusunda endişeleniyorsanız, mosh'a göz atın
jwbensley 11:13 'de

5

fortuneZaten kaç tane takma isme ihtiyacın var?

cddBeni şu anda bu sunucu üzerinde çalışıyor olacağım her yere götürecek bir takma ad vermeyi seviyorum.

PATHyeniden tanımlanma gerçekten ait .bash_profiledeğil .bashrc.

Rutin olarak büyük bir set screens kullandığım bir sunucuda , benim .bashrcolacak:

alias s1="screen -dr chaos1"
alias s2="screen -dr chaos2"
alias s3="screen -dr chaos3"
# ... and so on

( screenÖrneğin, s ile kuruldu screen -U -S chaos1.)


2
@chaos "Yine de servete kaç takma ad gerekiyor?". kazanmak için woo. başarısız için frak (ve alternatif yazımlar).
Gareth

Lütfen şu adımları takip edin. 1) PATH'nizi .bashrc dosyasında genişletin. 2) 'bash' yazın. 3) 'echo $ PATH' yazın. 4) 'bash' yazın. 5) 'echo $ PATH' yazın. 6) İnsanları cahilce düşürmek ve hakaret etmek için kafanıza yumruk atın çünkü onlar sizden daha iyi sysadmin uygulamaları hakkında daha çok şey biliyorlar.
kaos

Kendimi suratıma sokmayacak, biraz geçerli bir nedeniniz olduğunu çok etkilendim. Yolunuzun henüz uzatılmadığı oturum açma dışı mermileri almak kolaydır. Aptallığını geri alıyorum, aslında .bashrc'nizde veya başka bir şeyde önemli değişkenleri ayarlamamanız gerektiğini söylemeye çalıştığınızı okudum.
Ian Kelling

Belki de birisi "PATH değişkenlerimi .bashrc veya .bash_profile olarak ayarlamalı mıyım?" Başlatmalı mı?
Gareth

3
@Ian Kelling: Aslında demek istediğim, oturum açma başına bir kez yapılması gereken işlemlerin .bash_profile'ye ve kabuk başlatma işlemi için bir kez yapılması gereken işlemlerin .bashrc'a ait olduğu.
kaos

5

Diğer şeylerin yanı sıra, bazı varsayılanları daha azına ayarlıyorum, terminalimin yanlışlıkla kapanmasını önlüyorum ve tarih boyunca ileriye doğru gezinmeyi etkinleştiriyorum:

# ignore case, long prompt, exit if it fits on one screen, allow colors for ls and grep colors
export LESS="-iMFXR"

# must press ctrl-D 2+1 times to exit shell
export IGNOREEOF="2"

# allow ctrl-S for history navigation (with ctrl-R)
stty -ixon

+1export IGNOREEOF="2"
serverhorror

5

Birkaç bitim var:

# stop the pc speaker ever annoying me :)
setterm -bfreq 0

# don't put duplicate lines in the history. See bash(1) for more options
HISTCONTROL=ignoredups
# ... and ignore same sucessive entries.
HISTCONTROL=ignoreboth

# Expand the history size
HISTFILESIZE=10000 
HISTSIZE=100

# commands with leading space do not get added to history
HISTCONTROL=ignorespace

# am I on the internet?
alias p4='ping 4.2.2.2 -c 4'

# pwsafe
alias pw='pwsafe -p'

# ls aliases
alias ll='ls -l'
alias la='ls -A'
alias l='ls -CF'
alias lt='ls -laptr' #oldest first sort
alias labc='ls -lap' #alphabetical sort

# cd aliases
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'

# cd into the old directory
alias bd='cd "$OLDPWD"'

# install a package and automatically respond yes to confirmation prompt
alias ins="sudo aptitude install"

# remove a package and its configuration files
alias remp="sudo aptitude purge"

# search for a package - apt-cache and aptitude search in different ways
# so have both
alias searchc="apt-cache search"
alias search="aptitude search"
alias show="aptitude show"

3
HISTCONTROL hatlarınız birbirini geçersiz kılar, çünkü bu sadece bir kabuk değişkenidir. ignoreboth, cehalet ve yok sayılanları birleştirir.
Annika Backstrom

4
cd -
Bd

5

Tüm kayıtları / var / log dizinine yerleştirin

alias logs="find /var/log -type f -exec file {} \; | grep 'text' | cut -d' ' -f1 | sed -e's/:$//g' | grep -v '[0-9]$' | xargs tail -f"

4

Grep, egrep ve zgrep gibi All grep komutları için renklere sahip olmak için .bashrc dosyasında aşağıdakiler var:

export GREP_OPTIONS='--color=auto'

4

'Klasörler' takma adı harika! Biraz değiştirdim, böylece boşluk içeren dizinler hataya neden olmaz.

alias folders='find . -maxdepth 1 -type d -print0 | xargs -0 du -sk | sort -rn'

2
klasörler disk kullanımına göre sınıflandırılmış, güzel
dotjoe

3

@ Pjz'nin bir şeyleri ayarlamaktan ziyade manuel olarak tanıma konusundaki yorumunu eko ederdim. Özellikle çok sayıda makineye erişirseniz, her zaman yaptığım gibi.

Bu yüzden kesinlikle bildiğim bir şey var set -o viçünkü bash'deki vi düzenleme komutlarını biliyorum ve emacs komutlarını da bilmiyorum (ayrıca, Ctrl + A buna müdahale ediyor screen). Kendi kutularıma koydum.bashrc

Ayrıca eklemek zorunda olduğumu da buluyorum export EDITOR=vimçünkü nano için varsayılan bazı dağıtımlar, vi'yi beklerken, bir şeyi düzenlemenizi gerektiren bir yardımcı program tarafından atılmaya en çok rahatsız edici olanıdır. : - /

Ben de istemi değiştiririm. Uzun zaman önce, son hata kodunu eklemenin hoşuma gittiği kadar kullanışlıdır. Ve istemdeki tam yol adını da beğendim. Ve şimdiki screensayı. Ve sadece geçerli kullanıcı ve hostname dahil etmek mantıklı. Benim istemiPS1='\u@\h $PWD $WINDOW [$?] \$ '


Tam yol adını vermeliyiz ('/ home / me' olduğunda '~' olduğunda ev dizini hiyerarşisinde değilseniz, örneğin :-)
dr-jan

Kullanmamam gereken "hariç" bitidir. :-)
staticsan

3

Pencere boyutunun değişip değişmediğini görmek için kontrol edin (terminal pencerenizi yeniden boyutlandırırsanız satır düzenlemenin garip olmasını önler)

shopt -s checkwinsize

Bu benim favorim. Bash için nedenler eklemek yerine tarihine üzerine yazarak bunu. Normalde bash'ı başlattığınızda, geçmişi belleğe yükler ve kapattığınızda onu yazar. Bu, iki mermi yüklerseniz, her ikisini de kullanırsanız, sonra ikisini de kapatırsanız, en son kapattığınız tüm değişikliklerin üzerine yazılır.

Bu pasaj, ilk önce yalnızca ekleme değişikliklerine (tüm tamponun üzerine yazmak yerine) ve ardından her komuttan sonra değişiklikleri yazmaya neden olmasına neden olur. Aslında, canlı bir güncelleme .bash_history alıyorsunuz, yani yeni bir terminale başlarsanız, diğer koşu seanslarınızın geçmişindeki tüm komutlara sahipsiniz.

shopt -s histappend
PROMPT_COMMAND='history -a'


3

İşte mayınlar:

export HISTCONTROL=ignoredups
export HISTIGNORE="&:ls:bg:fg"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# shows you if you are in a chroot or in a git repository
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;30m\]\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]$(__git_ps1)\$ '


if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi

# two handy single-letter aliases

alias u='ls -hltr'
alias e='du * -cs | sort -nr | head'
alias g='grep -C5 --color=auto'

# creates a temp dir and cds into it
alias td='pushd $(mktemp -d)'

# find <dir> <file name regexp> <file contents regexp>
function fing { find "$1" -name "$2" -exec grep -H "$3" "{}" \; }

# shows "git diff" across any project in any subdirectory
alias git-differ='for g in $(find . -name ".git"); do g=${g%%.git};printf "$g\t\t\t";pu $g >/dev/null && git diff |wc -l; p >/dev/null; done'

# does git house keeping across any project in any subdirectory
alias git-housekeep='for g in $(find . -name ".git"); do g=${g%%.git};echo $g;pu $g && git repack && git gc --auto && p;done'

# Debian update
alias apg='aptitude update && aptitude dist-upgrade && aptitude clean'

# Quick way to serve files in HTTP from the local dir
alias webs='python -m SimpleHTTPServer'

2

Bunlar benim favorilerim:

export HISTFILESIZE=1000000000
export HISTSIZE=1000000

Asla unutamayan bir komut satırı geçmişine sahip olmayı seviyorum.

Ne yazık ki, bir süre önce .bashrc okumayan crondan bir kabuk fırlattım ve her şeyi 500 çizgiye böldüm, bir yıldan fazla bir tarihe zarar verdim. Bu yüzden / etc / bashrc dizinine gitmelerini öneririm.


2

İşte favorilerimden birkaçı:

alias ls='ls -F --color=auto'
alias l='ls'
alias ll='ls -ahl'
alias ..='cd ..'
alias ...='cd ../..'
alias mv='mv -i'

mkcd() {
        if [ $# != 1 ]; then
                echo "Usage: mkcd <dir>"
        else
                mkdir -p $1 && cd $1
        fi
}

# Git related
alias gs='git status'
alias gc='git commit'
alias ga='git add'
alias gd='git diff'
alias gb='git branch'
alias gl='git log'
alias gsb='git show-branch'
alias gco='git checkout'
alias gg='git grep'
alias gk='gitk --all'
alias gr='git rebase'
alias gri='git rebase --interactive'
alias gcp='git cherry-pick'
alias grm='git rm'

2

Bunu en son değiştirilen dizine girmek için günde yaklaşık 20 kez kullanıyorum:

cl()
{
        last_dir="$(ls -Frt | grep '/$' | tail -n1)"
        if [ -d "$last_dir" ]; then
                cd "$last_dir"
        fi
}

Bu ikisi, sık kullanılan dizinlerin kalıcı yer imlerini tutar:

rd(){
    pwd > "$HOME/.lastdir_$1"
}

crd(){
        lastdir="$(cat "$HOME/.lastdir_$1")">/dev/null 2>&1
        if [ -d "$lastdir" ]; then
                cd "$lastdir"
        else
                echo "no existing directory stored in buffer $1">&2
        fi
}

2

Gönderen otomatikleştirme Linux ve Unix İdaresi Kirk Bauer tarafından (büyük kitap!)

PS1='\n[\u@\h]: \w\n$?> '

Başlangıçtaki yeni hat benim, önceki çıkış ile bilgi istemi arasında net bir çizgiye sahip olmak istiyorum. Dinlenme:

\ u = kullanıcı adı

\ h = ana bilgisayar

\ w = çalışma dizini

, $? = son dönüş kodu


1

Bir kaç şeyi el ile $ HOME / yerel olarak derliyorum, bu yüzden bu küçük pasajı alacağım:

for prog in $HOME/local/*
do
    if [ -d "$prog/bin" ]; then
        export PATH=$prog/bin:$PATH
    fi
    if [ -d "$prog/include" ]; then
        export C_INCLUDE_PATH=$prog/include:$C_INCLUDE_PATH
    fi
    if [ -d "$prog/lib" ]; then
        export LD_LIBRARY_PATH=$prog/lib:$LD_LIBRARY_PATH
        export LIBRARY_PATH=$prog/lib:$LIBRARY_PATH
    fi
    if [ -d "$prog/man" ]; then
        export MANPATH=$prog/man:$MANPATH
    fi
    if [ -d "$prog/share/man" ]; then
        export MANPATH=$prog/share/man:$MANPATH
    fi
done

Ayrıca IRC istemcimi sunucumda ekran üzerinde çalıştırıyorum, bu yüzden buna sahibim (.bashrc değil, ama yine de yararlı)

#!/usr/bin/env bash

RUNNING=`screen -ls | grep irc`
if [ "" = "$RUNNING" ]; then
   screen -S irc irssi
else
   screen -dr irc
fi

1

Bashrc'imi sayısız makinede kullanıyorum, bu yüzden LS'nin renklendirildiğinden emin olmak için bu küçük pasajı aldım. Eğer uname hattını ayarlarsanız bu işlem OSX makinelerinde, hatta * BSD'de düzeltilebilir.

if [ "$TERM" != "dumb" ]; then
    if [ `uname` == "Darwin" ]; then
       alias ls='ls -G'
    else
       eval "`dircolors -b`"
       alias ls='ls --color=auto'
    fi
fi

Ayrıca, bir yapılandırma dosyasını değiştirmek üzereyseniz ve elden önce hızlı bir kopya yapmak istiyorsanız, yararlı bir dosyayı yedekleme komutum var.

bu () { cp $1 ~/.backup/`basename $1`-`date +%Y%m%d%H%M`.backup ; }

@Andrew: İlk kodunuzu OSX'te başarısızlıkla çalıştırıyorum. İstemi ayarlarımı bozuyor.
Léo Léopold Hertz 준영

Burada iyi çalışıyor (10.6.X)
Rev316,

1

Bu benim favorilerimden biri:

alias ssh='if [ "$(ssh-add -l)" = "The agent has no identities." ]; then ssh-add; fi; /usr/bin/ssh "$@"'

Kimlik doğrulamayı unutmuşsam, bunu ssh oturumundan sonra ssh-add yaparak yazmamı boşa harcamadan yapmamı sağlar .


1

Birkaç iyi olanlar

SSH'yi, ssh ettiğiniz ana bilgisayar adını otomatik olarak tamamlayın (config ya da geçmişinizdeyse)

complete -o default -o nospace -W "$(/usr/bin/env ruby -ne 'puts $_.split(/[,\s]+/)[1..-1].reject{|host| host.match(/\*|\?/)} if $_.match(/^\s*Host\s+/);' < $HOME/.ssh/config)" scp sftp ssh

Bazı yararlı bash tamamlama ayarları

bind "set completion-ignore-case on" # note: bind used instead of sticking these in .inputrc
bind "set bell-style none" # no bell
bind "set show-all-if-ambiguous On" # show list automatically, without double tab

Mac OS X için yararlı olanlardan bazıları

alias nospotlight='sudo mdutil -a -i off'
alias cleardnscache='sudo killall -HUP mDNSResponder'
alias ldd='otool -L'
alias seq='jot - '
alias eject='drutil eject'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.