שאלה אילו דברים שימושיים ניתן להוסיף לאחד .bashrc? [סגור]


האם יש משהו שאתה לא יכול לחיות בלי ולעשות את החיים שלי הרבה יותר קל? הנה כמה שאני משתמש ('diskspace' & 'תיקיות' הן שימושיות במיוחד).

# 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




זה צריך להיות ויקי הקהילה - Toro
הפך לוויקי. תהנה. - Gareth
צייץ יותר? אני בטוח שאתה תהיה מאושר יותר עם פחות או יותר - ו - derobert
חוץ מזה שיש "מיון" לפני יותר, שכן מיין צריך את הקלט המלא, פחות F-פשוט ייתן לך לראות את מיון מהר יותר, ואני בטוח שזה די מהר dang. - GreenKiwi
רק למקרה שמישהו מעוניין, יש שירות המאפשר לך לגלוש, לבנות רשימה ומקור כינויים שלך: alias.sh - Sam152


תשובות:


יש לי סקריפט קטן שמחלץ ארכיונים, מצאתי אותו איפשהו ברשת:

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



נחמד. שוב, יש את זה IDE / VIM טענה לגבי לדעת את הפקודות מהזיכרון. חתיכת פנטסטי של סקריפט אף. בהחלט הולך ב .bashrc לחיים! - Gareth
יש פקודה לינוקס נחמד ופשוט שנקרא "לא", את Unpacker שעושה את זה ועוד. - Sander Marechal
הפקודה כוללת תכונה חסרה אחת. זה לא יכול לפתוח את החבילה 7z ב boost.org/doc/libs/1_39_0/more/getting_started/... נכונה. האם אתה יודע איך לפתור את הבעיה? - Léo Léopold Hertz 준영
גירסאות חדשות יותר של זפת לזהות באופן אוטומטי את סוג הארכיון, ולכן ניתן לחלץ את כל הפורמטים הנתמכים על ידי "זפת xvf" בלבד. - Prof. Moriarty
@Sander dtrx לא רע גם בזה. זה מוודא את הארכיון מחלץ לתיקיה משלו. - Tobu


מאז אני משתמש כל כך הרבה מכונות שונות, שלי .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} "

סקריפט זה מגדיר את הפקודה לשם המארח ואחריו :) אם הפקודה האחרונה היתה מוצלחת :( אם הפקודה האחרונה נכשלה.


39



$? המחאה היא רעיון מסודר למדי, אני אוהב את זה. - derobert
אני גם להראות את הסטטוס של הפקודה שלי, אבל לשמור את הערך המספרי והצבע האדום אם לא אפס, ירוק אחרת. - pgs
מעניין .... - imapollo


צבע עבור 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. אם ברצונך להשתמש ביפר זה לא רק לאדם, השתמש במשתנה PAGER, כך:

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

25





לא עוד CD ../../../ .. אבל עד 4

עולה dirs רבים כמו מספר עבר כארגומנט, אם אף אחד לא עולה על ידי 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
}

24



גרסה זו של למעלה () נראה מורכב שלא לצורך. אני משתמש בגירסה זו: up () {cd $ (eval printf '../'%.0s {1 .. $ 1}) && pwd; }. אתה יכול להסיר את השיחה ל 'pwd' אם אתה רוצה כמובן. - Matthew G
אני משתמש במשהו כזה: # כיווני ניווט במדריך alias ..='cd ..' alias ...='cd ../..' alias ....='cd ../../..' alias .....='cd ../../../..' - Matt Kenefick


אני מתעסק עם הרבה מכונות שונות כך אחד המועדפים שלי הוא כינויים עבור כל מכונה כי אני צריך לעתים קרובות SSH ל:

alias claudius="ssh dinomite@claudius"

זה גם שימושי כדי להגדיר טוב .ssh/config ו מפתחות כדי להפוך את הקפיצה בין מכונות אפילו יותר קל.

עוד אחד הכינויים האהובים עלי הוא להעברת ספריות:

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"

ההיסטוריה יכולה להיות שימושית מאוד, אבל כברירת מחדל על רוב התפלגויות ההיסטוריה שלך הוא blown משם על ידי כל פגז יציאה, וזה לא מחזיק הרבה מלכתחילה. אני אוהב שיש 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).


19



אני משתמש כינוי ssh ומפתחות ssh מדי ... זה עושה כל כך קל - devin
1+ עבור טיפים לבקרת היסטוריה. - Rene Saarsoo
אתה יכול לשים כינויים hostname ב .ssh / config לאותו אפקט. במקרה זה, להוסיף ערך 'מארח cloudius' עם 'שם משתמש dinomite' - Sirex


GPG מוצפן Bashrc

אני בטוח שלכולנו יש דברים שאנחנו רוצים לשים את 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; }

15



האם אתה גם להצפין את ההיסטוריה שלך במקרה זה? למה לא להצפין את הבית $ שלך - Rqomey
@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' )


12



מוסכם על שינון פקודות שימושיות ארוכות. אני מוצא כי אני מפעיל 'diskspace' לעתים קרובות על שרצים בורח (כלומר PHP הוא coredumping בכל מקום). - Gareth
כן, למעשה יש לי משהו דומה לזה שאני יכול לשמור על העין הגסה של צריכת המרחב של המשתמשים שלי. מחשב משותף. - pjz
קל מספיק לפרוס את התצורה המותאמת אישית שלך במערכות שבהן אתה משתמש באופן קבוע. - Tobu
רק בתור מעקב עד אליך כינוי, זה משהו שאני עושה כל הזמן. אני תמיד עושה את זה עם ה- IP אם במקרה של הפסקת DNS. - jwbensley


הספינות האחרות והסקריפטים הזעירים שם יכלו להימשך לנצח. אני ממליץ לגבר ולכתוב דברים בעצמך. כמה דברים טובים bash קצר ב http://www.commandlinefu.com. Heres כמה דברים.

#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



אני אוהב את שלך history -p טריק. - Tobu


טיפ קטן עבור באש אם אתה סיסדמין ולעבוד עם הרשאות שורש הרבה:

shopt -o noclobber

הדבר ימנע ממך להרוס בטעות את התוכן של קובץ קיים כבר אם אתה מפנה מחדש את הפלט (> שם הקובץ). אתה תמיד יכול להכריח להחליף עם> | שם קובץ.


9





יש לי את הבא בשארש שלי

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:~]$

8