30.6. Утилита cpio
Утилита (Copy Input and Output) значительно отличается от утилит tar и dump. Она может принимать список имен файлов от сторонней утилиты, но при этом осуществляет последовательное копирование оригиналов этих файлов. Это обстоятельство позволяет достаточно просто использовать данную утилиту в сочетании с утилитой find! Некоторые примеры ее использования приведены ниже.
Утилита find передает имена файлов утилите cpio, которая, в свою очередь, помещает файлы в архив.
find /etc -depth -print | cpio -oaV -O archive.cpio
Аналогичная команда со сжатием результирующего архива с помощью утилиты gzip.
find /etc -depth -print | cpio -oaV | gzip -c > archive.cpio.gz
Теперь данные архива передаются по протоколу ssh (осуществляется резервное копирование файлов в сжатый архив на другой машине).
find /etc -depth -print|cpio -oaV|gzip -c|ssh server "cat - > etc.cpio.gz"
Утилита find передает имена файлов утилите cpio | утилита cpio передает файлы в архиве клиенту ssh | клиент ssh передает файлы в архиве утилите cpio ‘утилита cpio извлекает файлы из архива’.
find /etc -depth -print | cpio -oaV | ssh user@host 'cpio -imVd'
Аналогичная команда, с помощью которой выполняется обратное действие: осуществляется копирование директории с удаленного узла на локальную машину.
ssh user@host "find path -depth -print | cpio -oaV" | cpio -imVd
Практическое задание: работа с файлами
1. Выведите список файлов директории /bin.
2. Выведите информацию о типах файлов /bin/cat, /etc/passwd и /usr/bin/passwd.
3a. Загрузите файлы wolf.jpg и LinuxFun.pdf с ресурса http://linux-training.be (с помощью команд wget http://linux-training.be/files/studentfiles/wolf.jpg и wget http://linux-training.be/files/books/LinuxFun.pdf)
3b. Выведите информацию о типах файлов wolf.jpg и LinuxFun.pdf.
3c. Переименуйте файл wolf.jpg в wolf.pdf (с помощью команды mv).
3d. Выведите информацию о типах файлов wolf.pdf и LinuxFun.pdf.
4. Создайте директорию ~/touched и перейдите в нее.
5. Создайте файлы today.txt и yesterday.txt в директории touched.
6. Измените дату создания файла yesterday.txt таким образом, чтобы она совпадала с датой прошлого дня.
7. Создайте копию файла yesterday.txt с именем copy.yesterday.txt.
8. Переименуйте файл copy.yesterday.txt в kim.
9. Создайте директорию с именем ~/testbackup и скопируйте все файлы из директории ~/touched в нее.
10. Используйте одну команду для удаления директории ~/testbackup и всех файлов из нее.
11. Создайте директорию ~/etcbackup и скопируйте файлы с расширением .conf (*.conf) из директории /etc в нее. Проверьте, был ли осуществлен обход всех поддиректорий директории /etc?
12. Используйте утилиту rename для переименования всех файлов с расширением .conf (*.conf) таким образом, чтобы расширения всех этих файлов изменились на .backup. (Если у вас есть возможность работы более чем со одним дистрибутивом, попробуйте выполнить эту операцию во всех этих дистрибутивах!).
Корректная процедура выполнения практического задания: работа с файлами
1. Выведите список файлов директории /bin.
ls /bin
2. Выведите информацию о типах файлов /bin/cat, /etc/passwd и /usr/bin/passwd.
file /bin/cat /etc/passwd /usr/bin/passwd
3a. Загрузите файлы wolf.jpg и LinuxFun.pdf с ресурса http://linux-training.be (с помощью команд wget http://linux-training.be/files/studentfiles/wolf.jpg и wget http://linux-training.be/files/books/LinuxFun.pdf)
wget http://linux-training.be/files/studentfiles/wolf.jpg wget http://linux-training.be/files/books/LinuxFun.pdf
3b. Выведите информацию о типах файлов wolf.jpg и LinuxFun.pdf.
file wolf.jpg LinuxFun.pdf
3c. Переименуйте файл wolf.jpg в wolf.pdf (с помощью команды mv).
mv wolf.jpg wolf.pdf
3d. Выведите информацию о типах файлов wolf.pdf и LinuxFun.pdf.
file wolf.pdf LinuxFun.pdf
4. Создайте директорию ~/touched и перейдите в нее.
mkdir ~/touched ; cd ~/touched
5. Создайте файлы today.txt и yesterday.txt в директории touched.
touch today.txt yesterday.txt
6. Измените дату создания файла yesterday.txt таким образом, чтобы она совпадала с датой прошлого дня.
touch -t 200810251405 yesterday.txt (замените 20081025 на дату, соответствующую вчерашнему дню)
7. Создайте копию файла yesterday.txt с именем copy.yesterday.txt.
cp yesterday.txt copy.yesterday.txt
8. Переименуйте файл copy.yesterday.txt в kim.
mv copy.yesterday.txt kim
9. Создайте директорию с именем ~/testbackup и скопируйте все файлы из директории ~/touched в нее.
mkdir ~/testbackup ; cp -r ~/touched ~/testbackup/
10. Используйте одну команду для удаления директории ~/testbackup и всех файлов из нее.
rm -rf ~/testbackup
11. Создайте директорию ~/etcbackup и скопируйте файлы с расширением .conf (*.conf) из директории /etc в нее. Проверьте, был ли осуществлен обход всех поддиректорий директории /etc?
cp -r /etc/*.conf ~/etcbackup
Будут скопированы исключительно файлы с расширением .conf (*.conf), находящиеся непосредственно в директории /etc/.
12. Используйте утилиту rename для переименования всех файлов с расширением .conf (*.conf) таким образом, чтобы расширения всех этих файлов изменились на .backup. (Если у вас есть возможность работы более чем со одним дистрибутивом, попробуйте выполнить эту операцию во всех этих дистрибутивах!).
В дистрибутиве RHEL: touch 1.conf 2.conf ; rename conf backup *.conf В дистрибутиве Debian: touch 1.conf 2.conf ; rename 's/conf/backup/' *.conf
Предыдущий раздел: | Оглавление | Следующий раздел: |
Глава 6. Работа с директориями | Глава 8. Работа с содержимым файлов |
Утилита rename
Об утилите rename
Утилита является одним из редких случаев, когда в рамках книги «Фундаментальные основы Linux» приходится делать разделение между дистрибутивами Linux. Практически каждая из описанных в данной книге утилит работает практически на каждом компьютере под управлением Linux. Но реализации утилиты в различных дистрибутивах отличаются.
Следует пытаться использовать утилиту всегда, когда вам необходимо переименовать несколько файлов.
Утилита rename в дистрибутиве Debian/Ubuntu
Утилита в дистрибутиве Debian имеет сложный синтаксис (используются регулярные выражения) для единовременного переименования множества файлов.
Ниже приведен пример использования утилиты , с помощью которой у всех файлов с расширением .txt производится замена расширения на .png.
paul@debian7:~/test42$ ls abc.txt file33.txt file42.txt paul@debian7:~/test42$ rename 's/\.txt/\.png/' *.txt paul@debian7:~/test42$ ls abc.png file33.png file42.png
Во втором примере производится замена всех (первых) вхождений слов на во всех файлах с расширением .png.
paul@debian7:~/test42$ ls abc.png file33.png file42.png paul@debian7:~/test42$ rename 's/file/document/' *.png paul@debian7:~/test42$ ls abc.png document33.png document42.png paul@debian7:~/test42$
Утилита rename в дистрибутиве CentOS/RHEL/Fedora
В Red Hat Enterprise Linux синтаксис утилиты немного отличается. В первом примере, представленном ниже, осуществляется переименование всех файлов с расширением .conf (*.conf) путем замены всех вхождений .conf на .backup.
$ touch one.conf two.conf three.conf $ rename .conf .backup *.conf $ ls one.backup three.backup two.backup $
Во втором примере производится переименование всех файлов (*) путем замены всех вхождений one на ONE.
$ ls one.backup three.backup two.backup $ rename one ONE * $ ls ONE.backup three.backup two.backup $
Удаление файлов в терминале Linux.
Для удаления файлов используется команда «rm» (от англ. remove).
Работает очень просто, пишете команду rm и путь к файлу, который хотите удалить:
Удалить файл с именем «file1»:
Удалить директорию с именем «dir1» и рекурсивно всё её содержимое:
Удалить две директории и рекурсивно их содержимое:
Также можно добавить параметр -f, который означает, что при удалении не будет запрашиваться подтверждение на удаление. Команды будут выглядеть так:
Перемещение и переименование файлов и директорий в терминале Linux.
Для перемещения и переименовывания файлов и директорий (каталогов) используется команда «mv» (от англ. move).
Всё очень просто. Чтобы переименовать файл, выполняем команду:
Чтобы переместить файл:
Копирование файлов и директорий в терминале Linux.
Для копирования используется команда «cp» (от англ. copy).
Скопировать файл file1 и назвать его file2:
Копировать директорию dir1 в директорию dir2:
Копировать файл с именем file1 в директорию c именем dir1:
Справка о командах.
У каждой команды присутствует множество параметров, чтобы узнать их, просто наберите команду и параметр —help:
Например:
Команда find в Linux
Очень важно уметь вовремя и очень быстро найти нужную информацию в системе. Конечно, все современные файловые менеджеры предлагают отличные функции поиска, но им не сравнится с поиском в терминале Linux
Он намного эффективнее и гибче обычного поиска, вы можете искать файлы не только по имени, но и по дате добавления, содержимому, а также использовать для поиска регулярные выражения. Кроме того, с найденными файлами можно сразу же выполнять необходимые действия.
В этой статье мы поговорим о поиске с помощью очень мощной команды find Linux, подробно разберем ее синтаксис, опции и рассмотрим несколько примеров.
Создать файл в командной строке Linux
Существуют различные способы создания нового файла в терминале Linux. Мы покажем вам команды одну за другой.
1. Создайте пустой файл с помощью команды touch
Одним из самых распространенных применений сенсорной команды в Linux является создание нового пустого файла. Синтаксис очень прост.
Если файл еще не существует, он создаст новый пустой файл. Если файл с таким именем уже существует, он обновит временные метки файла .
Если вы хотите убедиться, что touch только создает новый файл и не изменяет временные метки существующего файла, используйте команду touch с параметром -c.
2. Создайте файлы с помощью команды cat
Другой популярный способ создания нового файла – использование команды cat в Linux. Команда cat в основном используется для просмотра содержимого файла, но вы также можете использовать ее для создания нового файла.
Вы можете написать новый текст в это время, если хотите, но это не обязательно. Для того, чтобы сохранить и выйти, используйте в терминале Ctrl + D.
Если файл с таким именем уже существует, и вы пишете в нем новый текст с помощью команды cat, новые строки будут добавлены в конец файла.
3. Создайте новый файл с помощью команды echo
Основное использование команды echo – просто повторить (echo) то, что вы печатаете на экране. Но если вы используете перенаправление с echo, вы можете создать новый файл.
Чтобы создать новый пустой файл с помощью echo, вы можете использовать что-то вроде этого:
echo "Это образец текста" > filename.txt
Вновь созданный файл filename.txt будет иметь следующий текст: Это пример текста. Вы можете просмотреть файл в Linux, используя cat или другие команды просмотра.
Вы не обязаны помещать образец текста с эхом. Вы можете создать (почти) пустой файл, используя команду echo:
echo> file.txt
Это создаст новый файл с одной пустой строкой. Вы можете проверить количество строк с помощью команды wc.
4. Создайте новый файл с помощью текстового редактора, такого как Vim
Последний метод в этой серии – использование текстового редактора. Текстовый редактор на основе терминала, такой как Emacs , Vim или Nano, несомненно, может быть использован для создания нового файла.
Прежде чем использовать эти текстовые редакторы, вы должны убедиться, что вы знаете основы, такие как сохранение существующего из редактора. В отличие от инструментов с графическим интерфейсом, использование Ctrl + S в терминале не сохранит файл. Фактически, он может перевести ваш терминал в, казалось бы, замороженное состояние, из которого вы восстанавливаетесь с помощью Ctrl + Q.
Допустим, вы собираетесь использовать редактор Vim. Убедитесь, что вы знакомы с основными командами vim , а затем откройте новый файл, например:
Какая ваша любимая команда?
Итак, мы только что поделились 4 различными способами создания файла в Linux. Лично мы предпочитаем использовать touch для создания пустого файла и Vim, если нам нужно отредактировать файл.
Какую команду вы предпочитаете здесь? Пожалуйста, поделитесь своим мнением в разделе комментариев ниже.
30.9. Практическое задание: резервные копии данных
!! Проявите осторожность при использовании параметров утилиты tar и указании пути к файлу резервной копии данных, ведь в случае ошибки могут быть повреждены файлы вашей системы !!
1. Создайте директорию (или раздел жесткого диска, если желаете) для хранения резервных копий данных. Используйте путь (или смонтируйте файловую систему из созданного раздела жесткого диска в директорию) /mnt/backup.
2a. Используйте утилиту tar для создания файла резервной копии данных директории /etc с именем /mnt/backup/etc_<дата>.tgz, причем этот файл должен быть сжат с использованием алгоритма gzip. (Замените <дата> на текущую дату.)
2b. Используйте утилиту tar для создания файла резервной копии данных директории /bin с именем /mnt/backup/bin_<дата>.tar.bz2, причем этот файл должен быть сжат с использованием алгоритма bzip2.
2с. Выберите по файлу из директорий /etc и /bin и проверьте, была ли создана резервная копия этих файлов.
2d. Извлеките два выбранных файла из архивов в вашу домашнюю директорию.
3a. Создайте директорию для хранения файлов резервных копий данных вашего соседа и сделайте ее доступной по пути /mnt/<имя_компьютера_соседа>.
3b. Используйте комбинацию из клиента ssh и утилиты tar для сохранения резервной копии данных вашей директории /boot на компьютере вашего соседа в директории /mnt/<имя_вашего_компьютера>.
4a. Используйте комбинацию из утилит find и cpio для создания архива содержимого директории /etc формата cpio.
4b. Выберите файл из директории /etc и извлеките его из архива формата cpio в вашу домашнюю директорию.
5. Используйте утилиту dd и клиент ssh для сохранения файла резервной копии данных основной загрузочной записи жесткого диска на компьютере вашего соседа.
6. (Задание должно выполняться на реальном компьютере.) Создайте и смонтируйте файл образа установочного диска Ubuntu с расширением .iso.
7. Используйте комбинацию из утилит dd и gzip для создания ‘виртуального’ образа одного из ваших разделов жесткого диска в другом разделе.
8. Используйте утилиту dd для создания файла размером в пять мегабайт в директории ~/testsplit с именем biggest. После этого разделите этот файл на файлы размером до двух мегабайт.
mkdir testsplit dd if=/dev/zero of=~/testsplit/biggest count=5000 bs=1024 split -b 2000000 biggest parts
Предыдущий раздел: | Оглавление | Следующий раздел: |
Глава 29. Работа с разделяемыми библиотеками | Приложение A. Дисковые квоты |
30.8. Утилита split
Утилита может успешно использоваться для разделения файлов на фрагменты меньшего размера. Данное разделение может оказаться полезным для записи фрагментов файла на множество носителей в том случае, если не разделенный на фрагменты файл не умещается на единственном носителе. В примере ниже показан метод разделения файла размером в 5000 байт на три файла меньшего размера, причем размер каждого из результирующих файлов не превышает 2000 байт.
paul@laika:~/test$ ls -l итого 8 -rw-r--r-- 1 paul paul 5000 2007-09-09 20:46 bigfile1 paul@laika:~/test$ split -b 2000 bigfile1 splitfile. paul@laika:~/test$ ls -l итого 20 -rw-r--r-- 1 paul paul 5000 2007-09-09 20:46 bigfile1 -rw-r--r-- 1 paul paul 2000 2007-09-09 20:47 splitfile.aa -rw-r--r-- 1 paul paul 2000 2007-09-09 20:47 splitfile.ab -rw-r--r-- 1 paul paul 1000 2007-09-09 20:47 splitfile.ac
Примеры использования find
Поиск файла по имени
1. Простой поиск по имени:
find / -name «file.txt»
* в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня .
2. Поиск файла по части имени:
find / -name «*.tmp»
* данной командой будет выполнен поиск всех папок или файлов в корневой директории /, заканчивающихся на .tmp
3. Несколько условий.
а) Логическое И. Например, файлы, которые начинаются на sess_ и заканчиваются на cd:
find . -name «sess_*» -a -name «*cd»
б) Логическое ИЛИ. Например, файлы, которые начинаются на sess_ или заканчиваются на cd:
find . -name «sess_*» -o -name «*cd»
в) Более компактный вид имеют регулярные выражения, например:
find . -regex ‘.*/\(sess_.*cd\)’
find . -regex ‘.*/\(sess_.*\|.*cd\)’
* где в первом поиске применяется выражение, аналогичное примеру а), а во втором — б).
4. Найти все файлы, кроме .log:
find . ! -name «*.log»
* в данном примере мы воспользовались логическим оператором !.
Поиск по дате
1. Поиск файлов, которые менялись определенное количество дней назад:
find . -type f -mtime +60
* данная команда найдет файлы, которые менялись более 60 дней назад.
2. Поиск файлов с помощью newer. Данная опция доступна с версии 4.3.3 (посмотреть можно командой find —version).
а) дате изменения:
find . -type f -newermt «2019-11-02 00:00»
* покажет все файлы, которые менялись, начиная с 02.11.2019 00:00.
find . -type f -newermt 2019-10-31 ! -newermt 2019-11-02
* найдет все файлы, которые менялись в промежутке между 31.10.2019 и 01.11.2019 (включительно).
б) дате обращения:
find . -type f -newerat 2019-10-08
* все файлы, к которым обращались с 08.10.2019.
find . -type f -newerat 2019-10-01 ! -newerat 2019-11-01
* все файлы, к которым обращались в октябре.
в) дате создания:
find . -type f -newerct 2019-09-07
* все файлы, созданные с 07 сентября 2019 года.
find . -type f -newerct 2019-09-07 ! -newerct «2019-09-09 07:50:00»
* файлы, созданные с 07.09.2019 00:00:00 по 09.09.2019 07:50
Искать в текущей директории и всех ее подпапках только файлы:
find . -type f
* f — искать только файлы.
Поиск по правам доступа
1. Ищем все справами на чтение и запись:
find / -perm 0666
2. Находим файлы, доступ к которым имеет только владелец:
find / -perm 0600
Поиск файла по содержимому
find / -type f -exec grep -i -H «content» {} \;
* в данном примере выполнен рекурсивный поиск всех файлов в директории и выведен список тех, в которых содержится строка content.
С сортировкой по дате модификации
find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r
* команда найдет все файлы в каталоге /data, добавит к имени дату модификации и отсортирует данные по имени. В итоге получаем, что файлы будут идти в порядке их изменения.
Лимит на количество выводимых результатов
Самый распространенный пример — вывести один файл, который последний раз был модифицирован. Берем пример с сортировкой и добавляем следующее:
find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r | head -n 1
Поиск с действием (exec)
1. Найти только файлы, которые начинаются на sess_ и удалить их:
find . -name «sess_*» -type f -print -exec rm {} \;
* -print использовать не обязательно, но он покажет все, что будет удаляться, поэтому данную опцию удобно использовать, когда команда выполняется вручную.
2. Переименовать найденные файлы:
find . -name «sess_*» -type f -exec mv {} new_name \;
или:
find . -name «sess_*» -type f | xargs -I ‘{}’ mv {} new_name
3. Вывести на экран количество найденных файлов и папок, которые заканчиваются на .tmp:
find . -name «*.tmp» | wc -l
4. Изменить права:
find /home/user/* -type d -exec chmod 2700 {} \;
* в данном примере мы ищем все каталоги (type d) в директории /home/user и ставим для них права 2700.
5. Передать найденные файлы конвееру (pipe):
find /etc -name ‘*.conf’ -follow -type f -exec cat {} \; | grep ‘test’
* в данном примере мы использовали find для поиска строки test в файлах, которые находятся в каталоге /etc, и название которых заканчивается на .conf. Для этого мы передали список найденных файлов команде grep, которая уже и выполнила поиск по содержимому данных файлов.
6. Произвести замену в файлах с помощью команды sed:
find /opt/project -type f -exec sed -i -e «s/test/production/g» {} \;
* находим все файлы в каталоге /opt/project и меняем их содержимое с test на production.
30.3. Утилита tar
Название утилиты расшифровывается как (ленточный архив). Данный инструмент используется для приема и передачи данных (обмен данными обычно осуществляется с ленточными накопителями или обычными фалами). Параметр c используется для создания архива формата tar (или файла формата tar), а параметр f — для указания имени . С помощью команды из примера ниже создается резервная копия директории /etc, которая сохраняется в файл /backup/etc.tar.
root@RHELv4u4:~# tar cf /backup/etc.tar /etc root@RHELv4u4:~# ls -l /backup/etc.tar -rw-r--r-- 1 root root 47800320 май 12 11:47 /backup/etc.tar root@RHELv4u4:~#
Для сжатия данных не потребуются программные каналы, ведь утилита tar поддерживает параметр z, предназначенный для сжатия данных с использованием алгоритма gzip, а также параметр j для сжатия данных с использованием алгоритма bzip2.
root@RHELv4u4:~# tar czf /backup/etc.tar.gz /etc root@RHELv4u4:~# tar cjf /backup/etc.tar.bz2 /etc root@RHELv4u4:~# ls -l /backup/etc.ta* -rw-r--r-- 1 root root 47800320 май 12 11:47 /backup/etc.tar -rw-r--r-- 1 root root 6077340 май 12 11:48 /backup/etc.tar.bz2 -rw-r--r-- 1 root root 8496607 май 12 11:47 /backup/etc.tar.gz root@RHELv4u4:~#
Параметр t используется для . Режим подробного вывода активируется с помощью параметра v (данный параметр также полезен в том случае, если вы хотите видеть информацию об обрабатываемых файлах в процессе их архивации).
root@RHELv4u4:~# tar tvf /backup/etc.tar drwxr-xr-x root/root 0 2007-05-12 09:38:21 etc/ -rw-r--r-- root/root 2657 2004-09-27 10:15:03 etc/warnquota.conf -rw-r--r-- root/root 13136 2006-11-03 17:34:50 etc/mime.types drwxr-xr-x root/root 0 2004-11-03 13:35:50 etc/sound/ ...
Для , следует использовать параметр t с передачей имени интересующего файла (без начального символа /).
root@RHELv4u4:~# tar tvf /backup/etc.tar etc/resolv.conf -rw-r--r-- root/root 77 2007-05-12 08:31:32 etc/resolv.conf root@RHELv4u4:~#
Используйте параметр x для или определенного файла из архива. Помните о том, что по умолчанию утилита tar будет извлекать файлы в текущую директорию.
root@RHELv4u4:~# tar xvf /backup/etc.tar etc/resolv.conf etc/resolv.conf root@RHELv4u4:~# ls -l /etc/resolv.conf -rw-r--r-- 2 root root 40 май 12 12:05 /etc/resolv.conf root@RHELv4u4:~# ls -l etc/resolv.conf -rw-r--r-- 1 root root 77 май 12 08:31 etc/resolv.conf root@RHELv4u4:~#
Вы можете активировать с помощью параметра p. Для задания файлов и директорий, которые не должны быть добавлены в архив, следует использовать параметр .
root ~# tar cpzf /backup/etc_with_perms.tgz /etc root ~# tar cpzf /backup/etc_no_sysconf.tgz /etc --exclude /etc/sysconfig root ~# ls -l /backup/etc_* -rw-r--r-- 1 root root 8434293 май 12 12:48 /backup/etc_no_sysconf.tgz -rw-r--r-- 1 root root 8496591 май 12 12:48 /backup/etc_with_perms.tgz root ~#
Также вы можете создать текстовый файл с именами файлов и директорий для архивации, после чего передать данный файл утилите tar, использовав параметр -T.
root@RHELv4u4:~# find /etc -name *.conf > files_to_archive.txt root@RHELv4u4:~# find /home -name *.pdf >> files_to_archive.txt root@RHELv4u4:~# tar cpzf /backup/backup.tgz -T files_to_archive.txt
Утилита tar может принимать имена файлов от утилиты find посредством специальной утилиты xargs.
find /etc -type f -name "*.conf" | xargs tar czf /backup/confs.tar.gz
Вы можете использовать утилиту tar для копирования директории, причем данная команда будет более эффективной, чем команда cp -r.
(cd /etc; tar -cf - . ) | (cd /backup/copy_of_etc/; tar -xpf - )
Другой пример использования утилиты tar предназначен для безопасного копирования директории по сети.
(cd /etc;tar -cf - . )|(ssh user@srv 'cd /backup/cp_of_etc/; tar -xf - ')
Утилита tar может использоваться совместно с утилитой gzip и клиентом ssh для копирования файла на удаленный сервер по протоколу ssh.
cat backup.tar | gzip | ssh [email protected] "cat - > backup.tgz"
Команда для сжатия файла резервной копии формата tar при передаче по сети с сохранением несжатого файла на целевом узле.
cat backup.tar | gzip | ssh [email protected] "gunzip|cat - > backup.tar"
Аналогичная предыдущей команда со сжатием данных силами клиента ssh.
cat backup.tar | ssh -C [email protected] "cat - > backup.tar"
Узнать расположение файла
Узнать где находится файл lsb_release можно командой which lsb_release. Чтобы сразу получить
дополнительную информацию выполните
ls -lF $(which lsb_release)
-rwxr-xr-x. 1 root root 15929 Mar 27 2015 /usr/bin/lsb_release*
Опция -F означает показать тип файлов. Поэтому нам удалось увидеть * после lsb_release. * означает, что файл
исполняемый.
Чтобы узнать откуда взялся файл можно воспользоваться командой rpm с опциями
q (query) и f (file)
rpm -qf $(which lsb_release)
redhat-lsb-core-4.1-27.el7.centos.1.x86_64
Чтобы скопировать файл в интерактивном режиме воспользуйтесь командой cp с опцией i (interactive)
interactive означает, что если файл с таким имененм существует, вас спросят прежде чем затирать его
cp -i /etc/hosts .
cp -i /etc/hosts .
cp: overwrite ‘./hosts’?
Чтобы создать директорию сразу же с поддиректорией внутри воспользуйтесь командлой
mkdir с опцией p (parent)
mkdir -p sites/heiheiru
ls -l sites
total 0
drwxrwxr-x. 2 andrei andrei 6 Nov 19 13:40 heiheiru
Основные параметры команды find
Я не буду перечислять здесь все параметры, рассмотрим только самые полезные.
-P никогда не открывать символические ссылки
-L – получает информацию о файлах по символическим ссылкам
Важно для дальнейшей обработки, чтобы обрабатывалась не ссылка, а сам файл.
-maxdepth – максимальная глубина поиска по подкаталогам, для поиска только в текущем каталоге установите 1.
-depth – искать сначала в текущем каталоге, а потом в подкаталогах
-mount искать файлы только в этой файловой системе.
-version – показать версию утилиты find
-print – выводить полные имена файлов
-type f – искать только файлы
-type d – поиск папки в Linux