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

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

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

하지만 을 사용하면 mktemp새 파일은 매우 제한적인 권한을 갖게 됩니다.

파일은 umask 제한을 제외하고 u+rw 및 디렉토리 u+rwx로 생성됩니다.

... 파일 이름을 바꾸면 이러한 권한이 유지됩니다. 그러나 나는 결과 파일이 "일반" 권한을 갖기를 원합니다. 즉, touch쉘 리디렉션에 의해 생성된 파일과 동일한 권한이 있어야 합니다.

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

답변1

chmod =rw "$file"임시파일 생성 후 사용하시면 됩니다 . 그만큼GNU 매뉴얼 페이지말한다:

파일에 대한 사용자의 액세스 권한을 제어하는 ​​문자 조합 ugoa: [...] 이들 중 어느 것도 제공되지 않으면 효과는 (a)가 제공되지만 umask에 설정된 비트는 제공되지 않습니다. 체하는.

따라서 에 권한 인수를 =rw전달하는 것과 유사하게 umask에 의해 감소된 읽기/쓰기 권한을 제공합니다. 이는 예를 들어 , 또는 가 수행하는 작업입니다.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에 의존하는 대신 수동 방법을 사용하겠습니다. 특히 빌드 스크립트가 다른 시스템에서 사용되는 경우.

관련 정보