Bisakah file dibuat dengan izin yang ditetapkan pada baris perintah?


37

Saat membuat direktori, mkdir -m <mode> <dir>sediakan untuk membuat satu atau lebih direktori dengan mode / izin yang ditetapkan (secara atomis).

Apakah ada yang setara untuk membuat file, di baris perintah?

Sesuatu yang mirip dengan:

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

Apakah menggunakan touchdiikuti oleh satu chmod-satunya pilihan saya di sini?


Sunting: Setelah mencoba saran Teppic untuk digunakan install, saya menjalankannya straceuntuk melihat seberapa dekat dengan atom itu. Jawabannya adalah, tidak terlalu:

$ 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
...

Namun, ini adalah perintah shell tunggal dan yang saya tidak tahu sebelumnya.

Jawaban:


47

Anda bisa menggunakan installperintah (bagian dari GNU coreutils) dengan file dummy, mis

install -b -m 755 /dev/null newfile

The -bpilihan punggung newfilejika sudah ada. Anda dapat menggunakan perintah ini untuk mengatur pemilik juga.


4
+1 untuk memperkenalkan saya keinstall
quornian

Ini adalah perintah kecil yang berguna. Seperti namanya itu benar-benar dirancang untuk menginstal perangkat lunak yang dikompilasi dari kode sumber, untuk menghemat harus menggunakan chmod, chown, dan sebagainya sepanjang waktu.
teppic

Kalau saja butuh stdin! OK, / proc / self / fd / 0 akan lakukan untuk tujuan saya.
proski

Perhatikan bahwa mode 755 adalah izin default dari file yang dibuat install, jadi -m 755tidak diperlukan.
Kusalananda

@ Kusalananda Ini jelas hanya sebuah contoh bagaimana mengatur mode, karena itu pertanyaannya, bukan bagaimana mengatur 755.
teppic

22

touchselalu membuat file jika tidak ada, selalu mengikuti tautan simbolik, dan selalu membuat file tidak dapat dieksekusi. Anda dapat memutuskan bit baca dan tulis melalui umask .

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

Pembuatan file atom "Aman" (khususnya, dengan O_NOFOLLOW) tidak dimungkinkan dengan alat shell tradisional. Anda bisa menggunakannya sysopendalam perl. Jika Anda memiliki mktemputilitas yang terinspirasi BSD , itu membuat file secara atomis dengan O_NOFOLLOW; Anda harus menelepon chmodsetelah itu jika mode standar 600 bukan yang benar.


Saya sedang dalam proses menulis penjelasan yang lebih rinci, tetapi artikel wikipedia mencakup semuanya dengan baik.
jordanm

Jika hanya touchmemiliki pilihan untuk membuat file yang dapat dieksekusi, itu yang saya cari. Kemudian umaskbisa digunakan untuk menyesuaikan detail. Sayangnya tidak ada cara dengan umaskdan touchuntuk membuat executables.
quornian

@quornian Anda tidak dapat membuat file yang tidak kosong secara atomis. Apa gunanya membuat file executable kosong secara atom? Gunakan touchdiikuti oleh chmod +x.
Gilles 'SO- stop being evil'

4
Anda dapat membuat file non-kosong, file yang dapat dieksekusi secara atomis dengan ... ln atau mv. Anda selalu dapat membuat file dengan konten yang tepat dan izin dalam direktori yang dibuat dengan umask 077 dan memindahkannya atau kemudian setelah itu.
Stéphane Chazelas

-1

Saya memiliki skrip bash di direktori home saya yang /home/anthony/touchmod.shberisi:

#!/bin/bash

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

Jadi jika saya harus membuat readme.txtdengan 644 izin saya bisa mengetik:

~/touchmod.sh 644 readme.txt

3
Anda mungkin tidak mengerti pertanyaan itu. Inilah yang ingin dihindari oleh si penanya.
ceving
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.