UNIX, shell-, shell-. - - UNIX , . , / - , . UNIX : find(1) ncheck(1M). find - - , . Ncheck . , . , , . Chkset - find - / , , - . chkset? Chkset : , . , . - , - . chkset - - , . , . , , chkset find, , . , chkset - / , , - (root). chkset . , "find ... -print", - . . -l, - "ls -ld", . , , - , . - . . , ( ), , , . , - l. ls . , , , . , , find chkset , . - chkset . , chkset - , .  # chkset /bin /usr/bin /lib /usr/lib . /usr/lib , - .  chkset - FORM SORT. FORM find, SORT - , , - . 7 , . , case ( 8-14) , . "-l", - ( ). sort - , . , "$#". , "-l", , ( 12), . , 17, , , . , - . (.. ), 18 - SRC . , - SRC "/", .. , - . - find. find , - SRC. find, , , . , . find - , . "-perm -4000" - , - . - - 4???. - (-4000), (-2000), -o, "or" (""). ( - chmod(1).) - , FORM, . -l , - FORM "-print", , find - . -l , FORM "-exec ls -ld {} ;". -exec - find, - , , . (-l), - (-d) ( - ). - , -l stat. - , ls, . . - . sort. - ( - , "ls -l" ). sort , 1, , +7 - , .   - , . , , - . grep. : # find $* -exec ls -ld {} \; | grep "^[^ ]*s[^ ]*" . "ls -ld". grep. Grep - : , , - , "s", , . , s, . - , "r", "w", "x" "-". - , , . , s , , s , , . , . , , , find "-perm" . UNIX, - , , - . grep , , - . , , grep. , , . -------------------------------------------------------- : suw -------------------------------------------------------- suw  su , su (substituted user, ).   suw [-m] [sulog]   suw , /usr/adm/sulog .   1 static char id[]="@(#)suw v1.0 Author: Russ Sage"; 3 # include 5 # define FALSE 0 6 # define TRUE 1 7 # define MATCH 0 8 # define BSIZ 80 10 main(argc,argv) 11 int argc; 12 char *argv[]; 13 { 14 register int alert, c, mail, n; 15 FILE *fp1, *fp2; 16 char *p, *uname, line[BSIZ], tmp[BSIZ], 17 *log = "/usr/adm/sulog"; 19 static char *legal[] = {sage-root\n","root-root\n",NULL}; 20 static char *adm[] = {"sage",NULL}; 23 mail = FALSE; 25 if (argc > 1 && argv[1][0] == '-') 26 switch (argv[1][1]) 27 { 28 case 'm': 29 mail = TRUE; 30 --argc; 31 ++argv; 32 break; 33 default: 34 fprintf(stderr,"suw: invalid argument %s\n", argv[1]); 35 fprintf(stderr,"usage: suw [-m] [sulog]\n"); 36 exit(1); 37 } 39 if (argc == 2) 40 log = *++argv; 42 if ((fp1 = fopen(log,"r")) == NULL) 43 { 44 fprintf(stderr,"suw: error opening %s\n",log); 45 fprintf(stderr,"usage: suw [-m] [sulog]\n"); 46 exit(1); 47 } 49 sprintf(tmp,"/tmp/suw%d",getpid()); 50 if ((fp2 = fopen(tmp,"w+")) == NULL) 51 { 52 fprintf(stderr,"suw: error opening %s\n",tmp); 53 fprintf(stderr,"usage: suw [-m] [sulog]\n"); 54 exit(1); 55 } 57 while (fgets(line,sizeof(line),fp1) != NULL) 58 { 59 p = line + 15; 60 if (*p == '+') 61 { 62 p = p + 2; 63 while (*p != ' ') p++; 64 p++; 65 uname = p; 66 while (*p && *p++ != '-') 67 continue; 69 if (strcmp (p,"root\n") == MATCH) 70 { 71 alert = TRUE; 72 for (n=0; legal[n] != NULL; n++) 73 if (strcmp (uname,legal[n]) == MATCH) 74 { 75 alert = FALSE; 76 break; 77 } 78 if (alert) 79 fprintf(fp2,"Illegal --> %s", line); 80 } 81 } 82 } 84 if (mail) 85 { 86 fclose(fp2); 87 for (n=0; adm[n] != NULL; n++) 88 { 89 sprintf(line,"cat %s | mail %s",tmp,adm[n]); 90 system(line); 91 } 92 } 93 else 94 { 95 rewind(fp2); 96 while ((c = getc(fp2)) != EOF) 97 putc(c, stdout); 98 fclose(fp2); 99 } 101 fclose(fp1); 102 unlink(tmp); 103 }  suw? , su, ( ) . su sulog. , sulog . -. - , , - - . , , - . suw? suw su. - su, , - . - , , . - . /usr/adm/sulog. -m, , . , /usr/adm/Osulog, .  1. # suw -m /usr/adm/sulog , . 2. # suw /usr/adm/Osulog /usr/adm/Osulog .  - . 14 : alert ( ) mail (). TRUE FALSE. : su, - , . - (stdio), - fp1 fp2, . - : - su, - . sulog. , log - . - . - sage (sage-root) root (root-root). , , su . . - - sage. , sage - , , . - 23 FALSE, . . . , - mail . . , . argc , argv , , . - - (argc > 1) (argv[1][0]) , , . - case. m, mail TRUE, (argc) , (argv) . , shell. , argv , , , . argv[0] == argv, argv[1] == ++argv. -m, - . 39 , , . , argv argc, . , , - (*++argv). , , log. , . - . - ( ), . 49 , - . - . , . 57-103 . - , . , fgets ( 57) , while. , line. . sulog, , - . 15 - . , , - su. , , - . , - . 63-64 while, , . - , - . . - uname, - . while (- 66-67) , . while , (.. , *p == '\0') . p++, , , p . , , - su. , alert, - , . for ( 72-77) , , , , - . , , . , , - su . alert . alert , - , , . - . , while . 84 , mail. , - ( cat) for ( 87-91). , . mail UNIX ( 90). - - cat mail. mail , , . , ( ) "- " ( ) - . , - cat, 153 " " (B.W.Kernighan, D.M.Ritchie. The C Programming Language). , . , - .  * 10. *  shell conv dtoh dtoo htod htoo bc otod otoh shell shell , , shell shell - ed a.out C shell / shell Vi shell Escape "One-Liners" - , . - 2 - UNIX. , , . , , , . , shell. , . UNIX bc ( ) dc ( ("desk calculator")). , , UNIX, . --------------------------------------------------------------------- : conv --------------------------------------------------------------------- conv : conv : $conv 2 2 ( ) FFF FFF. conv 1 : 2 # @(#) conv v1.0 , shell : Russ Sage 3 4 while : 5 do 6 echo " 7 8 9 ------------------------ 10 1 - 11 2 - 12 3 - 13 4 - 14 5 - 15 6 - 16 17 enter choice (1-6, <>): \c" 18 read CHOICE 19 20 case $CHOICE in 21 "") exit;; 22 1) echo "\ (<> to exit): \c" 23 read DEC 24 if [ "$DEC" = ""] 25 then exit 26 fi 27 HEX='. dtoh' 28 echo "\n${DEC}d = ${HEX}x";; 29 2) echo"\n (<> to exit): \c" 30 read HEX 31 if [ "$HEX" = ""] 32 then exit 33 fi 34 DEC='. htod' 35 echo "\n${HEX}x= ${DEC}d;; 36 3) echo "\n (<> to exit): \c" 37 read DEC 38 if [ "$DEC" = ""] 39 then exit 40 fi 41 OCT='. dtoo' 42 echo "\n${DEC}d = ${OCT}o";; 43 4) echo "\n (<> to exit): \c" 44 read OCT 45 if [ "$OCT" = ""] 46 then exit 47 fi 48 OCT='. otod' 49 echo "\n${OCT}o = ${DEC}d";; 50 5) echo "\n (<> to exit): \c" 51 read OCT 52 if [ "$OCT" = ""] 53 then exit 54 fi 55 HEX='. otoh' 56 echo "\n${OCT}o = ${HEX}x";; 57 6) echo "\n (<> to exit): \c" 58 read 59 if [ "$" = ""] 60 then exit 61 fi 62 OCT='. htoo' 63 echo "\n${HEX}x = ${OCT}o";; 64 *) echo "\n$CHOICE- ";; 65 esac 66 done CHOICE - DEC - HEX - - 4 - OCT - conv ? shell - . - , - . , shell , , , . - , shell. conv - , , , . conv? . , . , , . . . 1 6, . - , , . , , conv , , conv. , , . 4-66 - while. , . , , , .. . 6-17 . "", . 18 , 20-65 . () , . 22-28 . , . 23. 24-26 , . 27 , dtoh . . dtoh , ".". : " , shell". dtoh DEC - 5 - . , , , . 28 , . 2, 3, 4, 5 6 . , - , (), . . shell UNIX bc, . , bc - , , , , - . --------------------------------------------------------------------- : dtoh --------------------------------------------------------------------- dtoh . : . : $DEC="decimal_number"; HEX='.dtoh' $DEC="25";HEX='.dtoh' $echo $HEX DEC 25, dtoh HEX. . dtoh 1 : 2 # @(#) dtoh v1.0 shell-- : Russ Sage 3 4 bc < HEX $ echo " : 'cat HEX'" () shell. "." , DEC. HEX. , . cat . --------------------------------------------------------------------- : dtoo --------------------------------------------------------------------- dtoo . : DEC="decimal_number"; OCT='.dtoo' $DEC="16";OCT='.dtoo' - 7 - $echo $OCT DEC 16, dtoo OCT. . dtoo 1 : 2 # @(#) dtoo v1.0 shell-- : Russ Sage bc <