Подтвердить что ты не робот

Найти все записываемые файлы в текущем каталоге

Я хочу быстро определить все записываемые файлы в каталоге. Каков быстрый способ сделать это?

4b9b3361

Ответ 1

find -type f -maxdepth 1 -writable

Ответ 2

Опция -writable найдет файлы, которые могут быть записаны текущим пользователем. Если вы хотите найти файлы, доступные для записи кем угодно (или даже другие комбинации), вы можете использовать опцию -perm:

find -maxdepth 1 -type f -perm /222

Здесь будут найдены файлы, которые могут быть записаны владельцем (кем бы это ни было):

find -maxdepth 1 -type f -perm /200

Для управления значением аргумента mode могут использоваться различные символы:

  • / - любой бит разрешения
  • - - все биты (-222 означают все - пользователь, группа и другие)
  • no prefix - точная спецификация (222 означает отсутствие перехватов, кроме записи)

Ответ 3

Если вы используете оболочку

find .  -maxdepth 1 -type f -writable

см. поиск человека

Вы найдете ответы на этот вопрос лучше на superuser.com или serverfault.com

Если вы пишете код не только с помощью оболочки, вы можете быть заинтересованы в системном вызове доступа (2).

Этот question уже задан на serverfault

EDIT: @ghostdog74 спросил, удалили ли вы права на запись для этого файла, если это все равно найдет файл. Ответ: нет, это только файлы, доступные для записи.

[email protected] ~/temp
$ cd temp

[email protected] ~/temp/temp
$ ls

[email protected] ~/temp/temp
$ touch newfile

[email protected] ~/temp/temp
$ ls -alph
total 0
drwxr-xr-x+ 2 dwaters Domain Users 0 Mar 22 13:27 ./
drwxrwxrwx+ 3 dwaters Domain Users 0 Mar 22 13:26 ../
-rw-r--r--  1 dwaters Domain Users 0 Mar 22 13:27 newfile

[email protected] ~/temp/temp
$ find .  -maxdepth 1 -type f -writable
./newfile

[email protected] ~/temp/temp
$ chmod 000 newfile

[email protected] ~/temp/temp
$ ls -alph
total 0
drwxr-xr-x+ 2 dwaters Domain Users 0 Mar 22 13:27 ./
drwxrwxrwx+ 3 dwaters Domain Users 0 Mar 22 13:26 ../
----------  1 dwaters Domain Users 0 Mar 22 13:27 newfile

[email protected] ~/temp/temp
$ find .  -maxdepth 1 -type f -writable

[email protected] ~/temp/temp

Ответ 4

-f проверит файл

-w проверит, может ли он записываться

Пример:

$ for f in *; do [ -f $f ] && [ -w $f ] && echo $f; done

Ответ 5

чтобы найти файлы, доступные для записи, независимо от владельца, группы или других лиц, вы можете проверить флаг w в столбце разрешения файла ls.

ls -l | awk '$1 ~ /^.*w.*/'

$1 - это первое поле (т.е. блок разрешений ls -l), регулярное выражение просто скажет, что в первом поле находится буква "w". что все.

если вы хотите найти разрешение на запись владельца

ls -l | awk '$1 ~ /^..w/'

если вы хотите найти разрешение на запись группы

ls -l | awk '$1 ~ /^.....w/'

если вы хотите найти другое разрешение на запись

ls -l | awk '$1 ~ /w.$/'

Ответ 6

for  var in `ls`
do
if [ -f $var -a -w $var ]
then
echo "$var having write permission";
else
echo "$var not having write permission";
fi
done

Ответ 7

stat -c "%A->%n" *| sed -n '/^.*w.*/p'

Ответ 8

Проблема с find -writable заключается в том, что она не переносима, и ее нелегко правильно эмулировать с помощью переносимых операторов find. Если ваша версия find не имеет его, вы можете использовать touch, чтобы проверить, можно ли записать файл, используя -r, чтобы убедиться, что вы почти не модифицируете файл:

find . -type f | while read f; do touch -r "$f" "$f" && echo "File $f is writable"; done

Параметр -r для touch находится в POSIX, поэтому его можно считать переносимым. Конечно, это будет намного менее эффективно, чем find -writable.

Обратите внимание, что touch -r будет обновлять каждый файл ctime (время последнего изменения в его метаданных), но в любом случае он редко заботится о ctime.

Ответ 9

Если вы хотите найти все файлы, доступные для записи apache etal, вы можете сделать это:

sudo su www-data
find . -writable 2>/dev/null 

Замените www-данные никем или апачем или каким бы то ни было вашим веб-пользователем.

Ответ 10

Я знаю, что это очень старый поток, однако...

Эта команда помогла мне: find . -type f -perm /+w

Вы можете использовать -maxdepth, исходя из того, сколько уровней под каталогом вы хотите искать. Я использую Linux 2.6.18-371.4.1.el5.