Команды управления файлами и папками в Linux

До начала пары вспомнили chmod, немного поговорили про sudo и chown:

Удаление файлов с помощью rm

Для того чтобы удалить файл в Linux через терминал необходимо использовать команду «rm» (от английского «remove»). Данная команда удаляет все указанные ей файлы, но по умолчанию не удаляет каталоги. Чтобы позволить команде «rm» удалять каталоги нужно добавить опцию «-r» или «-R». Более подробно об этом во второй половине статьи.

Также нужно отметить, что команда «rm» не выполняет физическое удаление данных, вместо этого указанные файлы просто удаляются из файловой системы, а занимаемое ими место маркируется как свободное. Это означает, что после удаления данные остаются на диске и пока они не будут перезаписаны другими данными, их можно будет восстановить с помощью специальных программ. Для физического удаления данных с перезаписью диска следует использовать команду «shred».

В общем случае для удаления файла в Linux через терминал достаточно просто ввести в терминал «rm» и указать имя документа. Например, для того чтобы удалить «» из текущего каталога нужно выполнить вот такую команду:

rm

Если удаляемый файл находится не в текущем каталоге, то в терминале нужно указать полный путь. Например, это может выглядеть вот так:

rm /tmp/temp/

При необходимости, с помощью команды «rm» можно удалить сразу несколько файлов. Для этого просто введите «rm» и перечислите имена через пробел, например:

rm file1 file2 file3

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

rm *.txt

Также маску можно использовать для удаления вообще всех файлов. Например, чтобы удалить все файлы в текущей папке нужно выполнить:

rm *

Аналогичным способом можно удалить все файлы в определенной папке:

rm folder/*

Главное, соблюдать осторожность, так как при использовании масок можно удалить что-то лишнее.

Linux, bash. Однострочники

Собственно, начало пары.

|, &&, ||

Уже разбирали. Повторяем.

| — перенаправление вывода одной команды на вход другой. Пример:

man bash | less

|| — ленивое логическое «или». Используется для выполнения операции, если предыдущая завершилась с ошибкой:

Читайте также:  Raspberry Pi 3. Организация сетевого доступа к файлам через Samba

cd /root || echo Доступ запрещён

&& — ленивое логическое «и». Используется для выполнения операции, если предыдущая завершилась успешно:

cd $HOME && echo Чуи, мы дома!

cat, head, tail, grep

cat — конкатенация содержимого файлов и вывод:

cat ~/.bash* | less

head — вывести начало файла (по умолчанию 10 строк):

head /etc/passwd

tail — вывести конец файла (по умолчанию 10 строк):

tail /var/log/syslog

— полезно для чтения логов — там как раз последнее — самое интересное. Также часто используется:

tail -f /var/log/syslog

— выводить по мере поступления новых строк в файл.

grep — великая утилита для фильтрации входного потока:

cat /etc/passwd | grep root grep root /etc/passwd # есть вариант указать в аргументах файлы

ДЗ: пишем anti-head-tail — 2 аргумента: с какой по какую строку отправлять на вывод. +5 баллов в карму.

xargs

Отдельная заметка про xargs.

Если коротко:

ls | xargs file # передать спиок вывода ls аргументом утилите file.

# Склеить строки echo «a b c» | xargs a b c

regexp

Oh, shi~~

Короче, есть главная проблема программирования — «придумать название переменной».

За ней ровным строем идут регулярные выражения/грамматики, инвалидация кеша и реляционная алгебра.

Я вам не скажу за главную проблему, но за регулярные выражения немного поясню.

Мы уже встречались с прекрасными подстановками типа * и, например, *.txt. Видели забавные mkdir -p ./test/{a,s,d/{q,w,e}}, но что, если я скажу, что подобным образом можно искать?!

Как-то мы уже использовали grep для поиска подстроки в строке:

grep roo /etc/passwd

— ищем «roo» в файле passwd. Но это не так круто, как искать по шаблону!

grep ‘^root:’ /etc/passwd

— находим запись пользователя root.

Отмечу, что в каком-то виде regexp (regular expressions) есть практически во всех языках программирования, поэтому мозголомка ниже будет полезна. Понимание regexp сродни пониманию сложения — рассказывать об этом также сложно, ибо уже не помнишь, в чём проблемы восприятия (поэтому жду вопросов).

Регулярные выражения содержат 3 базовых возможности:

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

    ab

  2. Объединение (операция or / ||) — большое выражение соответствует строке, соответствуйщей одному из маленьких выражений, содержащихся в нём.

    a|b

  3. Замыкание — маленькое выражение может быть «повторено» ноль или более раз, чтобы соответствовать входу.

    a*

Примеры регулярных выражений

Конкатенация трёх выражений «f», «oo|ee», «t». Само же выражение «oo|ee» — объединение выражений «oo» и «ee»:

f(oo|ee)t # соответствуют foot или feet

Закрытие/замыкание/кложура и тд:

Читайте также:  Откат iOS или как вернуть предыдущую версию

a+ # соответствует «a» один или более раз a* # соответствует «a» 0 или более раз a? # соответствует «a» 0 или 1 раз a{2,5} # сооветствует от 2 до 5 раз «a» a{2} # 2 раза a{2,} # от 2 раз a{,5} # до 5 раз

Делаем одно и то же разными способами:

a(0|1|2|3|4|5|6|7|8|9) # соотвествует a0, a1 … a9 a[0-9] # то же самое, что и a(0|1|2|3|4|5|6|7|8|9), но используя класс символов a[[:digit:]] # то же самое, что выше, но с альтернативным синтаксисом a\\d # то же самое, но через «сокращённое написание»

Полезно знать:

^ # символ начала строки $ # символ конца строки (не путать с \n — переводом строки) . # любой символ

Помните [[:digit:]]? Такого много:

[:alnum:] [:cntrl:] [:lower:] [:space:] [:alpha:] [:digit:] [:print:] [:upper:] [:blank:] [:graph:] [:punct:] [:xdigit:]

С чем это едят:

[[ «sad day» =~ (sad|happy) ]] && echo «Что-то о настроении» grep ‘^root:’ /etc/passwd # запись пользователя root awk ‘/false$/ {print $0}’ /etc/passwd # найти всех, кто логинится в false cat /etc/passwd | sed ‘/ *#/d; /^ *$/d’ # убрали комментарии из /etc/passwd и вывели

И это только базовое. Советую читать PCRE для понимания всего ужаса используемых в реальной жизни регулярок.

Основные команды bash

В общем виде в Ubuntu команды имеют такой вид:

Программа — это сам исполняемый файл. Другими словами, это программа, которая будет выполняться по команде.

Ключ — обычно у каждой программы свой набор ключей. Их можно найти в мануале к программе.

Значение — параметры программы: цифры, буквы, символы, переменные.

Напомним, что для выполнения команды нужно ввести её в командную строку — Ubuntu console или эмулирующий работу консоли терминал.

Рассмотрим основные команды консоли Ubuntu:

Промежуточная команда sudo (SuperUser DO — суперпользователь) позволяет запускать программы от имени администратора или root-пользователя.

Команда pwd (print working directory — вывести рабочую директорию) показывает полное имя рабочей директории, в которой вы находитесь.

Команда ls (list — список) выводит все файлы во всех папках рабочей директории.

Команда cd (change directory — изменить директорию) позволяет перейти в другую директорию.

Команда cp (copy — копировать) копирует файл.

Команда mv (move — переместить) помогает перемещать файлы.

Команда rm (remove — удалить) удаляет файлы и каталоги.

С помощью mkdir (make directory — создать директорию) можно создать новую директорию.

Команда man (manual — мануал) открывает справочные страницы с подробной информацией о команде.

Мы рассмотрели, как вызвать командную строку в Linux — открыть терминал или запустить консоль в Ubuntu, а также перечислили основные команды терминала Ubuntu.

Читайте также:  Создание загрузочной флешки linux mint в windows

Помогла ли вам статья? ДаНет 5 раз ужепомогла

Пишем скрипт для планировщика задач Synology

Для написания скрипта будем использовать команду FIND, так как у неё очень гибкие возможности. Если есть желание более подробно с ней ознакомится, то не составит труда эту информацию найти через поисковик. 😎 Я для вас подготовил небольшую фичу для формирования скрипта (смотрите ниже). Пример скрипта планировщика Synology:

Скопировать

find /volume1//ИМЯ_ДИРЕКТОРИИ/ -mmin +10080 -delete

Верхний скрипт удаляет ☕ только файлы, а если вам необходимо удалить директории вместе с файлами старше N дней, то вам необходим скрипт ниже

find /volume1//ИМЯ_ДИРЕКТОРИИ/ -type d -mmin +10080 -exec rm -rf {} \;

Почему в минутах? Точно не знаю почему, но -mtime +7 никак не хотел работать. Выводилась ошибка:

find: `+7′: No such file or directory

Настройка расписания скрипта удаления старых файлов с NAS Synology

И так. Скрипт есть, осталось дело за малым — настройка планировщика задач. Заходим на NAS Synology и далее в раздел Панель управления 👉🏻 Планировщик задач 👉🏻 Создать 👉🏻 Запланированная задача 👉🏻 Скрипт, заданный пользователем Даём имя скрипту в основной вкладке, а затем вставляем сгенерированный ранее нами скрипт в поле Скрипт, заданный пользователем по вкладке Настройки задач. Теперь настраиваем расписание через вкладку Расписание (логично же 😂). Думаю там у вас вопросов не возникнет, а если вдруг, то пишите в комментарии!

Панель управления NAS SynologyРасписание задачи

Если вы затрудняетесь на каком у вас разделе лежит та или иная папка общего доступа, то вы можете посмотреть тут: Панель управления 👉🏻 Папка общего доступа. Там под названием каждого каталога будет указано на каком разделе он находится!

Заключение

Вот и всё! Вы за 5 минут настроили скрипт удаления старых файлов с NAS сервера Synology по расписанию. Было просто.

Управление файлами в Linux

Создание пустого файла

touch file_

Просмотр содержимого файла:

cat file_

Редактирование файла:

nano /etc/

где /etc/ — путь к файлу.

Для редактирования файлов должен быть установлен редактор nano.

Копирование файла:

cp otkuda/ kuda/

^ Находиться надо в родительской категории, где есть папки otkuda и kuda.

Копирование папки:

cp -r /откуда_копируем/копируемая_папка /куда_копируем/копируемая_папка

Копировании папки в текущей директории:

cp -r www www-old

Назначаем права доступа:

chmod 755