Кто-либо может объяснить, почему sudo ls с подстановочным знаком не работает?

$ sudo -iu abc ls -ltr /sites/servers/server_instance/logs/access*
ls: cannot access /sites/servers/server_instance/logs/access*: No such file or directory

$ sudo -iu abc ls -ltr /sites/servers/server_instance/logs/
total 594812
-rwxrwxrwx 1 abc abc      45 Mar 21 12:42 old.log
-rwxrwxrwx 1 abc abc      304537970 Mar 24 12:45 console.log
-rwxrwxrwx 1 abc abc      304537970 Mar 24 13:20 access_nginx.log

Кто-либо может объяснить, почему это происходит? Я застреваю на сценарии из-за этого.

14
задан 29 May 2018 в 04:24

2 ответа

Одна возможность состоит в том, что у Вас нет полномочий получить доступ к одному или нескольким каталогов в том пути (/sites/servers/server_instance/logs). Подстановочное расширение выполняется Вашей оболочкой, и затем разобранные контуры передаются эти sudo команда.

, Если бы у Вашего пользователя нет полномочий, расширение не работало бы в первой команде. Это было бы выполнено как есть (ls -ltr /sites/servers/server_instance/logs/access*), и нет файла, буквально названного access*). Если abc действительно будет иметь необходимые полномочия для всех каталогов в пути, то вторая команда, которая не имела никаких подстановочных знаков, будет нетронутой Вашей оболочкой, и она хорошо работала бы.

$ sudo namei -lx foo/bar/baz
f: foo/bar/baz
drwxr-xr-x muru    muru    foo
drwx------ test    test    bar
drwxr-xr-x muru    muru    baz

$ sudo ls foo/bar/b*
ls: cannot access 'foo/bar/b*': No such file or directory

$ sudo -u test ls foo/bar/
baz
27
ответ дан 23 November 2019 в 02:54

У Вас может быть отключенный globbing.

Ищут что-то как set -f или set -o noglob перед теми строками в сценарии, или если в интерактивной оболочке работает echo $-; если существует f в выводе, globbing отключен:

$ echo $-
fhimBH

Для фиксации этого удалите set -f или set -o noglob из сценария, или если в интерактивной оболочке работает set +f или set +o noglob:

$ set -f
$ echo $-
fhimBH
$ ls access*
ls: cannot access access*: No such file or directory
$ set +f
$ echo $-
himBH
$ ls access*
access
6
ответ дан 23 November 2019 в 02:54

Другие вопросы по тегам:

Похожие вопросы: