Kommandot `ls` i Linux är något vi använder dagligen utan att reflektera över det. Det är synd, för om man granskar det noggrannare, upptäcker man många användbara funktioner – inklusive några som borde finnas i varje användares verktygslåda för kommandoraden.
`ls` listar filer och kataloger
Kommandot `ls` är troligtvis det första kommandot de flesta Linux-användare stöter på. För de av oss som ofta arbetar i terminalen, används det dagligen utan närmare eftertanke. Det kan förklara varför kommandot innehåller fler funktioner än de flesta användare känner till. Vi använder det för att lista filer och se vad som finns i en katalog, eller listar filer i ett mer detaljerat format för att granska filbehörigheter. Utöver det, ger vi det sällan någon vidare uppmärksamhet.
Kommandot `ls` är ett av dessa kommandon som har en mängd olika valmöjligheter. Kanske är det just det som är problemet. Med så många alternativ, hur ska man lyckas sålla ut de som är användbara? Och när man väl hittat dem, hur kommer man ihåg dem?
Användbara kombinationer av kommandot `ls` med dess parametrar och alternativ är utmärkta kandidater för alias. I många distributioner är det som uppfattas som kommandot `ls` i sin ”nakna” form faktiskt ett alias. Kommandot `type` kan användas, bland annat, för att visa den underliggande definitionen av ett alias. Låt oss ta en titt på definitionen av `ls`:
type ls
Parametrarna `–color=auto` inkluderas automatiskt varje gång man använder kommandot `ls`. Det är detta som gör att olika filtyper visas med olika färger i listorna.
Enkla listor
Alla som har tillbringat en stund i Linux-terminalen vet att `ls` som standard listar filerna och katalogerna i den aktuella katalogen.
ls
Om du vill att listan ska visas i en enda kolumn, använd alternativet `-1` (en fil per rad):
ls -1
Vi kommer att diskutera det ovanliga filnamnet högst upp i listan om en stund.
Använda `ls` på olika kataloger
För att få `ls` att lista filerna i en annan katalog än den aktuella, skicka sökvägen till den katalogen som en parameter till `ls`. Du kan också skicka mer än en katalog till `ls` och få dem listade efter varandra. Här ber vi `ls` att lista filerna i två kataloger, en som heter ”Hjälp” och den andra ”gc_help”.
ls Help gc_help
När `ls` har listat innehållet i den första katalogen listar det innehållet i den andra. Den skriver ut namnet på varje katalog när den behandlar dem:
Använda filnamnsmönster
Använd mönstermatchning för att selektivt lista en uppsättning filer. Frågetecknet `?` representerar ett valfritt enskilt tecken och asterisken `*` representerar alla teckensträngar. För att lista alla filer eller kataloger vars namn börjar med `ip_` använd det här formatet:
ls ip_*
För att lista filer som har filändelsen `.c` använder du det här formatet:
ls *.c
Du kan också använda `ls` med `grep` och utnyttja `greps` möjligheter för mönstermatchning. Låt oss söka efter alla filer som innehåller strängen `_pin_` i sitt namn:
ls | grep _pin_
Detta är nästan samma sak som att använda `ls` på egen hand, med två jokertecken:
ls | grep _pin_
ls *_pin_*
Varför nästan samma? Lägg märke till den olika layouten. `grep` tvingar utdata till ett format med ett enda filnamn per rad.
Icke-utskrivbara tecken
Det kan hända att man stöter på ett filnamn som innehåller ett icke-utskrivbart tecken eller ett kontrolltecken. Detta kan ofta ske om man packar upp ett arkiv som laddats ner från internet eller om man klonar ett git-repo, och den ursprungliga skaparen av filen gjorde ett misstag utan att upptäcka det.
Vår ovanliga fil är en av dessa:
Om vi tittar på den i filhanteraren och trycker på F2 för att byta namn på den, representeras de icke-utskrivbara tecknen med en märklig symbol.
Du kan använda alternativet `-b` (escape) för att se vad filnamnet faktiskt innehåller. Det här alternativet gör att `ls` använder escape-sekvenserna från C-programmeringsspråket för att representera kontrolltecken.
ls -b a*
Den mystiska karaktären visar sig vara ett radmatningstecken, som representeras i C som `\n`.
Ignorera filer
För att exkludera vissa filer från en lista, använd alternativet `–hide`. Anta att du inte vill se säkerhetskopiorna `.bak` i listan. Då kan du använda det här kommandot:
ls
ls --hide=*.bak
`.bak`-filerna inkluderas inte i den andra listan.
Listan i långt format
Alternativet `-l` (lång lista) gör att `ls` visar detaljerad information om varje fil.
ls -l
Det finns mycket information här, så låt oss gå igenom den.
Det första som visas är den totala storleken på alla filer i listan. Sedan visas varje fil eller katalog på en egen rad.
Den första gruppen av tio bokstäver och bindestreck är filtypen och ägarens, gruppens och övrigas filbehörigheter.
Det allra första tecknet representerar filtypen. Det kommer att vara en av:
–: En vanlig fil.
b: En block-specialfil.
c: En tecken-specialfil.
d: En katalog.
l: En symbolisk länk.
n: En nätverksfil.
p: En namngiven pipe.
s: En socket.
De följande nio tecknen är tre grupper med tre tecken, som visas direkt efter varandra. Varje grupp på tre representerar läs-, skriv- och körbehörigheterna, i den ordningen. Om behörigheten har beviljats, kommer det att finnas ett `r`, `w` eller `x`. Om behörigheten inte är beviljad, visas ett bindestreck `-`.
Den första gruppen med tre tecken är behörigheterna för filägaren. Den andra gruppen med tre är för gruppmedlemmar, och den sista gruppen är för andra.
Ibland representeras körbehörigheten för ägaren av ett `s`. Det här är setuid-biten. Om den är satt, betyder det att filen körs med filägarens rättigheter, inte med rättigheterna för den användare som kör filen.
Körbehörigheten för gruppen kan också vara ett `s`. Det här är setgid-biten. När det tillämpas på en fil, betyder det att filen kommer att köras med den grupp som äger filens privilegier. När det används med en katalog, kommer alla filer som skapas i katalogen att ärva sina gruppbehörigheter från katalogen där de skapas, och inte från den användare som skapar filen.
Körbehörigheten för övriga kan ibland representeras av ett `t`. Det här är sticky bit. Det används oftast på kataloger. Om det är inställt, kan endast filägaren, katalogägaren eller rotanvändaren byta namn på eller ta bort filer i katalogen, oavsett vilka skriv- och körbehörigheter som satts på filerna i katalogen.
En vanlig användning för sticky-biten är i mappar som `/tmp`. Denna är skrivbar av alla användare på datorn. Sticky bit i katalogen säkerställer att användare – och processer som startas av användare – endast kan byta namn på eller ta bort sina egna temporära filer.
Vi kan se sticky bit i katalogen `/tmp`. Lägg märke till användningen av alternativet `-d` (katalog). Det här får `ls` att rapportera detaljerna i katalogen. Utan det här alternativet kommer `ls` att rapportera om filerna i katalogen.
ls -l -d /tmp
Siffran efter behörigheterna är antalet hårda länkar till filen eller katalogen. För en fil är det vanligtvis ett, men om andra hårda länkar skapas kommer antalet att öka. En katalog har vanligtvis minst två hårda länkar. En är en länk till sig själv, och den andra är dess post i den överordnade katalogen.
Ägarens och gruppens namn visas sedan. De följs av filstorleken och datumet för den senaste ändringen av filen. Till sist ges filnamnet.
Mänskligt läsbara filstorlekar
Att ha filstorlekarna i byte är inte alltid bekvämt. För att se filstorlekarna i de mest passande enheterna (Kilobyte, Megabyte, etc.) använd alternativet `-h` (mänskligt läsbart):
ls -l -h
Visa dolda filer
För att se dolda filer, använd alternativet `-a` (alla):
ls -l -a
De två posterna `.` och `..` representerar den aktuella katalogen respektive den överordnade katalogen. En fil som heter `.base_settings` är nu synlig för första gången.
Utelämna `.` och `..` från listorna
Om du inte vill att listan ska bli rörig med posterna `.` och `..` men ändå vill se dolda filer, använd alternativet `-A` (nästan alla):
ls -l -A
Den dolda filen är fortfarande listad, men posterna `.` och `..` är undertryckta.
Lista kataloger rekursivt
För att få en lista över filerna i alla underkataloger, använd alternativet `-R` (rekursivt).
ls -l -R
`ls` går igenom hela katalogträdet under startkatalogen och listar filerna i varje underkatalog.
Visa UID och GID
För att visa användar-ID och grupp-ID istället för användarnamn och gruppnamn, använd alternativet `-n` (numeriskt uid och gid).
ls -n
Sortering av listorna
Du kan sortera listan efter filändelse, filstorlek eller ändringstid. De här alternativen behöver inte användas med det långa listformatet, men det är vanligtvis lämpligt att göra det. Om du sorterar efter filstorlek är det vettigt att se filstorlekarna i listan. När du sorterar efter filändelse, är det långa listformatet inte lika viktigt.
För att sortera efter filändelse, använd alternativet `-X` (sortera efter filändelse).
ls -X -1
Katalogen listas först (eftersom den inte har någon filändelse), sedan följer resten i alfabetisk ordning, enligt filändelserna.
För att sortera efter filstorlek, använd alternativet `-S` (sortera efter filstorlek).
ls -l -h -S
Sorteringsordningen är från störst till minst.
För att sortera listan efter ändringstid, använd alternativet `-t` (sortera efter ändringstid).
ls -l -t
Listan sorteras efter ändringstiden.
Om filändringstiden infaller inom det aktuella året, är informationen som visas månad, dag och tid. Om ändringsdatumet inte inföll inom det aktuella året, är informationen som visas månad, dag och år.
Ett snabbt sätt att få de nyaste och äldsta filerna i en katalog är att använda `ls` med kommandona `head` och `tail`.
För att få den nyaste filen eller katalogen, använd det här kommandot:
ls -t | head -1
För att få den äldsta filen eller katalogen, använd det här kommandot:
ls -t | tail -1
För att vända sorteringsordningen
För att vända på sorteringsordningen, använd alternativet `-r` (omvänd).
ls -l -h -S -r
Listan är nu ordnad från den minsta filen till den största filen.
Och det finns mer
Läs man-sidan för `ls`, där finns många fler alternativ. Några av dem är till för sällsynta användningsfall, men ibland kommer du att vara glad över att du känner till dem.
Behöver du se en fils tidsstämplar med den maximala precision som Linux kan erbjuda? Använd alternativet `–full-time`:
ls --full-time
Kanske vill du se inod-numret på filerna? Använd alternativet `-i`:
ls -i
Arbetar du på en monokrom skärm och vill eliminera risken för förvirring mellan filer, kataloger och länkar? Använd klassificeringsalternativet, då lägger `ls` till en av dessa symboler till varje post:
/: En katalog.
@: En symbolisk länk.
|: En namngiven pipe.
=: En socket.
*: En körbar fil.
ls -F
Gräv lite. Du kommer upptäcka att `ls` är en rik källa, och du kommer att fortsätta hitta värdefulla funktioner.