Если вы пользуетесь юникс-системой, работаете в консоли или просто иногда пишете шелл-скрипты, для вас под катом может найтись полезная информация, изложенная в виде кратких советов разной степени полезности и банальности.
- очень простой способ передать файлы с машины на машину — tar cz. | nc -l -p 2214 (на передающей стороне) и nc адрес 2214 | tar xz (на принимающей). 2214 — номер порта, выбирается по желанию. в разных версиях nc нужно писать nc -l -p или nc -l
- в локальной сети из дефолтно-настроенных убунт, можно обращаться к машинам по имени, а не по айпи: username-desktop.local отрезольвится в ip машины, которую назвали username-desktop. это магия mdns, спасибо apple
- avahi-browse -a быстро покажет список имен машин с в локальной сети, а ключ -r покажет сразу и их ip. как и в предыдущем хинте, требуется avahi, он есть в дефолтной убунте. сама команда — в пакете avahi-utils
- пользуйтесь ctrl-R в консоли, чтобы не жать «вверх» по сто раз
- history не резиновый. если что-то было забито в историю интерпретатора, рано или поздно оттуда может исчезнуть, не полагайтесь на него, как на справочник
- используйте set -e в скриптах. неотработавший «cd» во временный каталог может надолго испортить настроение содержимое /home
- проверяйте код возврата
- чтобы вернуться в предыдущий каталог, есть команда cd -. в zsh еще есть команда d еще есть команда dirs -v, показывающая историю переходов. еще в zsh можно делать вот так: cd -2
- пишите в скриптах длинные --варианты параметров
- не пишите в скриптах rm -rf $VAR/
- используйте visudo для редактирования sudoers
- потеряли пароль рута? при загрузке укажите ядру параметр init=/bin/bash и сбростье пароль через passwd
- у грепа есть полезный параметр --color
- команда, чтобы перечитать отредактированный файл с переменными окружения: source /etc/environment
- пользуйтесь bash -x для отладки скриптов
- пользуйтесь strace для отладки всего остального. от лишнего выхлопа спасет параметр -e имявызова
- не путайте /bin/sh и /bin/bash, это не всегда одно и то же. особенно в дебиане, особенно в убунте
- настройте алиасы
- если на команду повешен алиас, то запустить ее «настоящую» можно, добавив в начале бэкслеш например: \ls
- если терминал переклинило после некорректного выхода из псевдографической программы иили вырвашегося на просторы stdout мусора, есть волшебная команда reset
- exec >file в скрипте перенаправит его вывод в файл и не перезапустит скрипт
- уже написали вагон скриптов? забекапьте
- не храните все в / или /home
- lvm уже придумали
- используйте в скриптах mktemp для создания временных файлов и каталогов
- пишите переменные вот так: ${VAR}
- VAR=X и export VAR=X — разные вещи
- dd может показывать, сколько он уже скопировал, если пнуть его черз kill -USR1
- kill может принимать аргументом номер задачи, а не только идентификатор процесса: kill %1
- jobs, bg, fg, disown — тоже так умеют
- если «вышли» из программы через ctrl-Z, вернуться можно командой fg
- rsync нужен не только для сетевых операций
- rm something и rm something/ — это разные вещи. и не только в rm, cp, ls и rsync — тоже
- watch и repeat уже написаны, не надо велосипедить их через while true
- at тоже уже написан, а sleep понимает время не только в секундах
- sudo echo > file открывает файл на запись не с правами рута. это делается так: sudo sh -c 'echo > file'
- если скрипт запускается в линуксе, это не значит, что он так же хорошо отработает в bsd или макоси
- пишите --параметры перед аргументами, иначе ls file -l в bsd вас удивит
- грепаете вывод ifconfig? ifconfig тоже бывает разный
- нормально работающие версии утилит в bsd и макоси имеют приставку g: gsed, gmake
Рекомендую прикупить насос гидроусилителя руля, пригодится.