Всякий раз, когда я пытаюсь cd folder_name/
в bash для любого каталога, он выдает эту ошибку:
-bash: cd: folder_name/: Permission denied
Разрешения на выполнение даются всем папкам, так что не кажется проблемой. Например. запуск stat на Desktop/
выводит:
File: 'Desktop/'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 807h/2055d Inode: 13107232 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 1000/caffeine) Gid: ( 1000/caffeine)
Access: 2017-12-07 14:39:42.715820915 +0500
Modify: 2017-12-06 01:16:13.985722935 +0500
Change: 2017-12-06 01:16:13.985722935 +0500
Birth: -
Некоторая другая, возможно, важная информация:
mkdir
выполняется нормально, но я не могу cd
в новую папку. rmdir
выполняется нормально. Так кто-нибудь может сказать, в чем может быть проблема?
Заранее спасибо.
РЕДАКТИРОВАТЬ: type -a cd
показывает следующий вывод:
cd is a function
cd ()
{
echo "-bash: cd: $1: Permission denied"
}
cd is a shell builtin
Вы, вероятно, были жертвой шутки, возможно, сделанной вашими коллегами или кем-то, кто имел доступ к вашей машине.
Функции Bash могут скрывать исходные встроенные команды оболочки, как вы могли видеть type -a cd
. Он показал вам, что сначала нашел функцию, которая, возможно, где-то объявлена.
cd is a function
cd ()
{
echo "-bash: cd: $1: Permission denied"
}
cd is a shell builtin
Из этого вывода вы можете видеть, что где-то кто-то объявил функцию оболочки с именем cd
, которая теперь скрывает встроенную команду оболочки cd
. В некоторых случаях что-то подобное может быть полезно, чтобы сделать команды более универсальными или реализовать дополнительную функциональность, но в этом случае это было сделано с недобросовестным намерением (мое предположение). Это можно было сделать в нескольких местах системы:
/etc/bash.bashrc
/etc/profile
/etc/profile.d/
/etc/environment
~/.bashrc
~/.profile
~/.bash_aliases
Один из возможных способов найти это, возможно, - это выполнить рекурсивный поиск grep
в /etc/
и в /home/
:
grep -r 'bash: cd: $1: Permission denied' /home/*
sudo grep -r 'bash: cd: $1: Permission denied' /etc/*
, который может привести к такому выводу:
$ grep -r 'bash: cd: $1: Permission denied' /home/*
/home/videonauth/.bashrc: echo "-bash: cd: $1: Permission denied"
В этом примере строка или функция, кажется, находятся в ~/.bashrc
, который вы можете увидеть по пути, ведущему к выходу grep
. В зависимости от того, насколько все спрятано, это может или не может привести к результату. Есть и другие способы скрыть такое объявление функции, которое может быть не так легко найти.