ProIT: медіа для профі в IT
3 хв.

Контролюйте свою долю (fortune) з Linux

author avatar ProIT NEWS

Команда fortune зазвичай вважається однією з команд просто для розваги, які ви знайдете в системах Linux, але вона може виявитися корисною у деяких цікавих аспектах. Яких саме – досліджували в Network World.

Як це працює

Ймовірно, більшість користувачів Linux запускають команду fortune лише тоді, коли їм нудно. Проте насправді команда fortune більш універсальна.

Більшість відповідей на введення fortune не є справжніми пророцтвами. Замість передбачення вашого майбутнього чи навіть результатів вашого дня можна отримати цитати або легкі коментарі.

За замовчуванням відповіді на введення слова fortune надходять із будь-якої досить великої серії файлів.

Що ви можете зробити з командою долі

Якщо ви хочете, щоб ваше fortune було взяте з файлу, пов’язаного з певною тематичною областю, то можете надати його як такий аргумент:

$ fortune food
A waist is a terrible thing to mind.
                -- Ziggy

Для цього корисно знати, які тематичні області доступні. Ось можливі варіанти:

$ cd /usr/share/games/fortune; ls *.dat | sed "s/.dat//" | column
art             food              law             people               sports
ascii-art       fortunes          linux           perl                 startrek
bofh-excuses    goedel            literature      pets                 tao
computers       hitchhiker        love            platitudes           translate-me
cookie          humorists         magic           politics             wisdom
definitions     humorix-misc      medicine        pratchett            work
disclaimer      humorix-stories   miscellaneous   riddles              zippy
drugs           kernelnewbies     news            rules-of-acquisition
education       kids              osfortune       science
ethnic          knghtbrd          paradoxum       songs-poems

Якщо ви знаєте тематичні області, то можете використовувати будь-яку з них, щоб отримати fortune, який відповідає вашому настрою.

$ fortune politics
The time for action is past!  Now is the time for senseless bickering.

Створення власних fortune

Якщо тематичні області не відповідають вашим потребам, не варто засмучуватися. Ви можете створити свої власні!

Насправді це дуже просто зробити. Вам потрібно створити файл із певним форматом, а потім виконати одну команду, щоб зробити дані сумісними з вимогами команди fortune.

Щоб перевірити це, ми створили файл із кількома радісними цитатами. Файл назвали «Щасливими цитатами» й додали цей вміст:

$ cat happy_quotes
You're never fully dressed without a smile.
%
Let a smile be your umbrella.
%
Happiness depends upon ourselves.
%
Happiness is when what you think, what you say, and what you do are in harmony.

Зверніть увагу, тут використані знаки % для розділення рядків тексту. Унизу вони не потрібні.

Далі запустили наведену нижче команду, щоб створити файл quotes.dat, який вимагає команда fortune.

$ strfile -c % happy_quotes happy_quotes.dat

Коли запускається команда fortune happy_quotes, надається така відповідь:

$ fortune happy_quotes
You're never fully dressed without a smile.

Інші способи використання fortune

Команда fortune пропонує ще кілька застосувань, які можуть бути неочевидними.

Так, можна використовувати команду fortune для створення випадкових текстових файлів, які використовуються для тестування різних команд і сценаріїв. Подібна команда створює невеликий файл такого типу:

$ fortune > file1
$ ls -l file1
-rw-r--r--. 1 shs shs 244 Sep 22 13:53 file1

Якщо вам потрібен більший випадково згенерований текстовий файл, просто запустіть команду, надану вище, а потім додайте до неї додаткові команди:

$ fortune >> file1
$ fortune >> file1

Також можна використовувати відповіді від команди fortune для генерування випадкових чисел. Аргумент -c команди wc дає кількість символів у кожній долі.

$ fortune | wc -c
107
$ fortune | wc -c
226
$ fortune | wc -c
86

Якщо отримані числа недостатньо великі або недостатньо випадкові для вашої мети, створіть псевдонім із кількома викликами команди fortune, які можуть вам знадобитися.

$ alias randnum='expr `fortune | wc -c` \* `fortune | wc -c` \* `fortune | wc -c`'

Ще одним варіантом є використання команди fortune для рандомізації даних для іншого використання.

Наприклад, вкладіть імена всіх своїх друзів, співробітників або учасників конкурсу в файл і використовуйте команду fortune, щоб вибрати переможця. Після того, як ви маєте імена в текстовому файлі з рядками, розділеними знаками %, можна створити свій .dat файл і провести розіграш, який залежить від випадковості команди fortune, щоб грати чесно.

$ strfile -c % friends friends.dat
"friends.dat" created
There were 15 strings
Longest string: 12 bytes
Shortest string: 4 bytes

$ fortune friends
Rebecca

Скільки fortune доступно?

Ось скрипт для підрахунку кількості fortune у каталозі /usr/share/games/fortune:

#!/bin/bash

total=0

for file in `ls /usr/share/games/fortune | grep -v "\."`
do
  num=`grep % $file | wc -l`
  num=`expr $num - 1`
  total=`expr $total + $num`
done

Команда grep гарантує, що для підрахунку використовуються лише файли-джерела fortune (ті, у яких немає розширень файлів).

$ count_all_fortunes
16139

Дізнавайтеся й інші лайфхаки на ProIT: Використання команди comm для порівняння файлів або каталогів у Linux.

Підписуйтеся на ProIT у Telegram, щоб не пропустити жодну публікацію!‌‌

Приєднатися до company logo
Продовжуючи, ти погоджуєшся з умовами Публічної оферти та Політикою конфіденційності.