Перейти к содержанию

4.3 Управление каталогами из командной строки (Managing Directories from the Command Line)

Теперь, когда вы понимаете, как устроена файловая система Linux, и умеете искать файлы, можно приступить к управлению файловой системой. В этой части главы мы сосредоточимся на управлении каталогами из приглашения командной строки. Будут рассмотрены следующие темы:

  • Навигация по файловой системе
  • Просмотр содержимого каталогов
  • Создание новых каталогов
  • Копирование, перемещение и удаление каталогов

Начнём с обсуждения навигации по файловой системе из приглашения командной строки.

При работе с файловой системой Linux из приглашения командной строки одной из наиболее частых задач является перемещение между различными каталогами на устройствах хранения данных. Система Linux предоставляет следующие команды оболочки для этой цели:

  • pwd
  • cd

Начнём с изучения команды pwd.

Использование команды pwd (Using the pwd Command)

Команда pwd — относительно простая утилита. Её название расшифровывается как Print Working Directory (вывести рабочий каталог). Эта команда просто отображает на экране текущий каталог.

Утилита может быть полезна, если профиль вашей оболочки не настроен на отображение текущего каталога в составе приглашения командной строки. Чтобы использовать pwd, достаточно ввести pwd в приглашении командной строки, как показано ниже:

rtracy@openSUSE:~> pwd
/home/rtracy

В этом примере видно, что текущим каталогом является /home/rtracy.

Совет

Символ ~ в приглашении командной строки указывает на домашний каталог текущего пользователя. Поскольку в приведённом примере выполнен вход под учётной записью rtracy, символ ~ указывает на каталог /home/rtracy.

Если использовать команду pwd с параметром -P, она отобразит физический путь к каталогу без учёта символьных ссылок. Работа со ссылками рассматривается далее в этой главе.

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

Использование команды cd (Using the cd Command)

Команда cd используется в приглашении командной строки Linux для смены каталогов в файловой системе. Чтобы воспользоваться этой командой, достаточно ввести cd с последующим именем каталога, в который нужно перейти. Это можно сделать двумя способами. Если ввести cd и затем имя каталога без указания полного пути к нему, команда cd предположит, что данный каталог является подкаталогом текущего. В следующем примере выполнена команда cd Documents:

rtracy@openSUSE:~> cd Documents/
rtracy@openSUSE:~/Documents>

Поскольку команда была выполнена из /home/rtracy, команда cd сменила текущий каталог на /home/rtracy/Documents. Такой способ называется использованием относительного пути (relative path). Путь, указанный вместе с командой, определяется относительно некоторой другой точки файловой системы — в данном случае каталога /home/rtracy.

С командой cd можно также использовать абсолютные пути. При использовании абсолютного пути (absolute path) указывается полный путь, начиная с /, к каталогу, в который нужно перейти, как в следующем примере:

rtracy@openSUSE:~> cd /var/log
rtracy@openSUSE:/var/log>

Поскольку был указан абсолютный путь (/var/log), команда cd поняла, что каталог /var/log не находится в текущем каталоге. Вместо этого путь был определён от корневого каталога (/), и произошла смена текущего каталога на него.

Совет

Если ввести cd в приглашении командной строки без указания пути, произойдёт автоматический переход в домашний каталог текущего пользователя.

Команду cd можно также использовать для перемещения вверх по иерархии файловой системы. Для этого нужно ввести cd .., что переместит текущий каталог на один уровень выше в иерархии. Рассмотрим следующий пример:

rtracy@openSUSE:/var/log> cd ..
rtracy@openSUSE:/var>

В этом примере выполнена команда cd .., которая переместила из /var/log в каталог /var. Чтобы подняться на два каталога выше, можно ввести команду cd ../.. в приглашении командной строки:

rtracy@openSUSE:/var/log> cd ../..
rtracy@openSUSE:/>

Совет

Можно также использовать псевдоним .. для перемещения на один уровень вверх в иерархии и псевдоним ... — для перемещения на два уровня вверх. Большинство дистрибутивов автоматически определяет эти псевдонимы в одном из файлов конфигурации bash.

Теперь рассмотрим команду ls.

Просмотр содержимого каталогов (Viewing Directory Contents)

К этому моменту вы научились определять текущий каталог и переходить в другие каталоги файловой системы. Теперь нужно научиться выводить список файлов и подкаталогов, которые могут находиться в каталоге. Это делается с помощью команды ls. Если ввести ls в приглашении командной строки, на экране отобразится содержимое текущего каталога, как показано ниже:

rtracy@openSUSE:~> ls
bin      Documents Music                 Public         Templates     test.txt     words
Desktop Downloads Pictures               public_html    test2.txt     Videos       yourfile.txt

Как и в случае с командой cd, при использовании ls можно также указывать абсолютный путь. Это заставит ls отобразить содержимое указанного каталога. Рассмотрим пример:

rtracy@openSUSE:~> ls /var/log
acpid       cups           mail                         ntp                    Xorg.0.log.old
apparmor    faillog        mail.err                     pk_backend_zypp        YaST2
audit       firewall       mail.info                    pm-powersave.log       zypp
boot.log    gdm            mail.warn                    samba                  zypper.log
boot.msg    krb5           messages                     warn
boot.omsg   lastlog        NetworkManager               wtmp
ConsoleKit localmessages news                           Xorg.0.log

В этом примере выполнена команда ls /var/log, что привело к отображению содержимого /var/log. При работе с ls можно использовать различные параметры для настройки её поведения. Ниже приведены некоторые из них:

  • -a — отображает все файлы, включая скрытые. В следующем примере выполнена команда ls -a в каталоге /home/rtracy:

    rtracy@openSUSE:~> ls -a
    .              .esd_auth                .inputrc                   test2.txt
    ..             .fontconfig              .local                     test.txt
    .bash_history .fonts                    .mozilla                   .themes
    .bashrc        .gconf                   Music                      .thumbnails
    bin            .gconfd                  .nautilus                  Videos
    .cache         .gnome2                  Pictures                   .viminfo
    .config        .gnome2_private          .profile                   .vimrc
    .dbus          .gstreamer-0.10          Public                     words
    Desktop        .gtk-bookmarks           public_html                .xim.template
    .dmrc          .gvfs                    .pulse                     .xinitrc.template
    Documents      .hplip                   .pulse-cookie              .xsession-errors
    Downloads      .ICEauthority            .recently-used.xbel        .xsession-errors.old
    .emacs         .icons                   Templates                  yourfile.txt
    
  • -l — выводит подробный список содержимого каталога. Это очень полезный параметр. С его помощью можно просматривать имена файлов, сведения о владельце, права доступа, даты изменения и размеры. Пример показан ниже:

    rtracy@openSUSE:~> ls -l
    total 56
    drwxr-xr-x 2 rtracy users 4096 2011-01-19 10:41 bin
    drwxr-xr-x 2 rtracy users 4096 2011-01-19 10:42 Desktop
    drwxr-xr-x 2 rtracy users 4096 2011-01-19 10:42 Documents
    drwxr-xr-x 2 rtracy users 4096 2011-01-19 10:42 Downloads
    drwxr-xr-x 2 rtracy users 4096 2011-01-19 10:42 Music
    drwxr-xr-x 2 rtracy users 4096 2011-01-19 10:42 Pictures
    drwxr-xr-x 2 rtracy users 4096 2011-01-19 10:42 Public
    drwxr-xr-x 2 rtracy users 4096 2011-01-19 10:41 public_html
    drwxr-xr-x 2 rtracy users 4096 2011-01-19 10:42 Templates
    -rw-r--r-- 1 rtracy users   37 2011-01-20 11:04 test2.txt
    -rw-r--r-- 1 rtracy users 182 2011-01-21 11:48 test.txt
    drwxr-xr-x 2 rtracy users 4096 2011-01-19 10:42 Videos
    -rw-r--r-- 1 rtracy users   23 2011-01-20 11:32 words
    -rw-r--r-- 1 rtracy users 121 2011-01-21 11:46 yourfile.txt
    
  • -R — отображает содержимое каталога рекурсивно, то есть выводит содержимое текущего каталога вместе с содержимым всех подкаталогов. В зависимости от количества записей в каталоге может потребоваться добавить | more после использования этого параметра. Это заставит утилиту more приостанавливать вывод постранично.

На большинстве дистрибутивов определены несколько псевдонимов для команды ls. Например, в openSUSE псевдоним dir или ll запускает команду ls -l, псевдоним l запускает ls -alF, а псевдоним la запускает ls -la.

Приведённый список охватывает лишь часть доступных параметров команды ls. Полный перечень можно просмотреть на странице руководства или в info-узле команды ls.

Попрактикуемся в навигации по файловой системе в следующем упражнении.

Упражнение 4-2. Навигация по файловой системе

В этом упражнении вы попрактикуетесь в использовании команд оболочки для навигации по файловой системе Linux. Упражнение можно выполнить на виртуальной машине, прилагаемой к книге. Для получения правильно настроенной среды запустите снимок состояния 4-1.

Совет

Посмотрите видеозапись упражнения 4-2 с демонстрацией выполнения этого задания.

Выполните следующее:

  1. Загрузите систему Linux и войдите под учётной записью student с паролем student.
  2. При необходимости откройте сеанс терминала.
  3. Определите текущий рабочий каталог, введя в приглашении командной строки pwd. Какой каталог является текущим?
  4. Перейдите в каталог /etc, введя в приглашении командной строки cd /etc.
  5. Получите список текущего каталога, введя ls.
  6. Получите подробный список текущего каталога, введя ls -l.
  7. Получите подробный список с постраничным выводом, введя ls -l | more. Пролистайте список постранично.
  8. Вернитесь в домашний каталог, введя cd ~.
  9. Введите ls.
  10. Просмотрите скрытые файлы в домашнем каталоге пользователя, введя ls -a. Какие файлы отображает ls -a, которые не отображает ls?

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

Создание новых каталогов (Creating New Directories)

Для создания новых каталогов можно использовать команды оболочки. Это делается с помощью команды mkdir. Нужно ввести mkdir в приглашении командной строки с последующим именем создаваемого каталога. В следующем примере из домашнего каталога пользователя rtracy была выполнена команда mkdir MyFiles:

rtracy@openSUSE:~> mkdir MyFiles
rtracy@ openSUSE:~> ls
bin        Downloads Pictures                    Templates   Videos
Desktop    Music       Public                    test2.txt   words
Documents MyFiles      public_html               test.txt    yourfile.txt

Обратите внимание, что в выводе команды ls появился новый каталог MyFiles, созданный в /home/rtracy. Разумеется, при необходимости создать каталог не в текущем каталоге, а в другом месте файловой системы можно использовать абсолютный путь. Например, для создания каталога backup в каталоге /tmp нужно ввести в приглашении командной строки mkdir /tmp/backup.

На многих дистрибутивах в файле конфигурации оболочки определён псевдоним md, запускающий команду mkdir -p. Параметр -p указывает, что при необходимости должен быть создан весь указанный в команде путь к каталогу. Например, команда md ~/temp/backups/daily создаст каталоги temp и backups, если они ещё не существуют, а затем создаст каталог daily.

Копирование, перемещение и удаление каталогов (Copying, Moving, and Deleting Directories)

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

  • cp — эта утилита используется для копирования структур каталогов целиком из одного места файловой системы в другое.

    Для копирования структуры каталога целиком необходимо включить параметр -R, который указывает, что содержимое каталога должно быть скопировано рекурсивно. В следующем примере в домашнем каталоге пользователя rtracy была выполнена команда cp -R ~/MyFiles ~/backup. Это привело к копированию каталога MyFiles вместе со всеми файлами и подкаталогами в каталог backup домашнего каталога пользователя. Поскольку cp копирует каталог, исходный каталог остаётся нетронутым.

    rtracy@ openSUSE:~> cp -R ~/MyFiles ~/backup
    rtracy@ openSUSE:~> ls
    backup   Documents MyFiles    public_html test.txt                  yourfile.txt
    bin      Downloads Pictures Templates      Videos
    Desktop Music       Public    test2.txt    words
    
  • mv — команда mv работает схожим с cp образом. Однако она копирует указанный каталог в новое место файловой системы, а затем удаляет оригинал. Например, для перемещения каталога backup из домашнего каталога в /tmp нужно ввести mv ~/backup /tmp. Команду mv также можно использовать для переименования каталогов. Для этого достаточно ввести mv с указанием переименовываемого каталога и нового имени. Например, для переименования каталога backup в домашнем каталоге в temp нужно ввести mv ~/backup ~/temp.

  • rmdir — эта утилита используется для удаления существующего каталога. Чтобы ею воспользоваться, достаточно ввести rmdir имя_каталога, например rmdir MyFiles. Следует учитывать, что rmdir требует, чтобы каталог был пустым, прежде чем его удалить. На многих дистрибутивах в файле конфигурации оболочки определён псевдоним rd, запускающий команду rmdir.

  • rm — утилита rm является более мощным инструментом удаления, позволяющим удалять непустые каталоги. Для удаления каталога нужно ввести rm -r имя_каталога.

Итак, именно так управляются каталоги из приглашения командной строки. Теперь необходимо обсудить управление файлами внутри этих каталогов из приглашения командной строки. Рассмотрим это далее.