Архивы
du
позволяет вывести размер файла или каталога. -sk
выведет размер файла в килобайхтах, а -sh
выведет в удобочитаемом формате.
ls -lh
так же выведет размеры файлов
tar
архивирует файлы
-c
- используется для архивации файлов-f
- используется для указания имени результирующего файла с архивом
Чтобы просмотреть внутренности архива, можно воспользоваться -tf
Чтобы разархивировать файл, нужно воспользоваться -xf
Чтобы сжать архив, нужно воспользоваться опцией -zcf
(сжатие в gz
формате) и на выходе мы получим файл .tar.gz
Есть несколько методов сжатия и разжатия файла и все они имеют разные алгоритмы, но чем более сжатый файл, тем дольше он будет распаковываться.
Команды для запаковки
- распаковки
файлов:
bzip2
- bunzip2
gzip
- zunzip
xz
- unxz
Ну и так же команды zcat
bzcat
xzcat
позволяют просмотреть содержимое файлов без распаковки
Поиск файлов и директорий
поиск по директориям
Чтобы найти определённый файл в системе с помощью консоли, мы можем воспользоваться несколькими способами
locate
- отображает пути до определённого искомого файла в системе. Ищет по файлу mlocate.db
, в котором описаны все файлы в системе. Само собой этот файл нужно иногда обновлять, потому что новые пути туда записываются не сразу. Можно это сделать самостоятельно с помощью updatedb
.
Так же можно воспользоваться командой find
, которая найдёт вхождения в определённом каталоге.
поиск по файлам
Если нам требуется вывести содержание файла целиком, то мы можем воспользоваться cat
Команда grep
позволяет искать определённые строки по паттерну. Сама команда является регистрозависимой, и если нам нужно будет найти что-то вне регистра, то мы должны использовать -i
. Если мы не помним, в каком файле находится слово, то используем -r
и рекурсивно проверяем файлы в директории на наличие паттерна. Если нам нужно ввести сразу несколько слов в поиске, то обернуть его нужно в ""
кавычки. Если нам нужно инвертировать поиск и найти все строки, кроме определённой, то используем -v
.
-w
- если требуется найти как выделенное слово (ищем Clone
и будем находить только _Clone_
)
-vw
- так же позволит инвертировать выделение и найти только строки, не совпадающие выделенному слову Clone
-A<число>
- позволит вывести найденное и определённое количество строк ПОСЛЕ него
-B<число>
- позволит вывести найденное и определённое количество строк ДО него
Так же -A1 -B1
можно объединить в один запрос, чтобы вывести сразу и до и после совпадения несколько строк
Команда awk
позволяет парсить большое количество текста. Можно сказать, что это целый скриптовый язык с переменными, операциями и символами.
В паттерне команды мы определяем выводимые поля. Все поля делятся по пробелу (как в csv по ;
).
Каждая переменная $0
, $1
, $2
и так далее отвечают за свой участок строки, который выведет команда.
В последнем примере мы меняем разделитель с помощью опции -F
. Поменяли мы разделитель на :
. В самом паттерне мы скрыли второе поле (назвав его hidden
) и вывели всю остальную строку.
С помощью |
мы чейним вывод (перенаправление) и передаём результат первой команды во вторую.
Перенаправление
В линукс все операции делятся на три потока:
0
- стандартный ввод1
- стандартный вывод2
- стандартные ошибки
Дефолтно, стандартный вывод и ошибки идут в экран пользователя на отображение, но так же эти потоки можно перенаправлять, чтобы выполнять другие операции, как, например, вывод всех данных в файлы, а не на экран
Мы можем записать результат выполнения операции в несуществующий пока файл с помощью >
либо добавить в конец существующего >>
Так же мы можем перенаправить результат вывода только опрделённого потока в нужный нам файл. Операция 1>
перенаправит только результат успешного выполнения в файл.
Так же стоит отметить про существование папки /dev/null
, в которую можно положить файлы, которые сразу же пропадут (aka чёрная дыра, пожирающая всю информацию)
Так же стоит рассказать про последовательность выполнения перенаправления.
У нас есть команда ls -lh > name.txt
Данные операции в bash выполняются слева направо.
- Сначала проверяется существование файла и его создание, при необходимости (что является быстрым способом создания файла)
- Затём идёт обнуление файла через
>
(либо дополнение через>>
) - Затем выполняется начальная операция, вывод которой заполнится в файл
Таким образом мы увидим в выводе, что в каталоге существует наш файл name.txt
с весом в 0 байт. Именно такой размер был у этого файла во время создания, потому что результат записался в этот файл уже после того, как выполнилась операция ls -lh
Для упрощения работы и использования результатов вывода прошлой команды, используется |
, который предоставляет стандартный вывод прошлой команды для следующей (вторая команда берёт результат первой и работает с ним)
Так же в качестве команды для перенаправления вывода мы можем использовать tee
. Разница в отличе от >
в том, что tee
, по прежнему печатает стандартный вывод на экране, а так же записывает его в файл
tee -a
заменит операцию >>
с добавлением вывода в конец файла
Так же мы можем с помощью указателей >&
определять движение потоков по файлам. То есть &
позволяет указать потоку, в какой поток должен идти его вывод
Команда ls -lh notOk result.txt 1> result.txt 2>&1
Логические операторы
В результате выполнения всех команд в строке линукс мы получаем статус код, который отображает успешность или неуспешность выполнения операции.
Команда echo $?
выводит код статуса завершения операции
0
- успешный выполнение операции1
и отличные от нуля - неуспешное выполнение операции
Оператор &&
выполнит обе операции, но вторую операцию выполнит только если первая выполнится со статускодом 0
. То есть, либо первая с ошибкой и вторая не выполнится, либо первая успешно и вторая, как получится. Каждая последующая команда будет выполняться только после успешной предыдущей.
Оператор ||
выполнит вторую операцию только если первая завершилась с ошибкой. Выполнится или первая, или вторая - только одна.
Так же есть оператор ;
, который выполнит обе команды последовательно друг за другом, даже если прошлая выполнилась с ошибкой.
Текстовые редакторы
Дефолтно мы можем вывести содержимое файла с помощью cat
, но изменить файл или как-то удобно навигироваться по нему мы не можем
Для удобной навигации по файлам обычно используют Vi, который установлен во многих дистрибутивах по-дефолту
Сам ви представляет из себя редактор с тремя режимами - команды, ввод и последняя строка.
Командный режим позволяет нам перемещаться по тексту, производить над ним коммандные операции.
Режим вставки позволяет изменять текст стандартными способами ввода.
Последняя строка позволяет выполнять операции над самим файлом и общаться с ви (сохрание файла, выход из ви)
Список сочетаний командного режима:
Список сочетаний режима вставки:
Режим последней строки:
Так же зачастую в системах vi
установлен просто в качестве алиаса для команды vim
, которая позволяет редактировать текст более продвинутым образом за счёт возможностей кастомизации и расширения
Используются ссылки как, например, вот тут с vi
на vim
Cron
cron
- позволяет клонировать задания по расписанию с помощью крон в линуксе
Чтобы добавить команду в повторяющиеся операции, её нужно запусти в крофайл через crontab -e
. Там мы должны в звёздочках указать периодичность выполнения операции и затем команду.
Сами по себе звёздочки указывают на выполнение в определённом промежутке.
*(минута) *(час) *(день) *(месяц) *(день недели)
- выполнение операции каждую минуту, каждый день недели.
20 19 21 11 7 <команда>
- будет выполнять команду каждое воскресенье ноября 21ого числа в 19:20
Если нам нужно выполнять выполнять операцию каждые 5 минут, с 7 вечера до 7 утра, с 11 по 13 число любого месяца и любого дня недели, то мы можем записать крон так: */5 0-7,19-23 11-13 * *
crontab -l
- отобразит список задач