очень простой способ передать файлы с машины на машину — 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
python -m SimpleHTTPServer
!! повторит предыдущую команду, sudo !! повторит предыдущую команду от рута.
smitty tcpip и entstat
rsync /something here/ -a создаст внутри here каталог something
rsync /something/ here/ -a поместит в каталог here содержимое каталога something
${SOME}/DIR и $SOME/DIR — в варианте со скобочками явно видно, что имя переменной — SOME, во втором варианте имя такое же, но это мнее явно видно.
… но стоит заменить / на _ и мы наступаем себе на яйца:
${SOME}_DIR и $SOME_DIR — в первом случае имя переменной осталось SOME, во втором — уже нет.