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