Основные команды не работают, например: -bash: ls: Нет такого файла или каталога

8

Я новичок в Unix и в процессе установки программы для моей диссертации, я, должно быть, играл с PATH для основных команд Unix, таких как ls. Каждый раз, когда я набираю lsи имя каталога, для которого я хочу перечислить файлы, оно выглядит так:

-bash: ls: No such file or directory

Что я могу сделать, чтобы это исправить? Любая помощь очень очень ценится!

Mariaa
источник
Причина, по которой ls не работает, но cd делает это задокументировано в моем ответе
Майкл Даррант,

Ответы:

23

Сбросьте ваш путь прямо сейчас (т.е. перед любым выходом из системы) с помощью:

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Он не восстановит ваш полный PATH, но основные утилиты снова будут доступны.

Вот пример того, что происходит:

У вас была переменная PATH (называемая $ PATH при чтении из нее)

Что-то вроде:

$ echo $PATH
/home/durrantm/.rvm/gems/ruby-2.0.0-p247/bin:/home/durrantm/.rvm/gems/ruby-2.0.0-p247@global/bin:/home/durrantm/.rvm/rubies/ruby-2.0.0-p247/bin:/home/durrantm/.rvm/bin:/h
ome/durrantm/.autojump/bin:/usr/local/heroku/bin:/home/durrantm/bin:/home/durrantm/.autojump/bin:/usr/local/heroku/bin:/home/durrantm/.autojump/bin:/usr/local/heroku/bin:
/home/durrantm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/durrantm/.rvm/bin:/home/durrantm/.rvm/bin:/home/durrantm
/.rvm/bin

Вы пытались добавить к нему, но вы случайно использовали

PATH=PATH:other_dir

вместо

PATH=$PATH:other_dir

и в результате ваш путь стал

PATH:other_dir

а потом все утилиты вроде ls и sed не работают

Вы можете исправить минимальный набор, выполнив

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

что особенно полезно, если файлы точек входа в систему портят вашу PATH.
Проверьте ваши файлы .bashrc и / или .bash_profile на наличие любых изменений PATH.

Как говорит Грег, вы также можете просто выйти (или более безопасный вариант, открыть новое окно в случае, если открытие нового окна не работает!), А затем вывести $ PATH из нового окна.

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

Что касается того , почему , когда у вас есть эти проблемы, cd работает, а ls не работает:

  • cd это встроенная команда, которая не нуждается в вашем PATH, чтобы найти программу
  • ls это программа, и нужно использовать PATH, чтобы найти ее.

Вы можете увидеть это с:

$ builtin ls
-bash: builtin: ls: not a shell builtin
14:47:29 mdurrant C02MH2DQFD58 /Users/mdurrant
$ builtin cd
14:47:31 mdurrant C02MH2DQFD58 /Users/mdurrant
$

Нет ошибки означает, что команда является встроенной

Прежде чем «двигаться дальше» (или выйти) ...

Обязательно протестируйте любые изменения (в частности, изменения в .bashrc, .profile и т. Д., Которые выполняют команды установки PATH), открыв новое окно или выполнив source ~ / .bash_profile для его запуска. Также рекомендуется оставлять окно и редактор (когда вы изменяете файл .bash_profile) открытыми на случай, если ваши изменения не сработают и не позволят вам открыть новые окна для редактирования файла. Хотя вы все равно можете использовать TextEdit или другой простой редактор для изменения файла (исключая, например, командную строку и vi). Будьте осторожны, НЕ перезагружайтесь, если / когда ваша оболочка сломана или вы даже не сможете войти в систему. и это действительно очень плохо (без другого аккаунта, чтобы suот вас не было). Случилось со мной!

Мое исправление «дополнительная учетная запись» было тогда спасением жизни, хотя и очень рекомендованным для всех (сделайте это сейчас!)

Майкл Даррант
источник
Привет! Большое спасибо! Я просто сбрасываю путь, но когда я открываю новое окно терминала, происходит то же самое. Затем я сделал больше ~ / .bash_profile, чтобы проверить наличие изменений, и это показывает следующее: export PATH =
Mariaa
Это нормально?
Mariaa
Кроме того, когда я повторяю $ PATH, я не получаю никаких результатов ... не уверен, нормально ли это или нет
Mariaa
@Mariaa, как вы сбрасываете путь, сообщите файл или команду.
jgr208
1
Обязательно протестируйте любые изменения, открыв новое окно или выполнив source ~/.bash_profileего. Рекомендуется также держать окно и редактор (где вы изменяете файл .bash_profile) открытыми на случай, если ваши изменения не сработают и не позволят вам открыть новые окна для редактирования файла. Хотя вы все равно можете использовать TextEdit или другой простой редактор для изменения файла.
Майкл Даррант
8

Изменения, которые вы внесли PATH, скорее всего, временные. Закройте оболочку, с которой вы находитесь, exitи снова откройте ее.

В случае, если вы отредактировали файл, который устанавливает PATHдля вновь открытых оболочек, укажите полный путь к командам, чтобы исправить все, что вы изменили (например, /usr/bin/vim).

Грег Хьюгилл
источник
Здравствуйте! Спасибо (: Я пытался сделать это, но это не работает. Я предполагаю, что я действительно сделал что-то странное. Я помню, как использовал vim, чтобы что-то сделать с PATH, а потом все просто испортилось. Тьфу, жаль, что я не знал больше компьютерного языка чтобы отсортировать эту вещь!
Mariaa
Есть /usr/binили какой-либо binкаталог в вашем пути? @Mariaa
jgr208
jgr208: это мой путь: / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin
Mariaa
@Mariaa, ты не удалил bin или что-то еще, и у тебя есть права на чтение файлов?
jgr208
Однако я могу видеть это или использовать любую команду только при вводе PATH = / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin это в новом терминале окно .. иначе я не могу использовать ни одну из команд. Это не признает их: S
Mariaa