Przygotowanie do zajęć

Przeczytaj opis programu find na systemie Unix (diablo), za pomocą man find. Najpierw postaraj się zrozumieć ogólną postać wywołania programu, i pobieżnie przejrzyj listę opcji (jest bardzo długa). Następnie przeanalizuj przykłady opisane w sekcji EXAMPLES, przeczytaj ich opis i postaraj się zrozumieć konstrukcję i działanie każdego polecenia. Nie poprzestań na przykładach 1,2, koniecznie przeanalizuj przykłady numer 6,7,8,9. Przykład 5 jest poleceniem złożonym, i możesz je tymczasowo pominąć. Z kolei połącz się z systemem diablo, i uruchom przynajmniej dwa wybrane przykłady w swoim katalogu. W tym celu konieczne będzie stworzenie odpowiednich plików i/lub katalogów, spełniających warunki, które następnie zostaną wybrane programem find.

Zanotuj niezrozumiałe elementy programu find, i zgłoś je na zajęciach.

Jeśli masz kłopoty ze zrozumieniem opisu w języku angielskim, połącz się z systemem panamint, i przeczytaj odpowiednie fragmenty opisu programu find po polsku (LC_ALL=pl_PL man find). Zwróć uwagę na różnice w działaniu find pomiędzy Uniksem i Linuksem (GNU find). Pamiętaj, by ćwiczenia wykonać z uniksowym programem find.

Wykonanie ćwiczenia

Pierwsze dwa punkty z poniższej listy powinny być wykonane i będą oceniane na zajęciach. W razie niemożności ich wykonania na zajęciach proszę dokończyć je w domu i przysłać w raporcie, jednak punkty będą przyznane tylko na zajęciach. Zadania 3-10 przewidziane są do wykonania w domu.

Opracuj wywołania programu find, realizujące podane poniżej operacje. Jeśli napisałeś/napisałaś rozwiązanie zadania na Linuksie, to koniecznie sprawdź czy i które Twoje rozwiązania działają na Uniksie, a które nie, i zaznacz to w raporcie. Jeśli przyślesz rozwiązanie wyłącznie Linuksowe i nie sprawdzisz go na Uniksie, to nie będzie ono uznane.

  1. wyszuka i wyświetli nazwy wszystkich plików, które nie są zwykłymi plikami sekwencyjnymi,
  2. wyszuka i wyświetli nazwy wszystkich plików, które są zwykłymi plikami sekwencyjnymi większymi niż 100MB,
  3. wyszuka i wyświetli nazwy wszystkich plików ostatnio zmodyfikowanych nie wcześniej niż 20 i nie później niż 10 dni temu,
  4. wyszuka i wyświetli nazwy wszystkich zwykłych plików zmodyfikowanych w ciągu ostatnich 100 dni, i odczytywanych w ciągu ostatnich 10 dni,
  5. wyszuka i wyświetli nazwy wszystkich katalogów, które nie były odczytywane w ciągu ostatnich 10 dni (uwaga: pułapka!),
  6. wyszuka i wyświetli nazwy wszystkich plików źródłowych ANSI C (*.c i *.h),
  7. wyszuka i wyświetli nazwy wszystkich plików źródłowych ANSI C i C++ (*.c, *.h, i *.cpp),
  8. wyszuka i wyświetli nazwy wszystkich plików, do których użytkownik nie posiada prawa odczytu (użytkownik wywołujący find, nie właściciel pliku),
  9. wyszuka wszystkie pliki, które są zwykłymi plikami i są puste, a następnie spróbuje je po kolei wykasować zapytawszy wcześniej użytkownika o potwierdzenie dla każdego z nich (w stylu rm -i),
  10. wyszuka wszystkie pliki, które są zwykłymi plikami i są większe niż 1MB, a następnie dla każdego z nich wyświetli ich typ określony programem file.

Dla każdego wyrażenia sprawdź jego działanie, np. na katalogu /etc lub przez stworzenie struktury katalogów i plików testowych. Nie zapomnij o skasowaniu niepotrzebnych plików po zakończeniu pracy.

Przydatne materiały internetowe

Polecane tutoriale i przykłady dotyczące find:
Grymoire Find

Raport

W raporcie z wykonania zadania proszę wpisać opracowane polecenia po kolei w punktach zgodnie z powyższą listą. Słowne opisy i wyjaśnienia są zbędne. Jako katalog do przeszukiwania proszę wszędzie wpisać /tmp
find /tmp ...