Что значит тильда в пути linux

Обновлено: 04.07.2024

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

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

Запуск эмулятора терминала в Ubuntu

Сделаю небольшое отступление и скажу как запустить эмулятор терминала gnome-terminal в Ubuntu. Для этого нужно выбрать в меню Приложения->Стандартные->Терминал . Тем самым, вы запустите эмулятор терминала для рабочего стола Gnome ( gnome-terminal ), попросту говоря, «командную строку», если вам так угодно :-) В нем вы можете вводить команды Linux, о которых и пойдет речь ниже.

Командная строка в Ubuntu

Приглашение к вводу команды

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

Здесь <имя пользователя> — это имя, которое вы использовали для входа в систему и под которым вы сейчас работаете. Затем идет значок @, за ним имя локальной системы, далее двоеточие и имя текущего каталога, в котором вы в данный момент находитесь.

В эмуляторе gnome-terminal при запуске терминала в качестве каталога используется значок тильда

используется для сокращенного обозначения домашней директории пользователя, а именно директории /home/<имя пользователя> .

В конце приглашения выводится знак доллара $ .

Основные команды Linux

Ниже я вкратце рассмотрю некоторые основные команды (утилиты) Linux и их опции, которые часто приходится использовать при работе в командной строке. Некоторые команды я приведу с примерами, а некоторые просто с кратким описанием.

ls — вывод имен файлов

Утилита ls предназначена, для вывода списка файлов и каталогов в текущем каталоге. Рассмотрим некоторые полезные свойства команды ls .

-A — включить в список «скрытые» файлы («скрытые» файлы в Linux имеют в своем названии точку в начале имени файла, например, .gtkrc-2.0). -S — отсортировать файлы по размеру. -t — отсортировать по дате изменения. -1 — выводить имена в столбик, по одному на каждой строке. -l — вывести подробную информацию о каждом файле, размер файла, владелец файла, права доступа, дата изменения.

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

Теперь выполним команду с опциями -A , -S , -1 . В результате получим список всех файлов, включая «скрытые», расположенных по одному на каждой строке и отсортированных по размеру.

Выполним команду ls с опцией -l . Получим подробную информацию о каждом файле.

mkdir — создание каталога

Команда mkdir предназначена для создания новой директории. Чтобы создать новую директорию, выполните mkdir <имя директории> . Для того, чтобы создать сразу несколько директорий, укажите их имена через пробел, например:

cp — копирование файла

Утилита cp используется для создания копии файла. Для обычного копирования используется следующий синтаксис cp <имя файла источника> <имя файла назначения> .

При использовании cp есть один нюанс, который нужно обязательно помнить. Если файл назначения уже существует, то cp перезапишет его. Поэтому, чтобы избежать случайного уничтожения существующего файла, нужно использовать команду cp с опцией -i . Перед перезаписью файла будет выдан запрос на ваше согласие. Например, если мы копируем файл linux.jpg в файл windows.jpg и windows.jpg уже существует, то будет выдан запрос на перезапись файла:

Опция -r (или -R ) используется для копирования одной директории в другую.

mv — перемещение, переименование файла

Утилита mv предназначена для перемещения, переименования файла. Для переименования файла используется синтаксис mv <имя файла> <новое имя файла> . Для перемещения файла в другую директорию используется синтаксис mv <имя файла> <директория> . С mv можно также использовать опцию -i , чтобы случайно не перезаписать существующий файл.

rm — удаление файла

Команда rm предназначена для удаления файлов. Основные опции команды:

-i — выводить запрос перед удалением каждого файла. -r (или -R) — удалить директории и их содержимое.

cd — смена текущего каталога

Команда cd предназначена для смены каталога, в котором вы сейчас находитесь. Например, вы сейчас находитесь в своем домашнем каталоге

и хотите перейти в каталог

/information , тогда нужно просто выполнить команду cd information .

Если выполнить команду cd без параметров, то вы перейдете в свой домашний каталог

Чтобы перейти в каталог на уровень выше (в родительский каталог) можно использовать синоним «две точки» — .. , которые в Linux служат синонимом пути родительского каталога. Например, находясь в каталоге

/information мы можем перейти в каталог

cat — вывод содержимого файла

Утилита cat выводит содержимое текстового файла. Простейший синтаксис команды cat <имя файла> . Утилита cat может использоваться для соединения конкатенации двух текстовых файлов, собственно от этого и происходит название утилиты (catenation, concatenation). Например, у нас есть два файла download и ubuntu и в каждом по две строки. Сначала мы выведем содержимое файлов по отдельности, а затем сделаем конкатенацию двух файлов.

pwd — вывод полного пути текущего каталога

Команда pwd используется, чтобы вывести полный путь текущего каталога.

man — получение руководства

Системная утилита man выводит страницы системной документации. С ее помощью можно получить информацию по любым командам Linux. Для этого используется синтаксис man <имя утилиты> . Например, чтобы вывести руководство по утилите ls , используйте команду man ls .

X переносит меня в особое место, где X вроде бы что угодно.

В bash, если я нажимаю " cd

" и нажимаю вкладку, появляется множество возможных

X вариантов, таких как

ssh . Переход к этим папкам и выполнение операций pwd показывает мне, что этих папок нет в домашнем каталоге; они повсюду.

Это не псевдонимы. Я проверил. Они не являются env. переменными, иначе они потребовали бы $ .

Что устанавливает эти ссылки и где я могу найти, где они устанавливаются?

X просто возвращает литерал "

возвращает $ HOME, а

+ возвращает $ PWD - они не являются специальными, за исключением того, что они выбирают переменные оболочки. т.е. они не хранят значения и не выполняют команду для их поиска. Они уже определены. Вы пробовали

-? Я не могу придумать, как ему использовать, но опять же, он возвращает переменную оболочки $ OLDPWD

Это функция Bash, которая называется « тильда». ». Это функция оболочки, а не ОС. Например, вы получите другое поведение с csh.

Чтобы ответить на ваш вопрос о том, откуда берется информация: ваш домашний каталог берется из переменной $HOME (независимо от того, что вы там храните), в то время как дома других пользователей извлекаются в реальном времени с использованием getpwent() . Эта функция обычно контролируется NSS ; поэтому по умолчанию значения извлекаются /etc/passwd , хотя его можно настроить для получения информации из любого желаемого источника, такого как NIS, LDAP или база данных SQL.

Расширение тильды - это больше, чем поиск в домашнем каталоге. Вот краткое изложение:

-1 и т.д., используются вместе с pushd и popd .

в качестве заметки рыба не поддерживает ни один из них, кроме простой тильды (

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

+ сохраняет его работу, просто возвращая содержимое переменной оболочки $ PWD, которая уже определена при просмотре файловой системы.

Это домашние каталоги пользователей. Попробуйте cd

(your username) , например.

Это не символические ссылки, у служебных учетных записей нет домашних каталогов в / home Лучший ответ в моем случае. Кроме того, в моем конкретном случае это был корневой каталог / папка, а не домашняя папка.

Это домашние каталоги пользователей /etc/passwd ? Такие службы, как postgres, sendmail, apache и т. Д., Создают пользователей системы, у которых есть домашние каталоги, как и у обычных пользователей.

имя пользователя - это домашний каталог указанного пользователя

Это пользователи. Проверьте свой /etc/passwd .

username перенесет вас в домашний каталог этого пользователя.

FTW. Голосовать за. TNX за прояснение этого вопроса. Интересно, сколько циклов и, возможно, даже подоболочки задействовано в этом. Только представьте, если в вашей системе 3К пользователей, как у небольшого интернет-провайдера. Ой.

На моей машине, из-за того, как я все настроил, делаю:

Первый обращает внимание на значение переменной окружения $HOME ; Я намеренно установил $HOME локальную файловую систему, а не файловую систему, смонтированную по NFS. Второй читает из файла паролей (примерно; NIS немного усложняет ситуацию) и обнаруживает, что в файле паролей указано, что мой домашний каталог находится, /u/jleffler и переходит в этот каталог.

Раздражает то, что большая часть программного обеспечения ведет себя так, как указано выше (и спецификация POSIX для оболочки требует такого поведения). Я использую некоторое программное обеспечение (и у меня нет особого выбора), которое обрабатывает информацию из файла паролей как текущее значение $ HOME, что неверно.

Применяя это к вопросу - как указывали другие, ' cd

x ' переходит в домашний каталог пользователя 'x' и, в более общем смысле, всякий раз, когда выполняется расширение тильды,

x означает домашний каталог пользователя 'x' (и это ошибка если пользователь 'x' не существует).

Возможно, стоит упомянуть следующее:

Я не могу сразу найти применение для '

+ ', если только вы не сделаете какие-то странные вещи с перемещением символических ссылок по пути, ведущему к текущему каталогу.

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

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

Введение в bash

Оболочка

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

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

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

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

$ echo $SHELL
/bin/bash

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

О bash

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

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

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

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

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

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

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

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

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

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

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

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

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

$ cd local/bin
$ pwd
/usr/local/bin

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

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

$ pwd
/usr/local/bin
$ cd ..
$ pwd
/usr/local

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

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

$ pwd
/usr/local
$ cd ../share
$ pwd
/usr/share

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

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

$ cd /bin
$ cd ../usr/share/zoneinfo

$ cd /usr/X11R6/bin
$ cd ../lib/X11

$ cd /usr/bin
$ cd ../bin/../bin

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

Понимание .

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

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

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

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

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

$ ./myprog /home/drobbins/myfile.txt

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

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

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

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

Я пытаюсь извлечь другую часть установщика библиотеки Nvidia cuda. Я использую следующую команду:

И когда я набираю команду с литеральным адресом моего дома, она работает

Я запутался, не должен быть тем же самым из / home / likewise-open / XXX / username?

, и он работает, но я не знаю, почему это не позволяет

3 ответа

Только исправление

Ошибка не помогает - программа тоже смущен уже. Вы уже знаете, что ошибка происходит от

, поскольку она работает с $HOME.

заменяется только в начале слова.

Например, это работает с тильдой:

Если вам нужен синтаксис опции с =, то использование $ HOME вместо

является самым чистым решением ;

Практика

Что вы должны знать:

Существуют особые случаи, когда

get расширяется, если не в начале слова: как часть присваивания переменной, непосредственно после =. Это, конечно, запутывает.

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

также расширяется после :, как и после первого =.

Значение тильды

В оболочке [ f16], тильда, на самом деле не путь.

Это что-то вроде сокращения или сокращения, предоставленного оболочкой. Он не может быть использован как путь вообще, оболочка «расширяет» его до пути только в очень особых местах. И даже если он расширен, это может быть что-то другое, чем домашний каталог.

Он расширяется только в начале слова или в присваивании переменной после : или =. Он расширяется только в том случае, если он не внутри кавычек. Он расширяется только до $HOME если в слове нет дополнительных символов до /

Проблема в командной строке

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

не расширяется, потому что это не один из перечисленных случаев. Это все.

Решение может состоять в том, чтобы сделать тильду первым неупорядоченным символом слова без какого-либо другого символа перед следующим / - это именно то, что вы получаете, когда используете параметр с space перед аргументом опции:

Другим решением было бы использовать $HOME. В сценарии это обычно лучший выбор.

Мы знаем, что тильда не расширилась. Это означает, что программа получила текст аргумента, включая

, но без /home/auser в качестве пути. Этот путь

/Downloads/nvidia_installers - но теперь нет оболочки, поэтому тильда не имеет особого значения. Это просто обычное имя каталога. И как любой другой путь формы foo/bar/baz, это относительный путь

Другие используют

есть символы, как в

alice - с все другие правила выше применения - и есть имена пользователей alice, которые вместо этого добавляются в домашний каталог alice, скажем home/alice. Кроме того, если вы bob ,

будет расширяться до /home/bob, а

bob будет расширяться до того же самого.

+ расширяется до текущего каталога, $PWD

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

-, который расширен до $OLDPWD.

Если вы используете pushd и popd вместо cd вы уже знаете, что к стеку каталога можно получить доступ, например

Подробности

Все случаи, когда

расширяются до пути, рукояткой оболочки. Для других программ

является обычным символом имени файла.

Для помещены оболочкой внутри оболочки, вот соответствующий раздел man bash. Обратите внимание, что замена

на $HOME - это только один частный случай многие случаи: «Если это имя для входа является пустой строкой, тильда заменяется значением параметра оболочки HOME.»:

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