Linux mkdir p это

Обновлено: 02.07.2024

В данной главе приводится краткий обзор большинства стандартных команд, используемых при работе с директориями: pwd , cd , ls , mkdir и rmdir . Эти команды доступны при работе с любой системой Linux (или Unix).

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

Команда pwd

С помощью команды pwd (расшифровывается как Print Working Directory - вывести информацию о рабочей директории) может быть получена информация о вашем текущем местонахождении в рамках файловой системы. Попробуйте выполнить эту команду: получите доступ к интерфейсу командной строки системы (воспользовавшись одним из приложений со следующими названиями: terminal, console или xterm) и введите команду pwd . Командная оболочка выведет путь к вашей текущей директории .

Команда cd

Вы можете изменить вашу текущую директорию с помощью команды cd (расшифровывается как Change Directory - изменить директорию). Команда cd также может использоваться для быстрого перехода назад в вашу домашнюю директорию. Простое исполнение команды cd без задания пути к целевой директории приведет к перемещению в домашнюю директорию. Исполнение команды cd

приведет к аналогичному эффекту.

Команда cd ..

Для перехода в родительскую директорию (ту директорию, которая находится над вашей текущей директорией в дереве директорий) следует использовать команду cd .. .

Для того, чтобы остаться в текущей директории, просто введите команду cd . ;-) Позднее мы все же познакомимся с практическим примером использования символа . , представляющего текущую директорию.

Команда cd -

Другой полезный вариант использования команды cd заключается в выполнении простой команды cd - для перехода в предыдущую директорию.

Абсолютные и относительные пути

Вы должны иметь представление об абсолютных и относительных путях в рамках дерева директорий файловой системы. Если вы вводите путь, начинающийся с символа слэша (/) , подразумевается, что путь будет указан относительно корневой директории файловой системы. Если же вы не начинаете ввод пути с символа слэша, подразумевается, что точкой отсчета будет текущая директория.

В примере ниже показано, что текущей директорией является директория /home/paul . Для перехода из этой директории в директорию /home вам придется ввести команду cd /home вместо команды cd home . При нахождении в директории /home вам придется ввести команду cd paul вместо команды cd /paul для перехода в поддиректорию paul текущей директории /home . В том же случае, если вашей текущей директорией является корневая директория / , то и команда cd /home , и команда cd home позволят вам переместиться в директорию /home .

Этот пример был последним примером, в котором используются команды pwd . С этого момента информация о текущей директории будет всегда выводиться в рамках приглашения командной оболочки. Далее в данной книге будут даны пояснения относительно того, как следует использовать переменную командной оболочки $PS1 для вывода описанной информации.

Завершение путей

Клавиша TAB может помочь избежать ошибок при вводе путей. Нажатие клавиши TAB после ввода части команды cd /et приведет к завершению команды до вида cd /etc/ . При этом нажатие клавиши TAB после ввода команды cd /Et не приведет ни к чему, так как была допущена ошибка при вводе части пути (использована буква E в верхнем регистре).

Вам придется нажимать меньше клавиш в случае использования клавиши TAB , к тому же, при использовании этой клавиши вы можете быть уверены в том, что введенный путь является корректным!

Утилита ls

Вы можете вывести список содержимого директории с помощью утилиты ls .

Команда ls -a

Часто используемым параметром утилиты ls является параметр -a , который предназначен для вывода информации обо всех файлах. Под выводом информации обо всех файлах подразумевается вывод информации в том числе и о скрытых файлах . В том случае, если имя файла в рамках файловой системы Linux начинается с символа точки, он считается скрытым файлом и не включается в обычные списки содержимого директорий.

Команда ls -l

Вам придется многократно использовать параметры утилиты ls для вывода информации о содержимом директории в различных форматах или для вывода информации о различных файлах из директории. Команда ls без параметров позволяет получить список файлов, расположенных в директории. Команда ls -l (в качестве параметра использована строчная буква L, а не число 1) позволяет получить более подробный список файлов.

Команда ls -lh

Другим периодически используемым параметром утилиты ls является параметр -h . Он позволяет выводить числовые значения (соответствующие размерам файлов) в формате, лучше читаемом человеком. Также в примере ниже показаны варианты передачи параметров утилите ls . Позднее в данной книге будут даны подробные пояснения относительно выводимых данных.

Обратите внимание на то, что мы используем строчную букву L, а не число 1 в качестве параметра утилиты в данном примере.

Утилита mkdir

Обход дерева директорий файловой системы Unix является интересным занятием, но еще больший интерес представляет создание ваших собственных директорий с помощью утилиты mkdir . Вам придется передавать как минимум один параметр утилите mkdir , а именно, имя новой директории, которая должна быть создана. При этом следует серьезно задумываться перед использованием начального символа / в именах директорий.

Команда mkdir -p

Исполнение следующей команды закончится неудачей, так как родительской директории для директории threedirsdeep не существует. В случае использования параметра -p утилиты mkdir при необходимости будут создаваться родительские директории.

Утилита rmdir

В том случае, если директория пуста, вы можете использовать утилиту rmdir для удаления этой директории.

Команда rmdir -p

И по аналогии с параметром mkdir -p , вы также можете использовать утилиту rmdir для рекурсивного удаления директорий.

Практическое задание: работа с директориями

1. Выведите путь к вашей текущей директории.

2. Перейдите в директорию /etc.

3. А теперь перейдите в вашу домашнюю директорию с помощью ровно трех нажатий клавиш.

4. Перейдите в директорию /boot/grub с помощью ровно одиннадцати нажатий клавиш.

5. Перейдите в родительскую директорию для текущей директории.

6. Перейдите в корневую директорию.

7. Выведите список содержимого корневой директории.

8. Выведите подробный список содержимого корневой директории.

9. Оставаясь в текущей рабочей директории, выведите список содержимого директории /etc.

10. Оставаясь в текущей директории, выведите список содержимого директорий /bin и /sbin.

11. Оставаясь в текущей директории, выведите список содержимого директории

12. Выведите список всех файлов (включая скрытые файлы), находящихся в вашей домашней директории.

13. Выведите список файлов, находящихся в директории /boot, с использованием формата величин для облегчения чтения человеком.

14. Создайте директорию testdir в вашей домашней директории.

15. Перейдите в директорию /etc и, оставаясь в ней, создайте директорию newdir в вашей домашней директории.

16. Создайте с помощью одной команды директории

/dir1/dir1/dir2/dir3 (директория dir3 является поддиректорией директории dir2, а директория dir2 - поддиректорией директории dir1).

17. Удалите директорию testdir.

18. Если позволяет время (или вы ждете момента, когда остальные студенты закончат выполнение данного практического задания), попытайтесь воспользоваться командами pushd и popd и понять принцип их работы. Обратитесь к странице руководства man для командной оболочки bash с целью поиска информации о данных командах.

Корректная процедура выполнения практического задания: работа с директориями

1. Выведите путь к вашей текущей директории.

2. Перейдите в директорию /etc.

3. А теперь перейдите в вашу домашнюю директорию с помощью ровно трех нажатий клавиш.

4. Перейдите в директорию /boot/grub с помощью ровно одиннадцати нажатий клавиш.

5. Перейдите в родительскую директорию для текущей директории.

6. Перейдите в корневую директорию.

7. Выведите список содержимого корневой директории.

8. Выведите подробный список содержимого корневой директории.

9. Оставаясь в текущей рабочей директории, выведите список содержимого директории /etc.

10. Оставаясь в текущей директории, выведите список содержимого директорий /bin и /sbin.

11. Оставаясь в текущей директории, выведите список содержимого директории

12. Выведите список всех файлов (включая скрытые файлы), находящихся в вашей домашней директории.

13. Выведите список файлов, находящихся в директории /boot, с использованием формата величин для облегчения чтения человеком.

14. Создайте директорию testdir в вашей домашней директории.

15. Перейдите в директорию /etc и, оставаясь в ней, создайте директорию newdir в вашей домашней директории.

16. Создайте с помощью одной команды директории

/dir1/dir1/dir2/dir3 (директория dir3 является поддиректорией директории dir2, а директория dir2 - поддиректорией директории dir1).

17. Удалите директорию testdir.

18. Если позволяет время (или вы ждете момента, когда остальные студенты закончат выполнение данного практического задания), попытайтесь воспользоваться командами pushd и popd и понять принцип их работы. Обратитесь к странице руководства man для командной оболочки bash с целью поиска информации о данных командах.

Продолжение перевода первой части руководства. Начало тут.

В данном отрывке рассмотрены команды работы с файловой системой и файлами, такие как ls, mkdir, touch, mv, cp, затронуто использование echo и cat. Рассказано про иноды файловой системы.

Использование команд Linux

Знакомство с ls

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

Указав опцию -a, вы можете увидеть полный список, включая скрытые файлы и директории, начинающиеся с ".". Как видно в следующем примере, ls -a выводит также особые связывающие директории "." и "..":

Развернутые списки директорий

Вы также можете задать одну и более директорий или файлов в командной строке с ls. Если вы укажите файл, то ls покажет вам только этот файл. А если зададите директорию, то ls выдаст ее содержимое. Опция -l очень удобна, когда необходимо посмотреть права доступа, владельца, время последнего изменения и размер в списке содержимого директории.

В следующем примере мы использовали опцию -l чтобы отобразить содержимое моей директории /usr:

Первая колонка показывает информацию о правах доступа для каждого элемента. Чуть позже я объясню, как её интерпретировать. Следующая колонка содержит числа ссылок на каждый элемент файловой системы, позже мы вернемся к этому. Третья и четвертая колонки — это список владельцев и групп, соответственно. Пятая колонка — размер объекта. Шестая — время последнего изменения (mtime) объекта. И наконец, последняя колонка с именами объектов. Если файлы являются символическими ссылками, то вы увидите стрелку -> и путь, куда указывает эта символическая ссылка.

Смотрим на директории

Иногда вы захотите взглянуть на директорию, а не внутрь нее. В этом случае вы можете указать опцию -d, которая скажет ls рассматривать любую директорию, как внутреннюю:

Рекурсивный и инодный списки

Так вы можете использовать -d чтобы смотреть на директорию, но также можно использовать -R для противоположного: не только лишь глянуть внутрь директории, но и рекурсивно посмотреть все директории с файлами внутри нее! Мы не включим в руководство никакого примера вывода для этой опции (поскольку обычно он очень объемный), но возможно вы захотите попробовать несколько команд ls -R и ls -Rl, чтобы почувствовать как это работает.

Наконец, опция -i может использоваться для отображения номеров инодов для объектов в списке файловой системы:

Понятие инода

Каждому объекту файловой системы назначен уникальный индекс, называемый номером инода. Это может показаться банальным, но понятие инодов очень важно для понимания большинства операций в файловой системе. Рассмотрим например ссылки "." и "..", которые появляются в каждой директории. Чтобы полностью понять, чем на самом деле является директория "..", мы сперва взглянем на номер инода у /usr/local:

$ ls -id /usr/local
5120 /usr/local

У директории /usr/local номер инода равен 5120. А теперь посмотрим номер инода у /usr/local/bin/..:

$ ls -id /usr/local/bin/..
5120 /usr/local/bin/..

На самом деле, мы даже можем увидеть общее количество ссылок ведущих на этот, 5120 инод, используя команду ls -dl:

Если взглянуть на вторую колонку слева, то видно, что на директорию /usr/local (инод 5120) ссылаются восемь раз. На моей системе на этот инод ведут следующие пути:

/usr/local
/usr/local/.
/usr/local/bin/..
/usr/local/games/..
/usr/local/lib/..
/usr/local/sbin/..
/usr/local/share/..
/usr/local/src/..

mkdir

Давайте быстренько пройдемся по команде mkdir, которая используется для создания новых директорий. Следующий пример создает три новых директории, tic, tac, и toe, все внутри /tmp:

$ cd /tmp
$ mkdir tic tac toe

По умолчанию, команда mkdir не создает для вас родительские директории; весь путь вплоть до последнего (создаваемого) элемента должен существовать. Так, если вы захотите создать вложенные директории won/der/ful, вам придется выполнить три отдельные команды mkdir:

$ mkdir won/der/ful
mkdir: cannot create directory `won/der/ful': No such file or directory
$ mkdir won
$ mkdir won/der
$ mkdir won/der/ful

Однако, у mkdir есть очень удобная опция -p, которая говорит mkdir создавать любые отсутствующие родительские директории, как можете увидеть тут:

$ mkdir -p easy/as/pie

В целом очень просто. Чтобы узнать больше о команде mkdir наберите man mkdir и прочитайте инструкцию. Это же касается почти всех команд, рассмотренных здесь (например man ls), исключая cd, которая встроена в bash.

touch

Сейчас мы собираемся окинуть взглядом команды cp и mv, используемые для копирования, переименования и перемещения файлов и директорий. Но начнем обзор воспользовавшись командой touch, чтобы создать файл в /tmp:

$ cd /tmp
$ touch copyme

Команда touch обновляет «mtime» (время последней модификации — прим. пер.) файла, если тот существует (вспомните шестую колонку в выводе ls -l). Если файл не существует, то новый, пустой файл будет создан. Сейчас у вас должен быть файл /tmp/copyme с нулевым размером.

Теперь, когда файл существует, давайте добавим немного данных в него. Можно сделать это с помощью команды echo, которая принимает аргументы и печатает их на стандартный вывод. Сперва, команда echo сама по себе:

$ echo "firstfile"
firstfile

А сейчас, та же команда echo, но с перенаправлением вывода:

$ echo "firstfile" > copyme

Знак «больше» сообщает оболочке записывать вывод echo в файл по имени copyme. Этот файл будет создан, если не существовал, или перезаписан, если существует. Набрав ls -l, увидим, что файл copyme имеет размер в 10 байт, так как содержит слово firstfile и символ новой строки:

cat и cp

Чтобы вывести содержимое файла на терминал, используйте команду cat:

$ cat copyme
firstfile

Сейчас, мы можем воспользоваться основным вызовом команды cp для создания файла copiedme из оригинального copyme:

$ cp copyme copiedme

Ниже проверим, что это действительно разные файлы; у них отличаются номера инодов:

А сейчас давайте воспользуемся командой mv для переименования copiedme в movedme. Номер иноды останется прежний; однако, имя файла, указывающее на инод, изменится.

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

Пока мы рассказываем об mv, давайте посмотрим, как еще можно использовать эту команду. mv, помимо возможности переименовать файлы, позволяет перемещать один или более файлов в другое место в иерархии директорий. Например, чтобы переместить /var/tmp/myfile.txt в директорию /home/drobbins (которая является моей домашней), я наберу (а мог бы воспользоваться

$ mv /var/tmp/myfile.txt /home/drobbins

После этого myfile.txt будет перемещен в /home/drobbins/myfile.txt. И если /home/drobbins располагается в другой файловой системе, нежели /var/tmp, команда mv скопирует myfile.txt в новую файловую систему и удалит его из старой. Как вы уже могли догадаться, когда myfile.txt перемещается между файловыми системами, то myfile.txt на новом месте получает новый номер инода. Это все потому, что у каждой файловой системы свой независимый набор номеров инодов.

Мы также можем воспользоваться mv для перемещения нескольких файлов в одну директорию. К примеру, чтобы переместить myfile1.txt и myarticle3.txt в /home/drobbins, потребуется набрать:

$ mv /var/tmp/myfile1.txt /var/tmp/myarticle3.txt /home/drobbins

Об авторах

Daniel Robbins

Дэниэль Роббинс — основатель сообщества Gentoo и создатель операционной системы Gentoo Linux. Дэниэль проживает в Нью-Мехико со свой женой Мэри и двумя энергичными дочерьми. Он также основатель и глава Funtoo, написал множество технических статей для IBM developerWorks, Intel Developer Services и C/C++ Users Journal.

Chris Houser

Крис Хаусер был сторонником UNIX c 1994 года, когда присоединился к команде администраторов университета Тэйлора (Индиана, США), где получил степень бакалавра в компьютерных науках и математике. После он работал во множестве областей, включая веб-приложения, редактирование видео, драйвера для UNIX и криптографическую защиту. В настоящий момент работает в Sentry Data Systems. Крис также сделал вклад во множество свободных проектов, таких как Gentoo Linux и Clojure, стал соавтором книги The Joy of Clojure.

Aron Griffis

Эйрон Гриффис живет на территории Бостона, где провел последнее десятилетие работая в Hewlett-Packard над такими проектами, как сетевые UNIX-драйвера для Tru64, сертификация безопасности Linux, Xen и KVM виртуализация, и самое последнее — платформа HP ePrint. В свободное от программирования время Эйрон предпочитает размыщлять над проблемами программирования катаясь на своем велосипеде, жонглируя битами, или болея за бостонскую профессиональную бейсбольную команду «Красные Носки».

В этом руководстве рассматриваются основы использования команды mkdir , включая повседневные примеры.

Синтаксис команды Linux mkdir

Синтаксис команды mkdir следующий:

Команда принимает в качестве аргументов одно или несколько имен каталогов.

Как создать новый каталог

Чтобы создать каталог в Linux, передайте имя каталога в качестве аргумента команды mkdir . Например, чтобы создать новый каталог newdir вы должны выполнить следующую команду:

Вы можете убедиться, что каталог был создан, перечислив его содержимое с помощью команды ls :

При указании только имени каталога без полного пути он создается в текущем рабочем каталоге.

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

Как создать родительские каталоги

Допустим, вы хотите создать каталог /home/linuxize/Music/Rock/Gothic :

Вместо того, чтобы создавать недостающие родительские каталоги один за другим, вызовите команду mkdir с параметром -p :

Когда используется опция -p , команда создает каталог, только если он не существует.

Как установить разрешения при создании каталога

Чтобы создать каталог с определенными разрешениями, используйте параметр -m ( -mode ). Синтаксис для назначения разрешений такой же, как и для команды chmod .

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

Когда опция -m не используется, вновь созданные каталоги обычно имеют права доступа 775 или 755 , в зависимости от значения umask .

Как создать несколько каталогов

Чтобы создать несколько каталогов, укажите имена каталогов в качестве аргументов команды, разделенные пробелом:

Команда mkdir также позволяет создать сложное дерево каталогов с помощью одной команды:

Приведенная выше команда создает следующее дерево каталогов :

Выводы

Команда mkdir в Linux используется для создания новых каталогов.

Для получения дополнительной информации о mkdir посетите страницу руководства mkdir .

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

Одна из самых распространенных ошибок — сохранение информации в базе домашнего каталога (того, в который можно попасть, войдя в систему). В нем и остальных подкаталогах, созданных для организации файлов, выполняется большая часть работы пользователя.

Синтаксис

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

Выполняя команду, нужно иметь достаточно прав на создание перечня в родительском каталоге, либо же произойдет ошибка. Чтобы их задать в символьном виде или в качестве восьмеричных чисел, нужно убедиться, что весь путь до последнего элемента должен существовать. Затем следует воспользоваться функцией -m (или –mode).

Примеры использования

Чтобы понять как работает утилита mkdir рассмотрим примеры.

Создадим новую папку под названием "newpapka". Для этого напишем команду без аргументов.

Создание папки из терминала

Новая папка будет принадлежать фактическому владельцу произведенного процесса. При попытке создать уже существующую результат получится ошибочным.

Создадим несколько папок newpapka2, newpapka3, newpapka4.

mkdir newpapka2 newpapka3 newpapka4

Создадим папку "papka" в "/root/katalog".

Полный путь

Создание родительских каталогов

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

Зайдем в папку "primercatalog" с помощью команды "cd".

Создадим папку papka1, в papka1 - papaka2, в papka2 - papka3. Для этого будем использовать аргумент "-p" (игнорировать ошибки).

mkdir -p papka1/papka2/papka3

Для примера воспользуемся аргументом "-m" и предоставим доступ на чтение, запись и выполнение содержимого каталогов.

Читайте также: