Czy ktoś ma narzędzie lub skrypt, który rekurencyjnie poprawi uprawnienia do plików w katalogu?
Na maszynie z systemem Ubuntu Linux kilka plików zostało skopiowanych na dysk USB z pełnymi uprawnieniami 777 (użytkownik, grupa, inne - odczyt, zapis, wykonanie) w wyniku błędu. Chcę umieścić je z powrotem w poprawionym katalogu użytkownika.
Katalogi powinny mieć rozmiar 775, a wszystkie inne pliki mogą mieć rozmiar 664. Wszystkie pliki to obrazy, dokumenty lub pliki MP3, więc żaden z nich nie musi być wykonywalny. Jeśli bit katalogu jest ustawiony, wówczas wymaga wykonania, w przeciwnym razie potrzebuje tylko użytkownika i grupy, odczytu i zapisu.
Uznałem, że warto sprawdzić, czy takie narzędzie istnieje przed zhakowaniem skryptu powłoki :)
linux
ubuntu
permissions
shell
filesystems
mlambie
źródło
źródło
Odpowiedzi:
To powinno załatwić sprawę:
źródło
find może załatwić sprawę sam z opcją -exec:
aby uniemożliwić findowi pojawienie się chmod dla każdej pozycji:
(efektywnie wywołuje to chmod raz z listą wszystkich plików jako parametrów zamiast jednego chmod na plik)
źródło
Ta odpowiedź nie rozwiąże problemu, ale ktoś może uznać ją za przydatną w przypadku podobnego problemu, w którym pliki mają mniejsze uprawnienia niż powinny.
Magią jest pozwolenie X, a nie x. Strona chmod opisuje to następująco:
Nie jest to odpowiednie w twoim przypadku, ponieważ twoje pliki mają uprawnienia do wykonywania, więc będą pasować do drugiego testu.
źródło
Stworzyłem skrypt z rozwiązania freiheit, dodaje on podstawowe sprawdzanie argumentów.
źródło
chmod: missing operand after ‘0644’
. Czy mogę zasugerować zawinięcie instrukcji find ze sprawdzeniem, czy cel istnieje?if [ -d $1 ]; then find $1 -type d -print0 | xargs -0 chmod 0755; fi; if [ -f $1 ]; then find $1 -type f -print0 | xargs -0 chmod 0644; fi
Jeśli używasz ssh, dobrze jest nie modyfikować
~/.ssh
uprawnień.źródło
Pewnego dnia zrobiłem naprawdę prosty skrypt bashowy, ponieważ musiałem naprawić uprawnienia. Dlaczego nie ma formalnego narzędzia do resetowania uprawnień podstawowych, innych niż root, plików i folderów?
Skrypt używa find do 755 wszystkich folderów i bibliotek 644. Następnie testuje każdy plik za pomocą readelf, aby sprawdzić, czy ma binarny nagłówek elfa. Jeśli nie, skanuje pierwsze dwa znaki w poszukiwaniu szelangu
#!
. 755 tych instancji i 644 wszystko inne po sprawdzeniu, czy plik ma już odpowiednie uprawnienie.Przypadki specjalne obsługiwane są z wyjątkiem, takim jak
*.bak
pliki do zignorowania.źródło
Znalazłem uproszczone rozwiązanie powłoki C. To może nie być całkowicie głupi dowód, ale powinno działać w przypadku większości katalogów. Zakłada, że uniksowe polecenie „file” działa, i znajduje pliki exec, aby zresetować je z powrotem do uprawnień exec:
źródło
Alternatywą, która nie odpowiada dokładnie pierwotnemu żądaniu, ale jest bardziej prawdopodobne, co zamierza OP, jest symboliczne określenie uprawnień. Na przykład zakładam, że OP chce „usunąć publiczny dostęp do zapisu i usunąć uprawnienia do wykonywania ze wszystkich plików”.
Jest to możliwe, jeśli używasz symbolicznej reprezentacji uprawnień.
Zapisując go w ten sposób zamiast jawnie ustawiając „0664”, unikniesz przypadkowego zezwolenia na dodatkowe uprawnienia do plików, które zostały wcześniej zablokowane. Np. Jeśli plik miał numer 0770, to przez pomyłkę nie stanie się 0664.
Aby wykonać pierwszy wymóg, wystarczy użyć
chmod
:Aby wykonać drugi warunek:
Lub zrobić oba:
źródło