디렉토리를 생성하고 단일 명령으로 권한을 부여하는 방법


107

Linux에서 단일 명령으로 디렉토리를 만들고 권한을 부여하는 방법은 무엇입니까?

전체 권한을 가진 많은 폴더를 만들어야합니다 777.

명령어

mkdir path/foldername
chmod 777 path/foldername 

두 가지 명령을 만들고 권한을 부여하는 것을 좋아하지 않습니다. 단일 명령으로이 작업을 수행 할 수 있습니까?


1
mkdir temp; chmod 777 temp한 줄입니다. 'temp'를 변수로 만들고 bash 명령으로 저장할 수 있습니다. 이것이 당신이하려는 것입니까?
styfle 2011

1
안녕하세요 @ white-rose, 최신 답변을 참조하십시오. 수락 된 답변이어야합니다. 보너스, 그것은 하나의 총알에 mkdir, chmod 및 chown을 결합합니다!
Costin Gușă 2014-06-03

답변:


205

mkdir 의 man 페이지 에 따르면 ...

mkdir -m 777 dirname

1
-m 옵션에 대해 알려줄 수 있습니까?
poorani apr

@Whiterose -m 옵션은 모드 용입니다. 새로 생성 된 디렉토리에 대한 권한 비트를 Mode 변수에 지정된 값으로 설정합니다. Mode 변수는 기호 또는 숫자 형식으로 chmod 명령에 대한 Mode 매개 변수와 동일한 값을 사용합니다.
TMKasun 2014-06-09

14
모드가 입력 한 경로의 마지막 디렉토리에만 적용되기 때문에 mkdir -p -m이 손상됩니다. 예 : mkdir -p -m 707 one / two / three. 세 개의 디렉터리가 모두 새로 생성 된 경우에도 마지막 디렉터리 만 요청 된 권한을 가지며 나머지 디렉터리는 기본값입니다. install -d -m도 같은 방식으로 손상됩니다.
표시 이름

-p위에서 이미 언급 한 @DisplayName 관련 문제 외에도 다른 문제 가 있습니다. 는 -m디렉토리가 실제로 생성 된 경우에만 적용됩니다. 이미 존재하는 경우 모드가 변경되지 않습니다. 상황에 따라 좋을 수도 있고 나쁠 수도 있습니다.
아담 바두라

1
mkdir -m777 디렉토리
Hugo Deiró

19
install -d -m 0777 /your/dir

당신이 원하는 것을 줄 것입니다. 모든 사용자는 해당 디렉토리에 추가 및 삭제 파일을 쓸 수있는 권한이 있습니다.


1
보너스로 -g 및 / 또는 -o를 추가 할 수 있으며 mkdir, chmod 및 chown을 한 번에 사용할 수 있습니다!
Costin Gușă 2014-06-03

4
고장났습니다. 설치 -d -m 070 1/2/3. 경로에있는 세 개의 디렉터리가 모두 새로 생성 된 경우에도 마지막 디렉터리에만 요청 된 권한이 설정됩니다. mkdir -p -m은 동일한 방식으로 중단됩니다.
표시 이름

@DisplayName : 그럼에도 불구하고에 대한 올바른 권한을 설정하지만 three기본 권한은 경로에 충분합니다.
Markus W Mahlberg

16

디렉토리가 이미있는 경우 :

mkdir -m 777 /path/to/your/dir

디렉토리가 존재하지 않고 상위 디렉토리를 작성하려는 경우 :

mkdir -m 777 -p /parent/dirs/to/create/your/dir

이것은 최종 하위 디렉토리에 777 권한 만 부여합니다. 이 작업을 수행하고 모든 상위 디렉토리에도 777 권한을 부여 할 수 있습니까?
Levi Johansen 19

1
: 이것에 대한 대답은 여기에 나는 이것에 대한 대답이 없어하지만 난 생각 stackoverflow.com/questions/3740152/...
페드로 트루 히요

이 명령은 "디렉터리를 만들고 단일 명령으로 권한을 부여하는 방법"문제를 해결하기위한 것입니다. 나는 당신의 질문에 대한 해결책은 다음과 같을 것으로 예상 :find /your/dirs -type d -exec chmod 755 {} \;
페드로 트루 히요

10

IMO, install이러한 상황 에서는 명령 을 사용하는 것이 좋습니다 . systemd-journald재부팅 후에도 지속 되도록 노력했습니다 .

install -d  -g systemd-journal -m 2755 -v /var/log/journal

7

다음과 같이 간단한 쉘 스크립트를 작성할 수 있습니다.

#!/bin/bash
mkdir "$1"
chmod 777 "$1"

일단 저장되고 실행 가능 플래그가 활성화되면 mkdir 및 chmod 대신 실행할 수 있습니다.

./scriptname path/foldername

그러나 alex의 대답 은 세 개가 아닌 하나의 프로세스를 생성하기 때문에 훨씬 좋습니다. -m옵션 에 대해 몰랐습니다 .


고마워 delan .. 나도 쉘 스크립트에 그 명령을 썼다 .. 그러나 나는 단일 명령으로하고 싶다.
poorani

7

위의 답변을 확장하고 개선하기 위해 :

먼저 GNU Coreutils 8.26에 대한 mkdir 맨 페이지를 확인합니다. '-m'및 '-p'옵션에 대한 정보를 제공합니다 (각각 --mode = MODE 및 --parents로 제공 될 수도 있음). ) :

... set [s] 파일 모드 (chmod에서와 같이), a = rwx가 아님-umask

... 존재하는 경우 오류 없음, 필요에 따라 상위 디렉토리 만들기

제 의견으로는 그 진술이 모호하고 불분명합니다. 그러나 기본적으로 "chmod 숫자 표기법"(8 진수)으로 지정된 권한으로 디렉토리를 만들거나 "다른 방법"으로 이동하여 umask를 사용할 수 있다고 말합니다.

참고 : umask 값이 실제로는 그대로 들리기 때문에 "다른 방법"이라고 말합니다. 즉 , chmod의 8 진수 표기법처럼 권한을 "부여"하는 대신에 권한을 숨기거나 제거 하는 마스크 입니다.

쉘 내장 명령 umask을 실행 하여 3 자리 umask가 무엇인지 확인할 수 있습니다. 저에게는 022. 즉 mkdir yodirectory, 지정된 폴더 (예 : mahome)에서 실행 하면 다음 stat과 유사한 출력이 표시됩니다.

               755                   richard:richard         /mahome/yodirectory
 #          permissions                 user:group      what I just made (yodirectory),
 # (owner,group,others--in that order)                 where I made it (i.e. in mahome)
 # 

이제 이러한 8 진 권한에 대해 조금 더 추가하겠습니다. 디렉토리를 만들 때, "your system"은 기본 디렉토리 perms '[ 디렉토리에 적용 (값은 777이어야 함)]를 취하고 yo (u) mask를 쳐서 해당 perms의 일부를 효과적으로 숨 깁니다. 내 umask는 022입니다. 이제 777에서 022를 "빼면"(기술적으로 빼는 것이 항상 정확하지는 않습니다. 실제로는 파마를 끄거나 마스킹 하는 것입니다.) 명시된대로 755를 얻습니다. ) 이전.

우리의 경우에는 stickybits, setuids 또는 setgids를 원하지 않았거나 언급하지 않았기 때문에 3 자리 8 진수 앞의 '0'을 생략 할 수 있습니다 (따라서 4 자리 일 필요가 없습니다). (당신은 그것을 조사하고 싶을 수도 있습니다, btw, 그들은 당신이 777을 가고 있기 때문에 유용 할 것입니다). 즉, 0777은 777을 의미합니다 (또는 이와 동일합니다) (그러나 777은 반드시 0777과 동일하지는 않습니다. 777은 setuids, setgids 등이 아닌 권한 만 지정하기 때문입니다.)

이제 이것을 더 넓은 의미로 질문에 적용하기 위해 (이미) 몇 가지 옵션이 있습니다. 위의 모든 답변이 작동합니다 (적어도 내 coreutils에 따르면). 그러나 한 번에 777 권한으로 하위 디렉터리 (중첩 된 디렉터리) 를 만들려는 경우 위의 솔루션에 문제가 발생할 수 있습니다 (또는 그럴 가능성이 높습니다) . 특히 umask가 022 인 mahome에서 다음을 수행하는 경우 :

mkdir -m 777 -p yodirectory/yostuff/mastuffinyostuff
# OR (you can swap 777 for 0777 if you so desire, outcome will be the same)
install -d -m 777 -p yodirectory/yostuff/mastuffinyostuff

나는 파마 얻을 것이다 755모두를 yodirectory하고 yostuff에서만, 777대한 파마 mastuffinyostuff. 이 나타납니다 그래서 umask의가에 때렸다 모든 것입니다 yodirectoryyostuff이 우리가 서브 쉘을 사용할 수 있습니다 해결하기 위해 ... :

( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )

그리고 그게 다야. yostuff, mastuffinyostuff 및 yodirectory에 대한 777 perms.


7

다음 명령을 사용하여 디렉토리를 생성하고 동시에 권한을 부여 할 수 있습니다.

mkdir -m777 path/foldername 

1
-m과 777 사이에 공백이 없습니다
오메르 Gafar

1

하지 마십시오 : mkdir -m 777 -p a/b/c 권한 만 설정하므로777 마지막 디렉토리에 대한 c; a 및 b는 umask의 기본 권한으로 생성됩니다.

권한이있는 새 디렉토리를 만드는 대신 umask를 재정의하는 서브 쉘에서 777실행 mkdir -p합니다.

(umask u=rwx,g=rwx,o=rwx && mkdir -p a/b/c)

a, b 및 c가 이미 존재하는 경우 권한이 변경되지 않습니다.


예, 4 자리 umask를 전달하면 선행 숫자는 항상 0이어야합니다 (생략 할 수는 있지만). 첫 번째 8 진수가 setuid, setgid 및 sticky 비트를 설정하는 chmod와의 대칭 일 수 있지만, 그렇다면 umask가이를 제한 할 수 없기 때문에 다소 의미가 없습니다.
John Mellor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.