Меню Рубрики

Linux как узнать путь к файлу

Как в 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

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

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

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

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

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

Например, если в Windows полный путь к файлу на рабочем столе выглядел C:\Users\Sergiy\Desktop\ то в путь файла в 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. Если у вас остались вопросы, спрашивайте в комментариях!

Источник

Узнать полный путь к файлу

Приветствую Сообщество!
Для создания загрузочной флешки при помощи dd нужен путь к образу.
Образ находится в папке /home/vaio/Загрузки
Стало интересно, как узнать путь через терминал? Нашел несколько команд, например, pwd
pwd debian-live-8.5.0-amd64-lxde-desktop.iso

Прошу подсказать с помощью какой команды можно через терминал узнать полный путь к файлу.

Если указывать такой путь в dd, то на выходе получаю Нет такого файла или каталога

потому, что файл находится в /home/vaio/Загрузки/debian-live-8.5.0-amd64-lxde-desktop.iso, а не в /home/vaio/debian-live-8.5.0-amd64-lxde-desktop.iso как ты написал. Ты либо вывод перепечатывай правильно, либо копируй, либо используй подстановку команд:

find / -type f -name ‘debian-live-8.5.0-amd64-lxde-desktop.iso’ -exec dd if=<> of=. ;\

kostik87 , спасибо за ответ!

Ты либо вывод перепечатывай правильно, либо копируй,

Я и копировал вывод.

Вот это интересно. Буду знать.

только непонятно зачем тебе полный путь, если ты набираешь просто
readlink -m debian-live-8.5.0-amd64-lxde-desktop.iso

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

то следовательно ты уже находишься в /home/vaio/Загрузки, тебе достаточно писать
dd if=debian-live-8.5.0-amd64-lxde-desktop.iso of=.

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

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

Как через терминал узнать путь к произвольному файлу, зная его название?

тебе уже ответили, man find

Как через терминал узнать путь к произвольному файлу, зная его название?

find / -type f -name ‘название’

в дополнение к find, есть шустрый mlocate, который ищет по индексу.

Ребята, благодарю за ответы!
И прошу еще немного терпения и внимания.
find / -type f -name debian-live-8.5.0-amd64-lxde-desktop.iso

sudo find / -type f -name debian-live-8.5.0-amd64-lxde-desktop.iso 2>/dev/null

Чтобы искать по индексу – нужно его сначала построить, а потом регулярно обновлять. Есть лишние иопсы? 🙂

Обновляется индекс по крону.
Чтобы найти файл с помощью find, обычно тратится больше иопсов, чем тратится на обновление базы mlocate.

Я принимаю бессилие перед этой задачей.
Буду делать как раньше и экономить иопсы.
Всем благодарен!

Источник


Adblock
detector