10 мини-лайфхаков в Bash +15
cp /home/user1/myfile123456789.txt{,-new}
и обратно:
cp /home/user1/myfile123456789.txt{-new,}
2. Бесполезная, но прикольная форк-бомба (правда, не сработает, если у Вас задан ulimit для количества процессов):
:(){ :|:& };:
3. Эмулятор сетевого принтера на локальном компьютере:
nc -l -p 9100 > job.prn
4. Простейшее нагрузочное тестирование веб-сайта:
for i in {1..1000}; do echo ya.ru; done | xargs -P 20 wget &>/dev/null
5. Удобочитаемый вывод команды mount:
mount | column -t
6. SSH туннель с локального порта 7777 на удаленный порт 8888 на сервере myserver.com:
ssh -fN user@myserver.com -L 7777:myserver.com:8888
7. Вывести случайное число от 0 до 32767:
echo $RANDOM
8. Выполнить в консоли команды из текстового файла:
source ./commands.txt
9. Создать случайный пароль:
openssl rand -base64 8
10. Защита от одновременного запуска нескольких копий скрипта:
flock -n /tmp/lock.txt -c "/home/user1/test.sh > test.log"
На этом пока все, удачных экспериментов в командной строке!
Комментарии (21)
mikkisse
24.04.2017 09:11+8Похоже, что астрологи объявили месяц статей о bash на Хабре. Количество гневных комментариев увеличилось вдвое.
inkvizitor68sl
24.04.2017 12:56+4Да оставили бы просто ссылку на https://www.commandlinefu.com/commands/browse
CaptainFlint
24.04.2017 13:24+2
findmnt удобнее.mount | column -t
Вместо source можно использовать просто точку:source ./commands.txt
. ./commands.txt
ghostinushanka
25.04.2017 00:28Всем юниорам/эникеям бью по рукам за «точку» и заставляю писать source. Читаемость и восприятие возрастает на порядок. Проверено годами практики — иногда излишняя краткость во вред, особенно учитывая что в баш скриптах подгрузка «библиотек» используется редко и мало (ну а если надо много подгружать и функционал расширять — Python/Ruby/Perl на выбор).
RPG
25.04.2017 00:38.(){ bash -e "$1";}
Подарите джуниорам бесценные часы отладки:) Можно добавить более весёлую шутку на свой вкус.
CaptainFlint
25.04.2017 01:52Баш не только для долговременных скриптов используется. Там, где важна поддержка, предпочтительнее читабельность. А для командной строки и разовых скриптов краткость здорово экономит время. Вы же не будете в командной строке каждый раз вбивать ls -l --almost-all --human-readable --recursive вместо ls -lAhR.
icCE
24.04.2017 13:50Вспомнилось
dd if=/dev/zero of=/dev/null?
или
cat /dev/urandom | gzip > /dev/null
Еще так
tail /dev/urandom | cat — | grep something
ALexhha
24.04.2017 13:57+1Выполнить в консоли команды из текстового файла:
source ./commands.txt
а вы при этом знаете, в чем будет отличие от bash ./commands.txt?
Простейшее нагрузочное тестирование веб-сайта:
серьезно? А чем вас не устроил ab?kmeaw
24.04.2017 23:33а вы при этом знаете, в чем будет отличие от bash ./commands.txt?
В том, что команды будут выполнены в том же окружении, будто их ввели прямо в этот шелл с клавиатуры; bash ./commands.txt, напротив, запустит новый процесс:
$ foo() { echo This is function foo.; }
$ cat commands.txt
foo
$ source ./commands.txt
This is function foo.
$ bash ./commands.txt
./commands.txt: line 1: foo: command not found
ALexhha
25.04.2017 13:29что команды будут выполнены в том же окружении
только не окружении, а сессии. И стоило бы указывать этот момент. Ибо «Выполнить в консоли команды из текстового файла» мало о чем говорят
RPG
24.04.2017 23:46а вы при этом знаете, в чем будет отличие от bash ./commands.txt?
лишний раз subshell не будет запускаться (вдруг и правда кому-то нужно)
серьезно? А чем вас не устроил ab?
тоже хотел узнать, что может быть проще ab, к тому же предлагаемый вариант ужасен — wget намусорит файлами вида index.html.*
И если уж на то пошло, сильно укоротить можно:
seq 1000 | xargs -I{} -P20 wget -qO/dev/null ya.ru
(да простит нас Яндекс)
iassasin
24.04.2017 14:44Поясните, пожалуйста, как работает форк-бомба из пункта 2?
grossws
24.04.2017 15:04+1Объявляется функция
:
, которая вызывает два своих экземпляра (команды через pipe запускаются параллельно) в фоне. Далее (после точки с запятой) вызывается функция:
.iassasin
24.04.2017 15:26А, понял, спасибо. Меня запутал ':', подумал, что это еще какой-то оператор и ничего про него не нашел.
Jogger
И это что, статья? Надо хотя бы объяснять, что значат какие параметры. А то какой-то бессистемный набор «заклинаний» получается.
ploop
Согласен — «делай так и будет щастье!!!111» никогда не нравилось. Даже если находил такие решения — приходилось по ним гуглить/манить/доки читать. А то так недалеко и rm -rf скопипастить от какого-нибудь приколиста.