find не работает с моей переменной

Я прокомментировал https://www.reddit.com/r/debian/comments/503ja3/issues_with_debian_on_android_phone/d8j290s/ , что я решил эту проблему, и вот вам более подробная информация (как вы pinged мне на reddit):

AFAIK, setid для root в debian chroot не будет работать, из-за Android sepolicy. Возможно, в Android-политике есть правило, например, «чтобы использовать сеть, у вас должен быть gid of inet (а это 3003, как вы можете видеть из adb shell id)». Может быть, в нем также говорится: «корень сетта бесполезен».

Итак, чтобы это работало, вы должны добавить группу (возможно, с именем android_inet) с gid 3003 в chroot debian: sudo addgroup --gid 3003 android_inet, а затем изменить идентификатор основной группы _apt на android_inet: sudo usermod -g android_inet _apt.

Добавление android_inet в качестве дополнительной группы для _apt не будет работать, потому что это не то, что хочет Android Sepolicy.

3
задан 16.04.2020, 04:29

2 ответа

Попробуйте передать каталог, который вы хотите найти, в качестве параметра скрипту bash:

#!/usr/bin/env bash

# First argument to script shall be directory in which to search
ARCHIVE=$1 

#find the number of non-empty directories in the given dir 
dirs=$(find "$ARCHIVE" -mindepth 1 -maxdepth 1 -not -empty -type d | wc -l)
#find the number of files in the given dir
msgs=$(find "$ARCHIVE" -type f | wc -l)

echo "Number of directories: $dirs"
echo "Total number of messages: $msgs"

Запуск скрипта с именем dirfiles в моем домашнем каталоге:

$ ./dirfiles ~
Number of directories: 27
Total number of messages: 8703
[1116 ] И на /usr/lib:

$ ./dirfiles /usr/lib
Number of directories: 161
Total number of messages: 9630

Кроме того, find предлагает три способа разрешения символических ссылок:

  • -P: не переходить по символическим ссылкам [1111 ]
  • -L: переходить по символическим ссылкам
  • -H: не переходить по символическим ссылкам, кроме случаев обработки аргументов командной строки.

Если вы не хотите переходить по символическим ссылкам, но $ARCHIVE одна из них, то, возможно, -H - путь.

1
ответ дан 16.04.2020, 04:30

Это происходит потому, что, вероятно, у вас нет прав на чтение в чужом каталоге. Если у вас нет прав на чтение, вы не можете просматривать / искать / находить контент. Вы можете проверить это с помощью следующей команды:

ls -l /home/username/directory

Также убедитесь, что эти файлы или каталоги, для которых вы ищете, действительно являются файлами или каталогами (первый символ из 10-символьного разрешения строки - - или d ], не что-то еще - l в вашем случае, что означает символические ссылки).

ls показывает разрешения в виде строки из 10 символов, например -rw-r--r--. Символы можно интерпретировать как TUUUGGGOOO, где:

T Type
UUU   Rights for the owner of the file
GGG   Rights for users in the group
OOO   Rights for others, not listed above

T является одним из:

- file
d directory
c character device
b block device
l symbolic link

Источник: Введение для доступа к файлам Unix

Также, когда вы используете:

  • find -type d - вы ищете только каталоги.
  • find -type f - вы ищете только обычные файлы.
1
ответ дан 16.04.2020, 04:30
  • 1
    @turbo, Когда Вы говорите ls -l, возвратился rwxrwxrwx, был ли d перед этим? Попробуйте ls -dl ./your/directory вместо этого. – simianarmy 16.04.2020, 04:31
  • 2
    Каталог имеет приблизительно 200 каталогов, и они все установлены на rwxr-x-r-x, и каждый каталог имеет некоторые файлы, я протестировал некоторых, и они были всем r--r--r--. – simianarmy 16.04.2020, 04:31
  • 3
    @turbo И для файлов/папок в том каталоге у Вас есть полномочия чтения? Можно ли видеть что-то, если Вы перешли там? – simianarmy 16.04.2020, 04:31
  • 4
    @turbo Тогда необходимо говорить с тем пользователем. Возможно, он установил другое специальное разрешение на своих файлах. I' m уверенный, что существует проблема с полномочиями. Что является выводом этой команды: ls -alR /home/username >/dev/null? – Ryan 16.04.2020, 04:32
  • 5
    У меня действительно есть разрешение чтения на том каталоге, я могу использовать grep на нем (которому я верю, подразумевает, что я делаю), и на самом деле использование ls -l на нем возвратилось rwxrwxrwx – Tass 16.04.2020, 04:32

Теги

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