Syntax highlighting of linux/cli

<<TableOfContents()>>

= Comand Line Interface =

== Полезные ссылки ==

[[https://habrahabr.ru/post/114082|Обзор практически всех *top утилит под linux]]

== Информация о системе ==

Информация об ОС

{{{#!highlight bash
cat /etc/os-release 
# PRETTY_NAME="Ubuntu 23.04"
# NAME="Ubuntu"
# VERSION_ID="23.04"
# VERSION="23.04 (Lunar Lobster)"
# VERSION_CODENAME=lunar
# ...

# --- краткое наименование ОС
cat /etc/issue
Ubuntu 23.04 \n \l

# --- отображение информации о системе (ОС, железо)
sudo apt install screenfetch
screenfetch
                          ./+o+-       zoid@npc
                  yyyyy- -yyyyyy+      OS: Ubuntu 23.04 lunar
               ://+//////-yyyyyyo      Kernel: x86_64 Linux 6.2.0-25-generic
           .++ .:/++++++/-.+sss/`      Uptime: 5h 29m
         .:++o:  /++++++++/:--:/-      Packages: 2959
        o:+o+:++.`..```.-/oo+++++/     Shell: bash
       .:+o:+o/.          `+sssoo+/    Resolution: 4480x1440
  .++/+:+oo+o:`             /sssooo.   DE: GNOME 44.0
 /+++//+:`oo+o               /::--:.   WM: Mutter
 \+/+o+++`o++o               ++////.   WM Theme: Adwaita
  .++.o+++oo+:`             /dddhhh.   GTK Theme: Yaru [GTK2/3]
       .+.o+oo:.          `oddhhhh+    Icon Theme: Yaru
        \+.++o+o``-````.:ohdhhhhh+     Font: Ubuntu 11
         `:o+++ `ohhhhhhhhyo++os:      Disk: 188G / 228G (88%)
           .o:`.syhhhhhhh/.oo++o`      CPU: AMD Ryzen 7 2700X Eight-Core @ 16x 3,7GHz
               /osyyyyyyo++ooo+++/     GPU: NVIDIA GeForce GTX 1660
                   ````` +oo+++o\:     RAM: 7075MiB / 15927MiB
                          `oo++.      

}}}

CPU

{{{#!highlight bash
# --- все процессоры, частоты, флаги и многое другое
cat /proc/cpuinfo
lscpu
# --- средняя загрузка процессора за последние 1, 5, и 15 минут
cat /proc/loadavg
# --- при нажатии на клавишу C все процессы будут отсортированы по использованию CPU
top
}}}

RAM

{{{#!highlight bash
# --- количество RAM и swap, а так же сколько и чем расходуется
cat /proc/meminfo
# --- полный объем, использованный объем и объем свободной памяти в Mb
free -mh
# --- при нажатии на клавишу M все процессы будут отсортированы по использованию оперативной памяти
top
}}}

Graphics

{{{#!highlight bash
# --- информация OpenGL, Xserver и вашей видеокарте
glxinfo
# --- проверка поддержки "direct 3D rendering"
glxinfo | grep direct
# --- производитель видеокарты
glxinfo | grep vendor
# --- модель видеокарты
lspci | grep VGA
# --- простой 3D тест, печатает fps в терминале
glxgears
# --- поддерживаемые монитором разрешения
xrandr
}}}

Audio

{{{#!highlight bash
# ---  аудио-контроллеры
lspci | grep Audio
# --- расширенная информация об аудио-контроллере
aplay --list-devices
}}}

Misc

{{{#!highlight bash
# --- шины USB и подключённые устройства
lsusb
# --- мониторинг за изменениями в оборудовании
lshal -m 
# --- все PCI-устройства
lspci
# --- детальная информация по всему оборудованию (требуется пакет hwinfo)
hwinfo --short
# ---  время, прошедшее с момента последней перезагрузки, пользователи и средняя загрузка
uptime
}}}

== Поиск файлов ==

Поиск

{{{#!highlight bash

# --- найти конкретный файл
find / -name 'postgresql.conf'

# --- найти все файлы по шаблону в текущей директории
find . -type f -name '*.rb'

# --- не учитывать регистр при поиске по имени:
find . -iname "test*"

# --- поиск файлов по имени только в текущей папке:
find . -maxdepth 1 -name "*.php"

# --- найти файлы в директории, которые не соответствуют шаблону:
find /some/path -not -name "test*"

# --- найти все jar-файлы и исключить результаты, которые содержат поддиректорию tmp
find . -not -regex '.*/tmp/.*' -name '*.jar'

# --- найти все файлы с раширением .html или .php:
find /some/path -name "*.html" -o -name "*.php"

# --- найти все файлы, принадлежащие пользователю evgeniy:
find /some/path -user evgeniy

# --- найти все файлы размером 50 мегабайт:
find /some/path -type f -size 50M

# --- найти все файлы от пятидесяти до ста мегабайт:
find /some/path -type f -size +50M -size -100M

}}}

Поиск и замена

{{{#!highlight bash

# --- замена всех вхождений в файлах директории
find . -name '*.php' -exec sed -i -e 's/www.fubar.com/www.fubar.ftw.com/g' {} \;

}}}

Поиск и удаление

{{{#!highlight bash

# --- поиск файлов и удаление найденных
find / -name .DS_Store -exec rm {} +

# --- удалить все log-файлы больше 100 мегабайт:
find /home/evgeniy/log -type f -name "*.log" -size +100M -exec rm -f {} \;
find /home/evgeniy/log -type f -name "*.log" -size +100M -exec rm -f {} +

}}}

Поиск и что-то еще...

{{{#!highlight bash

# --- найти и посчитать количество найденных файлов
find . -type f -name '*.rb' | wc -l

# --- вывести 10 первых строк каждого найденого файла записать в sources.txt
find . -type f -name '*.rb' -print -exec head  {} \; > sources.txt

# --- найти файлы по wildcard с отображением размера
find -name '*abcd*' -print0 | xargs -0 ls -l

# --- поиск заданной строки в файлах, найденных через find (в большом количестве файлов)
#    (1) ищем файлы по имени (2) ищем в найденных те, которые содержат заданный контент
find ../xml/223/77/ -type f -name 'purchaseNotice_*' | xargs grep 'jointPurchase>true' | head

# --- (1) ищем файлы по имени (2) ищем в найденных те, которые НЕ содержат заданный контент
find ../xml/223/77/ -type f -name 'purchaseNotice_*' | xargs grep -L '<jointLotData>' | head

# --- поиск файла внутри архивов в заданной директории
for f in *.zip; do echo "$f: "; unzip -l $f | grep <filename>; done

# --- поиск заданной строки внутри архива
zgrep 'article15FeaturesInfo' notifications/*
}}}

== Работаем с архивами ==

{{{#!highlight bash
# === zip
# --- создание архива
zip -r output_file.zip file1 folder1
# --- список файлов в архиве
unzip -l file.zip
# --- распаковать в текущую директорию
unzip file.zip

# === tar
# --- создать .tar
tar -cvf file.tar rel/path
# --- распаковать .tar
tar -xvf archive.tar
# --- распаковать .tar в заданную директорию
tar -xf archive.tar -C /target/directory

# === tar.gz
# --- создаем архив
tar -czvf file.tar.gz rel/path
# --- распаковываем архив
tar -xvf file.tar.gz [-C /abs/path]

# === tar.bz2
# --- создать архив .tar.bz2
tar -cjvf file.tar.bz2 /full/path 

# === 7zip
sudo apt-get install p7zip-rar p7zip-full
}}}

== Сколько? ==

{{{#!highlight bash
# --- количество байтов в выводе другой команды
output=$(your_program)
size=$(echo "$output" | wc -c)
echo "Size in bytes: $size"

# --- количество файлов в текущей директории и поддиректориях
ls -laR | grep "^-" | wc
}}}

== Grep ==

{{{#!highlight bash
# --- grep in grep in grep
#     grep by multipal strings in files ("grep AND")
# на вход команды grep можно передать ограниченное кол-во файлов (команда head)
grep -rl 'Rejected' $(grep -rl 'admissionResults' $(grep -rl 'fcsProtocolEF1' . | head -n 1000))

}}}


== Разное ==

{{{#!highlight bash
# --- отображаем заголовок файла
head /some/file.txt
#    первые N строк файла
head -N /some/file.txt

# --- отображаем хвост файла
tail /some/file.txt
#     крайние N строк файла
tail -N /some/file.txt

# --- отображение файла с номерами строк
nl /some/file.txt

# ---- отображение файла с разбиением на страницы
more /some/file.txt


# --- кодируем FILANEM из кодировки WINDOWS-1251 в UTF-8
iconv -f WINDOWS-1251 -t UTF-8 FILENAME

# --- Конкатенация файлов
#     добавление вывода cat в файл all.txt
cat *.txt >> all.txt
#    перезапись файла all.txt выводом cat
cat *.txt > all.txt

# --- замена всех вхождений в файле и запись результата в отдельный файл
sed s/mysql/MySQL/g /some/file.txt > file2.txt
}}}