Кто является владельцем файла, если файл создан с помощью команды sudo?

Кто является владельцем файла, если файл создан с помощью команды sudo?

Я вошел в систему, используя свое имя пользователя ravbholua:

ravbholua@ravbholua-Aspire-5315:~$ echo $LOGNAME ravbholua

Я создаю файл с именем a1:

ravbholua@ravbholua-Aspire-5315:~$ echo>a1
ravbholua@ravbholua-Aspire-5315:~$ ll a1
-rw-rw-r-- 1 ravbholua ravbholua 1 Oct  8 09:57 a1

Как и ожидалось, владельцем файла выше являюсь я ( ravbholua).

Далее я создаю a2 с помощью sudo с помощью echoкоманды:

ravbholua@ravbholua-Aspire-5315:~$ sudo echo>a2
ravbholua@ravbholua-Aspire-5315:~$ ll a2
-rw-rw-r-- 1 ravbholua ravbholua 1 Oct  8 09:57 a2

Владелец — только я, ravbholuaт.е.

Теперь я снова создаю a3 с помощью sudo, но с помощью vimкоманды:

ravbholua@ravbholua-Aspire-5315:~$ sudo vim a3
ravbholua@ravbholua-Aspire-5315:~$ ll a3
-rw-r--r-- 1 root root 10 Oct  8 09:57 a3

Ой! как же так получилось, что владелец теперь меняется. Это не я, а root. Почему такое разнообразие с echoи vim! Удивительно, что ссмена командкак может измениться владелец созданного файла.

решение1

Второй пример выполняется echoпод управлением sudo, ноперенаправлениепроисходит под оригинальной оболочкой.

sudo bash -c "echo > a4"

решение2

sudoэто всего лишь приказ.

Итак, ваш первый пример: sudo echo>a2

sudoэто команда. И пока у вас есть перенаправление, упирающееся в эхо, это ничего не значит.

Например: echo cat /etc/passwd > /tmp/foo Вы не получите содержимое /etc/passwd в /tmp/foo. У вас будет только cat /etc/passwd. sudo ничем не отличается. Часть echo — это просто аргумент для sudo. sudo использует его для выполнения чего-либо, но оболочка этого не знает.

Это одно из отличий доступа sudo от работы с правами root.

Для вашего примера, где вы используете sudo vim a3sudo, он запускается vim a3для вас как root. И vim запускается как root, поэтому файл принадлежит root.

Связанный контент