Foreversoft.ru

IT Справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Абсолютный и относительный путь к файлу linux

Путь к файлу в Linux

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

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

Пути файлов в Linux

Файловая система Linux очень сильно отличается от Windows. Мы не будем рассматривать ее структуру, это было сделано ранее. Мы сосредоточимся на работе с файлами.

Самое главное отличие, в том что адрес файла начинается не с диска, например, C: или D: как это происходит в Windows, а с корня, корневого системного каталога, к которому подключены все другие. Его адрес — /. И тут нужно сказать про адреса. Пути файлов linux используют прямой слеш «/» для разделения каталогов в адресе, и это отличается от того, что вы привыкли видеть в Windows — .

Например, если в Windows полный путь к файлу на рабочем столе выглядел C:UsersSergiyDesktop то в путь файла в linux будет просто /home/sergiy/desktop/. С этим пока все просто и понятно. Но проблемы возникают дальше.

В операционной системе Linux может быть несколько видов путей к файлу. Давайте рассмотрим какие бывают пути в linux:

  • Полный, абсолютный путь linux от корня файловой системы — этот путь вы уже видели в примере выше, он начинается от корня «/» и описывает весь путь к файлу;
  • Относительный путь linux — это путь к файлу относительно текущей папки, такие пути часто вызывают путаницу.
  • Путь относительно домашний папки текущего пользователя. — путь в файловой системе, только не от корня, а от папки текущего пользователя.

Рассмотрим теперь подробнее как выглядят эти пути в linux, а также разберем несколько примеров, чтобы было окончательно понятно. Для демонстрации будем пользоваться утилитой ls, которая предназначена для просмотра содержимого каталогов.

Например, у нас есть такой каталог в домашней папке с четырьмя файлами в нем:

Вот так будет выглядеть полный путь linux к одному из файлов:

Это уже относительный путь linux, который начинается от домашней папки, она обозначается

/. Дальше вы уже можете указывать подпапки, в нашем случае tmp:

Ну или путь файла в linux, относительно текущей папки:

В каждой папке есть две скрытые ссылки, мы сможем их увидеть с помощью ls, выполнив ее с параметром -a:

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

Это бесполезно при просмотре содержимого файла. Но очень важно при выполнении программы. Поскольку программа будет сначала искаться в среде PATH, а уже потом в этой папке. А потому, если нужно запустить программу, которая находится в текущей папке и она называется точно также как и та что в каталоге /bin, то без явной ссылки что файл нужно искать в текущей папке ничего не получится.

Вторая ссылка вам позволяет получить доступ к файлам в папке выше текущей. Например:

Такие конструкции могут довольно часто встречаться при компиляции программ. Все эти символы и пути файлов linux вы можете применять не только в терминале, но и в любом файловом менеджере, что может быть очень удобно.

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

Или даже можно искать не только в папке tmp, а в любой подпапке домашней папки:

И все это будет работать, возможно, это не всегда нужно и практично. Но в определенных ситуациях может очень сильно помочь. Эти функции реализуются на уровне оболочки Bash, поэтому вы можете применять их в любой команде. Оболочка смотрит сколько файлов было найдено и для каждого из них вызывает команду.

Выводы

Вот и все. Теперь вы знаете все что необходимо, чтобы не только правильно написать путь к файлу linux, но и выполнять более сложные действия, например, поиск файлов или навигация по каталогам с помощью команды cd. Если у вас остались вопросы, спрашивайте в комментариях!

Как в Bash узнать абсолютный путь до файла

Что такое абсолютный и относительный пути

Читать еще:  Элементы клиент серверной архитектуры

Абсолютный путь содержит полный перечень папок, в которых находится файл, начиная от корня файловой системы.

Пример абсолютного пути: /home/mial/bin/myfile.txt

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

Относительный путь указывает на расположение файла относительно текущей папки. Примеры относительных путей:

  • myfile.txt
  • ./myfile.txt
  • bin/myfile.txt
  • ../../bin/myfile.txt

Преимущество относительного пути в том, что обычно он обозначается более короткой записью как например myfile.txt — означает одноимённый файл в текущей папке. Очевидно, что при смене рабочей директории относительный путь до файла станет другим.

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

realpath

Первый вариант — использовать команду realpath:

Привет вывода абсолютного пути:

Эта программа является частью coreutils.

По умолчанию эта программа преобразует символические ссылки (опция -P) и показывает расположение файла даже если он не существует (опция -m) — то есть эти опции указывать необязательно.

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

Если вас это не устраивает, то используйте опцию -e — тогда если указанный файл не существует, то вместо вывода абсолютного пути будет показано сообщение об ошибке.

readlink

Аналогичную функцию выполняет и команда readlink.

Если вы хотите показать абсолютный путь только для существующих файлов, то используйте опцию -e:

Если вас не волнует, существует ли файл, то используйте опцию -f (не требует существование последнего компонента) или опцию -m (не требует существование какого-либо компонента пути):

realpath и readlink не найдены

UNIX системы — это не только многочисленные дистрибутивы Linux. В некоторых из них команды realpath и readlink могут отсутствовать. Если они отсутствуют и вы не хотите или не можете устанавливать дополнительные бинарные файлы, то выход всё равно есть.

Создайте файл, например, realpath.sh и скопируйте в него:

Этот же вариант в виде функции:

Вот эта же функция в продвинутом варианте — дополнительно обрабатывает ситуацию, когда директория не существует, а также если во вводе присутствуют ‘..’ или ‘.’

Ещё один вариант в виде функции оболочки, который:

  • не требует утилит (только cd и pwd)
  • работает для директорий и файлов
  • обрабатывает .. и .
  • обрабатывает пробелы в директориях и именах файлов
  • требует, чтобы файл или директория существовали
  • ничего не возвращает, если ничего не существует
  • может принимать абсолютные пути в качестве ввода (хотя ничего с ними не делает)

И ещё одна функция, записанная в одну строку и работающая в bash и zsh (другие не проверялись):

Основы Linux от основателя Gentoo. Часть 1 (1/4): BASH, основы навигации

Предисловие

Об этом руководстве

Добро пожаловать в первую из четырех частей обучающего руководства по основам Linux, разработанного чтобы подготовить вас к сдаче экзамена Linux Professional Institute 101. В нем вы познакомитесь с bash (стандартной оболочкой командного интерпретатора в Linux), узнаете о большинстве возможностей таких стандартных команд Linux, как ls, cp и mv, разберетесь в инодах, жестких и символьных ссылках, и многом другом. К концу этого руководства у вас сформируется некий фундамент знаний, и вы будете готовы к изучению основ администрирования Linux. К концу всего курса (8 частей), у вас будет достаточно навыков, чтобы стать системным администратором Linux и пройти сертификацию LPIC Level 1 от Linux Professional Institute, если конечно захотите.

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

Тем, кто изучал первую версию этого руководства с целью, отличной от подготовки к экзамену LPI, возможно, что вам не нужно его перечитывать. Однако, тем же, кто планирует сдавать экзамены, стоит обязательно просмотреть данную исправленную версию.

Введение в bash

Оболочка

Если вы уже использовали Linux ранее, то наверняка знаете, что после входа в систему вас приветствует приглашение, которое выглядит примерно так:

На практике приглашение, которое вы видите, может немного отличаться. Например, оно может содержать имя хоста, имя текущей рабочей директории, или все вместе. Не зависимо от того, как выглядит ваше приглашение, есть одна несомненная вещь: программа, которая выводит это приглашение, называется оболочка интерпретатора команд (от англ. shell — оболочка, он же командная строка или терминал — прим. пер.), и, вероятнее всего, вашей командной оболочкой будет ‘bash’.

Читать еще:  Архитектура сети ngn

А у вас запущен bash?

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

Если строчка выше выдает ошибку, или ответ не соответствует, возможно, что вы запустили другую оболочку. В этом случае большая часть этого руководства все еще будет полезна, но было бы значительно лучше для вас переключиться на bash, ради подготовки к экзамену 101.

О bash

Bash — это акроним от Bourne-again-shell, от англ. «ещё-одна-командная-оболочка-Борна» или «рождённая-вновь-командная оболочка» (тут игра слов Bourne/born — прим. пер.), и является оболочкой по умолчанию для большинства Linux-систем. Задача оболочки получать от вас команды, через которые вы взаимодействуете с Linux-системой. После того, как вы закончили ввод команд, вы можете выйти из оболочки (exit) или закончить сеанс (logout), в этом случае вы увидите приглашение входа в систему.

Кстати, вы также можете выйти из оболочки bash нажав control-D в приглашении.

Использование «cd»

Вы, возможно, уже обнаружили, что пялиться на приглашение bash — не самое впечатляющее занятие в мире. Ну что ж, давайте узнаем как путешествовать по нашей файловой системе. В приглашении введите пожалуйста следующую команду (без $):

Вы только что сообщили bash, что хотите работать в директории /, также известной, как корневая; все директории в системе имеют форму дерева, и / является его вершиной, т.е. корнем (в информатике деревья растут наоборот, корень вверху, а ветки спускаются вниз — прим. пер.). cd устанавливает директорию, в которой вы в данный момент работаете, также известную как «текущая рабочая директория».

Чтобы узнать текущую рабочую директорию в bash нужно набрать:

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

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

Ниже несколько из них:

/dev
/usr
/usr/bin
/usr/local/bin

Как можно заметить, у всех абсолютных путей есть одна общая черта, они начинаются с /. Указывая, допустим, /usr/local/bin в качестве аргумента для cd, мы сообщаем, что хотим попасть в / директорию, затем в usr директорию внутри нее, и так далее в local и bin, вниз по дереву. Абсолютные пути всегда отсчитываются начиная от / сперва.

Относительные пути

Другой тип пути называется «относительный путь». bash, cd, и другие команды всегда интерпретируют их относительно текущей директории. Относительные пути НИКОГДА не начинаются с /. Так, если мы сначала переместимся в /usr:

То, затем мы можем использовать относительный путь local/bin, чтобы попасть в директорию /usr/local/bin:

Использование ..

Относительные пути могут также содержать одну или более «..» директории. Директория «..» специальная; она указывает на родительскую директорию. Так, продолжая с примера выше:

Как видно, наша текущая директория теперь /usr/local. Мы смогли переместиться «назад» на одну директорию относительно текущей, где были до того.

Кроме того, мы также можем использовать «..» в существующем относительном пути, позволяющем нам переместиться в директорию «рядом» с той, в которой находимся:

Примеры относительных путей

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

А теперь наберите их и проверьте свои предположения. 😉

Понимание .

Перед тем как мы закончим изучение cd, есть несколько моментов, которые необходимо прояснить. Во-первых, есть еще одна специальная директория «.», которая означает «текущая директория». Хотя она и не используется с командой cd, но часто используется для выполнения программы из текущей директории, как в следующем примере:

В данном случае будет запущена исполняемая программа myprog, находящаяся в текущей рабочей директории.

cd и домашняя директория

Если бы мы хотели переместиться в нашу домашнюю директорию, то могли бы набрать:

Без каких либо аргументов cd переместит в вашу домашнюю директорию, которая будет /root для суперпользователя, или обычно /home/username (где username — имя пользователя в системе — прим.пер.) для любого другого пользователя. Но, что если мы хотим указать файл в нашей домашней директории? Может быть мы хотим передать путь к файлу в качестве аргумента нашей программе myprog. Если файл расположен в нашей домашней директории, мы можем набрать:

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

(тильда), чтобы проделать то же самое:

Читать еще:  Принцип фон неймана и открытой архитектуры

Другие домашние директории пользователей

Bash воспримет одиночную

как указатель на вашу домашнюю директорию, но вы также можете использовать её для указания на домашние директории других пользователей. Например, если мы хотели сослаться на файл под названием fredsfile.txt в домашней директории пользователя fred, то могли бы набрать:

Об авторах

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. В свободное от программирования время Эйрон предпочитает размыщлять над проблемами программирования катаясь на своем велосипеде, жонглируя битами, или болея за бостонскую профессиональную бейсбольную команду «Красные Носки».

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

Путь — это уникальное расположение к файлу или папке в файловой системе ОС. Путь к файлу представляет собой комбинацию / и буквенно-цифровых символов.

Абсолютный путь-имя

Абсолютный путь определяется как указание расположения файла или каталога из корневого каталога (/).
Чтобы написать абсолютное имя пути:

  • Начните с корневого каталога (/) и работайте вниз.
  • Напишите косую черту (/) после каждого имени каталога (последнее необязательно)

Например :

будет работать только тогда , когда тьфу «abc.sql» существует в текущем каталоге. Однако, если этот файл отсутствует в вашем рабочем каталоге и присутствует где-то еще, скажем, в / home / kt, то эта команда будет работать, только если вы будете использовать ее, как показано ниже:

В приведенном выше примере, если первым символом пути является /, местоположение файла должно быть определено относительно корня. Когда у вас есть более одного / в пути, для каждого такого /, вам нужно спуститься на один уровень в файловой системе, как в приведенном выше kt на один уровень ниже home, и, следовательно, на два уровня ниже root.

An absolute path is defined as specifying the location of a file or directory from the root directory(/). In other words,we can say that an absolute path is a complete path from start of actual file system from / directory.

Относительный путь

Относительный путь определяется как путь, связанный с настоящим, работающим напрямую (pwd). Он начинается в вашем текущем каталоге и никогда не начинается с / .

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

С помощью . и .. в относительных путях

UNIX предлагает ярлык в относительном пути, который использует текущий или родительский каталог в качестве ссылки и указывает путь к нему. Относительное имя пути использует один из этих загадочных символов:

Теперь, на самом деле это означает, что если мы в настоящее время находимся в каталоге / home / kt / abc и теперь вы можете использовать .. в качестве аргумента для cd, чтобы перейти в родительский каталог / home / kt как:

ПРИМЕЧАНИЕ: теперь / когда используется с .. имеет другое значение, вместо того, чтобы двигаться вниз на уровень, он перемещается на один уровень вверх:

Пример абсолютного и относительного пути

Предположим, что вы сейчас находитесь в home / kt и хотите изменить каталог на home / kt / abc. Давайте рассмотрим как абсолютные, так и относительные концепции пути, чтобы сделать это:

  1. Изменение каталога с концепцией относительного пути:
  2. Изменение каталога с концепцией абсолютного пути:

Эта статья предоставлена Dimpy Varshni . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Ссылка на основную публикацию
Adblock
detector