명령 행에 설정된 권한으로 파일을 작성할 수 있습니까?


37

디렉토리를 작성할 때 mkdir -m <mode> <dir>, 주어진 모드 / 권한이 (원자 적으로) 설정된 하나 이상의 디렉토리를 작성합니다.

명령 행에 파일을 작성하는 것과 동등한 것이 있습니까?

비슷한 내용 :

open("file", O_WRONLY | O_APPEND | O_CREAT, 0777);

사용 toucha로 다음 chmod여기 내 유일한 옵션은?


편집 : 사용하기 위해 teppic의 제안을 시도한 후 원자에 얼마나 가까운 지 확인하기 위해 install실행했습니다 strace. 대답은 그리 많지 않습니다.

$ strace install -m 777 /dev/null newfile
...
open("newfile", O_WRONLY|O_CREAT|O_EXCL, 0666) = 4
fstat(4, {st_mode=S_IFREG|0666, st_size=0, ...}) = 0
...
fchmod(4, 0600)                         = 0
close(4)                                = 0
...
chmod("newfile", 0777)                  = 0
...

여전히 단일 쉘 명령이며 이전에는 몰랐습니다.

답변:


47

다음 install과 같은 더미 파일과 함께 명령 (GNU coreutils의 일부)을 사용할 수 있습니다.

install -b -m 755 /dev/null newfile

-b옵션은 백업 newfile이 이미 존재하는 경우. 이 명령을 사용하여 소유자를 설정할 수도 있습니다.


4
나를 소개해 주신 +1install
quornian

유용한 작은 명령입니다. 그 이름에서 알 수 있듯이 chmod, chown 등을 항상 사용하지 않아도되도록 소스 코드에서 컴파일 된 소프트웨어를 설치하도록 설계되었습니다.
teppic

stdin이 걸린다면! 좋아, / proc / self / fd / 0는 나의 목적을 위해 할 것이다.
proski

모드 755는로 만든 파일의 기본 권한 install이므로 -m 755필요하지 않습니다.
Kusalananda

22

touch파일이 존재하지 않는 경우 항상 파일을 작성하고 기호 링크를 따르며 파일을 항상 실행 불가능하게 만듭니다. umask를 통해 읽기 및 쓰기 비트를 결정할 수 있습니다 .

(umask 077; touch file)  # creates a 600 (rw-------) file
(umask 002; touch file)  # creates a 664 (rw-rw-r--) file

O_NOFOLLOW전통적인 쉘 도구로는 "안전한"원자 파일 작성 (특히 )을 사용할 수 없습니다. sysopen펄에서 사용할 수 있습니다 . BSD에서 영감을 얻은 mktemp유틸리티가 있다면 O_NOFOLLOW; chmod기본 모드 인 600이 맞지 않으면 나중에 전화 해야합니다.


더 자세한 설명을 작성하는 중이었지만 위키 백과 기사는 모든 것을 잘 다루고 있습니다.
jordanm

touch실행 파일을 만들 수있는 옵션 만 있다면 , 이것이 내가 추구하는 것입니다. 그런 다음 umask세부 사항을 조정하는 데 사용할 수 있습니다. 슬프게도 방법에 없습니다 umasktouch실행 파일을 만들 수 있습니다.
quornian

@quornian 어쨌든 비어 있지 않은 파일을 원자 적으로 만들 수 없습니다. 빈 실행 파일을 원자 적으로 만드는 요점은 무엇입니까? 사용은 touch다음에 chmod +x.
Gilles 'SO- 악마 중지'

4
... ln 또는 mv를 사용하여 비어 있지 않은 실행 파일을 원자 적으로 만들 수 있습니다. umask 077로 생성 된 디렉토리에서 올바른 내용과 권한으로 파일을 생성 한 후 이동하거나 나중에 ln 할 수 있습니다.
Stéphane Chazelas

-1

내 홈 디렉토리에 bash 스크립트 /home/anthony/touchmod.sh가 있습니다.

#!/bin/bash

touch "$2"
chmod "$1" "$2"

따라서 readme.txt644 권한 으로 작성해야하는 경우 다음을 입력 할 수 있습니다.

~/touchmod.sh 644 readme.txt

3
당신은 그 질문을 이해하지 못했을 것입니다. 이것이 바로 질문자가 피하려고하는 것입니다.
9
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.