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

Оффлайн Speccyfighter

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

Этот трюк может пригодиться в случае переустановки системы или установки на абсолютно аналогичную конфигурацию.

Готовим список установленных пакетов одной из команд:
# aptitude search ~i -F %p > inst-pkgs.txt
# rpm -qa --qf '%{name}\n' > inst-pkgs.txt

Вариант списка установленных пакетов:
Создать список установленных в системе пакетов исключая пакеты kernel*:
# aptitude search ~i~n\!kernel -F %p > inst-pkgs-notkernel.txt

Установка пакетов из списка:
# apt-get install $(< inst-pkgs-notkernel.txt)

Посмотреть эмуляцию переустановки всех пакетов установленных в системе из списка
(реально выполнено не будет):
# apt-get install --reinstall $(< inst-pkgs-notkernel.txt) -s

Перед установкой пакетов из репозитория, не забывайте про команду:
# apt-get update

Вероятно полезным будет сохранять список с именем файла в формате:
годмесяцчисло.имяфайла.txt


Дружественные howto по aptitude:
Aptitude, как искать пакеты | Блог "Познай Linux!"
http://gettoknowlinux.blogspot.com/2008/12/aptitude_26.html
Aptitude, форматирование вывода | Блог "Познай Linux!"
http://gettoknowlinux.blogspot.com/2008/12/aptitude_29.html
Aptitude, флаги состояния пакетов | Блог "Познай Linux!"
http://gettoknowlinux.blogspot.com/2008/12/aptitude.html
« Последнее редактирование: 11.08.2014 23:31:28 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Если apt-repo на установочном диске не оказалось
и вы не знаете как добавить репозиторий

скрипт добавляющий активный целевой репозиторий можно написать по-быстрому самому на скорую руку.


Простейший аналог 'apt-repo add'

Скрипт делает то же самое, что и команда 'apt-repo add репозиторий',
проверяя перед добавлением репозитория, существует ли цель на репозиторий или нет.
#!/bin/bash
#
# By Speccyfighter
#
# Addition of the target repository
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.

grep -rl ^rpm /etc/apt/ 1> /dev/null && [ -z "$DESTREPO" ] || \
> cat /etc/apt/sources.list.d/alt.list | grep http | sed 's/^#//' >> /etc/apt/sources.list


Если целевой репозиторий существует, т.е. раскомментирован
# cat /etc/apt/sources.list
# ftp.altlinux.org (ALT Linux, Moscow)

# ALT Linux Platform 7
#rpm [p7] ftp://ftp.altlinux.org/pub/distributions/ALTLinux/p7/branch i586 classic
#rpm [p7] ftp://ftp.altlinux.org/pub/distributions/ALTLinux/p7/branch noarch classic

rpm [t7]  http://ftp.altlinux.org/pub/distributions/ALTLinux/t7/branch i586 classic
rpm [t7]  http://ftp.altlinux.org/pub/distributions/ALTLinux/t7/branch noarch classic

#rpm [p7] rsync://ftp.altlinux.org/ALTLinux/p7/branch i586 classic
#rpm [p7] rsync://ftp.altlinux.org/ALTLinux/p7/branch noarch classic


#rpm ftp://ftp.altlinux.org/pub/distributions/archive/sisyphus/task/125671/ i586 classic
#rpm ftp://ftp.altlinux.org/pub/distributions/archive/sisyphus/task/125671/ noarch classic


то команда
# grep -rl ^rpm /etc/apt/ 1> /dev/null && [ -z "$DESTREPO" ] || \
> cat /etc/apt/sources.list.d/alt.list | grep http | sed 's/^#//' >> /etc/apt/sources.list

не добавляет целевой репозиторий
# cat /etc/apt/sources.list
# ftp.altlinux.org (ALT Linux, Moscow)

# ALT Linux Platform 7
#rpm [p7] ftp://ftp.altlinux.org/pub/distributions/ALTLinux/p7/branch i586 classic
#rpm [p7] ftp://ftp.altlinux.org/pub/distributions/ALTLinux/p7/branch noarch classic

rpm [t7]  http://ftp.altlinux.org/pub/distributions/ALTLinux/t7/branch i586 classic
rpm [t7]  http://ftp.altlinux.org/pub/distributions/ALTLinux/t7/branch noarch classic

#rpm [p7] rsync://ftp.altlinux.org/ALTLinux/p7/branch i586 classic
#rpm [p7] rsync://ftp.altlinux.org/ALTLinux/p7/branch noarch classic


#rpm ftp://ftp.altlinux.org/pub/distributions/archive/sisyphus/task/125671/ i586 classic
#rpm ftp://ftp.altlinux.org/pub/distributions/archive/sisyphus/task/125671/ noarch classic


Если целевого репозитория нет
# mcedit /etc/apt/sources.list
# cat /etc/apt/sources.list
# ftp.altlinux.org (ALT Linux, Moscow)

# ALT Linux Platform 7
#rpm [p7] ftp://ftp.altlinux.org/pub/distributions/ALTLinux/p7/branch i586 classic
#rpm [p7] ftp://ftp.altlinux.org/pub/distributions/ALTLinux/p7/branch noarch classic

#rpm [t7]  http://ftp.altlinux.org/pub/distributions/ALTLinux/t7/branch i586 classic
#rpm [t7]  http://ftp.altlinux.org/pub/distributions/ALTLinux/t7/branch noarch classic

#rpm [p7] rsync://ftp.altlinux.org/ALTLinux/p7/branch i586 classic
#rpm [p7] rsync://ftp.altlinux.org/ALTLinux/p7/branch noarch classic


#rpm ftp://ftp.altlinux.org/pub/distributions/archive/sisyphus/task/125671/ i586 classic
#rpm ftp://ftp.altlinux.org/pub/distributions/archive/sisyphus/task/125671/ noarch classic


то команда
# grep -rl ^rpm /etc/apt/ 1> /dev/null && [ -z "$DESTREPO" ] || \
cat /etc/apt/sources.list.d/alt.list | grep http | sed 's/^#//' >> /etc/apt/sources.list

добавит целевой репозиторий
# cat /etc/apt/sources.list
# ftp.altlinux.org (ALT Linux, Moscow)

# ALT Linux Platform 7
#rpm [p7] ftp://ftp.altlinux.org/pub/distributions/ALTLinux/p7/branch i586 classic
#rpm [p7] ftp://ftp.altlinux.org/pub/distributions/ALTLinux/p7/branch noarch classic

#rpm [t7]  http://ftp.altlinux.org/pub/distributions/ALTLinux/t7/branch i586 classic
#rpm [t7]  http://ftp.altlinux.org/pub/distributions/ALTLinux/t7/branch noarch classic

#rpm [p7] rsync://ftp.altlinux.org/ALTLinux/p7/branch i586 classic
#rpm [p7] rsync://ftp.altlinux.org/ALTLinux/p7/branch noarch classic


#rpm ftp://ftp.altlinux.org/pub/distributions/archive/sisyphus/task/125671/ i586 classic
#rpm ftp://ftp.altlinux.org/pub/distributions/archive/sisyphus/task/125671/ noarch classic


rpm [t7] http://ftp.altlinux.org/pub/distributions/ALTLinux/t7/branch i586 classic
rpm [t7] http://ftp.altlinux.org/pub/distributions/ALTLinux/t7/branch noarch classic

Положите скрипт в каталог /usr/local/sbin/
# echo 'grep -rl ^rpm /etc/apt/ 1> /dev/null && [ -z "$DESTREPO" ] || \
cat /etc/apt/sources.list.d/alt.list | grep http | sed 's/^#//' >> /etc/apt/sources.list' > \
/usr/local/sbin/destrepoadd

и дайте ему права на исполнение
# chmod 744 /usr/local/sbin/destrepoadd

Недостаток скрипта в том, что он жёстко завязан на сервер ftp.altlinux.org
Но вместе с тем он и прост.
Вопрос, что же проще, добавить скрипт или самому прописать руками репозитории, конечно бесконечно философский.


Простейший аналог 'apt-repo list'

В свою очередь, команда
grep -rl ^rpm /etc/apt/ | xargs -r cat | grep ^rpm
выполненная в терминале с правами пользователя, заменит команду 'apt-repo list'

Если входные данные есть, то команда выполняется.
И соответственно наоборот:

Целевой репозиторий в наличии
$ cat /etc/apt/sources.list|grep ^rpm
rpm [t7]  http://ftp.altlinux.org/pub/distributions/ALTLinux/t7/branch i586 classic
rpm [t7]  http://ftp.altlinux.org/pub/distributions/ALTLinux/t7/branch noarch classic

Закомментируем его
# mcedit /etc/apt/sources.list
$ cat /etc/apt/sources.list|grep ^rpm
$

Команда не нашла ни одного репозитория
$ grep -rl ^rpm /etc/apt/ | xargs -r cat | grep ^rpm
$

Раскомментируем цели на репозиторий
# mcedit /etc/apt/sources.list
$ cat /etc/apt/sources.list|grep ^rpm
rpm [t7]  http://ftp.altlinux.org/pub/distributions/ALTLinux/t7/branch i586 classic
rpm [t7]  http://ftp.altlinux.org/pub/distributions/ALTLinux/t7/branch noarch classic

Теперь команда находит цели
$ grep -rl ^rpm /etc/apt/ | xargs -r cat | grep ^rpm
rpm [t7]  http://ftp.altlinux.org/pub/distributions/ALTLinux/t7/branch i586 classic
rpm [t7]  http://ftp.altlinux.org/pub/distributions/ALTLinux/t7/branch noarch classic
Т.е при наличии целей на репозиторий, они будут выведены в терминал.


Простейший аналог 'apt-repo rm all'

В свою очередь эту команду легко превратить в аналог команды 'apt-repo rm all' :
grep -rl ^rpm /etc/apt/ | xargs -r sed -i 's/^rpm/#rpm/'

Целевые репозитории есть и дублируются в двух файлах
# grep -rl ^rpm /etc/apt/
/etc/apt/sources.list.d/alt.list
/etc/apt/sources.list

Выполняем аналог 'apt-repo rm all'
# grep -rl ^rpm /etc/apt/ | xargs -r sed -i 's/^rpm/#rpm/'

Все цели закомментированы
# grep -rl ^rpm /etc/apt/
#


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

« Последнее редактирование: 17.08.2014 01:19:14 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Управление процессами в UNIX-подобных системах в вопросах и ответах


Подскажите, пожалуйста, как это сделать правильно?
1. Где нужно посмотреть процессы?

Выше уже сказали про приложения для GUI


Управление процессами в UNIX-подобных системах в псевдографических программах

Для терминала есть программа htop
Горячие клавиши в программе:
h - страница помощи
h в странице помощи или Esc - выход из страницы помощи
Пробел - выделение процесса
F9 - вызов списка сигналов посылаемых процессам. Вверх-вниз выбор сигнала в списке.
Enter - выполнение, послать выбранный сигнал выделенным процессам.
Esc - откат назад
F3 - поиск процесса по имени.
F10 - выход из программы htop (одноимённый пакет)

Также top:
$ top -d 5 -u username
Основные горячие клавиши:
h - помощь; ещё раз h на странице помощи - следующая страница помощи
Esc - выход из помощи
u - отображение процессов выбираемого набором с клавиатуры пользователя
к - послать процессу сигнал:
- сначала спросит PID процесса, потом, после Enter, номер сигнала - ввести с клавиатуры
q - выход из программы

Поиск и отображение процессов прямой командой в shell:

Поиск процессов firefox или xulrunner, их PID (процесс идентификатор) и имени пользователя, владельца процессов
$ ps -eo pid,user,args|grep 'firefox\|xulrunner'
 2083 user   firefox
 2087 user   /usr/bin/xulrunner
 2317 user   /usr/lib/xulrunner/plugin-container /usr/lib/browser-plugins/libflashplayer.so -appdir /usr/lib/
Каждый процесс имеет свой PID - номер.
В приведённой команде, пайп '|', это логический оператор ИЛИ. В данном варианте использования с grep, пайп должен предваряться бэкслэшем - '\'
Бэкслэш не требуется если используется ключ '-E', который говорит, что маска в grep, это регулярное выражение:
grep --help
  -E, --extended-regexp     ШАБЛОН - расширенное регулярное выражение (ERE)

Например:
$ ps -eo pid,args|grep -E 'firefox|xulrunner'

Подскажите, пожалуйста, как это сделать правильно?
2. Как удалить процессы?

Выше уже сказал как сделать это в htop
Завершение процессов в shell из командной строки:

Послать процессам с PID 2083, 2087 и 2317 сигнал SIGTERM - завершить процессы
(В вышеприведённом примере, процессы с PID 2083 2087 2317 соответствуют процессам firefox, xulrunner и xulrunner/plugin-container):
kill -15 2083 2087 2317

Если процессы не завершились, послать процессам с PID 2083, 2087 и 2317 сигнал SIGKILL - убить процессы
kill -9 2083 2087 2317

Но можно начать с мягкого завершения процессов:
Процессам
$ ps -eo pid,user,args|grep 'sar'
 2562 user   sar -m CPU -u 1
 2564 user   sar -m CPU -u 1
послать сигнал 3 - SIGQUIT (quit, он везде quit):
$ kill -3 2562 2564


Предупреждение!!!
Без указания полного пути к бинарнику kill из пакета coreutils, будет использоваться встроенная в оболочку команда.
С полным указанием пути, т.е. /bin/kill, вы получите полнофункциональную работу всех ключей указанных в 'man kill'.

Спасибо подсказке Дмитрия Левина.

Подробности на предмет
$ enable -a | grep kill
enable kill
смотри в
$ man bash|less -p ' enable '


Подскажите, пожалуйста, как это сделать правильно?
3. ... SIGTERM ... что это такое?
4. Что такое SIGKILL ... ?

Полезные ссылки по теме:

https://ru.wikipedia.org/wiki/SIGTERM
https://ru.wikipedia.org/wiki/SIGKILL

Процессы, это одно из фундаментальных понятий в UNIX-системах:
http://www.altlinux.org/Books:Insideout
http://heap.altlinux.org/alt-docs/compactbook/linux_processes.kirill/index.html

Дополнительное чтиво:
AdminBook — OpenWiki
http://wiki.opennet.ru/AdminBook

В.А.Костромин, "Linux для пользователя" серия "Самоучитель":
Глава 8. Основы администрирования системы | Linux по-русски: книги, статьи, ссылки по ОС GNU/Linux
http://rus-linux.net/book1.php?name=book1/gl-08/gl_08_01.html
8.4. Управление процессами | Linux по-русски: книги, статьи, ссылки по ОС GNU/Linux
http://rus-linux.net/book1.php?name=book1/gl-08/gl_08_04.html

Для профессионалов и опытных пользователей:
Установка приоритетов для процессов: nice, renice
Linux по-русски: книги, статьи, ссылки по ОС GNU/Linux
http://rus-linux.net/MyLDP/BOOKS/MDK-10/process-priority.html
Изучаем Linux, 101: Приоритеты исполнения процесса
http://www.ibm.com/developerworks/ru/library/l-lpic1-v3-103-6/
Изучаем Linux, 101: Cоздание, отслеживание и уничтожение процессов
http://www.ibm.com/developerworks/ru/library/l-lpic1-v3-103-5/index.html


Номера сигналов и их названия - таблица:
$ kill -l
$ man kill
$ info coreutils 'kill invocation'

Было бы здорово получить пошаговую инструкцию. :-)

Можно, но всё равно оно будет неполным.
Дефолтом используемый  kill, без указания полного пути, т.е. /bin/kill, это встроенная в оболочку команда, которая по функционалу чуть отстаёт от /bin/kill:
$ kill --list
bash: kill: -list: недопустимая спецификация сигнала
$ kill -t
bash: kill: t: недопустимая спецификация сигнала
$ kill --table
bash: kill: -table: недопустимая спецификация сигнала
$ kill --help
bash: kill: -help: недопустимая спецификация сигнала
$ kill --version
bash: kill: -version: недопустимая спецификация сигнала

Тем не менее, основное, остро необходимое, вероятно упомянуто...
« Последнее редактирование: 27.08.2014 01:36:05 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Спасибо за совет. Посмотрел в синаптике. Он [quick-usb-formatter] под КДЕ и для xfce тянет приличное количество утилит кде-шных.

Тогда для форматирования девственно чистой флешки можно по-прежнему использовать gparted - ровно 19 кликов мыши или тачпада, начиная от создания таблицы разделов, - от щелчка по кнопке меню и до закрытия окна gparted.


Или полное перефоматирование usb-flash в shell
(всё содержимое флешки будет необратимо уничтожено):

Уничтожение таблицы разделов
# dd if=/dev/zero of=/dev/sdb bs=1M count=1
где /dev/sdb - usb-flash

Ошибка в имени устройства может привести к необратимой потере информации!

Создание разделов
# [c]fdisk /dev/sdb
Идентификаторы файловых систем [hex]:
07 - ntfs
0B - vfat (fat32)
83 - Linux

Форматирование раздела в разные файловые системы
# NTFS
# mkfs.ntfs -L "myflash" /dev/sdb1

# FAT32
# mkfs.vfat -n "myflash" /dev/sdb1

# ext2[3|4]
# mkfs.ext2[3|4] -L "myflash" /dev/sdb1

Для отображения только съёмных устройств в p7/t7, можно точечно вытащить из Сизифа:
ftp://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus/files/noarch/RPMS/lsmount-1.0-alt3.noarch.rpm
Если при старте будет ругаться на Text::Table, то
# apt-get install perl-Text-Table
Скрипт lsmount отображает все только съёмные устройства и состояние их файловых систем - смонтировано/размонтировано:
DVD-RW с матрицей, usb-flash, usb-hdd, кардридеры с картами, сотовые телефоны с картами в режиме накопителя.

Оффлайн МИНЗДРАВ

  • Странник_
  • *
  • Сообщений: 3 045
  • ALWK8 х64 Branch sysd & server-light_1.9.3sysV noX
    • http://yx-kak.ru/linux.htm
d if=/dev/zero of=/dev/sdb bs=1M count=1
Долго, оно обычно длится?

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 19 903
    • Домашняя страница
    • Email
Запись одного мегабайта? Ну полсекунды.
Андрей Черепанов (cas@)

Оффлайн Speccyfighter

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



Доступ к яндекс-диску из файлового менеджера Thunar по протоколу davs

Введите в адресной строке файлового менеджера Thunar адрес и нажмите клавишу Enter:
davs://YOU@webdav.yandex.ru
где YOU - ваш логин на Яндексе.

Вариант для адресной строки
davs://webdav.yandex.ru
с запросом логина и пароля во всплывающем окне.

Во всплывающем окне последует запрос пароля для доступа к яндекс-диску с вариантами сохранения пароля на выбор:
- Забыть пароль немедленно
- Запомнить пароль до выхода из сеанса
- Запомнить навсегда


Используя мышь, тачпад или клавиши Tab/Клавиши управления курсором/Enter, выберите режим сохранения пароля и нажмите клавишу Подключиться[Отменить] всплывающего окна.

Произойдет подключение к яндекс-диску, а в боковой панели Thunar в группе Сеть отобразится подключение к яндекс-диску в виде
/ на webdav.yandex.ru

Наведя курсор на это подключение и вызвав правой клавишей мыши или тачпада всплывающее меню, вы можете выбрать опции:
- Создать закладку на это подключение в разделе Закладки, Боковой панели файлового менеджера Thunar для быстрого доступа к ресурсу
- Отключить соединение

Работа с сетевым диском яндекс в Thunar, как и всегда в файловом менеджере.

Требуемый пакет для поддержки davs
$ rpm -qi gvfs|tail -n 3
This package contains the gvfs server, libgvfscommon library, gio
modules and backends for gvfs: archive, burn, computer, dav, ftp,
gphoto2, http, localtest, network, sftp and trash.

Это краткое руководство своим появлением обязано сообщению mvk о поддержке файловым менеджером Thunar протокола davs.


Доступ к яндекс-диску в TDE через файловый менеджер krusader
по протоколу webdavs

Файловый менеджер krusader поддерживает протоколы webdav и webdavs.
Введите в Панели адреса krusader - после ввода нажмите Enter:

для запроса логин-пароль
webdavs://webdav.yandex.ru

для запроса только пароля
webdavs://ваш_логин@webdav.yandex.ru

Для быстрого подключения, адрес можете добавить в закладки krusader.
После завершения работы krusader, соединение разрывается.
После повторного старта krusader, для доступа к яндекс-диску, вам нужно снова будет ввести:
адрес-логин-пароль

Для работы krusader через протокол webdavs, для доступа к яндекс-диску, дополнительные пакеты не требуются:
$ aptitude search ~ngvfs$ ~ndavfs2|cut -f 1,4 -d ' '
p bash-completion-gvfs
p davfs2
p fuse-gvfs
p gvfs
(p - состояние пакета: не установлен)
« Последнее редактирование: 23.03.2015 09:35:36 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Доступ к яндекс-диску из shell

Установка пакета
# apt-get install davfs2

Добавить пользователя userlogin в группу davfs2
# usermod -a -G davfs2 userlogin
Где:
userlogin  -  ваш логин (далее то же если не указано явно)

Добавить строку в /etc/fstab с правилом монтирования в каталог пользователя
https://webdav.yandex.ru /home/userlogin/mnt/dav davfs user,noauto,uid=userlogin,file_mode=600,dir_mode=700 0 1

Создать точку монтирования
$ mkdir -p /home/userlogin/mnt/dav
Где:
userlogin  - в этой команде и в fstab, это имя вашего домашнего каталога
(по умолчанию, имя домашнего каталога, соответствует логину под которым вы входите в систему)

Создать правило доступа к яндекс
$ echo "https://webdav.yandex.ru yandex_login yandex_password" >> ~/.davfs2/secrets
Где:
yandex_login  -  логин на яндексе
yandex_password  -  пароль на яндексе

Если вы закомментируете эту строку в файле ~/.davfs2/secrets, логин и пароль к яндекс, будут запрашиваться при каждом монтировании.
Вы можете совсем не создавать файл secrets, результат будет тем же - логин/пароль к яндекс будут запрашиваться при каждом монтировании.
Если в строке правила пароль будет отсутствовать, при монтировании яндекс-диска запрашиваться будет только пароль.

Монтирование
$ mount /home/userlogin/mnt/dav

Размонтирование
$ umount /home/userlogin/mnt/dav

В обоих случаях, userlogin, это имя вашего домашнего каталога.
Соответственно ниже и для алиасов.

Для упрощения ввода команд монтирования/размонтирования, можете в файле
~/.bashrc
создать алиасы:

Монтирования
alias mdav='mount /home/userlogin/mnt/dav'

Размонтирования
alias umdav='umount /home/userlogin/mnt/dav'

Подробности:
https://wiki.archlinux.org/index.php/Davfs
http://www.gentoo-wiki.info/HOWTO_Webdav_Mount


davfs2: вопросы безопасности

В пакете
$ rpm -qi mount|grep '^Name\|^Ver'
Name        : mount                        Relocations: (not relocatable)
Version     : 2.22.1                            Vendor: ALT Linux Team

файл /etc/mtab является символической ссылкой
$ rpm -qvl mount|grep mtab
lrwxrwxrwx    1 root    root               12 апр  5  2013 /etc/mtab -> /proc/mounts

Если в системе это так и есть
$ ls -l /etc/mtab
lrwxrwxrwx 1 root root 12 дек  3 09:29 /etc/mtab -> /proc/mounts

то при установленом в fstab параметре user
$ grep dav /etc/fstab
https://webdav.yandex.ru /home/userhome/mnt/dav davfs user,noauto,uid=userlogin,file_mode=600,dir_mode=700 0 1
Где:
userlogin - ваш логин
userhome - ваш домашний каталог

после монтирования davfs
$ mount /home/userhome/mnt/dav/
Please enter the username to authenticate with server
...
$ grep dav /etc/mtab
https://webdav.yandex.ru /home/userhome/mnt/dav fuse rw,nosuid,nodev,noexec,relatime,user_id=500,group_id=500,allow_other,max_read=16384 0 0

монтировавший пользователь не сможет размонтировать файловую систему
$ umount /home/userhome/mnt/dav/
umount: /home/userhome/mnt/dav: umount failed: Операция не позволена

В этом случае, параметр user, чтобы пользователь мог размонтировать, следует заменить на параметр users.
Но здесь есть деталь:
$ man mount.davfs|sed -n '145,148p'
              users  Like  user,  but  any user is allowed to unmount the file system, not only the
                     mounting user. This is generally not recomended.  On systems with no mtab file
                     with  the  user option unmounting by the mounting user will fail. In this case
                     the users may be an appropriate work around.

Вольный перевод:
users    как опция user, но любой пользователь может размонтировать файловую систему, не только монтировавший пользователь. Это настоятельно не рекомендуется. На системах без mtab файла с опцией user, размонтирование монтировавшим пользователем невозможно. В этом случае users поможет соответственно обойти эту ситуацию.

При опции user: только монтировавший пользователь имеет право размонтировать davfs
(Опция user: имя монтирующего пользователя записывается в mtab, так что он может размонтировать файловую систему снова; опция имеет смысл когда она установлена в fstab, - см. man mount.davfs)

Чтобы отказа при размонтировании с параметром user в fstab не произошло, и размонтировать мог только монтировавший пользователь, символическую ссылку /etc/mtab можно заменить на файл /etc/mtab
$ ls -l /etc/mtab
-rw-r--r-- 1 root root 265 дек  3 09:28 /etc/mtab

а для davfs, в файле /etc/fstab, применить параметр user, а не users

В этом случае, после монтирования davfs
$ mount /home/userhome/mnt/dav/
Please enter the username to authenticate with server
...
$ grep dav /etc/mtab
https://webdav.yandex.ru /home/userhome/mnt/dav davfs rw,nosuid,noexec,nodev,_netdev,uid=500,user=userlogin 0 0

пользователь сможет размонтировать davfs, и только он, но больше никто кроме root
$ umount /home/userhome/mnt/dav/
/sbin/umount.davfs: waiting while mount.davfs (pid 11028) synchronizes the cache .. OK


Где на форуме ещё почитать про яндекс диск?

1. https://forum.altlinux.org/index.php?topic=30127.0
2. Коллизии /etc/mtab, user и users:
https://forum.altlinux.org/index.php?topic=35971.msg271923#msg271923
https://forum.altlinux.org/index.php?topic=35971.msg271951#msg271951
« Последнее редактирование: 04.07.2016 17:43:31 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Skull, что я делаю не так?

[root@comp-celeron-cpu-aba135 ~]# control pam_mktemp disabled
bash: control: команда не найдена
[root@comp-celeron-cpu-aba135 ~]#

"Что делаю не так?", - то же, что и в MS DOS от Майкрософт:

$ su -
# echo $HOME
/root
# echo $PATH
/root/bin:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin
# which control
/usr/sbin/control
# control
at              public          (public restricted atdaemon)
consolehelper   public          (public wheelonly restricted)
crontab         public          (public restricted)
...
# logout


$ su
# echo $HOME
/home/user
# echo $PATH
/home/user/bin:/bin:/usr/bin:/usr/X11R6/bin:/usr/games
# which control
which: no control in (/home/user/bin:/bin:/usr/bin:/usr/X11R6/bin:/usr/games)
# control
bash: control: команда не найдена
# exit

Разница между 'su -' и 'su' в окружении пользователя.
Даже в документации об этом написано:
http://docs.altlinux.org/archive/p7/kdesktop/#superuser
Но  кто из линуксоидов её читает?..

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Трюки UNIX
Перенос содержимого каталога /usr на другой накопитель

Вариант ниже рассматривает перенос содержимого каталога /usr на карту miniSDHC в условиях жесточайшей нехватки дискового пространства.
Пропустив эмоции, об аргументах можно почитать здесь:
http://forum.altlinux.org/index.php/topic,33151.msg236597.html
http://forum.altlinux.org/index.php/topic,33146.msg236707.html#msg236707

С небольшими изменениями в действиях, вы можете выполнить перенос на любой накопитель работающий в режиме rw - Read/Write, - чтение/запись

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

В каких случаях может применяться этот трюк?
Первый вариант, это нехватка дискового пространства на SSD-накопителе малой ёмкости, о котором упомянуто по ссылкам выше.
Второй вариант, это старый компьютер с винчестером малой ёмкости. В этом случае вы получаете ещё одно преимущество:
- при IDE-винчестерах расположенных на разных каналах, вы получите не программное, а аппаратное распараллеливание при чтении данных с носителя - своеобразный прирост скорости. Этот прирост вы получите даже при двух каналах и трёх винчестерах, поскольку на перемещение головок тоже затрачивается время при интенсивном чтении/записи данных из разных каталогов, данные в которых могут быть расположены в разных зонах HDD.

Все нижеописанные действия, чтобы привести команды с выбросами в терминал, выполнялись на установленной на винчестер системе с образа:
http://ftp.altlinux.org/pub/distributions/ALTLinux/p7/images/starterkits/altlinux-p7-xfce-20140312-i586.iso
с дополнительно установленными пакетами:
# apt-get install thunar-shares-plugin thunar-archive-plugin \
mozilla-plugin-adobe-flash firefox-adblock_plus firefox-flashblock smplayer leafpad bc

Все нижеописанные действия помеченные маркером ***, потенциально опасны для ваших данных! Ошибка может привести к необратимой потере данных. Вы должны понимать какие команды вы выполняете и к каким результатам они приведут.


В данном случае, для будущего содержимого каталога /usr, используется кардридер с miniSDHC-картой объёмом
# fdisk -l /dev/sdb|head -n 4

Disk /dev/sdb: 1973 MB, 1973420032 bytes, 3854336 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes

*** Уничтожаем содержимое карты
# dd if=/dev/zero of=/dev/sdb bs=1M count=1
1+0 записей получено
1+0 записей отправлено
 скопировано 1048576 байт (1,0 MB), 0,617429 c, 1,7 MB/c

Убедитесь, что файловая система карты не смонтирована
# mount|grep sdb1
#
Если это не так, размонтируйте её.

*** Создаём раздел для содержимого будущего /usr
# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.22.1).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x4596bb31.

Команда (m для справки):
Команда (m для справки): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Номер раздела (1-4, по умолчанию 1):
Используется значение по умолчанию 1
Первый sector (2048-3854335, по умолчанию 2048):
Используется значение по умолчанию 2048
Last sector, +sectors or +size{K,M,G} (2048-3854335, по умолчанию 3854335):
Используется значение по умолчанию 3854335
Partition 1 of type Linux and of size 1,9 GiB is set

Команда (m для справки): t
Выбранный раздел 1
Шестнадцатеричный код (введите L для получения списка кодов): 83

Команда (m для справки): w
Таблица разделов была изменена!

Вызывается ioctl() для перечитывания таблицы разделов.
Синхронизируются диски.

*** Создаём файловую систему ext4 на этом разделе
# mkfs.ext4 -L CardReader /dev/sdb1
mke2fs 1.42.7 (21-Jan-2013)
Filesystem label=CardReader
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
120480 inodes, 481536 blocks
24076 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=494927872
15 block groups
32768 blocks per group, 32768 fragments per group
8032 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912

Allocating group tables: done                           
Writing inode tables: done                           
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

Файловая система расположенная на разделе карты не смонтирована
# mount|grep sdb1
#

Смонтируем её
# udisksctl mount -b /dev/sdb1
Mounted /dev/sdb1 at /run/media/root/CardReader.

Синхронизируем на карту всё содержимое каталога /usr
# rsync -av /usr/ /run/media/root/CardReader/
...
share/zsh/scripts/
share/zsh/scripts/newuser
src/
src/debug/

sent 1470547800 bytes  received 902919 bytes  -140532.99 bytes/sec
total size is 1467082087  speedup is 1.00

Аналогичным образом вы можете сделать резервную копию каталога /usr на любом другом носителе.


Теперь для карты
# blkid|grep sdb1
/dev/sdb1: LABEL="CardReader" UUID="1f1f50e5-dbee-4401-bc93-aee79d23f46d" TYPE="ext4"
на которой расположена файловая система, которая должна монтироваться на старте системы

вызовем на редактирование файл /etc/fstab
# mcedit /etc/fstab

и добавим в этот файл строку с параметрами монтирования
# cat /etc/fstab | grep usr
UUID=1f1f50e5-dbee-4401-bc93-aee79d23f46d /usr ext4 relatime 1 2
Здесь указан UUID устройства, но вы можете использовать и абсолютное имя устройства - например /dev/sdb1 как в используемом примере. Соответствие UUID и имени устройства, выше показала команда blkid.

Выполнив всю необходимую подготовку, закройте все приложения кроме терминала и подайте команду для перехода в 'runlevel 1' - singleuser mode, - однопользовательский режим
# init 1
Это необходимо для того, чтобы свести количество процессов запущенных в системе к минимуму.

*** Введя пароль root в приглашении и получив доступ к терминалу, выполните команду, которая уничтожит всё содержимое каталога /usr расположенного на HDD на котором установлена система, освободив дисковое пространство, каталог /usr которой переносится на другой носитель
# rm -rf /usr/*

Подайте команду для перезагрузки системы (кардридер с картой на которой находится содержимое /usr должна быть вставлена в usb-порт)
# reboot

После загрузки системы, можно убедиться, что файловая система на разделе карты, с содержимым каталога /usr, смонтирована
$ mount|grep -E 'sdb1|on / '
/dev/sda2 on / type ext4 (rw,relatime,data=ordered)
/dev/sdb1 on /usr type ext4 (rw,relatime,data=ordered)

И убедиться, что для этой цели действительно использовался кардридер с картой
$ ll /dev/disk/by-id/ | grep sd[ab]1
lrwxrwxrwx 1 root root  10 сен 10 23:26 ata-SAMSUNG_HM160HC_S1QAJD0Q900848-part1 -> ../../sda1
lrwxrwxrwx 1 root root  10 сен 10 23:26 wwn-0x50f0000001900848-part1 -> ../../sda1
lrwxrwxrwx 1 root root  10 сен 10 23:26 usb-Multiple_Card_Reader_058F63666433-0:0-part1 -> ../../sdb1

В реальности, объём содержимого каталога /usr может быть в 2-3 раза больше.
Истинный объём может варьироваться в довольно широких пределах, которые зависят от ваших предпочтений и количества установленных пакетов.
Приведённый объём занятого пространства справедлив для условий описанных выше
$ df -m /dev/sdb1
Файловая система 1M-blocks Использовано Доступно Использовано% Cмонтировано в
/dev/sdb1             1820         1539      172           90% /usr


Возврат содержимого /usr с другого накопителя в /usr на накопитель с корневой fs

В дефолтной ситуации в системе с systemd это невозможно из-за невозможности размонтировать /usr
Подробности с эмоциями здесь:
http://forum.altlinux.org/index.php/topic,33146.msg236806.html#msg236806

Для этой цели вы должны использовать live-системы rescue/live-cd или другую установленную на hdd Linux-систему.


В заключение остаётся добавить, что все выбросы в терминал от первого до последнего, сделаны на реальной системе и все действия выполнялись вживую.
« Последнее редактирование: 18.09.2014 23:50:13 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Потоковое видео в консоли
Трансляция и воспроизведение в локальной сети


Берём фильм
Цитировать
mediainfo /path/film

Video
ID                                       : 0
Format                                   : MPEG-4 Visual
Format profile                           : Advanced Simple@L5
Format settings, BVOP                    : 1
Format settings, QPel                    : No
Format settings, GMC                     : No warppoints
Format settings, Matrix                  : Custom
Codec ID                                 : XVID
Codec ID/Hint                            : XviD
Duration                                 : 2h 14mn
Bit rate                                 : 1 070 Kbps
Width                                    : 624 pixels
Height                                   : 256 pixels

Display aspect ratio                     : 2.40:1
Frame rate                               : 23.976 fps
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Compression mode                         : Lossy
Bits/(Pixel*Frame)                       : 0.279
Stream size                              : 1.00 GiB (73%)
Writing library                          : XviD 1.2.0SMP (UTC 2006-01-08)

Транслируем поток
(сетевой адрес транслирующего хоста; не забываем выставлять оригинальные width/height)
$ cvlc -I dummy file:////mnt/где-то/kino.avi \
--sout '#transcode{vcodec=mp4v,vb=400,width=624,height=256,fps=23.976}:standard{access=http,mux=ogg,dst=192.168.x.y:8081}'

Пользователь в группе video у принимающего хоста
$ cat /etc/group|grep video
video:x:481:user

Разрешение в Х-сах и терминалах
Цитировать
$ xrandr
Screen 0: minimum 320 x 200, current 1024 x 768, maximum 32767 x 32767

Воспроизведение потокового видео (ip-адрес транслирующего хоста)
mplayer -softvol -nocache -vo fbdev2 http://192.168.x.y:8081 -zoom -xy 1024 -fs
1/2 - контрастность
3/4 - яркость
9/0 - громкость

Отображаемый размер видео
$ cat vout.txt |grep VO
VO: [fbdev2] 1024x420 => 1024x420 BGRA  [fs] [zoom]

Если пропорции исказились, поиграться с параметрами mplayer
-x X -y Y -aspect 2.35[4:3|16:9]

Реальное разрешение
$ mediainfo http://192.168.x.y:8081|grep pixels
Width                                    : 624 pixels
Height                                   : 256 pixels

Выключение гашения консоли
$ setterm -blank 0

mvk

  • Гость
Вот сделал такую штуку для ленивых ;-D Думаю что еще туда добавить...

my_info.sh:
#!/bin/bash
(lsb_release -d; uname -a; lspci | grep VGA; glxinfo | grep "OpenGL version"; xrandr -q | grep '\*'; sed 1d) 2>/dev/null | xmessage -file - -center
« Последнее редактирование: 03.10.2014 16:44:47 от mvk »

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 19 903
    • Домашняя страница
    • Email
Вот сделал такую штуку для ленивых ;-D Думаю что еще туда добавить...

my_info.sh:
#!/bin/bash
(lsb_release -d; uname -a; lspci | grep VGA; glxinfo | grep "OpenGL version"; xrandr -q | grep '\*'; sed 1d) 2>/dev/null | xmessage -file - -center
sed 1d лишний — на нём зависает.
Андрей Черепанов (cas@)

mvk

  • Гость
#!/bin/bash
(lsb_release -d; uname -a; lspci | grep VGA; glxinfo | grep "OpenGL version"; xrandr -q | grep '\*';) | xmessage -file - -center

Немного поправил. Как воспроизвести зависон?
« Последнее редактирование: 04.10.2014 17:14:00 от mvk »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Из темы:
Re: Запись с радиостанций

Всем добрый вечер!
Находясь в сети, я часто открываю вкладку http://radio.akado.ru/
Скажите, можно ли сохранять музыку которую прослушиваю?

Сохранение аудио или/и музыки транслируемого потока

Некоторые варианты использования streamripper:
http://forum.altlinux.org/index.php/topic,8027.msg183002.html#msg183002

Как записать звук?
http://forum.altlinux.org/index.php/topic,32456.msg228659.html#msg228659

Firefox: В браузере, на указанном топикстартером сайте, правой кнопкой мыши на битрейте потока => Сохранить объект как...
elinks: курсор на Станция 'Слушать!' (поглядывая в строке подсказке stream=битрейт)
Меню => Ссылки => Скачать по ссылке (или клавиша d)
Внутри файла, адрес потока.

Околотемное об аудио потоках (для новичков и опытных):
http://forum.altlinux.org/index.php?topic=30712.0

Например на станции ТортFM - Trance на radio.akado.ru
на битности потока делаем в браузере
Сохранить объект как...
изменяя имя по-вкусу и смотрим линк на поток
$ cat ~/Downloads/radio.tortfm.trance.m3u
#EXTM3U
#EXTINF:0,����FM - Trance
http://radio02-cn03.akadostream.ru:8113/tortfm_trance192.mp3

Пример команды захвата streamripper'ом аудиопотока с нарезкой его на композиции
Команда для сохранения имён файлов в русской кодировке из потока с ресурса транслирующего русскоязычный музыкальный контент:
- Команда ниже, создаёт в каталоге ~/streams каталог с именем потока, создаст в нём каталог incomplete, где трек аудиокомпозиции будет проименован "исполнитель - название композиции"и будет дополняться до полного;
- После окончания композиции трек будет перенесён на уровень выше в каталог для комплектных треков;
- В комплектные, треки переносятся только те, которые захватываются с самого начала музыкальной композиции;
- Треки захват которых начался не с начала, в шелл помечаются streamripper'ом как skipping;
- Треки захват которых начался с начала и будут по окончании композиции перенесены в каталог для полных комплектных композиций, эти композиции в шелл помечаются streamripper'ом как ripping;
- По опции larger, трек в complete будет перезаписан, если одноимённый входящий захватываемый трек по размеру больше, чем находящийся в complete: варианты - always, never, и larger, что соответственно:
перезаписать одноимённый в любом случае
никогда не перезаписывать одноимённый
перезаписать если одноимённый входящий больше по размеру;
- Опция T: обнулить файл в incomplete, если файл, дубликат файла в каталоге комплектных треков
- codeset-metadata - кодировка метаданных потока;
- codeset-filesys - кодировка файловой системы
- d - каталог для сохранеия треков

$ streamripper http://radio02-cn03.akadostream.ru:8102/radiosibir112.mp3 \
-o larger -T --codeset-metadata=cp1251  --codeset-filesys=utf8  -d ~/streams/
Connecting...
stream: ����� ������ (http://radiosibir.ru)
server name: Icecast 2.3.2
declared bitrate: 112
meta interval: 16000

[skipping...   ] Radio Sibir:    Ed Sheeran - Sing [  392kb]
[ripping...    ] Radio Sibir:    Rihanna - California King Bed [  3,46M]
[ripping...    ] Radio Sibir:    Бурито ft. Ёлка - Ты � [  2,42M]

Просмотр incomplete и complete композиций в каталогах:
$ ls -1R ~/streams/Радио\ Сибирь\ \(http---radiosibir.ru\)/
/home/user/streams/Радио Сибирь (http---radiosibir.ru)/:
incomplete
Radio Sibir-    Rihanna - California King Bed.mp3
Radio Sibir-    Бурито ft. Ёлка - Ты знаешь.mp3

/home/user/streams/Радио Сибирь (http---radiosibir.ru)/incomplete:
Radio Sibir-    Ed Sheeran - Sing.mp3
Radio Sibir-    Zedd ft. Hayley Williams - Stay The Night.mp3


При выборе методов вы должны отличать захват потока от захвата с аудио-карты.
Везде можно найти свои плюсы и минусы.

Полезные линки:
RecordRadio KDE-Apps.org
http://kde-apps.org/content/show.php?content=32842
Воспроизведение и запись потокового медиа с помощью VLC
http://rus-linux.net/MyLDP/mm/vlc.html
Запись онлайн радио в Linux | proft.me
http://proft.me/2013/01/30/zapis-onlajn-radio-v-linux/
Запись онлайн радио | Русскоязычная документация по Ubuntu
http://help.ubuntu.ru/wiki/запись_онлайн_радио
Как записать интернет радио на компьютер под Линукс?| radiotochki.net
http://radiotochki.net/radio_24_record-radio-na-linux.html

streamripper в DOS Shell
http://forum.altlinux.org/index.php/topic,5981.msg238744.html#msg238744