In deze opgave gaan we wat spelen met hoe we kijken naar het ruimtegebruik op de verschillende schijven. We gaan hiervoor gebruik maken van de commando’s du (disk usage, print uit hoeveel ruimte een bestand inneemt; indien dit bestand een directory is, dan print het recursief het ruimtegebruik af van alle subdirectories), en df (disk free, print uit hoeveel plaats er nog vrij is op alle disks). Beide commando’s gebruiken beiden als grootte-eenheid een /block/ (wat dit precies wil zeggen is niet relevant voor jullie). Dit is vooral vervelend en produceert onleesbare en oninterpreteerbaar grote getallen. Daarom hebben beide programma’s een optie -h, welke aangeeft dat er human-readable uitvoer gegenereerd wordt: de uitvoer zal automatisch K voor KiB, M voor MiB, etc. gebruiken, en de meest passende eenheid kiezen.

  1. Print van alle mount points het human-readable overzicht van hoeveel disk space in gebruik is per mountpoint.
  2. We willen nu enkel de kolommen met ‘Size’ (totale grootte) en ‘Mounted on’ overhouden. (Filter hierbij de eerste lijn die begint met Filesystem weg.) Je kan hier echter niet zomaar cut gebruiken: er wordt een variabel aantal spaties gebruikt om de kolommen van elkaar te scheiden! Je kan echter gebruik maken van sed om hier rond te werken.
  3. Gebruik sed nu om in de uitvoer de volgorde van de kolommen met ‘Mounted on’ en ‘Size’ om te draaien, en enkel deze kolommen over te houden. (Filter opnieuw de eerste lijn die begint met Filesystem weg.) (Merk op dat je hier, helaas, cut niet voor kan gebruiken, aangezien cut de originele volgorde van de velden bewaart.)
  4. We zijn geïnteresseerd in welke (sub)directories het meest plaats inpakken in de directory /usr/lib. Begin met van al deze subdirectories het human-readable overzicht te printen van hun grootte.
  5. We willen nu weten welke directories het grootste zijn. We willen die sorteren, met de grootste onderaan. ‘Helaas’: die groottes zijn human readable. Dus als je dat zomaar zou sorteren, riskeer je dat 9K na 8M zal gesorteerd worden. Kijk eens in de man-page van sort, of er geen optie bestaat die dit kan oplossen voor je.
  6. Alles wat afgeprint wordt, zijn uiteraard subdirectories van /usr/lib/. Dat weten we natuurlijk al, dus dat is wat overbodige informatie. Filter die /usr/lib dan ook gewoon weg. (Maar dus niet bij de laatste lijn: die eindigt immers op /usr/lib en niet op /usr/lib/)
  7. We willen de grootste directory afprinten. De laatste lijn bevat echter de grootte van de totale directory, die is uiteraard het grootst van al. Toon dus de grootste subdirectory (met zijn grootte). (De subdirectory moet ook hier weggefilterd zijn!)

(Opgelet: sort kan pas beginnen sorteren als alle input gekend is. Dus als die heel groot is, zal sort die input eerst in het geheugen moeten bewaren alvorens te kunnen sorteren, en kan dat sorteren een hele tijd duren. Pas dus wat op met té grote streams/bestanden te sorteren.)