Файлы и каталоги
awk - обработка и фильтрация текста
awk [опции] 'условие{действие}'
Опции:
-F - каой разделитель полей, используется для разбиения текста на колонки;
-f -прочитать данные не из стандартного вывода, а из файла;
-v - присвоить значение переменной, например foo=bar;
-d - вывести значения всех переменных awk по умолчанию;
-D - режим отладки, позволяет вводить команды интерактивно с клавиатуры;
-e - выполнить указанный код на языке awk;
-o - вывести результат работы программы в файл;
Функции действий
print(строка) - вывод чего либо в стандартный поток вывода;
printf(строка) - форматированный вывод в стандартный поток вывода;
system(команда) - выполняет команду в системе;
length(строка) - возвращает длину строки;
substr(строка, старт, количество) - обрезает строку и возвращает результат;
tolower(строка) - переводит строку в нижний регистр;
toupper(строка) - переводить строку в верхний регистр.
Переменные и операторы
$ - ссылка на колонку по номеру.
FNR - номер обрабатываемой строки в файле;
FS - разделитель полей;
NF - количество колонок в данной строке;
NR - общее количество строк в обрабатываемом тексте;
RS - разделитель строк, по умолчанию символ новой строки;
BEGIN - выполнить команду до обработки данных
END - выполнить команту после обработки даных
Примеры:
1. Вывести 6.2, 5 колонки вывода ls -l.
2. Вывести тоже самое из файла my_file.
1. #ls -l | awk '{print $6, $2, $5}'
2. #awk '{print $6, $2, $5}' my_file
Добавить к первому столбцу вывода ls текст "my text"
#ls -l | awk '{print "my text"$1}'
Если разделитель не пробелы, а допустим ":"
#ls -l | awk -F":" '{print $1}'
Если в выводе неизвестное количество полей, то последнее поле можно указать переменной NF, а предпоследнее NF-1
#ls -l | awk '{print $(NF-1)}'
Найти значение "192.168" в выводе команде "ip a" и вывести 2-ой столбец
#ip a | awk '/192.168/{print $2}'
Напечатать первое поле каждой записи, второе поле которой содержит/не содержит "ia" в фале my_file
#awk '$2 ~ /ia/ {print $1}' my_file
#awk '$2 !~ /ia/ {print $1}' my_file
Напечатать первое поле той записи, у которой третье поле больше 50, а четвертое поле меньше 30:
#awk '$3 > 50 && $4 < 30 {print $1}' my_file
Вывести все поля вывода, кроме первого и третьего поля:
#cat file | awk '{$1=""; $3=""; print $0}'
Посчитать сумму чисел в определенном столбце. Предположим, что мы хотим посчитать сумму переданных данных, которые в логе находятся в 10-ом столбце:
#cat /appache2/log.1 | awk '{totalBytes+=$10} END {print totalBytes}'
cat / tac - просмотр содержимого файла в прямом / обратном направлении
cat [опции] файл1 файл2
Опции:
-b - нумеровать только непустые строки;
-E - показывать символ $ в конце каждой строки;
-n - нумеровать все строки;
-s - удалять пустые повторяющиеся строки;
Примеры:
Прочитать и пронумеровать file1 file2 и записать вывод в file3
#cat -n file1 file2 > file3
Прочитать file с конца в начало
#tac file
cp - копирование файлов
cp [опции] /путь_к_источнику /путь_назначения
Опции:
-v, --verbose - максимально подробный вывод
-r, --recursive - копировать папку рекурсивно;
-x, --one-file-system - рекурсивное копирование не должно выходить за пределы этой файловой системы
-f, --force - удалить файл назначения перед попыткой записи в него если он существует;
-i, --interactive - спрашивать, нужно ли перезаписывать существующие файлы;
-u, --upgrade - скопировать файл, только если он был изменён;
-n, --no-clobber - не перезаписывать существующие файлы;
--preserve - переносить указанные атрибуты с файла источника в файл назначения, возможные значения: mode, ownership, time‐stamps, context, links, xattr, all;
-p - сохранять владельца, временные метки и флаги доступа при копировании, аналогично --preserve=mode,ownership,timestamps;
--parents - сохранять путь, указанный в файле источнике, в папке назначения;
--attributes-only - не копировать содержимое файла, а только флаги доступа и владельца;
-b, --backup - создать резервную копию файла назначения если он существует;
--copy-contents - копировать содержимое для специальных файлов (сокеты, файлы устройств);
-P, --no-dereference - копировать сами символические ссылки, а не то на что они указывают;
-L, --dereference - копировать не символические ссылки, а то, на что они указывают;
-l, --link - создавать жесткие ссылки вместо копирования;
-s, --symbolic-link - не выполнять копирование файлов в Linux, а создавать символические ссылки;
-a - режим резервного копирования, при котором сохраняются все атрибуты, ссылки, а также выполняется резервное копирование папок
Дополнительно:
mode - права доступа, сюда входит чтение, запись, выполнение и дополнительные флаги;
ownership - владелец и группа;
time‐stamps - временные метки, такие как дата обновления, дата создания и дата последнего доcтупа;
context - контекст SELinux;
links - сохранение жестких ссылок;
xattr - дополнительные атрибуты, которые настраиваются с помощью команды chattr;
all - всё выше перечисленное.
cut - вырезать часть текста
cut [опции] файл
Команда удаляет секции текста, которые были обозначены при помощи байтов, символов или полей, разделенных знаками "-" и ":"
Опции:
-b - номер или диапазон байтов, подлежащих вырезанию.
-c - символ, который следует вырезать.
-d - с помощью этой опции пользователь устанавливает свой разделитель вместо стандартного TAB.
-f - перечень полей для вырезания.
-s - если была применена эта опция, cut не выводит строки, где нет разделителя.
--complement - задает байты, символы или поля, которые останутся в файле или тексте из стандартного ввода. Все остальное будет вырезано.
Примеры:
Вырезать из вывода команды байты 1,3,5 (для символов аналогично)
#echo "Hello" | cut -b 1,3,5
#echo "Hello" | cut -c 1,3,5
Hlo
Вырезать из вывода команды байты с 1 по 4
#echo "Hello" | cut -b 1-4
Hell
Вырезать из текста байты с 5 до конца строки / первые 3 байта
#cut -b 5- /etc/file
#cut -b -3 /etc/file
Вырезать из файла слова с 1-го по 3-ий, разделенные пробелом
#cut -d ' ' -f1-3 /tmp/file
#cut -d ' ' -f1,2,3 /tmp/file
diff- сравнение файлов
diff [опции] файл1 файл2
Команда diff служит для сравнения двух файлов.
В выводе команды отличающиеся строки помечаются символами > и <:
> - отличие строк во втором файле (нет такой в первом файле или не идентичны)
< - отличие строк в первом файле (нет такой во втором файле или не идентичны)
и буквами:
a - добавлена;
d - удалена;
c - изменена.
Опции:
-i - игнорировать регистр
-l - разделить на страницы и добавить поддержку листания
-y - выводить в две колонки
-r - рекурсивное сравнение папок
-b - не учитывать пробелы;
-B - не учитывать пустые строки.
df / du - занятое место ФС
df [опции] устройство
Основное использование:
df -Th - занятое место на диске с указанием типа файловой системы
df -ih - занятое место под i-ноды
du [опции] /путь_к_папке
Опции:
-a - выводить размер для всех файлов, а не только для директорий;
--exclude - исключения из вывода
-c - выводить в конце общий размер всех папок;
-d, --max-depth - максимальная глубина вложенности директорий;
-h - выводить размер в единицах измерения удобных для человека;
-S - не включать размер подпапок в размер папки;
-s - выводить только общий размер;
--time - отображать время последней модификации для файла или папки, вместо времени модификации можно выводить такие метки: atime, access, use, ctime;
-x - пропускать примонтированные файловые системы;
Примеры:
Вывести общий размер каталога var / подкаталогов var, отсортировать по размеру
#du -sh /var
#du -sh /var/* | sort -rh
Вывести размер файлов каталога /var и подкаталогов с файлами каталога /var, исключив каталоги и файлы, содержащие "log". Отсортировать по размеру и вывести 20 самых больших файлов.
Вариант 1: #du -sh --exclude "log" /var/* | sort -rh | head -n 20
Вариант 2: #du -a --max-depth 1 --exclude "log" /var/ | sort -nr | head -n 20
find - поиск файлов
find [папка] [параметры] критерий шаблон [действие]
Полезные параметры:
-xdev - не спускаться по директориям на других файловых системах
-maxdepth число - спускаться на максимум число (неотрицательное целое число) уровней директорий
-mindepth уровни - mindepth 1 означает обрабатывать все файлы, кроме начальных точек
-gid n - числовой ID группы файла равен n.
-group gname - файл принадлежит группе gname
-ilname шаблон - как -lname, но совпадение не чувствительно к регистру
-inum n - файл имеет номер иноды n.
-links n - файл имеет n ссылок.
-nogroup - нет групп, соответствующих числовому ID группы, к которой принадлежит файл.
-nouser - нет пользователя, соответствующему числовому ID пользователя, которому принадлежит файл.
-type тип - тип файла: b (блочный), с (символьный), d (директория), f (файл), l (символьная ссылка), s (сокет)
-uid n - числовой ID пользователя файла равен n.
-used n - последний раз к файлу был совершён доступ n дней после последнего изменения его статуса.
-user uname - файл принадлежит пользователю uname
Поиск по имени
find / -name a.out – найти начиная с корня имена файлов, содержащие a.out
find /home -name "*.txt" – найти в /home файлы по маске *.txt
find / -name "*.tmp" -exec rm {}+ - найти файлы по маске *.tmp и удалить их
find / -name "*.tmp" -exec pwd \; - найти файлы по маске *.tmp и вывести путь
Поиск по размеру файла
find /home/ -size +100М -size -150М – найти файлы в home размером от 100 до 150 МБ
find / -size +1G - найти файлы больше одного Гбайта [c - байты, k - килобайты, М - мегабайты]
Поиск по дате создания, измениния, последнего доступа
find / -type f -newermt "2023-10-19 00:47" ! -newermt "2023-10-19 00:53" - поиск измененных файлов в промежутке 2023.10.19 00:47 - 00:53
find / -mtime +50 -mtime -100 - найти файлы, измененные от 50 до 100 дней назад
find / -atime 50 - найти файлы, открые ровно 50 дней назад
find / -ctime 10 - найти файлы, созданные 10 дней назад
find . -cmin +1 -cmin -10 - найти файлы в текущей дирректории, созданные от 1-ой до 10 минут назад (если опции amin или mmin - то это соответственно открытые и измененные)
Поиск изменненых файлов, после выполнения какой-либо команды
Перед выполнением команды создаем файл, например /tmp/metka Выполняем команду, например useradd Vasya. Теперь, чтобы найти, какие файлы изменились в ОС, выполняем:
find / -type f -newer /tmp/metka ! -path '/proc/*' ! -path '/run/*' ! -path '/sys/*'
т.е. мы находим файлы (-type f) начиная с корня, которые новее (-newer) файла /tmp/metka при этом исключив (! -path ..) не нужные каталоги (процессы) из вывода.
Разное
find / -iname FiLe -xdev - поиск FiLe без учета регистра и не спускаться по директориям на других файловых системах.
find / -type f -name name_file - найти только файлы name_fale. -type d - тоже самое, только директории.
find . -size Ос (find / -empty) – найти файлы нулевого размера в текущей директории
find / -type f -user John - найти только файлы (без каталогов), владелец которых John
find / -maxdepth 1 -name file - ограниить глубину поиска файла file текущим каталогом
grep - поиск в выводе команды и в файлах
grep [опции] шаблон [имя файла...]
Основные опции:
-i - не учитывать регистр;
-r - рекурсивный поиск в каталоге;
-n - показывать номер строки в файле;
-o - вывести только найденое согласно шаблона поиска;
-e - использовать регулярные выражения при поиске;
-v - имитация условия NOT;
-An - показать вхождение и n строк до него;
-Bn - показать вхождение и n строк после него;
-Cn - показать n строк до и после вхождения;
Примеры использования
поиск слова user без учета регистра в файле passwd
#grep -i "user" /etc/passwd
поиск слова user во всех файлах каталога /etc/ и его подкаталогах
#grep -r "user" /etc/
поиск точного совпадения abc. В данный вывод не попадет например abcd
#grep -w "abc" /etc/passwd
выделение цветом найденого слова
#grep --color "user" /etc/passwd
поиск в файлах, начинающихся на "messages", слова "err" без учета регистра
#grep -i err /var/log/messages*
С помощью флагов -A, -B или -C со значением num можно выводить строки выше или ниже (или и то, и другое) совпавшей строки. -A строка которая следует сразу после соответствующей строки поиска, -B - перед строкой, -C до и после соответствующей строки.
Следующий пример выводит две строки до и одну после найденого совпадения
#grep -B2 -A1 -i err /var/log/messages*
grep NOT (не) - поиск строк, не содержащих слова "user"
#grep -v "user" /var/log/messages
grep AND (и) - поиск строк в passwd, содержащих в одной строке "user" и "nologin"
#cat /etc/passwd | grep -E "user" | grep -E "nologin"
или
#grep -E "user" /etc/passwd | grep -E "nologin"
grep OR (или) - поиск строк, содержащих одно из значений "user" или "nologin"
#grep -e "user" -e "nologin" /etc/passwd
или
#cat /etc/passwd | grep -e "user" -e "nologin"
ln- жесткие и символьные ссылки
ln [опции] файл_источник файл_ссылки
Опции:
-s – создать символическую ссылку
Cоздать символическую / жесткую ссылку link_file в каталоге /tmp на файл /etc/passwd
#ln -s /etc/passwd /tmp/link_file
#ln /etc/passwd /tmp/link_file
Найти все символические / жесткие ссылки на файл file1
#find / -lname "file1"
#find / -samefile file1
Символические ссылки:
- Могут ссылаться на файлы и каталоги;
- После удаления, перемещения или переименования файла становятся недействительными;
- Права доступа и номер inode отличаются от исходного файла;
- При изменении прав доступа для исходного файла, права на ссылку останутся неизменными;
- Можно ссылаться на другие разделы диска;
- Содержат только имя файла, а не его содержимое
По сути символьные ссылки - это аналог ярлыка в ОС Windows
Жесткие ссылки:
- Работают только в пределах одной файловой системы;
- Нельзя ссылаться на каталоги;
- Имеют ту же информацию inode и набор разрешений что и у исходного файла;
- Разрешения на ссылку изменяться при изменении разрешений файла;
- Можно перемещать и переименовывать и даже удалять файл без вреда ссылке.
ls- просмотр содержимого каталога
ls [опции] путь
Опции:
-a показывать все файлы, в том числе скрытые
-l использовать широкий формат
-d не выводить содержимое поддерикторий
-n, --numeric-uid-gid как -l, но выдавать числовые UID и GID
-lt сортировать и показывать по ctime (времени последнего изменения файла)
-r, --reverse обратный порядок сортировки
-lh печатать размеры в удобном для человека виде
-i, --inode показывать иноду каждого файла
-R, --recursive рекурсивно показывать каталоги
-S сортировать по размеру файлов, большие сначала
-1 перечислять по одному файлу на строке.
$ ls -l - подробный вывод с разрешениями для файлов
drwxr-xr-x 4 a1 root 4096 дек 27 18:36 apt
расшифровка вывода команды ls -l
d - директория (- обычный файл, l -символическая ссылка, b - блочное устройство, с - символьный файл, p - тунели, s - сокеты)
rwx - разрешения для владельца, группы, всех остальных,
а1 - владелец
root - группа
4096 - размер
дек 27 18:36 - время модификации файла
apt - каталог или файл, описанный в этом примере
Примеры:
$ ls -l - подробный вывод с разрешениями для файлов
$ ls -l | more - постраничный подробный вывод
$ ls -a /var/log - просмотр всех файлов и каталогов в соответствующем каталоге
$ ls -a /var/log/b* - просмотр всех файлов и каталогов в каталоге /var/log/ начинающихся на b с выводом содержимого поддиректорий
$ ls -d /var/log/b* - просмотр всех файлов и каталогов в каталоге /var/log/ начинающихся на b без вывода содержимого поддиректорий
$ ls -a /var/log/*ba* - просмотр всех файлов и каталогов в каталоге /var/log/ содержащие "ba" в имени
mkdir - создать каталог
mkdir [опции] директория
Опции:
-v - выводить сообщение о каждой создаваемой директории
-m - устанавливает права доступа для создаваемой директории
-p - cоздать все директории, которые указаны внутри пути
Кроме этого можно использовать диапазоны {A..Z} и {1..n}
Создать директорию /dir с правами 700
#mkdir -m 700 /dir
Создать все директории по пути /dir1/dir2/dir3. При создании выводить подробную информацию.
#mkdir -pv /dir1/dir2/dir3
В результате будут созданы все 3 каталога, т.е. будет создан каталог dir1, в каталоге dir1 каталог dir2, в каталоге dir2 каталог dir3.
Создать директории dir_A1, dir_A2 ... dir_C1, dir_C2
#mkdir -pv dir_{A..C}{1..2}
Создать директории dir1 - dir3 и в каждой поддиректории каталоги inA - inD
#mkdir -pv dir{1..3}/in{A..D}
more, less - постраничный просмотр
more [опции] файл
less [опции] файл
Опции аналогичные:
-n - отображение вывода по n строк
+n - отображать вывод с n-ой строки
+/искомое_слово - начинать вывод с искомого слова
Горячие клавиши:
! команда - выполнить команду
v - открыть в редакторе
f,b - переход на страницу вперед, назад
Найти в файлк file фразу search и начать вывод с неё
#more +/search file
или
#cat file | more +/search
mv - переместить (переименовать) файл или каталог
mv [опции] исходный_файл куда
Опции:
-f - не задавать вопросы
-i - выводить запрос по каждому файлу
-v - подробная информация по операции с файлами
-b - создать резервную копию, если файл существует (по-умолчанию создается "имя_файла~")
-S - изменить суффикс имени резервной копии (например "имя_файла~" на "имя_файла.bak")
-u - перемещать только если исходный файл новее или если файл-назначения отсутствует
-n - не перезаписывать файлы, если они существуют
Примечание: при перемещении атрибуты файлов и каталогов не меняются (права, дата модификации и т.п.)
Удалить файлы и каталоги по маске dir, не задавать вопросы и вывести подробную информацию
#rm -rfv dir*
rm - удалить файл или каталог
rm [опции] файл
Опции:
-f - не задавать вопросы при удалении
-i - выводить запрос по каждому файлу
-r - рекурсивное удаление
-v - подробная информация по удаленным файлам
Удалить файлы и каталоги по маске dir, не задавать вопросы и вывести подробную информацию
#rm -rfv dir*
rsync - синхронизация файлов и каталогов
rsync [опции] источник приемник
Опции:
-v - Выводить подробную информацию о процессе копирования;
-r - рекурсивно:
-q - Минимум информации;
-c, --checksum - Проверка контрольных сумм для файлов;
-a - Режим архивирования, когда сохраняются все атрибуты оригинальных файлов;
-b - Создание резервной копии;
-u - Не перезаписывать более новые файлы;
-l - Копировать символьные ссылки;
-L - Копировать содержимое ссылок;
-H - Копировать жесткие ссылки;
-p - Копирует все права на приемную сторону точь в точь с оригиналом.;
-g - Сохранять группу;
-t - Сохранять время модификации;
-x - Работать только в этой файловой системе;
-e - Использовать другой транспорт, например, ssh;
-z - Сжимать файлы перед передачей;
-W - копировать весь файл без rsync-алгоритма (увеличивает скорость)
--ignore-existing - Игнорировать те файлы, которые уже существуют
--delete - Удалять файлы которых нет в источнике;
--exclude - Исключить файлы по шаблону;
--recursive - Перебирать директории рекурсивно;
--no-recursive - Отключить рекурсию;
--stats - Выводить подробную статистику, позволяя оценить, насколько эффективен алгоритм rsync
--progress - Выводить прогресс передачи файла;
Примеры:
Синхронизация файлов и каталогов домашей дирректории пользователя a1 в директорию /backup/a1
#rsync -rvh --progress /home/a1/* /backup/a1
Синхронизация с удаленным сервером (и с удаленного сервера) используя ssh под пользователем root
#rsync -r --progress /home/a1/* Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра..1.1:/backup/a1
#rsync -r --progress Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра..1.1:/backup/a1/* /home/a1/
Если на удаленным сервере настроен и работает rsync сервер, то можно и так:
#rsync -r --progress /home/a1/* rsync://192.168.1.1/backup/a1
Синхронизировать с подсчетам контрольных сумм исходных файлов (по умолчанию синхронизация по дате модификации). Бывает полезно, когда какие-либо файлы меняются без измения даты модификации:
#rsync -c --progress /home/a1/* /backup/a1
Скопировать все файлы, начинающиеся на fi, исключить file1, размер файлов меньше 200 КБ, ограничить скорость передачи, удалить те файлы на стороне приемнике, которых нет в источнике, после синхронизации удалить исходные файлы, использовать порт 23.
#rsync --include 'fi*' --exclude 'file1' --max-size='200k' --bwlimit=100 --delete --remove-source-files -e 'ssh -p 23' /home/a1/* /backup/a1
sort, nl, head, tail - сортировка, нумерация, вывод заголовков и окончаний
sort - сортировка строк
sort [опции] файл
команда | sort [опции]
Опции:
-n - сортировка строк linux по числовому значению
-r - сортировать в обратном порядке
-k - указать поле по которому нужно сортировать строки
-b - не учитывать пробелы
-d - использовать для сортировки только буквы и цифры
-u - игнорировать повторяющиеся строки
-m - объединение ранее отсортированных файлов
- строки сначала сортируются по алфавиту, а уже вторично по другим правилам.
- строки с цифрами размещаются выше других строк
- строки, начинающиеся с букв нижнего регистра размещаются выше
Примеры:
Отсортировать вывод команды ls -l по второму столбцу в обратном порядке
#ls -l | sort -rk2
#ls -l | sort -rnk2 (сортировка по числовому значению)
nl - нумерация строк
nl [опции] файл
команда | nl [опции]
Опции:
-t - нумеровать только непустые строки
-b - какие нумеровать строки (а - все, t - не пустые)
-v - с какого числа начать нумерацию
-i - шаг увеличения нумерации
Пронумеровать непустые строки файла file, нумерации начать с 5, увеличивая значение каждого следующего номера на 3
#cat file | nl -t -v5 -i3
#cat file | nl -b a # нумеровать все строки
head, tail - заголовки и окончания
head или tail [опции] файл
команда | head (tail) [опции]
Команда head выводит начальные строки (по умолчанию — 10) вывода, соотвественно tail - последние строки.
Опции:
-n - количество выводим строк
-b - количество текста в байтах
tar - архивирование/разархивирование
Основное: просто запомнить для упаковки используется опция c - Create, а для распаковки - x - eXtract. По-умолчанию tar создает архив без сжатия.
tar [опции] архив путь
Опции:
x - извлечь файлы из архива
c - создать архив
j - сжать архив с помощью Bzip
z - сжать архив с помощью Gzip
r - добавить файлы в конец архива
v - показать подробную информацию о процессе работы
C - распаковать в указанную папку
f - файл для записи архива
Создать не сжатый / сжатый в gzip архив archive.tar / archive.tar.zip каталога /root
#tar -cvf archive.tar /root
#tar -zcvf archive.tar.zip /root
Разархивировать не сжатый / сжатый gzip archive.tar архив в текущую папку
#tar -xvf archive.tar
Исключение файлов по маске
#tar --exclude='sess*' -czvf archive.tar.zip /root
Просмотр содержимого архива
#tar -tf archive.tar | less
touch - создать файл, изменить время создания, доступа, модификации
touch [Опции] Файл
Опции:
-a - изменение времени доступа к указанному файлу.
-m - изменяет время модификации.
-c - определяет, что объект с указанным именем создан не будет.
-r - позволит использовать время доступа и модификации указанного файла.
-t - предназначена для изменения даты и времени путем ручного ввода.
-d - использует дату и время, заданные в виде строки.
Примеры:
Создать файл file
#touch file
Создать file1 … file4
#touch file1 file2 file3 file4
или
#touch file{1..4}
Создать файл с датой создания 2023.08.24 15-03. Соблюдаем правило ГМдчм (год, месяц, день, час, минута)
#touch -t 202308241503 filename
Изменить дату создания существующего файла
#touch -с -t 202308241503 filename
tr - удалить, изменить вывод
tr [ключ] набор1 набор2
Ключи:
-с - сначала получить дополнение НАБОРА1.
-d - удалить знаки из НАБОРА2, не превращать.
-s - замещать последовательность знаков, которые повторяются, из перечисленных в последнем НАБОРЕ, на один такой знак
-t - сначала сократить НАБОР1 до размеров НАБОРА2
Наборы
[:alnum:] Все буквы и цифры
[:alpha:] Все буквы
[:blank:] Все горизонтальные пробельные символы
[:cntrl:] Все управляющие знаки
[:digit:] Все цифры
[:graph:] Все печатаемые знаки, исключая пробел
[:lower:] Все маленькие буквы
[:print:] Все печатаемые знаки, включая пробел
[:punct:] Все знаки пунктуации
[:space:] Все вертикальные и горизонтальные пробельные знаки
[:upper:] Все большие буквы
[:xdigit:] Все шестнадцатиричные цифры
[=ЗНАК=] Все знаки, эквивалентные ЗНАКУ
Примеры:
Удалить : из выводимого текста
#tr -d ':'
Заменить все х на y
#tr 'x' 'y'
Удалить все буквы в нижнем регистре
#tr -d [:lower:]
vimdiff - сравнение файлов в редакторе vim
vimdiff файл1 файл2 файл3 ...
Наглядный пример сравнения двух файлов chrony.conf и chrony_tmp

Ctrl + w + w - перемещение между окнами
] + c - следующая строка, в которой есть различия
[ + с - предыдущая строка, в которой есть различия
do - (diff obtain), получить текст из другого окна, которого не хватает в текущем (сначала перейдите к выделенному)
dp - (diff put), записать текст из текущего окна в другое.
:diifupdate - повторное сравнение
Если есть свернуты строки для удобства редактирования (как правило это одинаковые строки), для их разворачивания и сворачивания необходимо переместить курсор напротив "+" и нажать:
z + o - развернуть
z + c - саернуть