Библиотека сайта rus-linux.net
Фундаментальные основы Linux. Часть II: Первые шаги в изучении интерфейса командной строки
Оригинал: Linux FundamentalsАвтор: Paul Cobbaut
Дата публикации: 16 октября 2014 г.
Перевод: А.Панин
Дата перевода: 12 декабря 2014 г.
Глава 7. Работа с файлами
Из данной главы вы узнаете о том, как определять тип файлов, создавать, удалять, копировать и перемещать файлы с помощью таких утилит, как file
, touch
, rm
, cp
, mv
и rename
.
Все имена файлов регистрозависимы
Имена файлов в Linux (или в любой системе Unix) являются регистрозависимыми. Это означает, что имена FILE1
и file1
не являются равноценными, а путь к файлу /etc/hosts
отличен от пути к файлу /etc/Hosts
(последнего файла не должно существовать в файловой системе типичного компьютера, работающего под управлением Linux).
W
, а второго - с прописной буквы w
.
paul@laika:~/Linux$ ls winter.txt Winter.txt paul@laika:~/Linux$ cat winter.txt Холодно. paul@laika:~/Linux$ cat Winter.txt Очень холодно!
Все является файлом
Любая директория
на самом деле является файлом
(с регистрозависмым именем!), хотя этот файл
и имеет специальный тип. Каждый терминал (например, /dev/pts/4
), любой жесткий диск или раздел на нем (например, /dev/sdb1
) и любой процесс представлены где-либо в рамках файловой системы
с помощью файла
. После изучения данной главы у вас не останется сомнений в том, что в Linux все является файлом
.
Утилита file
file
предназначена для определения типа файла. В Linux для определения типов файлов не используются их расширения. Для инструментов с интерфейсом командной строки абсолютно безразлично, оканчивается ли имя файла на .txt или на .pdf. Исполняя обязанности системного администратора, вы должны использовать команду file
для установления типа интересующего вас файла. Ниже приведено несколько примеров использования данной утилиты при работе с типичной системой Linux.
paul@laika:~$ file pic33.png pic33.png: PNG image data, 3840 x 1200, 8-bit/color RGBA, non-interlaced paul@laika:~$ file /etc/passwd /etc/passwd: ASCII text paul@laika:~$ file HelloWorld.c HelloWorld.c: ASCII C program text
Утилита file использует файл со списком "магических последовательностей байт", содержащий шаблоны для распознавания типов данных. Файл со списком "магических последовательностей байт" расположен по пути /usr/share/file/magic
. Используйте команду man 5 magic
в случае необходимости получения дополнительной информации о нем.
/dev
и /proc
, следует использовать команду file -s
.
root@debian6~# file /dev/sda /dev/sda: block special root@debian6~# file -s /dev/sda /dev/sda: x86 boot sector; partition 1: ID=0x83, active, starthead... root@debian6~# file /proc/cpuinfo /proc/cpuinfo: empty root@debian6~# file -s /proc/cpuinfo /proc/cpuinfo: ASCII C++ program text
Утилита touch
Создание пустого файла
Один из простых способов создания пустого фала заключается в использовании утилиты touch
. (Позднее в данной книге мы рассмотрим множество других способов создания файлов.)
touch
создаются два файла, после чего выводится список созданных файлов.
paul@debian7:~$ ls -l итого 0 paul@debian7:~$ touch file42 paul@debian7:~$ touch file33 paul@debian7:~$ ls -l итого 0 -rw-r--r-- 1 paul paul 0 окт 15 08:57 file33 -rw-r--r-- 1 paul paul 0 окт 15 08:56 file42 paul@debian7:~$
Команда touch -t
touch
позволяет устанавливать набор значений свойств пустых файлов в процессе их создания. Удастся ли вам определить, какие значения свойств были установлены, ознакомившись с приведенным ниже примером? Если вы не смогли разобраться самостоятельно, обратитесь к странице руководства для утилиты touch
.
paul@debian7:~$ touch -t 200505050000 SinkoDeMayo paul@debian7:~$ touch -t 130207111630 BigBattle.txt paul@debian7:~$ ls -l total 0 -rw-r--r-- 1 paul paul 0 июл 11 1302 BigBattle.txt -rw-r--r-- 1 paul paul 0 окт 15 08:57 file33 -rw-r--r-- 1 paul paul 0 окт 15 08:56 file42 -rw-r--r-- 1 paul paul 0 май 5 2005 SinkoDeMayo paul@debian7:~$
rm
Удаление файлов навсегда
rm
для его удаления. В отличие от некоторых графических пользовательских интерфейсов, интерфейс командной строки системы не предполагает использования таких хранилищ файлов, как корзина
, предназначенных для последующего восстановления удаленных файлов. Если вы удалили файл с помощью утилиты rm
, этот файл будет удален навсегда. Исходя из этого, следует проявлять осторожность при удалении файлов!
paul@debian7:~$ ls BigBattle.txt file33 file42 SinkoDeMayo paul@debian7:~$ rm BigBattle.txt paul@debian7:~$ ls file33 file42 SinkoDeMayo paul@debian7:~$
Команда rm -i
rm -i
.
paul@debian7:~$ ls file33 file42 SinkoDeMayo paul@debian7:~$ rm -i file33 rm: удалить пустой обычный файл "file33"? yes paul@debian7:~$ rm -i SinkoDeMayo rm: удалить пустой обычный файл "SinkoDeMayo"? n paul@debian7:~$ ls file42 SinkoDeMayo paul@debian7:~$
Команда rm -rf
rm -r
невозможно удалить непустые директории. Однако, утилита rm
принимает параметры, которые позволят вам удалять любую директорию. Команда rm -rf
известна благодаря тому, что она позволяет удалять все элементы файловой системы (конечно же, в том случае, если вы имеете достаточные права для выполнения этой операции). В том случае, если вы вошли в систему, воспользовавшись учетной записью пользователя root, следует проявить особую осторожность при использовании команды rm -rf
(параметр f
расшифровывается как force
(принудительное выполнение операции), а параметр r
- как recursive
(рекурсивный обход директорий)), так как в случае работы с учетной записью пользователя root, упомянутые ограничения прав не будут распространяться на вас. Вы сможете в буквальном смысле удалить все файлы вашей системы по неосторожности.
paul@debian7:~$ mkdir test paul@debian7:~$ rm test rm: невозможно удалить "test": Это каталог paul@debian7:~$ rm -rf test paul@debian7:~$ ls test ls: невозможно получить доступ к test: Нет такого файла или каталога paul@debian7:~$
Утилита cp
Копирование отдельных файлов
cp
с аргументами, представленными путями к исходному и целевому файлам.
paul@debian7:~$ ls file42 SinkoDeMayo paul@debian7:~$ cp file42 file42.copy paul@debian7:~$ ls file42 file42.copy SinkoDeMayo
Копирование файлов в другую директорию
paul@debian7:~$ mkdir dir42 paul@debian7:~$ cp SinkoDeMayo dir42 paul@debian7:~$ ls dir42/ SinkoDeMayo
Команда cp -r
cp -r
(параметр -r
позволяет осуществлять рекурсивное копирование всех файлов из всех поддиректорий).
paul@debian7:~$ ls dir42 file42 file42.copy SinkoDeMayo paul@debian7:~$ cp -r dir42/ dir33 paul@debian7:~$ ls dir33 dir42 file42 file42.copy SinkoDeMayo paul@debian7:~$ ls dir33/ SinkoDeMayo
Копирование множества файлов в директорию
paul@debian7:~$ cp file42 file42.copy SinkoDeMayo dir42/ paul@debian7:~$ ls dir42/ file42 file42.copy SinkoDeMayo
Команда cp -i
cp
следует использовать параметр -i
(для активации интерактивного режима копирования).
paul@debian7:~$ cp SinkoDeMayo file42 paul@debian7:~$ cp SinkoDeMayo file42 paul@debian7:~$ cp -i SinkoDeMayo file42 cp: переписать "file42"? n paul@debian7:~$
Утилита mv
Переименование файлов с помощью утилиты mv
mv
используется для переименования файлов или для перемещения файлов в другие директории.
paul@debian7:~$ ls dir33 dir42 file42 file42.copy SinkoDeMayo paul@debian7:~$ mv file42 file33 paul@debian7:~$ ls dir33 dir42 file33 file42.copy SinkoDeMayo paul@debian7:~$
В том случае, если вам необходимо переименовать один файл, утилита mv
является предпочтительным инструментом.
Переименование директорий с помощью утилиты mv
mv
может быть использована и для переименования директорий.
paul@debian7:~$ ls -l итого 8 drwxr-xr-x 2 paul paul 4096 окт 15 09:36 dir33 drwxr-xr-x 2 paul paul 4096 окт 15 09:36 dir42 -rw-r--r-- 1 paul paul 0 окт 15 09:38 file33 -rw-r--r-- 1 paul paul 0 окт 15 09:16 file42.copy -rw-r--r-- 1 paul paul 0 май 5 2005 SinkoDeMayo paul@debian7:~$ mv dir33 backup paul@debian7:~$ ls -l итого 8 drwxr-xr-x 2 paul paul 4096 окт 15 09:36 backup drwxr-xr-x 2 paul paul 4096 окт 15 09:36 dir42 -rw-r--r-- 1 paul paul 0 окт 15 09:38 file33 -rw-r--r-- 1 paul paul 0 окт 15 09:16 file42.copy -rw-r--r-- 1 paul paul 0 май 5 2005 SinkoDeMayo paul@debian7:~$
Команда mv -i
Утилита mv
поддерживает параметр -i
по аналогии с утилитами cp
и rm
.
mv -i
запрашивается подтверждение перезаписи существующего файла.
paul@debian7:~$ mv -i file33 SinkoDeMayo mv: переписать "SinkoDeMayo"? no paul@debian7:~$
Утилита rename
Об утилите rename
Утилита rename
является одним из редких случаев, когда в рамках книги "Фундаментальные основы Linux" приходится делать разделение между дистрибутивами Linux. Практически каждая из описанных в данной книге утилит работает практически на каждом компьютере под управлением Linux. Но реализации утилиты rename
в различных дистрибутивах отличаются.
Следует пытаться использовать утилиту mv
всегда, когда вам необходимо переименовать несколько файлов.
Утилита rename в дистрибутиве Debian/Ubuntu
Утилита rename
в дистрибутиве Debian имеет сложный синтаксис (используются регулярные выражения) для единовременного переименования множества файлов.
rename
, с помощью которой у всех файлов с расширением .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
"file"
на "document"
во всех файлах с расширением .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
rename
немного отличается. В первом примере, представленном ниже, осуществляется переименование всех файлов с расширением .conf (*.conf) путем замены всех вхождений .conf на .backup.
[paul@centos7 ~]$ touch one.conf two.conf three.conf [paul@centos7 ~]$ rename .conf .backup *.conf [paul@centos7 ~]$ ls one.backup three.backup two.backup [paul@centos7 ~]$
[paul@centos7 ~]$ ls one.backup three.backup two.backup [paul@centos7 ~]$ rename one ONE * [paul@centos7 ~]$ ls ONE.backup three.backup two.backup [paul@centos7 ~]$
Практическое задание: работа с файлами
-
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. Работа с содержимым файлов |