
빌드 스크립트에서 고유하게 생성된 이름이 있는 임시 파일을 만든 다음 여기에 일부 데이터를 쓴 다음 해당 파일의 이름을 최종 이름으로 바꾸려고 합니다. ) 원자).
하지만 을 사용하면 mktemp
새 파일은 매우 제한적인 권한을 갖게 됩니다.
파일은 umask 제한을 제외하고 u+rw 및 디렉토리 u+rwx로 생성됩니다.
... 파일 이름을 바꾸면 이러한 권한이 유지됩니다. 그러나 나는 결과 파일이 "일반" 권한을 갖기를 원합니다. 즉, touch
쉘 리디렉션에 의해 생성된 파일과 동일한 권한이 있어야 합니다.
이를 달성하기 위해 권장되는 방법은 무엇입니까? 에 대한 (공통) 대안이 있습니까 mktemp
? 아니면 umask
나중에 파일 권한을 일반 권한으로 변경하는 간단하고 안정적인 방법이 있습니까 ?
답변1
chmod =rw "$file"
임시파일 생성 후 사용하시면 됩니다 . 그만큼GNU 매뉴얼 페이지말한다:
파일에 대한 사용자의 액세스 권한을 제어하는 문자 조합
ugoa
: [...] 이들 중 어느 것도 제공되지 않으면 효과는 (a)가 제공되지만 umask에 설정된 비트는 제공되지 않습니다. 체하는.
따라서 에 권한 인수를 =rw
전달하는 것과 유사하게 umask에 의해 감소된 읽기/쓰기 권한을 제공합니다. 이는 예를 들어 , 또는 가 수행하는 작업입니다.0666
open()
touch filename
echo > 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에 의존하는 대신 수동 방법을 사용하겠습니다. 특히 빌드 스크립트가 다른 시스템에서 사용되는 경우.