Command line: Делимся сниппетами

Хотел бы поделиться сниппетами (командами или настройками), делитесь и вы.

bash_profile или то что запускается, когда вы создаете новое окно терминала (mac terminal)

~/.bash_profile

->

# Increase bash history size (use ctrl + r to search history commands)
HISTFILESIZE=2500000
HISTSIZE=2500000

# NPM
alias ni='npm i'
alias nig='npm i -g'
alias nis='npm i -S'
alias nid='npm i -D'
alias nr='npm uninstall'
alias nrs='npm uninstall -S'

# GIT
alias gst='git status'
alias gcm='git checkout master'
alias gcmp='git checkout master && git pull'
alias gcb='git checkout -b'
alias gpo='git push origin'

# This is to make each terminal instance start from ~ $ line only (remove mac name, user name, path).
export PS1="\W \$ "

Как пользоваться:

sudo vi ~/.bash_profile [enter]
[enter password]
-> cmd + v here
-> esc and type :wq
source ~/.bash_profile [enter]

Должны работать алиасы, например установить новый пакет ni webpack


Команды:

  • cat >[FILE_NAME.EXTENSION] – Создает буфер в который вы начинаете писать все что угодно. Грубо говоря такой простой text editor из ничего (как когда мы ставим аттрибут contenteditable в html для тега style и меняя его содержимое у нас перерисовываются стили страницы. link)

Пример:

cat >index.js

const path = require("path");

console.log(path.join(__dirname, "HEY_HEY", __filename));
^C
node index.js 
/Users/oleksandr.tserkovnyi/HEY_HEY/Users/oleksandr.tserkovnyi/index.js
  • find / -type f -iname "*ovpn*" – Это сразу пример использования того как найти на вашем компьютере файл (-f флаг, для папок используйте -d) по выражению "*ovpn*", например эта команда ищет все файлы в системе, которые имеют в названии ovpn, то есть найдет совпадения в названиях system_ovpn.log, SomeStuffovpnLoL.log.

tip: Для того чтобы не писано /[PATH] Access denied запускайте с sudo. Не бойтесь, это просто read операция (Это же не установка пакета из npm. Я надеюсь вы не используете sudo когда надо ставить глобальный пакет верно?).

  • pbcopy – Команда копирования в буфер (для последующей вставки, например с помощью cmd + v). Вы ее скорей всего встречали в таких выражениях cat ~/.ssh/id_rsa.pub | pbcopy последняя команда копирует в буфер ваш публичный SSH ключ.

Можно например копировать файл по его пути (как выше только без cat и pipe символа). Допустим вы знаете где лежит какой-то файл, тогда пишите так:

pbcopy < [PATH] где [PATH] ваш путь к файлу.

Пример:

pbcopy < /Users/oleksandr.tserkovnyi/Library/Application\ Support/OpenVPN/ovpntray.log Копирует файл ovpntray.log. Обратите внимание, что пробелы экранируются.

Делитесь и вы :)

2 симпатии

Я использую на маке и линкусе fish-shell. Она идет в комплекте со сниппетами (самый частый ll - отображает все файлы директории), умным авдодополнением, специальными prompt когда работаешь из папки с git, годная подсветка команд, например, если допущена ошибка. Не требудет настройки чтобы начать с ней работать. Не совместима с bash: не подхватит конфиг из .bashrc.

Кто хочет подобный функционал, соместимый с bash - пробуйте oh-my-zsh. Требует больше настройки чем fish. Подхватывает настройки из .bashrc.


Насчет настроек: чтобы быстро заходить по ssh например так: ssk karamelka в файле (если его нет, то надо создать) ~/.ssh/config прописываю такое:

Host karamelka
	HostName 178.62.152.160
	User user

Часто использую пайпинг в комбинации с grep (поиск по регулярке).

# Вывод информации о процессе, в имени которого есть `nginx`
top | grep nginx

# Вывод только тех файлов и папок, в имени которых есть `js`
ls -la | grep js

Чтобы просмотреть растущий файл логов по мере его дополнения (полезно при отладке конфигов nginx). Отлично играет в комбинации с пайпингом в grep.

tail -f ./nginx.log

# Вывести только те строки, в которых есть подстрока error
tail -f ./nginx.log | grep error 

Подхватывание новых конфигов nginx без остановки сервера. Например при изменении конфигов на продакшене. Защищает от простоя при ошибке в конфиге в случае перезапуска через stop - start.

nginx -s reload

Обработать путь текущей папки: команда pwd. Отлично играет с pbcopy чтобы скопировать путь в буфер обмена (pbcopy есть только на маке, в линуксах должна быть альтернатива).

pwd | pbcopy

Открыть директорию или файл в программе по умолчанию (только на маке)

# Открыть текущую директорию
open ./

open main.js

Создать 1 или много файлов: touch

touch main.js index.html main.css
2 симпатии

А расскажи по-подробнее :)

у меня CentOS, но большинство из команд из rc файла должно работать и в маке.

# custom aliases section
makeDirAndCd() {
mkdir -p $1; cd $1
}
cdAndLs() {
cd "$1"; ls;
}
history_grep() {
history | grep --color=auto $1
}
rm_docker() {
docker kill $(docker ps -a | grep $1 | awk '{print $1}'); docker rm $(docker ps -a | grep $1 | awk '{print $1}')
}
clean_docker() {
echo $(docker ps -a | grep Exited | wc -l) containers to remove; docker rm $(docker ps -a | grep Exited| awk '{print $1}')
}
clean_docker_images() {
echo "Empty images removing..."
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
echo
echo "Old versions of images removing..."
docker rmi $(docker images| sort -rn -k1,2 | grep -v " latest " | awk '{a[$1]++;b[$1,a[$1]]=$3}END{for (i in a) if(a[i]>1) for (j=1; j<=a[i]; ++j) if (j > 1) print b[i,j];}')
echo
}
read_buffer() {
LINES_NUM=$1
if [ -z $LINES_NUM ]; then
LINES_NUM=20
fi
tail -n$LINES_NUM /vagrant/clipboard
}
openPorts() {
netstat -tulanp | grep --color=auto $1
}
md5checking() {
md5sum "$1" | grep --color=auto "$2";
}
extractFromArchive() {
    if [ -f $1 ] ; then
      case $1 in
        *.tar.bz2)   tar xjf $1     ;;
        *.tar.gz)    tar xzf $1     ;;
        *.bz2)       bunzip2 $1     ;;
        *.rar)       unrar e $1     ;;
        *.gz)        gunzip $1      ;;
        *.tar)       tar xvf $1      ;;
        *.tbz2)      tar xjvf $1     ;;
        *.tgz)       tar xzvf $1     ;;
        *.zip)       unzip $1       ;;
        *.Z)         uncompress $1  ;;
        *.7z)        7z x $1        ;;
        *)     echo "'$1' cannot be extracted via extract()" ;;
         esac
     else
         echo "'$1' is not a valid file"
     fi
}
mate_settings() {
dconf write /org/mate/terminal/profiles/default/use-system-font false
dconf write /org/mate/terminal/profiles/default/use-theme-colors false
dconf write /org/mate/terminal/profiles/default/foreground-color "'#284CA299284C'"
dconf write /org/mate/terminal/profiles/default/background-color "'#000000000000'"
dconf write /org/mate/terminal/profiles/default/bold-color "'#FFFFFFFFFFFF'"
dconf write /org/mate/terminal/profiles/default/font "'Monospace Bold 14'"
dconf write /org/mate/terminal/profiles/default/title "'VAGRANT'"
sudo hostname VAGRANT
}

backup_item(){
CURRDATE=$(date +%y%m%d)
TARGET_DIR=/vagrant/Backup/$CURRDATE
if [ -n "$BACKUP_DIR" ]
then
TARGET_DIR=$BACKUP_DIR/$CURRDATE
fi
mkdir -p $TARGET_DIR
itemName=`basename $1`
cp -R $1 $TARGET_DIR/$itemName
echo "Item stored as \"$TARGET_DIR/$itemName\""
}

alias ..='cd ..'
alias mcd=makeDirAndCd
alias cdls=cdAndLs
alias hg=history_grep
alias port=openPorts
alias rmdocker=rm_docker
alias cleandocker=clean_docker
alias cleandockerimages=clean_docker_images
alias wb="vim -c 'startinsert' + /vagrant/clipboard"
alias rb=read_buffer
alias tree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'"
alias extract=extractFromArchive
alias md5check=md5checking
alias dirsize='find . -maxdepth 1 -type d -print | xargs du -d1 -k | sort -rn'
alias dps='docker ps -a'
alias reload="source ~/.bashrc"
alias matecfg=mate_settings
alias backup=backup_item
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias pssize='ps -e -o "user pid pmem vsz rss osz time comm"'
eval "$(thefuck --alias)"

# .bashrc
PS1='\[\e[0;33m\][\A][\h \W]\$\[\e[0m\] '
PS2=''
LS_COLORS='di=32:fi=0:ln=31:pi=5:so=5:bd=5:cd=5:or=31:mi=0:ex=33:*.rpm=90'

отдельно хочется порекомендовать thefuck, пришлось немного поплясать с бубном чтоб ее поставить, но оно того стоит, реально помогает. Например, ошибся аргументом для вагранта, получаю сообщение об ошибке, не пойму что происходит, пробую чуть поменять синтаксис, опять ошибка, fuck! - и он тут же подсказывает правильный вариант и я вспоминаю что не provision, а provider, и еще различные опции предлагает :)

1 симпатия

Команда пытается запустить nginx с новым конфигом. Если в конфиге ошибка, nginx продолжает работать с предыдущим конфигом.