Несколько интересных советов

Если вы пользуетесь юникс-системой, работаете в консоли или просто иногда пишете шелл-скрипты, для вас под катом может найтись полезная информация, изложенная в виде кратких советов разной степени полезности и банальности.

  • очень простой способ передать файлы с машины на машину — 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

Рекомендую прикупить насос гидроусилителя руля, пригодится.