Работа с файлами и каталогами в Bash
Большая часть работы, производимая в Bash, связана с файловой системой UNIX. Каждый, кто когда-либо использовал менеджер файлов, наверняка представляет себе файловую систему как дерево. То же самое верно и для командной строки. Все файлы и каталоги берут свое начало из каталога /, являющегося корневым узлом всей файловой системы. В таблице 2 приводится список стандартных каталогов, которые имеются в большинстве UNIX-систем.
Таблица 2. Стандартные каталоги UNIX-систем
| Каталог | Расписание |
|---|---|
| / | Корневой каталог для всех UNIX-систем; содержит все остальные файлы. |
| /bin | Содержит бинарные версии файлов системных приложений, таких как файл самой командной оболочки Bash. |
| /dev | Каталог содержит псевдофайлы, представляющие физические устройства, такие как жесткие диски. |
| /etc | В этом каталоге хранится большая часть конфигурационных файлов системы. |
| /lib | Каталог содержит файлы библиотек, необходимых для системных приложений. |
| /opt | Каталог содержит необязательные компоненты системы или приложения. |
| /tmp | Каталог содержит временные файлы, используемые системой или пользовательскими приложениями. |
| /usr | Содержит пользовательские и некритичные для работы системы приложения и связанные компоненты. |
| /var | Каталог содержит различные файлы, необходимые для системных приложений, такие как файлы журналов и файлы буферов. |
В UNIX есть несколько команд, которые позволяют легко создавать, просматривать, удалять каталоги и изменять текущий рабочий каталог:
-
cdcизменяет текущий рабочий каталог на домашний каталог пользователя. -
cd dirnameизменяет текущий рабочий каталог на каталог dirname. -
ls dirnameвыводит список содержимого каталога dirname. -
mkdir dirnameсоздает новый каталог с именем dirname. -
pwdвыводит полный путь к текущему рабочему каталогу. -
rmdir dirnameудаляет каталог с именем dirname.
Чтобы выполнить любую из этих команд, нужно просто набрать команду в командной строке Bash (включая необходимое имя каталога) и нажать клавишу Enter.
Есть также несколько полезных сокращений для имен каталогов:
- Одиночная точка (
.) обозначает текущий рабочий каталог. - Две точки (
..) обозначают родительский каталог текущего рабочего. - Тильда (
~) обозначает домашний каталог пользователя (обычно это каталог, который является текущим рабочим при запуске Bash).
В листинге 3 показано, насколько просто использовать эти команды.
Листинг 3. Работа с каталогами в Bash
rb$ pwd
/home/rb
rb$ mkdir temp
rb$ cd temp
rb$ ls
rb$ cd ..
rb$ pwd
/home/rb
rb$ rmdir temp
rb$ ls ..
lost+found rb root
rb$ ls /
bin etc lib misc proc usr
boot home lost+found mnt tmp var
dev initrd opt sbin sys
|
Команды, выполняемые в предыдущем листинге, достаточно просты. Первая из них выводит на экран путь к текущему рабочему каталогу. Следующими командами создается новый каталог с именем temp, рабочий каталог изменяется на созданный, выводится содержимое этого каталога (на экран не выводится ничего, поскольку каталог пуст). Затем рабочий каталог изменяется на родительский, проверяется, что он совпадает с тем, с которого была начата работа, и только что созданный каталог удаляется. Наконец, выводится содержимое родительского для домашнего каталога пользователя (то есть каталога /home) и содержимое корневого каталога файловой системы.
При работе в Bash можно использовать множество команд, которые работают напрямую с файлами. Полный список таких команд весьма обширен, но вот некоторые наиболее полезные:
-
cp file1 file2копирует file1 в file2. -
mv file1 file2переименовывает file1 в file2. -
mv filename dirnameперемещает файл filename в каталог dirname . -
less filenameотображает содержимое файла в формате, удобном для чтения в окне терминала. -
file filenameуказывает наиболее вероятный тип файла -
cat filenameвыводит все содержимое файла. -
head filenameотображает первые десять строк файла (точное число отображаемых строк можно задавать). -
tail filenameотображает последние десять строк файла (точное число отображаемых строк можно задавать). -
diff file1 file2отображает различия, если они существуют, между файлами file1 и file2. -
grep string filenameищет в файле строки, содержащие string. -
rm filenameудаляет файл.
В листинге 4 демонстрируется, насколько просто использовать представленные в списке команды. Начинающим пользователям полезно запустить терминал и попробовать эти команды в действии. Нужно помнить, что полная информация по работе программ содержится в руководствах man. Например, набрав команду man cp, можно прочитать соответствующую страницу руководства по команде копирования.
Листинг 4. Работа с файлами в Bash
rb$ $ cp .bashrc old.bashrc
rb$ diff old.bashrc .bashrc
rb$ cat ~/.bash_profile
source ~/.bashrc
rb$ cat ~/.bashrc
export PS1='\u\$ '
export DERBY_INSTALL='/opt/Apache/db-derby-10.1.2.1-bin'
export CLASSPATH=$DERBY_INSTALL/lib/derby.jar:$DERBY_INSTALL/lib/derbytools.jar:.
rb$ head -4 /usr/share/dict/web2
A
a
aa
aal
rb$ tail -4 /usr/share/dict/web2
Zythia
zythum
Zyzomys
Zyzzogeton
rb$ grep exuberance /usr/share/dict/web2
exuberance
rb$ file bash-tutorial.zip
bash-tutorial.zip: Zip archive data, at least v2.0 to extract
rb$ file bash-tutorial.xml
bash-tutorial.xml: XML document text
|
Команды работы с файлами, представленные в листинге, просты и сопровождаются примерами копирования файлов, просмотра содержимого, поиска вхождения определенных строк и распознавания типа для различных файлов. Прежде всего с помощью команды копирования мы создаем дубликат файла .bashrc, который будет обсуждаться позже. Этот файл позволяет настраивать поведение и внешний вид командной оболочки Bash. Можно воспользоваться командой diff, чтобы убедиться, что эти файлы действительно одинаковы - а поскольку это так, никаких различий выведено не будет. Затем с помощью команды cat мы отображаем содержимое файлов .bash_profile и .bashrc. Содержимое этих двух файлов будет обсуждаться детально в следующем разделе.
В следующих двух примерах листинга с помощью команд head и tail выводятся первые и последние строки файла соответственно. Указанный в этих примерах флаг -4 задает вывод на экран только четырех строк вместо принятых по умолчанию десяти. Далее с помощью команды grep мы находим вхождения строки exuberance в словаре, установленном на компьютере. Наконец, в последних двух примерах с помощью команды file отображаются типы двух различных файлов.