Измените «кеш» (режим временных файлов) для virtio disk1 до NONE (по умолчанию)
Причина этого проста.
Предположим, что у вас есть команда с тем же именем, что и приложение в текущем каталоге. Затем запуск команды в оболочке вызовет ваше приложение вместо встроенной команды. Это будет проблемой безопасности, если ничего другого.
Чтобы потребовать, чтобы ./ использовался впереди, оболочка знает, что вы хотите выполнить приложение с заданным именем, а не встроенную команду с это имя.
./ выполняет файлы, которые не находятся в вашем $PATH, скорее, он выполняет файл в текущем каталоге (или другом через ./home/stefano/script.sh). Теперь PATH - это переменная среды, которая содержит все места, где bash может искать исполняемые программы, не имея полного (абсолютного) пути к ним.
Это разделение необходимо, чтобы не запускать неправильный файл. То есть если у вас есть файл с именем ls в вашем домашнем каталоге, он не находится в вашем PATH, это не позволит bash запутать его с реальным ls. Переменная PATH также определяет порядок поиска:
Когда вы запускаете команду или программа пытается создать exec syscall (специальный метод ядра, как запускаются программы), система смотрит для файла, пройдя через каждую из каталогов в вашем PATH. Как только программа будет найдена, даже если она находится в нескольких каталогах, поиск прерывается и первый найден.Чтобы запустить файл, вам нужно будет установить исполняемый бит в разрешениях:
Когда вы запустите команду или программа попытается сделать exec syscall (специальный метод ядра, как запускаются программы), система ищет файл, просматривая все каталоги в вашем PATH. После того, как программа была найдена, даже если она находится в нескольких каталогах, поиск прерывается, и первый найден. Или вы можете установить разрешения, щелкнув правой кнопкой мыши файл и выбрав «Свойства»:Теперь вы можете скопировать файл в любой из каталогов в PATH, чтобы посмотреть, какие из них находятся там - и они настроены для каждого пользователя - введите echo $PATH.
stefano@3000-G530:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
[d14 ] Если вы создаете исполняемый файл cat и переместите его на /usr/local/sbin, он запускается вместо правильного cat, который находится в /bin. Вы можете узнать, где находятся ваши файлы, используя type cat и whereis cat. В терминале, когда вы вводите имя приложения, скажем, gedit, терминал будет выглядеть в некоторых (предварительно определенные) каталоги, содержащие приложения (двоичные файлы приложений). Имена этих каталогов содержатся в переменной под названием PATH. Вы можете увидеть, что находится в этой переменной, выполнив echo $PATH. См. Эти каталоги, разделенные :? Это каталоги, в которые терминал будет искать поиск, если вы просто наберете gedit, nautilus или a.out. Как вы можете видеть, путь к вашей программе a.out отсутствует. Когда вы выполняете ./a.out, вы говорите терминалу «смотрите в текущем каталоге и запустите a.out и не смотрите в PATH.
Если вы не хотите каждый раз набирать ./, вам нужно добавить каталог a.out в $PATH. В следующих инструкциях я предполагаю, что путь к a.out это /path/to/programs/, но вы должны изменить его на свой фактический путь.
Просто добавьте следующую строку в конец файла ~/.pam_environment:PATH DEFAULT=${PATH}:/path/to/programs
Источник: постоянные переменные среды Выйдите из системы и зайдите в систему Теперь вы сможете запускать a.out без ./ из любого каталога. Если у вас есть другие программы в других каталогах, вы можете просто добавить их в указанную выше строку. 'd советую иметь один каталог под названием myPrograms, например, и поместить в него все ваши программы.
Что делать, если у вас есть другие программы, которые вы хотите запустить? И все они в разных папках? Ну, «более организованное» соло было бы создать папку под названием bin в вашем домашнем каталоге и добавить символические ссылки (ярлыки) в этой папке. Вот как:
Просто добавьте следующую строку в конец файла ~/.pam_environment:PATH DEFAULT=${PATH}:/path/to/programs
Источник: постоянные переменные среды Просто добавьте следующую строку в конец файла ~/.pam_environment:
Это создаст «символическую ссылку» (в основном, ярлык) вашей программы a.out в разделе bin. Выйдите из системы и войдите в систему. Теперь вы можете запустить a.out без ./ из любого каталога.ln -s /path/to/programs/a.out /home/userName/bin
Примечание: измените userName на свое фактическое имя пользователя Ubuntu.
Как отметил Джордж в своем ответе, это поможет вам заметить, что вы выполняете файл в текущем рабочем каталоге (pwd).
Я помню, как давно задал этот вопрос моему старшему , он сказал, что я должен добавить . к моему пути, чтобы, когда я делаю a.out, он выглядит в текущем каталоге и выполняет это. В этом случае мне не нужно делать ./a.out.
Но лично я бы рекомендовал против него. Это никогда не случалось со мной, но если вы находитесь в чужой сетевой директории или что-то еще, и там существует вредоносный исполняемый файл с именем ls, то наличие . на вашем пути - очень плохая идея. Не то чтобы вы часто сталкивались с этой проблемой, просто говоря.
A './' имеет смысл, когда вы запускаете известную вам программу и, например, ваш собственный. Эта программа должна присутствовать в вашем текущем каталоге. A './' не имеет смысла, когда вы запускаете стандартную команду, которая находится где-то в $ PATH. Команда «command-to-run» сообщает вам, где команда запускается в $ PATH.
$ gcc hello.c -o /path/to/someplace/hello
создаст исполняемый файл в определенном месте. Если это местоположение находится на вашем пути, вы сможете запустить файл. Вы можете создать сценарий, если хотите создать ярлык для действия «скомпилируйте этот исходный код с помощью gcc и поместите исполняемый файл в определенное место, которое находится на вашем пути»
Я бы предложил вам создать новый каталог называемый «testbin» или что-то в этом роде, и поместите его на свой путь, чтобы сохранить существующие каталоги путей.
./ устраняет ненужный поиск пути. ./ принудительно выполнять поиск только в текущем каталоге. Если мы не дадим ./, то он будет искать различные пути, установленные в систему, такие как /usr/bin, /usr/sbin/ и т. Д.
"./" означает, что вы хотите выполнить файл в текущем каталоге, например, ярлык для ввода всего пути:
[root@server ~]#/path/to/file/file.pl
такой же, как:
[root@server file]#./file.pl
в предыдущем примере вы просмотрели каталог и его вспомогательные каталоги в расположение файла и использовали «./» для запуска файла в текущем каталоге.
тот, который перед ним »[root @server ~] # / path / to / file / file.pl "также выполнит файл, если вы ленитесь на" cd "свой путь к расположению файла.
Это очень просто и имеет много применений.
Если установлено несколько версий одного и того же приложения, оно будет доступно по другому пути, но в /usr/bin может быть создана мягкая ссылка на ваш двоичный файл. Например, Python 2.7, Python 2.6 установлен, но / usr / bin / python -> python2.7 / usr / local / bin / python -> python2.6Если вы находитесь на пути и выполняет Python, он всегда будет выполнять Python 2.7. При указании . будет выполняться исполняемый файл текущей папки.
Если установлено несколько версий одного приложения, оно будет доступно по другому пути, но в /usr/bin можно создать мягкую ссылку на ваш двоичный файл. Например, Python 2.7, Python 2.6 установлен, но / usr / bin / python -> python2.7 / usr / local / bin / python -> python2.6