Αποστολέας Θέμα: Script για εκτέλεση εντολών για όλους τους χρήστες  (Αναγνώστηκε 1535 φορές)

alkisg

  • Τεχνικός / καθαρίστρια
  • *****
  • Μηνύματα: 4863
    • alkisg@im.sch.gr
    • Ο Διερμηνευτής της ΓΛΩΣΣΑΣ
Το παρακάτω script μπορεί να χρησιμοποιηθεί για την εκτέλεση εντολών για όλους τους χρήστες.

Για παράδειγμα, αν το καλέσουμε με
Κώδικας: Text
  1. forallusers 'chown -R $USER_NAME:$USER_GROUP $USER_HOME'
  2.  

τότε θα παράγει ένα αρχείο /tmp/forallusers_generated_script με περιεχόμενα παρόμοια με τα παρακάτω:
Κώδικας: [Επιλογή]
chown -R alkisg:alkisg /home/alkisg
chown -R artemis:students /home/students/artemis
chown -R mirto:students /home/students/mirto
chown -R angelos:students /home/students/angelos

Στη συνέχεια, αν δούμε ότι το αποτέλεσμα μας ικανοποιεί, τρέχουμε το παραγόμενο script με
Κώδικας: Text
  1. /tmp/forallusers_generated_script
  2.  
Φυσικά μπορούμε και να το επεξεργαστούμε πριν το τρέξουμε.

Υποθέτω ότι είναι αρκετά ασφαλές αφού δεν εκτελεί τίποτα. Προτάσεις για βελτίωση καλοδεχούμενες!
Κώδικας: Text
  1. #!/bin/bash
  2. # copyright 2008 Alkis Georgopoulos <http://alkisg.mysch.gr/>
  3. # distributed under the terms of the GNU General Public License version 3
  4. # or any later version.
  5.  
  6. SCRIPT_NAME=`basename $0`
  7. COMMAND_LINE=$@
  8.  
  9. if [ -z "$COMMAND_LINE" ]; then
  10.         cat<<-USAGE
  11. $SCRIPT_NAME generates scripts that execute a specified command for all users.
  12. It doesn't execute the resultant script, so it shouldn't cause any trouble.
  13. It's your responsibility to check and execute the generated script.
  14. Example usage:
  15.   $0 'chown -R \$USER_NAME:\$USER_GROUP \$USER_HOME'
  16. Valid parameters:
  17.   USER_NAME, USER_ID, USER_GROUP, USER_GID, USER_HOME
  18. USAGE
  19.         exit
  20. fi
  21.  
  22. GENERATED_SCRIPT="/tmp/forallusers_generated_script"
  23. cat > "$GENERATED_SCRIPT" <<-EOF
  24. #!/bin/bash
  25. # Generated by the forallusers script - http://alkisg.mysch.gr/
  26.  
  27. EOF
  28.  
  29. getent passwd | while read line
  30. do
  31.         USER_NAME=`echo "$line"|awk -F ':' '{ print $1 }'`
  32.         USER_ID=`id -u "$USER_NAME"`
  33.         USER_GROUP=`id -gn "$USER_NAME"`
  34.         USER_GID=`id -g "$USER_NAME"`
  35.         USER_HOME=`echo "$line"|awk -F ':' '{ print $6 }'`
  36.  
  37. # TODO: don't hardcode minimum and maximum user IDs
  38.         if (( $USER_ID >= 1000 && $USER_ID <= 2000 )); then
  39.                 cmd=`eval echo "$COMMAND_LINE"`
  40.                 echo "$cmd"
  41.                 echo "$cmd" >> "$GENERATED_SCRIPT"
  42.         fi
  43. done
  44.  
  45. echo
  46. chmod +x "$GENERATED_SCRIPT"
  47. echo "Script saved at $GENERATED_SCRIPT, you may execute it if you like the result"
  48.