Ты часто работаешь в шелле? А я - ДА!
Тебе удобно работать в шелле? А мне - ДА!
А дело тут просто: нужно настроть файлик ~/.bashrc и больше не придется париться, а работа станет быстрее и удобнее.
Ниже я выложил содержимое моего файла ~/.bashrc и комментариями, поэтому разберешься сам. Ну а я думаю тебе будет это полезно узнать (если еще не знаешь)... =)
В основном этот конфиг заточен под убунту, для других *nix систем его пидется подправить немножко...
# Для начала определить некоторые цвета:
red='\e[0;31m' # Красный, темнее след.
RED='\e[1;31m' # Красный, светлее пред.
blue='\e[0;34m' # Синий, темнее след.
BLUE='\e[1;34m' # Синий, светлее пред.
cyan='\e[0;36m' # Циановый, темнее след.
CYAN='\e[1;36m' # Циановый, светлее пред.
NC='\e[0m' # No Color (нет цвета)
# Определил 2 раза для удобства :)
Black='\e[0;30m'
DarkGray='\e[1;30m'
Blue='\e[0;34m'
LightBlue='\e[1;34m'
Green='\e[0;32m'
LightGreen='\e[1;32m'
Cyan='\e[0;36m'
LightCyan='\e[1;36m'
Red='\e[0;31m'
LightRed='\e[1;31m'
Purple='\e[0;35m'
LightPurple='\e[1;35m'
Brown='\e[0;33m'
Yellow='\e[1;33m'
LightGray='\e[0;37m'
White='\e[1;37m'
NoColor='\e[0m'
# Лучше выглядит на черном фоне.....
echo -en "${red}"
date "+%A, %d %B %Yг. %H:%M:%S (%:::z - %Z)"
echo -en "$NC\n"
export HISTSIZE=2000 # Длина истории команд
export HISTFILE=~/.bash_history # Где хранить историю команд
# export HISTCONTROL="ignoredups" # Не дублировать команды
# Чтобы история команд сохранялась сразу после ввода (а не во время закрытия терминала)
shopt -s histappend
PROMPT_COMMAND='history -a'
# Испраляет ошибки в написании
shopt -s cdspell
# Разорванные многострочные команды в истории команд
shopt -s cmdhist
# "Заготовки" для 'ls' (предполагается, что установлена GNU-версия ls)
alias ll="/bin/ls -lh --color" # Отображает символьную инфу о типе файла
alias l1="/bin/ls -1Fh --color" # Вывод содержимого каталога в один столбец + отображение символьной инфы о типах файлов
alias lr="/bin/ls -Rh --color" # Вывод содержимого с подкаталогами
alias la="/bin/ls -lAh --color" # Подробный пывод содержимого каталога, включая скрытые файлы
alias ls='/bin/ls -hFh --color' # выделить различные типы файлов цветом
alias lx='/bin/ls -lXBh --color' # сортировка по расширению
alias lk='/bin/ls -lSrh --color' # сортировка по размеру
alias lc='/bin/ls -lcrh --color' # сортировка по времени изменения
alias lu='/bin/ls -lurh --color' # сортировка по времени последнего обращения
alias lt='/bin/ls -ltrh --color' # сортировка по дате
alias lm='/bin/ls -lAh --color | more' # вывод через 'more'
# На первый взягляд это бред, но когда привыкаешь, реально ускоряет работу
alias md="/bin/mkdir"
alias mds="sudo /bin/mkdir"
alias mkdirs="sudo /bin/mkdir"
alias mdp="/bin/mkdir -p"
alias mdps="sudo /bin/mkdir -p"
alias cp="/bin/cp -iv"
alias cps="sudo /bin/cp -iv"
alias cpi="/bin/cp -v"
alias cpis="sudo /bin/cp -v"
alias cpR="/bin/cp -Rv"
alias cpRs="sudo /bin/cp -Rv"
alias cpr="/bin/cp -Riv"
alias cprs="sudo /bin/cp -Riv"
alias mv="/bin/mv -iv"
alias mvs="sudo /bin/mv -iv"
alias mvi="/bin/mv -v"
alias mvis="sudo /bin/mv -v"
alias rm="/bin/rm -iv"
alias rms="sudo /bin/rm -iv"
alias rmi="/bin/rm -v"
alias rmis="sudo /bin/rm -v"
alias rmr="/bin/rm -Rfiv"
alias rmrs="sudo /bin/rm -Rfiv"
alias rmri="/bin/rm -Rfv"
alias rmris="sudo /bin/rm -Rfv"
alias ..="cd .."
alias ...="cd ../.."
alias ....="cd ../../.."
alias .....="cd ../../../.."
alias cls="/usr/bin/clear" # Если ты привык к консоле винды, то тебе это поможет
alias h='history' # История команд
alias j='jobs -l' # Задания
alias path='echo -e ${PATH//:/\\n}' # Значение переменной окружения $PATH
alias recfg='. ~/.bashrc' # Перечитать настройки BASH (иногда бывает полезно, особенно для отладки)
alias du='/usr/bin/du -kh' # Размер всех подкаталогов в каталоге (включая др. ф.с.)
alias duS='/usr/bin/du -khxS' # Размер всех папок в каталоге (не переходить в др. ф.с.)
alias dus='/usr/bin/du -khxs' # Размер каталога (не переходить в др. ф.с.)
alias df='/bin/df -kh' # Занятое пространство на диске
alias upgrade='sudo apt-get update ; sudo apt-get upgrade' # Обновление пакетов
alias aptsearch='sudo apt-cache search ' # Поиск пакетов в репозиториях
alias aptinstall='sudo apt-get install ' # Установить пакет из репозитория
alias aptremove='sudo apt-get remove ' # Удалить пакет из системы
alias aptpurge='sudo apt-get purge ' # Удалить пакет из системы и его конф. файлы
alias aptautoremove='sudo apt-get autoremove' # Автоматически удалить не нужные пакеты из системы
alias 'restart-gnome'='sudo /etc/init.d/gdm restart' # Перезапустить GNOME
alias 'cd-'='cd -' # Перейти в последнюю дирректорию (бывает забываю пробем поставить)
# проверка правописания
alias xs='cd'
alias vf='cd'
alias moer='more'
alias moew='more'
alias kk='ll'
# Не все эти функции писал я сам, есть и не мои работы, но авторов уже не помню, к сожалению :(
function dfp() # Сколько занято на опр. ф.с. в %
{
/bin/df -kh | /bin/grep $1 | /usr/bin/cut -c41-43
}
function lg() # ls -lAh --color <path> | grep <filter>
{
if [ "$1" = "" ] && [ "$2" = "" ]; then
echo -en "\n${Blue}Команда$NC ${LightRed}lg$NC ${Blue}выводит список файлов с фильтрацией (тоже самое, что ${LightRed}ls -lA$NoColor ${Red}<patn>${NoColor} ${LightRed}| grep${NoColor} ${Red}<filtet>${NoColor}${Blue})${NoColor}"
echo -en "\n${Cyan}Использование:$NC ${LightRed}lg$NC ${Red}[path] <filter>$NC"
echo -en "\n${Cyan}Если$NC ${Red}[path]$NC ${Cyan}не задан, то используется текущая дирректория.$NC\n\n"
elif [ "$1" != "" ] && [ "$2" = "" ]; then
/bin/ls -lAh --color $(/bin/pwd) | /bin/grep $1
else
/bin/ls -lAh --color $1 | /bin/grep $2
fi
}
function my_ip() # IP адрес
{
MY_IP=$(/sbin/ifconfig ppp0 | /usr/bin/awk '/inet/ { print $2 } ' | /bin/sed -e s/addr://)
MY_ISP=$(/sbin/ifconfig ppp0 | /usr/bin/awk '/P-t-P/ { print $3 } ' | /bin/sed -e s/P-t-P://)
}
function ii() # Дополнительные сведения о системе
{
echo -e "\nВы находитесь на ${RED}$HOSTNAME"
echo -e "\nДополнительная информация:$NC " ; /bin/uname -a
echo -e "\n${RED}В системе работают пользователи:$NC " ; /usr/bin/w -h
echo -e "\n${RED}Дата:$NC " ; /bin/date +"%A, %d %B %Yг. %H:%M:%S (%:::z - %Z)"
echo -e "\n${RED}Время, прошедшее с момента последней перезагрузки :$NC " ; /usr/bin/uptime
echo -e "\n${RED}Память :$NC " ; /usr/bin/free
my_ip 2>&- ;
echo -e "\n${RED}IP адрес:$NC" ; echo ${MY_IP:-"Соединение не установлено"}
echo -e "\n${RED}Адрес провайдера (ISP):$NC" ; echo ${MY_ISP:-"Соединение не установлено"}
echo
}
function swap() # меняет 2 файла местами
{
if [ "$1" = "" ] || [ "$2" = "" ]; then
echo ""
echo -e "${blue}Команда$NC ${RED}swap$NC ${blue}меняет 2 файла местами$NC"
echo -e "${cyan}Использование:$NC ${RED}swap$NC ${red}<file1> <file2>$NC"
echo ""
else
local TMPFILE=tmp.$$
/bin/mv -v "$1" $TMPFILE
/bin/mv -v "$2" "$1"
/bin/mv -v $TMPFILE "$2"
fi
}
function sswap() # меняет 2 файла местами с правами root'a
{
if [ "$1" = "" ] || [ "$2" = "" ]; then
echo ""
echo -e "${blue}Команда$NC ${RED}sswap$NC ${blue}меняет 2 файла местами с правами root'а$NC"
echo -e "${cyan}Использование:$NC ${RED}sswap$NC ${red}<file1> <file2>$NC"
echo ""
else
local TMPFILE=tmp.$$
sudo /bin/mv -v "$1" $TMPFILE
sudo /bin/mv -v "$2" "$1"
sudo /bin/mv -v $TMPFILE "$2"
fi
}
function myps()
{
ps $@ -u $USER -o pid,%cpu,%mem,bsdtime,command ;
}
function pp()
{
myps f | /usr/bin/awk '!/awk/ && $0~var' var=${1:-".*"} ;
}
function lowercase() # перевести имя файла в нижний регистр
{
for file ; do
filename=${file##*/}
case "$filename" in
*/*) dirname==${file%/*} ;;
*) dirname=.;;
esac
nf=$(echo $filename | tr A-Z a-z)
newname="${dirname}/${nf}"
if [ "$nf" != "$filename" ]; then
/bin/mv "$file" "$newname"
echo "lowercase: $file --> $newname"
else
echo "lowercase: имя файла $file не было изменено."
fi
done
}
# Поиск файла по шаблону:
function ff()
{
if [ "$1" = "" ]; then
echo ""
echo -e "${blue}Команда$NC ${RED}ff$NC ${blue}ищет файл по шаблону в текущем каталоге$NC"
echo -e "${cyan}Использование:$NC ${RED}ff$NC ${red}<шаблон>$NC"
echo ""
else
/usr/bin/find . -type f -iname '*'$*'*' -ls ;
fi
}
# Поиск файла по шаблону в $1 и запуск команды в $2 с ним:
function fe()
{
if [ "$1" = "" ] || [ "$2" = "" ]; then
echo ""
echo -e "${blue}Команда$NC ${RED}fe$NC ${blue}ищет файл по шаблону в текущем каталоге и выполняет заданную команду над ним$NC"
echo -e "${cyan}Использование:$NC ${RED}ff$NC ${red}<шаблон> <команда>$NC"
echo ""
else
/usr/bin/find . -type f -iname '*'$1'*' -exec "${2:-file}" {} \; ;
fi
}
# поиск строки в файлах:
function fstr_help()
{
echo -en "\n${blue}Команда$NC ${RED}fstr$NC ${blue}ищет заданную строку в файлах из текущего католога и его подкаталогах$NC\n"
echo -en "${cyan}Использование:$NC ${RED}fstr$NC ${red}[-i] \"шаблон_строки_для_поиска\" [\"шаблон_имени_файла\"]$NC\n"
echo -en " ${red}-i$NC ${blue}- не учитывать регистр$NC\n"
echo -en " ${blue}если$NC ${red}\"шаблон_имени_файла\"$NC ${blue}не задан, то поиск ведется по всем файлам$NC\n\n"
}
function fstr()
{
OPTIND=1
local case=""
local usage="${blue}Команда$NC ${RED}fstr$NC ${blue}ищет заданную строку в файлах из текущего католога и его подкаталогах$NC
${cyan}Использование:$NC ${RED}fstr$NC ${red}[-i] \"шаблон_строки_для_поиска\" [\"шаблон_имени_файла\"]$NC
${red}-i$NC - не учитывать регистр
если \"шаблон_имени_файла\" не задан, то поиск ведется по всем файлам"
while getopts :it opt
do
case "$opt" in
i) case="-i " ;;
#*) echo "$usage"; return;;
*) fstr_help; return;
esac
done
shift $(( $OPTIND - 1 ))
if [ "$#" -lt 1 ]; then
#echo "$usage"
fstr_help
return;
fi
local SMSO=$(tput smso)
local RMSO=$(tput rmso)
/usr/bin/find . -type f -name "${2:-*}" -print0 | /usr/bin/xargs -0 /bin/grep -sn ${case} "$1" 2>&- | /bin/sed "s/$1/${SMSO}\0${RMSO}/gI" | /bin/more
}