umask
不是文件的進程屬性 - 這是UNIX體系結構的一部分,與Bash或任何其他shell程序無關。
真正的問題是您正在使用的程序不允許在創建時更改權限。例如,在C中,mkdir
具有第二參數模式。
雖然您不需要編寫C語言,但Python和Perl允許您使用低級接口。權限將由進程umask
修改,因此,如果您不想進行任何修改,請將unmask
設置爲零。
/home/user1> umask 000
/home/user1> python -c 'import os;os.mkdir("mydir",0701)'
/home/user1> ls -ld mydir
drwx-----x 2 user1 QAPLADV 4096 Sep 16 10:28 mydir
/home/user1> python -c 'import os;os.open("myfile",os.O_CREAT,0604)'
/home/user1> ls -l myfile
-rw----r-- 1 user1 QAPLADV 0 Sep 16 10:32 myfile
不要忘了,umask
仍是000在這一點上,你可能想將其設置回其以前的值,如果你在做任何其他工作在同一個進程。
這裏是一個Perl的版本,如果你喜歡:
perl -e "mkdir mydir,0701"
perl -MFcntl -e 'sysopen(my $h,"myfile",O_EXCL|O_CREAT,0604)'
當然,如果你有大量的文件,你就可能要經常跑這一點,那麼你會好得多寫Perl或Python程序來完成這項工作 - 爲每個文件調用perl或python是低效的。
你確定要在目錄(其他)上使用-x嗎?這意味着其他人只有在知道文件名時才能讀取目錄中的文件。如果你可以接受目錄上的rwx --- r-x,umask 072將會適用。 –