コマンドラインで設定された権限でファイルを作成できますか?


37

ディレクトリを作成するときにmkdir -m <mode> <dir>、指定されたモード/アクセス許可セット(アトミック)で1つ以上のディレクトリを作成します。

コマンドラインでファイルを作成するための同等のものはありますか?

次のようなもの:

open("file", O_WRONLY | O_APPEND | O_CREAT, 0777);

ここで使用touchしているのはchmod私の唯一のオプションですか?


編集: teppicの使用の提案を試した後install、それを実行してstrace、アトミックにどれほど近いかを確認しました。答えは、そうではありません:

$ strace install -m 777 /dev/null newfile
...
open("newfile", O_WRONLY|O_CREAT|O_EXCL, 0666) = 4
fstat(4, {st_mode=S_IFREG|0666, st_size=0, ...}) = 0
...
fchmod(4, 0600)                         = 0
close(4)                                = 0
...
chmod("newfile", 0777)                  = 0
...

それでも、これは単一のシェルコマンドであり、以前は知りませんでした。

回答:


47

installコマンド(GNU coreutilsの一部)をダミーファイルで使用できます。たとえば、

install -b -m 755 /dev/null newfile

-bオプションでは、バックアップnewfileがすでに存在する場合。このコマンドを使用して、所有者も設定できます。


4
紹介してくれた+1install
quornian

便利な小さなコマンドです。その名前が示すように、ソースコードからコンパイルされたソフトウェアをインストールするために設計されており、常にchmodやchownなどを使用する必要がありません。
-teppic

標準入力が必要な場合にのみ!OK、/ proc / self / fd / 0は私の目的のために行います。
-proski

モード755はで作成されたファイルのデフォルトの許可であるinstallため、-m 755必要ありません。
クサラナンダ

それが問題ではなく、755を設定する方法だったので、モードを設定する方法の@Kusalanandaそれの明らかに単なる例
teppic

22

touch存在しない場合は常にファイルを作成し、常にシンボリックリンクをたどり、常にファイルを実行不能にします。読み取りビットと書き込みビットはumaskで決定できます。

(umask 077; touch file)  # creates a 600 (rw-------) file
(umask 002; touch file)  # creates a 664 (rw-rw-r--) file

(特に、O_NOFOLLOW)を使用した「安全な」アトミックファイルの作成は、従来のシェルツールでは不可能です。sysopenperlで使用できます。BSDにヒントを得たmktempユーティリティを使用している場合、O_NOFOLLOW;でアトミックにファイルを作成します。chmodデフォルトモードの600が適切でない場合は、後で呼び出す必要があります。


私はより詳細な説明を書いている最中でしたが、ウィキペディアの記事はすべてをうまくカバーしています。
jordanm

touch実行可能ファイルを作成するオプションしかなかった場合、それは本当に私が望んでいることです。次にumask、詳細を調整するために使用できます。悲しいことに、実行可能ファイルを使用umasktouchて作成する方法はありません。
Quornian

@quornianとにかく空でないファイルをアトミックに作成することはできません。空の実行可能ファイルをアトミックに作成する意味は何ですか?にtouch続けて使用しchmod +xます。
ジル 'SO-悪であるのをやめる

4
lnまたはmvを使用して、空でない実行可能ファイルをアトミックに作成できます。umask 077で作成されたディレクトリに適切なコンテンツと権限を持つファイルをいつでも作成し、後で移動またはlnできます。
ステファンシャゼラス

-1

ホームディレクトリに次の内容/home/anthony/touchmod.shを含むbashスクリプトがあります。

#!/bin/bash

touch "$2"
chmod "$1" "$2"

したがってreadme.txt、644のアクセス許可で作成する必要がある場合は、次のように入力できます。

~/touchmod.sh 644 readme.txt

3
あなたはおそらく質問を理解していなかったでしょう。これは、質問者が避けようとするものです。
ceving
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.