Назад | Перейти на главную страницу

Интерпретация звездочки в командной строке - разрешения?

Ubuntu 16.04.6 LTS

Сначала это было странно, но я думаю, что сузил свою проблему до вопроса о разрешениях и о том, как звездочка (*) интерпретируется в командной строке из-за этого.

Первоначально я анализировал файлы журнала apache, но воссоздал вопрос следующим образом.

Два пользователя: user1 и user2

User2 владеет указанной папкой со следующими разрешениями:

user2@server-01:~$ ls -lahd myFolder/
drwxrwx--- 2 user2 user2 4.0K Aug 28 13:22 myFolder/

Папка содержит группу файлов, названных в соответствии с соглашением об именах, которому можно следовать. т.е.

user2@server-01:~/myFolder$ ls -l
total 0
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 abc_1
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 abc_2
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 abc_3
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 abc_4
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 abc_5
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 def_1
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 def_2
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 def_3
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 def_4
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 def_5

Если я хочу только проанализировать или перечислить файлы 'abc' в папке, мы, конечно, можем это сделать (как user2):

user2@server-01:~/myFolder$ ls -l abc*
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 abc_1
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 abc_2
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 abc_3
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 abc_4
-rw-rw-r-- 1 user2 user2 0 Aug 28 13:24 abc_5

Теперь пользователь user1 настроен следующим образом (обратите внимание, что это sudoer):

user1@server-01:~$ id
uid=1004(user1) gid=1004(user1) groups=1004(user1),27(sudo)

Конечно, наш user1 не сможет перечислить содержимое myFolder, если перед командой не стоит sudo. Как это:

user1@server-01:~$ ls /home/user2/myFolder
ls: cannot open directory '/home/user2/myFolder': Permission denied

user1@server-01:~$ sudo ls /home/user2/myFolder
abc_1  abc_2  abc_3  abc_4  abc_5  def_1  def_2  def_3  def_4  def_5

Наконец, мой вопрос: как user1 перечисляет только файлы 'abc', потому что команда sudo или разрешения каталога или что-то в области безопасности не интерпретирует звездочку в приведенной ниже команде обычным способом?

user1@server-01:~$ sudo ls /home/user2/myFolder/abc_*
ls: cannot access '/home/user2/myFolder/abc_*': No such file or directory

Или я полностью не понимаю ситуацию?

Отличное объяснение здесь: https://unix.stackexchange.com/questions/101847/cannot-expand-asterisk-without-proper-permission

Нам нужно будет вызвать оболочку с помощью sudo и передать всю команду с флагом -c

[user1@server-01 ~]$ sudo sh -c 'ls -l /home/user2/myFolder/abc*'
-rw-rw-r--. 1 user2 user2 0 Aug 28 14:01 /home/user2/myFolder/abc_1
-rw-rw-r--. 1 user2 user2 0 Aug 28 14:01 /home/user2/myFolder/abc_2
-rw-rw-r--. 1 user2 user2 0 Aug 28 14:01 /home/user2/myFolder/abc_3
-rw-rw-r--. 1 user2 user2 0 Aug 28 14:01 /home/user2/myFolder/abc_4
-rw-rw-r--. 1 user2 user2 0 Aug 28 14:01 /home/user2/myFolder/abc_5