Linux и bash-скриптинг
Автор: https://github.com/krdprog
Сделать рандом строк в файле
shuf list > list.tmp && mv list.tmp list
Заменить запятые переносом строк
sed -i ’s/,/\n/g’ list.new # заменить запятые переносом строк
Узнать дату установки системы Linux
sudo tune2fs -l /dev/sda2 | grep create
Отследить изменения в каталоге средствами md5sum
# формируем файл с контрольными суммами
md5sum * | sort -u > md5.sum
# вносим изменения в каталог
touch test.txt
# формируем ещё раз файл с контрольными суммами
md5sum * | sort -u > md5-2.sum
# сравниваем 2 файла с контрольными суммами
diff md5.sum md5-2.sum
# разницу (если она есть) покажет предыдущая команда
Проверить целостность файлов указанных в сгенерированном списке md5.sum
md5sum -c md5.sum
# если какой-то файл изменён, то будет показано
# ЦЕЛ, ПОВРЕЖДЁН. СОВПАЛА или НЕ СОВПАЛА вычисленная контрольная сумма.
scp — копирование файлов с локального компьютера на сервер
scp -C ~/files/localdir/file.txt ftpuser@hostname:~/sitename/target-dir/
-r - рекурсивно
-C - использовать сжатие данных
Редактирование файла sudoers
Узнать права пользователя:
sudo -l
Редактирование файла sudoers — дадим возможность запускать sudo для пользователя petrovich:
Чтобы открыть /etc/sudoers, введите:
sudo visudo
Запишем в файл и сохраним:
petrovich ALL=(ALL:ALL) ALL
tmux
терминал tmux https://habrahabr.ru/post/126996/
Команда cron запускает процесс, выполняющий команды в указанные дни и время — crontab
Узнать запущен ли cron:
service cron status
Просмотр задач в crontab:
crontab -l
Настройка crontab:
crontab -e
Описание как создавать расписание: http://devacademy.ru/posts/15-otlichnykh-primierov-dlia-sozdaniia-cron-zadach-v-linux/
Можно записать задания из заранее подготовленного файла:
crontab cron-file.txt
ПРИМЕРЫ РАСПИСАНИЙ corntab: https://www.shellhacks.com/ru/crontab-format-cron-job-examples-linux/
/var/spool/cron/ — задания для планировщика cron хранятся в данной директории
crontab — http://www.opennet.ru/man.shtml?topic=crontab&category=1 at — http://www.opennet.ru/man.shtml?topic=at&category=1
Man по-русски: http://www.opennet.ru/man.shtml?topic=cron&category=1&russian=0
pass — консольный менеджер паролей
sudo apt-get install pass
http://rus-linux.net/MyLDP/sec/pass.html https://www.passwordstore.org/ https://linuxcenter.kz/node/2398/blog https://losst.ru/luchshie-menedzhery-parolej-dlya-linux
Проверка SSL-check на смешивание данных. Добиваемся отображения зелёного https
Если у https сайта на страницах есть данные подгружаемые по http, то зелёного замочка в адресной строке не будет.
Вопрос: Как обнаружить http контент?
Ответ: Сервисом https://www.jitbit.com/sslcheck/
Bash: приостановить и возобновить процесс
[bash]
Ctrl + Z - приостановить процесс
fg - возобновить процесс
Проверьте ваши учётные записи на предмет утечки
Сервис для проверки своих учётных записей и e-mail на наличие в базах которые увели.
https://haveibeenpwned.com/
Проверяйте и принимайте меры по смене пароля, его усилению и защите.
Рекомендация сервиса найдена на сайте: https://securelist.ru/
Обновить систему Linux, программные пакеты и очистить ненужные зависимости
sudo apt-get update && sudo apt-get upgrade && sudo apt-get autoremove
Планирование задач в *NIX с помощью at
После запуска at предлагает вам ввести последовательность команд для выполнения. Чтобы закончить ввод команд, следует использовать комбинацию клавиш CTRL-D. Описание основных параметров командной строки at приведено ниже:
at [-m] [-q очередь] [-f файл] ВРЕМЯ
Значение этих параметров:
-q используется для указания очереди. Очередь обозначается одной буквой;
корректными очередями считаются очереди с идентификаторами от a до z и
от A до Z.
-m позволяет отправить пользователю сообщение по электронной почте после
выполнения задачи даже в том случае, когда выполненная программа
ничего не вывела.
-f позволяет прочитать команды из файла, а не со стандартного ввода.
В качестве времени at принимает строки в форматах, совместимых со
стандартом POSIX.2.
Принимается строка, указывающая время в формате ЧЧ:ММ, позволяющая выполнить
команду в назначенное время в течение дня.
Месяц, день, год: ММДДГГ или ММ/ДД/ГГ или ДД.ММ.ГГ.
Указание даты должно следовать за указанием времени.
Пример:
at 20:05
[Enter]
> touch foo.txt
[Ctrl + D]
Посмотреть задания в очереди:
atq
Удалить задачу (узнав номер задачи через atq:
atrm 3
Если пользователю не разрешено выполнять команду at, то в файле /etc/at.allow указать имя пользователя, которому дать право на исполнение команды:
nano /etc/at.allow
http://rus-linux.net/MyLDP/admin/manage-planned-tasks-on-linux-with-the-command-at.html
Вывести в терминал список установленных программ Linux
dpkg -l | tail -n+6 | awk '{print($2)}' | less
или
dpkg --get-selections | less
install for me
sudo apt-get install ranger mc mutt evolution geany nano keepassx imagemagick whois wget ruby
sinatra firefox lynx w3m pwgen liferea gimp virtualbox vlc youtube-dl shutter klavaro ktouch
libreoffice pindgin gnumeric git htop unetbootin nemo xmlstarlet screen laby freeplane fbreader
vim tree at kazam traceroute rake anki pass dia tmux guake git jekyll mojo
+PDF-Shuffler + HPLIP + printer-driver + telegram + heroku + google chrome + firefox developer edition + viber + sublime text
Удалить EXITF из изображения (bash)
Посмотреть данные: $ exiftool image.jpeg
Стереть данные: $ exiftool -all= image.jpeg
Стереть из всех файлов в каталоге: $ exiftool -all= *
Стереть из всех jpg в каталоге: $ exiftool -all= *.jpg
Trisquel — GNU/Linux дистрибутив с полным использованием в своем составе только свободного ПО без проприетарного ПО и использованием свободной версии ядра Linux
Сайт: https://trisquel.info/
Wikipedia: https://ru.wikipedia.org/wiki/Trisquel
Ещё: http://www.opennet.ru/opennews/art.shtml?num=40995
Ещё: http://zenway.ru/page/trisquel
SSH, SCP: ssh-keygen: избавляемся от ошибки Received disconnect from Received disconnect from Too many authentication failures for
Ранее, было описано как настроить доступ к серверу по связке ключей через ssh-keygen.
Вопрос: Почему возникает ошибка Received disconnect from Received disconnect from Too many authentication failures for при подключении к серверу? Ответ: В файл конфигурации ~/.ssh добавлено множество ключей и серверу это не нравится, и он блокирует доступ.
Как решить: В файле ~/.ssh/config для хостов принудительно указать файлы сертификатов в строке IdentityFile
Host mysite
IdentityFile ~/.ssh/mysite_key.pub
HostName 00.000.00.00
User siteadmin
При наличии связки ключей ssh-keygen, чтобы подключиться по ssh не по связке ключей, а по паролю, надо вызывать ssh следующим образом:
ssh -o 'IdentitiesOnly=yes'
Яндекс.XML не работает с адресами IPv6. Как отключить на хостинге IPv6, чтобы работать с Яндекс.XML
Если работа приложения связана с Яндекс.XML, а на VPS работает IPv6, то придётся его отключить и включить IPv4.
Инструкция:
1.Выполните команду
echo net.ipv6.conf.all.disable_ipv6=1 > /etc/sysctl.d/disableipv6.conf
2.В файле /etc/hosts закомментируйте все строки, относящиеся к IPv6
# The following lines are desirable for IPv6 capable hosts
#::1 ip6-localhost ip6-loopback
#fe00::0 ip6-localnet
#ff00::0 ip6-mcastprefix
#ff02::1 ip6-allnodes
#ff02::2 ip6-allrouters
3. Добавьте или измените строки в /etc/ssh/ssh_config
AddressFamily inet
4. В /etc/avahi/avahi-daemon.conf
use-ipv6=no
5. В /etc/exim4/update-exim4.conf
disable_ipv6 = true
6. Перезагрузить и убедиться, что интерфейс не имеет адреса IPv6
ifconfig
- после перезагрузки не должно быть строки с IPv6 адресом.
7. Проверить нет ли подключений и прослушиваемых портов по IPv6
netstat --all | grep -E "tcp6|udp6"
Взято отсюда: http://forum.ispsystem.ru/showthread.php?24588-%D0%9A%D0%B0%D0%BA-%D0%BE%D1%82%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%D1%8C-IPv6Б
Опробовано на Debian 7.0 (Wheezy)
Добавить, блокировать, удалить пользователя в *NIX (Debian)
С правами root. В примере пользователь krdprog
Добавить нового пользователя. Система запросит пароль (ввести 2 раза):
adduser krdprog
Блокировать пользователя:
passwd --lock krdprog
Удалить пользователя и всю его домашнюю директорию:
deluser --remove-home krdprog
Сменить пароль пользователя:
passwd
Определение ссылок на странице, их количества и типа через bash-скрипт
В справочнике по Linux нашёл описание UNIX-утилиты dog, но потом обнаружилось, что её убрали. Пока я её не нашёл, а нашёл замену. Работу средствами консольного браузера lynx.
Итак, напишем скрипт поиска внутренних ссылок на странице сайта (links.on.page.sh):
#!/bin/bash
#=======================================================================
# Скрипт поиска внутренних ссылок на странице сайта
#=======================================================================
URL="$1" ; # адрес страницы заданный через аргумент к скрипту
# уникальные внутренние ссылки:
GiveMeListUrlOnPage () {
lynx -dump -nonumbers -listonly $URL | grep $URL | sort | uniq ;
}
GiveMeListUrlOnPage ;
exit 0
Запускаем скрипт, поиск уникальных внутренних ссылок на странице сайта:
$ sh links.on.page.sh krdprog.ru
если надо сохранить в файл:
$ sh links.on.page.sh krdprog.ru > url.txt
если надо показать количество ссылок, то так:
$ sh links.on.page.sh krdprog.ru | wc -l
Можно определять также скрытые и внешние ссылки. Как использовать? Можно, дописать, например, определитель структуры сайта, или скрипт подготовки sitemap.xml, или в связке со скриптом достающим из ТОП-10 Яндекса адреса сайтов по конкретному ключевому слову, создать анализатор сайтов в ТОП Яндекса по словам (покажет для каждого сайта сколько ссылок на странице), а также разработать анализатор перелинковки сайтов.
ssh-keygen — авторизация по ssh без ввода пароля (по паре ключей RSA)
1. Генерация пары ключей:
ssh-keygen -b 2048 -t rsa -f ~/.ssh/sitename_key -C "Key for site"
2. Разложим ключи по местам:
Публичный ключ sitename_key.pub копируем на удалённый сервер в домашнем каталоге
создав каталог ~/.ssh и меняя название файла на authorized_keys
# выставим права на удалённом сервере:
~$ chmod 700 .ssh/
~$ chmod 600 .ssh/authorized_keys
3. Делаем короткую запись доступа к серверу (на локальной машине):
nano ~/.ssh/config
Содержимое файла ~/.ssh/config:
Host sitename
IdentityFile ~/.ssh/sitename_key
HostName 11.111.111.11
User usernameftp
# Тут мы сделали короткую запись, чтобы не вводить ssh usernameftp@11.111.111.11,
а набирать просто ssh sitename
Пробуем:
$ ssh sitename
Можно для копирования ключа использовать команду ssh-copy-id usrername@servername (попробую и при удачном опыте, допишу заметку).
screen (bash)
screen - запустить скрин
screen -S taskmane -t taskname - запустить скрин с именем taskname
screen -r taskname - открыть скрин с именем taskname
screen -x taskname - подключиться к скрину запущенному в другом терминале
Ctrl+a+d - свернуть скрин
ctrl+d - выйти из screen
screen -list - список активных скринов
Настроим screen. В файле ~/.screenrc надо добавить:
hardstatus on
hardstatus alwayslastline
hardstatus string "%w"
#shell /bin/bash
startup_message off
Упростим работу, создадим алиасы (в ~/.bashrc):
alias screen1='screen -S 1 -t 1'
alias screen2='screen -S 2 -t 2'
alias screen3='screen -S 3 -t 3'
alias screen4='screen -S 4 -t 4'
alias screen5='screen -S 5 -t 5'
alias screenr1='screen -r 1'
alias screenr2='screen -r 2'
alias screenr3='screen -r 3'
alias screenr4='screen -r 4'
alias screenr5='screen -r 5'
Теперь запускать скрины можно по команде screen1
Сворачивать по: ctrl+a+d
Разворачивать по: screenr1
и т.п. для каждого номера
Сравнение двух файлов. Сохранить в третий уникальные строки (bash)
grep -f ./file1 -vFx ./file2 > ./file3
Получим на выходе все строки из файла file2, которых нет в file1. Строки которые есть в file1 не выводятся. Уникальные строки сохраним в ./file3
Наброски скрипта с применением case (bash)
#!/bin/bash
# обработка фотографий в jpg
case "$1" in
jpg)
echo "Ок. Это jpg" ;
;;
jpeg|JPEG|JPG)
echo "Переименуем в jpg" ;
;;
png|PNG)
echo "Конвертируем png в jpg" ;
;;
gif|GIF)
echo "Конвертируем gif в jpg" ;
;;
*)
echo "Этот тип файла не поддерживается операцией" ; # все другие форматы
;;
esac
exit 0
Bash фукция с параметром
test_me () {
echo "Hello $1!"
}
test_me "Петрович";
Cоздание каталога для log-файлов (bash)
#!/bin/bash
# создание каталога для log-файлов
MkdirLog () {
if ! [ -d "./log" ] ; then
mkdir ./log ; # каталог ./log
fi ;
if ! [ -d "./log/$(date +%F)" ] ; then
mkdir ./log/$(date +%F) ; # каталог с текущей датой внутри каталога ./log
fi ;
LogDir="./log/$(date +%F)" ;
}
MkdirLog ;
exit 0
Проверка наличия файла из скрипта bash
YesOrNotFileFind () {
if ! [ -f "$1" ] ; then
echo "Файл $1 не найден" ;
else
echo "Файл $1 найден" ;
fi
}
# передадим в аргументе функции имя файла для проверки на наличие
YesOrNotFileFind "./list" ;
YesOrNotFileFind "./my.config" ;
-e Файл существует
-f Файл существует и это обычный файл
-r Файл существует и он доступен для чтения
-w Файл существует и он доступен для записи
-x Файл существует и он исполняемый
-L Файл существует и это символьная ссылка
-S Файл существует и это сокет
-d Директория существует
Количество строк в переменную (bash)
Пример: для файла list
ListSring="$(cat ./list | wc -l)" ;
или
ListSring="$(wc -l < ./list)" ;
Удалить N верхних строк в файле (bash)
Пример: удалить 10 первых строк из файла:
sed '1,10d' test.log > test.tmp.log && mv test.tmp.log test.log
или с переменной
HowManyLines=10 ;
tail -n $((`wc -l test.log | awk '{print $1}'`-$HowManyLines)) test.log > test.tmp.log && mv test.tmp.log test.log
Просмотр увеличивающегося log-файла в реальном времени (bash)
tail -f test.log
Очистка содержимого файла через /dev/null (bash)
cat /dev/null > test.log
Вывести конкретные строки из файла (bash)
Вывести с 1 по 6 строку из файла test.txt:
sed -n 1,6p test.txt
Вывести с 4 по 8 строку + строку номер 11 из файла test.txt:
sed -n -e 4,8p -e 11p test.txt
Вывести строку номер 5:
head -n 5 test.txt | tail -n 1
или
sed -n 5p test.txt
ИСКЛЮЧИТЬ ИЗ ВЫВОДА СТРОКИ (пример: исключим 1 и 2 строку из test.txt):
sed '1,2d' test.txt
Генерация случайного целого числа в диапазоне чисел (bash)
Пример: генерация 1 целого числа в диапазоне от 50 до 150
shuf -i 50-150 -n 1
Скрипт проверки битых ссылок. Используем curl
Напишу на базе curl, скрипт для SEO, который будет проверять битые ссылки на сайте.
curl -Lw '%{http_code}' -s -o /dev/null -I krdprog.ru
Выдаёт код 200 — страница существует
curl -Lw '%{http_code}' -s -o /dev/null -I krdprog.ru/dfhagjdsfyhja8
Выдаёт код 404 — страницы нет
Регулярные выражения Bash
\ - с обратной косой черты начинаются буквенные спецсимволы, а также он используется
если нужно использовать спецсимвол в виде какого-либо знака препинания;
^ - указывает на начало строки;
$ - указывает на конец строки;
* - указывает, что предыдущий символ может повторяться 0 или больше раз;
+ - указывает, что предыдущий символ должен повторится больше один или больше раз;
? - предыдущий символ может встречаться ноль или один раз;
{n} - указывает сколько раз (n) нужно повторить предыдущий символ;
{N,n} - предыдущий символ может повторяться от N до n раз;
. - любой символ кроме перевода строки;
[az] - любой символ, указанный в скобках;
х|у - символ x или символ y;
[^az] - любой символ, кроме тех, что указаны в скобках;
[a-z] - любой символ из указанного диапазона;
[^a-z] - любой символ, которого нет в диапазоне;
\b - обозначает границу слова с пробелом;
\B - обозначает что символ должен быть внутри слова, например, ux совпадет с uxb
или tuxedo, но не совпадет с Linux;
\d - означает, что символ - цифра;
\D - нецифровой символ;
\n - символ перевода строки;
\s - один из символов пробела, пробел, табуляция и так далее;
\S - любой символ кроме пробела;
\t - символ табуляции;
\v - символ вертикальной табуляции;
\w - любой буквенный символ, включая подчеркивание;
\W - любой буквенный символ, кроме подчеркивания;
\uXXX - символ Unicdoe.
Подробнее: https://losst.ru/regulyarnye-vyrazheniya-linux http://www.bash-scripting.ru/abs/chunks/ch17.html http://www.k-max.name/linux/ispolzovanie-regulyarnyx-vyrazhenij-regex-v-linux/ http://www.opennet.ru/docs/RUS/bash_scripting_guide/c11895.html
Год, месяц, день, час, минуты (bash)
Запишем в файл с датой и временем:
echo "Hello!" > $(date +%Y-%m-%d-%H-%M).txt
Операции сравнения в bash-скриптах
Сравнение целых чисел:
-eq равно
if [ "$a" -eq "$b" ]
-ne не равно
if [ "$a" -ne "$b" ]
-gt больше
if [ "$a" -gt "$b" ]
-ge больше или равно
if [ "$a" -ge "$b" ]
-lt меньше
if [ "$a" -lt "$b" ]
-le меньше или равно
if [ "$a" -le "$b" ]
< меньше (внутри двойных круглых скобок )
(("$a" < "$b"))
<= меньше или равно (внутри двойных круглых скобок)
(("$a" <= "$b"))
знак > больше (внутри двойных круглых скобок)
(("$a" > "$b"))
знак >= больше или равно (внутри двойных круглых скобок)
(("$a" >= "$b"))
Архив журнала Linux Format
http://www.linuxformat.ru/archive
Конвертация файлов .csv в .xls и не только (ssconvert)
Конвертация одиночного файла:
ssconvert file.csv file.xls
или
ssconvert -T Gnumeric_Excel:excel_biff8 file.csv
Узнать в какие форматы можно конвертировать:
ssconvert --list-exporters
Если надо сконвертировать .csv в .html
ssconvert -T Gnumeric_html:xhtml file.csv
Если надо сконвертировать .csv в .pdf
ssconvert -T Gnumeric_pdf:pdf_assistant file.csv
Можно конвертировать из любого доступного формата в любой (доступный для конвертации данной утилитой):
ID | Description
Gnumeric_lpsolve:lpsolve | Решатель линейных программ LPSolve
Gnumeric_sylk:sylk | MultiPlan (SYLK)
Gnumeric_html:roff | TROFF (*.me)
Gnumeric_html:latex_table_visible | LaTeX 2e (*.tex) table fragment of visible rows
Gnumeric_html:latex_table | LaTeX 2e (*.tex) фрагмент таблицы
Gnumeric_html:latex | LaTeX 2e (*.tex)
Gnumeric_html:xhtml_range | Блок XHTML для экспорта в буфер обмена
Gnumeric_html:xhtml | XHTML (*.html)
Gnumeric_html:html40frag | Фрагмент HTML (*.html)
Gnumeric_html:html40 | HTML 4.0 (*.html)
Gnumeric_html:html32 | HTML 3.2 (*.html)
Gnumeric_Excel:xlsx2 | ISO/IEC 29500:2008 & ECMA 376 2ое издание (2008); [MS Excel™ 2010]
Gnumeric_Excel:xlsx | ECMA 376 1ое издание (2006); [MS Excel™ 2007]
Gnumeric_Excel:excel_dsf | MS Excel™ 97/2000/XP & 5.0/95
Gnumeric_Excel:excel_biff7 | MS Excel™ 5.0/95
Gnumeric_Excel:excel_biff8 | MS Excel™ 97/2000/XP
Gnumeric_dif:dif | Формат обмена данными (*.dif)
Gnumeric_glpk:glpk | Решатель линейных программ GLPK
Gnumeric_OpenCalc:odf | ODF 1.2 extended conformance (*.ods)
Gnumeric_OpenCalc:openoffice | ODF 1.2 strict conformance (*.ods)
Gnumeric_stf:stf_csv | Значения разделённые запятыми (CSV)
Gnumeric_stf:stf_assistant | Текст (настраиваемый)
Gnumeric_XmlIO:sax:0 | Gnumeric XML несжатый (*.xml)
Gnumeric_XmlIO:sax | Gnumeric XML (*.gnumeric)
Gnumeric_pdf:pdf_assistant | Экспорт в PDF
Установить на linux:
sudo apt install gnumeric
БОНУС:
Конвертировать все файлы в каталоге из .csv в .xls и .csv в .html и разложить по каталогам xls и html:
mkdir xls html ;
find * -maxdepth 0 -type f -print0 | xargs -0 -n 1 ssconvert -T Gnumeric_Excel:excel_biff8 && find *.xls -print0 |
xargs -0 -i mv {} xls/ ;
find * -maxdepth 0 -type f -print0 | xargs -0 -n 1 ssconvert -T Gnumeric_html:html40 && find *.html -print0 |
xargs -0 -i mv {} html/ ;
Действия с файлами в каталоге (bash)
Найти все файлы ТОЛЬКО в данном каталоге (без учёта вложенных каталогов), и выполнить действие.
find * -maxdepth 0 -type f -print0 | xargs -0 -n 1 -i mv {} foo/
# в качестве примера: перенесёт все файлы в каталог foo
Узнать сколько строк в каждом файле и записать результат в файл (bash)
Пригодится для написания seo-скриптов (работы с семантическим ядром и т. п.)
find * -maxdepth 0 -type f -print0 | xargs -0 wc -l >> how-many-words.txt
Вынести конфигурацию за пределы скрипта (bash)
Можно вынести переменные конфигурации в отдельный файл и затем подгрузить их в скрипт.
Вставить в скрипт:
. ./имя_файла
Пример:
. ./yandex.config
Консольные файловые менеджеры
mc
ranger
Повторить команду N раз (bash)
for i in {1..30} ; do echo "Hi!" ; done
Добавить символы в начале и в конце каждой строки
# добавить символы в начале каждой строки используя AWK
awk '{print "текст"$0}' file
# добавить символы в начале каждой строки используя SED
sed 's/^/текст/' file
# добавить символы в конце каждой строки используя AWK
awk '{print $0"текст"}' file
# добавить символы в конце каждой строки используя SED
sed 's/$/текст/' file
# добавить символы в начале и в конце каждой строки используя AWK
awk '{print "в_начале"$0"в_конце"}' file
# добавить символы в начале и в конце каждой строки используя SED
sed "s/.*/в_начале&в_конце/" file
sed: убрать пустые строки и строки комментариев
sed -e '/^$/d' -e '/^#/d' ttt.txt
Найти текст в файлах во всех вложенных каталогах
grep -r "искомый текст" ~/work
sort | uniq
sort | uniq
uniq убирает дубли только если они идут подряд, а не в разброс. Чтобы этого добиться, нужно использовать sort.
Получить значение: количество строк
wc -l
Краткое руководство по less (пейджер)
s
less file.txt # программа пейджер (просмотр длинных файлов)
q - выход f - пролистать на страницу вперёд b - пролистать на страницу назад g - вверх документа G - вниз документа j - вниз на строку k - вверх на строку h - вызвать справку
/искомоеслово - поиск слова n - далее по поиску shift + n - предыдущий результат
Как указать xargs куда подставлять данные
Команда xargs — по умолчанию вставляет в качестве аргумента в конец передаваемой команде.
Если при конструировании второй команды надо явно указать место, куда должны попасть выходные данные первой, достаточно воспользоваться парой фигурных скобок, {} и параметром -i для замены аргумента в нужном месте.
<команда 1> | xargs -i <команда 2> {} <команда 2-2>
Создать файл во всех вложенных каталогах (bash)
Имея вложенные каталоги dir01, dir02, … dir500, надо создать в них файл zz.txt
for i in dir* ; do touch $i/zz.txt ; done
Генератор пароля (bash)
tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 | xargs
Или используйте pwgen
сложный пароль:
pwgen -1sBnc 40 1
получится примерно так: 4mdM3dAzNNhqhHxxvpeTVpkioWMNFTxERTvRLLHj
или ещё сложнее пароль:
pwgen -1sBny 40 1
получится примерно так: ~p`T&n[?V`f\HrK#-,g.[=$.|H)?'po9+[-]wy,v
установить pwgen:
sudo apt-get install pwgen
sed
8d - удалить 8-ую строку
/^$/d - удалить все пустые строки
1,/^$/d - удалить все строки до первой пустой строки, включительно
/Foo/d - вывести строки, содержащие 'Foo' (с ключом -n)
s/Foo/Bar/ - в каждой стоке заменить первое встретившееся слово Foo на слово Bar
s/Foo/Bar/g - в каждой стоке заменить все встретившиеся слова Foo на Bar
s/ *$// - удалить все пробелы в конце каждой строки
s/00*/0/g - заменить все последовательности нулей одним символом 0
/Foo/d - удалить все строки со словом Foo
s/Foo//g - удалить все найденные Foo, оставляя остальную чать строки без изменений
Знакомство с текстовыми утилитами UNIX
Использование стандартных утилит операционной системы для работы с текстом
Оставлю тут ссылку на крайне полезную статью: https://www.ibm.com/developerworks/ru/library/au-unixtext/index.html
Нумерация строк через точку с запятой (для формирования .csv файла)
Если нам нужен номер строки для дальнейшего использования этих данных в csv файле, то поможет команда nl
nl -s';'
man (по-русски)
Мануалы команд GNU/Linux переведённые на русский язык.
Тут: http://www.opennet.ru/man_1.shtml
man wget (по-русски)
Тут: http://www.opennet.ru/man.shtml?topic=wget
Конвертация аудиофайла m4a в mp3
ffmpeg -i input.m4a -acodec libmp3lame -ab 128k output.mp3
Скобки {} и []
Создать 30 файлов типа file01.txt — используется конструкция {01..30}
touch file{01..30}.txt
Найти с 04 по 08 файлы — используется конструкция [4-8]
find file0[4-8].txt
grep (поиск) по нескольким словам
grep -e "word1" -e "word2"
Работа с файлами в нескольких каталогах
Скопировать файл zz.txt во все вложенные каталоги:
find * -type d | xargs -n 1 cp zz.txt
или можно так :
for i in $(find * -type d) ; do cp zz.txt $i ; done
Удалить файл zz.txt во всех вложенных каталогах:
find * -name zz.txt | xargs rm
# ОСТОРОЖНО! Удаляет файл и в текущем каталоге тоже.
Узнать время работы скрипта
time script.sh
Вывести дату bash
date +%F
Заменить foo на bar во всех файлах каталога
find -type f -print0 | xargs -0 sed -i 's/foo/bar/g'