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

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Сражаемся с bad-блоками

Обе команды должны выполняться при размонтированной файловой системе:

Найденные bad-блоки команда занесёт в bad block inode с запретом использования этих блоков под файлы и директории:
# fsck.ext4 -c /dev/sdXY

Неразрушающий тест чтения-записи со случайным паттерном, - обновляет bad block inode, проверяет inodes, блоки и структуру директорий:
# fsck.ext4 -c -c /dev/sdXY

man fsck.ext4 # перевод с английского
            -c Эта опция заставляет e2fsck использовать программу badblocks (8) для
               сканирования устройства только для чтения, чтобы найти любые поврежденные блоки.. Если
               обнаружены какие-либо поврежденные блоки, они добавляются в индекс плохих блоков, чтобы
               предотвратить их размещение в файле или каталоге. Если эта
               опция указана дважды, то сканирование плохих блоков будет выполняться
               с использованием неразрушающего теста чтения-записи.
« Последнее редактирование: 07.05.2020 10:50:39 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Несколько команд...

Показать initrd текущего ядра
# ls /boot/initrd-$(uname -r).img

Заблэклистить модуль nouveau, если не заблэклистен или файл блэклиста отсутствует
# BLKLST=$(grep '^blacklist nouveau' /etc/modprobe.d/blacklist-alterator-x11.conf 2>/dev/null); \
if [ -z "$BLKLST" ]; then echo 'blacklist nouveau' >> /etc/modprobe.d/blacklist-alterator-x11.conf; fi

Удалить модуль nouveau текущего ядра
(для ядер sec-def, std-def, std-pae, un-def)
# apt-get remove kernel-modules-drm-nouveau-$(uname -r|cut -f 2,3 -d -)#1:$(uname -r|cut -f 1,4- -d '-' )

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Воспроизведение потокового аудио в консольных плеерах
или вторая жизнь старого железа


Спойлер
Где и как можно использовать старый компьютер?
Например на массовых мероприятиях для воспроизведения потокового аудио в котором рекламных вставок нет или сведено к минимуму. Учитывая, что не всегда, но часто, используется аккустика не Hi Fi класса.
У консольных плееров например низкие требования к железу. Для воспроизведения через них потокового аудио не требуется наличие Х-сервера.
Вопрос здесь чисто риторический: как достать url'ы?

Этическая сторона.
Здесь всё похоже на анекдот с изюминкой.
Многие, но не все западные ресурсы даже не пытаются сильно скрывать URL на потоки, не выставляя их на показ.
Постсовковые ресурсы, фактически ретранслирующие западное потоковое аудио, стремятся глубоко спрятать линки на потоки с навязыванием рекламы.


Как достать URL'ы аудтопотоков?

Сложный способ.

Здесь не станем изобретать велосипед, а воспользуемся уже рассказанным кем-то.
Цитировать
Радио с помощью Chrome
1. Открываешь понравившуюся станцию на сайте через Google Chrome (его аналог)
2. Нажимаешь F12
3. Переходишь на вкладку Network и запускаешь воспроизведение (при необходимости выбираем перезагрузить страницу)
4. Смотришь в тайм-ленте самое длинное соединение (или подходящий тип файла) и копируешь его (ПКМ -> Copy link address)
5. При необходимости меняем User-Agent в плеере
AIMP3 => Настройки -> Воспроизведение -> Параметры подключения -> User-Agent
Цитировать
Радио с помощью Firefox
0. Необходим установленный браузер Mozilla Firefox с установленным дополнением  Adblock Plus
1. Открываешь понравившуюся станцию на сайте через Mozilla Firefox
2. Нажимаешь CTRL+SHIFT+V или Инструменты -> Adblock Plus -> Открыть список элементов, либо просто по значку Adblock Plus и выбрать Открыть список элементов
3. В открывшемся списке найти в колонке тип значение Объект или запрос объекта
4. Обычно таких значений несколько, плоэтому здесь определяем методом логики или добовляем в плеер и воспроизводим (обычно адреса в таких видах: http://radio.netorn.ru:18000/radio.netorn.1fm.top.hits http://radio.russianfm.de:8000/ http://62.141.42.128:8000 или без указания порта http://cluster.quantumart.ru/broadcast/default.aspx?media=rusradio)
5. При необходимости меняем User-Agent в плеере
AIMP3 => Настройки -> Воспроизведение -> Параметры подключения -> User-Agent
Цитировать
Радио с помощью Opera
1. На странице с радио ПКМ - Проинспектировать элемент
2. Переходим на вкладку Network
3. Перезапускаем радио(если было включено) или просто включаем воспроизведение
4. Ищем элемент с самой длинной сессией (Timeline) - это и есть наша ссылка на поток
5. При необходимости меняем User-Agent в плеере на браузерный (для самых фанатов Opera - на Opera/9.80)
Цитировать
Примечание
Если у Вас ссылка вида http://сайт/?type=.flv/любой текст
Например: http: //sc-tcl-64kaac.1.fm/?type=.flv/;?listenerid=1370970777029_0.363394066458568&awparams=companionAds%3Atrue
Не забудьте сменить расширение на поддерживаемое, к примеру MP3, реальное можно узнать при воспроизведении трека в плеере
Ресурс, откуда это взято, содержит большие коллекции URL'ов на потоковое аудио/радио.

Пример.
Как хакнуть URL 'SKY Радио' с этого ресурса?

В Firefox на странице сначала (плагин и расширение mozilla-plugin-adobe-flash и firefox-adblock_plus установлены):
Инструменты => Adblock Plus =>  Открыть список элементов...
Запустить проигрывание радио.
В поле 'Тип' с типом 'Запрос объекта' находим адрес: http://194.106.119.241:8500/skyradio_hi.mp3
Воспроизводим поток:
$ mplayer -nocache -softvol http://194.106.119.241:8500/skyradio_hi.mp3


Как похакать URL потока вот этого радио?

Опять же:
В Firefox на странице сначала (плагин и расширение mozilla-plugin-adobe-flash и firefox-adblock_plus установлены):
Инструменты => Adblock Plus =>  Открыть список элементов...
Запустить проигрывание радио.
В поле 'Тип' с типом 'Запрос объекта' находим адрес: http://92.241.191.113/stream/7834/1384947896.388?format=flv
Меняем расширение и воспроизводим поток:
$ mplayer -nocache -softvol http://92.241.191.113/stream/7834/1384947896.388?format=mp3


Как достать URL'ы станций этого ресурса содержащего  большую коллецию станций?

Например 'Радио NRJ' в браузере Firefox.
Плагин mozilla-plugin-gxine должен быть установлен.
Щёлкнуть мышкой по названию станции 'Радио NRJ' - откроется новое окно.
В окне навести курсор на высокую и узкую стрелку справа внизу.
При наведении курсора на стрелку высветится линк на страницу: http://e-radio.ru/radio/zaycev_fm_pop.php
Сохраните страницу через меню по правой кнопке мыши опцией 'Сохранить объект как...'
Сделайте cat на сохранённую страницу:
$ cat zaycev_fm_pop.php |grep http
<META http-equiv=Content-Type content="text/html; charset=windows-1251">
<link rel="shortcut icon" href="http://www.zaycev.fm/favicon.ico" />
<A HREF="http://www.zaycev.fm/"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
<OBJECT  ID="mediaPlayer" width="291" height="151"  CLASSID="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" CODEBASE="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715" STANDBY="Loading Microsoft Windows Media Player components..."  TYPE="application/x-oleobject">
<PARAM NAME="URL" VALUE="http://www.zaycev.fm:9001/ZaycevFM(32).m3u">
pluginspage = "http://www.microsoft.com/Windows/MediaPlayer/"
src="http://www.zaycev.fm:9001/ZaycevFM(32).m3u" align="middle" width=291 height=143
<a href='http://www.zaycev.fm:9001/ZaycevFM(32).m3u'>Play
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">

Внутри будет линк на плейлист, который надо скачать (перед круглыми скобками ставим бэкслэш):
$ wget http://www.zaycev.fm:9001/ZaycevFM\(32\).m3u

Сделайте cat скачанному плейлисту - это и есть URL на потоковое радио:
$ cat ZaycevFM\(32\).m3u
http://radio.zaycev.fm:9001/ZaycevFM(32)

Воспроизведение типично (не забываем про бэкслэши):
$ mplayer -nocache -softvol http://radio.zaycev.fm:9001/ZaycevFM\(32\)
$ mpg123 -C -v http://radio.zaycev.fm:9001/ZaycevFM\(32\)


Как хакнуть URL'ы di.fm

Здесь самое нужное: как выглядят URL'ы для воспроизведения потокового аудио?

У di.fm шесть серверов:
http://pub[1-6].di.fm

В общем виде модель URL'а выглядит например как:
http://pub4.di.fm/di_

Для получения полного адреса потока:
Заходим на страницу http://www.di.fm/
В разделе Channels наводим курсор например на название потока Classic Trance и видим адрес http://www.di.fm/classictrance
Добавляем к модели URL'а 'http://pub4.di.fm/di_' название потока classictrance и воспроизводим:
$ mplayer -nocache -softvol http://pub6.di.fm/di_classictrance


Добавляем для себя чуть-чуть удобства.

На странице канала, например Classic Trance, можно сохранить страницу например как 'Classic-Trance-on-Digitally-Imported.txt'.
Все названия каналов потом можно сохранить в 291-ну строку в одном блоке начиная со строки 811 чтобы не тыкать каждый раз мышкой, а просто попросить shell показать то, что нужно:
$ tail -n +811 ./Classic-Trance-on-Digitally-Imported.txt  | head -n 291 > ./channel-list-di.fm.txt

    <div id="channel-list">
      <div class="wrap-outer">
        <div class="backdrop">
          <div class="wrap">
            <div class="lists">
                <ul>
                    <li data-channel="ambient">
                      <a href="/ambient">
                        Ambient
</a>                    </li>
...
<Skip>
...
</a>                    </li>
                    <li data-channel="vocaltrance">
                      <a href="/vocaltrance">
                        Vocal Trance
</a>                    </li>
                </ul>
            </div>

Или следующий блок строк 1108-1180, что по-сути то же самое. Но на мой взгляд этот блок визуально воспринимается лучше. Но кому как.

Если вам и так кажется, что файл забит лишним мусором, можете грепнуть и его:
$ cat ./channel-list-di.fm.txt | grep data
                    <li data-channel="ambient">
                    <li data-channel="bigroomhouse">
                    <li data-channel="breaks">
                    <li data-channel="chillhop">
                    <li data-channel="chillout">
                    <li data-channel="chilloutdreams">
                    <li data-channel="chillstep">
                    <li data-channel="chiptunes">
                    <li data-channel="classiceurodance">
                    <li data-channel="classiceurodisco">
                    <li data-channel="classictrance">
                    <li data-channel="classicvocaltrance">
...
<Skip>
...
                    <li data-channel="vocalchillout">
                    <li data-channel="vocallounge">
                    <li data-channel="vocaltrance">

Ну а если уж и так тоже много, - пройдитесь по файлу sed'ом с замещающей правкой (-i) и созданием резервной копии *.bak, чтобы по крайней мере получить возможность сделать откат на шаг назад:
$ tail -n +811 ./Classic-Trance-on-Digitally-Imported.txt  | head -n 291 > ./channel-list-di.fm.txt

$ cat ./channel-list-di.fm.txt | grep data > ./channel-list.di.fm.txt

$ sed -i.bak 's/ //g' ./channel-list.di.fm.txt

# Эта команда заменяет выражение [<lidata-channel="] на [http://pub5.di.fm/di_]:
$ sed -i.bak 's/<lidata-channel="/http:\/\/pub5.di.fm\/di_/g' ./channel-list.di.fm.txt

$ sed -i.bak 's/">//g' ./channel-list.di.fm.txt

Чтобы в финале получить нечто такое:
$ less channel.list.di.fm.txt

http://pub5.di.fm/di_ambient
http://pub5.di.fm/di_bigroomhouse
http://pub5.di.fm/di_breaks
http://pub5.di.fm/di_chillhop
http://pub5.di.fm/di_chillout
http://pub5.di.fm/di_chilloutdreams
http://pub5.di.fm/di_chillstep
http://pub5.di.fm/di_chiptunes
http://pub5.di.fm/di_classiceurodance
http://pub5.di.fm/di_classiceurodisco
http://pub5.di.fm/di_classictrance
http://pub5.di.fm/di_classicvocaltrance
...
<Skip>
...
http://pub5.di.fm/di_trance
http://pub5.di.fm/di_trap
http://pub5.di.fm/di_tribalhouse
http://pub5.di.fm/di_ukgarage
http://pub5.di.fm/di_umfradio
http://pub5.di.fm/di_vocalchillout
http://pub5.di.fm/di_vocallounge
http://pub5.di.fm/di_vocaltrance

pub[1-4] - New York
pub[5-6] - San Jose (Калифорния)
$ ls ./|grep bak
channel-list.di.fm.txt.bak
Чистку файла от мусора можете выполнить и через mcedit.

Выбор плеера и аудиоформата дело вашего вкуса и свободных ресурсов:
$ ps -eo vsize,rss,pcpu,args|grep mplayer
129196 39084  2.8 mplayer -nocache -softvol http://pub5.di.fm/di_trance
$ ps -eo vsize,rss,pcpu,args|grep mpg123
  4532  2288  2.1 mpg123 -C -v http://pub5.di.fm/di_trance

$ mplayer -nocache -softvol http://pub1.di.fm/di_classictrance_aac
...
Bitrate: 64kbit/s
...
$ mplayer -nocache -softvol http://pub1.di.fm/di_classictrance
...
Bitrate: 96kbit/s
...


Что-то можно найти и на 101.ru

Последовательно зайти на страницы - например Радио ENERGY:
http://101.ru/
http://101.ru/?an=port_groupchannels&group=1
http://101.ru/?an=port_channel_mp3&channel=99

Сохраняем страницу только html: РадиоENERGY.101.ru.txt

В файле:
$ cat РадиоENERGY.101.ru.txt |grep chann|grep htt
{'st':'/design/images/101channel_vol_notprot.st','pl':'http://101.ru/play.m3u?uid=99|bit=2|serv=342|tok=23942246lrwChN8DGbC0EKDHEp8RTg%3D%3D49|setst=059367200138509381820131122','wheel':1},
<div class="addthis_toolbox addthis_32x32_style" addthis:url="http://101.ru/?an=port_channel_mp3&amp;channel=99">
VK.Widgets.Comments("vk_comments", {limit: 5, width: "450", attach: false, mini: 1, height: 500, autoPublish: 1, pageUrl: "http://101.ru/?an=port_channel_mp3&channel=99"}, "channel99");

Видим адрес:
http://101.ru/play.m3u?uid=99|bit=2|serv=342

Меняем в адресе | на &:
http://101.ru/play.m3u?uid=99&bit=2&serv=342

Вводим в браузер. Браузер покажет:
{"playlist":[{"comment":"Radio ENERGY - 101.RU 342","file":"http://ru2.101.ru:8000/v1_1?setst=059367200138509381820131122&tok="},{"comment":"Radio ENERGY - 101.RU 292","file":"http://eu7.101.ru:8000/v1_1?setst=059367200138509381820131122&tok=L%2BCj%2BwkbJat1SKiSExvY3ZANbJkmr4vE%2BjWy6wDQ70gHdd9TgRS2HQ%3D%3D"},{"comment":"Radio ENERGY - 101.RU 202","file":"http://nbn.101.ru:8000/v1_1?setst=059367200138509381820131122&tok=L%2BCj%2BwkbJat1SKiSExvY3ZANbJkmr4vE%2BjWy6wDQ70gHdd9TgRS2HQ%3D%3D"},{"comment":"Radio ENERGY - 101.RU 332","file":"http://ru1.101.ru:8000/v1_1?setst=059367200138509381820131122&tok=L%2BCj%2BwkbJat1SKiSExvY3ZANbJkmr4vE%2BjWy6wDQ70gHdd9TgRS2HQ%3D%3D"},{"comment":"Radio ENERGY - 101.RU 342","file":"http://ru2.101.ru:8000/v1_1?setst=059367200138509381820131122&tok=L%2BCj%2BwkbJat1SKiSExvY3ZANbJkmr4vE%2BjWy6wDQ70gHdd9TgRS2HQ%3D%3D"},{"comment":"Radio ENERGY - 101.RU 232","file":"http://eu4.101.ru:8000/v1_1?setst=059367200138509381820131122&tok=L%2BCj%2BwkbJat1SKiSExvY3ZANbJkmr4vE%2BjWy6wDQ70gHdd9TgRS2HQ%3D%3D"}]}

Берём например последний и воспроизводим:
$ mplayer -nocache -softvol http://eu4.101.ru:8000/v1_1?setst=059367200138509381820131122
...
Connecting to server eu4.101.ru[91.223.18.200]: 8000...

Name   : EnergyFM Online
Public : yes
Bitrate: 128kbit/s
...
Audio only file format detected.
==============================================
Opening audio decoder: [mpg123] MPEG 1.0/2.0/2.5 layers I, II, III
AUDIO: 44100 Hz, 2 ch, s16le, 128.0 kbit/9.07% (ratio: 16000->176400)
Selected audio codec: [mpg123] afm: mpg123 (MPEG 1.0/2.0/2.5 layers I, II, III)
==============================================
AO: [alsa] 48000Hz 2ch s16le (2 bytes per sample)
Video: no video
Starting playback...
...


Аналогично Авторадио (101.ru)

Сохраняем страницу
http://101.ru/?an=port_channel_mp3&channel=100

смотрим
$ cat autoradio.101.ru.txt |grep m3u
{'st':'/design/images/101channel_vol_notprot.st','pl':'http://101.ru/play.m3u?uid=100|bit=2|serv=342|tok=23942246lrwChN8DGbC0EKDHEp8RTg%3D%3D50|setst=059367200138509381820131122','wheel':1},

Меняем в адресе пайпы на энд:
http://101.ru/play.m3u?uid=100&bit=2&serv=342

Забиваем в адресную строку браузера, браузер покажет:
{"playlist":[{"comment":"Autoradio - 101.RU 342","file":"http://ru2.101.ru:8000/v3_1?setst=059367200138509381820131122&tok="},{"comment":"Autoradio - 101.RU 292","file":"http://eu7.101.ru:8000/v3_1?setst=059367200138509381820131122&tok=aE9LYBcBfyUJx7hDX8j%2F3zfpfo3FQI9%2FiII%2BqY%2FmL7eZKozTZ2zOPA%3D%3D"},{"comment":"Autoradio - 101.RU 202","file":"http://nbn.101.ru:8000/v3_1?setst=059367200138509381820131122&tok=aE9LYBcBfyUJx7hDX8j%2F3zfpfo3FQI9%2FiII%2BqY%2FmL7eZKozTZ2zOPA%3D%3D"},{"comment":"Autoradio - 101.RU 332","file":"http://ru1.101.ru:8000/v3_1?setst=059367200138509381820131122&tok=aE9LYBcBfyUJx7hDX8j%2F3zfpfo3FQI9%2FiII%2BqY%2FmL7eZKozTZ2zOPA%3D%3D"},{"comment":"Autoradio - 101.RU 342","file":"http://ru2.101.ru:8000/v3_1?setst=059367200138509381820131122&tok=aE9LYBcBfyUJx7hDX8j%2F3zfpfo3FQI9%2FiII%2BqY%2FmL7eZKozTZ2zOPA%3D%3D"},{"comment":"Autoradio - 101.RU 232","file":"http://eu4.101.ru:8000/v3_1?setst=059367200138509381820131122&tok=aE9LYBcBfyUJx7hDX8j%2F3zfpfo3FQI9%2FiII%2BqY%2FmL7eZKozTZ2zOPA%3D%3D"}]}

Берём последний и воспроизводим:
$ mplayer -nocache -softvol http://eu4.101.ru:8000/v3_1?setst=059367200138509381820131122
...
Name   : AutoRadio Online
Public : yes
Bitrate: 128kbit/s
...


Аналогично это на 101.ru можно сделать через elinks.
Единственно, для Авторадио, он покажет:
$ cat autoradio-101-ru.txt |grep m3u
{'st':'/design/images/101channel_vol_notprot.st','pl':'http://101.ru/play.m3u?uid=100|bit=2|serv=232|tok=23942246lrwChN8DGbDBlS3pivJR3A%3D%3D1|setst=','wheel':1},

Точно также в адресе меняем пайпы на энд
http://101.ru/play.m3u?uid=100&bit=2&serv=232
и забиваем адрес в другую вкладку elinks
После 'Save as' elinks предложит сохранить как файл play100.txt
$ cat play100.txt
{"playlist":[{"comment":"Autoradio - 101.RU 232","file":"http://eu4.101.ru:8000/v3_1?setst=-1&tok="},{"comment":"Autoradio - 101.RU 292","file":"http://eu7.101.ru:8000/v3_1?setst=-1&tok=0x3lhoWiWdYdAqhfrWFpErRnAyRoLIIBaePuv1zIdW7T1uPgpAFCaw%3D%3D"},{"comment":"Autoradio - 101.RU 332","file":"http://ru1.101.ru:8000/v3_1?setst=-1&tok=0x3lhoWiWdYdAqhfrWFpErRnAyRoLIIBaePuv1zIdW7T1uPgpAFCaw%3D%3D"},{"comment":"Autoradio - 101.RU 342","file":"http://ru2.101.ru:8000/v3_1?setst=-1&tok=0x3lhoWiWdYdAqhfrWFpErRnAyRoLIIBaePuv1zIdW7T1uPgpAFCaw%3D%3D"},{"comment":"Autoradio - 101.RU 202","file":"http://nbn.101.ru:8000/v3_1?setst=-1&tok=0x3lhoWiWdYdAqhfrWFpErRnAyRoLIIBaePuv1zIdW7T1uPgpAFCaw%3D%3D"},{"comment":"Autoradio - 101.RU 232","file":"http://eu4.101.ru:8000/v3_1?setst=-1&tok=0x3lhoWiWdYdAqhfrWFpErRnAyRoLIIBaePuv1zIdW7T1uPgpAFCaw%3D%3D"}]}

Последний адрес для воспроизведения:
$ mplayer -nocache -softvol http://eu4.101.ru:8000/v3_1
Можете перебрать их все.


Как похакать забугровые буржуйские ресурсы, линки на которые ниже, транслирующие потоковое аудио?
https://1mix.co.uk/
http://ah.fm/forum/
http://laradiofm.com/station-608/stream-32/
http://fullspectrumradio.com/#tune_in
http://www.house-radio.com/
http://www.listenlive.eu/netherlands.html
http://www.181.fm/index.php?p=mp3links
http://www.shoutcast.com/Internet-Radio/armin%20van%20buuren (или тут: http://www.shoutcast.com/radio/Electronic)
http://www.country108.com/#playlist

Ответ:
Да никак!
Забугорные буржуи народ цивилизованный и не жадный, а поэтому линки вам уже выложили.
Если прямого линка нет, на названии станции делайте 'Сохранить объект как...'
Внутри плейлиста адрес/адреса потоков в формате:
http://адрес:порт

Долгой жизни вашему андеграунд-железу!


Для любителей Trance music (подарок) - ссылка на плейлист, - список URL'ов потоков 32, 128, 192, 256 и 320kbit '1Mix Radio – Trance Stream':
http://laradiofm.com/download/608-ru-pls/
http://адрес:порт


Цель всего этого ставилась, показать хак как анализ кода.
Хак, как логический и творческий подход для получения конечного результата.
И получить только аудиопоток в чистом виде без лишнего ненужного хлама засоряющего трафик.
« Последнее редактирование: 31.01.2021 08:43:31 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Дополнение к предыдущему сообщению
Воспроизведение потокового аудио в консольных плеерах
или вторая жизнь старого железа


Спойлер
Ещё раз про sed.
html-код di.fm изменился и разобраться в ворохе неструктурированного кода будет стоить немалого труда.
Поэтому приведём его в порядок, вытянув из него в два захода адреса свыше 80-ти потоков.

Заходим по адресу http://www.di.fm/channels
и сохраняем html-страницу.
Пусть этот сохраненный файл будет
Digitally Imported - addictive electronic music.html

Переходим в текущий каталог содержащий сохранённый файл.
Поскольку будущий список адресов потоков не содержит переносов строк, готовим переносы строк для потоков и фильтруем будущие потоки сохранив фильтрацию в файл di.txt
sed 's/>/>\n/g'  Digitally\ Imported\ -\ addictive\ electronic\ music.html \
|grep 'tune-in-link'|grep http > di.txt

получив на выходе вместо кошмара, то, что уже визуально восприимчиво
<a class="tune-in-link" href="http://www.di.fm/00sclubhits">
 <a class="tune-in-link" href="http://www.di.fm/ambient">
 <a class="tune-in-link" href="http://www.di.fm/bassnjackinhouse">
 <a class="tune-in-link" href="http://www.di.fm/bassline">
 <a class="tune-in-link" href="http://www.di.fm/bigbeat">
 <a class="tune-in-link" href="http://www.di.fm/bigroomhouse">
 <a class="tune-in-link" href="http://www.di.fm/breaks">
 <a class="tune-in-link" href="http://www.di.fm/chillhop">
 <a class="tune-in-link" href="http://www.di.fm/chillout">
 <a class="tune-in-link" href="http://www.di.fm/chilloutdreams">
 <a class="tune-in-link" href="http://www.di.fm/chillstep">
 <a class="tune-in-link" href="http://www.di.fm/classiceurodance">
 <a class="tune-in-link" href="http://www.di.fm/classiceurodisco">
 <a class="tune-in-link" href="http://www.di.fm/classictrance">
 <a class="tune-in-link" href="http://www.di.fm/classicvocaltrance">
 <a class="tune-in-link" href="http://www.di.fm/clubdubstep">
 <a class="tune-in-link" href="http://www.di.fm/club">
 <a class="tune-in-link" href="http://www.di.fm/djmixes">
 <a class="tune-in-link" href="http://www.di.fm/darkdnb">
 <a class="tune-in-link" href="http://www.di.fm/darkpsytrance">
 <a class="tune-in-link" href="http://www.di.fm/deephouse">
 <a class="tune-in-link" href="http://www.di.fm/deepnudisco">
 <a class="tune-in-link" href="http://www.di.fm/deeptech">
 <a class="tune-in-link" href="http://www.di.fm/detroithousentechno">
 <a class="tune-in-link" href="http://www.di.fm/discohouse">
 <a class="tune-in-link" href="http://www.di.fm/downtempolounge">
 <a class="tune-in-link" href="http://www.di.fm/drumandbass">
 <a class="tune-in-link" href="http://www.di.fm/drumstep">
 <a class="tune-in-link" href="http://www.di.fm/dub">
 <a class="tune-in-link" href="http://www.di.fm/dubstep">
 <a class="tune-in-link" href="http://www.di.fm/ebm">
 <a class="tune-in-link" href="http://www.di.fm/eclectronica">
 <a class="tune-in-link" href="http://www.di.fm/electro">
 <a class="tune-in-link" href="http://www.di.fm/electroswing">
 <a class="tune-in-link" href="http://www.di.fm/electronicpioneers">
 <a class="tune-in-link" href="http://www.di.fm/electronics">
 <a class="tune-in-link" href="http://www.di.fm/electropop">
 <a class="tune-in-link" href="http://www.di.fm/epictrance">
 <a class="tune-in-link" href="http://www.di.fm/eurodance">
 <a class="tune-in-link" href="http://www.di.fm/funkyhouse">
 <a class="tune-in-link" href="http://www.di.fm/futuregarage">
 <a class="tune-in-link" href="http://www.di.fm/futuresynthpop">
 <a class="tune-in-link" href="http://www.di.fm/gabber">
 <a class="tune-in-link" href="http://www.di.fm/goapsy">
 <a class="tune-in-link" href="http://www.di.fm/handsup">
 <a class="tune-in-link" href="http://www.di.fm/harddance">
 <a class="tune-in-link" href="http://www.di.fm/hardtechno">
 <a class="tune-in-link" href="http://www.di.fm/hardcore">
 <a class="tune-in-link" href="http://www.di.fm/hardstyle">
 <a class="tune-in-link" href="http://www.di.fm/house">
 <a class="tune-in-link" href="http://www.di.fm/idm">
 <a class="tune-in-link" href="http://www.di.fm/indiedance">
 <a class="tune-in-link" href="http://www.di.fm/jazzhouse">
 <a class="tune-in-link" href="http://www.di.fm/jungle">
 <a class="tune-in-link" href="http://www.di.fm/latinhouse">
 <a class="tune-in-link" href="http://www.di.fm/liquiddnb">
 <a class="tune-in-link" href="http://www.di.fm/liquiddubstep">
 <a class="tune-in-link" href="http://www.di.fm/liquidtrap">
 <a class="tune-in-link" href="http://www.di.fm/lounge">
 <a class="tune-in-link" href="http://www.di.fm/mainstage">
 <a class="tune-in-link" href="http://www.di.fm/minimal">
 <a class="tune-in-link" href="http://www.di.fm/nightcore">
 <a class="tune-in-link" href="http://www.di.fm/nudisco">
 <a class="tune-in-link" href="http://www.di.fm/oldschoolacid">
 <a class="tune-in-link" href="http://www.di.fm/oldschoolhouse">
 <a class="tune-in-link" href="http://www.di.fm/oldschoolrave">
 <a class="tune-in-link" href="http://www.di.fm/classictechno">
 <a class="tune-in-link" href="http://www.di.fm/progressive">
 <a class="tune-in-link" href="http://www.di.fm/progressivepsy">
 <a class="tune-in-link" href="http://www.di.fm/psychill">
 <a class="tune-in-link" href="http://www.di.fm/psybient">
 <a class="tune-in-link" href="http://www.di.fm/russianclubhits">
 <a class="tune-in-link" href="http://www.di.fm/soulfulhouse">
 <a class="tune-in-link" href="http://www.di.fm/spacemusic">
 <a class="tune-in-link" href="http://www.di.fm/techhouse">
 <a class="tune-in-link" href="http://www.di.fm/techno">
 <a class="tune-in-link" href="http://www.di.fm/trance">
 <a class="tune-in-link" href="http://www.di.fm/trap">
 <a class="tune-in-link" href="http://www.di.fm/tribalhouse">
 <a class="tune-in-link" href="http://www.di.fm/umfradio">
 <a class="tune-in-link" href="http://www.di.fm/undergroundtechno">
 <a class="tune-in-link" href="http://www.di.fm/vocalchillout">
 <a class="tune-in-link" href="http://www.di.fm/vocallounge">
 <a class="tune-in-link" href="http://www.di.fm/vocaltrance">

Теперь убираем "мусор" в начале строки, меняем www на адрес сервера и дополняем имя канала индексом di_
sed 's/^.*="//g; s/www/pub5/g; s/fm\//fm\/di_/g; s/">//g' di.txt > di-chnls.pls

чтобы на выходе получить адреса потоков
http://pub5.di.fm/di_00sclubhits
http://pub5.di.fm/di_ambient
http://pub5.di.fm/di_bassnjackinhouse
http://pub5.di.fm/di_bassline
http://pub5.di.fm/di_bigbeat
http://pub5.di.fm/di_bigroomhouse
http://pub5.di.fm/di_breaks
http://pub5.di.fm/di_chillhop
http://pub5.di.fm/di_chillout
http://pub5.di.fm/di_chilloutdreams
http://pub5.di.fm/di_chillstep
http://pub5.di.fm/di_classiceurodance
http://pub5.di.fm/di_classiceurodisco
http://pub5.di.fm/di_classictrance
http://pub5.di.fm/di_classicvocaltrance
http://pub5.di.fm/di_clubdubstep
http://pub5.di.fm/di_club
http://pub5.di.fm/di_djmixes
http://pub5.di.fm/di_darkdnb
http://pub5.di.fm/di_darkpsytrance
http://pub5.di.fm/di_deephouse
http://pub5.di.fm/di_deepnudisco
http://pub5.di.fm/di_deeptech
http://pub5.di.fm/di_detroithousentechno
http://pub5.di.fm/di_discohouse
http://pub5.di.fm/di_downtempolounge
http://pub5.di.fm/di_drumandbass
http://pub5.di.fm/di_drumstep
http://pub5.di.fm/di_dub
http://pub5.di.fm/di_dubstep
http://pub5.di.fm/di_ebm
http://pub5.di.fm/di_eclectronica
http://pub5.di.fm/di_electro
http://pub5.di.fm/di_electroswing
http://pub5.di.fm/di_electronicpioneers
http://pub5.di.fm/di_electronics
http://pub5.di.fm/di_electropop
http://pub5.di.fm/di_epictrance
http://pub5.di.fm/di_eurodance
http://pub5.di.fm/di_funkyhouse
http://pub5.di.fm/di_futuregarage
http://pub5.di.fm/di_futuresynthpop
http://pub5.di.fm/di_gabber
http://pub5.di.fm/di_goapsy
http://pub5.di.fm/di_handsup
http://pub5.di.fm/di_harddance
http://pub5.di.fm/di_hardtechno
http://pub5.di.fm/di_hardcore
http://pub5.di.fm/di_hardstyle
http://pub5.di.fm/di_house
http://pub5.di.fm/di_idm
http://pub5.di.fm/di_indiedance
http://pub5.di.fm/di_jazzhouse
http://pub5.di.fm/di_jungle
http://pub5.di.fm/di_latinhouse
http://pub5.di.fm/di_liquiddnb
http://pub5.di.fm/di_liquiddubstep
http://pub5.di.fm/di_liquidtrap
http://pub5.di.fm/di_lounge
http://pub5.di.fm/di_mainstage
http://pub5.di.fm/di_minimal
http://pub5.di.fm/di_nightcore
http://pub5.di.fm/di_nudisco
http://pub5.di.fm/di_oldschoolacid
http://pub5.di.fm/di_oldschoolhouse
http://pub5.di.fm/di_oldschoolrave
http://pub5.di.fm/di_classictechno
http://pub5.di.fm/di_progressive
http://pub5.di.fm/di_progressivepsy
http://pub5.di.fm/di_psychill
http://pub5.di.fm/di_psybient
http://pub5.di.fm/di_russianclubhits
http://pub5.di.fm/di_soulfulhouse
http://pub5.di.fm/di_spacemusic
http://pub5.di.fm/di_techhouse
http://pub5.di.fm/di_techno
http://pub5.di.fm/di_trance
http://pub5.di.fm/di_trap
http://pub5.di.fm/di_tribalhouse
http://pub5.di.fm/di_umfradio
http://pub5.di.fm/di_undergroundtechno
http://pub5.di.fm/di_vocalchillout
http://pub5.di.fm/di_vocallounge
http://pub5.di.fm/di_vocaltrance

Если предыдущую команду немного изменить,
sed 's/^.*="//g; s/www/pub5/g; s/fm\//fm\/di_/g; s/">//g; s/$/_aac/g' di.txt > di-chnls-aac.pls

можно получить адреса потоков для Advanced Audio Codec
http://pub5.di.fm/di_00sclubhits_aac
http://pub5.di.fm/di_ambient_aac
http://pub5.di.fm/di_bassnjackinhouse_aac
http://pub5.di.fm/di_bassline_aac
http://pub5.di.fm/di_bigbeat_aac
http://pub5.di.fm/di_bigroomhouse_aac
http://pub5.di.fm/di_breaks_aac
http://pub5.di.fm/di_chillhop_aac
http://pub5.di.fm/di_chillout_aac
http://pub5.di.fm/di_chilloutdreams_aac
http://pub5.di.fm/di_chillstep_aac
http://pub5.di.fm/di_classiceurodance_aac
http://pub5.di.fm/di_classiceurodisco_aac
http://pub5.di.fm/di_classictrance_aac
http://pub5.di.fm/di_classicvocaltrance_aac
http://pub5.di.fm/di_clubdubstep_aac
http://pub5.di.fm/di_club_aac
http://pub5.di.fm/di_djmixes_aac
http://pub5.di.fm/di_darkdnb_aac
http://pub5.di.fm/di_darkpsytrance_aac
http://pub5.di.fm/di_deephouse_aac
http://pub5.di.fm/di_deepnudisco_aac
http://pub5.di.fm/di_deeptech_aac
http://pub5.di.fm/di_detroithousentechno_aac
http://pub5.di.fm/di_discohouse_aac
http://pub5.di.fm/di_downtempolounge_aac
http://pub5.di.fm/di_drumandbass_aac
http://pub5.di.fm/di_drumstep_aac
http://pub5.di.fm/di_dub_aac
http://pub5.di.fm/di_dubstep_aac
http://pub5.di.fm/di_ebm_aac
http://pub5.di.fm/di_eclectronica_aac
http://pub5.di.fm/di_electro_aac
http://pub5.di.fm/di_electroswing_aac
http://pub5.di.fm/di_electronicpioneers_aac
http://pub5.di.fm/di_electronics_aac
http://pub5.di.fm/di_electropop_aac
http://pub5.di.fm/di_epictrance_aac
http://pub5.di.fm/di_eurodance_aac
http://pub5.di.fm/di_funkyhouse_aac
http://pub5.di.fm/di_futuregarage_aac
http://pub5.di.fm/di_futuresynthpop_aac
http://pub5.di.fm/di_gabber_aac
http://pub5.di.fm/di_goapsy_aac
http://pub5.di.fm/di_handsup_aac
http://pub5.di.fm/di_harddance_aac
http://pub5.di.fm/di_hardtechno_aac
http://pub5.di.fm/di_hardcore_aac
http://pub5.di.fm/di_hardstyle_aac
http://pub5.di.fm/di_house_aac
http://pub5.di.fm/di_idm_aac
http://pub5.di.fm/di_indiedance_aac
http://pub5.di.fm/di_jazzhouse_aac
http://pub5.di.fm/di_jungle_aac
http://pub5.di.fm/di_latinhouse_aac
http://pub5.di.fm/di_liquiddnb_aac
http://pub5.di.fm/di_liquiddubstep_aac
http://pub5.di.fm/di_liquidtrap_aac
http://pub5.di.fm/di_lounge_aac
http://pub5.di.fm/di_mainstage_aac
http://pub5.di.fm/di_minimal_aac
http://pub5.di.fm/di_nightcore_aac
http://pub5.di.fm/di_nudisco_aac
http://pub5.di.fm/di_oldschoolacid_aac
http://pub5.di.fm/di_oldschoolhouse_aac
http://pub5.di.fm/di_oldschoolrave_aac
http://pub5.di.fm/di_classictechno_aac
http://pub5.di.fm/di_progressive_aac
http://pub5.di.fm/di_progressivepsy_aac
http://pub5.di.fm/di_psychill_aac
http://pub5.di.fm/di_psybient_aac
http://pub5.di.fm/di_russianclubhits_aac
http://pub5.di.fm/di_soulfulhouse_aac
http://pub5.di.fm/di_spacemusic_aac
http://pub5.di.fm/di_techhouse_aac
http://pub5.di.fm/di_techno_aac
http://pub5.di.fm/di_trance_aac
http://pub5.di.fm/di_trap_aac
http://pub5.di.fm/di_tribalhouse_aac
http://pub5.di.fm/di_umfradio_aac
http://pub5.di.fm/di_undergroundtechno_aac
http://pub5.di.fm/di_vocalchillout_aac
http://pub5.di.fm/di_vocallounge_aac
http://pub5.di.fm/di_vocaltrance_aac

Осталось попросить mplayer проиграть плэйлист
mplayer -softvol -nocache -playlist ./di-chnls-aac.pls

Осталось напомнить, что номера серверов с 1-го по 6-й.
Перемещение по плэйлисту в mplayer клавишами < > [Shift+,] [Shift+.]

Теперь вас не будут беспокоить, ни реклама, ни баннеры, ни флеш.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Сервисы и их краткие описания

grep -rH '\[ru\]' /etc/alterator/services/*.desktop| cut -f5- -d '/'|sed 's/:Comment\[ru\]//g'| sed 's/.desktop//g'

acpid=Управление событиями ACPI
ahttpd=Сервер HTTP, обслуживающий систему управления Alterator
ahttpd-firsttime=Служба первоначальной настройки Alterator
alteratord=Конфигуратор системы
anacron=Запуск заданий для cron, не выполненных из-за выключения компьютера
arpwatch=Служба отслеживания назначения IP-адресов
auditd=Служба системы аудита Linux
avahi-daemon=Служба обнаружения доступных служб Zeroconf в сети
bacula-dir=Управляющая служба резервного копирования
bacula-fd=Служба работы с файлами для резервных копий
bacula-sd=Служба работы с хранилищем резервных копий
bind=named (BIND) — сервер доменных имён (DNS), который используется для преобразования имён узлов в IP-адреса.
bridge=Служба организации виртуального сетевого моста
configd=Конфигуратор системы
consolesaver=Управление энергосбережением для консоли
crond=cron — стандартная программа UNIX, которая запускает указанные пользователем программы по расписанию. vixie cron содержит больше возможностей по сравнению с базовой программой cron для UNIX, включая улучшенную безопасность и большую гибкость.
cups=Общая система печати UNIX (CUPS) — система печати с поддержкой очередей для нескольких принтеров, доступных в сети.
dhcpd=Сервер DHCP от Internet Software Consortium реализует протоколы динамической настройки узлов (DHCP) и загрузки Интернет (BOOTP). DHCP позволяет узлам сети TCP/IP запросить и назначить IP-адреса, а также получить информацию о сети, к которой подключен компьютер. BOOTP предлагает такие же возможности, что и DHCP, но с некоторыми ограничениями.
dm=Запуск графического экрана входа в систему
dnsmasq=Кеширующий сервер DNS
dovecot=Сервер IMAP от Dovecot
ethtool=Настройка параметров сетевых карт Ethernet
fbsetfont=Инициализация фреймбуфера
gssd=Служба управления контекстами RPCSEC GSS для NFS
haldaemon=Служба сбора и управления информацией об оборудовании
httpd2=Apache — сервер сети WWW. Он предназначен для обслуживания файлов HTML и запросов CGI.
idmapd=Служба для NFSv4, связывающая имена пользователей с идентификаторами пользователей и групп.
ifplugd=Служба ifplugd следит за сетевыми устройствами и при необходимости перенастраивает их.
iptables=Брандмауэр с мощной системой фильтрации сетевых пакетов
kadmin=Управляющий сервер Kerberos
kdcrotate=Ротация списка контекстов KDC в /etc/krb5.conf
keytable=Переключение раскладки клавиатуры для консоли.
klogd=Служба отслеживания сообщения ядра.
kprop=Служба получения обновления с управляющего сервера Kerberos
krb5kdc=Служба раздачи тикетов Kerberos
kvm=Служба аппаратной поддержки виртуальных машин KVM
libvirtd=Служба управления интерфейсами к запущенным вирутальным машинам OpenVZ
lm_sensors=Служба мониторинга температурных датчиков.
lvm2-monitor=Служба поддержки LVM2
mdadm=Служба мониторинга и управления программными RAID
messagebus=Служба широковещательных уведомлений о системных событиях
mysqld=Сервер баз данных MySQL.
netfs=Служба подключения сетевых ресурсов NFS, SMB, CIFS и NCP.
network=Служба настройки сети Etcnet
nfs=NFS — популярный протокол совместного доступа к файлам в сети TCP/IP. Служба предоставляет возможности сервера NFS, настроенного через файлы /etc/exports и /etc/sysconfig/nfs.
nfslock=NFS — популярный протокол совместного доступа к файлам в сети TCP/IP. Служба предоставляет возможности сервера блокировок NFS.
nscd=Служба кеширования информации о паролях и группах для NIS, NIS+, LDAP и hesiod.
nslcd=Служба кеширования информации о паролях и группах для NIS, NIS+, LDAP и hesiod.
ntpd=Сервер синхронизации времени
openvpn=Сервер VPN (Virtual Private Network)
portmap=Служба portmapper управляет подключениями RPC, которые используются такими протоколами как NFS и NIS. Сервер portmap должен быть запущен на серверах, использующих протоколы, поддерживающие механизм RPC.
postfix=Postfix — альтернатива программы sendmail для отправки электронной почты от Wietse Venema.
pppoe=Служба подключения к провайдеру PPPoE
pptptunnel=Служба подключений PPTP.
publish-acc-to-console=Служба показа адресов доступа к Alterator
random=Служба генератора псевдослучайных чисел.
rawdevices=Служба назначения неразмеченного дискового пространства блочным устройствам (таким как разделы жёсткого диска. Она используется такими приложениями как Oracle. Вы можете настроить назначение в файле /etc/sysconfig/rawdevices.
slapd=Сервер службы каталогов LDAP.
slurpd=Сервер службы каталогов LDAP.
smartd=Служба отслеживания состояния жёстких дисков S.M.A.R.T.
smb=Служба совместного доступа к файлам по протоколу SMB.
spamd=Служба проверки сообщений электронной почты на спам с помощью SpamAssassin.
splash=Экран заставки для консоли
squid=Squid — кеширующий прокси-сервер.
sshd=Сервер OpenSSH
sysfs=Служба установки параметров для файловой системы sysfs из файла /etc/sysfs.conf
syslogd=Служба журналирования сообщений для системных служб.
template=Поддержка многострочных описаний системных служб.
udevd=Управление устройствами в /dev
udevd-final=Служба повторения событий udev, не обработанных ранее при загрузке.
ulogd=Служба журналирования событий сетевого фильтра
update_wms=Обновление списка сеансов оконных менеджеров.
upsd=Сервер информации от источников бесперебойного питания
upsdrv=Поддержка драйверов источников бесперебойного питания
upsmon=Служба мониторинга источников бесперебойного питания и управления выключением компьютера
vz=Служба поддержки виртуальных машин OpenVZ
winbind=Служба интеграции с доменами NT.
wpa_supplicant=Управление ключами WPA для беспроводных устройств.
x11presetdrv=Служба автоматического определения драйвера графической системы
xinetd=xinetd — расширенная замена inetd. Служба предоставляет механизм контроля доступа, журналирование, поддержку периодичной доступности и лимитов для сетевых служб.


Как это сделано (выше)?

Команда вывода в текущей системе списка сервисов и их описаний, для вставки вывода в сообщение на форуме
(имена сервисов заключаются в теги bold - последняя 3-я строка):
grep -rH '\[ru\]' /etc/alterator/services/*.desktop| \
cut -f5- -d '/'|sed 's/:Comment\[ru\]//g'| sed 's/.desktop//g' \
| sed 's/^/\[b\]/g'|sed 's/=/\[\/b\]=/g'

Вывод при наличии установленного пакета
# rpm -qf /etc/alterator/services/*.desktop
alterator-services-2.0.3-alt1
...

Парсить описание одной командой всё-таки приятнее, чем рассматривать все файлы по одному, а их ох как много:
ls /etc/alterator/services/*.desktop| wc -l
80
« Последнее редактирование: 21.10.2021 17:11:40 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Контроль файлов в каталоге
(Например после апгрейда системы)

Создание списка файлов в формате контрольная_сумма-файл
Создание построчного списка файлов в каталоге
# find /lib \! -type d|sort > lib.new.txt

Вычисление контрольной суммы каждого файла методом перебора строк с добавлением результата в файл lib-md5.new.txt
# while read line; do md5sum "$line" >> lib-md5.new.txt 2>/dev/null; done < lib.new.txt

Само-собой ранее должны быть созданы файлы lib.old.txt и lib-md5.old.txt аналогичным образом.

Или вместо формата lib-md5.{old|new}.txt использовать формат файла lib-md5.текущая_дата.txt
# while read line; do md5sum "$line" >> lib-md5.$(date +%F).txt 2>/dev/null; done < lib.new.txt

Тогда имя результирующего файла будет выглядеть как
lib-md5.2016-04-14.txt

lib-md5.{new|old|date}.txt в финале содержат построчно контрольная_сумма-файл.

Сравнить файлы
# sdiff lib-md5.old.txt lib-md5.new.txt | less

Или перейти к первому различию
# sdiff lib-md5.new.txt lib-md5.old.txt | less -p '<|>|\|'

Или показать только различия
# sdiff lib-md5.new.txt lib-md5.old.txt | grep '<\|>\||'|less

Соответственно сравнение будет выглядеть так (показать всё)
...
bb2c78de4a4609ba0881efd0c12da8cf  /lib/libattr.so.1.1.2448      bb2c78de4a4609ba0881efd0c12da8cf  /lib/libattr.so.1.1.2448
72fbfd7dcf9af96a283b8fe571e2fd1d  /lib/libaudit.so.1          | 758801a97aaf34952c963d243c79ab2b  /lib/libaudit.so.1
72fbfd7dcf9af96a283b8fe571e2fd1d  /lib/libaudit.so.1.0.0      | 758801a97aaf34952c963d243c79ab2b  /lib/libaudit.so.1.0.0
92e35c919effaf1ff1dc0e7028dfd772  /lib/libblkid.so.1            92e35c919effaf1ff1dc0e7028dfd772  /lib/libblkid.so.1
...

или так (показать только различия)
72fbfd7dcf9af96a283b8fe571e2fd1d  /lib/libaudit.so.1          | 758801a97aaf34952c963d243c79ab2b  /lib/libaudit.so.1
72fbfd7dcf9af96a283b8fe571e2fd1d  /lib/libaudit.so.1.0.0      | 758801a97aaf34952c963d243c79ab2b  /lib/libaudit.so.1.0.0
...

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

Пайп указывает на то, что контрольные суммы у одноимённых файлов различаются, а значит файл изменился. В данном случае после dist-upgrade.
« Последнее редактирование: 14.04.2016 03:19:56 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Как сделать внешнюю usb-аудиокарту дефолтной в системе с alsa


Оглавление

Минисовет: Как быстро перейти к разделу в оглавлении
Вариант I: Жёсткая индексация аудиокарт
Вариант II: Горячее подключение usb-audio
Вариант III: "Ручной" триггер переключения аудиокарт
Вариант IV: переключение аудиокарт через asoundconf-gtk(GUI) / asoundconf(терминал)
       Выбор регулировки звука аудиокарты в Xfce
       Переключение аудиокарт из консоли
Регулировка звука из консоли



Как быстро перейти к разделу в оглавлении

* Щёлкните в браузере тройным щелчком мыши рядом со строкой или на строке интересующего раздела, чтобы строка в оглавлении полностью выделились.
* Нажмите Ctrl+c скопировав выделенное в буфер обмена.
* Нажмите Ctrl+f чтобы окно Найти, в браузере, стало активным.
* Нажмите Ctrl+v для вставки выделенного из буфера обмена в окно Найти браузера.
* Нажмите F3 или Ctrl+G или щёлкните по кнопке Далее для перехода к следующему совпадению.
   Для перехода к предыдущему совпадению, т.е. возврат к разделу оглавления, нажмите Shift+F3 или Ctrl+Shift+G или щёлкните по кнопке Назад

Все горячие клавиши браузера Firefox (применимо и для Pale Moon):
https://support.mozilla.org/ru/kb/sochetaniya-klavish


Вариант I: Жёсткая индексация аудиокарт
Сложный

Смотрим свои аудиоустройства и их индексацию:
$ cat /proc/asound/cards
 0 [ICH6           ]: ICH4 - Intel ICH6
                      Intel ICH6 with AD1981B at irq 21
 1 [Headset        ]: USB-Audio - Logitech USB Headset
                      Logitech Logitech USB Headset at usb-0000:03:00.1-1, full speed
Их два:
Дефолтная карта ICH6 с индексом 0.
Задача:
Поменять индексы так, чтобы usb аудиокарта Headset была с индексом 0.

Какой ядерный модуль использует аудиокарта ICH6?
$ lspci -knn | grep -A2 -i audio
00:1e.2 Multimedia audio controller [0401]: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Audio Controller [8086:266e] (rev 03)
Subsystem: Hewlett-Packard Company NX6110/NC6120 [103c:099c]
Kernel driver in use: snd_intel8x0
Используется ядерный модуль snd_intel8x0

В основном usb аудиоустройства используют ядерный модуль snd_usb_audio
# find /lib/modules/3.12.22-std-def-alt1/ -name snd*|grep usb|grep audio
/lib/modules/3.12.22-std-def-alt1/kernel/sound/usb/snd-usb-audio.ko
За редким исключением.

Какой модуль к какой карте относится разобрались.

Теперь нас интересует файл:
$ cat /etc/modprobe.d/alsa-modindex.conf
## spare index=0 for a hotplug soundcard (if any)
#options snd-usb-audio index=0

## offset HDMI output compared to onboard audio (#28648)
#options snd_hda_intel index=2,3

#options snd_intel8x0 index=2
#options snd_via82xx index=2
#options snd-bt87x index=3
#options snd_intel8x0m index=4
#options snd-atiixp-modem index=4
#options snd-via82xx-modem index=4

## get PC speaker out of the way
options snd_pcsp index=10

Теперь меняем индексы у карт так, чтобы Headset стала индексом 0, а ICH6 - индексом 1:
$ cat /etc/modprobe.d/alsa-modindex.conf
## spare index=0 for a hotplug soundcard (if any)
#options snd-usb-audio index=0

## offset HDMI output compared to onboard audio (#28648)
#options snd_hda_intel index=2,3

#options snd_intel8x0 index=2
#options snd_via82xx index=2
#options snd-bt87x index=3
#options snd_intel8x0m index=4
#options snd-atiixp-modem index=4
#options snd-via82xx-modem index=4

## get PC speaker out of the way
#options snd_pcsp index=10

options snd-usb-audio index=0
options snd_intel8x0 index=1

Модули и текущую индексацию можно увидеть здесь:
# cat /proc/asound/modules
 0 snd_usb_audio
 1 snd_intel8x0
Если непонятно какой модуль к какой карте относится, ищем поиском в lspci через less - клавиша /
После которой вводится модель поиска. Например имя ядерного модуля или тип устройства.
Или та же модель для поиска в команде ниже.
В примере для поиска, регистр типа устройства, audio, игнорируется:
# lspci -knn | less -p audio -I
Вместо типа audio, моделью для поиска может быть название ядерного модуля snd из вывода выше.

Если карт на самом деле больше, их можно все переиндексировать.
Перегружаемся и получаем звук usb-audio дефолтным.

В конфликтных ситуациях, когда две карты используют один и тот же ядерный модуль, их можно жёстко задать через id ( /etc/modprobe.d/alsa-modindex.conf):
http://forum.altlinux.org/index.php/topic,28619.msg199386.html#msg199386
options snd-usb-audio index=0
options snd-hda-intel index=1
options snd-hda-intel index=2  id="NVidia"

Или:
Дописал в файл /etc/modprobe.d/alsa-modindex строчку
options snd-hda-intel index=1,0
И после перезагрузки порядок поменялся.

 options - позволяет задать модулю параметр.
 snd-hda-intel  -  название модуля драйвера алса, одинаковое для обоих карт (видимо одинаковая микросхема).
 index - параметр, задающий приоритет модуля.
В данном случае есть два модуля с одинаковым названием. Поэтому первому (с индексом 0) задается более низкий приоритет (index= 1), а второму (с индексом 1) задается более высокий приоритет (index=0).
Получается, что индексы меняются местами с помощью одной строки.


Вариант II: Горячее подключение usb-audio

Исходно-дефолтное:
# cat /etc/modprobe.d/alsa-modindex.conf
## spare index=0 for a hotplug soundcard (if any)
#options snd-usb-audio index=0

## offset HDMI output compared to onboard audio (#28648)
#options snd_hda_intel index=2,3

#options snd_intel8x0 index=2
#options snd_via82xx index=2
#options snd-bt87x index=3
#options snd_intel8x0m index=4
#options snd-atiixp-modem index=4
#options snd-via82xx-modem index=4

## get PC speaker out of the way
options snd_pcsp index=10

В системе с:
# rpm -qa --last *alsa*|sort
alsa-oss-1.0.25-alt2                          Пн 28 апр 2014 22:10:53
alsa-tools-1.0.27-alt2                        Чт 01 май 2014 23:16:56
alsa-utils-1.0.27-alt3                        Пт 18 окт 2013 09:26:53
libalsa-1.0.27-alt3                           Пт 18 окт 2013 09:26:23
...
udev-alsa-0.3-alt1.2                          Пт 18 окт 2013 09:27:29

До подключения usb-audio:
# cat /proc/asound/cards
 0 [ICH6           ]: ICH4 - Intel ICH6
                      Intel ICH6 with AD1981B at irq 21
# cat /proc/asound/modules
 0 snd_intel8x0

После подключения usb-audio:
# cat /proc/asound/cards
 0 [ICH6           ]: ICH4 - Intel ICH6
                      Intel ICH6 with AD1981B at irq 21
 1 [Headset        ]: USB-Audio - Logitech USB Headset
                      Logitech Logitech USB Headset at usb-0000:03:00.1-1, full speed
# cat /proc/asound/modules
 0 snd_intel8x0
 1 snd_usb_audio

Собственно сама таблетка usb-audio hotplug (горячее подключение):
# ll /etc/udev/rules.d/00-usb-audio-hotplug.rules
-rw-r--r-- 1 root root 344 июн 24 06:30 /etc/udev/rules.d/00-usb-audio-hotplug.rules
# cat /etc/udev/rules.d/00-usb-audio-hotplug.rules
KERNEL=="pcmC[D0-9cp]*", ACTION=="add", PROGRAM="/bin/sh -c 'K=%k; K=$${K#pcmC}; K=$${K%%D*}; echo defaults.ctl.card $$K > /etc/asound.conf; echo defaults.pcm.card $$K >>/etc/asound.conf'"
KERNEL=="pcmC[D0-9cp]*", ACTION=="remove", PROGRAM="/bin/sh -c 'echo defaults.ctl.card 0 > /etc/asound.conf; echo defaults.pcm.card 0 >>/etc/asound.conf'"

Перегрузить рулезы:
# udevadm control --reload
Или перезагрузить компьютер.

Как это работает?

usb-audio не подключено к порту:
# cat /etc/asound.conf
defaults.ctl.card 0
defaults.pcm.card 0
defaults.pcm.card 0

usb-audio подключено к порту:
# cat /etc/asound.conf
defaults.ctl.card 1
defaults.pcm.card 1
defaults.pcm.card 1

usb-audio отключено от порта:
# cat /etc/asound.conf
defaults.ctl.card 0
defaults.pcm.card 0
defaults.pcm.card 0

После горячего подключения usb-audio требуется перезапуск аудио-приложения.

Таблетку:
Hot-plugging a USB sound card
рекомендовали тут:
https://bugzilla.altlinux.org/show_bug.cgi?id=28648#c1


Вариант III: "Ручной" триггер переключения аудиокарт

Этот же (Вариант II) вариант для аудиокарт
# cat /proc/asound/cards
 0 [ICH6           ]: ICH4 - Intel ICH6
                      Intel ICH6 with AD1981B at irq 21
 1 [Headset        ]: USB-Audio - Logitech USB Headset
                      Logitech Logitech USB Headset at usb-0000:03:00.1-1, full speed

у которых текущие индексы,
# cat /proc/asound/modules
 0 snd_intel8x0
 1 snd_usb_audio

выполняется скрипт-триггером, не требующим udev-alsa:
# VAL=$(cat /etc/asound.conf |tail -c 2) && \
if (( $VAL == 1 )); then sed -i 's/1/0/g' /etc/asound.conf; \
else sed -i 's/0/1/g' /etc/asound.conf; fi
где:

/etc/asound.conf:
# cat /etc/asound.conf
defaults.ctl.card 1
defaults.pcm.card 1

Показать последний символ в последней строке
VAL=$(cat /etc/asound.conf |tail -c 2)

Проверка - если дефолтная карта в /etc/asound.conf с индексом 1, - истина
if (( $VAL == 1 ));

Тогда в файле /etc/asound.conf заменить в строках 1 на 0 сделав дефолтной карту 0
then sed -i 's/1/0/g' /etc/asound.conf

Иначе (если в /etc/asound.conf - 0) в /etc/asound.conf  заменить 0 на 1, сделав дефолтной карту с индексом 1, - см. cat /proc/asound/cards
else sed -i 's/0/1/g' /etc/asound.conf
В else можно сделать более жёсткую проверку, добавив условие:
if (( $VAL == 0 ));
с соответствующим:
then sed -i 's/0/1/g' /etc/asound.conf; fi

Работает это так:
# cat /etc/asound.conf
defaults.ctl.card 0
defaults.pcm.card 0
# VAL=$(cat /etc/asound.conf |tail -c 2) && \
if (( $VAL == 1 )); then sed -i 's/1/0/g' /etc/asound.conf; \
else sed -i 's/0/1/g' /etc/asound.conf; fi
# cat /etc/asound.conf
defaults.ctl.card 1
defaults.pcm.card 1
# VAL=$(cat /etc/asound.conf |tail -c 2) && \
if (( $VAL == 1 )); then sed -i 's/1/0/g' /etc/asound.conf; \
else sed -i 's/0/1/g' /etc/asound.conf; fi
# cat /etc/asound.conf
defaults.ctl.card 0
defaults.pcm.card 0

Если сменить индексы правкой скрипта, скрипт сможет переключать например карты с индексами 1 и 2, устанавливая их по очереди дефолтной аудиокартой.
Минимальные требования скрипта, это наличие sed и libalsa в системе.

Этот вариант можно повесить опционально на панель через sudo для общесистемного переключения на дефолтную аудиокарту. Или файл asound.conf положить в домашний каталог как $HOME/.asound.conf и поправить скрипт.


Вариант IV: переключение аудиокарт через asoundconf-gtk(GUI) / asoundconf(терминал)

Изначально ваш выбор карт может быть например таким
0 - индекс аудиокарты (0 - дефолтная)
В квадратных скобках id (идентификатор) звуковой карты
$ cat /proc/asound/cards
 0 [ICH6           ]: ICH4 - Intel ICH6
                      Intel ICH6 with AD1981B at irq 21

Используемый картой(ами) модуль
$ cat /proc/asound/modules
 0 snd_intel8x0

После подключения usb-гарнитуры список индексов и модулей будет таким
$ cat /proc/asound/cards
 0 [ICH6           ]: ICH4 - Intel ICH6
                      Intel ICH6 with AD1981B at irq 21
 1 [Headset        ]: USB-Audio - Logitech USB Headset
                      Logitech Logitech USB Headset at usb-0000:03:00.0-1, full speed
$ cat /proc/asound/modules
 0 snd_intel8x0
 1 snd_usb_audio

Наша задача сменить приоритет usb-гарнитуры сделав её дефолтной.
Для этого устанавливаем пакеты:
# apt-get install asoundconf asoundconf-gtk

После установки пакетов никакие конфигурационные файлы в домашнем каталоге не содержатся:
$ cat ~/.asoundrc
cat: /home/user/.asoundrc: Нет такого файла или каталога

Вызываем графический конфигуратор выбора аудиокарты:
Меню Xfce -> Настройки -> Default Sound Card

В появившемся окне выбираем нашу подключенную к usb-порту аудио-гарнитуру.
После чего файлы создадутся,
$ cat ~/.asoundrc
# ALSA library configuration file

# Include settings that are under the control of asoundconf(1).
# (To disable these settings, comment out this line.)
</home/user/.asoundrc.asoundconf>


а usb-гарнитура станет дефолтной
$ cat ~/.asoundrc.asoundconf
# ALSA library configuration file managed by asoundconf(1).
#
# MANUAL CHANGES TO THIS FILE WILL BE OVERWRITTEN!
#
# Manual changes to the ALSA library configuration should be implemented
# by editing the ~/.asoundrc file, not by editing this file.
!defaults.pcm.card Headset
defaults.ctl.card Headset
defaults.pcm.device 0
defaults.pcm.subdevice -1
defaults.pcm.nonblock 1
defaults.pcm.compat 0
defaults.pcm.minperiodtime 5000
defaults.pcm.ipc_key 5678293
defaults.pcm.ipc_gid audio
defaults.pcm.ipc_perm 0660
defaults.pcm.dmix.max_periods 0
defaults.pcm.dmix.rate 48000
defaults.pcm.dmix.format "unchanged"
defaults.pcm.dmix.card defaults.pcm.card
defaults.pcm.dmix.device defaults.pcm.device
defaults.pcm.dsnoop.card defaults.pcm.card
defaults.pcm.dsnoop.device defaults.pcm.device
defaults.pcm.front.card defaults.pcm.card
defaults.pcm.front.device defaults.pcm.device
defaults.pcm.rear.card defaults.pcm.card
defaults.pcm.rear.device defaults.pcm.device
defaults.pcm.center_lfe.card defaults.pcm.card
defaults.pcm.center_lfe.device defaults.pcm.device
defaults.pcm.side.card defaults.pcm.card
defaults.pcm.side.device defaults.pcm.device
defaults.pcm.surround21.card defaults.pcm.card
defaults.pcm.surround21.device defaults.pcm.device
defaults.pcm.surround40.card defaults.pcm.card
defaults.pcm.surround40.device defaults.pcm.device
defaults.pcm.surround41.card defaults.pcm.card
defaults.pcm.surround41.device defaults.pcm.device
defaults.pcm.surround50.card defaults.pcm.card
defaults.pcm.surround50.device defaults.pcm.device
defaults.pcm.surround51.card defaults.pcm.card
defaults.pcm.surround51.device defaults.pcm.device
defaults.pcm.surround71.card defaults.pcm.card
defaults.pcm.surround71.device defaults.pcm.device
defaults.pcm.iec958.card defaults.pcm.card
defaults.pcm.iec958.device defaults.pcm.device
defaults.pcm.modem.card defaults.pcm.card
defaults.pcm.modem.device defaults.pcm.device
defaults.pcm.file_format "raw"
defaults.pcm.file_truncate true
defaults.rawmidi.card 0
defaults.rawmidi.device 0
defaults.rawmidi.subdevice -1
defaults.hwdep.card 0
defaults.hwdep.device 0
defaults.timer.class 2
defaults.timer.sclass 0
defaults.timer.card 0
defaults.timer.device 0
defaults.timer.subdevice 0
defaults.namehint.showall off
defaults.namehint.basic on
defaults.namehint.extended off

После смены аудиокарты требуется перезапуск аудиоприложения.


Выбор регулировки звука аудиокарты в Xfce

Правой кнопкой мыши щёлкнуть по аплету микшера в панели задач, выбрать опцию Свойства.
В поле Звуковая карта выбирается звуковая карта звук через которую будет регулировать аплет.
Но после подключения usb-гарнитуры вы не увидите её в списке.
Чтобы гарнитура отобразилась в выпадающем списке, нужно удалить аплет микшера с Панели задач, затем добавить его, после чего карта отобразится в выпадающем списке.

Но есть более короткий путь.
Выполните команду в терминале (эту команду можно сделать исполняемым скриптом и повесить на кнопку в одну из панелей):
$ kill -3 $(ps -eo pid,args|grep xfce4|grep mixer|head -n1|cut -f1 -d '/')

После выполнения этой команды xfce4-mixer автоматически перезапустится, а карта в выпадающем списке отобразится.
Если вы повторите выполнение этой команды менее чем через минуту, всплывёт окно с сообщением:
Цитировать
Модуль «Регулятор громкости»
неожиданно пропал с панели. Хотите его
перезапустить?


Модуль в течение 60 секунд был перезапущен
несколько раз. Если вы нажмёте «Выполнить», панель
попробует запустить его снова, в противном случае он
будет окончательно удалён с панели.

[Выполнить]     [Удалить]

Повторите вызов окна Свойства, окно называется Плагин регулировки звука, и выберите вашу появившуюся в списке usb-audio гарнитуру.

Отключение usb-гарнитуры происходит в обратном порядке:
В окне Свойства микшера сначала выбираете вашу набортную аудиокарту.
Затем в Меню Xfce -> Настройки -> Default Sound Card переключаетесь на набортную аудиокарту,
и затем отключаете usb-гарнитуру от usb-порта.


Переключение аудиокарт из консоли

Смотрим индексы и идентификаторы карт.
Набортная карта:
0 - индекс (0 - дефолтная)
ICH6 - ID (идентификатор) карты
USB гарнитура:
1 - индекс, не дефолтная, низкий приоритет
Headset - ID (идентификатор) карты
$ cat /proc/asound/cards
 0 [ICH6           ]: ICH4 - Intel ICH6
                      Intel ICH6 with AD1981B at irq 21
 1 [Headset        ]: USB-Audio - Logitech USB Headset
                      Logitech Logitech USB Headset at usb-0000:03:00.0-1, full speed
$ cat /proc/asound/modules
 0 snd_intel8x0
 1 snd_usb_audio

Выводим помощь
$ asoundconf --help
Usage:
asoundconf is-active
asoundconf get|delete PARAMETER
asoundconf set PARAMETER VALUE
asoundconf list

Convenience macro functions:
asoundconf set-default-card PARAMETER
asoundconf reset-default-card
asoundconf set-pulseaudio
asoundconf unset-pulseaudio
asoundconf set-oss PARAMETER
asoundconf unset-oss

Изначально конфигов нет
$ ls -a ~/.asoundrc*
ls: невозможно получить доступ к /home/user/.asoundrc*: Нет такого файла или каталога

Посмотреть доступные аудиокарты
$ asoundconf list
Names of available sound cards:
ICH6
Headset

Во время установки умолчальной аудиокарты
$ asoundconf set-default-card Headset

конфиги будут созданы
$ ls -a ~/.asoundrc*
/home/user/.asoundrc  /home/user/.asoundrc.asoundconf

В созданных конфигах:
Переключение аудиокарт активно и не заблокировано
$ grep -v '#' ~/.asoundrc

</home/user/.asoundrc.asoundconf>

USB-гарнитура выбрана умолчальной
$ grep -v '#' ~/.asoundrc.asoundconf|head -n2
!defaults.pcm.card Headset
defaults.ctl.card Headset

Выбор другой карты как умолчальной выполняется по формату
asoundconf set-default-card ID_аудиокарты
где ID_аудиокарты берётся из вывода списка доступных аудиокарт.



Регулировка звука из консоли

Запуском псевдографического конфигуратора
alsamixer

или прямыми командами через amixer.

Посмотреть название контролов карты 0
$ amixer -c0 scontrols|head -n4
Simple mixer control 'Master',0
Simple mixer control 'Master Mono',0
Simple mixer control 'Headphone Jack Sense',0
Simple mixer control 'PCM',0

Посмотреть название контролов карты 1
$ amixer -c1 scontrols|head -n4
Simple mixer control 'Headphone',0
Simple mixer control 'Mic',0

Посмотреть состояние регуляторов аудиокарт
$ amixer -c0 sget Master
Simple mixer control 'Master',0
  Capabilities: pvolume pswitch
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 31
  Mono:
  Front Left: Playback 13 [42%] [-27.00dB] [on]
  Front Right: Playback 13 [42%] [-27.00dB] [on]
$ amixer -c1 sget Headphone
Simple mixer control 'Headphone',0
  Capabilities: pvolume pswitch pswitch-joined
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 44
  Mono:
  Front Left: Playback 32 [73%] [-9.00dB] [on]
  Front Right: Playback 32 [73%] [-9.00dB] [on]

Установить регулятор уровня звука на USB-гарнитуре на 63%
$ amixer -c1 sset Headphone 63%
Simple mixer control 'Headphone',0
  Capabilities: pvolume pswitch pswitch-joined
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 44
  Mono:
  Front Left: Playback 28 [64%] [-13.00dB] [on]
  Front Right: Playback 28 [64%] [-13.00dB] [on]

Воспроизвести потоковое аудио в подсистеме alsa через аудиокарту 1
$ mplayer -quiet -nocache -softvol -prefer-ipv4 -ao alsa:device=hw=1 http://fr1.1mix.co.uk:8016

В подсистеме pulseaudio через аудиокарту 1
$ mplayer -quiet -nocache -softvol -prefer-ipv4 -ao pulse::1 http://fr3.ah.fm:9000

« Последнее редактирование: 18.04.2016 04:07:44 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Модернизированный "ручной" скрипт-триггер
для переключения набортной аудиокарты и usb-audio гарнитуры в системе с alsa

"Ручной" скрипт-триггер, который описывался ранее, можно слегка модернизировать проверкой с созданием конфига если преконфигурация отсутствует.

Переключение аудиокарт можно реализовать двумя вариантами:
Общесистемно
Индивидуально для каждого пользователя

Напомним ситуацию под которую адаптирован скрипт:
$ cat /proc/asound/cards
 0 [ICH6           ]: ICH4 - Intel ICH6
                      Intel ICH6 with AD1981B at irq 21
 1 [Headset        ]: USB-Audio - Logitech USB Headset
                      Logitech Logitech USB Headset at usb-0000:03:00.0-1, full speed
$ cat /proc/asound/modules
 0 snd_intel8x0
 1 snd_usb_audio

В скрипте используются индексы аудиокарт: 0 и 1.


Общесистемный вариант, требует прав root:
$ cat ~/ssc # Switch Sound Cards
#!/bin/sh

if [ -s /etc/asound.conf ]
    then
    VAL=$(cat /etc/asound.conf |tail -c 2)
    if (( $VAL == 1 ))
        then
        sed -i 's/1/0/g' /etc/asound.conf
        else
        sed -i 's/0/1/g' /etc/asound.conf
    fi
    else
    echo -e "defaults.pcm.card 0\ndefaults.pcm.card 0" > /etc/asound.conf
fi

Если файл /etc/asound.conf существует и не нулевой длинны, выполнить проверку:
если выбрана карта 1, заменить на 0, и наоборот.
Иначе, если конфигурационный файл /etc/asound.conf отсутствует или нулевой длинны, создать файл и занести в него пресеты.

Первым стартом, скрипт только создаёт конфигурационный файл /etc/asound.conf с пресетами и дефолтной устанавливается аудиокарта 0.
Повторными стартами, скрипт переключает в дефолтное состояние карты 0 и 1.


Совершенно аналогичный скрипт, но индивидуально для пользователя, - конфигурационный файл $HOME/.asoundrc:
$ cat ~/ssch # Switch Sound Cards Homeuser
#!/bin/sh

if [ -s $HOME/.asoundrc ]
    then
       VAL=$(cat $HOME/.asoundrc |tail -c 2)
          if (( $VAL == 1 ))
              then
                 sed -i 's/1/0/g' $HOME/.asoundrc
              else
                 sed -i 's/0/1/g' $HOME/.asoundrc
          fi
    else
       echo -e "defaults.pcm.card 0\ndefaults.pcm.card 0" > $HOME/.asoundrc
fi

Конфигурационный файл $HOME/.asoundrc скрипта, конфликтует с одноимённым конфигурационным файлом создаваемым asoundconf из одноимённого пакета.

Немного поправив тот или иной скрипт, можно одним мановением руки адаптировать его под собственные условия, заменив например, индекс 1 на 2, если требуется переключать в дефолтное состояние карты 0 и 2. Например если набортная карта у вас с индексом 0, а usb-audio гарнитура с индексом 2.

Внимание, эта версия скрипта, на первом старте уничтожит все $HOME/.asoundrc*, если содержимое $HOME/.asoundrc отличается от содержимого требуемого для работы скрипта, создаст этот файл и пропишет в него свои пресеты:
$ cat ssch
#!/bin/sh

# Description: Switch Sound Cards trigger
#
# Скрипт на первом старте создаёт файл $HOME/.asoundrc с пресетами.
# Если содержимое $HOME/.asoundrc не соответствует пресетам необходимым
# скрипту, скрипт на перврвом старте уничтожит файлы $HOME/.asoundrc*
# и создаст файл со своими пресетами.
# При повторных стартах, скрипт поочерёдно меняет дефолт у карт
# с индексом 0 и 1.


STRING=$(head -n 1 $HOME/.asoundrc|cut -f1 -d ' ')

if [ -s $HOME/.asoundrc ] && [ $STRING = defaults.pcm.card ]
    then
VAL=$(cat $HOME/.asoundrc |tail -c 2)
if (( $VAL == 1 ))
    then
sed -i 's/1/0/g' $HOME/.asoundrc
    else
sed -i 's/0/1/g' $HOME/.asoundrc
fi
    else
rm -f $HOME/.asoundrc*
echo -e "defaults.pcm.card 0\ndefaults.pcm.card 0" > $HOME/.asoundrc
fi

Краткий комментарий к скрипту:

Строка:
VAL=$(cat $HOME/.asoundrc |tail -c 2)
- считывает последние два байта $HOME/.asoundrc и передаёт их переменной VAL, которая  будет содержать индекс текущей дефолтной звуковой карты.

Строка:
if (( $VAL == 1 ))
- проверяет, если индекс содержащийся в VAL равен индексу 1,
то строкой
sed -i 's/1/0/g' $HOME/.asoundrc
sed сменит в файле все индексы с 1 на 0, сделав дефолтной карту с индексом 0 (см. /proc/asound/cards)

Иначе:
- если VAL не содержит индекс 1 (а содержит 0),
строка:
sed -i 's/0/1/g' $HOME/.asoundrc
сменит все индексы с 0 на 1, сделав дефолтной карту с индексом 1.

Строка:
echo -e "defaults.pcm.card 0\ndefaults.pcm.card 0" > $HOME/.asoundrc
- создаёт пресеты с установкой дефолтной карты с индексом 0.

Для работы скрипта требуется sed.


После переключения аудиокарт, не забудьте перезапустить аудиоприложение.
Приятного вам драйва.
« Последнее редактирование: 19.04.2016 06:19:22 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
На системах с System V init работает как останов с выключением питания:
# poweroff
# shutdown -h now # Выключить немедленно
# halt -p
# init 0
# telinit 0
# service halt status
Usage: (halt|reboot|poweroff) {start}
# chkconfig --list|grep acpi
acpid           0:выкл  1:выкл  2:вкл   3:вкл   4:вкл   5:вкл   6:выкл
# /etc/init.d/acpid status
acpid is running
https://wiki.archlinux.org/index.php/Shutdown_Pressing_Power_Button_(Русский)

# shutdown -h +40 # Выключить через 40 минут
# shutdown -h +5 "Power down, close applications please" # Выключение через 5 минут с уведомлением
# shutdown -h 16:43 & # Запланированное выключение в 16:43
# shutdown -c # Отмена запланированного выключения

Запланированный останов операционной системы с выключением питания:
# Завершение ввода заданий по ^d - Ctrl+d
# at 8:30 pm
halt -p
commands will be executed using /bin/bash
job 1395768600.c at Вт мар 25 20:30:00 2014
# Список всех заданий
# at -l # at -l root - Список заданий пользователя root
1395768600.c    Tue Mar 25 20:30:00 2014
# Удаление задания
# at -r 1395768600.c
1395768600.c removed
http://rus-linux.net/MyLDP/BOOKS/unixuser_null/gl8_4.html
Операционная система UNIX (руководство пользователя)
« Последнее редактирование: 18.10.2017 16:04:12 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Как узнать версию флэш-плеера?
(извлечено из скрипта update-pepperflash)

Узнать версию:

pepperflash в системе
$ flashversion=`sed -nrz '/^.*LNX [0-9,]+$/p' \
 $(getconf LIBDIR)/pepper-plugins/libpepflashplayer.so | \
sed -n "s/^.*LNX //p"|tr , .` && echo $flashversion
20.0.0.306

pepperflash извлечённого из rpm-пакета в домашний каталог
(извлечь только библиотеку pepperflash и манифест)
$ rpm2cpio google-chrome-stable-48.0.2564.116-1.i386.rpm | \
cpio -idmv \
./opt/google/chrome/PepperFlash/libpepflashplayer.so \
./opt/google/chrome/PepperFlash/manifest.json  # нажать Enter

./opt/google/chrome/PepperFlash/libpepflashplayer.so
./opt/google/chrome/PepperFlash/manifest.json
365673 блока
$ flashversion=`sed -nrz '/^.*LNX [0-9,]+$/p' \
 ~/Загрузки/pepperflash/tmp/opt/google/chrome/PepperFlash/libpepflashplayer.so | \
sed -n "s/^.*LNX //p"|tr , .` && echo $flashversion
20.0.0.306

adobe-flash в системе
$ flashversion=`sed -nrz '/^.*LNX [0-9,]+$/p' \
 $(getconf LIBDIR)/browser-plugins/libflashplayer.so | \
sed -n "s/^.*LNX //p"|tr , .` && echo $flashversion
11.2.202.621


Посмотреть информацию по неустановленному в систему пакету и его содержимое
$ rpm -qpivl ./google-chrome-stable-48.0.2564.116-1.i386.rpm

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Устранение фриза usb-мыши и usb-клавиатуры подключенных к ноутбуку

usbcore.autosuspend=-1
параметром к ядру, в ALT Linux, отключит автозасыпание для usb-клавиатур и usb-мышей подключенных к ноутбуку. Фриз мышей и клавиатур исчезнет.

Или выполнить команду
# echo 'options usbcore autosuspend=-1' > /etc/modprobe.d/usbcore-autosuspend.conf
после которой требуется перезагрузка

Данный параметр никак не влияет на свежеподключенный usb-винчестер
# smartctl -a /dev/sdb|grep '^Device Model'
Device Model:     TOSHIBA MK5065GSX
# hdparm -I /dev/sdb|grep level
        Advanced power management level: 128
# man hdparm|col -b|sed -n '38,46p'
       -B     Get/set Advanced Power Management feature, if the drive supports
              it.  A  low  value  means aggressive power management and a high
              value means better performance.  Possible  settings  range  from
              values  1  through  127 (which permit spin-down), and values 128
              through 254 (which do not permit spin-down).  The highest degree
              of  power  management  is  attained with a setting of 1, and the
              highest I/O performance with a setting of 254.  A value  of  255
              tells  hdparm to disable Advanced Power Management altogether on
              the drive (not all drives support disabling it, but most do).
Через 10 минут индикатор usb-винчестера выключится, а шпиндель остановится.

Подробно в этой теме:
https://forum.altlinux.org/index.php?topic=36963.0

Важная информация:
См. usbcore.autosuspend
https://www.kernel.org/doc/Documentation/kernel-parameters.txt
См. Changing the default idle-delay time и power/autosuspend_delay_ms
https://www.kernel.org/doc/Documentation/usb/power-management.txt
« Последнее редактирование: 01.07.2016 00:54:52 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Включаем подсветку клавиатуры USB

Трюк подойдёт для usb-клавиатур у которых подсветка клавиатуры включается-отключается по клавише Scroll Lock.
Например для клавиатур:
SPEEDLINK Atmos Illuminated Keyboard SL-6453-SSV-A Silver USB
Defender Calaxy 4710 Silver USB

Команда активации включения/выключения подсветки клавиатуры по клавише Scroll Lock
xmodmap -e 'add mod3 = Scroll_Lock'


Или как вариант (Эти команды можно повесить на любые горячие клавиши по вкусу.):

Команда включения подсветки
xset led named "Scroll Lock"

Команда выключения подсветки
xset -led named "Scroll Lock"


Благодарности:
За подсказку спасибо ресурсу  askbuntu.com

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Как посчитать суммарный объём резидентно занятой процессами памяти

Выведем список процессов по полям в формате rss(resident set size) - args(аргументы, процессы):
$ ps -eo rss,args | grep -v RSS
 1460 init [5]
    0 [kthreadd]
    0 [ksoftirqd/0]
    0 [kworker/0:0H]
    0 [rcu_sched]
    0 [rcu_bh]
    0 [migration/0]
    0 [watchdog/0]
    0 [watchdog/1]
    0 [migration/1]
    0 [ksoftirqd/1]
    0 [kworker/1:0H]
    0 [watchdog/2]
    0 [migration/2]
    0 [ksoftirqd/2]
    0 [kworker/2:0H]
    0 [watchdog/3]
    0 [migration/3]
    0 [ksoftirqd/3]
    0 [kworker/3:0H]
    0 [kdevtmpfs]
    0 [netns]
    0 [perf]
    0 [khungtaskd]
    0 [writeback]
    0 [crypto]
    0 [kintegrityd]
    0 [bioset]
    0 [kblockd]
    0 [md]
    0 [devfreq_wq]
    0 [kswapd0]
    0 [vmstat]
    0 [fsnotify_mark]
    0 [kthrotld]
    0 [bioset]
    0 [bioset]
    0 [bioset]
    0 [bioset]
    0 [bioset]
    0 [bioset]
    0 [bioset]
    0 [bioset]
    0 [bioset]
    0 [bioset]
    0 [bioset]
    0 [bioset]
    0 [bioset]
    0 [bioset]
    0 [bioset]
    0 [bioset]
    0 [bioset]
    0 [bioset]
    0 [bioset]
    0 [bioset]
    0 [bioset]
    0 [bioset]
    0 [bioset]
    0 [bioset]
    0 [deferwq]
    0 [charger_manager]
    0 [ata_sff]
    0 [scsi_eh_0]
    0 [scsi_tmf_0]
    0 [scsi_eh_1]
    0 [scsi_tmf_1]
    0 [bioset]
    0 [bioset]
    0 [jbd2/sda8-8]
    0 [ext4-rsv-conver]
 3544 /lib/systemd/systemd-udevd --daemon
    0 [kworker/3:2]
    0 [kworker/3:1H]
    0 [kworker/0:1H]
    0 [cfg80211]
    0 [kpsmoused]
    0 [irq/46-iwlwifi]
    0 [kworker/1:4]
    0 [kworker/2:1H]
    0 [kworker/1:1H]
    0 [kworker/u17:0]
    0 [kmemstick]
    0 [rtsx_usb_ms_2]
    0 [kworker/u17:2]
    0 [kauditd]
    0 [jbd2/sda9-8]
    0 [ext4-rsv-conver]
  316 /sbin/lvmetad
  160 /sbin/lvmpolld
 2576 /bin/dbus-daemon --system
 3116 /usr/sbin/wpa_supplicant
  132 /usr/sbin/wpa_cli
 8032 /usr/sbin/hald
 3940 hald-runner
 1896 hald-addon-input: Listening on
 1852 /usr/libexec/hal/hald-addon-generic-backlight
 1868 /usr/libexec/hal/hald-addon-rfkill-killswitch
 1808 /usr/libexec/hal/hald-addon-leds
 1856 hald-addon-storage: polling /dev/sr0 (every 2 sec)
 1884 /usr/libexec/hal/hald-addon-cpufreq
 3188 hald-addon-acpi:
 1340 /sbin/syslogd -u syslogd -j /var/resolv
 1364 /sbin/klogd -c 1 -x -u klogd -j /var/lib/klogd
 1844 /usr/sbin/crond -l 4.5
  320 /usr/sbin/smartd -p /var/run/smartd.pid
   56 /usr/sbin/rundm /dev/tty1 /dev/tty2 /dev/tty3 /dev/tty4 /dev/tty5 /dev/tty6 --
 1632 kdm -nodaemon
88504 X -nolisten tcp :0 vt7
    0 [ipv6_addrconf]
  420 /usr/sbin/sshd
 4996 /usr/sbin/cupsd
 4220 -:0
   84 /usr/sbin/acpid -c /etc/acpi/events.ignore
 2868 /usr/sbin/powersaved -d -x /usr/lib/powersave/scripts -f /var/run/acpid.socket -c /etc/powersave
  320 /sbin/mingetty tty2
  300 /sbin/mingetty tty3
  308 /sbin/mingetty tty4
  276 /sbin/mingetty tty5
  344 /sbin/mingetty tty6
 2132 /bin/sh /usr/bin/startkde3
  296 /bin/dbus-launch --sh-syntax --exit-with-session
 2472 /bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session
  212 ssh-agent -u
   52 start_kdeinit --new-startup +kcminit_startup
13576 kdeinit Running...
 6252 dcopserver [kinit] --nosid
15296 klauncher [kinit] --new-startup
26464 kded [kinit] --new-startup
  332 kwrapper ksmserver
22904 ksmserver [kinit]
20256 kwin -session
23608 /usr/lib/kde3/bin/kdesktop
30600 kicker [kinit]
21660 kio_uiserver [kinit]
 8264 artsd -F 10 -S 4096 -s 1 -m artsmessage -c drkonqi -l 3 -f
26264 kjobviewer [kinit] --all --noshow -icon kjobviewer -miniicon kjobvi
19428 kkbswitch -session
19704 krandrtray -session
28388 konsole -session
20096 klipper [kinit]
17968 knotify [kinit]
21572 kpowersave [kinit]
22460 kmix [kinit] -caption KMix -icon kmix -miniicon kmix
 3780 /bin/bash
 3888 /bin/bash
 4004 /bin/bash
 4016 /bin/bash
 3980 /bin/bash
 3824 /bin/bash
  276 palemoon
758300 /usr/lib/newmoon/palemoon-bin
 4360 /usr/libexec/gconfd-2
    0 [hci0]
    0 [hci0]
19416 /usr/lib/kde3/bin/kdesktop_lock --internal 2670
    0 [kworker/0:1]
106088 /usr/lib/newmoon/plugin-container /usr/lib/browser-plugins/libflashplayer.so -appdir /usr/lib/newmoon/browser 3048 plugin
 2240 su -
 4164 -bash
37956 konqueror [kinit] -mimetype inode/directory system:/documents
 2304 top
11664 kio_file [kinit] file
30944 kwrite 00.txt
    0 [kworker/3:1]
    0 [kworker/u16:2]
    0 [scsi_eh_5]
    0 [scsi_tmf_5]
    0 [usb-storage]
    0 [bioset]
    0 [kworker/1:0]
 1912 hald-addon-storage: polling /dev/sdb (every 2 sec)
    0 [kworker/2:1]
    0 [kworker/0:0]
    0 [kworker/2:2]
    0 [kworker/u16:0]
    0 [kworker/0:2]
 1500 man ps
  416 sh -c (cd "/usr/share/man" && man-source '/usr/share/man/man1/ps.1.bz2' '133' '1100i' | /usr/bin/nroff -S -p -t -Dkoi8-r -mtty -mandoc | /usr/bin/less -isR)
 1264 sh -c (cd "/usr/share/man" && man-source '/usr/share/man/man1/ps.1.bz2' '133' '1100i' | /usr/bin/nroff -S -p -t -Dkoi8-r -mtty -mandoc | /usr/bin/less -isR)
  548 /usr/bin/less -isR
    0 [kworker/1:1]
    0 [kworker/u16:1]
    0 [kworker/3:0]
  460 ps -eo rss,args
Первое поле - объём резидентно занятой памяти каждым процессом. Второе поле - процессы, аргументы. Поля разделены пробелом. Количество пробелов между полями значения не имеет.

Посчитаем общий объём резидентно занятой памяти всеми процессами:
$ ps -eo rss,args | grep -v RSS|awk 'BEGIN{sum=0}{sum+=$1}END{print sum}'
1547412
$1 - указывает номер поля по которому будет суммироваться объём.
В данном случае поле RSS первое.
grep -v RSS - удаляет строку отображающую наименования полей. В данном случае строку RSS COMMAND

В команде в формате
виртуальная память - резидентная - аргументы
поле rss - второе, по которому будет идти суммирование
$ ps -eo vsz,rss,args | grep -v RSS|awk 'BEGIN{sum=0}{sum+=$2}END{print sum}'

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
wireless_etcnet_restart скрипт

Скрипт wireless_etcnet_restart предназначен для рестарта беспроводной wifi-сети на системах с etcnet на sysvinit и предназначен для ноутбуков у которых кнопка отключения/включения беспроводных интерфейсов использует hard blocked.

Скрипт завершает процессы wpa_*, уничтожает pid-файл, lock-файл и рестартует сервис /etc/init.d/network для поднятия уже настроенной беспроводной сети.

Листинг скрипта:
#!/bin/bash

WL_IFACE="$(grep -rH DRIVER /sys/class/net/*/device/ 2>/dev/null | \
grep $( lspci -k|grep -A2 Netw|tail -n 1 | sed 's/ //g'|cut -f2 -d : ) | cut -f5 -d / )"

WPA_PIDS="$(ps -eo pid,args|grep 'wpa_supplicant\|wpa_cli'|grep -v grep|awk '{print $1}'|sed 'N;s/\n/ /')"

# Kill wpa processes, *.pid file and lock file
[ -z "$WPA_PIDS" ] || kill -3 $WPA_PIDS
rm -f /var/run/wpa_*.pid
rm -f /var/run/wpa_supplicant/{$WL_IFACE}

/etc/init.d/network restart

Переменные:
WL_IFACE - парсит имя беспроводного интерфейса
WPA_PIDS - парсит идентификаторы процессов wpa_*

Суть работы скрипта:

Изначально все беспроводные интерфейсы не заблокированы, индикатор беспроводных устройств ноутбука горит и беспроводная сеть доступна
# rfkill list
0: hp-wifi: Wireless LAN
Soft blocked: no
Hard blocked: no
1: hp-bluetooth: Bluetooth
Soft blocked: no
Hard blocked: no
2: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
3: hci0: Bluetooth
Soft blocked: no
Hard blocked: no
# ping -c1 google.com
PING google.com (216.58.214.238) 56(84) bytes of data.
64 bytes from bud02s24-in-f238.1e100.net (216.58.214.238): icmp_req=1 ttl=53 time=89.6 ms

--- google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 89.696/89.696/89.696/0.000 ms

После выключения кнопкой ноутбука интерфейсы в hard blocked yes, а беспроводная сеть недоступна
# rfkill list
0: hp-wifi: Wireless LAN
Soft blocked: no
Hard blocked: yes
1: hp-bluetooth: Bluetooth
Soft blocked: no
Hard blocked: yes
2: phy0: Wireless LAN
Soft blocked: no
Hard blocked: yes
# ping -c1 google.com
ping: unknown host google.com

После включения кнопкой беспроводных интерфейсов, индикатор горит, интерфейсы разблокированы, но сеть недоступна
# rfkill list
0: hp-wifi: Wireless LAN
Soft blocked: no
Hard blocked: no
1: hp-bluetooth: Bluetooth
Soft blocked: no
Hard blocked: no
2: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
4: hci0: Bluetooth
Soft blocked: no
Hard blocked: no
# ping -c1 google.com
ping: unknown host google.com

по причине того, что потеряна ассоциация wlan драйвера:
# rpm -qi wpa_supplicant
Name        : wpa_supplicant
...
Description :
wpa_supplicant is an implementation of the WPA Supplicant component,
i.e., the part that runs in the client stations. It implements WPA key
negotiation with a WPA Authenticator and EAP authentication with
Authentication Server. In addition, it controls the roaming and IEEE
802.11 authentication/association of the wlan driver.

После старта скрипта беспроводная сеть будет восстановлена:
# sh ./wireless_etcnet_restart
Computing interface groups: ... 3 interfaces found
Processing /etc/net/vlantab: empty.
Stopping group 1/realphys (2 interfaces)
Stopping eth0: RTNETLINK answers: No such process
..OK
Stopping eth1: RTNETLINK answers: No such process
....OK
Stopping group 0/virtual (1 interfaces)
Stopping lo: ..OK
Computing interface groups: ... 3 interfaces found
Starting group 0/virtual (1 interfaces)
Starting lo: .....OK
Starting group 1/realphys (2 interfaces)
Starting eth0: ..Successfully initialized wpa_supplicant
.OK
Starting eth1: ...RTNETLINK answers: Network is unreachable
...OK
Processing /etc/net/vlantab: empty.
# ping -c1 google.com
PING google.com (216.58.214.206) 56(84) bytes of data.
64 bytes from bud02s23-in-f14.1e100.net (216.58.214.206): icmp_req=1 ttl=53 time=67.7 ms

--- google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 67.726/67.726/67.726/0.000 ms

Скрипт рекомендуется сделать исполняемым
# chmod u+x wireless_etcnet_restart

и положить в любое удобное место, например в каталог /usr/local/sbin.
Или собрать rpm-пакет (см. вики altlinux.org).
Проверьте чтобы путь /usr/local/sbin был в переменной PATH, чтобы не указывать полный путь к исполняемому файлу.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
man-pages: погружение в поиск

Необходимый пакет
# rpm -qf $(which makewhatis)
man-whatis-1.6g-alt3

Исполняемые файлы
# rpm -ql man-whatis|grep bin
/usr/bin/apropos
/usr/bin/whatis
/usr/sbin/makewhatis

# makewhatis -v
about to enter /usr/share/man
about to enter /usr/local/man
about to enter /usr/local/share/man

Логика работы makewhatis:
если база не создана, то создать её
иначе, если база существует, обновить базу
# cat /usr/lib/rpm/whatis.filetrigger
#!/bin/sh

if [ ! -f /var/cache/man/whatis ]; then
    # If database does not exists then build it
    su -l cacheman -s /bin/sh -c '/usr/sbin/makewhatis'
else
    # otherwise update it
    LC_ALL=C egrep -o '^/usr/(share|X11R6|lib/perl5|local|local/share)/man/([[:alpha:]_]+/)?man[[:alnum:]]+/[^[:blank:]]+$' |
    su -l cacheman -s /bin/sh -c '/usr/sbin/makewhatis -l -'
fi

Созданная база имеет такой вид
(выборка строк начинающихся с ch)
Имя файла - Номер секции man - Краткое описание
# grep ^ch /var/cache/man/whatis
chacl                (1)  - change the access control list of a file or directory
charmap              (5)  - character set description file
charsets             (7)  - character set standards and internationalization
chat                 (8)  - Automated conversational script with a modem
chattr               (1)  - change file attributes on a Linux file system
chcon                (1)  - change file security context
chcpu                (8)  - configure CPUs
chdir                (2)  - change working directory
chgat [curs_attr.3x] (3)  - curses character and window attribute control routines
chgrp                (1)  - change group ownership
chkconfig            (8)  - updates and queries runlevel information for system services
chmod                (1)  - change file mode bits
chmod                (2)  - change permissions of a file
choke [tc-choke]     (8)  - choose and keep scheduler
chown                (1)  - change file owner and group
chown                (2)  - change ownership of a file
chpasswd             (8)  - update passwords in batch mode
chroot               (1)  - run command or interactive shell with special root directory
chroot               (2)  - change root directory
chrt                 (1)  - manipulate the real-time attributes of a process
chvt                 (1)  - change foreground virtual terminal

Секция NAME страницы man имеет формат:
имя_файла - краткое описание
# man 1 chacl|col -b|sed -n '1,6p'
CHACL(1)      Access Control Lists       CHACL(1)



NAME
       chacl - change the access control list of a file or directory


Команда whatis ищет имя файла секции NAME содержащееся в базе и выводит всю строку из базы содержащую краткое описание, которое говорит, что для просмотра man-страницы нужно подавать команду 'man 1 chacl'
# whatis chacl
chacl                (1)  - change the access control list of a file or directory

Здесь команда whatis нашла, что для chmod существуют две man-страницы:
man 1 chmod и man 2 chmod
# whatis chmod
chmod                (1)  - change file mode bits
chmod                (2)  - change permissions of a file


Команда apropos ищет ключевое слово в кратком описании секции NAME
(регистр не имеет значения)
# apropos change|grep acl
chacl                (1)  - change the access control list of a file or directory

apropos может искать и ключевые фразы в секции NAME страниц man используя логическую операцию ИЛИ
# grep ^chmod /var/cache/man/whatis
chmod                (1)  - change file mode bits
chmod                (2)  - change permissions of a file

Здесь apropos нашёл, что ключевая фраза change file mode содержится в кратком описании man 1 chmod,
а фраза change permissions содержится в кратком описании man 2 chmod
# apropos 'change file mode\|change permissions'
chmod                (1)  - change file mode bits
chmod                (2)  - change permissions of a file
fchmod [chmod]       (2)  - change permissions of a file
fchmodat [chmod]     (2)  - change permissions of a file
# LANG=C man 1 chmod|col -b|sed -n '1,6p'
CHMOD(1) User Commands       CHMOD(1)



NAME
       chmod - change file mode bits
# LANG=C man 2 chmod|sed -n '1,6p'
CHMOD(2)                   Linux Programmer's Manual                  CHMOD(2)



NAME
       chmod, fchmod, fchmodat - change permissions of a file


Но apropos не может искать слово или фразу в русских страницах man
# man 1 chmod|col -b|sed -n '1,6p'
CHGRP(1)     General Commands Manual       CHGRP(1)



ИМЯ
       chmod - изменяет права доступа к файлу
# apropos права|head -n3
права: nothing appropriate


Команда man может искать фразу в тексте man-страниц.
Например фраза sticky bit содержится в man 1 chmod
# LANG=C man 1 chmod|col -b|grep 'sticky bit'
       tion  flag or sticky bit (t).  Instead of one or more of these letters,
       it will load more quickly when run; this is called the sticky bit.

Эта команда показала первые пять отсортированных в алфавитном порядке man-страниц в тексте которых содержится фраза sticky bit
# man -w -K 'sticky bit'|sort|head -n5
/usr/share/man/man1/ash.1.xz
/usr/share/man/man1/bsh.1.xz
/usr/share/man/man1/chmod.1.gz
/usr/share/man/man1/dash.1.xz
/usr/share/man/man1/getfacl.1.gz

Но на самом деле таких страниц man больше
# man -w -K 'sticky bit'|sort|wc -l
49

Используя более точную фразу (sticky bit это), вы можете значительно сократить количество найденных man-страниц, среди которых уже проще найти man-страницу объясняющую что такое sticky bit
# man -w -K 'sticky bit is'|sort
/usr/share/man/man1/ash.1.xz
/usr/share/man/man1/bsh.1.xz
/usr/share/man/man1/chmod.1.gz
/usr/share/man/man1/dash.1.xz
/usr/share/man/man7/mq_overview.7.xz

Однако учтите, что man не может переварить модель строки для поиска если в ней содержится опция
$ man -w -K 'mplayer -ao'
$

несмотря на то, что строка содержащая модель существует
# man mplayer|grep 'mplayer -ao'
       mplayer -ao pcm:file=%10%C:test.wav test.avi
       mplayer -ao pcm:file=%`expr length "$NAME"`%"$NAME" test.avi
« Последнее редактирование: 27.09.2016 21:03:39 от Speccyfighter »