Показаны сообщения с ярлыком linux. Показать все сообщения
Показаны сообщения с ярлыком linux. Показать все сообщения

пятница, 6 июля 2018 г.

Обработка изображений и сканов документов с помощью Image Magic

ImageMagick — набор программ (консольных утилит) для чтения и редактирования файлов множества графических форматов.

Обработка изображений происходит через обращение к консольной утилите convert. Помимо преобразования изображений из одного формата в другой (например из текста pdf в картинку png) утилита может заменить графический редактор. Склейка и обрезка изображений, изменение яркости и контраста, применение фильтров - всё это умеет convert. Кроме того операции с консольной утилитой легко автоматизируются. Есть возможность создавать специальные скрипты для ImageMagic которые будут производить сложные операции с изображением.
Многие скрипты можно скачать с официального сайта.

Изменение одного из размеров..

...с сохранением соотношения сторон
# resize image to height 25, keeping aspect ratio convert -geometry x25 src/image1.png out/image1.png
Если операция требует двух параметров, то они часто разделяются символом x. В примере первый параметр (ширина) не задан.

Поворот
Повернуть по часовой стрелке на 90 градусов:

convert 1.png -rotate 90 rotated.png
Кадрирование
Равномерно обрезать изображение по всем краям оставив 90% ширины и 90% высоты
convert my_image.jpg -gravity center -crop 90% croped.jpg

Изменение DPI

Часто при преобразовании PDF в PNG программа сильно занижает DPI. Поэтому это значение стоит задать отдельно с помощью параметра -density.

convert -density 250 file.pdf new_file.png
-flatten - чтобы заменить прозрачность - белым
-transparent white - не работает

density нужно задавать до имени входного файла 

Создание pdf из изображений

convert способен и выполнять обратную операцию - создание pdf из набора изображений. Каждое изображение в примере станет отдельной страницей документа
convert 1.jpg 2.jpg 3.jpg result.pdf
Можно повернуть (или выполнить другие операции) отдельные картинки перед добавление в pdf

convert 1.jpg 2.jpg \( 3.jpg -rotate 90  \) result.pdf

Склейка изображений

Добавление изображений в вертикальную ленту: -append
Добавление изображений в горизонтальную ленту: +append
convert first.png second.png -append compare.png
convert first.png second.png +append compare.png
Повторение изображения.
convert first.png clone 0 +append first2.png
Эта команда повторит первое изображение (индекс 0) и поместит его 
 справа (+append) от оригинала.
Над копие можно производить отдельные операции, заключив эти операции и команду copy в скобки:
Копия перед добавлением к оригиналу будет повёрнута на 180 градусов:
convert 1.png  \( -clone 0 -rotate 180 \) +append 1+1.png


Размытие
Размытие по Гауссу 
-gaussian-blur 0x20

0 - радиус. лучше задавать именно 0.
20 - сигма (размер ядра?). Чем больше тем сильнее будет размыто изображение.

Медианный фильтр
-median 20

Показывать прогресс
Некоторые операции занимают заметное количество времени, поэтому чтобы не скучать можно включить отображение статуса и прогресса операции
 -monitor

Регулировка яркости и контраста
convert -brightness-contrast -10x40 2.png out_bc.png
    установить яркость -10, контраст 40. Значения изменяются в [-100, +100]

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

Операция -level 25%,75% возьмёт 25% самых тёмных пикселей сделав их чёрными, а 25% (100 - 75) самых светлых сделает белыми [doc: Direct Level Adjustments]. При этом диапазон яркостей оставшихся пикселей будет масштабирован, чтобы растянуть их по всей шкале яркостей.Эта операция называется линейной коррекцией. Она призвана повысит контрастность изображения.
Исходное изображение
изображение после операций с гистограммой
На изображениях выше видно, что черного и белого цвета стало больше. А серых оттенков - меньше. Можно исходное изображение в графическом редакторе (например GIMP) и выбрав операцию Уровни подвигать ползунки под гистограммой следя как изменяется картинка.

Оттенки теперь представлены 50% всех
пикселей, остальные 50% (слева и справа)
 делят черные и белые пиксели.

Преобразовать в черно-белое

convert -type grayscale my_image.jpg gray.jpg;



Обрезка по уровню:
Более радикальный способ уменьшения числа цветов - оставить лишь два. Каждый пиксель яркостью меньше 50% будет черным, а яркостью больше - белым.

convert -evaluate Threshold 50% 1.png out1.png

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

Фильтры

Оставить только горизонтальные линии
convert source.png -morphology close:5 "1x5: 1,1,1,1,1" result.png 
Регулируя параметры фильтра, число затариваемых пикселей (здесь их пять) можно оставлять не все вертикальные линии, а определённой длинны.
Число 5 (после close)  - это количество повторений фильтра. 
Аналогично можно оставить только горизонтальные линии изменив 1x5 на 5x1.
Применение фильтров в документации: http://www.imagemagick.org/Usage/morphology/#kernel

Другой способ удаления линий: https://stackoverflow.com/questions/41619646/image-processing-to-remove-lines

Обработка сфотографированного документа. Непрактичный пример.

Часто на сфотографированном документе или конспекте оказывается тень, например когда фотокамера загораживает источник света. Сделать изображение однородным относительно просто, достаточно "извлечь" из изображения только саму тень не затронув текст. Такая операция называется выравнивание освещения.

Извлечь тень можно сильно сгладив изображение, так чтобы текст слился с фоном. Таким образом полученное размытое изображение будет содержать преимущественно яркость. Иногда даже удаётся таким образом удалить тени от изгибов (или сами изгибы) бумаги, если применять медианное размытие (фильтр).


Исходное изображение.
Пусть исходное изображение сохранено в файле source.jpg

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

0. convert source.jpg -normalize source1.jpg

1. Выделим тень
convert source1.jpg -median 45 blur.jpg
60 - радиус в пикселях, на котором будет производится размытие вокруг данного пикселя. Подбирается экспериментально. Результирующее изображение не должно содержать заметных следов записей, только тени.

Если операция занимает много времени, то добавлением ключа -monitor можно порадовать себя информацией о прогрессе.

В результате должно получится что-то похожее:

Изображение после применения медианного фильтра. Осталось только тень.


2. Удаление тени.
Для удаление тени используем следующую формулу для яркости каждого пикселя:
R = I1 - I2 + 0.5
Здесь считаем, что яркость пикселя изменяется от 0 до 1. Потому что так считает ImageMagic.
R - яркость пикселя в результирующем изображении. I1, I2 - яркость соответствующих пикселей на входных изображениях.
0.5 добавим чтобы сильно не потерять яркость, ведь используется вычитание которое яркость уменьшит.

Чтобы задать такую операцию, которая называется Извлечение зерна (Grain extract) зададим несколько параметров программе:
  • -compose oper
будем работать с несколькими изображениями сразу, используя их пиксели в некоторой операции oper. Возможные операции смешивания изображений (слоёв) можно посмотреть в документации. Они очень похожи на те, что используются в графических редакторах. Например Gimp.

В данном случае будем использовать свою операцию, поэтому зададим значение oper как Mathematics.
Далее нужно привести параметры этой операции, которая и будет задавать нашу формулу. По умолчанию в ImageMagic используется формула:
A*I1 * I2 + B * I1 + C * I2 + D.

Её можно видоизменить задавать значение коэффициентов. A, B, C, D.
Чтобы она выглядела как формула приведённая выше зададим такие значения коэффициентов:
A = 0, B = 1, C = -1, D = 0.5.

Эти параметры операции Mathematics задаются ещё одним ключём:
  • -define compose:args='0,-1,1,0.5'
Наконец чтобы на выходе получилось одно изображение (на входе то будет два) используем ключ
  • -composite

В конце концов должна получится следующая команда:
convert -compose Mathematics -define compose:args='0,1,-1,0.5' -composite blur.jpg source1.jpg  result0.jpg


Получим такую картинку:
После извлечения зерна тень пропала!
Остаётся только подправить яркость, контраст (кому нужна серая бумага?) и немного текст. Убрать серый фон бумаги можно и подправив гистограмму, обрезав все относительно светлые пиксели.

3. Исправляем яркость и контраст.
Параметры подбираются тоже опытным путём.
convert -brightness-contrast 30x60 result0.jpg result1.jpg
Результат:

за счёт увеличения яркости фон бумаги стал практически однородным и белым
Записи в нижней части изображения выглядят бледными.

4. Используем нерезкую маску (Unsharpen mask) чтобы исправить это, и увеличить читаемость.
convert -brightness-contrast 30x60 result0.jpg result1.jpg




Наконец можно сравнить исходное изображение с полученным поместив их рядом:
convert +append source.jpg result1.jpg compare.jpg


Цвета немного пострадали, но зато пропала тень, делающая картинку неоднородной.
Подобные операции требуются не только для лучшего восприятия человеком но и для работы алгоритмов машинного зрения. Которым для успешной работы требуются хорошие не зашумленные изображения, без лишних деталей.

Всё вместе

convert source.jpg -normalize source1.jpg

convert source1.jpg -median 45 blur.jpg
convert -compose Mathematics -define compose:args='0,1,-1,0.5' -composite blur.jpg source1.jpg result0.jpg
convert -brightness-contrast 30x60 result0.jpg result1.jpg
convert -brightness-contrast 30x60 result0.jpg result1.jpg

Дополнение

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

Операцию повышения яркости и контрастности можно заменить работой с гистограммой (см. -level).


Обработка сфотографированного документа. Практичный пример.

Автор не до конца понимает как это работает, но объяснить для гуманитариев попробует :)
Фильтра Гаусса используется для размытия. Он является фильтром низких частот, т.е. обрубает высокие частоты (spatial frequency). Частоту которая служит порогом можно регулировать с помощью параметра фильтра - сигмы.
Значит можно использовать один фильтр Гаусса, который отбросит высокие частоты (условно: > x1 )  и другой фильтр Гаусса, которые отбросить частоты чуть ниже (условно: >x0).
x0 > x1.
Получатся два изображения, которые не содержат частот выше x1, а одно из них не содержит частот выше x1. Значит, вычитанием второго изображения из первого можно получить частоты лежащие в диапазоне от x0 до x1.

Это свойство и использовано в фильтре "Разница по Гауссу". Этот фильтр уберет слишком крупные детали (частоты < x0) и слишком крупные (частоты > x1).

Параметры фильтра обычно побираются экспериментально, но можно использовать числа из примера. Меньшее из чисел, не стоит делать большим - от него зависит размер границ. https://docs.gimp.org/ru/plug-in-dog.html

convert source.png -morphology Convolve DoG:15,100,0 -negate -normalize -level 60%,91%,0.1 result.png
-morphology Convolve DoG:15,100,0 - применение фильтра "Разница по Гауссу" (Difference of Gaussians, IM doc).

Изображение получится инвертированным поэтому инвертируем его снова (-negate), повысим контрастность (-normalize) и, наконец, "откусим"  60% самых светлых пикселей и 9% самых тёмных, уменьшив яркость ( 0.1 ).

Фильтр Разница по Гауссу является одним из семейства фильтров, которые призваны выделять контуры. Они используются в машинном зрении, например чтобы выделить контуры номерного знака на автомобиле.

Алсо

Преобразование сканированного документа в текст
tesseract my_image.png my_text -l rus+eng
https://askubuntu.com/questions/16268/whats-the-best-simplest-ocr-solution

Ссылки


четверг, 16 марта 2017 г.

Bluetooth notes

Реализация стек протоколов Bluetooth в Linux называется BlueZ. В него включены утилиты:
  • hciconfig - аналог ifconfig;
  • hcitool - сбор информации;
  • hcidump - перехват данных.
HCI - Host controller interface.

Просмотреть доступные Bluetooth адаптеры:
hciconfig
hci0:    Type: BR/EDR  Bus: USB
    BD Address: 11:22:33:44:55:66  ACL MTU: 1022:8  SCO MTU: 121:3
    UP RUNNING PSCAN
    RX bytes:637 acl:0 sco:0 events:44 errors:0
    TX bytes:4038 acl:0 sco:0 commands:44 errors:0

Включать\выключать Bluetooth адаптер:
hciconfig hci0 down
hciconfig hci0 up

Разведка

Обнаружение устройств.
Далее предполагаем, что устройства доступны для обнаружения.
hcitool scan
Утилита выводит только адрес и имя устройства

 

Чтобы собрать больше информации используем команду inq
hcitool inq
Здесь указывается смещение часов и тип устройства (телефон, bluetooth гарнитура, и т.д.)


 

Детальная информация об устройстве.
hcitool info <addr>

Работа с устройствами

Отправка файлов
bluetooth-sendto --device=11:22:33:44:55:66 t2.png

bluetoothctl - интерактивная командная оболочка для взаимодействия с bluetooth устройствами. Команда help выдаст список всех доступных команд [so].
Сканирование тут выполняется автоматически, его только нужно предварительно включить
scan on
devices просмотреть доступные устройства. Причём устройства сохраняются в этом списке после обнаружения: устройство может быть уже не видимым, но по прежнему доступно для коммуникации.
agent on
pair 11:22:33:44:55:66
После чего необходимо подтвердить цифровой ключ на обоих устройствах.

Доступ к файловой системе устройства. На устройстве должна быть установлена служба OBEX FTP.

Монтировать устройство:
obexfs -b 70:F9:27:76:8D:61 -- mount_here
Теперь можно просматривать и копировать файлы.

Bluetooth и Python

Поиск доступных для обнаружения устройств
from bluetooth import *
devList = discover_devices()
for device in devList:
    name = str(lookup_name(device))
    print("[+] Found Bluetooth Device " + str(name))
    print("[+] MAC address: "+str(device))

Ссылки

Violent Python: A Cookbook for Hackers, Forensic Analysts, Penetration Testers and Security… by TJ O'Connor

Как взломать Bluetooth, Часть 1: термины, технологии и безопасность

воскресенье, 30 августа 2015 г.

linux notes

www.zabrosov.ru - обширная шпаргалка по командам Линукс в примерах.
Некоторая часть из нижеописанного актуальна для ubuntu и подобных дистрибутивов.

*** Как загрузить Ubuntu без графики? [from]
В меню загрузки ОС отредактировать конфигурация заменив quiet splash на text.

*** Как избежать сохранения команды в истории bash?
Для этого нудно оставить перед ней пробел.

*** Как сохранить введённую в консоли команду без её выполнения? [se]
Ctrl + U - для запоминания
Ctrl + Y - для вставки запомненной команды

*** Если файл существует, то выполнить действие...
if [ -f filename ]; then echo "exists"; fi
Синтексис управляющих операторов [подробнее]


Цсловный оперетор
if условие; then ... else ... fi
if условие; then ... elif [ .. ] ... fi

Цикл с предусловием
while условие; do ... done


Условие может выглядеть так [подробнее]
(( `hcitool scan | wc -l` > 1 ))

diff etc
сравнивает содержимое файлов
раскрасить вывод diff [SO]:
diff old new | colordiff
Графические приложения для сравнения файлов: Kompare, Meld.
Последнее умеет делать слияние файлов.

Vim, [Vim Викиучебник]

Управление
i - перейти в режим (вставки) редактирования;
Esc - перейти в нормальный режим (режим ввода комманд)
v - пеерейти в режим выделения текста.
/ слово - поиск вперёд
? слово - поиск назад
n и N - следующее и предыдущее вхождение

yy - копировать строку
pp - вставить строку

:q - выход
:q! - выход без сохранения
:wq - сохранить и выйти
:set nu - включить номера строк
.vimrc - файл настроек.
...

***
wc <file>    - посчитать число строк, слов и размер файла в байтах


***

Напечатать DOC файл в консоли
antiword file

PDF

Показать PDF в консоли ][
sudo apt-get install fbi
Для просмотра пользователь должен быть добавлен в группу video:
$ sudo usermod -a -G video user
Теперь можно смотреть:
$ fbgs file.pdf
 
Собрать PDF из отдельных изображений(страниц) [SO]
convert page*.png mydoc.pdf
Вырезать из PDF файла страницы [askubuntu]
pdftk full-pdf.pdf cat 12-15 output outfile_p12-15.pdf


== latex ==
TeX-live        - core
Kile            - editor
TexMaker         - editor
texlive-latex-extra   

xneur        - PuntoSwitcher for linux
Stardict     - Context dictioary
          copy dictionaries to /usr/share/stardict/dic


***
Напечатать время в каждой строке вывода [SO]
nc localhost 30003 | awk '{print strftime("%m-%d %H:%M:%S"), $0; fflush();'
Здесь для печати времени в формате %m-%d %H:%M:%S перед каждой строкой $0 вывода nc используется скриптовый язык AWK [rus-linux, linuxgeeks].

Ещё один способ (необходим пакет moreutils)[stackexchange]
echo "foo" | ts '[%Y-%m-%d %H:%M:%S]
***
Разбить строку на поля по разделителю ':' и вывести только второе (-f 2) поле
echo email:password | cut -d ':' -f 2
***
Направить вывод команды одновременно на экран и в файл [SO, Tee]

nc localhost 30003 | tee logfile.txt


***
Сгенерировать QR-код.
qrencode "hello" -o image.png
Сгенерировать  QR-код в ASCII-арт и тут же его показать.
qrencode "hello" -t ASCII - | cat

Сеть и интернет

SSH


У каждой машины с установленным SSH сервером есть свой уникальный идентификатор - отпечаток ключа шифрования, который генерируется во вреся установки сервера. При подключении, до того как сервер запросит пароль, этот отпечаток выводится на экран. Это необходимо, чтобы удостоверится в подлинности сервера и защитить себя от MitM.

-ssh -o VisualHostKey=yes pi@192.168.2.35












Поэтому для начала нужно узнать один или несколько различных отпечатков используя программу ssh-keygen. Программе передаются два параметра -l (вывести отпечаток ключа) и -f <путь к ключу>. "Нарисовать" как и раньше отпечаток поможет ключ -v. Устаревшее шифрование алгоритмом DSA используется редко. В основном в ходу RSA и ECDSA.
Узнать отпечаток ECDSA ключа
ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key
Отпечатки могут быть по разному представлены (в зависимости от версии SSH [SU]), например клиентская программа напечатает в виде шестнадцатеричного числа, а сервер (комманда ssh-keygen) в base64.

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

Сгенерируем ключи
ssh-keygen
они будут сохранены в .ssh/id_rsa, откуда  потом их можно загрузить в память:
ssh-add key_file
Просмотреть загруженные ключи
ssh-add -l
***
Копировать файл по ssh на удалённый хост
scp file user@host:new_file

Посмотреть отпечаток ключа сервера
ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
***
Отпечаток публичного ключа ssh-сервера (например ECDSA key fingerprint is 09:0c:2f:bb:9d:f3:69:21:5c:3c:a9:ec:dd:a2:18:16) трудно запомнить, однако его можно "рисовать" при подключении подобным образом [www.howtogeek.com]:

с помощью опции -o VisualHostKey=yes:
ssh -o VisualHostKey=yes user@host
***
Не добавлять адрес в список известных.
Иногда при подключении к серверу нет необходимости добавлять его с список доверенных (known_hosts). Один их способов, это самостоятельно указать путь для этого файла, заменив его на /dev/null (-o UserKnownHostsFile=/dev/null):
ssh -o UserKnownHostsFile=/dev/null user@some_server

***

Смотреть файлы на удаленной машине удобнее всего через файловый менеджер. Например в nautilus: File > Connect to Server... В качестве адреса использовать: sftp://user@server. Фактически будет смонтирована удалённая файловая система. Это в частности решает проблему просмотра графических и др. файлов в консоли.

*** Socks-proxy
Чтобы дать возможность обращатся локольному приложению с IP ssh сервера к другим машинам можно настроить ssh в режиме socks-прокси. Это решит и проблему открытого или недоверенного соединения с интернетом, например в случае публичного WiFi. Весь траффик будет передаватся по защищённому каналу между ssh клиентом и сервером, и в конце концов будет исходить как буд-то от машины, на которой запущен ssh сервер.
Подключемся к серверу в режиме socks прокси
ssh -D 8080 user@server
Теперь остаётся настроть локальное приложение, например браузер, на использование прокси localhost:8080.

tmux

Менеджер терминалов, аналог screen.
tmux - запустить и создать новую сессию.
tmux attach - подключится к последней сессии. Удобно при подключении по ssh вернутся в то же место, на котором закончил в последний раз.
Запущенные в tmux приложения продолжают выполнятся, даже если соединение по ssh было разорвано.
Ctrl+b, c - создать новый терминал.
Ctrl+b, 1 - переключится на терминал #1.
Ctrl+b, d - отключится
Ctrl+b, [ - включить прокрутку
Ctrl+b " - split pane horizontally.
Ctrl+b % - split pane vertically.
Ctrl+b arrow key - switch pane.
Hold Ctrl+b, don't release it and hold one of the arrow keys - resize pane.
Ctrl+b c - (c)reate a new window.
Ctrl+b n - move to the (n)ext window.
Ctrl+b p - move to the (p)revious window.

mosh

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

links2 [URL]
-dump - вывести страницу на стандартный вывод

wget 

скачать файл:
wget URL -O КУДА(имя файла)

***

Измерить пропускную способность сети - iperf
Запустить сервер, по желанию указать интерфейс -s 192.168.1.9:
iperf
Запустить клиент но 10 секунд (или на N секунд -t N):
iperf -c <server_ip>

Показать использование сети каждым процессом
nethogs

Утилита должна запускаться от имени суперпользователя.

***
VNC
http://geckich.blogspot.com/2012/09/vino-vnc-linux.html

Подключения

Подключиться к сети my_wifi используя nmcli (network manager)
nmcli connection add con-name mynewcon ifname wlan0 type wifi ssid myssid
nmcli connection modify mynewcon 802-11-wireless-security.key-mgmt wpa-psk
nmcli connection modify mynewcon 802-11-wireless-security.psk password123

Запустить HTTP сервер в любой папке [askubuntu]
python -m SimpleHTTPServer 80
python3 -m http.server
Порт (80) можно не указывать.
Это быстрый способ сделать доступным содрежимое каталога для других.

Если требуется запустить сервер для сайта, работающего на php то:

php -S 0.0.0.0:8080



Using the NetworkManager Command Line Tool, nmcli
***

How do I change the hostname without a restart?
How to spoof the MAC address of a network interface on Linux


Отправить сообщение из консоли через XMPP

Создать простой файл конфигурации в каталоге пользователя .sendxmpprc который будет содержать имя пользователя от имени которого будет отправлено сообщение, сервер и пароль:
user@jabber.com password
Права на доступ к файлу должен имть только текуший пользователь:
chmod 0600 .snedxmpp
Наконец можно отправлять сообщение (используя tls соединение -t)
echo "Hello" | sendxmpp -t reciver@jabber.com

Отправить сообщение через публичный почтовый сервер

sendEmail -f "from@server.ru" -t "reciver@server.ru" -u "Subject" -m "message" -s "smtp.server.ru" -xu "from@server.ru" -xp password
-f адрес_отправителя
-t адрес_получателя
-u тема
-s smtp сервер[:порт]
-xu имя_пользователя_для_авторизации
-xp пароль_для авторизации

*** Узнать свой публичный IP [askubuntu]

Самый простой способ сделать это - спросить IP у одного из web-сервисов. Стоит выбирать те сайты, которые выдают IP адрес простым текстом, без лишнего оформления. Используем программу curl
curl ipinfo.io/ip
curl ifconfig.me
curl icanhazip.com
curl ipecho.net/plain; echo
Если IP адрес выдаётся в одну строку, без символа переноса строки то добавим его с помощью последующего вызова echo, как это сделано в последнем примере

Геолокация по IP

geoip <IP>
#<struct GeoIP::Country request="8.8.8.8", ip="8.8.8.8", country_code=225, country_code2="US", country_code3="USA", country_name="United States", continent_code="NA">
или
geoiplookup <IP>
GeoIP Country Edition: US, United States
GeoIP City Edition, Rev 1: US, CA, California, Mountain View, 94040, 37.384499, -122.088097, 807, 650
GeoIP ASNum Edition: AS15169 Google Inc.
How to Do IP Address Geolocation Lookups

Система

Системные мониторы (консольные)
htop
glances

*** Отправить сообщение во все открытые терминалы [stackexchange]

sudo wall -n Hello

cron

Редактировать расписание:
crontab -e
Каждая запись расписания состоит из нескольких полей [wiki]:
* * * * * выполняемая команда
- - - - -
| | | | |
| | | | ----- День недели (0 - 7) (Воскресенье =0 или =7)
| | | ------- Месяц (1 - 12)
| | --------- День (1 - 31)
| ----------- Час (0 - 23)
------------- Минута (0 - 59)
* (звёздачка) обознаяает любое значение, таким образом запись
* * * * * ~/script.py 
буде означать, что скрипт в домашнем каталоге пользователя бедет запускатся каждую минуту (каждую минуту каждого часа каждого дня месяца каждого дня недели) 
Следующая комманда будет запускатся каждые пять минут
*/5 * * * * echo "Прошло пять минут"
Вместо описания времени, можно указать событие - перезагрузка (@reboot). Тогда запись длжна выгялдеть так
@reboot ~/script.py 

Есть и другой способ запускать программу переодически. Утилита watch будет запускать скрипт script.py комманду каждый 60 секунд:
watch -n 60 ~/script.py
***
who        - who is logged?
ps        - show processes

tightvncserver  - vnc server
tightvncpasswd - set password

 

Диски и разделы

df -h             # show hdd free space
fdisk -l        # list of all disks
gparted

***
Анализ занятого места на диске из консоли [SE]
ncdu

***
gsmartcontrol                - GUI smart

== smartmontools (пакет) ==
smartctl --scan                - scan for the devices
smartctl /dev/sda -x            - show info

== fix ntfs ==
ntfsprogs                - пакет
ntfsfix /dev/sda1            - Fix common filesystem errors and force Windows to check NTFS

Сделать образ диска

dd if=/dev/sdb of=disk.img bs=4k
if - диск;
of - имя файла в который будет сохранён образ;
bs - размер блоков, которыми будет производится копирование.
По-умолчанию информации о ходе операции не показывается, чтобы это исправить нужно добавить опцию [askubuntu]
status=progress
В старых версиях во время копирования никакой информации о прогрессе не показывается.

Объём скопированных данных показывает утилита dcfldd основанная на dd. Программе можно указать дополнительные опции, которые могут быть полезны, если во время копирования возможны ошибки чтения. noerror и sync - не даст программе остановится при возникновении ошибки, а нечитаемый блок (размер указан в опции bs) при копировании будет заполнен нулями.
dd if=/dev/sdb of=disk.img bs=4k conv=noerror,sycn
Для плохо читаемых дисков иметь смысл уменьшить размер блока.
Чтобы показывать состояние [askubuntu] операции нужно добавить параметр status=progress

dd if=/dev/sdb of=disk.img bs=4k conv=noerror,sycn status=progress 


По окончанию операции копирования хорошо будет сравнить хэши:
md5sum disk.img
md5sum /dev/sdb

md5sum не показывает статуса о ходе операции, поэтому вызывая её для больших объёмов данных нельзя сказать о длительности операции. Воспользуемся отдельной программой pv, [habr] которая показывает прогресс бар, скорость и другую информацию:
pv disk.img | md5sum
Чтобы сжать образ на лету используем gzip [create a compressed backup image]:
dd if=/dev/sda | gzip -9 > /mnt/external/filename.img.gz
-1 - быстрое сжатие
-9 - качественное сжатие (медленно)

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

=== boot manager ===
startupmanager                 - gui for grub settings

***
Температура
http://www.youisbee.ru/howto/linux/86-nastrojka-lm-sensors-v-debian-ubuntu.html

***

Установить частоту, например для четырёхрядерного процессора:
for i in 0 1 2 3; do cpufreq-set -c $i -g ondemand; done

*** music

Проиграть звук из консоли:
paplay /usr/share/sounds/KDE-Im-Sms.ogg
Воспроизвести mp3 [superuser]:
mpg123 music.mp3
cmus - консольный аудиоплеер

== other ===
bc        - console calculator
gksudo <app>    - run GUI app with root

=== console ===
Alt+.        - previous param
== screen ==
Ctrl+A, S       - split the screen horizontaly
Ctrl+A, Tab     - switch the windows
Ctrl+A, c       - create new session in a windows
Ctrl+A, |       - split the windows verticaly
Ctra+A, X       - close window

== write console to the file ==
bash > <file>     - start new session and write output to the file. (No output at the screen)
bash | tee <file> - start new session and write output to the file

== history ==
!n               - execute command with position #n in history
!-n              - execute command with position #n from tail in history
!!                - выполнить последнюю комманду

Файлы и папки

Получить полное имя файла [so]:
readlink -f file.txt

Узнать объём директории:
    du -sh /home/user
-s -  напечатать только суммарный объём файлов
- в удобном для чтения виде

Поиск всех файлов с именем test
    find / -name test

Вернуться в домашнюю директорию:
    cd

Сделать что-либо со всеми файлами в папке, например, распаковать все zip архивы в текущей папке:
    for f in *.zip ; do unzip $f ; done

Архиваторы [help.ubuntu]
Архиваторы bzip2 и gzip не способны обрабатывать несколько файлов, поэтому файлы для архивирования часто помещают в один контейнер - несжатый архив tar,  который непосредственно уже можно сжимать.

Сжатие -c архиватором gzip -z в файл с именем z.tar.gz. Файлы которые нужно сжать указываются последнем параметром
tar -сzf z.tar.gz file1 file2 file3
Просмотр -t содержимого архива (добавить ключ -v для подробных сведениях о файлах):
tar -tf z.tar.bz
Распаковка архива:
tar -xf z.tar.bz 
или распаковка в каталог :
tar -xf z.tar.bz /extract/here

Изображения

Удалить EXIF данные и перезаписать файл [exif]
exiftool -overwrite_original -all= image.jpg
Изменить размер изображение в два раза и увеличить степень сжатия (с потерями)
convert -resize 50% -quality 80 image.jpg image-new.jpg

Железо

Средствами "из коробки" показать всю информацию о железе в одном месте и в удобном для человека виде можно, но для этого придётся запускать несколько программ и возможно обрабатывать их вывод [more, подробнее]. 
Поэтому чтобы просто и наглядно представить данные о аппаратном обеспечении нужно установить дополнительный пакет: inxi.
Программа умеет показывать многое [more], но необходимый минимум информации можно посмотреть вызвав:
inxi -Fx
dmesg - показывает буффер сообщений ядра, среди которых может быть информация о вновь подключённых устройствах.
Ключи:
-H - вывод в более читаемом виде (например использование относительного времени для сообщений);
-w - вывод в реальном времени.
lshw - консольная утилита рассказывающая о аппаратном обеспечении, можно импортировать вывод программы в html;
lshw-gtk - то же самое но с графическим интерфейсом.
Программу нужно запускать от имени сеперпользователя, иначе информация может быть скудной.

HardInfo - менне детальная информация, дружелюбный интерфейс.

lspci - печатает информацию о PCI шинах и подключённых к ним устройствах (в том числе USB).

WiFi

iw list

lspci | grep -i network
 
Узнать состояние аккумулятора наутбука
acpi -b 
Battery 0: Full, 100%
acpi -V  # вся информация
***
cat /sys/class/power_supply/BAT1/capacity
***
upower -i /org/freedesktop/UPower/devices/battery_BAT1

Антивирус

Свободный CalmAV  - обладает достаточно скромными возможностями по сравнению с популярными антивирусами. Это скорее сканер чем полноценный антивирус, хоть он и может работать в режиме демона. Поэтому для полноценной защиты его будет недостаточно.
Обновить базу (требуются права суперпользователя):
freshclam
Сканировать файл:
clamscan файл
Рекурсивно сканировать папку:
clamscan -r Downloads
При этом в вывод попадут все просканированные файлы. Чтобы напечатать только заражённые файлы необходимо использовать ключ --infected.
Графическая оболочка для антивируса - clamtk.
Об эффективности антивируса в сравнении с другими http://www.shadowserver.org/wiki/pmwiki.php/Stats/VirusYearlyStats

Программа chkrootkit предназначена для поиска руткитов. Установка, настройка и использование сканера уязвимостей chkrootkit

GPG

gpg -c <file>     - encrypt the file with password
gpg <file>        - decrypt

http://wiki.linuxformat.ru/wiki/LXF117:GPG
http://wikiadmin.net/gnupg/

***

=== windows ===
chntpw - registry editor

Регулярные выражения etc

Показать строки содержашие mytext
cat myfile | grep mytext
text1 ИЛИ text2:
cat myfile | grep -e text1 -e text2 
показать 5 строк до и после
cat myfile | grep -e text1 5
Показать всё, кроме
... | grep -v some_text
Показать только текст совпадающий с шаблоном (-o)
... | grep -o some_regexp
Grep Cheat Sheet


***
Вычислить md5 хэш

echo -n "[eqyz" | openssl md5


Программирование etc

Отформатировать код на Pascal\Delphi:
ptop src.pas new_src.pas
Утилита ptop входит в состав FPC.

***
Интерпретатор JavaScript в консоли - rhino

***
Увидеть содержимое файла в шестнадцатеричном виде:
xxd файл
hexdump файл
 Иногда полезно вывести файл в виде набора значений байт. Добавим ключ -e с описанием соответствующего формата:
' [iterations]/[byte_count] "[format string]" '
Применяет строку формата format string к группам байт по byte_count штук iterations раз. format string описывается подобно формату функции printf.
hexdump -ve '1/1 "%x"' ave.txt
-v - не пропускать повторяющие данные (hexdump заменяет их сиволом *)
%x - печатать шестнадцатеричные значения

Регулярные выражения

Памятка
Регулярные выражения для валидации распространенных видов данных


=== apt-get ===
sud    apt-get install openssh-server mc vim gedit links2 git python galculator  codeblocks gnuplot deluge vlc marble stellarium lynx thunderbird  wxmaxima lazarus synaptic gnome-tweak-tool shutter blender inkscape gimp file-roller virtualbox stardict xneur texlive kile mcabber keepass2 clementine texmaker texlive-lang-cyrillic xdotool pidgin celestia cmus jabref screen stardict sshfs goldendict

apt-get install samba libpam-smbpass sshfs firefox-mozilla-build gpg gauke truecrypt 

apt-get install nmap wireshark hydra crunch aircrack-ng  metasploit mtr bkhive samdump2 chntpw dsniff sslstrip ettercap-text-only ngrep tshark dsniff ettercap-graphical ettercap-text-only

Переменные пользователя в bash

Переменная создаётся в момент присваивания значения: 
myvar=1234
myvar2='Ave Statanas'
Пробелы вокруг оператора присваивания = недопустимы.
Чтобы обратится к переменной, перед её именем нужно поставить знак $.
Печать содержимого переменной: echo $myvar2

Сылки