Автор Тема: Приёмы профессиональной работы в shell - обсуждение  (Прочитано 54927 раз)

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Поставил спасибку alsoijw за вопрос.
Благодаря его вопросу найдена ошибка в man vcs :
$ find /usr/share/man/ -name "*vcs*"
/usr/share/man/man8/vcstime.8.gz
/usr/share/man/man4/vcs.4.xz
/usr/share/man/man4/vcsa.4.xz
$ rpm -qf /usr/share/man/man4/vcs.4.xz
man-pages-4.04-alt1

В приведённой в man vcs команде должно быть не old, а fold:
       Note that the output does not contain newline characters, so some  pro‐
       cessing may be required, like in

           old -w 81 /dev/vcs3 | lpr

Русский man vcs отображает команду верно:
       Вы  можете получить снимок экрана на vt3, переключившись на vt1 и введя
       cat /dev/vcs3 >foo. Заметьте, что  вывод  не  содержит  символов  новой
       строки,  и может понадобиться некоторая его обработка, например fold -w
       81 /dev/vcs3 | lpr или (ужас!)  setterm -dump 3 -file /proc/self/fd/1.

Назначение fold
$ man fold|col -b|sed -n '5,6p; 24,25p'
ИМЯ
       fold - перенос строк по заданной длине
       -w, --width=ШИРИНА
      использовать заданную ШИРИНУ столбцов вместо 80

Напрашивается на багрепорт на сизифный man-pages
Это не ошибка - это разгильдяйство!
« Последнее редактирование: 20.01.2016 03:13:50 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Скрипт выдаёт в течение одной минуты каждые пять секунд, температуру и частоту процессора
Не проще через watch ?

cat путь/temp-freq.sh
acpi -t | grep 3: | awk '{print $4, $6}' &&   grep MHz /proc/cpuinfo|awk '{print $4, $2}'

watch   путь/temp-freq.sh

Да как сказать...
Для этого скрипт должен быть исполняемым.
Иначе последует отказ в доступе:
$ ll ./temp-freq-watch.sh
-rw-r--r-- 1 user user 100 июн 26 06:59 ./temp-freq-watch.sh
$ watch -n 5 ./temp-freq-watch.sh
Every 5,0s: ./temp-freq-watch.sh                                                                     Mon Jun 26 07:04:52 2017

sh: ./temp-freq-watch.sh: Отказано в доступе

Но хранить ли исполняемые файлы в хомяке, вопрос философский.
Разве что в /usr/local/{bin,sbin}

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 246
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
watch echo $(acpi -t | grep 3: | awk '{print $4, $6}' &&  grep MHz /proc/cpuinfo|awk '{print $4, $2}')

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
watch echo $(acpi -t | grep 3: | awk '{print $4, $6}' &&  grep MHz /proc/cpuinfo|awk '{print $4, $2}')

Этот вариант не работает совсем.
На скриншоте, в окне справа, реальная текущая частота процессора.

Работает
watch [-n 5] /path/script.sh
при условии что файл скрипта исполняемый.

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 246
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Интересно, почему - ошибка в команде, или что-то глубже ?  :-)

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Интересно, почему - ошибка в команде, или что-то глубже ?  :-)

Кто его знает, это надо погружаться:
Если нагрузить процессор, запустить
watch echo variable-string
затем разгрузить процессор, то через watch будет продолжать отображаться та частота процессора, которая была во время запуска watch при нагруженном процессоре. Несмотря на то что процессор уже разгружен.

Поэтому в примере у меня цикл whille-do-done который будет работать всегда: либо как исполняемый файл, либо через sh, либо однострочником.
« Последнее редактирование: 26.06.2017 19:35:07 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Недостатки использования цикла while-do-done:
- Некоторая сложность в организации цикла выводов.

Недостатки использования watch:
- Использование сложных конструкций в скрипт-файле;
- Скрипт-файл должен быть исполняемый;
- Невозможность вывод перенаправить в файл: валит в файл кучу нечитабельного хлама;
- Обязательный контроль за выводом в реалтайме и в связи с этим, если нагрузка на процессор сильно изменяется в зависимости от активного окна приложения, невозможность получить наиболее точные данные при контроле температуры процессора.

Оффлайн andrew_b

  • Завсегдатай
  • *
  • Сообщений: 534
Я вот смотрю, для того чтобы выделить какое-то поле в строке, почему-то используют awk, а не cut.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Я вот смотрю, для того чтобы выделить какое-то поле в строке, почему-то используют awk, а не cut.

awk в ряде случаев более предсказуем чем cut.
Этот пример показывает насколько awk предсказуем чем cut:

Реальное положение дел
$  ps -eo pcpu,size,args|grep -v CPU|sort -n -r|head -n 5
20.6 844860 /usr/lib/newmoon-base/palemoon-bin -P test2
 6.0 61436 /usr/lib/newmoon-base/plugin-container /usr/lib/browser-plugins/libflashplayer.so -appdir /usr/lib/newmoon-base/browser 27575 plugin
 1.7   808 htop
 0.9 51940 /usr/libexec/tumbler-1/tumblerd
 0.6 23624 /usr/bin/X :0 -audit 0 -auth /var/lib/gdm/:0.Xauth -nolisten tcp vt7

awk -- выбор по первому полю, третьему и дальше -- поля pcpu и аргумент:
$  ps -eo pcpu,size,args|grep -v CPU|sort -n -r|head -n 5|awk '{$2=""; print $0}'
20.5  /usr/lib/newmoon-base/palemoon-bin -P test2
6.0  /usr/lib/newmoon-base/plugin-container /usr/lib/browser-plugins/libflashplayer.so -appdir /usr/lib/newmoon-base/browser 27575 plugin
1.8  htop
0.6  /usr/bin/X :0 -audit 0 -auth /var/lib/gdm/:0.Xauth -nolisten tcp vt7
0.1  /usr/libexec/tumbler-1/tumblerd

А теперь что показал cut:
$  ps -eo pcpu,size,args|grep -v CPU|sort -n -r|head -n 5|cut -f1,3- -d ' '
20.4 /usr/lib/newmoon-base/palemoon-bin -P test2
 61436 /usr/lib/newmoon-base/plugin-container /usr/lib/browser-plugins/libflashplayer.so -appdir /usr/lib/newmoon-base/browser 27575 plugin
   808 htop
 23624 /usr/bin/X :0 -audit 0 -auth /var/lib/gdm/:0.Xauth -nolisten tcp vt7
 93300 /usr/sbin/osspd --pid --dsp-slave=/usr/sbin/ossp-alsap

Оффлайн hasculdr

  • Завсегдатай
  • *
  • Сообщений: 672
В prompt баша возможно к имени пользователя добавить текущее время? Первый подход к поисковикам дал только настройку файла history.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
В prompt баша возможно к имени пользователя добавить текущее время? Первый подход к поисковикам дал только настройку файла history.

Возможно. Но только отображение текущего. При нажатии Enter или выполнении любой команды отобразится текущее время.
$ man bash | sed -n '1731,1765p'
PROMPTING
       When executing interactively, bash displays the primary prompt PS1 when it is ready to read a command, and the sec‐
       ondary prompt PS2 when it needs more input to complete a command.  Bash allows these prompt strings to  be  custom‐
       ized by inserting a number of backslash-escaped special characters that are decoded as follows:
              \a     an ASCII bell character (07)
              \d     the date in "Weekday Month Date" format (e.g., "Tue May 26")
              \D{format}
                     the  format is passed to strftime(3) and the result is inserted into the prompt string; an empty for‐
                     mat results in a locale-specific time representation.  The braces are required
              \e     an ASCII escape character (033)
              \h     the hostname up to the first `.'
              \H     the hostname
              \j     the number of jobs currently managed by the shell
              \l     the basename of the shell's terminal device name
              \n     newline
              \r     carriage return
              \s     the name of the shell, the basename of $0 (the portion following the final slash)
              \t     the current time in 24-hour HH:MM:SS format
              \T     the current time in 12-hour HH:MM:SS format
              \@     the current time in 12-hour am/pm format
              \A     the current time in 24-hour HH:MM format
              \u     the username of the current user
              \v     the version of bash (e.g., 2.00)
              \V     the release of bash, version + patch level (e.g., 2.00.0)
              \w     the current working directory, with $HOME abbreviated with a tilde
              \W     the basename of the current working directory, with $HOME abbreviated with a tilde
              \!     the history number of this command
              \#     the command number of this command
              \$     if the effective UID is 0, a #, otherwise a $
              \nnn   the character corresponding to the octal number nnn
              \\     a backslash
              \[     begin a sequence of non-printing characters, which could be used to embed a terminal control sequence
                     into the prompt
              \]     end a sequence of non-printing characters

Увидеть умолчальное содержимое переменной PS1 можно этой командой:
echo $PS1

Для отображения текущего времени в приглашении bash, нужно в $HOME/.bashrc добавить две строки:
PS1="[\u@\h \W \t]\$ "
export PS1

Отображение будет таким:
[user1@hostname ~ 21:36:08]$ _

Или таким:
PS1="[\u@\h \t \W]\$ "
export PS1
[user1@hostname 21:45:16 ~]$

Или таким:
PS1="[\u@\h \A \W]\$ "
export PS1
[user1@hostname 21:50 ~]$
« Последнее редактирование: 26.02.2018 21:52:08 от Speccyfighter »

Оффлайн hasculdr

  • Завсегдатай
  • *
  • Сообщений: 672
Спасибо, именно это и нужно.

Оффлайн mayhl

  • Завсегдатай
  • *
  • Сообщений: 572
    • softmasterhl.awardspace.info
    • Email
Предлагаю исправить, уточнить название темы на Мастерство и/или Искусство.

Профессионализм как продажность за деньги, хотя и предполагает наличие некой минимальной квалификации, однако, первостепенно ориентирован на оплату.  Практически, это означает стремление к максимально дешёвым решениям, как правило, с минимальным качеством. Также, получение профессионального статуса, не всегда достигается закономерно, а предоставляет некую индульгенцию для сиюминутных потерь квалификации.   

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Профессионализм как продажность за деньги,
стремление к максимально дешёвым решениям, как правило, с минимальным качеством.

Линукс система в целом состоит из множества отдельных проектов, которым на систему в целом глубоко насрать. И в этой груде костылей постоянно что-нибудь ломается.
Не верите?

Всё вроде замечательно и вроде бы работает. И вдруг нахер исчезает ethernet интерфейс. Мля, что за фигня? Оказывается его внесли в блэклист.
А периодическое всплывание рэндома мак-адреса с отваливанием сети?
Файлы начали нахер рушиться и ядро виснуть, - привет дефолтному modesetting драйверу. А ведь раньше дефолт был Intel. И ведь ноутбук специально подбирался как 100%-но Линукс-совместимый со сложностью на уровне розетки, адским выкуриванием чужих логов с usnet три месяца подряд. Думаете это такое ахиренное удовольствие?
rtc нахер исчез, оказывается ядро "улучшили".
Всё ничего и вдруг слышу выруливающий на взлётную полосу Боинг 747. Опять ядро "улучшили".
Уязвимость появилась. Код можно выполнить на уровне ядра. Да вы совсем шизанулись. Вы же не в курсе, что в IS-DOS на Спектруме, память динамически разделяемая. И ядро на 6 уровней. Но такой херни, какую отмочили линуксоиды, спектрумисты не откалывали.
Втащили в апстрим этот ский сыстемд. Причём Поттеринг категорически отказался идти на уступки. Вы думаете, что мы с Данго не знаем, что sysv сейчас, это набор костылей, хоть он и работает в xfce. sysv-tde совсем без *systemd*, но не сегодня завтра он труп. И каждый месяц жди какого-нибудь взрыва из-за этого сыстемдеца. И в бинарных Линукс вместе они не уживутся. Разве что наверное в сорс-бэйзэд. Например таких как gentoo. Патрик например, и гном, и сыстемд, и Поттеринга, вообще интеллигентно нахер послал. А сгоряча Патрик ничего не делает.
И на всё это, чтобы понять суть и обойти, нужно время. Думаете это так офигенно весело?
Там недавно в соседней теме, парень плату менял в ноутбуке по причине накрывшейся nvram из-за этого UEFI-ного западла, которое называют прогрессивной технологией.
Отсутствие мотивации тоже приводит к похеризму. Вот такие пирожки с котятами...

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Профессионализм как продажность за деньги,
стремление к максимально дешёвым решениям, как правило, с минимальным качеством.
...
Файлы начали нахер рушиться и ядро виснуть, - привет дефолтному modesetting драйверу. А ведь раньше дефолт был Intel. И ведь ноутбук специально подбирался как 100%-но Линукс-совместимый со сложностью на уровне розетки, адским выкуриванием чужих логов с usnet три месяца подряд. Думаете это такое ахиренное удовольствие?
...

Я вот специально решил проверить новой установкой, грохнув отлаженную систему. Виснет сволочь с дефолтом. Мёртво и моментально.
Апстрим, это должно быть наиболее лучшим, наиболее надёжным. Но если апстримный modesetting_drv вызывает разрушения в файловой системе, то апстрим говно, а заправляют в нём мудаки.
Это уже тестировалось ежесекундным логгированием из бесконечного цикла без fifo: результат, потеря содержимого файла.
« Последнее редактирование: 10.09.2018 11:05:30 от Speccyfighter »