Skrypt do Linuxa

0

Cześć,

Nie znalazłem żadnej kategorii związanej z Linuxem, więc spróbuję napisać tutaj. Najwyżej proszę moderatorów o przeniesienie wątku do odpowiedniego działu.

Na zajęcia z Linuxa mam przygotować skrypt, poniżej podaję polecenie.
"Napisać skrypt, który będzie wyświetlał informacje o plikach (ale nie katalogach) w następującym formacie: właściciel atrybuty rozmiar nazwa, przy czym pole właściciel może przybrać następujące wartości: ?moj? (jeżeli jesteś właścicielem pliku), ?administratora? (jeżeli właścicielem pliku jest root), ?innych? (w innym przypadku)."

Obecnie udało mi się znaleźć coś takiego:

#!/bin/bash

ls -pl 2> /dev/null | grep -v / | tail -n +2 | awk -v me=$(whoami) '{
	if ($3 == me) {
		owner="moj"
	}
	else if ($3 == "root") {
		owner="administrator"
	}
	else {
		owner="ktos inny"
	}
	print $1, owner, $9
}'

Czy jest ktoś w stanie po krótce omówić mi poszczególne elementy tego kodu?

2

Więc po krótce:

  1. wypisz wszystkie pliki i katalogi
  2. wyrzuć z listy katalogi
  3. wyrzuć pierwszą linię ponieważ nie jest ani katalogiem ani plikiem
  4. skrypt awk: wypisz kolumnę 1 (atrybuty) + właściciel wg. opisu + kolumnę 9 (nazwa pliku)
1

Jak zwasze będę powtarzał: używanie ls w pipe to bardzo zły pomysł, bo możesz napotkać bardzo dziwne błędy. Do takich celów należy stosować find … -print0, czyli w tym przypadku, powinno to być find . -depth 1 -type f -print0. Będzie to też dokładniejsze, bo ls będzie również wyświetlał ścieżki specjalne, jak nazwane potoki, pliki blokowe, etc.

0

Dzięki za odpowiedzi.

Co muszę jeszcze zamieścić w tym skrypcie żeby wyświetlał dodatkowo rozmiar plików?

1

Co muszę jeszcze zamieścić w tym skrypcie żeby wyświetlał dodatkowo rozmiar plików?

Musisz zmodyfikować skrypt awk dodając do funkcji print jeszcze jedną kolumnę, o ile dobrze liczę chodzi o $5. Mogło by to wyglądać tak: print $1, owner, $9, $5'.

1 użytkowników online, w tym zalogowanych: 0, gości: 1