.bashrc에 어떤 유용한 것들을 추가 할 수 있습니까? [닫은]


141

당신이 없이는 살 수없고 내 인생을 훨씬 더 쉽게 만들 수있는 것이 있습니까? 여기 내가 사용하는 것들이 있습니다 ( 'diskspace'& 'folders'가 특히 편리합니다).

# 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
커뮤니티 위키 여야합니다
Toro

1
커뮤니티 위키로 바뀌 었습니다. 즐겨.
Gareth

4
더 파이프? 난 당신이 더 적은 이하 -F 함께 행복 할 거라고 내기
derobert

정렬이 전체 입력을 필요로하기 때문에 더 많은 "정렬"이 있다는 것을 제외하고는 -F가 적을수록 정렬을 더 빨리 볼 수 있으며 꽤 빠릅니다.
GreenKiwi

1
누구나 관심이 있으시다면
Sam152

답변:


81

아카이브를 추출하는 작은 스크립트가 있는데 인터넷 어딘가에 있습니다.

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
좋은. 그럼에도 불구하고 IDE / Vim 인수는 메모리의 명령을 알고 있습니다. 그래도 환상적인 스크립트입니다. .bashrc 건배에 확실히 간다!
Gareth

19
"unp"라는 훌륭하고 간단한 리눅스 명령이 있습니다. Unpacker는 이것을 수행합니다.
샌더 Marechal

명령에 누락 된 기능이 하나 있습니다. boost.org/doc/libs/1_39_0/more/getting_started/… 에서 7z 패키지를 열 수 없습니다 . 문제를 해결하는 방법을 알고 있습니까?
Léo Léopold Hertz 준영

7
최신 버전의 tar는 아카이브 유형을 자동으로 감지하므로 'tar xvf'만으로 지원되는 모든 형식을 추출 할 수 있습니다.
교수 Moriarty

@Sander dtrx도 그다지 나쁘지 않습니다. 아카이브가 자체 서브 디렉토리로 추출되도록합니다.
Tobu

39

다른 컴퓨터를 많이 사용하기 때문에 .bashrc항상 현재 로그인 한 서버의 이름을 포함하도록 명령 프롬프트를 설정합니다. 이렇게하면 telnet / ssh의 세 수준 깊이에있을 때 잘못된 창에 잘못된 것을 입력하지 않습니다. 정말 rm -rf .잘못된 창으로 빨려 들어갑니다 ! (참고 : 집에서는 모든 컴퓨터에서 텔넷이 비활성화되어 있습니다. 직장에서 ssh는 항상 활성화되어 있지 않으며 많은 컴퓨터에 대한 루트 액세스 권한이 없습니다.)

내에 ~/bin/setprompt의해 실행되는 스크립트 가 .bashrc있습니다.

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

이 스크립트는 프롬프트를 호스트 이름으로 :)설정하고 마지막 명령이 성공 :(했는지 여부와 마지막 명령이 실패했는지 여부를 설정합니다.


$? 확인은 매우 깔끔한 아이디어입니다.
derobert

6
또한 프롬프트에 상태를 표시하지만 숫자 값을 유지하고 0이 아닌 경우 빨간색으로 표시하고 그렇지 않으면 녹색으로 표시하십시오.
pgs

흥미있는 ....
imapollo

25

맨 페이지의 색상이 적 으면 맨 페이지를 좀 더 쉽게 읽을 수 있습니다.

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'

컬러 맨 페이지는 대부분을 설치하고 MANPAGER env 변수로 사용하여 얻을 수도 있습니다. 이 호출기를 man뿐만 아니라 PAGER 변수를 사용하려면 다음과 같이 사용하십시오.

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

24

더 이상 cd ../../../ .. 최대 4 개

기본적으로 1만큼 올라가지 않는 경우 인수로 전달 된 수만큼 많은 수의 dirs를 증가시킵니다 (stackoverflow.com의 주석 링크에 있고 비트를 수정 함)

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 ()은 불필요하게 복잡해 보입니다. 이 버전을 사용합니다 : up () {cd $ (eval printf '../'%.0s {1 .. $ 1}) && pwd; }. 원하는 경우 'pwd'호출을 제거 할 수 있습니다.
Matthew G

# 디렉토리 탐색 별칭alias ..='cd ..' alias ...='cd ../..' alias ....='cd ../../..' alias .....='cd ../../../..'
Matt Kenefick

19

나는 많은 다른 머신을 다루기 때문에 내가 가장 좋아하는 것 중 하나는 자주 SSH 해야하는 각 머신의 별칭입니다.

alias claudius="ssh dinomite@claudius"

또한 좋은 설정에 유용 .ssh/config하고 SSH 키 도 쉽게 기계 사이에 호핑 확인합니다.

내가 가장 좋아하는 별명 중 하나는 디렉토리를 옮기는 것입니다.

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

그리고 일반적으로 사용되는 ls(및 오타) 변형의 일부 :

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"

히스토리는 매우 유용 할 수 있지만 기본적으로 대부분의 배포판에서는 히스토리가 종료 될 때마다 히스토리가 사라지고 시작하기에는 많은 시간이 걸리지 않습니다. 나는 10,000 줄의 역사를 갖고 싶다.

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"

그렇게하면 내가 전에 무언가를했지만 세부 사항을 기억하지 못한다는 것을 알면 빨리 기억을 끌어내는 history | grep foo데 도움이됩니다.

각 디스크의 크기를 찾는 awk것처럼 출력의 특정 열을 얻기 위해 출력을 파이핑하는 경우가 종종 df -h | awk '{print $2}'있었습니다. 이것을 쉽게하기 위해 fawk.bashrc에 함수 를 만들었습니다 .

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

나는 이제 df -h|fawk 2타이핑을 잘 할 수있는 달리기 를 할 수있다 .

당신은 구분 기호를 (지정해야하는 경우 예를 들어 , awk -F:위해 /etc/passwd),이 기능은 명백히을 처리 할 수 없습니다. 이 요지 에서 약간 개선 된 버전 awk은 필드 번호 앞에 임의의 인수를 처리 할 수 ​​있습니다 (그러나 여전히 stdin의 입력이 필요합니다).


2
ssh 별칭과 ssh 키도 사용합니다. 모든 것이 매우 쉬워
졌습니다.

1
히스토리 제어 팁에 +1
Rene Saarsoo 2016 년

2
.ssh / config에 호스트 이름 별명을 동일한 효과로 넣을 수 있습니다. 이 경우 'username dinomite'와 함께 'Host cloudius'항목을 추가하십시오
Sirex

15

GPG 암호화 bashrc

우리 모두 sudoers가 쉽게 읽을 수 없도록 bashrc에 넣고 싶은 것을 가지고 있다고 확신합니다. 이것에 대한 나의 해결책은 다음과 같습니다.

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

GPG 에이전트가 있으므로 몇 시간마다 개인 키의 비밀번호 만 입력하면됩니다. 사용자가 정의한 변수, 함수 및 별명을 RAM에서 추출 할 수 있기 때문에 여전히 시스템 사용자를 신뢰해야합니다. 그러나 나는 주로 내 노트북에 사용합니다. 도난 당하면 다음과 같은 것을 쉽게 보지 않기를 바랍니다.

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

이 경우에도 이력을 암호화합니까? 왜 $ home을 암호화하지
않겠습니까

@Rqomey, 요점은 암호가 별칭이나 함수에 의해 숨겨져 있기 때문에 내 .bash_history에 암호가 표시되지 않으므로 내 기록을 암호화 할 필요가 없다는 것입니다. 그것에서 당신은 MYsql < garbagecollect.sql대신 같은 것을 볼 수 있습니다mysql -uadmin -psecret < garbagecollect.sql
Bruno Bronosky


12

나는 이것을 사방에 설치했지만 1) 진행중인 것을 완전히 이해하고 2) 다음과 같은 경우 에도이 기능에 액세스 할 수 있기 때문에 '수동으로'수행하는 방법을 기억하는 것이 낫다는 것을 깨달았습니다. 내 사용자 지정 .bashrc가 설치되지 않았습니다.

나는이 일을 위해 별칭을 사용하는 유일한 방법은 정말 긴 줄의 반복적 인 타이핑을 줄이기 위해입니다 (예. alias myhost='ssh -T user@my.remote.host screen -dAr')


2
오랫동안 유용한 명령을 암기하는 데 동의했습니다. 나는 도망가는 서버에서 'diskspace'를 상당히 자주 실행한다는 것을 알았습니다 (즉, PHP는 모든 곳에서 코어 덤프됩니다).
Gareth

예, 실제로 야간에 실행되는 것과 비슷한 것이 있습니다 (du / home / * --max-depth 1 | sort -n> /home/.sizes). 공유 컴퓨터.
pjz

1
하지만 정기적으로 사용하는 시스템에 사용자 지정 구성을 배포하는 것은 쉽습니다.
Tobu

ssh 별칭에 대한 후속 조치와 마찬가지로 항상 내가하는 일입니다. DNS 중단의 경우 항상 IP 로이 작업을 수행합니다.
jwbensley

9

하나의 라이너와 작은 스크립트는 영원히 계속 될 수 있습니다. 나는 남자 배쉬와 글쓰기를 추천한다. http://www.commandlinefu.com의 좋은 bash 자료 . 여기 몇 가지가 있습니다.

#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
나는 당신의 history -p트릭을 좋아합니다 .
Tobu

9

sysadmin이고 루트 권한을 많이 사용하는 경우 Bash에 대한 작은 팁 :

shopt -o noclobber

이렇게하면 출력 (> 파일 이름)을 리디렉션 할 경우 기존 파일의 내용이 실수로 삭제되지 않습니다. > | filename을 사용하여 강제로 덮어 쓸 수 있습니다.


8

내 bashrc에 다음이 있습니다.

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

로컬 컴퓨터에서는 다음과 같습니다.

[17:57][user:~]$

그러나 원격에서 (ssh를 통해) 다음과 같습니다.

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

6

나는 이것을 .bashrc에 잠시 동안 가지고 있었고 그것이 도움이되는 것을 발견했다. 상자에 넣을 때 로그인 할 때 자동으로 시작 화면입니다. 그러면 네트워크 연결이 중단되거나 무엇이든간에 수행중인 모든 것을 잃지 않습니다. 끝에 배치해야합니다.

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

로그인 셸을 화면으로 설정하고 (예 : .screenrc에서 bash를 구성) SSH를 연결할 때마다 화면에서 자동으로 연결이 끊긴 화면에 다시 연결을 시도합니다. 실패하면 새 화면이 생성됩니다.
Dan Udey

@ Dan Udey 나는 당신이 나에게 제안한 것을 시도하지 않았지만, 내가 게시 한 bash는 ssh 로그인에서만 화면을 시작합니다. 로그인 쉘처럼 화면을 설정하고 로컬 로그인에서도 시작했습니다. 어쩌면 당신이 원하는 것. 내가 원하는 것이 아닙니다. :-)
baudtack

연결 끊기가 걱정되면 mosh를 확인하십시오. 항상 사용하고 강력히 추천합니다. mosh.mit.edu
jwbensley

5

fortune어쨌든 얼마나 많은 별칭 이 필요합니까?

cdd현재 해당 서버에서 작업 할 가능성이 가장 높은 곳으로 이동 하는 별칭 을 만들고 싶습니다 .

PATH재정 정말에 속하는 .bash_profile하지 .bashrc.

내가 일상적으로 큰 세트를 사용하는 서버에서 screen, 내 .bashrc의지는 :

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

( screens는 예를 들어로 설정되었습니다 screen -U -S chaos1.)


2
@chaos "어쨌든 얼마나 많은 별칭이 필요한가요?" 승리를 위해 우. 실패에 대한 frak (및 대체 철자법).
Gareth

다음 단계를 따르십시오. 1) .bashrc에서 PATH를 확장하십시오. 2) 'bash'를 입력하십시오. 3) 'echo $ PATH'를 입력하십시오. 4) 'bash'를 입력하십시오. 5) 'echo $ PATH'를 입력하십시오. 6) 사람들보다 sysadmin 모범 사례에 대해 더 많이 알고 있기 때문에 사람들을 무의식적으로 억압하고 모욕하기 위해 머리를 숙입니다.
혼돈

나는 당신이 약간의 정당한 이유가 있지만 얼굴에 자신을 펀치하지 않을 것이라는 것에 깊은 인상을 받았습니다. 경로가 아직 확장되지 않은 비 로그인 쉘을 쉽게 얻을 수 있습니다. 나는 그 바보 같은 것을 되 찾는다. 나는 원래 .bashrc 나 중요한 변수를 설정해서는 안된다는 것을 읽었다.
Ian Kelling

"누군가".bashrc 또는 .bash_profile에서 PATH 변수를 설정해야합니까? "
Gareth

3
@ Ian Kelling : 실제로 말하고있는 것은 로그인 당 한 번 수행 해야하는 작업은 .bash_profile에 속하고 셸 인스턴스화 당 한 번 수행 해야하는 작업은 .bashrc에 속한다는 것입니다.
혼돈

5

무엇보다도, 나는 기본값을 적게 설정하고 실수로 터미널을 닫지 못하게하고 기록을 통해 앞으로 탐색 할 수 있습니다.

# 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

export IGNOREEOF="2"
serverhorror의

5

몇 가지 비트가 있습니다.

# 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 줄은 단지 쉘 변수이기 때문에 서로를 재정의합니다. ignoreboth는 ignorespace와 ignoreups를 결합합니다.
Annika Backstrom

4
cd -bd 대신 시도
ptman

5

/ var / log의 모든 로그를 조정하십시오.

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 및 zgrep와 같은 모든 grep 명령의 색상을 가지려면 .bashrc에 다음이 있습니다.

export GREP_OPTIONS='--color=auto'

4

'폴더'별칭은 훌륭합니다! 공백이있는 디렉토리가 오류를 일으키지 않도록 약간 수정했습니다.

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

2
디스크 사용량별로 정렬 된 폴더
dotjoe

3

나는 물건을 설정하는 대신 수동으로 아는 것에 대한 @pjz의 의견을 에코합니다. 특히 내가 항상하는 것처럼 많은 컴퓨터에 액세스하는 경우.

그래서 나는 확실히 알고 하나는 set -o vi내가 떠들썩한 파티에서 VI 편집 명령을 알고 나는 (이 외에, Ctrl + A가 방해 이맥스 것들을 모르기 때문에 screen). 내 상자에 넣었 어.bashrc

또한 export EDITOR=vimvi를 기대할 때 무언가를 편집 해야하는 유틸리티에 의해 가장 성가 시게되는 많은 최신 배포판이 nano로 기본 설정 되어 있기 때문에 포함시켜야 한다는 것을 알았습니다. :-/

또한 프롬프트를 변경합니다. 오래 전에 마지막 오류 코드를 추가하는 것이 내가 좋아할만큼 유용하다는 것을 오랫동안 발견했습니다. 그리고 프롬프트에서 전체 경로 이름을 좋아합니다. 그리고 현재 screen번호도. 그리고 현재 사용자와 호스트 이름을 포함시키는 것이 합리적입니다. 내 프롬프트는PS1='\u@\h $PWD $WINDOW [$?] \$ '


\ w는 전체 경로 이름을 제공해야합니다 ( '/ home / me'가 '~'가 될 때 홈 디렉토리 계층 구조 내에 있지 않는 한) :-)
dr-jan

\ w를 사용하지 않는 것은 "제외"비트입니다. :-)
staticsan

3

bash에서 창 크기가 변경되었는지 확인하십시오 (터미널 창 크기를 조정하면 줄 편집이 이상하지 않도록)

shopt -s checkwinsize

이것은 내가 가장 좋아하는 것입니다. bash가 덮어 쓰지 않고 히스토리 에 추가 하도록 합니다. 일반적으로 bash를 시작하면 메모리에 기록이로드되고 닫으면 기록됩니다. 즉, 두 개의 셸을로드하고 두 셸을 모두 사용한 다음 모두 닫으면 마지막으로 닫은 것이 모든 변경 사항을 덮어 씁니다.

이 스 니펫은 우선 전체 버퍼로 덮어 쓰지 않고 변경 사항 만 추가 한 다음 모든 명령 후에 변경 사항을 작성하도록합니다. 실제로 .bash_history를 실시간으로 업데이트하므로 새 터미널을 시작하면 실행중인 다른 세션 기록의 모든 명령이 있습니다.

shopt -s histappend
PROMPT_COMMAND='history -a'


3

광산은 다음과 같습니다.

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

이들은 내가 좋아하는 것입니다 :

export HISTFILESIZE=1000000000
export HISTSIZE=1000000

나는 결코 잊을 수없는 명령 줄 역사를 가지고있다.

불행히도, 나는 어떻게 든 .bashrc를 읽지 않은 cron에서 쉘을 시작했으며 모든 것을 500 줄까지 잘라서 몇 년 동안의 역사를 파괴했습니다. 그래서 나는 / etc / bashrc에 들어가는 것이 좋습니다.


2

여기 내가 좋아하는 몇 가지가 있습니다.

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

나는 이것을 하루에 약 20 번 사용하여 마지막으로 변경된 디렉토리로 cd합니다.

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

이 두 가지는 자주 사용되는 디렉토리의 영구 책갈피를 유지합니다.

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

에서 자동화 리눅스와 유닉스 관리 커크 바우어 (좋은 책!)

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

처음에 줄 바꿈은 내 것입니다. 이전 출력과 프롬프트 사이에 명확한 줄이 있습니다. 나머지는 :

\ u = 사용자 이름

\ h = 호스트

\ w = 작업 디렉토리

$? = 마지막 리턴 코드


1

나는 많은 것들을 $ HOME / local에 수동으로 컴파일하여이 작은 스 니펫을 갖습니다.

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

또한 화면에서 실행중인 서버에 IRC 클라이언트가 있으므로 이것을 가지고 있습니다 (.bashrc는 아니지만 여전히 유용합니다)

#!/usr/bin/env bash

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

1

나는 많은 기계에서 내 bashrc를 사용하므로 LS가 채색되도록이 작은 발췌 문장이 있습니다. 이것은 uname 라인을 조정하면 OSX 시스템에서, 심지어 * BSD에서도 수정됩니다.

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

또한 파일을 백업하는 명령이있어 구성 파일을 변경하려고하고 사전에 빠른 사본을 만들고 싶을 때 유용합니다.

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

@Andrew : OSX에서 첫 번째 코드를 성공적으로 실행하지 못했습니다. 프롬프트 설정이 깨집니다.
Léo Léopold Hertz 준영

여기서 잘 작동합니다 (10.6.X)
Rev316

1

이것은 내가 가장 좋아하는 것 중 하나입니다.

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

인증을 잊어 버린 경우 ssh 세션 후에 ssh-add를 수행하는 타이핑을 낭비하지 않고도 그렇게 할 수 있습니다 .


1

몇 가지 좋은 것들

SSH가 ssh 호스트 이름을 자동으로 완성하도록하십시오 (구성 또는 히스토리에있는 경우)

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

유용한 bash 완료 설정

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에 유용한 몇 가지

alias nospotlight='sudo mdutil -a -i off'
alias cleardnscache='sudo killall -HUP mDNSResponder'
alias ldd='otool -L'
alias seq='jot - '
alias eject='drutil eject'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.