Да, root имеет все права делать что угодно
Здесь вы можете видеть, что я создал тест имени каталога, коснулся файла lonston.txt и перечислил файлы
root@system99:/tmp# mkdir test && touch lonston.txt && ls -l
total 4
-rw-r--r-- 1 root root 0 Feb 27 16:35 lonston.txt
drwxr-xr-x 2 root root 4096 Feb 27 16:35 test
Затем я изменил права доступа к файлу и каталогу обнулить разрешение с помощью 000 и перечислить, чтобы увидеть разрешение
root@system99:/tmp# chmod 000 lonston.txt && chmod 000 test && ls -l
total 4
---------- 1 root root 0 Feb 27 16:35 lonston.txt
d--------- 2 root root 4096 Feb 27 16:35 test
Тогда даже я могу записать в файл и прочитать файл с помощью cat
root@system99:/tmp# echo "Yes root have all Privileges than other user's, let we see the permission of user's too" > lonston.txt
root@system99:/tmp# cat lonston.txt
Yes root have all Privilages than other user's, let we see the permission of user's too
Даже я могу попасть в каталог, который имеет d -------- - (null) 000 разрешение, даже root не имеет разрешения на чтение или запись.
root@system99:/tmp# cd test/
root@system99:/tmp/test# pwd
/tmp/test
Даже я могу создавать файлы и папки после изменения прав доступа с любого из них.
root@system99:/tmp/test# touch /tmp/test/lonston/testdir/babin.txt
root@system99:/tmp/test# ls -l /tmp/test/lonston/testdir/
total 0
-rw-r--r-- 1 root root 0 Feb 27 16:39 babin.txt
Теперь здесь мы можем увидеть Разрешение с 400
root@system99:/tmp/test# chmod 400 babin.txt
Список, чтобы увидеть права доступа к файлам
root@system99:/tmp/test# ls -l
total 8
-r-------- 1 root root 34 Feb 27 16:42 babin.txt
drwxr-xr-x 3 root root 4096 Feb 27 16:38 lonston
Используя vim im, я добавил 1 строку в файл babin.txt
root@system99:/tmp/test# vim babin.txt
Но в режиме vim он заметит нас. W10: Предупреждение: изменение файла, доступного только для чтения , но он все еще доступен для записи
Теперь мы можем скопировать файл для вывода
root@system99:/tmp/test# cat babin.txt
hi this is the write persmission
this is added while the file have 400 permission
Затем Я вышел из системы от пользователя root к обычному пользователю и перечислил файл с нулевым разрешением, что и в корневом каталоге
root@system99:/tmp# exit
exit
Перейдите в каталог / tmp
sysadmin@system99:~$ cd /tmp/
sysadmin@system99:/tmp$ ls -l
total 8
---------- 1 root root 88 Feb 27 16:36 lonston.txt
d--------- 2 root root 4096 Feb 27 16:35 test
Но при чтении файла от обычного пользователя мы не можем
sysadmin@system99:/tmp$ cat lonston.txt
cat: lonston.txt: Permission denied
sysadmin@system99:/tmp$ cd test/
cat: test/: Permission denied
Вот и все, Надеюсь у вас есть полномочия пользователя root
. Если вы в качестве обычного пользователя, если вам нужны привилегии root, нам нужно использовать sudo, он запросит пароль sudo
пример:
sysadmin@system99:/tmp$ sudo cat lonston.txt
[sudo] password for sysadmin:
Yes root have all Privilages than other user's, let we see the permission of user's too
Пользователь Sudo взаимодействует с группой пользователей root, поэтому какие у sudo есть привилегии root.
Чтобы узнать больше о sudo
# man sudoers
Здесь мы видим, что они определили, что обычный пользователь может иметь права Sudo Здесь я упомянул только меньшее количество строк.
sysadmin@system99:/tmp$ sudo cat /etc/sudoers
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
Полностью мы можем читать, редактировать или удалять файлы, даже root. Не имеет разрешения на чтение.
Здесь есть две возможности :либо fzf
не закрывается, когда вы выбираете файл, либо find
не закрывается, когда закрывается fzf
. Если это последнее, вы можете написать скрипт для закрытия find
вручную при выходе из fzf
.
То, как каналы работают в Linux, find
не знает, что канал, в который он записывает, ничего не читает из этого канала, пока он не попытается записать в этот канал и не потерпит неудачу. Как следствие, если вы выберете файл после того, какfind
уже нашел все, что собирался найти, find
больше не записывает в конвейер и, таким образом, будет перебирать всю файловую систему перед выходом.
В качестве иллюстрации этого, если вы создадите случайный файл в /
, а затем запустите find / -name $random_file_name | head -n 1
, вы очень быстро получите весь вывод, который собираетесь получить, но программа будет продолжать работать в течение длительного времени. время.
Один из способов обойти это — самостоятельно завершить процесс, когда он завершится. Вероятно, самый простой способ сделать это в вашем конкретном случае — это именованный канал:
tmp_fifo=`mktemp -u`
mkfifo "$tmp_fifo"
eval "$search_command" > "$tmp_fifo" &
choice="$(fzf -q "$file_query" -1 --preview "preview $search_folder {}" < "$tmp_fifo")" ; kill $!
rm "$tmp_fifo"
Это создает временный именованный канал, find
записывает в него и fzf
читает из него. Но когда fzf
завершается, запускается kill $!
, где $!
обозначает последний запущенный фоновый процесс, в данном случае find
.
Другой ответ выглядит нормально, но недостатком является то, что вам нужно управлять fifo. С Bash'омcoproc
вы можете решить проблему без именованного fifo.
(Обратите внимание, :чтобы этот ответ касался общей проблемы, а не вашей конкретной, я удалил ваши переменные, eval
и подобные вещи ).
coproc find... # this silently runs in background, no `&' nor explicit redirection needed
<&${COPROC[0]} fzf... # piping from `find' to `fzf'
kill $! # killing the last background process, i.e. `find'