วิธีการเปลี่ยนการอนุญาตและกลุ่มเจ้าของไฟล์ในเวลาเดียวกัน


9

สำหรับการเปลี่ยนการอนุญาตไฟล์ฉันรู้ว่าฉันสามารถใช้ chmod ได้ สำหรับการเปลี่ยนเจ้าของกลุ่มฉันสามารถใช้ chgrp อย่างไรก็ตามหากฉันต้องการเปลี่ยนทั้งสิทธิ์และเจ้าของพร้อมกันคำสั่งใด ๆ ที่ฉันสามารถใช้บน Linux?

ตัวอย่างเช่นมีไฟล์ที่มีสิทธิ์และเจ้าของ:

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

และตอนนี้ฉันต้องการเปลี่ยนเป็น:

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

ฉันรู้ว่าฉันสามารถใช้คำสั่งนี้: chmod 123 WantToChangeThisFile && chgrp admin WantToChangeThisFileแต่ต้องการทราบว่ามีวิธีที่เป็นระเบียบเรียบร้อยหรือไม่ในการทำเช่นนั้น

คำตอบ:


9

มีแนวคิดที่เรียกว่า "UNIX-way" เครื่องมือแต่ละอันควรทำหน้าที่อย่างง่ายอย่างหนึ่ง หากต้องการฟังก์ชั่นที่ซับซ้อนมากขึ้นเขาสามารถรวมเครื่องมือขนาดเล็กลงได้

สิ่งที่ตรงกันข้ามคือการออกแบบเสาหินเมื่อมีการรวมฟังก์ชั่นทั้งหมดไว้ในเครื่องมืออันเดียว

หากคุณต้องการทำสิ่งที่ซับซ้อน - เพียงแค่เขียนสคริปต์เรียกเครื่องมือง่ายๆ


นี่คือสคริปต์ที่ฉันเขียนซึ่งรวมเครื่องมือเหล่านี้ไว้ในฟังก์ชั่นเชลล์เดียว, ch.
Keith

2
ไม่มีทางเป็นคำตอบสิ่งที่เขาถามสามารถทำได้ด้วยเครื่องมือหลายอย่างที่มีอยู่แล้วเช่น rsync และแม้ว่า linux มักจะชอบเครื่องมือเดียว / ฟังก์ชั่นเดียวมันหมายถึงเครื่องมือที่ทำสิ่งต่าง ๆ ไม่มีอยู่จริง
Kiwy

@ Kiwy เครื่องมือ linux บางตัวไม่สอดคล้องกับหลักการ unix-way และรวมฟังก์ชั่นต่าง ๆ ของธรรมชาติที่แตกต่างกัน เช่น systemd เช่น
Kondybas

1
@Kondybas "มักจะ" เป็นส่วนสำคัญของประโยค มีข้อยกเว้นสำหรับกฎอยู่ คำตอบของคุณสำหรับฉันยังคงเป็นสิ่งที่แย่จริงๆ
กีวี

9

หากสิ่งที่คุณต้องการคือการคัดลอกไฟล์บางแห่ง (เช่นปลายทางสุดท้าย) คุณอาจต้องการดูinstallคำสั่ง:

install -m 0777 -o root $sourcefile $destinationfile


1

การใช้เครื่องมือที่เหมาะสมสำหรับงานใน * ระวังเป็นสิ่งสำคัญ แต่แน่นอนการทำซ้ำเส้นทางเดียวกันในแต่ละคำสั่งที่ถูกล่ามโซ่ดูโง่ แต่คุณควรใช้ตัวแปร Bash แทนและในสคริปต์ที่มีขนาดเล็กลงโดยเฉพาะให้ใช้งานเป็น$_พิเศษ

คำสั่งของคุณจะกลายเป็น:

chmod 123 WantToChangeThisFile && chgrp admin $_

ALT + ทำสิ่งที่คล้ายกันในการดึงอาร์กิวเมนต์ที่ใช้ล่าสุดในเชลล์ปัจจุบันของคุณ


0

Rsync มีประโยชน์ในกรณีนี้:

จาก Fine Manual (TM)

--chown = ผู้ใช้: การแมปชื่อกลุ่ม / ชื่อกลุ่มแบบง่าย

--chmod = CHMOD ส่งผลกระทบต่อไฟล์และ / หรือการอนุญาตของไดเรกทอรี

ตัวอย่างเช่นคุณต้องการ chmod / mnt / lala / lala4000 / "ugo = rX" และ chown "foo.bar"

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

นี้จะ chown ซ้ำและ chmod dir


0

คุณสามารถบรรลุเป้าหมายดังกล่าวด้วยrsyncคำสั่ง ยาว

rsync -a --chown=root:root --chmod=F755 filename filename

ฉันไม่เข้าใจ
Pierre.Vriens

สิ่งนี้ไม่ปลอดภัย: จะมีผลกับไฟล์ที่ตรงกันทั้งหมดในไดเรกทอรีและไดเรกทอรีย่อยที่ระบุไม่ใช่เฉพาะไฟล์เดียวที่ชี้ไป
telcoM

-1

คุณสามารถทำได้chown username:groupname file ...เพื่อเปลี่ยนทั้งสองอย่างพร้อมกัน มันกำลังเปลี่ยนสองฟิลด์ในโครงสร้างเดียวกัน (inode) ดังนั้นการรวมมันจะช่วยประหยัดการเรียกระบบสองครั้ง (หนึ่งสำหรับการอ่านค่าปัจจุบันและอีกหนึ่งสำหรับการตั้งค่า vaules แก้ไข)


chownเปลี่ยนเจ้าของเท่านั้น สิ่งนี้จะเปลี่ยนแปลงการอนุญาตในเวลาเดียวกันกับ OP ที่ร้องขอได้อย่างไร หมายเหตุตัวอย่างของ OP รวมถึงchmodเช่นกัน
jscott

อ๊ะฉันคิดว่าเขาต้องการเปลี่ยนแปลง 3 สิ่งในขณะที่เขาเขียนสำหรับการเปลี่ยนเจ้าของกลุ่มฉันคิดว่าเขาหมายถึงกลุ่มและเจ้าของ
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 

2
อย่างน้อยคุณสามารถให้คำอธิบายว่ามันทำงานอย่างไรและมันควรจะใช้อย่างไร (พารามิเตอร์ว่ามันคืออะไร ... )
Kiwy

2
โปรดอย่าวางรหัสบางส่วนเป็นคำตอบ
Konrad Gajewski

การแสดงความคิดเห็นไม่น่าจะมีประสิทธิผล นี่เป็นสิ่งเดียวที่ผู้ใช้คนนี้โพสต์และพวกเขายังไม่ได้เข้าสู่ระบบตั้งแต่นั้นมา
G-Man กล่าวว่า 'Reinstate Monica'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.