• Главная
  • Контакты
Подписаться:
  • Twitter
  • Facebook
  • RSS
  • VK
  • PushAll
logo

logo

  • Все
    • Положительные
    • Отрицательные
  • За сегодня
    • Положительные
    • Отрицательные
  • За вчера
    • Положительные
    • Отрицательные
  • За 3 дня
    • Положительные
    • Отрицательные
  • За неделю
    • Положительные
    • Отрицательные
  • За месяц
    • Положительные
    • Отрицательные
  • За год
    • Положительные
    • Отрицательные
  • Сортировка
    • По дате (возр)
    • По дате (убыв)
    • По рейтингу (возр)
    • По рейтингу (убыв)
    • По комментам (возр)
    • По комментам (убыв)
    • По просмотрам (возр)
    • По просмотрам (убыв)
Главная
  • Все
    • Положительные
    • Отрицательные
  • За сегодня
    • Положительные
    • Отрицательные
  • За вчера
    • Положительные
    • Отрицательные
  • За 3 дня
    • Положительные
    • Отрицательные
  • За неделю
    • Положительные
    • Отрицательные
  • За месяц
    • Положительные
    • Отрицательные
  • Главная
  • 10 мини-лайфхаков в Bash

10 мини-лайфхаков в Bash +15

23.04.2017 19:07
Zorinoid 21 14500 Источник
*nix*
1. Чтобы быстро скопировать/переименовать файл с длинным именем, можно набрать:

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)


  1. Jogger
    23.04.2017 22:44
    #10187752
    +9

    И это что, статья? Надо хотя бы объяснять, что значат какие параметры. А то какой-то бессистемный набор «заклинаний» получается.


    1. ploop
      23.04.2017 22:49
      #10187756
      +12

      Согласен — «делай так и будет щастье!!!111» никогда не нравилось. Даже если находил такие решения — приходилось по ним гуглить/манить/доки читать. А то так недалеко и rm -rf скопипастить от какого-нибудь приколиста.


  1. 776166
    23.04.2017 23:00
    #10187766
    +3

    Слово «лайфхак» в названии понижает уровень материала на 3 порядка.


  1. amarao
    24.04.2017 03:23
    #10187894
    +3

    Пытаюсь понять чью жизнь вы взламываете. Свою? Читателя?


  1. mikkisse
    24.04.2017 09:11
    #10188028
    +8

    Похоже, что астрологи объявили месяц статей о bash на Хабре. Количество гневных комментариев увеличилось вдвое.


  1. redfs
    24.04.2017 11:02
    #10188194
    +6

    Из 10 пунктов примерно 8.5 никакого отношения к bash не имеют. Думаю, что автору надо переименовать статью в «Моя записная книжка».


    1. RPG
      24.04.2017 23:51
      #10189440

      У меня такая же есть на 32 Кб, всё думаю, может и правда сделать заметку "во что превратился мой .bashrc"?:)


  1. ubobrov
    24.04.2017 12:54
    #10188404
    -2

    Пусть это и не статья, но для себя полезное я нашёл.


  1. inkvizitor68sl
    24.04.2017 12:56
    #10188408
    +4

    Да оставили бы просто ссылку на https://www.commandlinefu.com/commands/browse


  1. CaptainFlint
    24.04.2017 13:24
    #10188472
    +2

    mount | column -t
    
    findmnt удобнее.

    source ./commands.txt
    
    Вместо source можно использовать просто точку:
    . ./commands.txt
    


    1. ghostinushanka
      25.04.2017 00:28
      #10189472

      Всем юниорам/эникеям бью по рукам за «точку» и заставляю писать source. Читаемость и восприятие возрастает на порядок. Проверено годами практики — иногда излишняя краткость во вред, особенно учитывая что в баш скриптах подгрузка «библиотек» используется редко и мало (ну а если надо много подгружать и функционал расширять — Python/Ruby/Perl на выбор).


      1. RPG
        25.04.2017 00:38
        #10189480

        .(){ bash -e "$1";}

        Подарите джуниорам бесценные часы отладки:) Можно добавить более весёлую шутку на свой вкус.


      1. CaptainFlint
        25.04.2017 01:52
        #10189520

        Баш не только для долговременных скриптов используется. Там, где важна поддержка, предпочтительнее читабельность. А для командной строки и разовых скриптов краткость здорово экономит время. Вы же не будете в командной строке каждый раз вбивать ls -l --almost-all --human-readable --recursive вместо ls -lAhR.


  1. icCE
    24.04.2017 13:50
    #10188506

    Вспомнилось

    dd if=/dev/zero of=/dev/null?

    или

    cat /dev/urandom | gzip > /dev/null

    Еще так

    tail /dev/urandom | cat — | grep something


  1. ALexhha
    24.04.2017 13:57
    #10188520
    +1

    Выполнить в консоли команды из текстового файла:
    source ./commands.txt

    а вы при этом знаете, в чем будет отличие от bash ./commands.txt?

    Простейшее нагрузочное тестирование веб-сайта:

    серьезно? А чем вас не устроил ab?


    1. kmeaw
      24.04.2017 23:33
      #10189414

      а вы при этом знаете, в чем будет отличие от 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


      1. ALexhha
        25.04.2017 13:29
        #10190184

        что команды будут выполнены в том же окружении

        только не окружении, а сессии. И стоило бы указывать этот момент. Ибо «Выполнить в консоли команды из текстового файла» мало о чем говорят


    1. RPG
      24.04.2017 23:46
      #10189436

      а вы при этом знаете, в чем будет отличие от bash ./commands.txt?

      лишний раз subshell не будет запускаться (вдруг и правда кому-то нужно)


      серьезно? А чем вас не устроил ab?

      тоже хотел узнать, что может быть проще ab, к тому же предлагаемый вариант ужасен — wget намусорит файлами вида index.html.*


      И если уж на то пошло, сильно укоротить можно: seq 1000 | xargs -I{} -P20 wget -qO/dev/null ya.ru (да простит нас Яндекс)


  1. iassasin
    24.04.2017 14:44
    #10188626

    Поясните, пожалуйста, как работает форк-бомба из пункта 2?


    1. grossws
      24.04.2017 15:04
      #10188678
      +1

      Объявляется функция :, которая вызывает два своих экземпляра (команды через pipe запускаются параллельно) в фоне. Далее (после точки с запятой) вызывается функция :.


      1. iassasin
        24.04.2017 15:26
        #10188730

        А, понял, спасибо. Меня запутал ':', подумал, что это еще какой-то оператор и ничего про него не нашел.

МЕТКИ

  • Хабы
  • Теги

*nix

bash

СЕРВИСЫ
  • logo

    CloudLogs.ru - Облачное логирование

    • Храните логи вашего сервиса или приложения в облаке. Удобно просматривайте и анализируйте их.
Все публикации автора
  • 10 мини-лайфхаков в Bash +15

    • 23.04.2017 19:07

Подписка


ЛУЧШЕЕ

  • Сегодня
  • Вчера
  • Позавчера
06:00

Запустили векторный поиск в YDB: рассказываем, как он работает +74

13:01

Ну, погоди! Как я создал свою версию культовой игры: от схемы до корпуса +31

07:49

Почему 21 см — это «магическая длина» нашей Вселенной +26

09:01

10 популярных мифов о VDS-хостинге +25

10:31

А вдруг прочитают? Как писать для инопланетян +20

09:33

Призраки в коммитах: пылесосим историю Git в поиске утекших секретов +20

08:22

Топ-5 мини-ПК с фокусом на производительность: от Arrow Lake до Strix Halo +20

08:05

Шифрование скриптов +20

08:33

Атомные реакторы для лечения рака (и почему они больше не нужны) +17

12:44

Выгорание одно. Причины разные +15

11:56

Меню потоков уже на Хабре +15

07:44

Мы сделали химическую защиту собачьих лап +15

13:08

«Почему компилятор Rust такой медленный?» +13

16:35

Распродажа в издательстве «Питер» +12

12:39

Как сыграть с СХД в имитацию ошибки и выйти победителем? Используем паттерны ООП на C++ +11

07:41

Вы точно их собеседовали: 8 личностей, которые приходят на интервью +11

06:45

Steroids — ещё один фронтенд фреймворк на базе React? +11

11:00

Масштабирование AI/ML-инфраструктуры в Uber +10

07:37

Python в enterprise-разработке: почему популярность ЯП распространилась и на корпоративный сектор. Часть 2 +9

02:02

Кубик мысли: простой проект, который говорит вместо тебя +9

09:01

Большинству людей плевать на качество софта +102

14:07

Вы тоже заказываете платы, компоненты и всячину здесь? +79

13:01

Пишем простой драйвер Linux для устройства, ничего не зная о драйверах и о USB +65

08:27

Телеграфируем кодом Морзе через Java Stream API (часть 1 из 2) +48

19:20

Почему я отказался внедрять тёмные паттерны и не получил оффер на фронтенд-лида +37

07:29

Простой ультразвуковой отпугиватель собак +36

11:34

Лучшее IT-событие этого лета. За что говорят «спасибо» Summer Merge +27

22:23

Верните непрерывную интеграцию разработчикам +22

08:50

Б/У Antminer S9 в помощь радиолюбителю +22

12:49

Сжатие текста в Angie: статика, динамика, производительность +21

07:00

Одноплатники как роутеры: новинки 2025 года и их возможности +21

04:50

Илон Маск создал Меха-Гитлера, а также релиз самого умного Grok 4 +18

09:00

200 тысяч единиц уже готовы, еще миллион — на подходе: разворачиваем контуры в один клик +16

09:10

Как я полюбил LESS и с его помощью избавился от копипасты в своём CSS-коде, а разметку сделал семантической +15

05:54

MCP для новичков +15

15:18

Как мы в Авито используем split-тесты для оценки алгоритмов продвижения объявлений +14

12:32

Как я случайно стал UI-дизайнером радиоприёмника — и заработал 60к за 15 часов +11

07:07

Недельный геймдев: #234 — 13 июля, 2025 +11

16:34

Как я пишу код быстрее +10

07:46

Внедрение зависимостей (DI) через библиотеку Tsyringe +10

09:01

От React всё также веет безумием, но все об этом молчат +98

16:16

Как «по-быстрому» сделанная игра затянула меня в геймдев на 20 лет и какие выводы я из этого сделал +96

13:39

Как выйти из IT?.. и пойти слесарем на завод. Моя попыточка дауншифтинга [1\4] +68

13:01

Большое испытание кальциевых аккумуляторов, часть 2: недозаряд портит, а кипячение убивает +42

08:02

Commodore 64 Ultimate: возрождение легенды в 2025 году +40

13:05

Кладбище криминальных экшенов. Почему почти все клоны GTA провалились, а студии закрылись +19

08:00

Без(д)воз(д)мездно, то есть даром +17

08:13

Новый рекорд по упаковке сфер неожиданно пришёл из геометрии +16

12:00

Как я пришёл в open source в 2025-м (с утилитой для бекапа PostgreSQL), чуть не потеряв проект на ~$1500\мес в 2023-м +15

07:16

Конфаундинг, или как аналитику попасть в ловушку +14

05:16

Алгоритмы для работы с большими данными в Go: HyperLogLog и Count-Min Sketch +12

17:50

Как собрать друзей на игру и не сойти с ума: мой бот для геймеров +11

08:00

Кремниевая революция по-китайски: как Пекин собирается обойти Тайвань и США к 2030 году +11

08:16

«Хочу, но боюсь и не делаю»: что делать со страхом того, что не получится? +9

06:15

Vue: Composables и TS это вам не Mixins и JS. С ними сложнее +8

15:35

Как ваш полет домой поможет инопланетянам определить местоположение Земли +7

10:15

Как дизайн Kaspersky Thin Client пережил подростковый бунт (и что из этого вышло) +7

10:15

Как дизайн Kaspersky Thin Client пережил подростковый бунт (и что из этого вышло) +7

10:08

Свой ChatGPT на документах: делаем RAG с нуля +7

09:02

Kubernetes на базе Deckhouse в облаке Linx Cloud: встроенный мониторинг, безопасность и управление сертификатами +7

ОБСУЖДАЕМОЕ

  • От React всё также веет безумием, но все об этом молчат +98

    • 292   34000

    Большинству людей плевать на качество софта +102

    • 241   24000

    Что делать вайбкодеру после 07/07 -2

    • 105   50000

    No Cars Allowed? Что с трендом на улицы без авто +5

    • 80   2700

    Простой ультразвуковой отпугиватель собак +36

    • 74   6500

    Вы тоже заказываете платы, компоненты и всячину здесь? +79

    • 69   24000

    Без(д)воз(д)мездно, то есть даром +17

    • 61   15000

    Скоро без нас: когда роботы окончательно отберут нашу работу? +5

    • 49   3200

    Как «по-быстрому» сделанная игра затянула меня в геймдев на 20 лет и какие выводы я из этого сделал +96

    • 45   24000

    Кто осознаёт? Почему главный вопрос о сознании — это не «что?», а «кто?» +3

    • 39   564

    Шифрование на основе хешей -6

    • 39   4600

    Вы точно их собеседовали: 8 личностей, которые приходят на интервью +11

    • 37   17000

    Почему я отказался внедрять тёмные паттерны и не получил оффер на фронтенд-лида +37

    • 37   9300

    Как я пришёл в open source в 2025-м (с утилитой для бекапа PostgreSQL), чуть не потеряв проект на ~$1500\мес в 2023-м +15

    • 36   15000

    DDR4 или DDR5 в играх и на домашнем ПК: пора ли обновлять оперативную память? +5

    • 31   8100
  • Главная
  • Контакты
© 2025. Все публикации принадлежат авторам.