Je souhaite identifier rapidement tous les fichiers inscriptibles dans le répertoire. Quel est le moyen rapide de le faire?Rechercher tous les fichiers accessibles en écriture dans le répertoire en cours
Répondre
find -type f -maxdepth 1 -writable
-f
testera un fichier
-w
testera que ce soit inscriptible
Exemple:
$ for f in *; do [ -f $f ] && [ -w $f ] && echo $f; done
Si vous êtes shell, utilisez
find . -maxdepth 1 -type f -writable
voir trouver l'homme
Vous vous trouverez de meilleures réponses pour ce type de question sur superuser.com ou serverfault.com
Si vous écrivez du code non seulement en utilisant shell que vous pouvez être intéressé par l'appel système d'accès (2).
Ce question a déjà été demandé sur serverfault
EDIT: @ ghostdog74 demandé si vous avez supprimé les permissions d'écriture pour ce fichier si cela trouverait encore le fichier. La réponse, non cela ne trouve que les fichiers qui sont inscriptibles.
[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
Je vois l'erreur suivante avec votre solution: find: prédicat invalide «-writable» – vehomzzz
Désolé avait. au mauvais endroit, fixe maintenant, regardez homme trouver pour voir comment utiliser cette commande –
si vous supprimez toutes les autorisations inscriptibles dans un fichier, puis utilisez la commande, trouve-t-il toujours le fichier? Je suis curieux – ghostdog74
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
n'utilisez pas ls avec la boucle pour analyser les noms de fichiers. citez également vos variables dans le test if/else. – ghostdog74
pour trouver des fichiers inscriptibles quel que soit le propriétaire, groupe ou autres, vous pouvez vérifier le drapeau w
dans la colonne d'autorisation de fichier de ls.
ls -l | awk '$1 ~ /^.*w.*/'
1 $ est le premier champ, (par exemple le bloc d'autorisation de ls -l), l'expression régulière dire juste trouver la lettre « w » dans le champ un. c'est tout.
si vous voulez trouver le propriétaire le droit d'écriture
ls -l | awk '$1 ~ /^..w/'
si vous voulez trouver l'autorisation d'écriture de groupe
ls -l | awk '$1 ~ /^.....w/'
si vous voulez trouver d'autres écrivent l'autorisation
ls -l | awk '$1 ~ /w.$/'
c'est génial! peut ypu expliquer cette commande awk pelase – vehomzzz
que signifie tilde? – vehomzzz
le tilde est l'opérateur regex d'awk pour "match". un peu comme l'opérateur regex '= ~' de Perl – ghostdog74
Le -writable
l'option recherchera les fichiers accessibles en écriture par l'utilisateur actuel.Si vous souhaitez trouver des fichiers qui sont modifiables par tout le monde (ou même d'autres combinaisons), vous pouvez utiliser l'option -perm
:
find -maxdepth 1 -type f -perm /222
Cette recherche les fichiers qui sont inscriptibles par leur propriétaire (quel qu'il soit) :
find -maxdepth 1 -type f -perm /200
Divers caractères peuvent être utilisés pour contrôler le sens de l'argument de mode:
/
- un bit d'autorisation-
- tous les bits (-222
signifierait tout - utilisateur, groupe et autres)- sans préfixe - spécification exacte (
222
signifierait pas permssions autres que d'écrire)
C'est une solution très élégante. Comment puis-je modifier cela pour trouver des fichiers qui ne sont accessibles en écriture que par le propriétaire. – kshenoy
@kshenoy: Une façon: '-perm -u + w! -perm -g + w! -perm -o + w' –
Sur Mac ou n'importe quelle variante Linux antérieure, utilisez: find -type f + perm 222 – user1959190
stat -c "%A->%n" *| sed -n '/^.*w.*/p'
Le problème avec find -writable
est- que ce n'est pas portable et qu'il n'est pas facile d'émuler correctement avec les opérateurs portables find
. Si votre version de find
ne l'a pas, vous pouvez utiliser touch
pour vérifier si le fichier peut être écrit à l'aide -r
pour vous assurer que vous (presque) ne modifiez pas le fichier:
find . -type f | while read f; do touch -r "$f" "$f" && echo "File $f is writable"; done
Le -r
L'option pour touch
est dans POSIX, donc il peut être considéré comme portable. Bien sûr, ce sera beaucoup moins efficace que find -writable
.
Notez que touch -r
sera mise à jourde chaque fichier ctime (heure de la dernière modification de sa méta-données), mais on se soucie rarement de ctime de toute façon.
Avez-vous essayé 'touch' sur un fichier en lecture seule en tant que root ou sur un fichier que vous possédez? La possibilité de mettre à jour un horodatage n'implique pas que le fichier est accessible en écriture. –
Si vous êtes root, les fichiers en lecture seule sur les systèmes de fichiers inscriptibles sont accessibles en écriture, donc je ne vois pas le problème là. – Idelic
Sur redhat 4 j'obtiens "while: Expression Syntaxe". – jgritty
Si vous voulez trouver tous les fichiers qui sont inscriptibles par etal apache alors vous pouvez le faire:
sudo su www-data
find . -writable 2>/dev/null
Remplacer les données www-avec personne ou apache ou quel que soit votre utilisateur Web est.
Je sais ce très vieux fil, mais ...
La commande ci-dessous m'a aidé: find . -type f -perm /+w
Vous pouvez utiliser -maxdepth en fonction du nombre de niveaux ci-dessous le répertoire que vous souhaitez rechercher. J'utilise Linux 2.6.18-371.4.1.el5.
- 1. faire correspondre tous les fichiers dans le répertoire en cours
- 2. Où placer les fichiers d'application accessibles en écriture courants?
- 3. VS.NET: Affichage de la liste des fichiers accessibles en écriture
- 4. rechercher des fichiers dans le répertoire en utilisant php
- 5. Liste des fichiers et des répertoires accessibles en écriture pour le groupe sous Linux
- 6. Cours Java non accessibles
- 7. Python one-liner pour imprimer tous les fichiers du répertoire en cours
- 8. Rejoindre tous les fichiers dans un répertoire
- 9. programmes en cours d'exécution en parallèle, lecture/écriture en C
- 10. Trouver tous les fichiers dans le répertoire en utilisant "FindFirstFileA" - C
- 11. Fichiers dans le répertoire en C++
- 12. fichiers en lecture/écriture Serrures
- 13. liste PHP tous les fichiers dans le répertoire
- 14. Mise en boucle du contenu du répertoire en cours
- 15. Stockez tous les fichiers jar dépendants dans le répertoire
- 16. Liste les fichiers récursivement dans Linux CLI avec le chemin relatif au répertoire en cours
- 17. Rechercher et remplacer du texte dans tous les fichiers d'un répertoire linux
- 18. Comment créer un répertoire en cours d'exécution avec tous les droits sur tous les utilisateurs, en utilisant Delphi?
- 19. Rechercher tous les fichiers dans le projet contenant le texte 'querystring' dans Eclipse
- 20. Parcourir tous les fichiers d'un répertoire
- 21. à montrer tous les fichiers d'un répertoire
- 22. Rechercher dans le répertoire Apache
- 23. Copier les fichiers dans le dossier d'un répertoire en python
- 24. Dans Eclipse, comment ouvrir un navigateur de fichiers dans le répertoire du fichier en cours d'édition
- 25. Définir les fichiers à la propriété du répertoire en cours en Python
- 26. nettoyer les fichiers dans le répertoire linux
- 27. FTP transférer tous les fichiers dans un répertoire distant, et modifier les autorisations, en utilisant PHP
- 28. Comment puis-je rendre le répertoire accessible en écriture?
- 29. Comment déplacer tous les fichiers mp3 dans un seul répertoire?
- 30. Script PHP pour parcourir tous les fichiers dans un répertoire?
Il émet un avertissement sur l'ordre des options sur mon système. –
quel Linux utilisez-vous? – matja
+1 pour maxdepth et type f, je les ai inclus dans ma réponse. –