สิ่งใดที่มีประโยชน์สามารถเพิ่มให้กับ. bashrc [ปิด]


141

มีอะไรบ้างที่คุณขาดไม่ได้และจะทำให้ชีวิตของฉันง่ายขึ้นไหม? นี่คือบางส่วนที่ฉันใช้ ('ดิสก์' และ 'โฟลเดอร์' มีประโยชน์อย่างยิ่ง)

# 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
ในกรณีที่ใครก็ตามที่สนใจมีบริการที่ช่วยให้คุณสามารถเรียกดูสร้างรายการและแหล่งที่มานามแฝงของคุณ: alias.sh
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
มีคำสั่ง linux ที่ดีและเรียบง่ายที่เรียกว่า "unp", Unpacker ที่ทำสิ่งนี้และอื่น ๆ
Sander Marechal

คำสั่งมีหนึ่งคุณลักษณะที่ขาดหายไป ไม่สามารถเปิดแพ็คเกจ 7z ได้ที่boost.org/doc/libs/1_39_0/more/getting_started/ ......อย่างถูกต้อง คุณรู้วิธีแก้ปัญหาหรือไม่?
LéoLéopold Hertz 준영

7
tar รุ่นใหม่กว่าจะตรวจจับชนิดไฟล์เก็บถาวรโดยอัตโนมัติดังนั้นสามารถแยกรูปแบบที่สนับสนุนทั้งหมดได้โดย 'tar xvf'
ศ. มอริอาร์ตี้

@Sander dtrx ก็ไม่ได้แย่เหมือนกัน ทำให้แน่ใจว่าไฟล์เก็บถาวรแยกไปยังไดเรกทอรีย่อยของตัวเอง
Tobu

39

เนื่องจากฉันใช้เครื่องจักรที่แตกต่างกันมากมายฉัน.bashrcจึงตั้งค่าพรอมต์คำสั่งให้รวมชื่อเซิร์ฟเวอร์ที่ฉันลงชื่อเข้าใช้อยู่ วิธีนี้เมื่อฉันอยู่ลึกสามระดับใน telnet / ssh ฉันจะไม่พิมพ์สิ่งผิดในหน้าต่างที่ไม่ถูกต้อง มันแย่มากที่ไปrm -rf .ผิดทาง! (หมายเหตุ: ที่บ้าน telnet ถูกปิดใช้งานในทุกเครื่องในที่ทำงาน 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
ฉันยังแสดงสถานะในพรอมต์ของฉัน แต่เก็บค่าตัวเลขและสีแดงถ้าไม่ใช่ศูนย์หรือสีเขียว
pgs

น่าสนใจ ....
imapollo

25

สีสำหรับ manpages ที่น้อยลงทำให้ manpages อ่านง่ายขึ้นเล็กน้อย:

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'

manpages แบบสีสามารถรับได้โดยการติดตั้งส่วนใหญ่และใช้เป็น MANPAGER env variable หากคุณต้องการใช้เพจเจอร์นี้ไม่เพียง แต่สำหรับคนใช้ตัวแปร PAGER เช่นนี้:

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

24

ไม่มี cd ../../../ .. แต่มากถึง 4

เพิ่มจำนวนมากขึ้นตามจำนวนที่ส่งเป็นอาร์กิวเมนต์ถ้าไม่มีค่าใดเพิ่มขึ้น 1 ตามค่าเริ่มต้น (พบในลิงก์ในความคิดเห็นใน 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จะช่วยเขย่าเบา ๆ ความจำของฉัน

ฉันมักจะพบว่าตัวเอง piping output ผ่าน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 เกินไป ... มันทำให้ทุกคนเพื่อให้ง่าย
Devin

1
+1 สำหรับเคล็ดลับการควบคุมประวัติ
Rene Saarsoo

2
คุณสามารถใส่ชื่อแทนชื่อโฮสต์ใน. ssh / config ให้กับเอฟเฟกต์เดียวกัน ในกรณีนี้เพิ่มรายการ 'Host cloudius' ด้วย 'ชื่อผู้ใช้ dinomite'
Sirex

15

bashrc ที่เข้ารหัสของ GPG

ฉันแน่ใจว่าเราทุกคนมีสิ่งที่เราต้องการใส่ใน bashrc ของเราที่เราไม่ต้องการให้ sudoers อ่านง่าย วิธีแก้ปัญหาของฉันคือ:

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' บ่อยครั้งในเซิร์ฟเวอร์ที่รันอะเวย์
Gareth

ใช่ฉันมีบางสิ่งที่คล้ายกับที่จริง (du / home / * --max-depth 1 | sort -n> /home/.sizes) ทำงานทุกคืน เครื่องที่ใช้ร่วมกัน
pjz

1
เป็นเรื่องง่ายพอที่จะปรับใช้การกำหนดค่าแบบกำหนดเองของคุณบนระบบที่คุณใช้เป็นประจำ
Tobu

เช่นเดียวกับการติดตามนามแฝงของคุณนี่คือสิ่งที่ฉันทำตลอดเวลา ฉันมักจะทำกับ IP แม้ว่าในกรณีที่ DNS ดับ
jwbensley

9

หนึ่งสมุทรและสคริปต์เล็ก ๆ ที่นั่นสามารถไปได้ตลอดไป ฉันแนะนำคนทุบตีและเขียนสิ่งต่าง ๆ ด้วยตัวคุณเอง บางสิ่งที่ดีทุบตีสั้นhttp://www.commandlinefu.com นี่คือบางสิ่ง

#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

เคล็ดลับเล็กน้อยสำหรับ Bash หากคุณเป็นผู้ดูแลระบบและทำงานกับสิทธิ์พิเศษมากมาย:

shopt -o noclobber

วิธีนี้จะป้องกันคุณจากการทำลายเนื้อหาของไฟล์ที่มีอยู่แล้วโดยไม่ตั้งใจหากคุณเปลี่ยนเส้นทางเอาต์พุต (> ชื่อไฟล์) คุณสามารถบังคับให้เขียนทับด้วยชื่อไฟล์> |


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 ของคุณ) จากนั้นเมื่อใดก็ตามที่คุณใช้ SSH หน้าจอจะพยายามเชื่อมต่อกับหน้าจอที่ถูกตัดการเชื่อมต่อโดยอัตโนมัติ หากล้มเหลวระบบจะสร้างหน้าจอใหม่
Dan Udey

@Dan Udey ฉันยังไม่ได้ลองสิ่งที่คุณแนะนำตัวเอง แต่ทุบตีฉันโพสต์จะเริ่มต้นหน้าจอเฉพาะในการเข้าสู่ระบบ 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 2) พิมพ์ 'bash' 3) พิมพ์ 'echo $ PATH' 4) พิมพ์ 'bash' 5) พิมพ์ 'echo $ PATH' 6) ชกต่อยตัวเองในหัวสำหรับการ downvoting และดูถูกคนไม่รู้เพราะพวกเขารู้เพิ่มเติมเกี่ยวกับการปฏิบัติที่ดีที่สุดดูแลระบบกว่าคุณ
ความวุ่นวาย

ฉันประทับใจที่คุณมีเหตุผลที่ถูกต้องเล็กน้อยไม่ไปชกต่อหน้าตัวเอง มันง่ายที่จะได้รับกระสุนที่ไม่ใช่การเข้าสู่ระบบที่เส้นทางของคุณยังไม่ได้ขยาย ฉันจะนำมันกลับมาเป็นใบ้ฉันอ่านว่าคุณพยายามบอกว่าคุณไม่ควรตั้งค่าตัวแปรที่สำคัญใน. bashrc หรือบางอย่าง
เอียน Kelling

บางทีบางคนควรเริ่มต้น "ฉันควรตั้งค่าตัวแปร PATH ของฉันใน. bashrc หรือ. bash_profile" หรือไม่
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

+1 สำหรับ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 ของคุณจะแทนที่ซึ่งกันและกันเนื่องจากเป็นเพียงตัวแปรเชลล์ ignboth รวมการไม่ตอบสนองและการละเว้น
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 ทั้งหมดเช่น grep, egrep และ zgrep ฉันมีดังต่อไปนี้ใน. bashrc ของฉัน

export GREP_OPTIONS='--color=auto'

4

นามแฝง 'folder' ยอดเยี่ยมมาก! ฉันแก้ไขมันเล็กน้อยเพื่อให้ไดเรกทอรีที่มีช่องว่างไม่ทำให้เกิดข้อผิดพลาด

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

2
โฟลเดอร์เรียงตามการใช้งานดิสก์, ดี
dotjoe

3

ฉันจะแสดงความคิดเห็นของ echo @ pjz เกี่ยวกับการรู้สิ่งต่าง ๆ ด้วยตนเองแทนที่จะตั้งค่า โดยเฉพาะอย่างยิ่งถ้าคุณเข้าถึงเครื่องจักรจำนวนมากอย่างที่ฉันทำอยู่เสมอ

ดังนั้นอย่างหนึ่งที่ฉันรู้คือset -o viเพราะฉันรู้ว่าคำสั่งการแก้ไข vi ในทุบตีและฉันไม่รู้จักพวก emacs (นอกเหนือจาก Ctrl + A รบกวนด้วยscreen) ในกล่องของฉันฉันใส่มันลงไป.bashrc

ฉันยังพบว่าฉันต้องใส่export EDITOR=vimเพราะจำนวน distros ล่าสุดเป็น nano ซึ่งน่ารำคาญที่สุดที่ยูทิลิตี้ที่ต้องการให้คุณแก้ไขบางสิ่งบางอย่างเมื่อฉันคาดหวังว่า vi : - /

ฉันยังเปลี่ยนพรอมต์ของฉัน ฉันพบเมื่อนานมาแล้วว่าการเพิ่มรหัสข้อผิดพลาดครั้งล่าสุดนั้นมีประโยชน์มากพอที่ฉันจะชอบ และฉันชอบชื่อพา ธ เต็มในพรอมต์ และscreenจำนวนปัจจุบันด้วย และมันก็สมเหตุสมผลที่จะรวมผู้ใช้ปัจจุบันและชื่อโฮสต์ พรอมต์ของฉันคือPS1='\u@\h $PWD $WINDOW [$?] \$ '


w \ ควรให้ชื่อพา ธ เต็ม (ยกเว้นกรณีที่คุณอยู่ในลำดับชั้นไดเรกทอรีบ้านของคุณเมื่อ '/ home / ฉัน' กลายเป็น '~' เช่น :-)
DR-มกราคม

เป็นบิต "ยกเว้น" ที่ฉันไม่ได้ใช้ \ w :-)
staticsan

3

มีการตรวจสอบการทุบตีเพื่อดูว่าขนาดของหน้าต่างเปลี่ยนไปหรือไม่

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

ฉันชอบมีประวัติบรรทัดคำสั่งที่ไม่เคยลืม

โชคไม่ดีที่ฉันกลับมาเปิดตัวกระสุนจาก cron ซึ่งไม่ได้อ่าน bashrc อย่างใดเลยและตัดทุกอย่างลงเหลือ 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

จากAutomating Linux และ Unix Administrationโดย Kirk Bauer (หนังสือดีมาก!)

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 นั้นมีสีสด สิ่งนี้จะแก้ไขได้บนเครื่อง OSX หรืออาจจะเป็น * BSD หากคุณปรับเปลี่ยนบรรทัด uname

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éoLé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-add หลังจากเซสชั่น ssh


1

คู่รักที่ดี

ทำให้ SSH กรอกชื่อโฮสต์ให้คุณโดยอัตโนมัติ (ถ้าอยู่ใน config หรือประวัติของคุณ)

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

การตั้งค่าเสร็จสิ้นการทุบตีที่มีประโยชน์บางอย่าง

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.