„chmod -644” ustawiłoby uprawnienia do pliku na 000

12

Miałem plik z 644 ( -rw-r--r--) i chciałem go zmienić na 664 ( -rw-rw-r--) po uruchomieniu:

sudo chmod -664 my_file

uprawnienia do plików zostały ustawione na 000 ( ----------).

Próba zmiany uprawnień na coś innego niż 000 wydaje się nie działać. Czego tu brakuje?

illgoforit
źródło
11
Dlaczego masz -przed 644? Spróbować sudo chmod 644 my_file. -644usunie prawa.
Soren A

Odpowiedzi:

34

Używasz -664, po prostu użyj 664zamiast tego. I nigdy nie używaj, sudokiedy nie musisz. Jeśli to twój plik, nie potrzebujesz sudo:

chmod 644 my_file

Po uruchomieniu chmodz -przed trybie, można usunąć ten tryb. Zobacz man chmod(moje podkreślenie):

Operator + powoduje, że wybrane bity trybu pliku są dodawane do istniejących bitów trybu pliku każdego pliku; - powoduje ich usunięcie ; i = powoduje ich dodanie i usunięcie niewymienionych bitów, z wyjątkiem tego, że nie ma to wpływu na niewymienione bity identyfikatora użytkownika i grupy w katalogu.

Liczby to:

  • 1: wykonaj
  • 2: pisz
  • 4: przeczytaj

Tak więc plik z 777uprawnieniami oznacza, że ​​każdy ma prawo zrobić wszystkie trzy, ponieważ 1 + 2 + 4 = 7, a zatem ustawienie uprawnień na 7 oznacza umożliwienie odczytu, zapisu i wykonania.

Jeśli zaczynasz od pliku, którego tryb to 777:

$ ls -l my_file 
-rwxrwxrwx 1 terdon terdon 0 May 28 13:45 my_file

A teraz uruchom chmod -644, usuniesz bity 644i skończysz na pliku, którego tryb to 133:

$ chmod -644 my_file; ls -l my_file 
---x-wx-wx 1 terdon terdon 0 May 28 13:45 my_file

Wynika to z faktu, że usunąłeś 6 (odczyt (4) + zapis (2)) z uprawnień właściciela, pozostawiając tylko 1 (wykonanie) i 4 (odczyt) z grupy oraz innych uprawnień. Rezultatem jest plik z uprawnieniami tylko do wykonania (1) dla właściciela oraz do zapisu i wykonania (cofniesz ustawienie 4, pozostawiając 1 i 3) dla reszty.

Ponieważ plik prawdopodobnie miał domyślne uprawnienia do nowych plików, więc 644po uruchomieniu chmod -644 my_fileusunąłeś wszystkie ustawione bity uprawnień i otrzymałeś plik bez uprawnień dla nikogo.

$ ls -l my_file 
-rw-r--r-- 1 terdon terdon 0 May 28 13:45 my_file
$ chmod -644 my_file
$ ls -l my_file 
---------- 1 terdon terdon 0 May 28 13:45 my_file
terdon
źródło