실수로 내 디스크 권한 구조를 손상 시켰습니다. 왜 그렇습니까?


23

내가하려고했던 chown내에서 /opt어떤 이유로 것은 chown부모와 chowned 모든 것을 뛰어.

누구나 왜 / 어떻게 이런 일이 일어날 수 있으며 앞으로 어떻게 피할 수 있습니까? 주어진 디렉토리에서 명령을 실행하면 효과적으로 루트 디렉토리에서 명령을 실행할 수 있습니다.

ubuntu: /opt > sudo chown -R root:www-data .*
chown: changing ownership of '../var/lib/lxcfs/proc/cpuinfo': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/meminfo': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/stat': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/uptime': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/diskstats': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/swaps': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/devices': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/blkio': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/hugetlb': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/rdma': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/pids': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/freezer': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/cpuset': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/memory': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/perf_event': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/cpu,cpuacct': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/net_cls,net_prio': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/name=systemd': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/unified': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs': No such file or directory
^C
:ubuntu: /opt >

2
나는이처럼했을 것 : sudo chown -R root:wwwdata /opt몇 가지 문제를 야기 아마도 그 파이프를 사용하여 --help 대화 ... 당 ???
여호수아 Besneatte


7
@steeldriver는 마치 소리로 답해야합니다.)
Joshua Besneatte

2
숨겨진 파일에 대한 권한을 설정하는 올바른 방법은 무엇입니까?
Duke Dougal

4
@JoshuaBesneatte 필자는 /로 시작하는 인수에서 재귀 명령을 실행하지 않으려 고 시도합니다. 대부분의 키보드는 Enter 키에 가깝게 배치되어 있기 때문에 나머지 명령을 입력하기 전에 실수로 Enter 키를 누르기가 너무 쉽습니다. 이 위험을 완화하기 위해 cd루트 디렉토리로 가서 leaing /을 생략하거나로 명령을 시작할 수 있습니다. (즉, 일치하는 )유형을 입력 할 때까지 명령이 실행되지 않으므로 Ctrl-C를 누르고 구제 할 수 있습니다. 나쁜 실수 (예 : rm -rf /tmp/foo-installT 대신 Enter 키를 누르십시오).
Monty Harder

답변:


25

이것은 다음을 사용했기 때문에 발생했습니다.

sudo chown -R root:www-data .*

대신 이것을 사용해야했을 때 :

sudo chown -R root:www-data ./*

먼저 -R대상 디렉토리 아래의 모든 디렉토리에 대해 재귀 적입니다.

또한 *현재 디렉토리 아래의 모든 파일 및 디렉토리와 일치합니다. 다음으로, 현재 디렉토리 보다 한 레벨 위.*모든 파일과 디렉토리를 일치시킵니다 .

나중에이를 방지하기 위해 다음 예제와 같이 명령 ls을 실행하기 전에 명령을 사용하여 경로를 확인할 수 있습니다 chown.

ls -a ./*
ls -a *
ls -a .*
ls -a ../*

이를 피하는 또 다른 방법은 항상 명령을 실행하려는 디렉토리의 전체 경로를 사용하는 것입니다.

예를 들면 다음과 같습니다.

sudo chown -R root:www-data /opt/*

편집하다:

다음 명령을 사용하여 chmod모든 숨김 파일 또는 디렉토리 바로 아래에 숨길 수 있습니다 ( 숨겨진 /opt첫 문자 .가 문자, 숫자, 대시 또는 밑줄 이라고 가정하면 대부분의 파일에 적용됩니다).

for i in /opt/.[A-Za-z0-9-_]*; do sudo chmod root:www-data "/opt/$i"; done

chmod다음 명령을 실행하여 파일이 어떤 것인지 확인할 수 있습니다 .

ls /opt/.[A-Za-z0-9-_]*

명령의 첫 번째 부분 : globfor i in /opt/.[A-Za-z0-9-_]* 의 모든 결과에 대해 각 결과를 변수 "i"에 할당합니다. /opt/.[A-Za-z0-9-_]*

여기서 glob는 첫 번째 문자 여야 .하고 다음 문자 [A-Za-z0-9-_] 는 AZ 또는 az 또는 0-9 또는 a -또는 a 인 문자 여야한다고 말합니다 _.

이 결과를 제외됩니다 .하고 ..있는 현재 디렉토리와 현재 디렉토리 위의 디렉토리를 표시 숨겨진 파일과 디렉토리 만 포함됩니다.

명령의 두 번째 부분 : do sudo chmod root:www-data "/opt/$i"의 현재 값과 일치하는 모든 변수에 대해 명령을 실행한다고합니다 $i.

명령의 세 번째 부분 : done내가 끝났다고 말합니다.


또한, 당신은 사용 -R에 옵션 chmod-R옵션은 순환하고 모든 디렉토리에 적용됩니다 파일.

chmod옵션없이 명령 만 사용하면 명령은 사용자가 지정한 특정 파일 또는 디렉토리에만 적용되며 디렉토리에는 재귀 적으로 적용되지 않습니다.


5
내 의도는 숨겨진 파일을 대상으로했습니다. 내가 실수로 여기에 설명 된 바와 같이 숨겨진 파일을 grepping에 사용되는 구문 가정 stackoverflow.com/questions/10375689/...이 숨겨진 파일에 대한 올바른 구문이 일반적이다. 그렇지 않은 것 같습니다.
Duke Dougal

2
@DukeDougal 당신은 즉시 나오는 첫 번째 대답을 받아들이지 말아야합니다. 일반적으로 수락하기 전에 24 시간을 기다리는 것이 좋습니다. 그 당시에는 더 유용하거나 더 나은 서면 답변이 나올 수도 있습니다. 유용하다고 생각되는 모든 답변을 찬성 할 수 있습니다. StackExchange는 "누가 먼저 응답하는지"가 아니라 "콘텐츠 및 명확성 측면에서 가장 좋은 답변을 제공하는 사람"에 관한 것이 아닙니다.
Giacomo Alzetta

11
편집은 끔찍하다. ls출력 을 구문 분석 하고 응답이 사용되는 동안 매우 느립니다 find.
val은

9
(1) bash를 제외하고 와일드 카드 (glob / pattern)가 재귀되지 **않으며 명시 적으로 활성화해야합니다. IMHO,의 역할에 대해 명확해야합니다  -R. (2) 사람들은로 *시작하는 파일 이름과 일치 할 수 있으므로 일반 사용을 피하는 것이 좋습니다.이 파일 이름 -은 옵션으로 해석됩니다.  그로부터 보호해야하지만 모든 명령이 해당 규칙을 준수하는지 확실하지 않습니다. … (계속)command -- *
Scott

6
(계속) (3)  *,  ./* 심지어  /opt/* 찾을 실패는 ( "파일을 점" .*제외) dotglob옵션이 설정되어 있습니다. 마찬가지로  여호수아 Besneatte 및  ilkkachu는 말을 chown -R /opt하고 chown -R .더 나은. … (계속)
Scott

45

이 경우 쉘 glob .*..(부모 디렉토리) 일치하지만 불행히도 다음과 /같습니다.

steeldriver@t400s:/opt$ ls .*
.:

..:
bin  boot  cdrom  dev  etc  home  initrd.img  initrd.img.old  lib  lib32  lib64
libx32  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  swapfile  sys
tmp  usr  var  vmlinuz  vmlinuz.old

추가 토론은 다음을 참조하십시오.


6
이것은, 정확한, 그리고 훨씬 더 간단한 대답이다
abligh

5

점으로 시작하는 모든 항목.* 과 일치 하기 때문에 문제가 발생했습니다 . 이 표현식에는 경로가 포함되지 않으므로 컨텍스트는 현재 디렉토리입니다. 따라서 현재 디렉토리에 숨겨진 파일이나 폴더가 있으면 일치합니다. 그러나 (당신이 실행하여 볼 수 있습니다으로 해당 폴더에), 당신은 또한 일치 .gitls -a...

그리고 ..물론 부모 디렉토리는 부모 디렉토리이므로 부모 디렉토리의 chmod -R모든 것을 재귀 적으로 대상으로합니다.


/opt/.*도움이되지 않는 절대 경로 /opt/....CWD =와 동일 /opt합니다.
Peter Cordes

@Peter : 예, 맞습니다. 만약 표현식에 경로가 포함되어 있다면, 현재 디렉토리가 아니라 컨텍스트 (시작점)를 제공합니다. OP .는 문맥 으로 사용하려고 했지만 슬래시가 없어서 그런 식으로 작동하지 않았습니다 ...
Alexis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.