2016-06-04 2 views
0

По какой-то причине я не знаю, у меня есть файл с разрешениями, установленными на «000».Как проверить наличие файла с разрешениями 000?

Я хотел бы chmod u+r, потому что мне нужно застегнуть всю свою папку. И с 000, zip предупреждает о проблеме чтения этого файла.

Я хотел бы проверить существование этого файла, потому что не каждый раз, когда я его в папку.

Но я проверил, что с помощью следующих результатов является булевой ложным

if [ -f $file_path ]; then 
... 

Также параметр -e возвращают ложь.

Как проверить, существует ли файл из сценария bash?

+1

Ваша диагностика неправильная. Разрешения файла имеют значение только при попытке открыть файл. Тем не менее, возможно, проверьте права на содержащую директорию. – tripleee

+1

Отсутствие цитаты может быть проблемой. Попробуйте '[-f" $ file_path "]' – tripleee

ответ

2

Вы можете найти каталог для файлов, которые имеют 000 разрешения с этим утверждением:

find /tmp -perm 000 

где /tmp будет вашим каталогом.

0

Просто делать, как вы предлагаете:

$> touch none_foo 
$> chmod 000 none_foo 
$> if [ -f "none_foo" ]; then printf "yes\n"; else printf "no\n"; fi 
yes 

Но если папка вшита имеет 000 вы обречены ;-)

Sample (сохраняющиеся сверху состояния):

$> mkdir disclosed 
$> mv none_foo disclosed/ 
# still ok: 
$> if [ -f "disclosed/none_foo" ]; then printf "yes\n"; else printf "no\n"; fi 
yes 
# now a non-disclosure: 
$> chmod 000 disclosed 
$> if [ -f "disclosed/none_foo" ]; then printf "yes\n"; else printf "no\n"; fi 
no 

Итак, с папками в пути к файлу, которые запрещают «ввод», вы должны исправить это в первую очередь. И в любом случае (как другой комментатор предложил Уже вступил): Используйте кавычки литералов и переменных в оболочке ...

Как @JeremyJStarcher писал в своем ответе вы также можете использовать:

$> find ./ -perm 000 
.//disclosed 
find: .//disclosed: Permission denied 

, но, как вы см, ловушка папки должны быть смягчена пользователем с достаточными правами для увеличения 000 на что-то более доступное ...