BRICKHOUSE

Ta bort filer i Unix

Sammanfattning: Ibland lyckas du eller andra att skapa en fil under Unix som har ett konstigt namn och som kan vara svårt att ta bort med traditionella medel. Här kommer ett antal sätt att angripa problemet.

Sätt att ta bort filer med konstiga namn

Här nedan kommer en samling med sätt på vilka man kan få bort filer i en katalog som har konstiga namn. Detta kan till exempel vara blanktecken, kontrolltecken och tecken som används av skalet ($, -, * osv.). Med hjälp av dessa tekniker skall man kunna få bort de flesta konstigt namngivna filerna.

Lista filer med konstiga namn

Här finns det två varianter att använda:

$ ls -b
$ ls -p

Växeln -b visar konstiga tecken med oktala värden. Detta är den mest användbara eftersom man ser ASCII värdet och den förhindrar att ett konstigt kontrolltecken ändrar på skärmen. Om man till exempel skulle lyckas få in Ctrl-L i ett filnamn skulle skärmen rensas varje gång man gör ls på en sådan fil (utan -b). Den andra växeln, -p, visar konstiga tecken som frågetecken. Mindre användbart med kan räcka ibland.

Ta bort filer med konstiga namn

Det finns ett antal varianter, från det enkla till det mer komplicerade (självklart det är ju Unix). Vi börjar med den viktigaste komponenten.

$ rm -i

Så fort man skall ta bort en fil med konstigt namn skall man använda -i som växel till rm. Detta gör att man måste bekräfta med ett y innan varje fil som tas bort. Skall alltid användas när man använder någon av nedanstående tekniker.

  1. Använda wild cards
    Med denna teknik använder man wild cards för att matcha slutet eller början på filnamnet som har ett konstigt namn. Detta förutsätter att någon del av namnet är mer normal.

    $ rm -i prefix*
    $ rm -i *suffix

    När önskad fil kommer upp svarar man y, för övriga trycker man enter.

  2. Filer med bindestreck
    Eftersom bindestreck används som växlar kan detta tolkas som en växel till rm kommandot. Tricket är att specifiera katalogen innan.

    $ rm -i ./-filen

  3. Filer med blanktecken eller tecken som tolkas av skalet
    Har man ett filnamn med blanktecken tolkas oftast namnet som flera argument/filnamn och har man tecken som tolkas av skalet till exempel $ blir det andra problem. Här måste man använda tecken som förhindrar att tecknet tolkas av skalet eller slå ihop det som ser ut som flera argument till ett.

    $ rm -i 'fil med blank'
    $ rm -i gemig\$pengar

    Använd alltså enkelfnutt eller backslash för att förhindra skalet från att tolka konstiga tecken.

  4. Ta bort med hjälp av inoden
    Om du inte lyckas matcha filnamnet med någon av ovanstående metoder kan det gå att använda inodnumret. Det vill säga det unika nummer som varje fil i ett filsystem har. Först måste man ta reda på inoden.

    $ ls -ib

    Med hjälp av inodsnumret kan du nu använda find för att få bort filen.

    $ find . -inum nnnn -exec rm -i {} \;

    Du skall byta ut nnnn mot inoden och sedan skickas träffen från find vidare till exec rm som tar bort filen.

  5. Ta bort med hjälp av ett program
    Om filnamnet är ultrakonstigt och enbart innehåller kontrolltecken kan det enda sättet att få bort filen vara att skriva ett litet C program som tar bort den. Du får börja med att ta reda på det exakta namnet.

    $ ls -b

    Säg att namnet på filen är (oktalt) "\t 360 207 005 254". Då skapar du följande C program.

    main()
    {
    unlink("\t\360\207\005\254");
    }

    Spar det som tabort.c (du fick skriva programmet i valfri editor). Nu skall det kompileras och exekveras.

    $ cc tabort.c
    $ a.out

    Resultatet från kompilering (och länkning) är det exekverbara programmet a.out (för att få ett annat namn måste man ange växlar till cc kommandot eller så får du göra mv på a.out. I detta fall är det onödigt eftersom du bara vill köra det en enda gång (förhoppningsvis). Kontrollera att filen har försvunnit, sen kan du ta bort källkoden och a.out.