Cara mengubah izin dan pemilik grup file sekaligus

9

Untuk mengubah izin file, saya tahu saya bisa menggunakan chmod. Untuk mengganti pemilik grup, saya bisa menggunakan chgrp. Namun, jika saya ingin mengubah izin dan pemilik sekaligus, apakah ada perintah yang dapat saya gunakan di Linux?

Misalnya, ada file dengan izin dan pemilik ini:

-rw-r--r--+  1 raymondtau  staff    0 May  8 16:38 WantToChangeThisFile

Dan sekarang saya ingin mengubahnya menjadi:

---x-w--wx+  1 raymondtau  admin    0 May  8 16:38 WantToChangeThisFile

Saya tahu saya bisa menggunakan perintah ini:, chmod 123 WantToChangeThisFile && chgrp admin WantToChangeThisFiletetapi ingin tahu apakah ada cara yang rapi untuk melakukan itu.

Raymond Tau
sumber

Jawaban:

9

Ada konsep yang dikenal sebagai "UNIX-way". Setiap alat harus melakukan satu fungsi sederhana. Jika seseorang membutuhkan fungsi yang lebih kompleks, ia dapat menggabungkan alat yang lebih kecil.

Yang sebaliknya adalah desain monolitik ketika semua fungsi dikumpulkan dalam satu alat besar.

Jika Anda ingin melakukan sesuatu yang kompleks - cukup tulis skrip, gunakan alat sederhana.

Kondybas
sumber
Berikut ini adalah skrip yang saya tulis yang menggabungkan alat ini menjadi satu fungsi shell ch,.
Keith
2
tidak mungkin itu jawaban, apa yang dia tanyakan dapat dicapai dengan beberapa alat yang sudah ada seperti rsync dan meskipun linux cenderung lebih suka satu alat / satu fungsi itu berarti alat melakukan banyak hal tidak ada
Kiwy
@ Kiwy Beberapa alat linux tidak sesuai dengan prinsip unix-way dan menggabungkan fungsi yang berbeda dari sifat yang berbeda. Seperti systemd misalnya.
Kondybas
1
@Kondybas "cenderung" adalah bagian penting dari kalimat. pengecualian aturan memang ada. Tetap saja jawaban Anda kepada saya adalah jawaban yang sangat buruk.
Kiwy
9

Jika Anda juga ingin menyalin file di suatu tempat (seperti tujuan akhirnya), Anda mungkin ingin melihat installperintahnya:

install -m 0777 -o root $sourcefile $destinationfile

Konrad Gajewski
sumber
1

Menggunakan alat yang tepat untuk pekerjaan di * nix itu penting, tetapi memang mengulangi jalan yang sama di setiap perintah dirantai tampak konyol. Sebagai gantinya, Anda harus benar-benar menggunakan variabel Bash, dan dalam skrip yang lebih kecil, terutama memanfaatkan $_.

Perintah Anda akan menjadi:

chmod 123 WantToChangeThisFile && chgrp admin $_

ALT +. melakukan hal serupa dengan menarik argumen yang terakhir digunakan di shell Anda saat ini.

Zebouski
sumber
0

Rsync berguna dalam hal ini:

Dari Fine Manual (TM)

--chown = USER: GROUP username / groupname mapping sederhana

--chmod = CHMOD memengaruhi izin file dan / atau direktori

Jadi, misalnya, Anda ingin chmod / mnt / lala / lala4000 / "ugo = rX" dan chown "foo.bar"

rsync --chmod = ugo = rX --chown = foo: bar -rvtpolgh / mnt / lala / lala4000 / / mnt / lala / lala4000 /

Ini akan secara rekursif dikenali dan chmod dir.

purpaboo
sumber
0

Anda dapat mencapai tujuan dengan rsyncperintah yang panjang

rsync -a --chown=root:root --chmod=F755 filename filename
vern
sumber
saya tidak mengerti
Pierre.Vriens
Ini tidak aman: ini akan memengaruhi semua file yang cocok di direktori dan subdirektori yang ditentukan, bukan hanya satu file yang diarahkan.
telcoM
-1

Anda bisa lakukan chown username:groupname file ...untuk mengubah keduanya secara bersamaan. Itu mengubah dua bidang dalam struktur (inode) yang sama sehingga menggabungkannya menghemat dua panggilan sistem (satu untuk membaca nilai saat ini dan satu untuk mengatur vaules yang dimodifikasi).

Wurtel
sumber
chownhanya mengubah pemilik. Bagaimana ini mengubah izin pada saat yang sama seperti yang diminta OP? Catatan contoh OP termasuk chmodjuga.
jscott
Ah, saya pikir dia ingin mengubah 3 hal, ketika dia menulis Untuk mengubah pemilik-grup saya pikir dia maksudkan grup dan pemilik.
wurtel
-3
#!/bin/bash

# Setting the Variables for execution
LOGDIR=$HOME
CURRENTTIME=$(date +"%Y%m%d%s%H%M%S")
LOGFILE=${LOGDIR}/chgpermission_${CURRENTTIME}.log
MASTERFILE=$1
INDEX=0

# Checking the number of Parameters passed
if [ "$#" -ne 1 ]; then
    echo "Master file name is mandatory parameter" > ${LOGFILE}
    exit 1
fi

# Loading the Master file into an Array 
echo "Loading the Master file ${MASTERFILE} into an array" >> ${LOGFILE}
while read line
do
#echo $line  
MASTERARRAY[$INDEX]=$HOME/$line 
INDEX=$(expr $INDEX + 1) 
done < ${MASTERFILE}

echo "Number of parameters in an master array ${MASTERARRAY[@]}" >> ${LOGFILE}

# Changing the permission of the file 
echo "Changing the permission of the file in master file ${MASTERFILE}" >> ${LOGFILE} 
index=0
for index in "${MASTERARRAY[@]}"
do
    if [ -f "$index" ] 
    then
       echo "$index file exist"
       echo  "$index file exist" >> ${LOGFILE}
       chmod 755 "$index" 
       chown workstation "$index"
       chgrp workstation "$index" 
    else
      echo "$index file does not extst"
      echo "$index file does not exist" >> ${LOGFILE}  
    fi 
done 
shirish umredkar
sumber
2
Anda setidaknya bisa memberikan penjelasan tentang cara kerjanya dan bagaimana itu seharusnya digunakan (parameter berapa banyak mereka ...)
Kiwy
2
Tolong jangan hanya menempelkan beberapa kode sebagai jawaban.
Konrad Gajewski
Mengomentari kemungkinan tidak produktif; ini adalah satu-satunya hal yang pernah diposting pengguna ini, dan mereka bahkan belum masuk sejak saat itu.
G-Man Mengatakan 'Reinstate Monica'