Skip to content

1. Fayl va katalog buyruqlari — 30 ta masala

Barcha mashqlarni ~/lab katalogi ichida bajaring. Boshlashdan oldin:

mkdir -p ~/lab && cd ~/lab

1. ~/lab/proj ichida src, docs va tests kataloglarini bitta buyruq bilan yarating.
Misol: ls ~/lab/proj → docs src tests

Yechim

mkdir -p ~/lab/proj/{src,docs,tests}
-p oraliq kataloglarni ham yaratadi va katalog mavjud bo'lsa xato bermaydi. {a,b,c} — shell (brace expansion) kengaytmasi, mkdir o'zi buni ko'rmaydi.

2. Hozir qaysi katalogda turganingizni chiqaring.
Misol: /home/student/lab

Yechim
pwd

3. ~/lab/proj/README.md nomli bo'sh fayl yarating.
Misol: ls -l ~/lab/proj/README.md → hajmi 0

Yechim

touch ~/lab/proj/README.md
Fayl mavjud bo'lsa, touch uning vaqt tamg'asini yangilaydi, mazmunini o'zgartirmaydi.

4. ~/lab/proj dagi barcha fayllarni, yashirinlarini ham qo'shib, uzun formatda ko'rsating.
Misol: natijada . va .. yozuvlari ham ko'rinadi.

Yechim

ls -la ~/lab/proj
Nomi nuqta bilan boshlanadigan fayllar yashirin hisoblanadi; -a ularni ko'rsatadi.

5. /etc dagi fayllarni hajmi bo'yicha kattadan kichikka saralab, eng kattasi 5 tasini chiqaring.
Misol: birinchi qatorda eng katta fayl turadi.

Yechim

ls -lS /etc | head -n 6
head -n 6 — birinchi qator total ... bo'lgani uchun 6 ta qator olinadi.

6. Fayl hajmlarini odam o'qiy oladigan ko'rinishda (K, M, G) chiqaring.
Misol: 4.0K, 1.2M kabi.

Yechim
ls -lh /var/log

7. /var/log dagi fayllarni oxirgi o'zgarish vaqti bo'yicha saralang: eng yangisi birinchi.
Misol: eng oxirgi yozilgan log eng tepada.

Yechim

ls -lt /var/log
Teskari tartib uchun ls -ltr: eng yangisi oxirida turadi, uzun ro'yxatda qulay.

8. ~/lab/proj/src ni ~/lab/proj/src-backup nomi bilan nusxalang (ichidagilari bilan).
Misol: ls ~/lab/proj → docs src src-backup tests

Yechim

cp -r ~/lab/proj/src ~/lab/proj/src-backup
Katalog nusxalash uchun -r shart. Ruxsat va vaqtni saqlash kerak bo'lsa cp -a.

9. README.md ni README.txt ga qayta nomlang.
Misol: ls ~/lab/proj da README.txt bor, README.md yo'q.

Yechim

mv ~/lab/proj/README.md ~/lab/proj/README.txt
Linux'da alohida "rename" buyrug'i yo'q: nomni o'zgartirish ham mv.

10. README.txt ni docs katalogiga ko'chiring.
Misol: ls ~/lab/proj/docs → README.txt

Yechim
mv ~/lab/proj/README.txt ~/lab/proj/docs/

11. rmdir bilan bo'sh bo'lmagan docs ni o'chirishga urinib ko'ring. Qanday xabar chiqadi va nega?
Misol: rmdir: failed to remove '...': Directory not empty

Yechim

rmdir ~/lab/proj/docs
rmdir faqat bo'sh katalogni o'chiradi. Bu xavfsiz xatti-harakat: ichidagini tasodifan yo'qotmaysiz. Ichi bilan o'chirish uchun rm -r.

12. ~/lab/proj/src-backup ni ichidagilari bilan o'chiring, lekin avval nima o'chishini ko'rib oling.
Misol: o'chirishdan oldin ls bilan ro'yxat ko'rsatiladi.

Yechim
ls -R ~/lab/proj/src-backup
rm -r ~/lab/proj/src-backup

Ehtiyot bo'ling

rm -rf tasdiq so'ramaydi va o'chirilganni qaytarib bo'lmaydi. O'zgaruvchi bilan ishlaganda (rm -rf "$DIR/") $DIR bo'sh bo'lib qolsa, / ga aylanib ketishi mumkin. Avval ls yoki echo bilan yo'lni tekshiring.

13. /bin/ls qanday turdagi fayl ekanini aniqlang.
Misol: ELF 64-bit LSB pie executable, x86-64, ...

Yechim

file /bin/ls
file kengaytmaga emas, fayl mazmuniga qarab turini aniqlaydi. Linux'da .exe kabi kengaytma shart emas.

14. /etc/passwd va /bin/bash ning turlarini bitta buyruq bilan solishtiring.
Misol: birinchisi ASCII text, ikkinchisi ELF ... executable.

Yechim
file /etc/passwd /bin/bash

15. /etc/passwd ning dastlabki 5 qatorini chiqaring.
Misol: 5 ta qator, birinchisi root:x:0:0:...

Yechim
head -n 5 /etc/passwd

16. /etc/passwd ning oxirgi 3 qatorini chiqaring.
Misol: 3 ta qator (odatda eng oxirgi yaratilgan foydalanuvchilar).

Yechim
tail -n 3 /etc/passwd

17. Log faylga yangi qatorlar qo'shilishini jonli kuzating, so'ng to'xtating.
Misol: yangi qator paydo bo'lishi bilan ekranda ko'rinadi.

Yechim

sudo tail -f /var/log/syslog
To'xtatish: Ctrl+C. Fayl rotatsiya qilinganda (yangi fayl bilan almashtirilganda) tail -F ishonchliroq: u fayl nomini qayta ochadi.

18. /etc/passwd dagi qatorlar sonini toping.
Misol: 35 (sizda boshqa son bo'lishi mumkin).

Yechim

wc -l /etc/passwd
wc ning o'zi qator, so'z va bayt sonini beradi. Faqat sonni olish uchun: wc -l < /etc/passwd.

19. Uzun faylni sahifalab ko'ring, undan root so'zini qidiring va chiqing.
Misol: /root yozib Enter, keyin q.

Yechim

less /etc/passwd
less ichida: /so'z — oldinga qidirish, n — keyingi natija, q — chiqish. less faylni to'liq xotiraga yuklamaydi, shuning uchun katta loglar uchun cat dan yaxshi.

20. /etc/hostname mazmunini qator raqamlari bilan chiqaring.
Misol: 1 myserver

Yechim
cat -n /etc/hostname

21. ~/lab ichidagi barcha .txt fayllarni (ichki kataloglarda ham) toping.
Misol: /home/student/lab/proj/notes.txt

Yechim

find ~/lab -name "*.txt"
Andoza (*.txt) qo'shtirnoqda bo'lishi kerak, aks holda shell uni find ishga tushishidan oldin joriy katalogdagi fayllarga almashtirib yuboradi.

22. Butun tizimdan hajmi 100 MB dan katta oddiy fayllarni toping, "Permission denied" xatolarini ko'rsatmang.
Misol: /var/lib/... kabi yo'llar ro'yxati.

Yechim

sudo find / -xdev -type f -size +100M 2>/dev/null
-xdev boshqa fayl tizimlariga (/proc, /mnt) o'tmaydi. 2>/dev/null xato oqimini tashlab yuboradi.

23. ~/lab dagi 7 kundan beri o'zgarmagan fayllarni toping.
Misol: faqat eski fayllar chiqadi.

Yechim

find ~/lab -type f -mtime +7
-mtime +7 — 7 sutkadan ko'p oldin o'zgargan. -mtime -7 — oxirgi 7 sutkada o'zgargan.

24. ~/lab ichidagi .tmp fayllarni xavfsiz tarzda o'chiring: avval ro'yxatini ko'rib, keyin o'chiring.
Misol: ikkinchi buyruqdan keyin find ~/lab -name '*.tmp' hech narsa chiqarmaydi.

Yechim
find ~/lab -name '*.tmp' -type f -print
find ~/lab -name '*.tmp' -type f -delete

Ehtiyot bo'ling

-delete ni shartlardan oldin yozmang: find ~/lab -delete -name '*.tmp' hamma narsani o'chiradi, chunki find ifodani chapdan o'ngga baholaydi.

25. ls buyrug'i qaysi yo'lda joylashganini aniqlang, so'ng cd ning o'zi fayl yoki yo'qligini tekshiring.
Misol: ls uchun /usr/bin/ls; cd uchun cd is a shell builtin.

Yechim

command -v ls
type cd
cd shell'ning ichki buyrug'i: u alohida jarayon bo'lsa, joriy shell katalogini o'zgartira olmasdi.

26. ~/lab/a.txt yarating, unga bitta hard link va bitta symlink qiling. inode raqamlari bilan farqni ko'rsating.
Misol: a.txt va hard link bir xil inode'ga, symlink boshqasiga ega.

Yechim

echo "salom" > ~/lab/a.txt
ln ~/lab/a.txt ~/lab/a-hard.txt
ln -s ~/lab/a.txt ~/lab/a-sym.txt
ls -li ~/lab
Hard link — shu inode'ning ikkinchi nomi (a.txt o'chsa ham ma'lumot qoladi). Symlink — alohida fayl, ichida yo'l turadi.

27. Mavjud bo'lmagan faylga symlink yarating. Uni o'qishga urinib ko'ring va buzilgan symlink'larni topuvchi buyruq yozing.
Misol: cat: ...: No such file or directory; find buzilgan linkni chiqaradi.

Yechim

ln -s /yoq/fayl ~/lab/broken
cat ~/lab/broken
find ~/lab -xtype l
ls -l da link ko'rinadi, lekin cat xato beradi: link ko'rsatayotgan manzil yo'q. -xtype l — nishoni mavjud bo'lmagan symlink'lar.

28. Katalog bo'ylab yuring: /var/log ga o'ting, keyin bitta buyruq bilan oldingi katalogga qayting, so'ng uy katalogiga.
Misol: pwd ketma-ket /var/log, ~/lab (oldingi), /home/student.

Yechim

cd ~/lab
cd /var/log
cd -
cd ~
cd - oldingi katalogga qaytaradi (va uning yo'lini chiqaradi).

29. ~/lab da a1.txt…a9.txt va b1.log, b2.log fayllarini yarating. Wildcard bilan faqat a1–a3 ni, keyin .txt va .log ni birga ro'yxatlang.
Misol: a1.txt a2.txt a3.txt.

Yechim

cd ~/lab
touch a{1..9}.txt b{1,2}.log
ls a[1-3].txt
ls *.{txt,log}
[1-3] — bitta belgi, 1 dan 3 gacha. * — istalgan miqdordagi belgi. Barchasini shell kengaytiradi, ls tayyor ro'yxatni oladi.

30. stat bilan faylning uch xil vaqtini ko'rsating va Modify bilan Change farqini tushuntiring.
Misol: Access, Modify, Change qatorlari.

Yechim

stat ~/lab/a.txt
- Access — oxirgi o'qilgan vaqt. - Modify — mazmun oxirgi o'zgargan vaqt. - Change — metama'lumot (ruxsat, egasi, link soni) oxirgi o'zgargan vaqt. chmod qilsangiz Change yangilanadi, Modify o'zgarmaydi.