შიგთავსზე გადასვლა

ლაბი 02 — ფაილები და საქაღალდეები

ამოცანა

კოლეგამ დაგიტოვა ბარდაკი — 2 წლის საველე მონაცემები ერთ საქაღალდეში. დაალაგე, გაასუფთავე და დააარქივე. ხელით ერთი ფაილიც არ გადაათრიო.

დრო სირთულე თავები გამოცდა
25 წუთი დამწყები 02 · 03 LPIC-1 103.3 · RHCSA

წესები

  • ტაიმერი ჩართე სანამ დაიწყებ
  • man და --help — დაშვებულია (გამოცდაზეც დაშვებულია)
  • ინტერნეტი, ChatGPT, ეს გვერდის პასუხები — არა
  • თუ 25 წუთში ვერ მოასწარი, გააჩერე და ნახე პასუხი. მერე თავიდან გააკეთე ტაიმერზე.

მომზადება

გაუშვი ეს ბლოკი სავარჯიშო გარემოს შესაქმნელად:

rm -rf ~/lab02 && mkdir -p ~/lab02/field_data && cd ~/lab02/field_data

# საველე წერტილები
for y in 2024 2025; do
  for m in 03 06 09; do
    for i in 1 2 3; do
      touch "points_${y}_${m}_0${i}.shp" "points_${y}_${m}_0${i}.dbf" \
            "points_${y}_${m}_0${i}.shx" "points_${y}_${m}_0${i}.prj"
    done
  done
done

# ორთოფოტოები — რამდენიმე დიდი
for i in 1 2 3 4 5; do
  head -c 12M /dev/urandom > "ortho_2024_0${i}.tif"
done
head -c 40M /dev/urandom > ortho_2025_huge.TIF

# ნაგავი
touch temp1.tmp temp2.tmp '~qgis_backup.qgz~' thumbs.db
mkdir -p empty_folder1 empty_folder2
echo "CRS: EPSG:32638, surveyor: T. Beridze" > readme.txt
echo "CRS: EPSG:32637, surveyor: N. Kapanadze" > readme_rustavi.txt

ls -la ~/lab02/field_data | head

დავალებები

1 — ინვენტარიზაცია (3 წთ)

დაითვალე და უპასუხე:

  1. სულ რამდენი ფაილია field_data-ში?
  2. რამდენი .shp ფაილია?
  3. რომელი ფაილია ყველაზე დიდი?
  4. რამდენ ადგილს იკავებს მთელი საქაღალდე?

2 — დალაგება წლების მიხედვით (6 წთ)

შექმენი ~/lab02/sorted/2024/ და ~/lab02/sorted/2025/.

გადაიტანე ყოველი ფაილი შესაბამის საქაღალდეში სახელის მიხედვით.

⚠️ ortho_2025_huge.TIF დიდი რეგისტრითაა — ისიც უნდა მოხვდეს 2025-ში.

3 — ნაგვის გასუფთავება (4 წთ)

წაშალე field_data-დან:

  • ყველა .tmp ფაილი
  • thumbs.db
  • ყველა ცარიელი საქაღალდე
  • ყველა ფაილი, რომლის სახელი ტილდით (~) იწყება ან მთავრდება

⚠️ ჯერ ნახე სია, მერე წაშალე. readme.txt არ უნდა წაიშალოს.

4 — მეტამონაცემები (4 წთ)

ორივე readme ფაილში ჩაწერილია CRS. იპოვე ერთი ბრძანებით, რომელ ფაილში წერია EPSG:32638 — ისე, რომ ფაილები არ გახსნა.

5 — არქივი (5 წთ)

  1. დააარქივე მთელი ~/lab02/sorted/ საქაღალდე ~/lab02/field_2024_2025.tar.gz-ად.
  2. შეამოწმე არქივის ზომა.
  3. გახსენი შიგთავსის სია — არქივის გახსნის გარეშე.

6 — სიმბოლური ბმული (3 წთ)

შექმენი ბმული ~/current_project, რომელიც ~/lab02/sorted/2025/-ზე მიუთითებს. შეამოწმე ls -l-ით, რომ ბმულია და არა კოპია.


შემოწმება

# გაუშვი ლაბის ბოლოს
cd ~/lab02
echo "--- 2024:"; ls sorted/2024 | wc -l      # უნდა იყოს 41
echo "--- 2025:"; ls sorted/2025 | wc -l      # უნდა იყოს 37
echo "--- ნაგავი:"; find field_data -name "*.tmp" -o -name "thumbs.db" | wc -l  # 0
echo "--- ცარიელი:"; find field_data -type d -empty | wc -l   # 0
echo "--- არქივი:"; ls -lh field_2024_2025.tar.gz
echo "--- ბმული:"; ls -l ~/current_project

პასუხები — ჯერ თვითონ სცადე

1 — ინვენტარიზაცია

ls -1 | wc -l                      # ფაილების რაოდენობა
find . -name "*.shp" | wc -l       # 18
ls -lhS | head -3                  # ზომის მიხედვით დალაგება, ყველაზე დიდი ზემოთ
du -sh .                           # საქაღალდის ჯამური ზომა

2 — დალაგება

mkdir -p ~/lab02/sorted/{2024,2025}
cd ~/lab02/field_data
find . -maxdepth 1 -type f -iname "*2024*" -exec mv {} ~/lab02/sorted/2024/ \;
find . -maxdepth 1 -type f -iname "*2025*" -exec mv {} ~/lab02/sorted/2025/ \;

-iname აუცილებელია — .TIF დიდი რეგისტრით -name "*2025*"-საც დაიჭერდა, მაგრამ ჩვევად გამოიმუშავე: სახელებში რეგისტრს ვერ ენდობი.

-maxdepth 1 კი იმიტომ, რომ ახლადშექმნილ ქვესაქაღალდეებში აღარ ჩავიდეს.

3 — გასუფთავება

find . -name "*.tmp" -o -name "thumbs.db" -o -name "~*" -o -name "*~"   # ჯერ ნახე
find . \( -name "*.tmp" -o -name "thumbs.db" -o -name "~*" -o -name "*~" \) -delete
find . -type d -empty -delete

ფრჩხილები კრიტიკულია

-delete-ის დამატება ფრჩხილების გარეშე მხოლოდ ბოლო პირობაზე იმოქმედებდა — find -o-ს ასე კითხულობს. ფრჩხილების გარეშე ეს ბრძანება სხვას წაშლიდა, ვიდრე გგონია. ეს ზუსტად ის ადგილია, სადაც find-ს ხალხი მონაცემებს ატყუებს.

4 — მეტამონაცემები

grep -l "EPSG:32638" *.txt
# readme.txt

-l (list) მხოლოდ ფაილის სახელს აჩვენებს, შიგთავსს არა.

5 — არქივი

cd ~/lab02
tar -czf field_2024_2025.tar.gz sorted/
ls -lh field_2024_2025.tar.gz
tar -tzf field_2024_2025.tar.gz | head
დროშა მნიშვნელობა
-c create — შექმენი
-z gzip შეკუმშვა
-f file — შემდეგი არგუმენტი ფაილის სახელია
-t list — მხოლოდ სია, გახსნის გარეშე
-x extract — გახსენი

შეამჩნევდი, რომ არქივი თითქმის არ შეიკუმშა?

/dev/urandom-ით შექმნილი ფაილები შემთხვევითი ბაიტებია და შეუკუმშვადია. ნამდვილი GeoTIFF-ებიც ხშირად ასეა — თუ რასტრი უკვე შეკუმშულია (LZW, DEFLATE, JPEG), tar -z ზედმეტ დროს ხარჯავს შედეგის გარეშე. ასეთ შემთხვევაში tar -cf (შეკუმშვის გარეშე) უფრო სწრაფია.

6 — ბმული

ln -s ~/lab02/sorted/2025 ~/current_project
ls -l ~/current_project
# lrwxrwxrwx ... current_project -> /home/user/lab02/sorted/2025

პირველი ასო l ნიშნავს link-ს. -s გამოტოვების შემთხვევაში hard link-ს მიიღებდი, რომელიც საქაღალდეზე საერთოდ არ მუშაობს.


რა ისწავლე

  • find კრიტერიუმებით და -exec-ით სერიულ დამუშავებას
  • -o-სთან ფრჩხილების აუცილებლობას — მონაცემების უსაფრთხოების საკითხია
  • tar-ის ოთხ დროშას, რომელიც 95%-ში საკმარისია
  • სიმბოლურ ბმულებს — GIS-ში მუდმივი პროექტის ბილიკის შესანარჩუნებლად

შემდეგი


სასერტიფიკატო შესაბამისობა

LPIC-1: 103.3 · 103.7 · 104.6 · 104.7 RHCSA: საბაზისო ინსტრუმენტები (ფაილები, არქივები, grep)

სრული მატრიცა — სასერტიფიკატო ამოცანები