expose Skrevet 19. oktober 2013 Del Skrevet 19. oktober 2013 Jeg har fått en festlig oppgave. Jeg vet ikke engang hvor jeg skal starte Sjefen vår har bedt oss om å lage et program hvor vi kan sjekke om alle filene i /tmp mappen har de riktige rettigheter (755). Hvis de gjør det, la dem der. Hvis de ikke gjør det, så må de fjernes. HINT: If, then, else. Noen som har noen gode råd? Mvh Expose Lenke til kommentar
Sokkalf™ Skrevet 19. oktober 2013 Del Skrevet 19. oktober 2013 Tja, noe sånt som dette kanskje for fil in *; do rettigheter=`stat -c "%a" $fil` if [ "$rettigheter" != "755" ]; then rm "$fil" fi done (Utestet og stort sett tatt fra hukommelsen) Lenke til kommentar
expose Skrevet 19. oktober 2013 Forfatter Del Skrevet 19. oktober 2013 (endret) Takker for raskt svar! Bare et par spørsmål: 1. Vil dette slette filer som har 755, eller alle andre? 2. Hvordan legge til at skriptet skal gå igjennom /tmp mappen ? Skriptet ligger i /home/david/shellapp #!/bin/bash for fil in *; do rettigheter=`stat -c "%a" $fil` if [ "$rettigheter" != "755" ]; then rm "$fil" fi done Ga dette resultatet: david@ubuntu:~/shellapp$ ./tmpchk ./tmpchk: line 5: [: missing `]' ./tmpchk: line 5: [: missing `]' Endret 19. oktober 2013 av expose Lenke til kommentar
iNeo Skrevet 19. oktober 2013 Del Skrevet 19. oktober 2013 (endret) 1. Ja 2. Erstatt den første linja med for file in /tmp/*; do Endret 19. oktober 2013 av iNeo Lenke til kommentar
Occi Skrevet 19. oktober 2013 Del Skrevet 19. oktober 2013 (endret) Bare å endre path. Scriptet kan også kortes ned om man bruker $() operatoren (eller hva man kaller den). Som du ser fjerner den filer som ikke har 755 som rettigheter (rwxr-xr-x). Benytt man stat osv. for å forstå hva de forskjellige argumentene gjør. Avslutt man (egentlig editoren less) ved å trykke q. $ ls -l /tmp/perms total 0 -rw-r--r-- 1 tim tim 0 20.10.13 00:24 asdf -rwxr-xr-x 1 tim tim 0 20.10.13 00:23 bar -rwxr-xr-x 1 tim tim 0 20.10.13 00:23 foo $ for f in /tmp/perms/*; do > if [ $(stat -c "%a" $f) != "755" ]; then > rm $f > fi > done $ ls -l /tmp/perms total 0 -rwxr-xr-x 1 tim tim 0 20.10.13 00:23 bar -rwxr-xr-x 1 tim tim 0 20.10.13 00:23 foo Endret 19. oktober 2013 av Occi Lenke til kommentar
expose Skrevet 19. oktober 2013 Forfatter Del Skrevet 19. oktober 2013 (endret) 1. Ja 2. Erstatt den første linja med for file in /tmp/*; do david@ubuntu:/tmp$ ls VMwareDnD vmware-root david@ubuntu:/tmp$ ls -l total 8 drwxrwxrwt 2 root root 4096 Oct 19 12:32 VMwareDnD drwx------ 2 root root 4096 Oct 19 12:32 vmware-root Dette ligger fortsatt igjen i /tmp/ Hva kan være feil? Endret 19. oktober 2013 av expose Lenke til kommentar
Occi Skrevet 19. oktober 2013 Del Skrevet 19. oktober 2013 (endret) De mappene er eid av root (starter på d for directory), så om du kjører dette med en annen bruker kan du ikke slette de. Ikke at du burde heller, de filene er sannsynligvis nødvendig for at (den virtuelle) maskinen skal fungere. Søk om VMware for mer info. Det er neppe meningen at de skal slettes. Endret 19. oktober 2013 av Occi Lenke til kommentar
expose Skrevet 19. oktober 2013 Forfatter Del Skrevet 19. oktober 2013 De mappene er eid av root (starter på d for directory), så om du kjører dette med en annen bruker kan du ikke slette de. Ikke at du burde heller, de filene er sannsynligvis nødvendig for at (den virtuelle) maskinen skal fungere. Søk om VMware for mer info. Det er neppe meningen at de skal slettes. Vil det si at sudo ikke kan brukes noe sted? Lenke til kommentar
Occi Skrevet 19. oktober 2013 Del Skrevet 19. oktober 2013 (endret) Neida. Du kan alltid bruke sudo, men det er ikke gitt at du bør/skal slette de mappene. I oppgaven defineres det "om alle filene i /tmp mappen har de riktige rettigheter (755)". Så det kan hende at det er meningen å la mappene være i fred. Endret 19. oktober 2013 av Occi Lenke til kommentar
expose Skrevet 19. oktober 2013 Forfatter Del Skrevet 19. oktober 2013 Neida. Du kan alltid bruke sudo, men det er ikke gitt at du bør/skal slette de mappene. ok Ved kjøring for jeg denne: ./tmpchk: line 3: syntax error near unexpected token `do' ./tmpchk: line 3: `$ for f in /tmp/*; do' david@ubuntu:~/shellapp$ nano tmpchk skal $ være foran for Lenke til kommentar
expose Skrevet 19. oktober 2013 Forfatter Del Skrevet 19. oktober 2013 Her er like så godt en screenshot av scriptet... Lenke til kommentar
Occi Skrevet 19. oktober 2013 Del Skrevet 19. oktober 2013 (endret) Her sletter jeg kun filer som ikke har rettigheter 755. Jeg har ikke laget et script, skriver det like greit rett inn i shellet. Det har ingenting å si. Legg merke til at det er kun filen "asdf" som blir borte. "moshimoshi" som er en mappe, men ikke har 755, blir ikke fjernet. Merk også at standardrettigheter for mapper er 755 med directory flag. Denne er 644. Du har et mellomrom foran $ i $(stat ...) $ ls -l total 4.0K drw-r--r-- 2 tim tim 4.0K 20.10.13 00:45 moshimoshi -rw-r--r-- 1 tim tim 0 20.10.13 00:31 asddsa -rwxr-xr-x 1 tim tim 0 20.10.13 00:23 bar -rwxr-xr-x 1 tim tim 0 20.10.13 00:23 foo $ for f in /tmp/perms/*; do > # sjekk først om objektet er en fil (og ikke mappe) > # deretter sjekk at rettighetene ikke er 755 > if [[ -f $f ]] && [ $(stat -c "%a" $f) != "755" ]; then > rm $f > fi > done $ ls -l total 4.0K drw-r--r-- 2 tim tim 4.0K 20.10.13 00:45 moshimoshi -rwxr-xr-x 1 tim tim 0 20.10.13 00:23 bar -rwxr-xr-x 1 tim tim 0 20.10.13 00:23 foo Endret 19. oktober 2013 av Occi Lenke til kommentar
expose Skrevet 19. oktober 2013 Forfatter Del Skrevet 19. oktober 2013 #!/bin/bash $ for f in /tmp/*; do # sjekk først om objektet er en fil (og ikke mappe) # deretter sjekk at rettighetene ikke er 755 if [[ -f $f ]] && [ $(stat -c "%a" $f) != "755" ]; then rm $f fi done Blir helt sprø! For jeg for dette svaret: david@ubuntu:~/shellapp$ ./tmpchk ./tmpchk: line 3: syntax error near unexpected token `do' ./tmpchk: line 3: `$ for f in /tmp/*; do' david@ubuntu:~/shellapp$ Lenke til kommentar
Sokkalf™ Skrevet 19. oktober 2013 Del Skrevet 19. oktober 2013 Du skal ikke ha dollartegnet foran 'for'. Lenke til kommentar
expose Skrevet 19. oktober 2013 Forfatter Del Skrevet 19. oktober 2013 Du skal ikke ha dollartegnet foran 'for'. Der satt den! Dæven nå ble jeg glad =) Noen burde klemmes, for nøye meg meg bikja... Lenke til kommentar
Occi Skrevet 19. oktober 2013 Del Skrevet 19. oktober 2013 (endret) Som jeg sa, jeg skriver min kode direkte inn i et shell. "$" indikerer kun en prompt i shellet. Her er det hele presentert som innhold i en script-fil om det er enklere å forstå. #!/usr/bin/env bash for f in /tmp/perms/*; do # sjekk først om objektet er en fil (og ikke mappe) # deretter sjekk at rettighetene ikke er 755 if [[ -f $f ]] && [ $(stat -c "%a" $f) != "755" ]; then rm $f fi done Endret 19. oktober 2013 av Occi Lenke til kommentar
process Skrevet 22. oktober 2013 Del Skrevet 22. oktober 2013 Helt flotte svar og ser at det er løst, men vil gjerne foreslå en alternativ måte å gjøre det på. find /tmp -type f ! -perm 755 | xargs rm Denne traverserer også undermapper dersom det er ønskelig. 1 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå