"일반" 권한으로 임시 파일을 만드는 방법은 무엇입니까?

"일반" 권한으로 임시 파일을 만드는 방법은 무엇입니까?

빌드 스크립트에서 고유하게 생성된 이름으로 임시 파일을 생성한 다음 여기에 일부 데이터를 쓴 다음 파일 이름을 최종 이름으로 바꾸려고 합니다. ) 원자).

하지만 mktemp다음을 사용하면 새 파일에 매우 엄격한 권한이 부여됩니다.

파일은 u+rw로 생성되고 디렉터리는 umask 제한을 뺀 u+rwx로 생성됩니다.

...파일 이름이 바뀌어도 이러한 권한은 유지됩니다. 그러나 나는 결과 파일이 "일반" 권한을 갖기를 원합니다. 즉, touch쉘 리디렉션으로 생성된 파일과 동일한 권한을 가져야 합니다.

이를 달성하기 위해 권장되는 방법은 무엇입니까? (공통) 대안이 있습니까 ? 아니면 파일 권한을 일반 권한 mktemp으로 변경하는 간단하고 안정적인 방법이 있습니까 ?umask

답변1

chmod =rw "$file"임시 파일이 생성되면 사용할 수 있습니다. 이것GNU 매뉴얼 페이지설명하다:

모노그램은 ugoa파일에 대한 사용자의 액세스 권한이 변경되는 것을 제어합니다: [...] 이들 중 하나가 제공되지 않으면 효과는 (a)가 제공되었지만 umask에 설정된 비트는 제공되지 않습니다. 인공의.

따라서 umask를 통해 축소된 읽기 및 쓰기 권한을 부여하는 것은 에 권한 인수를 전달하는 것과 =rw유사합니다 . 이는 예를 들어 또는 수행하는 작업입니다.0666open()touch filenameecho > filename

그건POSIX 기능이므로 다른 구현에서도 이를 지원해야 합니다.

답변2

이 링크를 사용하여 원하는 권한을 얻으세요http://permissions-calculator.org/

수동

새 파일을 생성한 다음 해당 권한을 변경하는 스크립트 파일을 생성합니다.

#!/bin/bash

Filename=$1
Perms=$2

#Create a temp file
touch $Filename

#Change the file's permissions (Use your own desired permissions)
chmod $Perms $Filename

스크립트를 실행 가능하게 만든 후 chmod +x myscript.sh다음과 같이 스크립트 파일을 실행하십시오../myscript.sh tempfile 600

Umask 사용(권장하지 않음)

umask 600예를 들어 기본 파일 권한을 일시적으로 변경할 수 있습니다.

기본 파일 권한을 영구적으로 변경하려면 사용자의 루트 디렉터리에서 .bashrc 파일을 편집합니다.

nano ~/.bashrc

umask 600파일 맨 아래에 추가되었습니다 . 물론 필요한 권한과 일치하는지 확인하세요. 올바른 사용자를 편집했는지도 확인하십시오.

이것이 빌드 스크립트용이라면 umask에 의존하는 대신 수동 접근 방식을 사용합니다. 특히 빌드 스크립트가 다른 시스템에서 사용되는 경우.

관련 정보