<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>SNRG py | Nematjon Shahobiddinov</title><generator>teletype.in</generator><description><![CDATA[&quot;Har bir lahza — bu yangi imkoniyatdir.
Agar bugun vaqtni to'g'ri ishlatsangiz, ertaga sizga foyda keltiradi.&quot;
]]></description><image><url>https://img1.teletype.in/files/46/1a/461a3018-47f5-4823-ac8c-e51dd6b592a3.png</url><title>SNRG py | Nematjon Shahobiddinov</title><link>https://teletype.in/@snrg_py</link></image><link>https://teletype.in/@snrg_py?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/snrg_py?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/snrg_py?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Wed, 13 May 2026 22:41:34 GMT</pubDate><lastBuildDate>Wed, 13 May 2026 22:41:34 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@snrg_py/YWLcMD5H3Fb</guid><link>https://teletype.in/@snrg_py/YWLcMD5H3Fb?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py</link><comments>https://teletype.in/@snrg_py/YWLcMD5H3Fb?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py#comments</comments><dc:creator>snrg_py</dc:creator><title>#hotkeys</title><pubDate>Thu, 30 Apr 2026 09:05:12 GMT</pubDate><description><![CDATA[“““ CTRL A dan Z gacha ”””]]></description><content:encoded><![CDATA[
  <p id="9h6w">“““ CTRL A dan Z gacha ”””</p>
  <p id="fupp"><strong>• Ctrl+A = Barchasini belgilash;  <br /></strong>• Ctrl+B = Matnni qalin qilish; <br /> <strong>• Ctrl+C = Matnni nusxalash;  <br /></strong>• Ctrl+D = Duplikat qilish (PowerPoint da obektlarni ikkitalash); <br /> • Ctrl+E = Matnni markazga joylash; <br /> <strong>• Ctrl+F = Izlash;  </strong>• Ctrl+G = Guruhlash (PowerPoint da); <br /> • Ctrl+H = O’rniga qo’yish (Word); <br /> • Ctrl+I = Kursiv yozish; <br /> • Ctrl+J = Matnni sahifa eni bo’yicha yoyish (Word); <br /> • Ctrl+K = Giper havola yaratish (Word, Telegram); <br /> • Ctrl+L = Matnni chapga joylash; <br /> • Ctrl+M = Yangi slayd (PowerPoint); <br /> • Ctrl+N = Yangi sahifa (ko’p dasturlarda); <br /> • Ctrl+O = Ochish (ko’p dasturlarda); <br /> • Ctrl+P = Chop etish (ko’p dasturlarda); <br /> • Ctrl+Q = Chiqib ketish (ko’p dasturlarda); <br /> • Ctrl+R = Matnni o’ngga joylash; .<br /> • Ctrl+S = Saqlash (ko’p dasturlarda); <br /> • Ctrl+T = Yangi vkladka ochish (Brouzerda); <br /> • Ctrl+U = Matnni ostiga chizish; <br /> <strong>• Ctrl+V = Joylash (Вставить) (ko’p dasturlarda);</strong> <br /> • Ctrl+W = Barcha oynalarni yopish (ko’p dasturlarda); <br /> • Ctrl+X = Ko’chirib olish (Вырезать) (ko’p dasturlarda); <br /> • Ctrl+Y = Oxirgi amalni qaytarish (Ctrl+Z ni teskarisi);<br /> <strong>• Ctrl+Z = Oxirgi amalni bekor qilish (ko’p dasturlarda).</strong></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@snrg_py/AZkDNR756f8</guid><link>https://teletype.in/@snrg_py/AZkDNR756f8?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py</link><comments>https://teletype.in/@snrg_py/AZkDNR756f8?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py#comments</comments><dc:creator>snrg_py</dc:creator><title>linux kundalik PRO</title><pubDate>Sat, 18 Apr 2026 01:31:45 GMT</pubDate><description><![CDATA[<img src="https://img4.teletype.in/files/f8/39/f8392b2e-994e-4d56-8598-eea7d4adc3fb.jpeg"></img>Terminaldan foydalanish Ushbu hujjatdagi misollar sizning POSIX-mos keluvchi (masalan: bash, sh, zsh, ksh) shell (qobiq) ishlatayotganingizni nazarda tutadi.]]></description><content:encoded><![CDATA[
  <h3 id="L5jK"><strong><a href="https://goalkicker.com/LinuxBook/" target="_blank">&quot;Linux: Professionallar uchun qaydlar&quot; </a>— Mundarija</strong></h3>
  <h4 id="2O1h"><strong>1-bob: GNU/Linux bilan ishlashni boshlash (Getting started)</strong></h4>
  <ul id="gdZp">
    <li id="CpFJ"><strong>1.1-bo&#x27;lim:</strong> Foydali qisqa tugmalar (Shortcuts).</li>
    <li id="OlFX"><strong>1.2-bo&#x27;lim:</strong> Fayllarni boshqarish buyruqlari (File Management).</li>
    <li id="FklQ"><strong>1.3-bo&#x27;lim:</strong> &quot;Hello World&quot; (Birinchi qadamlar).</li>
    <li id="DCYR"><strong>1.4-bo&#x27;lim:</strong> Linuxning asosiy utilitalari.</li>
    <li id="wXjv"><strong>1.5-bo&#x27;lim:</strong> Fayllarni nomi va tarkibi bo&#x27;yicha qidirish.</li>
    <li id="Bmtz"><strong>1.6-bo&#x27;lim:</strong> Fayllar ustida amallar (Manipulation).</li>
    <li id="2gcE"><strong>1.7-bo&#x27;lim:</strong> Fayl va kataloglar haqida batafsil ma&#x27;lumot (Details).</li>
  </ul>
  <h4 id="VazM"><strong>2-bob: Linux distributivi nomi va versiyasini aniqlash</strong></h4>
  <ul id="u0HN">
    <li id="Ckf7"><strong>2.1-bo&#x27;lim:</strong> Debian-ga asoslangan tizimlarni aniqlash.</li>
    <li id="YM0w"><strong>2.2-bo&#x27;lim:</strong> Systemd-ga asoslangan tizimlarni aniqlash.</li>
    <li id="YVMl"><strong>2.3-bo&#x27;lim:</strong> RHEL / CentOS / Fedora-ni aniqlash.</li>
  </ul>
  <h4 id="aS6o"><strong>3-bob: Linux yadrosi (Kernel) haqida ma&#x27;lumot olish</strong></h4>
  <h4 id="0Smx"><strong>4-bob: Shell (Buyruqlar qobig&#x27;i)</strong></h4>
  <ul id="SZ1V">
    <li id="AmJP"><strong>4.1-bo&#x27;lim:</strong> Standart shell&#x27;ni o&#x27;zgartirish.</li>
    <li id="bhal"><strong>4.2-bo&#x27;lim:</strong> Qaysi shell ishlatilayotganini aniqlash.</li>
    <li id="2O8o"><strong>4.3-bo&#x27;lim:</strong> Alias (buyruqlarga taxalluslar) yaratish.</li>
  </ul>
  <h4 id="gnKW"><strong>5-bob: Disk bo&#x27;shlig&#x27;ini tekshirish (Disk Space)</strong></h4>
  <ul id="bgWK">
    <li id="y53P"><strong>5.1-bo&#x27;lim:</strong> Kataloglarning diskdan foydalanishini tahlil qilish.</li>
    <li id="gk3J"><strong>5.2-bo&#x27;lim:</strong> Diskdagi bo&#x27;sh joyni ko&#x27;rish.</li>
  </ul>
  <h4 id="PYTc"><strong>6-bob: Inodlar (Inodes)</strong></h4>
  <h4 id="iJFd"><strong>7-bob: Foydalanuvchilar va guruhlar (Users and Groups)</strong></h4>
  <ul id="XvQY">
    <li id="bgIw"><strong>7.1-bo&#x27;lim:</strong> Foydalanuvchi qo&#x27;shish.</li>
    <li id="Imtc"><strong>7.2-bo&#x27;lim:</strong> Foydalanuvchini guruhga qo&#x27;shish.</li>
  </ul>
  <h4 id="I00Q"><strong>8-bob: Paket menejerlari (Package Managers)</strong></h4>
  <ul id="Om0T">
    <li id="QbCi"><code>apt</code>, <code>yum</code>, <code>dnf</code> va <code>rpm</code> tizimlari orqali dasturlarni boshqarish.</li>
  </ul>
  <h4 id="X4iM"><strong>9-bob: Tizim xizmatlari (Services)</strong></h4>
  <ul id="EneB">
    <li id="Ibel"><code>systemd</code> va <code>service</code> buyruqlari yordamida jarayonlarni boshqarish.</li>
  </ul>
  <h4 id="DkPQ"><strong>10-bob: Modullar (Kernel Modules)</strong></h4>
  <h4 id="MN5v"><strong>11-bob: Atrof-muhit o&#x27;zgaruvchilari (Environment Variables)</strong></h4>
  <h4 id="1bYa"><strong>12-bob: Kirish/Chiqishni yo&#x27;naltirish (I/O Redirection)</strong></h4>
  <ul id="mbit">
    <li id="4veJ"><code>&gt;</code>, <code>&gt;&gt;</code>, <code>|</code> (payplar) va xatoliklarni yo&#x27;naltirish.</li>
  </ul>
  <h4 id="eBPO"><strong>13-bob: Fayllarni ko&#x27;rish va tahrirlash (View/Edit Files)</strong></h4>
  <ul id="B15h">
    <li id="i9WN"><code>cat</code>, <code>less</code>, <code>nano</code>, <code>vi/vim</code> tahrirlagichlari.</li>
  </ul>
  <h4 id="zGY5"><strong>14-bob: Xavfsiz ulanish (SSH)</strong></h4>
  <ul id="QAfT">
    <li id="lZN4">Masofaviy serverlarga ulanish va sozlash.</li>
  </ul>
  <h4 id="kdmI"><strong>15-bob: Fayllarni tarmoq orqali nusxalash (SCP, Rsync)</strong></h4>
  <h4 id="83VB"><strong>16-bob: Tarmoq konfiguratsiyasi (Networking)</strong></h4>
  <ul id="GFtR">
    <li id="jL1J">IP manzillar, DNS va portlar bilan ishlash.</li>
  </ul>
  <h4 id="KmdQ"><strong>17-bob: Jarayonlarni boshqarish (Process Management)</strong></h4>
  <ul id="MKgk">
    <li id="SJZy"><code>top</code>, <code>htop</code>, <code>kill</code> va jarayonlarni fonda ishga tushirish.</li>
  </ul>
  <h4 id="1m0M"><strong>18-bob: Cron Jobs (Vazifalarni rejalashtirish)</strong></h4>
  <ul id="7VzQ">
    <li id="ALH9">Avtomatik va vaqtga sozlangan vazifalar.</li>
  </ul>
  <h4 id="GBkz"><strong>19-bob: Arxivlash va siqish (Tar, Gzip, Zip)</strong></h4>
  <h4 id="j7c2"><strong>20-bob: Shell Scripting (Skript yozish)</strong></h4>
  <ul id="VA9q">
    <li id="FrBN">O&#x27;zgaruvchilar, sikllar (loops) va shartlar (if-else).</li>
  </ul>
  <h4 id="Oj8p"><strong>21-bob: Tizim loglari (Logs)</strong></h4>
  <ul id="xVCy">
    <li id="xc0x"><code>/var/log</code> va <code>journalctl</code> yordamida xatoliklarni qidirish.</li>
  </ul>
  <hr />
  <p id="VhYH"></p>
  <h3 id="gtpY">1-bob: GNU/Linux bilan ishlashni boshlash</h3>
  <h4 id="3fx4">1.1-bo&#x27;lim: Foydali qisqa tugmalar (Useful shortcuts)</h4>
  <p id="C2XW"><strong>Terminaldan foydalanish</strong> Ushbu hujjatdagi misollar sizning POSIX-mos keluvchi (masalan: <code>bash</code>, <code>sh</code>, <code>zsh</code>, <code>ksh</code>) <strong>shell</strong> (qobiq) ishlatayotganingizni nazarda tutadi.</p>
  <p id="8neT">GNU/Linux funksionalligining katta qismi terminal orqali amalga oshiriladi. Aksariyat Linux distributivlari foydalanuvchilarga ish stoli muhitidan turib shell bilan muloqot qilish imkonini beruvchi <strong>terminal emulyatorlarini</strong> o&#x27;z ichiga oladi. <strong>Shell</strong> — bu foydalanuvchi tomonidan kiritilgan buyruqlarni bajaruvchi buyruqlar satri interpretatoridir. <strong>Bash</strong> (Bourne Again SHell) ko&#x27;plab Linux distributivlarida standart shell hisoblanadi (shuningdek, macOS&#x27;da ham).</p>
  <p id="WUK0">Agar siz Bash&#x27;ni standart <code>emacs</code> tugmalar birikmasi bilan ishlatayotgan bo&#x27;lsangiz, quyidagi qisqa tugmalar ishlaydi:</p>
  <p id="XqQX"><strong>Terminalni ochish:</strong></p>
  <ul id="YtBi">
    <li id="2NRQ"><code>Ctrl + Alt + T</code> yoki <code>Super + T</code> (Super tugmasi odatda Windows logotipi tushirilgan tugma).</li>
  </ul>
  <p id="Ah4J"><strong>Kursorni harakatlantirish:</strong></p>
  <ul id="HW2F">
    <li id="JDrO"><code>Ctrl + A</code>: Siz yozayotgan qatorning boshiga o&#x27;tish.</li>
    <li id="CrsP"><code>Ctrl + E</code>: Siz yozayotgan qatorning oxiriga o&#x27;tish.</li>
    <li id="OgmC"><code>Ctrl + XX</code>: Qatorning boshi va kursorning joriy holati o&#x27;rtasida tezkor almashish.</li>
    <li id="IJZ8"><code>Alt + F</code>: Kursorni bir so&#x27;z oldinga surish.</li>
    <li id="dHO4"><code>Alt + B</code>: Kursorni bir so&#x27;z orqaga surish.</li>
    <li id="sxbD"><code>Ctrl + F</code>: Kursorni bir belgi oldinga surish.</li>
    <li id="lREm"><code>Ctrl + B</code>: Kursorni bir belgi orqaga surish.</li>
  </ul>
  <p id="mr6P"><strong>Matn bilan ishlash (Text manipulation):</strong></p>
  <ul id="5roZ">
    <li id="uq99"><code>Ctrl + U</code>: Kursordan qator boshigacha bo&#x27;lgan qismni kesib oladi va almashuv buferiga (clipboard) saqlaydi. Agar kursor qator oxirida bo&#x27;lsa, butun qatorni kesadi.</li>
    <li id="1MPP"><code>Ctrl + K</code>: Kursordan qator oxirigacha bo&#x27;lgan qismni kesib oladi.</li>
    <li id="Q0JY"><code>Ctrl + W</code>: Kursordan oldingi so&#x27;zni o&#x27;chiradi va buferga saqlaydi.</li>
    <li id="mRUH"><code>Ctrl + Y</code>: Oxirgi kesib olingan matnni kursordan keyin joylashtiradi (past).</li>
    <li id="eY4E"><code>Alt + T</code>: Kursordan oldingi oxirgi ikki so&#x27;zning o&#x27;rnini almashtiradi.</li>
    <li id="9MBj"><code>Alt + L</code>: Kursordan so&#x27;z oxirigacha bo&#x27;lgan harflarni kichik (lowercase) qiladi.</li>
    <li id="t56J"><code>Alt + U</code>: Kursordan so&#x27;z oxirigacha bo&#x27;lgan harflarni KATTA (uppercase) qiladi.</li>
    <li id="4iLj"><code>Alt + C</code>: Kursordan boshlab so&#x27;z oxirigacha bosh harfga aylantiradi.</li>
    <li id="NDS8"><code>Alt + D</code>: Kursordan so&#x27;z oxirigacha o&#x27;chiradi.</li>
    <li id="zrLg"><code>Alt + .</code>: Oldingi buyruqda ishlatilgan oxirgi so&#x27;zni chiqaradi.</li>
    <li id="7uy7"><code>Ctrl + T</code>: Kursordan oldingi oxirgi ikki belgining o&#x27;rnini almashtiradi.</li>
  </ul>
  <p id="dmiD"><strong>Tarixga (History) kirish:</strong></p>
  <ul id="gVpc">
    <li id="SDLV"><code>Ctrl + R</code>: Avval ishlatilgan buyruqlar orasidan qidirish.</li>
    <li id="hDf9"><code>Ctrl + G</code>: Buyruqni bajarmasdan qidiruv rejimidan chiqish.</li>
    <li id="pv38"><code>Ctrl + J</code>: Qidiruvda topilgan buyruqni ishga tushirmasdan tahrirlash uchun terminalga nusxalaydi.</li>
    <li id="FH0l"><code>Alt + R</code>: Agar tarixdan olingan buyruq tahrirlangan bo&#x27;lsa, o&#x27;zgarishlarni bekor qilib asliga qaytaradi.</li>
    <li id="345N"><code>Ctrl + P</code>: Oldingi bajarilgan buyruqni ko&#x27;rsatadi (Yuqoriga yo&#x27;nalish tugmasi kabi).</li>
    <li id="cirq"><code>Ctrl + N</code>: Keyingi bajarilgan buyruqni ko&#x27;rsatadi (Pastga yo&#x27;nalish tugmasi kabi).</li>
  </ul>
  <p id="QUDE"><strong>Terminalni boshqarish:</strong></p>
  <ul id="0Iec">
    <li id="MNf7"><code>Ctrl + L</code>: Ekranni tozalaydi (<code>clear</code> buyrug&#x27;i kabi).</li>
    <li id="FEcM"><code>Ctrl + S</code>: Ekrandagi ma&#x27;lumotlar chiqishini to&#x27;xtatadi. Bu juda uzun natija beruvchi buyruqlarni o&#x27;qishda foydali, lekin buyruqning o&#x27;zini to&#x27;xtatmaydi.</li>
    <li id="BGys"><code>Ctrl + Q</code>: <code>Ctrl + S</code> bilan to&#x27;xtatilgan chiqishni davom ettiradi.</li>
    <li id="ZU2o"><code>Ctrl + C</code>: Joriy ishlayotgan jarayonni yakunlaydi.</li>
    <li id="hlhh"><code>Ctrl + D</code>: Joriy shell sessiyasidan chiqadi (<code>exit</code> yoki <code>logout</code> kabi). Ba&#x27;zida &quot;Fayl oxiri&quot; (EOF) signali sifatida ishlaydi.</li>
    <li id="Z7az"><code>Ctrl + Z</code>: Oldingi plandagi (foreground) jarayonni vaqtincha to&#x27;xtatadi (pause). Shundan so&#x27;ng <code>bg</code> buyrug&#x27;i bilan uni fonda davom ettirish yoki <code>fg</code> bilan yana oldinga qaytarish mumkin. <code>jobs</code> buyrug&#x27;i barcha fon jarayonlarini ko&#x27;rsatadi.</li>
    <li id="GlH4"><code>Tab</code>: Fayl va katalog nomlarini avtomatik to&#x27;ldiradi.</li>
    <li id="lzR8"><code>Tab + Tab</code>: Agar bir nechta o&#x27;xshash nomlar bo&#x27;lsa, barcha variantlarni ko&#x27;rsatadi.</li>
  </ul>
  <p id="xqFf"><strong>Maxsus belgilar:</strong></p>
  <ul id="XS0B">
    <li id="3qtC"><code>Ctrl + H</code>: <code>Backspace</code> vazifasini bajaradi.</li>
    <li id="Y5Eo"><code>Ctrl + I</code>: <code>Tab</code> vazifasini bajaradi.</li>
    <li id="DZjO"><code>Ctrl + G</code>: Qo&#x27;ng&#x27;iroq (Bell) belgisi.</li>
    <li id="9ICh"><code>Esc</code>: <code>Alt</code> tugmasining o&#x27;rnini bosuvchi o&#x27;lik tugma (Deadkey).</li>
  </ul>
  <p id="FjC9"><strong>Terminalni yopish:</strong></p>
  <ul id="qKtF">
    <li id="flev"><code>Ctrl + Shift + W</code>: Terminal tabini yopish.</li>
    <li id="uPAt"><code>Ctrl + Shift + Q</code>: Butun terminal oynasini yopish.</li>
  </ul>
  <p id="COEC"><em>Eslatma: Xohishingizga ko&#x27;ra, <code>set -o vi</code> buyrug&#x27;i orqali <code>vi</code> tugmalar birikmasiga o&#x27;tishingiz mumkin. <code>emacs</code> rejimiga qaytish uchun <code>set -o emacs</code> yoziladi.</em></p>
  <p id="UPF5"></p>
  <p id="0l0F"></p>
  <h3 id="jRVm">1.2-bo&#x27;lim: Fayllarni boshqarish buyruqlari (File Management Commands)</h3>
  <p id="Q5AE">Linux tizimida joriy va yuqori (ota) kataloglar uchun maxsus belgilashlar mavjud. Bu yangi o&#x27;rganuvchilar uchun biroz tushunarsiz tuyulishi mumkin.</p>
  <p id="g2ss">Linux terminalida ishlaganingizda, siz doimo <strong>joriy ishchi katalogda</strong> (current working directory) bo&#x27;lasiz. Terminaldagi buyruqlar satri (prompt) sizga to&#x27;liq manzilni yoki faqat joriy papka nomini ko&#x27;rsatishi mumkin. Masalan:</p>
  <ul id="dZSv">
    <li id="ZSC4"><code>user@host ~/somedir $</code></li>
    <li id="BeN2"><code>user@host /home/user/somedir $</code>Bu yerda joriy ishchi katalog <code>/home/user/somedir</code> hisoblanadi.</li>
  </ul>
  <p id="dMeI"><strong>Muhim belgilar:</strong></p>
  <ul id="Kb59">
    <li id="h3Sz"><code>..</code> (ikki nuqta) — ota (yuqori) katalogni bildiradi.</li>
    <li id="iJwi"><code>.</code> (bir nuqta) — joriy katalogni bildiradi.</li>
  </ul>
  <hr />
  <h4 id="6Ak0">Kataloglar bo&#x27;ylab harakatlanish (Directory navigation)</h4>
  <p id="BrOl"><strong>Buyruq</strong></p>
  <p id="68j6"><strong>Vazifasi (Utility)</strong></p>
  <p id="lSKM"><code>pwd</code></p>
  <p id="x1Io">Joriy ishchi katalogning to&#x27;liq manzini olish.</p>
  <p id="kOzB"><code>cd -</code></p>
  <p id="0N6Z">Oxirgi marta ishlagan katalogga qaytish.</p>
  <p id="K9ni"><code>cd ~</code> yoki shunchaki <code>cd</code></p>
  <p id="M8fM">Joriy foydalanuvchining shaxsiy (home) katalogiga o&#x27;tish.</p>
  <p id="c9eG"><code>cd ..</code></p>
  <p id="TcOG">Joriy katalogning ota katalogiga (bir pog&#x27;ona yuqoriga) o&#x27;tish (<code>cd</code> va <code>..</code> orasida bo&#x27;sh joy bo&#x27;lishi shart).</p>
  <hr />
  <h4 id="HBw3">Katalog ichidagi fayllarni ko&#x27;rish (Listing files)</h4>
  <p id="kev6"><strong>Buyruq</strong></p>
  <p id="llcv"><strong>Vazifasi (Utility)</strong></p>
  <p id="oNlZ"><code>ls -l</code></p>
  <p id="Ra76">Fayl va kataloglarni uzun (jadval) formatda chiqarish. O&#x27;qishga qulayligi uchun <code>-l</code> opsiyasidan foydalanish tavsiya etiladi.</p>
  <p id="yWn2"><code>ls -ld dir-name</code></p>
  <p id="K2hz">Katalog ichidagi ma&#x27;lumotlarni emas, balki <code>dir-name</code> katalogining o&#x27;zi haqidagi ma&#x27;lumotlarni chiqaradi.</p>
  <p id="tKQ2"><code>ls -a</code></p>
  <p id="KitB">Barcha fayllarni, shu jumladan yashirin fayllarni ham ko&#x27;rsatadi (Linuxda nomi <code>.</code> bilan boshlanadigan fayllar yashirin hisoblanadi).</p>
  <p id="WP7X"><code>ls -F</code></p>
  <p id="C4Wi">Fayl nomining oxiriga uning turini bildiruvchi belgi qo&#x27;shadi (<code>*</code> — ishga tushiriladigan, <code>/</code> — katalog, <code>@</code> — simvolik havola).</p>
  <p id="11nU"><code>ls -lt</code></p>
  <p id="5xyX">Oxirgi o&#x27;zgartirilgan vaqti bo&#x27;yicha saralaydi (eng yangilari yuqorida).</p>
  <p id="oQRd"><code>ls -lh</code></p>
  <p id="Urpm">Fayl o&#x27;lchamlarini odam tushunadigan formatda (KB, MB, GB) ko&#x27;rsatadi.</p>
  <p id="5x36"><code>ls -lR</code></p>
  <p id="5mll">Barcha ichki kataloglarni rekursiv ravishda ko&#x27;rsatadi.</p>
  <p id="nkFX"><code>tree</code></p>
  <p id="MapQ">Fayl tizimining joriy katalogdan boshlab daraxtsimon ko&#x27;rinishini hosil qiladi.</p>
  <hr />
  <h4 id="jf7u">Fayl/katalog yaratish, nusxalash va o&#x27;chirish</h4>
  <p id="H2Dc"><strong>Buyruq</strong></p>
  <p id="65Ju"><strong>Vazifasi (Utility)</strong></p>
  <p id="bhDt"><code>cp -p source destination</code></p>
  <p id="Zqwa">Faylni nusxalaydi. <code>-p</code> opsiyasi faylning asl atributlarini (egasi, vaqti, huquqlari) saqlab qoladi.</p>
  <p id="uYVh"><code>cp -R source_dir destination_dir</code></p>
  <p id="WLaW">Berilgan katalogni rekursiv ravishda (ichidagi hamma narsasi bilan) nusxalaydi.</p>
  <p id="PZPF"><code>mv file1 file2</code></p>
  <p id="NCcs">Linuxda alohida nom o&#x27;zgartirish buyrug&#x27;i yo&#x27;q. Shuning uchun <code>mv</code> faylni ko&#x27;chiradi yoki nomini o&#x27;zgartiradi.</p>
  <p id="CVun"><code>rm -i filename</code></p>
  <p id="rj0m">Faylni o&#x27;chirishdan oldin har safar tasdiqlash so&#x27;raydi. <strong>Yangi foydalanuvchilar uchun har doim <code>rm -i</code> ishlatish tavsiya etiladi.</strong></p>
  <p id="PA46"><code>rm -R dir-name</code></p>
  <p id="RkVZ"><code>dir-name</code> katalogini rekursiv ravishda o&#x27;chiradi.</p>
  <p id="taHG"><code>rm -rf dir-name</code></p>
  <p id="Ckah">Katalogni rekursiv o&#x27;chiradi, mavjud bo&#x27;lmagan fayllarni e&#x27;tiborsiz qoldiradi va hech qachon tasdiqlash so&#x27;ramaydi. <strong>BU BUYRUQNI ISHLATISHDA JUDA EHTIYOT BO&#x27;LING!</strong></p>
  <p id="1MrI"><code>rmdir dir-name</code></p>
  <p id="l8OY">Agar katalog bo&#x27;sh bo&#x27;lsa, uni o&#x27;chiradi.</p>
  <p id="xw1q"><code>mkdir dir-name</code></p>
  <p id="Oq2S"><code>dir-name</code> nomli yangi katalog yaratadi.</p>
  <p id="Ya0b"><code>mkdir -p dir-name/dir-name</code></p>
  <p id="jYMR">Kataloglar ierarhiyasini yaratadi. Agar ota kataloglar mavjud bo&#x27;lmasa, ularni ham bir yo&#x27;la yaratib ketadi.</p>
  <p id="7EL5"><code>touch filename</code></p>
  <p id="yTbq">Agar fayl mavjud bo&#x27;lmasa, uni yaratadi; agar mavjud bo&#x27;lsa, uning vaqtini joriy vaqtga yangilaydi.</p>
  <hr />
  <h4 id="2TYy">Fayl/katalog ruxsatlari va guruhlari</h4>
  <p id="eIEK"><strong>Buyruq</strong></p>
  <p id="wnDS"><strong>Vazifasi (Utility)</strong></p>
  <p id="PC8a"><code>chmod &lt;specs&gt; filename</code></p>
  <p id="NX1v">Fayl ruxsatlarini o&#x27;zgartiradi. Belgi: <code>u</code> - foydalanuvchi, <code>g</code> - guruh, <code>o</code> - boshqalar; <code>+</code> - qo&#x27;shish, <code>-</code> - olib tashlash; <code>r</code> - o&#x27;qish, <code>w</code> - yozish, <code>x</code> - bajarish.</p>
  <p id="R0f7"><code>chmod -R &lt;specs&gt; dir-name</code></p>
  <p id="qGoQ">Katalog va uning ichidagi barcha narsalarning ruxsatlarini rekursiv o&#x27;zgartiradi.</p>
  <p id="cK3d"><code>chmod go=+r myfile</code></p>
  <p id="4Hhx">Guruh (<code>g</code>) va boshqalar (<code>o</code>) uchun o&#x27;qish (<code>r</code>) ruxsatini qo&#x27;shadi.</p>
  <p id="0SYZ"><code>chmod a+rwx myfile</code></p>
  <p id="gH17">Barcha foydalanuvchilarga (<code>a</code>) o&#x27;qish, yozish va bajarish huquqini beradi.</p>
  <p id="ytyx"><code>chown owner1 filename</code></p>
  <p id="2VL6">Fayl egaligini <code>owner1</code> foydalanuvchisiga o&#x27;zgartiradi.</p>
  <p id="2ssG"><code>chgrp grp_owner filename</code></p>
  <p id="grHN">Faylning guruh egaligini <code>grp_owner</code> guruhiga o&#x27;zgartiradi.</p>
  <p id="hed3"><code>chgrp -R grp_owner dir-name</code></p>
  <p id="oXVb">Katalog va uning ichidagi barcha narsalarning guruh egaligini rekursiv o&#x27;zgartiradi.</p>
  <p id="ATgQ"></p>
  <p id="Sx5z"></p>
  <h3 id="jMIP">1.3-bo&#x27;lim: Hello World (Salom Dunyo)</h3>
  <p id="EwlO">Terminalga quyidagi kodni yozing va <strong>Enter</strong> tugmasini bosing:</p>
  <p id="eoQ5">Bash</p>
  <pre id="Yxfz" data-lang="bash">echo &quot;Hello World&quot;</pre>
  <p id="DZmQ">Bu buyruq quyidagi natijani chiqaradi:</p>
  <p id="5hta"><code>Hello World</code></p>
  <hr />
  <h3 id="91DQ">1.4-bo&#x27;lim: Linuxning asosiy utilitalari (Basic Linux Utilities)</h3>
  <p id="bfqt">Linuxda deyarli har qanday vazifa uchun maxsus buyruqlar mavjud bo&#x27;lib, ularning aksariyati mantiqiy va tushunish uchun oson.</p>
  <h4 id="bPx9">Linuxda yordam olish (Getting Help)</h4>
  <p id="bXCX">Akademik va professional muhitda buyruqlar haqida ma&#x27;lumot olishning eng samarali usullari:</p>
  <p id="rYVV"><strong>Buyruq</strong></p>
  <p id="hrUm"><strong>Foydalanish maqsadi (Usability)</strong></p>
  <p id="9rAZ"><code>man &lt;nom&gt;</code></p>
  <p id="6zcw"><code>&lt;nom&gt;</code> nomli dasturning qo&#x27;llanma (manual) sahifasini o&#x27;qish.</p>
  <p id="wy8I"><code>man &lt;bo&#x27;lim&gt; &lt;nom&gt;</code></p>
  <p id="Cz7u">Qo&#x27;llanmaning ma&#x27;lum bir bo&#x27;limiga tegishli qismini o&#x27;qish.</p>
  <p id="523o"><code>man -k &lt;kalit_so&#x27;z&gt;</code></p>
  <p id="nWAm">Qo&#x27;llanma sahifalarida <code>&lt;kalit_so&#x27;z&gt;</code> qatnashgan barcha dasturlarni chiqarish.</p>
  <p id="nj5F"><code>apropos &lt;so&#x27;z&gt;</code></p>
  <p id="h8DI">Tavsifi berilgan so&#x27;zga mos keladigan barcha ilovalarni ko&#x27;rsatadi (buyruq nomi esdan chiqqanda juda foydali).</p>
  <p id="ERb6"><code>whatis vim</code></p>
  <p id="xWj7"><code>vim</code> dasturi haqida qisqacha bir qatorli ta&#x27;rif beradi.</p>
  <p id="l53E"><code>&lt;buyruq&gt; --help</code></p>
  <p id="XABS">Dasturdan foydalanish bo&#x27;yicha ko&#x27;rsatmalarni chiqaradi. Ba&#x27;zan <code>-h</code> ham ishlaydi.</p>
  <p id="j2NJ"><code>info &lt;nom&gt;</code></p>
  <p id="r7sa">Dastur haqida kengaytirilgan ma&#x27;lumotlarni ko&#x27;rish.</p>
  <p id="CyT2"><code>help</code></p>
  <p id="Qv4A">Bash qobig&#x27;ida mavjud bo&#x27;lgan barcha ichki buyruqlar ro&#x27;yxatini ko&#x27;rsatadi.</p>
  <p id="3cWI"><strong>Paketlar bilan ishlash (Debian-ga asoslangan tizimlar uchun):</strong></p>
  <ul id="Q2es">
    <li id="uTPR"><code>dpkg -l</code>: Tizimga o&#x27;rnatilgan barcha paketlar ro&#x27;yxatini chiqaradi.</li>
    <li id="s3YR"><code>dpkg -L &lt;paket_nomi&gt;</code>: Berilgan paket tomonidan o&#x27;rnatilgan fayllar va ularning manzillarini ko&#x27;rsatadi.</li>
  </ul>
  <h4 id="wHq8">Foydalanuvchini aniqlash va Linux dunyosida &quot;Kim kim?&quot;</h4>
  <p id="Zafd"><strong>Buyruq</strong></p>
  <p id="ViS2"><strong>Vazifasi (Usability)</strong></p>
  <p id="XtvI"><code>hostname</code></p>
  <p id="AfXt">Tizimning tarmoqdagi nomini (hostname) ko&#x27;rsatadi.</p>
  <p id="zZYS"><code>hostname -f</code></p>
  <p id="rzlA">Tizimning to&#x27;liq domen nomini (FQDN) ko&#x27;rsatadi.</p>
  <p id="YeFb"><code>passwd</code></p>
  <p id="P7PY">Joriy foydalanuvchining parolini o&#x27;zgartirish.</p>
  <p id="BzGf"><code>whoami</code></p>
  <p id="1o0g">Terminalda ishlayotgan joriy foydalanuvchi nomini chiqaradi.</p>
  <p id="DMPL"><code>who</code></p>
  <p id="vzbD">Tizimga ayni damda kirgan barcha foydalanuvchilar ro&#x27;yxati.</p>
  <p id="OSe4"><code>w</code></p>
  <p id="8fHt">Tizim holati, vaqti, foydalanuvchilar va ularning nima ish qilayotgani haqida batafsil ma&#x27;lumot.</p>
  <p id="L2RW"><code>last</code></p>
  <p id="W9Ij">Tizimdan oxirgi marta kimlar foydalanganini ko&#x27;rsatadi.</p>
  <p id="VrxK"><code>last root</code></p>
  <p id="5YZp"><code>root</code> (administrator) foydalanuvchisi oxirgi marta qachon kirganini ko&#x27;rsatadi.</p>
  <p id="mzCZ"><code>lastb</code></p>
  <p id="fU1O">Tizimga kirishdagi barcha muvaffaqiyatsiz (shubhali) urinishlarni ko&#x27;rsatadi.</p>
  <hr />
  <h4 id="nhiZ">Jarayonlar bilan bog&#x27;liq ma&#x27;lumotlar (Process related information)</h4>
  <p id="Rudy">Jarayonlarni (processes) kuzatish tizim resurslarini boshqarish uchun muhimdir.</p>
  <p id="G2PA"><strong>Buyruq</strong></p>
  <p id="HB8E"><strong>Vazifasi (Usability)</strong></p>
  <p id="mz5s"><code>top</code></p>
  <p id="qY1R">Resurslarni eng ko&#x27;p iste&#x27;mol qilayotgan jarayonlarni doimiy yangilanib turadigan jadvalda ko&#x27;rsatadi. Chiqish uchun <code>q</code> tugmasi bosiladi.</p>
  <p id="MbRR"><code>ps</code></p>
  <p id="H0og">Joriy terminal sessiyasida ishlayotgan jarayonlarni ko&#x27;rsatadi.</p>
  <p id="Gr2d"><code>ps -u root</code></p>
  <p id="FNzu"><code>root</code> foydalanuvchisi tomonidan ishga tushirilgan barcha jarayonlar va buyruqlarni ko&#x27;rsatadi.</p>
  <p id="Ru4D"><code>ps aux</code></p>
  <p id="YgWW">Tizimdagi barcha foydalanuvchilarning barcha ishlayotgan jarayonlarini to&#x27;liq ro&#x27;yxat qiladi.</p>
  <p id="bb23"></p>
  <p id="ENro"></p>
  <h3 id="dnCp">1.5-bo&#x27;lim: Fayllarni nomi yoki tarkibidagi namunalar bo&#x27;yicha qidirish</h3>
  <p id="dh8S">Linux buyruqlar satri (shell) foydalanuvchilari uchun eng ko&#x27;p uchraydigan vazifalardan biri — ma&#x27;lum bir nomga ega bo&#x27;lgan yoki ichida maxsus matni bor fayl va kataloglarni qidirishdir. Buning uchun quyidagi ikki asosiy buyruqni yaxshi o&#x27;rganib olishingiz kerak:</p>
  <h4 id="N8Kg">Fayllarni nomi bo&#x27;yicha qidirish (<code>find</code>)</h4>
  <p id="BWCF">Bash</p>
  <pre id="XVUu">find /var/www -name &#x27;*.css&#x27;
</pre>
  <p id="zubD">Ushbu buyruq <code>/var/www</code> katalogi va uning ichidagi barcha quyi papkalardan <code>.css</code> bilan tugaydigan barcha fayllarning to&#x27;liq manzili va nomini chiqaradi. Natija namunasi:</p>
  <ul id="qpaM">
    <li id="3xjA"><code>/var/www/html/text-cursor.css</code></li>
    <li id="XikX"><code>/var/www/html/style.css</code></li>
  </ul>
  <p id="TBXz">Batafsil ma&#x27;lumot uchun: <code>man find</code></p>
  <h4 id="FnL7">Ichida matni bor fayllarni qidirish (<code>grep</code>)</h4>
  <p id="17KM">Bash</p>
  <pre id="aLIC">grep font /var/www/html/style.css
</pre>
  <p id="j6kB">Bu buyruq ko&#x27;rsatilgan fayl ichidan <code>font</code> namunasi (so&#x27;zi) qatnashgan barcha qatorlarni chiqaradi. Natija namunasi:</p>
  <ul id="dG5U">
    <li id="EsFP"><code>font-weight: bold;</code></li>
    <li id="gOkU"><code>font-family: monospace;</code></li>
  </ul>
  <p id="psid">Yana bir misol:</p>
  <p id="ChqG">Bash</p>
  <pre id="mSlT">grep font /var/www/html/
</pre>
  <p id="G0gt">Bu buyruq kutilganidek ishlamaydi va sizga quyidagi xatoni beradi:</p>
  <p id="L2JZ"><code>grep: /var/www/html/: Is a directory</code> (bu katalog ekanligini bildiradi).</p>
  <p id="AVYV">Buni to&#x27;g&#x27;ri bajarish uchun <code>-R</code> (rekursiv) opsiyasidan foydalanish kerak:</p>
  <p id="uUtV">Bash</p>
  <pre id="Uu5i">grep -R font /var/www/html/
</pre>
  <p id="iKjs">Natijada barcha ichki kataloglardagi fayllar ham tekshiriladi. E&#x27;tibor bering, agar <code>grep</code> bir nechta fayldan qidirsa, natija qaysi faylga tegishli ekanligini ko&#x27;rsatish uchun qator boshiga fayl nomini qo&#x27;shib qo&#x27;yadi. Agar bu nomlar kerak bo&#x27;lmasa, <code>-h</code> opsiyasini qo&#x27;shishingiz mumkin.</p>
  <p id="5RYD">Batafsil ma&#x27;lumot uchun: <code>man grep</code></p>
  <hr />
  <h3 id="olxt">1.6-bo&#x27;lim: Fayl manipulyatsiyasi (File Manipulation)</h3>
  <p id="M9oT">Fayllar va kataloglar Linuxning markazida turadi. Ularni buyruqlar satri orqali yaratish, ko&#x27;rish, ko&#x27;chirish va o&#x27;chirish juda muhim va kuchli ko&#x27;nikma hisoblanadi. Bu buyruqlar grafik fayl menejerlari (explorer) bajaradigan vazifalarni terminalda bajarish imkonini beradi.</p>
  <ul id="4ws0">
    <li id="m22E"><strong>Bo&#x27;sh matnli fayl yaratish (<code>myFile</code> nomli):</strong><code>touch myFile</code></li>
    <li id="o6rI"><strong>Fayl nomini o&#x27;zgartirish (<code>myFile</code> dan <code>myFirstFile</code> ga):</strong><code>mv myFile myFirstFile</code></li>
    <li id="R60y"><strong>Fayl tarkibini ko&#x27;rish:</strong><code>cat myFirstFile</code></li>
    <li id="SYWK"><strong>Fayl tarkibini sahifalab ko&#x27;rish (peydjer yordamida):</strong><code>less myFirstFile</code></li>
    <li id="OUNa"><strong>Faylning dastlabki bir necha qatorini ko&#x27;rish:</strong><code>head myFirstFile</code></li>
    <li id="rS44"><strong>Faylning oxirgi bir necha qatorini ko&#x27;rish:</strong><code>tail myFirstFile</code></li>
    <li id="beGj"><strong>Faylni tahrirlash:</strong><code>vi myFirstFile</code></li>
    <li id="PBBf"><strong>Joriy ishchi katalogdagi fayllarni ko&#x27;rish:</strong><code>ls</code></li>
    <li id="2bxP"><strong>Bo&#x27;sh katalog (papka) yaratish:</strong><code>mkdir myFirstDirectory</code></li>
    <li id="ezLV"><strong>Ko&#x27;p bosqichli yo&#x27;lga ega katalog yaratish:</strong><code>mkdir -p src/myFirstDirectory</code><em>(Bu buyruq bir vaqtning o&#x27;zida ham <code>src</code>, ham uning ichida <code>myFirstDirectory</code> papkalarini yaratadi).</em></li>
    <li id="OF0m"><strong>Faylni katalog ichiga ko&#x27;chirish:</strong><code>mv myFirstFile myFirstDirectory/</code></li>
    <li id="hWpJ"><strong>Joriy ishchi katalogni o&#x27;zgartirish (papkaga kirish):</strong><code>cd myFirstDirectory</code></li>
    <li id="RNwv"><strong>Faylni o&#x27;chirish:</strong><code>rm myFirstFile</code></li>
    <li id="OdrC"><strong>Ota katalogga (yuqoriga) qaytish:</strong><code>cd ..</code></li>
    <li id="esoc"><strong>Bo&#x27;sh katalogni o&#x27;chirish:</strong><code>rmdir myFirstDirectory</code></li>
    <li id="fOzy"><strong>Bo&#x27;sh bo&#x27;lmagan katalogni (ichida fayllari bor) o&#x27;chirish:</strong><code>rm -rf myFirstDirectory</code></li>
  </ul>
  <p id="rAVu"><strong>Eslatma:</strong> Kataloglarni o&#x27;chirishda <code>./</code> (joriy joy) va <code>/</code> (ildiz tizimi) belgilariga juda ehtiyot bo&#x27;ling. <code>/</code> belgisini noto&#x27;g&#x27;ri ishlatish butun fayl tizimingizni o&#x27;chirib yuborishi mumkin.</p>
  <h3 id="8uCS">1.7-bo&#x27;lim: Fayl va katalog tafsilotlari (File/Directory details)</h3>
  <p id="obdR"><code>ls</code> buyrug&#x27;i fayllar haqida ko&#x27;proq ma&#x27;lumot olish uchun birgalikda ishlatilishi mumkin bo&#x27;lgan bir nechta opsiyalarga ega.</p>
  <h4 id="8zyE">Tafsilotlar va Huquqlar (Details/Rights)</h4>
  <p id="LW08"><code>-l</code> opsiyasi fayl ruxsatlari (permissions), hajmi va oxirgi o&#x27;zgartirilgan sanasini ko&#x27;rsatadi. Masalan, joriy papkada <code>test</code> nomli katalog va <code>someFile.txt</code> fayli bo&#x27;lsa, <code>ls -l</code> buyrug&#x27;i quyidagicha natija beradi:</p>
  <p id="mTUh">Bash</p>
  <pre id="41T5">-rw-r--r-- 1 user users   70 Jul 22 13:36 someFile.txt
drwxrwxrwx 2 user users 4096 Jul 21 07:18 test
</pre>
  <p id="Vijr">Ruxsatlar <code>drwxrwxrwx</code> formatida ko&#x27;rsatiladi:</p>
  <ol id="CMX5">
    <li id="EBAT"><strong>Birinchi belgi:</strong> Fayl turini bildiradi. Agar u katalog (papka) bo&#x27;lsa <code>d</code>, aks holda <code>-</code> belgisi bo&#x27;ladi.</li>
    <li id="Lsgn"><strong>Keyingi uchta <code>rwx</code>:</strong> Fayl <strong>egasi</strong> (user) uchun ruxsatlar.</li>
    <li id="sDqk"><strong>Undan keyingi uchta <code>rwx</code>:</strong> Fayl a&#x27;zo bo&#x27;lgan <strong>guruh</strong> (group) uchun ruxsatlar.</li>
    <li id="zHmQ"><strong>Oxirgi uchta <code>rwx</code>:</strong> Qolgan <strong>barcha foydalanuvchilar</strong> (others) uchun ruxsatlar.</li>
  </ol>
  <p id="zTVr"><strong>Belgilarning ma&#x27;nosi:</strong></p>
  <ul id="m95d">
    <li id="l7Qc"><code>r</code> (read) — faylni o&#x27;qish mumkinligini bildiradi.</li>
    <li id="if3y"><code>w</code> (write) — faylni o&#x27;zgartirish (yozish) mumkinligini bildiradi.</li>
    <li id="cJiJ"><code>x</code> (execute) — faylni ishga tushirish (bajarish) mumkinligini bildiradi.</li>
    <li id="Hokq">Agar biror huquq berilmagan bo&#x27;lsa, tegishli harf o&#x27;rnida <code>-</code> belgisi turadi.</li>
  </ul>
  <p id="kzDR">Yuqoridagi misolda foydalanuvchi <code>someFile.txt</code>ni o&#x27;qiy oladi va o&#x27;zgartira oladi, lekin guruh faqat o&#x27;qish huquqiga ega.</p>
  <h4 id="adKQ">Huquqlarni o&#x27;zgartirish (<code>chmod</code>)</h4>
  <p id="Zn0C">Agar sizda <code>sudo</code> huquqi bo&#x27;lsa, <code>chmod ### fayl_nomi</code> buyrug&#x27;i orqali huquqlarni o&#x27;zgartirishingiz mumkin. Bunda:</p>
  <ul id="mGSv">
    <li id="NJfc"><code>r</code> (o&#x27;qish) = <strong>4</strong></li>
    <li id="O5rc"><code>w</code> (yozish) = <strong>2</strong></li>
    <li id="BNxQ"><code>x</code> (bajarish) = <strong>1</strong></li>
  </ul>
  <p id="EQ1x">Masalan, <code>test</code> katalogiga quyidagicha huquqlarni o&#x27;rnatmoqchi bo&#x27;lsangiz:</p>
  <ul id="gsr8">
    <li id="qnPn">Ega (Owner): <code>rwx</code> = 4+2+1 = <strong>7</strong></li>
    <li id="3YZG">Guruh (Group): <code>r-x</code> = 4+0+1 = <strong>5</strong></li>
    <li id="uknG">Boshqalar (Other): <code>r-x</code> = 4+0+1 = <strong>5</strong></li>
  </ul>
  <p id="LImT">Buyruq quyidagicha bo&#x27;ladi:</p>
  <p id="RGBJ">Bash</p>
  <pre id="iD5M">chmod 755 test
</pre>
  <h4 id="dqgo">O&#x27;qishga qulay hajm (Readable Size)</h4>
  <p id="TtZ2"><code>-l</code> bilan birga <code>-h</code> (human readable) opsiyasi qo&#x27;shilsa, fayl o&#x27;lchamlari KB, MB, GB ko&#x27;rinishida chiqariladi:</p>
  <p id="kluo">Bash</p>
  <pre id="P5t1">ls -lh
# Natija: 4.0K (4096 o&#x27;rniga)
</pre>
  <h4 id="3I3n">Yashirin fayllar (Hidden)</h4>
  <p id="i1NS">Yashirin fayllarni ko&#x27;rish uchun <code>-a</code> (all) opsiyasi ishlatiladi:</p>
  <p id="TUvb">Bash</p>
  <pre id="RkcH">ls -a
</pre>
  <p id="eRhR">Bu buyruq <code>.profile</code> kabi nuqta bilan boshlanadigan yashirin fayllarni ham ko&#x27;rsatadi.</p>
  <h4 id="wt9s">Katalog umumiy hajmi</h4>
  <p id="ra0M">Joriy katalogni umumiy hajmini ko&#x27;rish uchun <code>-s</code> opsiyasi ishlatiladi (ko&#x27;pincha <code>-h</code> bilan birga):</p>
  <p id="T5En">Bash</p>
  <pre id="HJRt">ls -sh
</pre>
  <h4 id="6deD">Rekursiv ko&#x27;rinish (Recursive View)</h4>
  <p id="xIuf">Agar katalog ichidagi barcha ichki papkalar va ularning ichidagi fayllarni ham bir yo&#x27;la ko&#x27;rmoqchi bo&#x27;lsangiz, <code>-R</code> (recursive) opsiyasidan foydalanasiz:</p>
  <p id="aiRI">Bash</p>
  <pre id="1npw">ls -R
</pre>
  <p id="w7oP">Bu buyruq butun ierarxiya bo&#x27;yicha &quot;daraxt&quot; ko&#x27;rinishidagi ro&#x27;yxatni chiqaradi.</p>
  <p id="BuBb"></p>
  <p id="yKt6"></p>
  <h3 id="G9jy">2-bob: Linux distributivi nomi va versiyasini aniqlash</h3>
  <p id="upZ6">Tizim administratorlari va dasturchilar uchun ishlayotgan operatsion tizimning aniq distributivi va versiyasini bilish juda muhimdir. Ushbu bo&#x27;limda turli tizim oilalarida ushbu ma&#x27;lumotlarni aniqlash usullari keltiriladi.</p>
  <hr />
  <h4 id="1SOR">2.1-bo&#x27;lim: Debian-ga asoslangan distributivlarni aniqlash (Debian, Ubuntu, Mint va boshqalar)</h4>
  <p id="Benr">Debian oilasidagi tizimlarda eng qulay va standart usul <code>lsb_release</code> buyrug&#x27;idan foydalanishdir.</p>
  <p id="jg0b"><strong>Buyruq:</strong></p>
  <p id="aIfX">Bash</p>
  <pre id="Rvgn">lsb_release -a
</pre>
  <p id="K2QY"><strong>Ubuntu tizimidagi natija namunasi:</strong></p>
  <ul id="B1ww">
    <li id="Rx1P"><code>Distributor ID: Ubuntu</code> — Distributiv nomi.</li>
    <li id="uuU4"><code>Description: Ubuntu 14.04.4 LTS</code> — To&#x27;liq tavsifi.</li>
    <li id="CLYT"><code>Release: 14.04</code> — Versiya raqami.</li>
    <li id="UgHp"><code>Codename: trusty</code> — Versiyaning kodli nomi.</li>
  </ul>
  <p id="TTjC">Agar tizimda <code>lsb_release</code> o&#x27;rnatilmagan bo&#x27;lsa, <code>/etc/issue</code> faylini tekshirib ko&#x27;rishingiz mumkin:</p>
  <p id="WNdn">Bash</p>
  <pre id="Dpiv">cat /etc/issue
</pre>
  <p id="TI9Y"><em>Muhim eslatma:</em> <code>/etc/debian_version</code> faylidan foydalanmang, chunki uning tarkibi har doim ham distributivning to&#x27;liq nomiga mos kelmasligi mumkin.</p>
  <hr />
  <h4 id="37bc">2.2-bo&#x27;lim: Systemd-ga asoslangan zamonaviy distributivlarni aniqlash</h4>
  <p id="GZXU">Bu usul zamonaviy Linux tizimlarining deyarli barchasida (Arch, CentOS, Debian, Fedora, Red Hat, Ubuntu va boshqalar) ishlaydi. Buning uchun <code>/etc/os-release</code> faylidagi o&#x27;zgaruvchilarni tahlil qilish kerak.</p>
  <p id="4sJo"><strong>Asosiy o&#x27;zgaruvchilar:</strong></p>
  <ul id="ETg6">
    <li id="Dp38"><code>NAME</code>, <code>VERSION</code>, <code>ID</code>, <code>PRETTY_NAME</code>.</li>
  </ul>
  <p id="T6kE"><strong>Fedora tizimida ushbu fayl ko&#x27;rinishi:</strong></p>
  <p id="0RdU">Plaintext</p>
  <pre id="q6ya">NAME=Fedora
VERSION=&quot;24 (Workstation Edition)&quot;
ID=fedora
PRETTY_NAME=&quot;Fedora 24 (Workstation Edition)&quot;
</pre>
  <p id="xYCe"><strong>Bash qobig&#x27;ida ushbu fayldan to&#x27;g&#x27;ridan-to&#x27;g&#x27;ri foydalanish:</strong></p>
  <p id="4MjW">Skriptlar ichida ma&#x27;lumotni tezkor olish uchun quyidagi usul qo&#x27;llaniladi:</p>
  <p id="zCOH">Bash</p>
  <pre id="Af3f">( source /etc/os-release &amp;&amp; echo &quot;$PRETTY_NAME&quot; )
</pre>
  <hr />
  <h4 id="tEOn">2.3-bo&#x27;lim: RHEL / CentOS / Fedora distributivlarini aniqlash</h4>
  <p id="C11y">Red Hat oilasiga mansub tizimlarda distributiv haqidagi ma&#x27;lumotni maxsus reliz faylidan olish mumkin:</p>
  <p id="3new"><strong>Buyruq:</strong></p>
  <p id="g9Y7">Bash</p>
  <pre id="xLT2">cat /etc/redhat-release
</pre>
  <p id="cG6S"><strong>Natija:</strong> <code>Fedora release 24 (Twenty Four)</code></p>
  <p id="usgB">Shuningdek, ushbu tizimlarda ham <code>lsb_release -a</code> buyrug&#x27;i (agar o&#x27;rnatilgan bo&#x27;lsa) to&#x27;liq ma&#x27;lumot beradi.</p>
  <hr />
  <h4 id="KhEn">2.4-bo&#x27;lim: Uname — joriy tizim haqida ma&#x27;lumot chiqarish</h4>
  <p id="C7Eu"><code>uname</code> (Unix Name so&#x27;zining qisqartmasi) buyrug&#x27;i operatsion tizim va yadro (kernel) haqida texnik ma&#x27;lumotlarni taqdim etadi.</p>
  <p id="yvhT"><strong>Umumiy sintaksis:</strong></p>
  <p id="iStH"><code>uname [OPTION]</code></p>
  <p id="zFhm"><strong>Asosiy opsiyalar va ularning vazifasi:</strong></p>
  <p id="wrJs"><strong>Opsiya</strong></p>
  <p id="9Zbb"><strong>Vazifasi (Utility)</strong></p>
  <p id="ETW0"><code>-s</code></p>
  <p id="omME">Yadro nomini chiqaradi (Kernel name).</p>
  <p id="XAhV"><code>-n</code></p>
  <p id="0gNW">Tarmoqdagi xost nomini chiqaradi (Hostname).</p>
  <p id="5TST"><code>-r</code></p>
  <p id="ZKZ0">Yadro relizini ko&#x27;rsatadi (Kernel release).</p>
  <p id="9ecV"><code>-v</code></p>
  <p id="FSTY">Yadro versiyasini ko&#x27;rsatadi.</p>
  <p id="63wU"><code>-m</code></p>
  <p id="DykB">Apparat ta&#x27;minoti nomini (arxitekturani) ko&#x27;rsatadi (Machine hardware).</p>
  <p id="j0mM"><code>-a</code></p>
  <p id="iZG2"><strong>Barcha ma&#x27;lumotlarni</strong> birgalikda chiqaradi.</p>
  <p id="DEtv"><code>-o</code></p>
  <p id="1wM8">Operatsion tizim nomini chiqaradi.</p>
  <p id="ZfIB"><strong>Misol:</strong></p>
  <p id="LazD">Bash</p>
  <pre id="uvpx">uname -a
# Natija namunasi: Linux hope 5.4.0-42-generic x86_64 GNU/Linux
</pre>
  <p id="s4Wj"></p>
  <p id="qL20"></p>
  <h3 id="2giO">2.5-bob: Distributiv haqida asosiy ma&#x27;lumotlarni aniqlash</h3>
  <p id="Ii8p">Tizim haqida tezkor va umumiy ma&#x27;lumot olish uchun <code>uname -a</code> buyrug&#x27;idan foydalaniladi.</p>
  <p id="dQ8o"><strong>Arch Linux tizimidagi misol:</strong></p>
  <p id="Ws6c">Bash</p>
  <pre id="BnQ9">$ uname -a
Linux nokia 4.6.4-1-ARCH #1 SMP PREEMPT Mon Jul 11 19:12:32 CEST 2016 x86_64 GNU/Linux
</pre>
  <hr />
  <h3 id="qkGH">2.6-bob: GNU Coreutils&#x27;dan foydalanish</h3>
  <p id="bL8n"><strong>GNU coreutils</strong> barcha Linux tizimlarida mavjud bo&#x27;lgan asosiy vositalar to&#x27;plamidir. Agar siz qaysi tizimda ekanligingizni bilmasangiz, bu buyruq siz uchun birinchi qadam bo&#x27;lishi kerak.</p>
  <p id="m3VX"><strong>Buyruq:</strong> <code>uname -a</code></p>
  <p id="2d4I"><strong>Natija tahlili (misol tariqasida):</strong></p>
  <p id="bpLO"><code>Linux Scibearspace 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt25-2+deb8u3 (2016-07-02) x86_64 GNU/Linux</code></p>
  <p id="GC1e">Bu ma&#x27;lumotlar quyidagilarni anglatadi:</p>
  <ul id="WtQk">
    <li id="tWri"><strong>Scibearspace</strong>: Kompyuterning tarmoqdagi nomi (hostname).</li>
    <li id="P7Uu"><strong>3.16.0-4-amd64</strong>: Yadro (kernel) versiyasi va tizim arxitekturasi.</li>
    <li id="F55L"><strong>SMP Debian 3.16.7...</strong>: Bu tizim <strong>Debian</strong> ekanligini va 3.16 yadrosida ishlayotganini bildiradi.</li>
    <li id="9AlU"><strong>Oxirgi qism</strong>: Tizim Debian 8 (3-yangilanish) ekanligini ko&#x27;rsatmoqda.</li>
  </ul>
  <hr />
  <h3 id="bPLc">2.7-bob: Linux OT nomi va reliz raqamini topish (Debian va RPM)</h3>
  <p id="rewD">Aksariyat Linux distributivlari o&#x27;z versiya ma&#x27;lumotlarini <code>/etc/lsb-release</code> (Debian oilasi uchun) yoki <code>/etc/redhat-release</code> (RPM oilasi uchun) fayllarida saqlaydi.</p>
  <p id="NRuf">Quyidagi universal buyruq yordamida ko&#x27;plab Debian va RPM hosilalari (masalan, Linux Mint va CentOS) haqida ma&#x27;lumot olishingiz mumkin:</p>
  <p id="5oo2"><strong>Universal buyruq:</strong></p>
  <p id="jQmO">Bash</p>
  <pre id="YuGN">cat /etc/*release
</pre>
  <p id="EwhC"><strong>Ubuntu tizimidagi natija namunasi:</strong></p>
  <p id="ascu">Plaintext</p>
  <pre id="TxOQ">DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION=&quot;Ubuntu 14.04 LTS&quot;
</pre>
  <hr />
  <h3 id="OoI0"></h3>
  <p id="oeDs"></p>
  <h3 id="YpWi">3-bob: Ishlab turgan Linux yadrosi (Kernel) haqida ma&#x27;lumot olish</h3>
  <p id="ovG6">Linux yadrosi operatsion tizimning yuragi bo&#x27;lib, u apparat ta&#x27;minoti va dasturiy ta&#x27;minot o&#x27;rtasidagi barcha amallarni boshqaradi. Ushbu bobda yadroning joriy holati va parametrlari haqida ma&#x27;lumot olish usullari bayon qilingan.</p>
  <h4 id="J8CY">3.1-bo&#x27;lim: Linux yadrosi tafsilotlarini aniqlash</h4>
  <p id="crCO">Ishlab turgan yadro haqida to&#x27;liq ma&#x27;lumot olish uchun <code>uname</code> buyrug&#x27;idan turli opsiyalar bilan foydalanishimiz mumkin.</p>
  <p id="Mzxe"><strong>Asosiy buyruq:</strong></p>
  <p id="nHOI">Bash</p>
  <pre id="fHE9">uname -a
</pre>
  <p id="rSHf"><strong>Natija namunasi:</strong></p>
  <p id="vPaQ"><code>Linux df1-ws-5084 4.4.0-64-generic #85-Ubuntu SMP Mon Feb 20 11:50:30 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux</code></p>
  <h4 id="FFmK"><code>uname</code> buyrug&#x27;ining qo&#x27;shimcha opsiyalari:</h4>
  <p id="Av3M">Sintaksis: <code>uname [OPTION]...</code></p>
  <p id="GXT3">Agar hech qanday opsiya berilmasa, u <code>-s</code> deb qabul qilinadi.</p>
  <p id="itDs"><strong>Opsiya</strong></p>
  <p id="llFx"><strong>Vazifasi (Academic Utility)</strong></p>
  <p id="FHJL"><code>-a, --all</code></p>
  <p id="OUmu">Barcha ma&#x27;lumotlarni tartib bilan chiqaradi (noma&#x27;lum bo&#x27;lsa <code>-p</code> va <code>-i</code> tashlab ketiladi).</p>
  <p id="6WTv"><code>-s, --kernel-name</code></p>
  <p id="hPe7">Yadroning nomini chiqaradi (odatda <code>Linux</code>).</p>
  <p id="J7sq"><code>-n, --nodename</code></p>
  <p id="MUEA">Tarmoqdagi xost nomini (hostname) ko&#x27;rsatadi.</p>
  <p id="M1SZ"><code>-r, --kernel-release</code></p>
  <p id="YLcB">Yadroning reliz raqamini chiqaradi (masalan: <code>4.4.0-64-generic</code>).</p>
  <p id="6Bv8"><code>-v, --kernel-version</code></p>
  <p id="2Iqn">Yadroning versiyasi va qachon yig&#x27;ilgani haqidagi ma&#x27;lumotni chiqaradi.</p>
  <p id="o8Za"><code>-m, --machine</code></p>
  <p id="GKWE">Kompyuterning apparat arxitekturasini ko&#x27;rsatadi (masalan: <code>x86_64</code>).</p>
  <p id="LUoV"><code>-p, --processor</code></p>
  <p id="l2sO">Protsessor turini ko&#x27;rsatadi (ba&#x27;zida &quot;unknown&quot; bo&#x27;lishi mumkin).</p>
  <p id="wfRP"><code>-i, --hardware-platform</code></p>
  <p id="jjJr">Apparat platformasini ko&#x27;rsatadi.</p>
  <p id="zpJF"><code>-o, --operating-system</code></p>
  <p id="dMk0">Operatsion tizim nomini chiqaradi (masalan: <code>GNU/Linux</code>).</p>
  <p id="FFrb"><code>--help</code></p>
  <p id="ZHah">Yordam xabarini chiqaradi va ishni to&#x27;xtatadi.</p>
  <p id="7Gd0"><code>--version</code></p>
  <p id="oEtT">Dastur versiyasini ko&#x27;rsatadi.</p>
  <h4 id="0VmL">Qo&#x27;shimcha ma&#x27;lumot (Akademik izoh):</h4>
  <p id="Gpa6">Linux yadrosi haqida ma&#x27;lumot olishning yana bir usuli <code>/proc</code> virtual fayl tizimidan foydalanishdir. Masalan, quyidagi buyruq ham <code>uname -a</code> kabi batafsil ma&#x27;lumot beradi:</p>
  <p id="3v3E">Bash</p>
  <pre id="wlLb">cat /proc/version
</pre>
  <p id="Wb0Y">Ushbu fayl yadro versiyasidan tashqari, uni yig&#x27;ish uchun ishlatilgan <strong>GCC</strong> kompyutori versiyasi haqida ham ma&#x27;lumotni o&#x27;z ichiga oladi.</p>
  <p id="YWgA"></p>
  <p id="Ntxm"></p>
  <p id="o6Sj"><strong>Buyruq (Tugmalar)</strong></p>
  <p id="ZksU"><strong>Vazifasi (Utility)</strong></p>
  <p id="LqEf"><code>Ctrl + K</code></p>
  <p id="9pKD">Kursordan keyingi matnni kesib olish (cut/kill).</p>
  <p id="CGjO"><code>Ctrl + Y</code></p>
  <p id="XkCO">Kesib olingan matnni joylashtirish (yank/paste).</p>
  <p id="NUE6"><code>Ctrl + A</code></p>
  <p id="8wjy">Kursorni qatorning boshiga olib boradi.</p>
  <p id="48ZS"><code>Ctrl + E</code></p>
  <p id="gDvd">Kursorni qatorning oxiriga olib boradi.</p>
  <p id="lHmG"><code>Ctrl + D</code></p>
  <p id="PcG4">Kursordan keyingi yoki kursor turgan belgini o&#x27;chiradi.</p>
  <p id="luci"><code>Ctrl + L</code></p>
  <p id="3RUG">Ekranni/terminalni tozalaydi.</p>
  <p id="5LxM"><code>Ctrl + U</code></p>
  <p id="ZaJg">Buyruq satri va kursor orasidagi barcha narsani o&#x27;chiradi.</p>
  <p id="smTA"><code>Ctrl + _</code></p>
  <p id="S1L7">Buyruqlar satrida yozilgan oxirgi amalni bekor qiladi (undo).</p>
  <p id="vyVr"><code>Ctrl + C</code></p>
  <p id="JexP">Oldingi planda ishlayotgan jarayonni (process) to&#x27;xtatadi.</p>
  <p id="yuEz"><code>Ctrl + R</code></p>
  <p id="cGgr">Buyruqlar tarixidan (history) teskari qidiruv.</p>
  <p id="iZIF"><code>~/.bash_history</code></p>
  <p id="8gg6">Shell-da ishlatilgan oxirgi 500 ta buyruq/hodisalarni saqlaydigan fayl.</p>
  <p id="IJK9"><code>history</code></p>
  <p id="4u9k">Buyruqlar tarixini ko&#x27;rsatadi.</p>
  <p id="d5yX"><code>history | grep &lt;so&#x27;z&gt;</code></p>
  <p id="DlTq">Tarixdan <code>&lt;so&#x27;z&gt;</code> kalit so&#x27;zi qatnashgan buyruqlarni topadi (o&#x27;tmishda ishlatilgan buyruqning bir qismini eslaganda juda foydali).</p>
  <p id="Zf52"></p>
  <p id="J3GM"></p>
  <p id="XV4l">Mana 4-bobning yakuniy qismlari va 5-bobning boshlanishi bo&#x27;yicha 100% to&#x27;liq akademik tarjima:</p>
  <hr />
  <h3 id="YxGg">4.3-bo&#x27;lim: Shaxsiy buyruq aliasini (taxallusi) yaratish</h3>
  <p id="H6y4">Agar siz bash-da uzun buyruqlarni qayta-qayta yozishdan charchagan bo&#x27;lsangiz, o&#x27;zingizning shaxsiy buyruq aliasingizni yaratishingiz mumkin.</p>
  <p id="CK8w">Buning eng yaxshi usuli uy papkangizdagi <code>.bash_aliases</code> deb nomlangan faylni tahrirlash (yoki u mavjud bo&#x27;lmasa, yaratish) hisoblanadi. Umumiy sintaksis quyidagicha:</p>
  <p id="lR9e"><code>alias buyruq_aliasi=&#x27;asl_buyruq&#x27;</code></p>
  <p id="ZxRv">Bu yerda <code>asl_buyruq</code> — siz nomini o&#x27;zgartirmoqchi bo&#x27;lgan buyruq, <code>buyruq_aliasi</code> esa siz unga bergan yangi nomdir.</p>
  <p id="wJPm"><strong>Masalan:</strong></p>
  <p id="FXzy"><code>alias install=&#x27;sudo apt-get -y install&#x27;</code></p>
  <p id="Vel8">Ushbu qator <code>install</code> yangi aliasini asl <code>sudo apt-get -y install</code> buyrug&#x27;iga biriktiradi. Bu shuni anglatadiki, terminalda <code>install</code> so&#x27;zini ishlatganingizda, bash buni <code>sudo apt-get -y install</code> sifatida talqin qiladi.</p>
  <hr />
  <h3 id="NH3u">4.4-bo&#x27;lim: Tizimingizda faylni joylashgan manzilini aniqlash</h3>
  <p id="wDlm">Bash yordamida <code>locate</code> buyrug&#x27;i orqali faylni osongina topishingiz mumkin. Masalan, deylik siz <code>mykey.pem</code> faylini qidiryapsiz:</p>
  <p id="Bau8"><code>locate mykey.pem</code></p>
  <p id="NQml">Ba&#x27;zan fayllar g&#x27;alati nomlarga ega bo&#x27;lishi mumkin, masalan: <code>random7897_mykey_0fidw.pem</code>. Agar siz ushbu faylni qidirayotgan bo&#x27;lsangiz-u, lekin faqat <code>mykey</code> va <code>pem</code> qismlarini eslasangiz, <code>locate</code> buyrug&#x27;ini <code>grep</code> bilan &quot;payp&quot; (<code>|</code>) orqali quyidagicha birlashtirishingiz mumkin:</p>
  <p id="rAGi"><code>locate pem | grep mykey</code></p>
  <p id="el1c">Bu usul tarkibida har ikkala qism mavjud bo&#x27;lgan barcha natijalarni chiqaradi.</p>
  <p id="LFZi"><strong>Eslatma:</strong> Hamma tizimlarda ham <code>locate</code> utilitasi o&#x27;rnatilmagan yoki yoqilmagan bo&#x27;lishi mumkin. <code>locate</code> juda tez va samarali ishlaydi, chunki u vaqti-vaqti bilan tizimingizni skanerlaydi va barcha fayllarning nomi hamda joylashuvini keshga (cache) saqlab qo&#x27;yadi. Agar ma&#x27;lumot yig&#x27;ish funksiyasi yoqilmagan bo&#x27;lsa, u sizga hech narsa topib bera olmaydi. Keshdagi ma&#x27;lumotlarni yangilash uchun <code>updatedb</code> buyrug&#x27;i yordamida fayl tizimini qo&#x27;lda skanerlashni ishga tushirishingiz mumkin.</p>
  <p id="PhNo">Agar <code>locate</code> ishlamasa, <code>find</code> utilitasidan foydalanishga to&#x27;g&#x27;ri keladi:</p>
  <p id="6CFF"><code>find / -name mykey.pem -print</code></p>
  <p id="12wU">Bu buyruq taxminan <code>locate mykey.pem</code> bilan bir xil vazifani bajaradi, lekin u keshdan foydalanish o&#x27;rniga har safar butun fayl tizimini skanerlab chiqadi. Bu tabiiyki sekinroq va kamroq samarali, lekin real vaqt rejimida aniqroqdir.</p>
  <hr />
  <h1 id="S7m9">5-bob: Disk bo&#x27;shlig&#x27;ini tekshirish</h1>
  <h3 id="AmAg">5.1-bo&#x27;lim: Kataloglarning diskdan foydalanishini tahlil qilish</h3>
  <p id="DlKs">Ba&#x27;zan qaysi katalog qancha disk joyini egallayotganini aniqlash talab etiladi, ayniqsa <code>df -h</code> buyrug&#x27;ini ishlatganingizdan so&#x27;ng diskda joy kam qolganini payqasangiz.</p>
  <h4 id="20vc">du (Disk Usage):</h4>
  <p id="JCIe"><code>du</code> buyrug&#x27;i fayllar to&#x27;plami va kataloglar uchun diskdan foydalanishni rekursiv ravishda umumlashtiradi. Odatda u <code>-sh</code> opsiyasi bilan ishlatiladi:</p>
  <ul id="zCVl">
    <li id="6d1e"><strong>-s, --summarize</strong>: har bir argument uchun faqat umumiy natijani ko&#x27;rsatish.</li>
    <li id="e5Vt"><strong>-h, --human-readable</strong>: o&#x27;lchamlarni odam tushunadigan formatda chiqarish (masalan, 1K, 234M, 2G).</li>
  </ul>
  <p id="0FJE">Joriy katalogdagi fayllarning diskdan foydalanishini umumlashtirish uchun:</p>
  <p id="JtWP"><code>du -sh *</code></p>
  <p id="QWlE"><strong>Yashirin fayllarni ham qo&#x27;shish uchun:</strong></p>
  <p id="9zSa"><code>du -sh .[!.]* *</code></p>
  <p id="cr47"><strong>Chiqish natijasiga umumiy yakuniy miqdorni (total) qo&#x27;shish uchun <code>-c</code> opsiyasi qo&#x27;shiladi:</strong></p>
  <p id="PqUJ"><code>du -sch .[!.]* *</code></p>
  <p id="vyrn">Eng muhimi, <code>du</code> buyrug&#x27;ini ildiz (root) katalogida to&#x27;g&#x27;ri ishlatish qaysi ilova, xizmat yoki foydalanuvchi disk joyini haddan tashqari ko&#x27;p egallayotganini topishda &quot;hayotni saqlab qoluvchi&quot; harakat hisoblanadi. Masalan, pochta serverida disk joyi keskin kamayib ketsa, bunga spam hujumi sabab bo&#x27;lgan bo&#x27;lishi mumkin va buni <code>du</code> yordamida aniqlash mumkin.</p>
  <p id="k1VP"><strong>Ildiz katalogini diskdan foydalanish bo&#x27;yicha tekshirish:</strong></p>
  <p id="WlJY"><code>sudo du -sch /.[!.]* /*</code></p>
  <p id="C5JC"><strong>Kataloglarni o&#x27;lcham chegarasi (threshold) bo&#x27;yicha saralash:</strong></p>
  <p id="zvLh">Oxirgi va eng samarali usul — kichik kataloglarni e&#x27;tiborsiz qoldirish uchun minimal chegara qiymatini qo&#x27;shishdir. Quyidagi buyruq ildiz katalogi ostidagi faqat 1GB dan katta bo&#x27;lgan papkalarni ko&#x27;rsatadi:</p>
  <p id="G812"><code>sudo du --threshold=1G -ch /.[!.]* /*</code></p>
  <p id="i2RG"><strong>Natija namunasi:</strong></p>
  <p id="E1zP">Plaintext</p>
  <pre id="8Eu7">1,4G    /usr/lib
1,8G    /usr/share
3,5G    /usr
5,8G    total
</pre>
  <p id="Mmqj"></p>
  <p id="IBId"></p>
  <p id="nkri"></p>
  <h3 id="t9wC">5.2-bo&#x27;lim: Disk bo&#x27;shlig&#x27;ini tekshirish (Checking Disk Space)</h3>
  <p id="IsXE">Serveringiz yoki kompyuteringizdagi turli bo&#x27;limlar (partition) va drayvlar holatini, ularning qanchalik to&#x27;lganini tekshirish juda keng tarqalgan vazifadir. Buning uchun quyidagi buyruqni ishga tushirishingiz kerak:</p>
  <p id="Oqey"><code>df -h</code></p>
  <p id="XJYO">Ushbu buyruq quyidagiga o&#x27;xshash natija beradi:</p>
  <p id="3H1t">Plaintext</p>
  <pre id="5fLD">[root@mail ~]# df -h
Filesystem                    Size  Used  Avail  Use%  Mounted on
/dev/mapper/VolGroup-lv_root   19G  1.6G    16G    9%  /
tmpfs                         245M     0   245M    0%  /dev/shm
/dev/sda1                     485M   47M   413M   11%  /boot
</pre>
  <p id="qzmP">Ushbu oddiy misolda biz ildiz (<code>/</code>) bo&#x27;limining atigi 9% qismi ishlatilganini ko&#x27;rishimiz mumkin.</p>
  <p id="iG2S">Murakkabroq misolda esa <code>df</code> buyrug&#x27;i yordamida turli o&#x27;rnatish nuqtalarini (mount points) ko&#x27;rishimiz mumkin:</p>
  <p id="IcS5">Plaintext</p>
  <pre id="PBfu">[root@mail ~]# df -h
Filesystem            Size  Used  Avail  Use%  Mounted on
/dev/mapper/VG-root   1.9T  1.7T    89G   95%  /
/dev/mapper/VG-var    431G  145G   264G   36%  /var
devtmpfs              7.8G  204K   7.8G    1%  /dev
tmpfs                 7.8G  4.0K   7.8G    1%  /dev/shm
/dev/md1              495M  126M   344M   27%  /boot
ku.example.com:9421   2.5T  487G   2.0T   20%  /mnt/test
tmpfs                 500M   86M   415M   18%  /var/ngx_pagespeed_cache
</pre>
  <p id="p-rc_792cbe5727d46445-287">Ushbu misolda:</p>
  <ul id="IjBW">
    <li id="v8zX"><code>/</code> (ildiz) bo&#x27;limi <strong>95%</strong> ga to&#x27;lgan.</li>
    <li id="LaKV">Qo&#x27;shimcha <code>/var</code> bo&#x27;limi esa atigi <strong>36%</strong> band.</li>
    <li id="g3Gq"><code>/mnt/test</code> manziliga <strong>2T</strong> hajmli tashqi tarmoq drayvi (external network mount) ulangan.</li>
    <li id="a5dx"><code>/var/ngx_pagespeed_cache</code> manziliga <strong>500M</strong> hajmli ramdisk (tmpfs) o&#x27;rnatilgan.</li>
  </ul>
  <p id="BE9u"></p>
  <p id="Pm47"></p>
  <p id="oIxV">Mana 6-bobning 100% to&#x27;liq va akademik tartibdagi o&#x27;zbekcha tarjimasi:</p>
  <hr />
  <h1 id="Df5H">6-bob: Tizim ma&#x27;lumotlarini olish</h1>
  <p id="EKQF">Tizimga oid turli ma&#x27;lumotlarni yig&#x27;ish uchun ishlatiladigan buyruqlar to&#x27;plami.</p>
  <h3 id="oeqj">6.1-bo&#x27;lim: Protsessor (CPU), Xotira (Memory), Tarmoq va Disk (I/O operatsiyalari) haqida statistika</h3>
  <p id="lhpz">Linux tizimining asosiy komponentlari haqida umumiy statistik ma&#x27;lumotlarni olish uchun <code>stat</code> oilasiga mansub buyruqlar juda foydali hisoblanadi.</p>
  <h4 id="sDD2">CPU (Protsessor)</h4>
  <p id="lKcg">Protsessorga oid statistikani olish uchun <code>mpstat</code> buyrug&#x27;idan foydalanishingiz mumkin. Quyidagi opsiyalar bilan natija yanada tushunarli bo&#x27;ladi:</p>
  <p id="f77c"><code>$ mpstat 2 10</code></p>
  <p id="nQjE"><em>(Har 2 soniyada, jami 10 marta ma&#x27;lumot chiqaradi)</em></p>
  <h4 id="fGaS">Memory (Xotira)</h4>
  <p id="f4te">Operativ xotiraning (RAM) qolgan qismini ko&#x27;rish uchun <code>free</code> buyrug&#x27;ini hamma biladi, lekin barcha statistika, jumladan Kirish/Chiqish (I/O) operatsiyalarini ko&#x27;rish uchun:</p>
  <p id="HxmJ"><code>$ vmstat 2 10</code></p>
  <h4 id="dYFo">Disk</h4>
  <p id="CIPd">Disk operatsiyalari haqida real vaqt rejimida umumiy ma&#x27;lumot olish uchun <code>iostat</code> dan foydalanish mumkin:</p>
  <p id="YUMy"><code>$ iostat -kx 2</code></p>
  <h4 id="caZC">Network (Tarmoq)</h4>
  <p id="ZmhS">Tarmoq xizmatlarida nima sodir bo&#x27;layotganini ko&#x27;rish uchun <code>netstat</code> buyrug&#x27;i qo&#x27;llaniladi:</p>
  <ul id="BTot">
    <li id="tvQk"><code>$ netstat -ntlp</code> — ochiq TCP soketlari.</li>
    <li id="Vvgk"><code>$ netstat -nulp</code> — ochiq UDP soketlari.</li>
    <li id="qfvd"><code>$ netstat -nxlp</code> — ochiq Unix soketlari.</li>
  </ul>
  <p id="ghDB">Real vaqt rejimida tarmoq trafigini kuzatish uchun:</p>
  <p id="ubaG"><code>$ sudo iftop</code></p>
  <p id="5yEG"><strong>Qo&#x27;shimcha:</strong></p>
  <p id="A8Ss">Barcha komponentlar bo&#x27;yicha I/O operatsiyalariga oid statistikani real vaqtda yaratish uchun <code>dstat</code> dan foydalanish mumkin. Ushbu vosita <code>vmstat</code>, <code>iostat</code> va <code>ifstat</code> buyruqlari o&#x27;rnini bosuvchi universal instrumentdir.</p>
  <hr />
  <h3 id="iqsY">6.2-bo&#x27;lim: lscpu va lshw vositalaridan foydalanish</h3>
  <p id="7LzK"><code>lscpu</code> buyrug&#x27;i protsessor haqida ma&#x27;lumot olishning eng oson usulidir.</p>
  <p id="N8Gl"><code>$ lscpu</code></p>
  <p id="Sygp"><strong>Natija namunasi:</strong></p>
  <ul id="d6Uu">
    <li id="QwZj"><strong>Architecture:</strong> x86_64 (Tizim arxitekturasi)</li>
    <li id="6MUZ"><strong>CPU(s):</strong> 4 (Yadrolar soni)</li>
    <li id="kZWb"><strong>Thread(s) per core:</strong> 1 (Har bir yadro uchun oqimlar soni)</li>
    <li id="Fves"><strong>Vendor ID:</strong> GenuineIntel (Ishlab chiqaruvchi)</li>
    <li id="RL06"><strong>CPU MHz:</strong> 1998.000 (Chastota)</li>
    <li id="478u"><strong>L1d/L1i/L2 cache:</strong> (Kesh xotira o&#x27;lchamlari)</li>
  </ul>
  <p id="bPzS"><code>lshw</code> vositasi yordamida:</p>
  <p id="oPhE"><code>$ lshw | grep cpu</code></p>
  <p id="mt89"><em>(Protsessor modeli va uning texnik imkoniyatlarini ko&#x27;rsatadi)</em></p>
  <hr />
  <h3 id="fOFl">6.3-bo&#x27;lim: Qurilmalar ro&#x27;yxati (Hardware List)</h3>
  <p id="afee"><strong>lshw</strong> — kompyuterning apparat konfiguratsiyasi haqida batafsil ma&#x27;lumot olish uchun kichik, ammo kuchli vositadir. U xotira konfiguratsiyasi, proshivka (firmware) versiyasi, ona plata (mainboard), CPU versiyasi va tezligi, kesh sozlamalari, shina (bus) tezligi va boshqalar haqida hisobot beradi.</p>
  <ul id="w0hq">
    <li id="i7IL"><code>$ sudo lshw | less</code> — ma&#x27;lumotni varoqlab ko&#x27;rish.</li>
    <li id="Hwa0"><code>$ sudo lshw -html &gt; myhardware.html</code> — hisobotni HTML formatida saqlash.</li>
    <li id="c0py"><code>$ sudo lshw -xml &gt; myhardware.xml</code> — hisobotni XML formatida saqlash.</li>
  </ul>
  <p id="5Jke"><strong>Boshqa qurilmalar ma&#x27;lumotlari:</strong></p>
  <ul id="GCf8">
    <li id="cQdr"><strong>PCI ma&#x27;lumotlari:</strong> <code>$ lspci -tv</code></li>
    <li id="LB2Q"><strong>USB ma&#x27;lumotlari:</strong> <code>$ lsusb -tv</code></li>
    <li id="KY3V"><strong>BIOS ma&#x27;lumotlari:</strong> <code>$ dmidecode -q | less</code></li>
    <li id="L3Qj"><strong>Disk haqida aniq ma&#x27;lumot (masalan, sda diski):</strong> <code>$ hdparm -i /dev/sda</code></li>
  </ul>
  <p id="i9a2"><strong>Qo&#x27;shimcha foydali buyruqlar:</strong></p>
  <ul id="8Jlv">
    <li id="t3TZ"><code>$ smartctl -A /dev/sda | grep Power_On_Hours</code> — ushbu disk jami necha soat ishlaganini ko&#x27;rsatadi.</li>
    <li id="Hocq"><code>$ hdparm -tT /dev/sda</code> — diskning o&#x27;qish tezligini sinovdan o&#x27;tkazadi.</li>
    <li id="lzXo"><code>$ badblocks -s /dev/sda</code> — diskda o&#x27;qib bo&#x27;lmaydigan (bad) bloklar bor-yo&#x27;qligini tekshiradi.</li>
  </ul>
  <p id="FzLk"></p>
  <p id="jDR3"></p>
  <h3 id="uBBr">6.4-bo&#x27;lim: Protsessor (CPU) modeli va tezligi haqidagi ma&#x27;lumotlarni topish</h3>
  <p id="NNbO">Ubuntu va boshqa Linux tizimlarida protsessor haqida eng batafsil ma&#x27;lumotni <code>/proc/cpuinfo</code> virtual faylini o&#x27;qish orqali olish mumkin.</p>
  <p id="QJtL"><strong>Buyruq:</strong></p>
  <p id="MTDh"><code>$ cat /proc/cpuinfo</code></p>
  <p id="TomD"><strong>Natija namunasi (tahlili):</strong></p>
  <ul id="GER7">
    <li id="76K8"><strong>processor : 0</strong> — mantiqiy protsessor tartib raqami.</li>
    <li id="JnD0"><strong>vendor_id : GenuineIntel</strong> — ishlab chiqaruvchi identifikatori (Intel).</li>
    <li id="9SHr"><strong>model name : Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz</strong> — protsessorning to&#x27;liq nomi va nominal tezligi.</li>
    <li id="ga9S"><strong>cpu MHz : 1596.000</strong> — protsessorning ayni damdagi ishchi tezligi (quvvatni tejash rejimi tufayli nominal tezlikdan past bo&#x27;lishi mumkin).</li>
    <li id="etDG"><strong>cache size : 4096 KB</strong> — kesh xotira hajmi.</li>
    <li id="DEuh"><strong>cpu cores : 4</strong> — fizik yadrolar soni.</li>
    <li id="sJqM"><strong>flags</strong> — protsessor tomonidan qo&#x27;llab-quvvatlanadigan texnologiyalar (masalan, <code>vmx</code> — virtuallashtirish, <code>sse</code> — oqimli ma&#x27;lumotlar ishlovi).</li>
  </ul>
  <p id="ldOj"><strong>Protsessorlar (shu jumladan yadrolar) sonini sanash:</strong></p>
  <p id="KPor"><code>$ grep -c processor /proc/cpuinfo</code></p>
  <hr />
  <h3 id="QUVB">6.5-bo&#x27;lim: Jarayonlarni monitoring qilish va ma&#x27;lumot yig&#x27;ish</h3>
  <p id="HDCm">Linux hostida jarayonlarni (process) kuzatishning ikki xil usuli mavjud:</p>
  <h4 id="Sjeh">1. Statik monitoring</h4>
  <p id="Q7T1">Eng ko&#x27;p qo&#x27;llaniladigan buyruq — <strong><code>ps</code></strong> (process status). U ayni damda ishlayotgan jarayonlar va ularning identifikatsiya raqamlari (PID) haqida ma&#x27;lumot beradi.</p>
  <p id="PTyK"><strong>Foydali opsiyalar:</strong></p>
  <ul id="8uFi">
    <li id="FPfU"><strong>Ierarxiya ko&#x27;rinishida ro&#x27;yxatlash:</strong><code>$ ps -e -o pid,args --forest</code></li>
    <li id="mqOf"><strong>CPU ishlatishi bo&#x27;yicha saralash:</strong><code>$ ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu | sed &#x27;/^ 0.0 /d&#x27;</code></li>
    <li id="WsWE"><strong>Xotira (RAM) ishlatishi bo&#x27;yicha saralash:</strong><code>$ ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS</code></li>
    <li id="8zL6"><strong>Maxsus jarayonning (masalan, firefox) barcha oqimlarini (threads) ko&#x27;rish:</strong><code>$ ps -C firefox-bin -L -o pid,tid,pcpu,state</code></li>
  </ul>
  <p id="tikB"><strong>Ochiq fayllarni tekshirish (<code>lsof</code>):</strong></p>
  <p id="13sG">Jarayon qaysi fayl yoki yo&#x27;llardan (path) foydalanayotganini ko&#x27;rish uchun:</p>
  <p id="OR1p"><code>$ lsof -p [PID]</code> (bu yerda <code>$$</code> — joriy shell identifikatori).</p>
  <h4 id="OztL">2. Interaktiv (dinamik) monitoring</h4>
  <p id="9JOh">Real vaqt rejimida ma&#x27;lumotlarni yangilab turuvchi vositalar:</p>
  <ul id="Wgl8">
    <li id="EUpP"><strong><code>top</code></strong>: Standart va eng mashhur dinamik monitoring buyrug&#x27;i. Ma&#x27;lumotlarni filtrlash va saralash uchun ko&#x27;plab ichki opsiyalarga ega.</li>
    <li id="iXkW"><strong><code>htop</code></strong>: <code>top</code> buyrug&#x27;ining zamonaviy va rangli muqobili. Unda jarayonlarni boshqarish (masalan, o&#x27;chirish) ancha qulay.<code>$ htop -d 5</code> <em>(har 5 soniyada yangilanadi)</em></li>
    <li id="spUh"><strong><code>atop</code></strong>: Barcha harakatlarni log faylga yozib borish xususiyatiga ega (standart bo&#x27;yicha har 600 soniyada).</li>
    <li id="ik2J"><strong>Ixtisoslashgan vositalar:</strong></li>
    <ul id="sC52">
      <li id="hCCu"><code>iotop</code> — diskka kirish/chiqish (I/O) operatsiyalari monitoringi.</li>
      <li id="T1y6"><code>iftop</code> — tarmoq trafigi monitoringi.</li>
    </ul>
  </ul>
  <p id="IBnQ"></p>
  <p id="0eQ3">Mana 7-bobning 100% to&#x27;liq va akademik tartibdagi o&#x27;zbekcha tarjimasi:</p>
  <hr />
  <h1 id="jgtD">7-bob: ls buyrug&#x27;i</h1>
  <h3 id="rxT8">7.1-bo&#x27;lim: ls buyrug&#x27;i uchun opsiyalar</h3>
  <p id="1dC2"><code>ls</code> (list) buyrug&#x27;ining barcha asosiy opsiyalari:</p>
  <ul id="nuoP">
    <li id="VdXV"><strong><code>ls -a</code></strong>: barcha fayllarni, jumladan <code>.</code> bilan boshlanadigan yashirin fayllarni ham ro&#x27;yxatlaydi.</li>
    <li id="nxeW"><strong><code>ls --color</code></strong>: ro&#x27;yxatni rangli ko&#x27;rinishda chiqaradi <code>[=always/never/auto]</code>.</li>
    <li id="MpOn"><strong><code>ls -d</code></strong>: kataloglarning o&#x27;zini ro&#x27;yxatlaydi (ichidagilarini emas).</li>
    <li id="5xPY"><strong><code>ls -F</code></strong>: har bir ob&#x27;ekt turiga qarab oxiriga maxsus belgi (<code>* / = &gt; @ |</code>) qo&#x27;shadi.</li>
    <li id="TcZU"><strong><code>ls -i</code></strong>: fayllarning <strong>inode</strong> (indeks tuguni) raqamini ko&#x27;rsatadi.</li>
    <li id="E1Rg"><strong><code>ls -l</code></strong>: uzun formatda ro&#x27;yxatlaydi — huquqlar, ega va vaqtni ko&#x27;rsatadi.</li>
    <li id="urE0"><strong><code>ls -la</code></strong>: yashirin fayllar bilan birga uzun formatda ro&#x27;yxatlaydi.</li>
    <li id="UH23"><strong><code>ls -lh</code></strong>: uzun formatda, fayl o&#x27;lchamlarini o&#x27;qishga qulay (KB, MB, GB) ko&#x27;rinishda chiqaradi.</li>
    <li id="693E"><strong><code>ls -ls</code></strong>: uzun formatda fayl o&#x27;lchamlari bilan birga chiqaradi.</li>
    <li id="6JTj"><strong><code>ls -r</code></strong>: teskari tartibda ro&#x27;yxatlaydi.</li>
    <li id="RsKR"><strong><code>ls -R</code></strong>: kataloglar daraxtini rekursiv (ichma-ich) ravishda ro&#x27;yxatlaydi.</li>
    <li id="lqyz"><strong><code>ls -s</code></strong>: har bir faylning hajmini ko&#x27;rsatadi.</li>
    <li id="FAch"><strong><code>ls -S</code></strong>: fayl hajmi bo&#x27;yicha saralaydi (kattasidan kichigiga).</li>
    <li id="xbhJ"><strong><code>ls -t</code></strong>: vaqt va sana bo&#x27;yicha saralaydi.</li>
    <li id="lJcQ"><strong><code>ls -X</code></strong>: fayl kengaytmasi (extension) bo&#x27;yicha saralaydi.</li>
  </ul>
  <hr />
  <h3 id="HBBW">7.2-bo&#x27;lim: ls buyrug&#x27;ining eng ko&#x27;p ishlatiladigan opsiyalari</h3>
  <p id="rHL0"><code>ls</code> argumentlarsiz ishlatilganda joriy ishchi katalogdagi fayl va kataloglarni ko&#x27;rsatadi. (Odatda <code>.</code> bilan boshlanuvchi yashirin fayllarni ko&#x27;rsatmaydi).</p>
  <p id="E2g0"><strong>Misol:</strong></p>
  <p id="aMTx">Bash</p>
  <pre id="oOQm">user@ubuntu14:/usr$ ls
bin  games  include  lib  lib32  local  sbin  share  src
</pre>
  <p id="IViA"><strong>Barcha fayllarni ko&#x27;rish (yashirin fayl va papkalar bilan birga):</strong></p>
  <p id="aRiB">Buning uchun <code>ls -a</code> yoki <code>ls --all</code> ishlatiladi.</p>
  <p id="1gx1">Bash</p>
  <pre id="QfAS">user@ubuntu14:/usr$ ls -a
.  ..  bin  games  include  lib  lib32  local  sbin  share  src
</pre>
  <p id="vLYS"><strong>Fayllar, papkalar va ramziy havolalarni (symbolic links) farqlash:</strong></p>
  <p id="kO3R">Buning uchun <code>ls -F</code> yoki <code>ls --classify</code> ishlatiladi.</p>
  <p id="eEpW">Bash</p>
  <pre id="CdCs">user@ubuntu14:~$ ls -F
Desktop/  Downloads/  Music/  test* a_link@
</pre>
  <p id="jOG5">Bu yerda quyidagi belgilar ob&#x27;ekt turini bildiradi:</p>
  <ul id="uXKL">
    <li id="ymq7"><strong>“/”</strong> — katalog (papka).</li>
    <li id="G1eg"><strong>“*”</strong> — ishga tushiriladigan (executable) fayl.</li>
    <li id="ioCr"><strong>“@”</strong> — ramziy havola (symbolic link).</li>
  </ul>
  <p id="t5hU"><strong>Fayl va kataloglar haqida batafsil ma&#x27;lumot olish:</strong></p>
  <p id="o2Pk">Buning uchun <code>ls -l</code> ishlatiladi.</p>
  <p id="QFNd">Bash</p>
  <pre id="ASeZ">user@ubuntu14:~/example$ ls -l
total 6464
-rw-r--r-- 1 user group      41 Dec 24 12:19 Z.txt
drwxr-xr-x 2 user group    4096 Dec 24 12:00 a_directory
lrwxrwxrwx 1 user group       6 Dec 24 12:04 a_link -&gt; a_file
-rw-r----- 1 user group 6586816 Dec 24 12:07 big.zip
</pre>
  <p id="Pcfg"><strong>Ushbu misolning tahlili:</strong></p>
  <ol id="2pN6">
    <li id="YaPd"><strong>total 6464</strong>: Tarkibdagi barcha narsalarning umumiy hajmi 6464 KB.</li>
    <li id="uIya"><strong>Birinchi belgi</strong>: Ob&#x27;ekt turi (masalan, <code>d</code> — katalog, <code>l</code> — havola, <code>-</code> — oddiy fayl).</li>
    <li id="3fjK"><strong>Keyingi 9 ta belgi</strong>: Foydalanuvchi (user), guruh (group) va boshqalar uchun ruxsatlar.</li>
    <li id="6Nez"><strong>Raqam</strong>: Hard linklar (qattiq havolalar) soni.</li>
    <li id="6ORD"><strong>Ega va Guruh</strong>: Fayl egasining nomi va guruhi.</li>
    <li id="VisU"><strong>O&#x27;lcham</strong>: Baytlarda ko&#x27;rsatilgan hajm. <code>-h</code> opsiyasi qo&#x27;shilsa, masalan <code>6586816</code> soni <code>6.3M</code> ko&#x27;rinishida chiqadi.</li>
    <li id="l70h"><strong>Vaqt tamg&#x27;asi</strong>: Odatda fayl oxirgi marta o&#x27;zgartirilgan vaqt.</li>
    <li id="tXHG"><strong>Nomi</strong>: Fayl yoki katalog nomi. Havolalar (<code>link</code>) o&#x27;zi yo&#x27;naltirilgan asl faylni ham ko&#x27;rsatadi.</li>
  </ol>
  <p id="S1pf"></p>
  <p id="zd5q"></p>
  <p id="M3Qi"></p>
  <p id="sXoJ">Mana 8-bobning 100% to&#x27;liq va akademik tartibdagi o&#x27;zbekcha tarjimasi:</p>
  <hr />
  <h1 id="BziU">8-bob: &#x27;tar&#x27; buyrug&#x27;i yordamida fayllarni siqish (arxivlash)</h1>
  <h3 id="lZ6u">Umumiy opsiyalar</h3>
  <ul id="COFb">
    <li id="QMEP"><strong><code>-c, --create</code></strong>: Yangi arxiv yaratish.</li>
    <li id="J0nz"><strong><code>-x, --extract</code></strong>: Arxivdan fayllarni ajratib olish (chiqarish).</li>
    <li id="jyPc"><strong><code>-t, --list</code></strong>: Arxiv tarkibini ro&#x27;yxat ko&#x27;rinishida ko&#x27;rsatish.</li>
    <li id="yAS0"><strong><code>-f, --file=ARCHIVE</code></strong>: ARCHIVE arxiv fayli yoki katalogidan foydalanish.</li>
    <li id="6rHD"><strong><code>-v, --verbose</code></strong>: Qayta ishlanayotgan fayllarni batafsil ro&#x27;yxat qilish.</li>
  </ul>
  <h3 id="Wn9X">Siqish (Compression) opsiyalari</h3>
  <ul id="jCF5">
    <li id="MGzF"><strong><code>-a, --auto-compress</code></strong>: Siqish dasturini aniqlash uchun arxiv kengaytmasidan (suffix) foydalanish.</li>
    <li id="4MgN"><strong><code>-j, --bzip2</code></strong>: Arxivni <code>bzip2</code> filtri orqali o&#x27;tkazish.</li>
    <li id="dEf4"><strong><code>-J, --xz, --lzma</code></strong>: Arxivni <code>xz</code> filtri orqali o&#x27;tkazish.</li>
    <li id="ySbi"><strong><code>-z, --gzip</code></strong>: Arxivni <code>gzip</code> filtri orqali o&#x27;tkazish.</li>
  </ul>
  <hr />
  <h3 id="GAyV">8.1-bo&#x27;lim: Katalogni siqish</h3>
  <p id="aGQz">Katalogni oddiy arxivlash (siqmasdan):</p>
  <p id="Ed9N"><code>tar -cf ./arxivim.tar ./papkam/</code></p>
  <p id="mWTx">Fayl va kataloglar arxivga qo&#x27;shilayotganini batafsil ko&#x27;rish uchun <code>-v</code> opsiyasidan foydalaning:</p>
  <p id="PbRE"><code>tar -cvf ./arxivim.tar ./papkam/</code></p>
  <p id="jlYa">Katalogni <strong>&#x27;gzip&#x27;</strong> yordamida siqib arxivlash uchun <code>-z</code> opsiyasini ishlatishingiz kerak:</p>
  <p id="ssUV"><code>tar -czf ./arxivim.tar.gz ./papkam/</code></p>
  <p id="7xUK">Shuningdek, <code>-j</code> opsiyasi orqali arxivni <strong>&#x27;bzip2&#x27;</strong> bilan siqishingiz mumkin:</p>
  <p id="8jwx"><code>tar -cjf ./arxivim.tar.bz2 ./papkam/</code></p>
  <p id="KBIZ">Yoki <code>-J</code> opsiyasi yordamida <strong>&#x27;xz&#x27;</strong> bilan siqish:</p>
  <p id="RPOz"><code>tar -cJf ./arxivim.tar.xz ./papkam/</code></p>
  <hr />
  <h3 id="SgNn">8.2-bo&#x27;lim: Arxivdan katalogni ajratib olish (Extract)</h3>
  <p id="4kEu">Arxivni joriy joyga ajratib olish namunasi:</p>
  <p id="jcTJ"><code>tar -xf arxiv-nomi.tar</code></p>
  <p id="g0iJ">Agar arxivni ma&#x27;lum bir manzildagi katalogga ajratib olmoqchi bo&#x27;lsangiz:</p>
  <p id="vK2k"><code>tar -xf arxiv-nomi.tar -C ./katalog/manzil</code></p>
  <hr />
  <h3 id="fS6v">8.3-bo&#x27;lim: Arxiv tarkibini ko&#x27;rish</h3>
  <p id="t9J1">Arxiv faylini ochmasdan (chiqarmasdan) uning tarkibini ro&#x27;yxat qilish:</p>
  <p id="cnIV"><code>tar -tf arxiv.tar.gz</code></p>
  <p id="1f45"><strong>Natija namunasi:</strong></p>
  <p id="CWSY"><code>Arxivdagi-Papka/</code></p>
  <p id="8aJL"><code>Arxivdagi-Papka/fayl1</code></p>
  <p id="vREf"><code>Arxivdagi-Papka/Boshqa-Papka/</code></p>
  <p id="dAyU"><code>Arxivdagi-Papka/Boshqa-Papka/fayl2</code></p>
  <hr />
  <h3 id="juwu">8.4-bo&#x27;lim: Arxiv tarkibini batafsil ro&#x27;yxat qilish</h3>
  <p id="KLzq">Tarkibni ro&#x27;yxatlash uchun misol:</p>
  <p id="Q8KQ"><code>tar -tvf arxiv.tar</code></p>
  <p id="osCW">Ro&#x27;yxatlash uchun <code>-t</code> opsiyasi ishlatiladi. <code>tar.gz</code> arxivining tarkibini ko&#x27;rish uchun yana <code>-z</code> opsiyasidan foydalanish lozim:</p>
  <p id="21Ge"><code>tar -tzvf arxiv.tar.gz</code></p>
  <hr />
  <h3 id="SCvJ">8.5-bo&#x27;lim: Bir yoki bir nechta katalogni istisno qilgan holda siqish</h3>
  <p id="mhmx">Agar siz katalogni arxivlamoqchi bo&#x27;lsangiz-u, lekin arxiv ichiga bir yoki bir nechta quyi papkalar kirmasligini xohlasangiz, <code>--exclude</code> opsiyasidan foydalanasiz.</p>
  <p id="wUN3"><code>tar -cf arxiv.tar ./mening-papkam/ --exclude=&quot;mening-papkam/sub1&quot; --exclude=&quot;mening-papkam/sub3&quot;</code></p>
  <p id="uVC1">Ushbu tuzilmada:</p>
  <p id="p6FS"><code>mening-papkam/</code></p>
  <p id="a15V"><code> sub1/</code></p>
  <p id="Ub4h"><code> sub2/</code></p>
  <p id="6Jus"><code> sub3/</code></p>
  <p id="z3Z6">Natijada arxiv ichida faqat quyidagilar qoladi:</p>
  <p id="L8HY"><code>./arxiv.tar</code></p>
  <p id="JnGh"><code>mening-papkam/</code></p>
  <p id="BIWR"><code> sub2/</code></p>
  <hr />
  <h3 id="yuD8">8.6-bo&#x27;lim: Yetakchi komponentlarni olib tashlash (Strip components)</h3>
  <p id="GPfG">Arxivdan chiqarishda ma&#x27;lum miqdordagi yetakchi (boshlang&#x27;ich) kataloglarni olib tashlash uchun <code>--strip-components</code> opsiyasidan foydalaniladi:</p>
  <p id="zbow"><code>--strip-components=RAQAM</code></p>
  <p id="CObw"><em>(Arxivdan chiqarishda fayl nomlaridan RAQAM miqdoricha yetakchi kataloglarni olib tashlaydi)</em></p>
  <p id="atZR">Masalan, arxiv ichidagi eng yuqori (birinchi) katalogni olib tashlab, faqat uning ichidagilarini chiqarish uchun:</p>
  <p id="4WDq"><code>tar -xf --strip-components=1 arxiv-nomi.tar</code></p>
  <p id="up1r"></p>
  <p id="5E9E"></p>
  <p id="ECMh">Mana 9-bobning 100% to&#x27;liq va akademik tartibdagi o&#x27;zbekcha tarjimasi:</p>
  <hr />
  <h1 id="Sy3T">9-bob: Xizmatlar (Services)</h1>
  <h3 id="FSt2">9.1-bo&#x27;lim: Ubuntuda ishlayotgan xizmatlar ro&#x27;yxatini ko&#x27;rish</h3>
  <p id="Nohf">Tizimingizdagi xizmatlar ro&#x27;yxatini olish uchun quyidagi buyruqni ishga tushirishingiz mumkin:</p>
  <p id="vstV"><code>service --status-all</code></p>
  <p id="kkZW"><code>service --status-all</code> buyrug&#x27;ining natijasi <strong>System V</strong> tomonidan boshqariladigan xizmatlar holatini ko&#x27;rsatadi:</p>
  <ul id="pTTe">
    <li id="21Z1"><strong><code>+</code></strong> belgisi — xizmat ishlayotganini (running) bildiradi.</li>
    <li id="VJXj"><strong><code>-</code></strong> belgisi — xizmat to&#x27;xtatilganini (stopped) bildiradi.</li>
    <li id="bX3u"><strong><code>?</code></strong> belgisi — xizmat holati noma&#x27;lumligini bildiradi.</li>
  </ul>
  <p id="DKhY">Buni <code>service XIZMAT_NOMI status</code> buyrug&#x27;ini ishga tushirish orqali ham tekshirib ko&#x27;rishingiz mumkin.</p>
  <p id="C1Ln">Ba&#x27;zi xizmatlar <strong>Upstart</strong> tomonidan boshqariladi. Barcha Upstart xizmatlarining holatini <code>sudo initctl list</code> buyrug&#x27;i bilan tekshirish mumkin. Upstart tomonidan boshqariladigan har qanday xizmat <code>service --status-all</code> ro&#x27;yxatida ham ko&#x27;rinadi, lekin u <code>?</code> belgisi bilan belgilanadi.</p>
  <hr />
  <h3 id="FycP">9.2-bo&#x27;lim: Systemd orqali xizmatlarni boshqarish</h3>
  <p id="94sP"><strong>Systemd</strong> — zamonaviy Linux distributivlarida xizmatlar va tizim resurslarini boshqarish uchun ishlatiladigan standart tizimdir.</p>
  <h4 id="Tjrh">Xizmatlarni ro&#x27;yxatga olish</h4>
  <ul id="eg8P">
    <li id="CETC"><code>systemctl</code> — Ishlayotgan barcha xizmatlarni ro&#x27;yxatga oladi.</li>
    <li id="Nsae"><code>systemctl --failed</code> — Ishlamay qolgan (xatolikka uchragan) xizmatlarni ko&#x27;rsatadi.</li>
  </ul>
  <h4 id="0gUH">Nishonlarni (Targets) boshqarish (SysV dagi Runlevel-larga o&#x27;xshash)</h4>
  <ul id="0yQ7">
    <li id="omCV"><code>systemctl get-default</code> — Tizimingiz uchun standart yuklanish nishonini (default target) topadi.</li>
    <li id="Rmxr"><code>systemctl set-default &lt;nishon-nomi&gt;</code> — Tizim uchun standart yuklanish nishonini o&#x27;rnatadi.</li>
  </ul>
  <h4 id="9yQC">Xizmatlarni ish jarayonida (runtime) boshqarish</h4>
  <ul id="48Ip">
    <li id="KQAg"><code>systemctl start [xizmat-nomi]</code> — Xizmatni ishga tushirish.</li>
    <li id="Fr0e"><code>systemctl stop [xizmat-nomi]</code> — Xizmatni to&#x27;xtatish.</li>
    <li id="JmT8"><code>systemctl restart [xizmat-nomi]</code> — Xizmatni qayta ishga tushirish.</li>
    <li id="pLIE"><code>systemctl reload [xizmat-nomi]</code> — Xizmatdan o&#x27;z sozlamalarini (konfiguratsiyasini) qayta yuklashni so&#x27;rash.</li>
    <li id="Ouky"><code>systemctl status [xizmat-nomi]</code> — Xizmatning joriy holatini ko&#x27;rsatish.</li>
  </ul>
  <h4 id="so4R">Xizmatlarning avtomatik ishga tushishini boshqarish</h4>
  <ul id="tiUI">
    <li id="zVVo"><code>systemctl is-enabled [xizmat-nomi]</code> — Xizmat tizim yuklanayotgan vaqtda (boot) yoqilganligini tekshirish.</li>
    <li id="nGd0"><code>systemctl is-active [xizmat-nomi]</code> — Xizmat ayni damda faol (ishlayotgan) ekanligini tekshirish.</li>
    <li id="utCl"><code>systemctl enable [xizmat-nomi]</code> — Xizmatni tizim yuklanayotganda avtomatik ishga tushadigan qilish.</li>
    <li id="3kdX"><code>systemctl disable [xizmat-nomi]</code> — Avtomatik ishga tushishni o&#x27;chirish.</li>
  </ul>
  <h4 id="Xfz6">Xizmatlarni niqoblash (Masking)</h4>
  <ul id="Rr2B">
    <li id="W5Pg"><code>systemctl mask [xizmat-nomi]</code> — Xizmatni niqoblash (bu xizmatni xatolik bilan ishga tushirib yuborishni imkonsiz qiladi).</li>
    <li id="odrv"><code>systemctl unmask [xizmat-nomi]</code> — Xizmatni niqobdan chiqarish.</li>
  </ul>
  <h4 id="udj4">Systemd-ni qayta yuklash</h4>
  <ul id="Zet6">
    <li id="iSqE"><code>systemctl daemon-reload</code> — Yangi yaratilgan yoki o&#x27;zgartirilgan unit fayllarni (xizmat sozlamalarini) tizimga qayta tanitish uchun ishlatiladi.</li>
  </ul>
  <p id="qOYt"></p>
  <p id="I56X">Mana 10-bobning 100% to&#x27;liq va akademik tartibdagi o&#x27;zbekcha tarjimasi:</p>
  <hr />
  <h1 id="KJu6">10-bob: Xizmatlarni boshqarish (Managing Services)</h1>
  <h3 id="kS3H">10.1-bo&#x27;lim: Xizmat bilan bog&#x27;liq muammoni tashxislash</h3>
  <p id="tp87"><strong>Systemd</strong> ishlatadigan tizimlarda (masalan, Fedora 15+, Ubuntu 15.04+ (Server va Desktop), RHEL/CentOS 7+):</p>
  <p id="hvOH"><code>systemctl status [xizmat_nomi]</code></p>
  <p id="JiHK">Bu yerda <code>[xizmat_nomi]</code> — tekshirilayotgan xizmat; masalan: <code>systemctl status sshd</code>. Ushbu buyruq xizmat haqidagi asosiy holat ma&#x27;lumotlarini va loglarga yozilgan so&#x27;nggi xatoliklarni ko&#x27;rsatadi.</p>
  <p id="6lbM">Xatoliklarni chuqurroq o&#x27;rganish uchun <strong><code>journalctl</code></strong> buyrug&#x27;idan foydalanish mumkin. Masalan, <code>journalctl -xe</code> buyrug&#x27;i tizim jurnalidagi oxirgi 1000 ta qaydni peydjerga (masalan, <code>less</code>) yuklaydi va to&#x27;g&#x27;ridan-to&#x27;g&#x27;ri oxirgi qatorlarga o&#x27;tadi. Shuningdek, <code>journalctl -f</code> buyrug&#x27;i yordamida log xabarlarini real vaqt rejimida kuzatib borish mumkin.</p>
  <p id="M15v">Muayyan bir xizmatga tegishli loglarni ko&#x27;rish uchun <code>-t</code> bayrog&#x27;idan foydalaning:</p>
  <p id="ZxE6"><code>journalctl -f -t sshd</code></p>
  <p id="5H9Z">Boshqa foydali opsiyalar:</p>
  <ul id="7t5Q">
    <li id="c3yQ"><strong><code>-p</code></strong>: ustuvorlik (priority) bo&#x27;yicha saralash (masalan, <code>-p warnings</code> faqat ogohlantirish va undan yuqori xatolarni ko&#x27;rsatadi).</li>
    <li id="Rka1"><strong><code>-b</code></strong>: oxirgi yuklanishdan (boot) boshlab ko&#x27;rish.</li>
    <li id="yvWy"><strong><code>-S</code></strong>: belgilangan vaqtdan (since) boshlab ko&#x27;rish.</li>
  </ul>
  <p id="6CD6"><strong>Misol:</strong></p>
  <p id="OIN0"><code>journalctl -p err -S yesterday</code></p>
  <p id="UmCv"><em>(Kechadan beri xatolik (error) sifatida qayd etilgan barcha hodisalarni ko&#x27;rsatadi).</em></p>
  <p id="rX9k">Agar <code>journalctl</code> mavjud bo&#x27;lmasa yoki tizim jurnalidan foydalanmaydigan ilovalar logini kuzatayotgan bo&#x27;lsangiz, faylning so&#x27;nggi bir necha qatorini ko&#x27;rish uchun <strong><code>tail</code></strong> buyrug&#x27;idan foydalaniladi. <code>tail</code> uchun foydali bayroq — <code>-f</code> (&quot;follow&quot;), u faylga yangi ma&#x27;lumotlar qo&#x27;shilishi bilan ularni ko&#x27;rsatib boradi.</p>
  <p id="WPXp">Tizimdagi aksariyat xizmatlarning xabarlarini ko&#x27;rish uchun:</p>
  <p id="hAaC"><code>tail -f /var/log/messages</code></p>
  <p id="uBwE">Yoki xizmat imtiyozli (privileged) bo&#x27;lsa va maxfiy ma&#x27;lumotlarni yozishi mumkin bo&#x27;lsa:</p>
  <p id="Suvh"><code>tail -f /var/log/secure</code></p>
  <p id="YYGJ">Ba&#x27;zi xizmatlarning shaxsiy log fayllari bor. Masalan, Linux audit demoni bo&#x27;lmish <code>auditd</code> o&#x27;z loglarini <code>/var/log/audit/</code> papkasida saqlaydi. Agar xizmatingiz natijasini <code>/var/log/messages</code> ichida ko&#x27;rmasangiz, <code>/var/log/</code> katalogidan xizmatga xos shaxsiy loglarni qidirib ko&#x27;ring.</p>
  <hr />
  <h3 id="KRe4">10.2-bo&#x27;lim: Xizmatlarni ishga tushirish va to&#x27;xtatish</h3>
  <p id="3md6"><strong>System-V uslubidagi init skriptlarini ishlatadigan tizimlarda (masalan, RHEL/CentOS 6):</strong></p>
  <ul id="vthk">
    <li id="tb2i"><code>service &lt;xizmat&gt; start</code> — Ishga tushirish.</li>
    <li id="leyv"><code>service &lt;xizmat&gt; stop</code> — To&#x27;xtatish.</li>
  </ul>
  <p id="Fqre"><strong>Systemd ishlatadigan tizimlarda (masalan, Ubuntu 15.04+, RHEL/CentOS 7+):</strong></p>
  <ul id="kzPt">
    <li id="Rc7t"><code>systemctl start &lt;xizmat&gt;</code> — Ishga tushirish (masalan: <code>systemctl start dnsmasq</code>).</li>
    <li id="V0Bg"><code>systemctl stop &lt;xizmat&gt;</code> — To&#x27;xtatish (masalan: <code>systemctl stop dnsmasq</code>).</li>
  </ul>
  <hr />
  <h3 id="kmJS">10.3-bo&#x27;lim: Xizmat holatini olish (Getting status)</h3>
  <p id="N25D"><strong>System-V uslubidagi tizimlarda (masalan, RHEL/CentOS 6):</strong></p>
  <p id="5WSe"><code>service &lt;xizmat&gt; status</code></p>
  <p id="zrPT"><strong>Systemd ishlatadigan tizimlarda (masalan, Ubuntu 15.04+, RHEL/CentOS 7+):</strong></p>
  <p id="OwGD"><code>systemctl status &lt;xizmat&gt;</code></p>
  <p id="ETRV"></p>
  <p id="YI63">Mana 11-bobning 100% to&#x27;liq va akademik tartibdagi o&#x27;zbekcha tarjimasi:</p>
  <hr />
  <h1 id="rwhQ">11-bob: Foydalanuvchilarni tahrirlash (Modifying Users)</h1>
  <h3 id="oCnX">Parametrlar tafsiloti (Parameter Details)</h3>
  <ul id="tQZB">
    <li id="WCiJ"><strong>username (foydalanuvchi nomi)</strong>: Foydalanuvchining nomi. Katta harflardan foydalanmang, nuqta ishlatmang, nom tire (<code>-</code>) bilan tugamasligi kerak, tarkibida ikki nuqta (<code>:</code>) va maxsus belgilar bo&#x27;lmasligi lozim. Shuningdek, raqam bilan boshlanishi mumkin emas.</li>
  </ul>
  <hr />
  <h3 id="3roM">11.1-bo&#x27;lim: O&#x27;z shaxsiy parolingizni o&#x27;rnatish</h3>
  <p id="Lxd2">O&#x27;zingiz foydalanayotgan akkaunt parolini o&#x27;zgartirish yoki o&#x27;rnatish uchun quyidagi buyruqni kiriting:</p>
  <p id="aGSl"><code>passwd</code></p>
  <hr />
  <h3 id="neRl">11.2-bo&#x27;lim: Boshqa foydalanuvchining parolini o&#x27;rnatish</h3>
  <p id="Mvie">Buning uchun buyruqni <strong>root</strong> (administrator) huquqi bilan bajaring:</p>
  <p id="4QTZ"><code>passwd username</code></p>
  <hr />
  <h3 id="L0An">11.3-bo&#x27;lim: Foydalanuvchi qo&#x27;shish</h3>
  <p id="QpIN">Tizimga yangi foydalanuvchi qo&#x27;shish uchun quyidagilarni <strong>root</strong> sifatida bajaring:</p>
  <p id="fdob"><code>useradd username</code></p>
  <hr />
  <h3 id="OMaJ">11.4-bo&#x27;lim: Foydalanuvchini o&#x27;chirish</h3>
  <p id="JIUn">Foydalanuvchini tizimdan olib tashlash uchun quyidagilarni <strong>root</strong> sifatida bajaring:</p>
  <p id="GFT3"><code>userdel username</code></p>
  <hr />
  <h3 id="cIDf">11.5-bo&#x27;lim: Foydalanuvchini va uning uy papkasini o&#x27;chirish</h3>
  <p id="4W96">Foydalanuvchini o&#x27;chirish bilan birga, unga tegishli barcha fayllar va uy papkasini (<code>home folder</code>) ham to&#x27;liq yo&#x27;qotish uchun quyidagilarni <strong>root</strong> sifatida bajaring:</p>
  <p id="J0jU"><code>userdel -r username</code></p>
  <hr />
  <h3 id="wCjV">11.6-bo&#x27;lim: Joriy foydalanuvchi a&#x27;zo bo&#x27;lgan guruhlarni ko&#x27;rish</h3>
  <p id="n8WT">O&#x27;zingiz qaysi guruhlarga a&#x27;zo ekanligingizni bilish uchun:</p>
  <p id="ZQ2F"><code>groups</code></p>
  <p id="fh8B">Foydalanuvchi va guruhlarning raqamli identifikatorlari (<strong>UID</strong> va <strong>GID</strong>) haqida batafsilroq ma&#x27;lumotni <code>id</code> buyrug&#x27;i orqali olish mumkin.</p>
  <hr />
  <h3 id="9bfv">11.7-bo&#x27;lim: Muayyan foydalanuvchi a&#x27;zo bo&#x27;lgan guruhlarni ko&#x27;rish</h3>
  <p id="ACDx">Boshqa bir foydalanuvchining guruhlarini tekshirish uchun:</p>
  <p id="b5JN"><code>groups username</code></p>
  <p id="ayBp">Foydalanuvchi va guruhlarning raqamli identifikatorlari haqida batafsilroq ma&#x27;lumotni <code>id username</code> buyrug&#x27;i orqali olish mumkin.</p>
  <p id="wyrN"></p>
  <p id="OxfY"></p>
  <p id="QvBe"></p>
  <p id="xfDf">Mana 12-bobning 100% to&#x27;liq va akademik tartibdagi o&#x27;zbekcha tarjimasi:</p>
  <hr />
  <h1 id="gVva">12-bob: LAMP Stack</h1>
  <p id="IPBf"><strong>LAMP</strong> (Linux Apache MySQL PHP) — ishlab chiqish muhiti sifatida <strong>Linux</strong> operatsion tizimi, veb-server sifatida <strong>Apache</strong> HTTP serveri, ma&#x27;lumotlar bazasini boshqarish tizimi (RDBMS) sifatida <strong>MySQL</strong> va server tomonidagi (Back-End) dasturlash tili sifatida <strong>PHP</strong> dan iborat texnologiyalar to&#x27;plamidir.</p>
  <p id="qoXr">LAMP veb-ishlab chiqish sohasida ochiq kodli (Open Source) texnologiyalar yechimi sifatida ishlatiladi. Ushbu stakning Windows versiyasi <strong>WAMP</strong> (Windows Apache MySQL PHP) deb ataladi.</p>
  <hr />
  <h3 id="nuTY">12.1-bo&#x27;lim: Arch Linux-da LAMP o&#x27;rnatish</h3>
  <p id="aB2b">Ushbu buyruq orqali biz barcha kerakli paketlarni va so&#x27;nggi yangilanishlarni bir bosqichda o&#x27;rnatamiz:</p>
  <p id="x4QZ"><code>pacman -Syu apache php php-apache mariadb</code></p>
  <h4 id="4F1d">HTTP (Apache) sozlamalari</h4>
  <p id="Yzgc"><code>/etc/httpd/conf/httpd.conf</code> faylini tahrirlang:</p>
  <ul id="bxIn">
    <li id="txhf"><code>ServerAdmin you@example.com</code> qatorini ehtiyojingizga qarab o&#x27;zgartiring.</li>
    <li id="bj09">Veb-sahifalar papkasi standart bo&#x27;yicha <code>ServerRoot &quot;/etc/httpd&quot;</code>. Directory ham xuddi shu papkaga sozlanishi kerak, shuning uchun <code>&lt;Directory &quot;/etc/httpd&quot;&gt;</code> qatorini tekshiring.</li>
    <li id="4bVn">Ushbu papka o&#x27;qish va ijro etish huquqiga ega bo&#x27;lishi kerak: <code>chmod o+x /etc/httpd</code></li>
    <li id="kf6y"><code>.htaccess</code> fayli ishlashi uchun <code>AllowOverride</code> qiymatini <code>none</code> dan <code>All</code> ga o&#x27;zgartiring.</li>
  </ul>
  <p id="UUuY">Har bir foydalanuvchi uchun <code>~/public_html</code> papkasi kerak bo&#x27;lsa (ya&#x27;ni foydalanuvchi sahifasiga <code>http://localhost/~username/</code> orqali kirish uchun), quyidagi qatordagi izohni olib tashlang:</p>
  <p id="Fvcq"><code>Include conf/extra/httpd-userdir.conf</code></p>
  <p id="sscV">So&#x27;ngra har bir foydalanuvchi uchun <code>public_html</code> papkasini yarating va huquqlarni (755) sozlang:</p>
  <p id="fDzn"><code>chmod 755 /home</code></p>
  <p id="3oJJ"><code>chmod 755 /home/username</code></p>
  <p id="f0al"><code>chmod 755 /home/username/public_html</code></p>
  <p id="jzr7">SSL ishlatmoqchi bo&#x27;lsangiz, ushbu qatorni faollashtiring:</p>
  <p id="1krl"><code>LoadModule ssl_module modules/mod_ssl.so</code></p>
  <p id="emdg">Virtual domenlar kerak bo&#x27;lsa, <code>Include conf/extra/httpd-vhosts.conf</code> qatorini faollashtiring va tegishli faylda domenlarni sozlang.</p>
  <p id="hWY5">Xavfsizlik uchun <code>/etc/httpd/conf/extra/httpd-default.conf</code> faylida <code>ServerSignature</code> ni <code>Off</code> va <code>ServerToken</code> ni <code>Prod</code> holatiga keltiring.</p>
  <h4 id="aO5a">PHP sozlamalari</h4>
  <p id="tTeE"><code>/etc/httpd/conf/httpd.conf</code> faylida:</p>
  <ul id="HOi4">
    <li id="qs8R"><code>LoadModule mpm_event_module...</code> qatorini izohga oling.</li>
    <li id="2YTC"><code>LoadModule mpm_prefork_module...</code> qatorini faollashtiring.</li>
    <li id="Dblo"><code>LoadModule</code> ro&#x27;yxatining oxiriga: <code>LoadModule php7_module modules/libphp7.so</code> ni qo&#x27;shing.</li>
    <li id="I1G7"><code>Include</code> ro&#x27;yxatining oxiriga: <code>Include conf/extra/php7_module.conf</code> ni qo&#x27;shing.</li>
  </ul>
  <p id="VBYM"><code>/etc/php/php.ini</code> faylida:</p>
  <ul id="KsKI">
    <li id="Om62"><code>extension=mysqli.so</code> va <code>extension=pdo_mysql.so</code> qatorlarini faollashtiring.</li>
    <li id="Bg8k">Vaqt mintaqasini (timezone) sozlang (masalan: <code>date.timezone = Asia/Tashkent</code>).</li>
  </ul>
  <h4 id="N3Zg">MySQL (MariaDB) sozlamalari</h4>
  <p id="U3wb">Root sifatida ishga tushiring:</p>
  <p id="RG1B"><code>mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql</code></p>
  <p id="ix0q">MySQL demonini ishga tushiring:</p>
  <p id="zVIZ"><code>systemctl enable mysqld</code></p>
  <p id="RwqJ"><code>systemctl start mysqld</code></p>
  <p id="2S4v">Yakunida xavfsizlik sozlamalari uchun: <code>sh /usr/bin/mysql_secure_installation</code> buyrug&#x27;ini bajaring.</p>
  <hr />
  <h3 id="OYOK">12.2-bo&#x27;lim: Ubuntu-da LAMP o&#x27;rnatish</h3>
  <p id="X6xL"><strong>Apache o&#x27;rnatish:</strong></p>
  <p id="GkHC"><code>sudo apt-get install apache2</code></p>
  <p id="R9dJ"><strong>MySQL o&#x27;rnatish:</strong></p>
  <p id="QwAA"><code>sudo apt-get install mysql-server</code></p>
  <p id="qGEN"><strong>PHP o&#x27;rnatish:</strong></p>
  <p id="44QF"><code>sudo apt-get install php5 libapache2-mod-php5</code></p>
  <p id="DS9j"><strong>Tizimni qayta ishga tushirish (xizmatni):</strong></p>
  <p id="cx55"><code>sudo systemctl restart apache2</code></p>
  <p id="RJEK"><strong>PHP o&#x27;rnatilishini tekshirish:</strong></p>
  <p id="HvQw"><code>php -r &#x27;echo &quot;\n\nPHP o&#x27;rnatilishi muvaffaqiyatli yakunlandi.\n\n\n&quot;;&#x27;</code></p>
  <hr />
  <h3 id="odJo">12.3-bo&#x27;lim: CentOS-da LAMP o&#x27;rnatish</h3>
  <h4 id="nFQM">1. Apache veb-serverini o&#x27;rnatish</h4>
  <p id="Q5We"><code>sudo yum -y install httpd</code></p>
  <p id="558t">O&#x27;rnatilgach, xizmatni yoqing va ishga tushiring:</p>
  <p id="QIua"><code>sudo systemctl enable --now httpd</code></p>
  <p id="T6W3">Brauzerda <code>http://localhost</code> manzilini ochib tekshiring.</p>
  <h4 id="q9DR">2. MariaDB serverini o&#x27;rnatish</h4>
  <p id="9IMi"><code>sudo yum -y install mariadb-server</code></p>
  <p id="oEr7">Xizmatni yoqing va ishga tushiring:</p>
  <p id="x0um"><code>sudo systemctl enable --now mariadb</code></p>
  <p id="jaUV">Ma&#x27;lumotlar bazasini himoyalash uchun <code>mysql_secure_installation</code> skriptidan foydalaning. Bu skript root parolini o&#x27;zgartirish, test bazalarini o&#x27;chirish va masofaviy kirishni cheklash imkonini beradi.</p>
  <h4 id="EHaE">3. PHP o&#x27;rnatish</h4>
  <p id="nLKB"><code>sudo yum -y install php php-common</code></p>
  <p id="qNGh">So&#x27;ngra Apache xizmatini qayta ishga tushiring:</p>
  <p id="cQlh"><code>sudo systemctl restart httpd</code></p>
  <p id="OrSl"><strong>PHPni test qilish:</strong></p>
  <p id="7yAP"><code>/var/www/html</code> katalogida <code>index.php</code> faylini yarating va unga quyidagi qatorni qo&#x27;shing:</p>
  <p id="TqXV"><code>&lt;?php phpinfo(); ?&gt;</code></p>
  <p id="4r30">Brauzerda <a href="http://localhost/index.php" target="_blank">http://localhost/index.php</a> manzilini oching. Agar serveringiz haqida ma&#x27;lumotlar chiqsa, o&#x27;rnatish to&#x27;g&#x27;ri bajarilgan. Aks holda, <code>php --version</code> orqali o&#x27;rnatilishni qayta tekshiring.</p>
  <p id="X3Wu">Mana 13-bobning 100% to&#x27;liq va akademik tartibdagi o&#x27;zbekcha tarjimasi:</p>
  <hr />
  <h1 id="HWIO">13-bob: tee buyrug&#x27;i</h1>
  <h3 id="c1VR">Opsiyalar va tavsif</h3>
  <ul id="4nOa">
    <li id="xJ9f"><strong><code>-a, --append</code></strong>: Berilgan fayllarga ma&#x27;lumotni qo&#x27;shib yozadi (ustidan yozib yubormaydi).</li>
    <li id="HAWC"><strong><code>-i, --ignore-interrupts</code></strong>: To&#x27;xtatish signallarini (interrupt signals) e&#x27;tiborsiz qoldiradi.</li>
    <li id="tVTy"><strong><code>--help</code></strong>: Yordam xabarini ko&#x27;rsatadi va ishni to&#x27;xtatadi.</li>
    <li id="BStK"><strong><code>--version</code></strong>: Versiya haqidagi ma&#x27;lumotni ko&#x27;rsatadi va ishni to&#x27;xtatadi.</li>
  </ul>
  <p id="TSMF"><strong>tee</strong> — standart kirishdan (stdin) o&#x27;qiydi va natijani standart chiqishga (stdout) hamda fayllarga yozadi.</p>
  <p id="e849"><code>tee</code> buyrug&#x27;ining nomi sanitariya-tesisat ishlaridagi <strong>T-simon ulagich (T-splitter)</strong> sharafiga qo&#x27;yilgan bo&#x27;lib, u suvni ikki yo&#x27;nalishga ajratadi va shakli bosh lotincha &quot;T&quot; harfiga o&#x27;xshaydi.</p>
  <p id="zz0s"><code>tee</code> buyrug&#x27;i ma&#x27;lumotlarni standart kirishdan har bir faylga va bir vaqtning o&#x27;zida standart chiqishga nusxalaydi. Amalda, <code>tee</code> o&#x27;z kirishini dublikat qiladi va uni bir vaqtning o&#x27;zida bir nechta chiqishlarga yo&#x27;naltiradi.</p>
  <hr />
  <h3 id="hblH">13.1-bo&#x27;lim: Natijani ham standart chiqishga, ham faylga yozish</h3>
  <p id="3Li2">Quyidagi buyruq natijani faqat ekranda (stdout) ko&#x27;rsatadi:</p>
  <p id="90Hx"><code>$ ls</code></p>
  <p id="35gk">Quyidagi buyruq natijani ekranga chiqarmasdan, faqat faylga yozadi:</p>
  <p id="Xhku"><code>$ ls &gt; file</code></p>
  <p id="A2hp">Quyidagi buyruq esa (<code>tee</code> yordamida) natijani ham ekranga (stdout), ham faylga yozadi:</p>
  <p id="UhxZ"><code>$ ls | tee file</code></p>
  <hr />
  <h3 id="Li49">13.2-bo&#x27;lim: Konveyer (pipe) zanjiri o&#x27;rtasidagi natijani faylga yozish va uni qaytadan zanjirga uzatish</h3>
  <p id="uhvY">Siz <code>tee</code> buyrug&#x27;idan biror buyruq natijasini faylda saqlash va shu bilan birga ushbu natijani boshqa bir buyruqqa yo&#x27;naltirish uchun foydalanishingiz mumkin.</p>
  <p id="XuWg">Quyidagi buyruq joriy <code>crontab</code> yozuvlarini <code>crontab-backup.txt</code> fayliga yozadi va ayni vaqtda ushbu yozuvlarni <code>sed</code> buyrug&#x27;iga o&#x27;tkazadi. <code>sed</code> buyrug&#x27;i matn almashtirishni amalga oshirgandan so&#x27;ng, natija yangi <code>cron</code> vazifasi sifatida qo&#x27;shiladi:</p>
  <p id="MUd1"><code>$ crontab -l | tee crontab-backup.txt | sed &#x27;s/old/new/&#x27; | crontab –</code></p>
  <hr />
  <h3 id="fpQg">13.3-bo&#x27;lim: Natijani bir nechta fayllarga yozish</h3>
  <p id="TQz5">Siz o&#x27;z natijangizni <code>tee</code> yordamida bir vaqtning o&#x27;zida bir nechta fayllarga (jumladan terminalingizga ham) yo&#x27;naltirishingiz mumkin:</p>
  <p id="ULut"><code>$ ls | tee file1 file2 file3</code></p>
  <hr />
  <h3 id="bm1E">13.4-bo&#x27;lim: tee buyrug&#x27;iga ma&#x27;lumotni fayl oxiridan qo&#x27;shishni yuklash</h3>
  <p id="qhdz">Standart holatda <code>tee</code> buyrug&#x27;i fayl ichidagi ma&#x27;lumotlarni o&#x27;chirib, ustidan yozib yuboradi. Siz <code>tee</code> buyrug&#x27;iga ma&#x27;lumotni faylning mavjud mazmuni oxiriga qo&#x27;shib yozishni (append) quyidagi <code>-a</code> opsiyasi orqali buyurishingiz mumkin:</p>
  <p id="5CmG"><code>$ ls | tee -a file</code></p>
  <p id="owpM"></p>
  <p id="026m">Mana 14-bobning 100% to&#x27;liq va akademik tartibdagi o&#x27;zbekcha tarjimasi:</p>
  <hr />
  <h1 id="yg8f">14-bob: Secure Shell (SSH)</h1>
  <p id="Rafb"><strong>SSH</strong> (Secure Shell) — shifrlangan aloqa kanali orqali mijozdan turib serverga masofadan kirish uchun ishlatiladi. <strong>OpenSSH</strong> masofaviy qobiqqa kirishni ta&#x27;minlovchi, ammo ma&#x27;lumotlarni shifrlamaydigan <strong>Telnet</strong> ulanishlariga muqobil (xavfsiz) variant sifatida ishlatiladi. OpenSSH mijoz dasturi aksariyat GNU/Linux distributivlarida standart bo&#x27;lib o&#x27;rnatilgan. Ushbu misollar SSH ulanishlarini qabul qilish va boshqa xostga ulanish uchun SSH utilitalaridan qanday foydalanishni ko&#x27;rsatadi.</p>
  <hr />
  <h3 id="7aBV">14.1-bo&#x27;lim: Masofaviy serverga ulanish</h3>
  <p id="SglK">Serverga ulanish uchun mijoz kompyuterida SSH buyrug&#x27;idan quyidagicha foydalanish kerak:</p>
  <p id="TLii"><code>ssh -p port user@server-address</code></p>
  <ul id="Yv1l">
    <li id="3sUw"><strong>port</strong> — serverning SSH xizmati tinglayotgan porti (standart port 22).</li>
    <li id="rFXG"><strong>user</strong> — serverda SSH huquqiga ega bo&#x27;lgan mavjud foydalanuvchi.</li>
    <li id="qXnY"><strong>server address</strong> — serverning IP manzili yoki domen nomi.</li>
  </ul>
  <p id="HShg"><strong>Hayotiy misol:</strong> Tasavvur qiling, siz veb-sayt yaratyapsiz. Hosting kompaniyasi server manzili <code>web-servers.com</code>, porti <code>2020</code> va foydalanuvchi nomi <code>usr1</code> ekanligini aytdi. Bunday holda buyruq quyidagicha bo&#x27;ladi:</p>
  <p id="xVh1"><code>ssh -p 2020 usr1@web-servers.com</code></p>
  <p id="LRLT">Agar masofaviy tizimdagi foydalanuvchi nomi mahalliy kompyuteringizdagi bilan bir xil bo&#x27;lsa, foydalanuvchi nomini yozmasangiz ham bo&#x27;ladi. Masalan, ikkala tizimda ham <code>usr1</code> bo&#x27;lsangiz, shunchaki <code>web-servers.com</code> deb yozish kifoya.</p>
  <p id="cFaw"><strong>ProxyJump orqali ulanish:</strong></p>
  <p id="isZU">Agar siz ulanmoqchi bo&#x27;lgan serverga to&#x27;g&#x27;ridan-to&#x27;g&#x27;ri kirish imkoni bo&#x27;lmasa, oraliq server (sakrash serveri) orqali ulanish uchun <code>-J</code> kalitidan foydalanishingiz mumkin:</p>
  <p id="aHCJ"><code>ssh -J usr1@10.0.0.1:2020 usr2@10.0.0.2 -p 2222</code></p>
  <p id="EWZ6">Bu buyruq sizni <code>10.0.0.1</code> (2020-port) serveri orqali <code>10.0.0.2</code> (2222-port) serveriga ulaydi. Albatta, har ikkala serverda ham akkauntingiz bo&#x27;lishi kerak. Eslatma: <code>-J</code> kaliti OpenSSH 7.3 versiyasidan boshlab qo&#x27;shilgan.</p>
  <hr />
  <h3 id="LrJy">14.2-bo&#x27;lim: OpenSSH paketlar to&#x27;plamini o&#x27;rnatish</h3>
  <p id="jx7a">Masofaviy SSH serverga ulanish va SSH ulanishlarni qabul qilish uchun <code>openssh</code> o&#x27;rnatilgan bo&#x27;lishi kerak:</p>
  <ul id="oXLk">
    <li id="hVhJ"><strong>Debian/Ubuntu:</strong> <code>sudo apt-get install openssh-server openssh-client</code></li>
    <li id="F1Lv"><strong>Arch Linux:</strong> <code>sudo pacman -S openssh</code></li>
    <li id="3v7c"><strong>CentOS/RHEL (Yum):</strong> <code>sudo yum install openssh</code></li>
  </ul>
  <hr />
  <h3 id="qILq">14.3-bo&#x27;lim: SSH serverni ulanishlarni qabul qilish uchun sozlash</h3>
  <p id="TFlz">Dastlab, SSH demonining (sshd) konfiguratsiya faylini tahrirlashimiz kerak. Odatda u <code>/etc/ssh/sshd_config</code> manzilida joylashgan bo&#x27;ladi.</p>
  <p id="HU44">Matn muharriri yordamida quyidagi qiymatlarni o&#x27;zgartiring (izohdagi <code>#</code> belgisini olib tashlang):</p>
  <ul id="9avj">
    <li id="xpD9"><strong>Port</strong> (0 dan 65535 gacha bo&#x27;lgan sonni tanlang, odatda 4 xonali son tavsiya etiladi).</li>
    <li id="Yded"><strong>PasswordAuthentication yes</strong> (parol orqali kirishga ruxsat berish).</li>
    <li id="JxQi"><strong>AllowUsers user1 user2</strong> (faqat belgilangan foydalanuvchilarga ruxsat berish).</li>
  </ul>
  <p id="Rvzy"><em>Eslatma: Xavfsizlikni oshirish uchun parolli kirishni butunlay o&#x27;chirib, SSH kalitlaridan foydalanish afzalroqdir.</em></p>
  <hr />
  <h3 id="BJcP">14.4-bo&#x27;lim: Parolsiz ulanish (kalitlar juftligi yordamida)</h3>
  <p id="6I9u">Buning uchun sizda kalitlar juftligi bo&#x27;lishi kerak: <strong>maxfiy kalit</strong> (<code>id_rsa</code>) va <strong>ochiq kalit</strong> (<code>id_rsa.pub</code>). Ochiq kalitni masofaviy serverdagi <code>~/.ssh/authorized_keys</code> fayliga nusxalashingiz kerak.</p>
  <p id="rnMZ">Buning oson usuli:</p>
  <p id="Ky5A"><code>ssh &lt;user&gt;@&lt;ssh-server&gt; &#x27;cat &gt;&gt; ~/.ssh/authorized_keys&#x27; &lt; id_rsa.pub</code></p>
  <p id="pVJX">Ochiq kalit serverga to&#x27;g&#x27;ri joylashtirilgach, shunchaki maxfiy kalit bilan tizimga kirishingiz mumkin:</p>
  <p id="JI1L"><code>ssh &lt;user&gt;@&lt;ssh-server&gt; -i id_rsa</code></p>
  <hr />
  <h3 id="qkeC">14.5-bo&#x27;lim: Ochiq va maxfiy kalitlarni yaratish</h3>
  <p id="RISX">SSH mijoz uchun kalitlar yaratish buyrug&#x27;i:</p>
  <p id="qslH"><code>ssh-keygen -t rsa -b 4096 -C &quot;email@manzil.com&quot;</code></p>
  <ul id="iesE">
    <li id="2Tst"><strong>-t rsa</strong> — kalit turini belgilaydi.</li>
    <li id="KiqB"><strong>-b 4096</strong> — bitlar sonini (xavfsizlik darajasini) belgilaydi.</li>
    <li id="BMBW"><strong>-C</strong> — izoh (odatda elektron pochta manzili).</li>
  </ul>
  <p id="cokd">Standart saqlash joyi: maxfiy kalit uchun <code>~/.ssh/id_rsa</code>, ochiq kalit uchun <code>~/.ssh/id_rsa.pub</code>.</p>
  <hr />
  <h3 id="U4RY">14.6-bo&#x27;lim: SSH xizmatini o&#x27;chirish</h3>
  <p id="d4pd">Agar zarur bo&#x27;lsa, server qismini o&#x27;chirib qo&#x27;yish orqali mijozlar ulanishining oldini olish mumkin:</p>
  <ul id="vdo2">
    <li id="CoWt"><strong>Ubuntu:</strong><code>sudo service ssh stopsudo systemctl disable sshd.service</code></li>
    <li id="MjFl"><strong>Debian:</strong><code>sudo /etc/init.d/ssh stopsudo systemctl disable sshd.service</code></li>
    <li id="Fel9"><strong>Arch Linux:</strong><code>sudo killall sshdsudo systemctl disable sshd.service</code></li>
  </ul>
  <hr />
  <p id="YYEH">Mana 15-bobning 100% to&#x27;liq va akademik tartibdagi o&#x27;zbekcha tarjimasi:</p>
  <hr />
  <h1 id="16X4">15-bob: SCP (Secure Copy)</h1>
  <h3 id="e6YW">15.1-bo&#x27;lim: Secure Copy (Xavfsiz nusxalash)</h3>
  <p id="GgLe"><strong>scp</strong> buyrug&#x27;i fayllarni masofaviy manzillarga yoki masofaviy manzillardan xavfsiz tarzda nusxalash uchun ishlatiladi. Agar fayl joriy ishchi katalogda (CWD) bo&#x27;lsa, faqat fayl nomining o&#x27;zi kifoya, aks holda masofaviy xost nomini o&#x27;z ichiga olgan to&#x27;liq yo&#x27;l (path) talab qilinadi. Masalan:</p>
  <p id="1rwG"><code>remote_user@some_server.org:/path/to/file</code></p>
  <p id="AbX7"><strong>Joriy katalogdagi mahalliy faylni yangi katalogga nusxalash:</strong></p>
  <p id="C4nX"><code>scp localfile.txt /home/friend/share/</code></p>
  <p id="DGdZ"><strong>Masofaviy faylni o&#x27;zingizning joriy ishchi katalogingizga nusxalash:</strong></p>
  <p id="ajE6"><code>scp rocky@arena51.net:/home/rocky/game/data.txt ./</code></p>
  <p id="w4l8"><strong>Faylni bir masofaviy manzildan boshqa bir masofaviy manzilga nusxalash:</strong></p>
  <p id="OfPr"><code>scp mars@universe.org:/beacon/light/bitmap.conf jupiter@universe.org:/beacon/night/</code></p>
  <p id="FfQ8"><strong>Katalogni va barcha quyi kataloglarni nusxalash uchun scp buyrug&#x27;iga <code>-r</code> (rekursiv) opsiyasini qo&#x27;shing:</strong></p>
  <p id="WjBV"><code>scp -r user@192.168.0.4:~/project/* ./workspace/</code></p>
  <hr />
  <h3 id="cKdE">15.2-bo&#x27;lim: Asosiy foydalanish (Basic Usage)</h3>
  <p id="M8uz"><strong>Masofaviy faylni mahalliy katalogga nusxalash:</strong></p>
  <p id="ciJG"><code>scp user@remotehost.com:/remote/path/to/foobar.md /local/dest</code></p>
  <p id="ipqd"><strong>Mahalliy faylni masofaviy katalogga nusxalash:</strong></p>
  <p id="V31b"><code>scp foobar.md user@remotehost.com:/remote/dest</code></p>
  <p id="IwGE"><strong>Kalit fayllardan (PEM) foydalanish (xuddi ssh kabi):</strong></p>
  <p id="8sj0">SSH kalitlari yordamida autentifikatsiya qilish uchun <code>-i</code> bayrog&#x27;idan foydalanishingiz mumkin:</p>
  <p id="LDAC"><code>scp -i my_key.pem foobar.md user@remotehost.com:/remote/dest</code></p>
  <hr />
  <p id="AI1S">Mana 16 va 17-boblarning 100% to&#x27;liq va akademik tartibdagi o&#x27;zbekcha tarjimasi:</p>
  <hr />
  <h1 id="IbKJ">16-bob: GnuPG (GPG)</h1>
  <p id="i3rT"><strong>GnuPG</strong> — ma&#x27;lumotlarni xavfsiz imzolash yoki shifrlash imkonini beruvchi murakkab kalitlarni boshqarish tizimidir. <strong>GPG</strong> — GnuPG kalitlarini yaratish va ulardan foydalanish uchun ishlatiladigan buyruqlar satri vositasi.</p>
  <p id="bETz">GnuPG ko&#x27;pincha SSH ulanishlarini parolsiz va interaktiv autentifikatsiyasiz amalga oshirishda qo&#x27;llaniladi, bu esa xavfsizlik darajasini sezilarli darajada oshiradi.</p>
  <h3 id="sLjh">16.1-bo&#x27;lim: Ochiq kalitni eksport qilish</h3>
  <p id="6Ud6">Ochiq va maxfiy kalitlar juftligidan foydalanish uchun siz ochiq kalitingizni (public key) boshqalar uchun ochiq qilishingiz kerak. <strong>Diqqat:</strong> Hech qachon maxfiy kalitingizni (private key) boshqalar bilan baham ko&#x27;rmang. Ochiq kalitni quyidagi buyruq bilan eksport qilish mumkin:</p>
  <p id="E8GG"><code>gpg --armor --export POCHTA_MANZILI &gt; public_key.asc</code></p>
  <p id="LyBW">Shuningdek, kalitni <code>keys.gnupg.net</code> kabi ochiq kalit serverlariga yuklash mumkin:</p>
  <ol id="YdTC">
    <li id="zjr9">Kalitlar ro&#x27;yxatini ko&#x27;ring: <code>gpg --list-keys</code></li>
    <li id="Mk4D">Kalitning 8 xonali ID raqamini (Primary ID) toping.</li>
    <li id="ZMcS">Serverga yuboring: <code>gpg --send-keys PRIMARY_ID</code></li>
  </ol>
  <h3 id="tKrf">16.2-bo&#x27;lim: GnuPG kalitini tezkor yaratish</h3>
  <p id="hE5Z">Tasodifiy baytlar generatsiyasini tezlashtirish uchun <code>haveged</code> dasturini o&#x27;rnating, so&#x27;ngra:</p>
  <p id="kfPU"><code>gpg --gen-key</code> — kalit yaratish.</p>
  <p id="ipSq"><code>gpg --keyserver pgp.mit.edu --send-keys NNNNNNNN</code> — kalitni nashr qilish.</p>
  <hr />
  <h1 id="T06h">17-bob: Tarmoq konfiguratsiyasi (Network Configuration)</h1>
  <p id="17o8">Linux bir nechta tarmoq qurilmalarini qo&#x27;llab-quvvatlaydi. Qurilma nomlari noldan boshlab raqamlanadi (masalan, <code>eth0</code>, <code>eth1</code>).</p>
  <h3 id="IKcf">17.1-bo&#x27;lim: Mahalliy DNS ruxsati (Local DNS resolution)</h3>
  <p id="El0J"><code>/etc/hosts</code> fayli DNS serverga murojaat qilmasdan, mahalliy darajada aniqlanadigan xostlar ro&#x27;yxatini saqlaydi.</p>
  <p id="S35S">Fayl formati <strong>RFC 952</strong> standarti bilan belgilanadi.</p>
  <h3 id="fiiZ">17.2-bo&#x27;lim: Domen nomlarini aniqlash uchun DNS serverlarini sozlash</h3>
  <p id="nThK"><code>/etc/resolv.conf</code> fayli domen nomlarini IP manzilga aylantirish uchun ishlatiladigan DNS serverlar ro&#x27;yxatini saqlaydi.</p>
  <p id="bmy9"><strong>Namuna:</strong></p>
  <p id="6VHW"><code>nameserver 8.8.8.8</code> — asosiy DNS server.</p>
  <p id="OGoj"><code>nameserver 8.8.4.4</code> — yordamchi DNS server.</p>
  <h3 id="6ecM">17.3-bo&#x27;lim: Yo&#x27;nalishlarni (routes) ko&#x27;rish va boshqarish</h3>
  <p id="5MzN"><strong><code>route</code> buyrug&#x27;i yordamida:</strong></p>
  <ul id="T3ZC">
    <li id="NjJE"><code>route -n</code> — yo&#x27;nalishlar jadvalini tezkor ko&#x27;rish.</li>
    <li id="rDCL"><code>route add default gw 2.2.2.1 eth0</code> — standart shlyuzni (gateway) qo&#x27;shish.</li>
  </ul>
  <p id="nXNL"><strong><code>ip</code> buyrug&#x27;i yordamida:</strong></p>
  <ul id="bajg">
    <li id="IizO"><code>ip route show</code> — yo&#x27;nalishlar jadvalini ko&#x27;rsatish.</li>
    <li id="4zwD"><code>ip route add default via 1.2.3.254</code> — standart shlyuzni sozlash.</li>
  </ul>
  <h3 id="5Zqu">17.4-bo&#x27;lim: Tarmoqdagi boshqa tizim uchun xost nomini sozlash</h3>
  <p id="6DBZ">Tarmoqdagi biror IP manzilga (masalan, <code>192.168.1.44</code>) qisqa nom (masalan, <code>remote_pc</code>) biriktirish uchun <code>/etc/hosts</code> fayliga quyidagi qatorni qo&#x27;shing:</p>
  <p id="jp2H"><code>192.168.1.44 remote_pc</code></p>
  <p id="gOmq">Endi siz ushbu kompyuterga <code>ping remote_pc</code> buyrug&#x27;i orqali murojaat qilishingiz mumkin.</p>
  <h3 id="1SMP">17.5-bo&#x27;lim: Interfeys tafsilotlari</h3>
  <ul id="Dib3">
    <li id="Npqv"><strong><code>ifconfig -a</code></strong>: Barcha mavjud interfeyslarni ko&#x27;rish.</li>
    <li id="sWFU"><strong><code>ethtool eth0</code></strong>: Tarmoq drayveri va apparat sozlamalarini (tezlik, dupleks va h.k.) tekshirish.</li>
    <li id="QQQP"><strong><code>ip link show</code></strong>: Tarmoq interfeyslari holatini ko&#x27;rish.</li>
    <li id="Nsir"><strong><code>ip addr show</code></strong>: Interfeyslarga biriktirilgan IP manzillarni ko&#x27;rish.</li>
  </ul>
  <h3 id="BOwj">17.6-bo&#x27;lim: Interfeysga IP manzil qo&#x27;shish</h3>
  <p id="tlEk"><strong>1. DHCP orqali (Avtomatik):</strong></p>
  <p id="N5ZZ"><code>sudo dhclient eth0</code></p>
  <p id="HOz1"><strong>2. Statik (Doimiy) — <code>/etc/network/interfaces</code> fayli orqali:</strong></p>
  <p id="B0VC">Plaintext</p>
  <pre id="lYPR">auto eth0
iface eth0 inet static
    address 10.10.70.10
    netmask 255.255.0.0
    gateway 10.10.1.1
</pre>
  <p id="1q28"><strong>3. Statik (Vaqtincha) — <code>ifconfig</code> orqali:</strong></p>
  <p id="qoCb"><code>sudo ifconfig eth0 10.10.50.100/16 up</code></p>
  <hr />
  <p id="bGAR">Mana 18-bobning 100% to&#x27;liq va akademik tartibdagi o&#x27;zbekcha tarjimasi:</p>
  <hr />
  <h1 id="B9xp">18-bob: Midnight Commander (mc)</h1>
  <p id="DqTa"><strong>Midnight Commander</strong> yoki qisqacha <strong>mc</strong> — bu konsol (terminal) asosidagi fayl menejeridir. Ushbu mavzu uning funksional imkoniyatlari tavsifi, misollar va undan to&#x27;liq salohiyat bilan foydalanish bo&#x27;yicha maslahatlarni o&#x27;z ichiga oladi.</p>
  <h3 id="BTby">18.1-bo&#x27;lim: Fayllarni ko&#x27;rish (browsing) rejimidagi funksional tugmalar</h3>
  <p id="0JOY">Quyida Midnight Commander-ning fayllarni ko&#x27;rish rejimida klaviaturadagi funksional tugmalar orqali bajariladigan amallar ro&#x27;yxati keltirilgan:</p>
  <ul id="3Gvc">
    <li id="k1rS"><strong>F1</strong>: Yordam oynasini ochish.</li>
    <li id="doZQ"><strong>F2</strong>: Foydalanuvchi menyusini ochish.</li>
    <li id="uHXj"><strong>F3</strong>: Tanlangan fayl mazmunini ko&#x27;rish.</li>
    <li id="RFrd"><strong>F4</strong>: Tanlangan faylni ichki tahrirlagichda (editor) ochish.</li>
    <li id="sgkK"><strong>F5</strong>: Tanlangan faylni ikkinchi paneldagi ochiq katalogga nusxalash (Copy).</li>
    <li id="Lu0e"><strong>F6</strong>: Tanlangan faylni ikkinchi paneldagi ochiq katalogga ko&#x27;chirish (Move).</li>
    <li id="HAH9"><strong>F7</strong>: Joriy paneldagi katalog ichida yangi papka (directory) yaratish.</li>
    <li id="j1dQ"><strong>F8</strong>: Tanlangan fayl yoki katalogni o&#x27;chirish (Delete).</li>
    <li id="nItw"><strong>F9</strong>: Ekranning yuqori qismidagi asosiy menyuga fokusni o&#x27;tkazish.</li>
    <li id="eiqM"><strong>F10</strong>: Midnight Commander dasturidan chiqish.</li>
  </ul>
  <hr />
  <h3 id="xWi8">18.2-bo&#x27;lim: Faylni tahrirlash (editing) rejimidagi funksional tugmalar</h3>
  <p id="1sLL">Midnight Commander-da o&#x27;rnatilgan tahrirlagich mavjud bo&#x27;lib, u ko&#x27;rish rejimida fayl ustida turganda <strong>F4</strong> tugmasini bosish orqali ishga tushadi. Shuningdek, uni alohida rejimda quyidagi buyruq bilan ham chaqirish mumkin:</p>
  <p id="ySef"><code>mcedit &lt;fayl_nomi&gt;</code></p>
  <p id="cOEx">Tahrirlash rejimida ishlaydigan amallar ro&#x27;yxati:</p>
  <ul id="DGvh">
    <li id="3LW2"><strong>F1</strong>: Yordam oynasini ochish.</li>
    <li id="G46H"><strong>F2</strong>: Joriy faylni saqlash.</li>
    <li id="qoYU"><strong>F3</strong>: Matnni belgilash boshlanishini qayd etish. Belgilash uchun kursorni istalgan yo&#x27;nalishda harakatlantiring. Ikkinchi marta bosish belgilash yakunini qayd etadi.</li>
    <li id="7bQX"><strong>F4</strong>: Matnni qidirish va almashtirish (search/replace) muloqot oynasini ochish.</li>
    <li id="e9Z4"><strong>F5</strong>: Tanlangan matnni kursor turgan joyga nusxalash (copy/paste).</li>
    <li id="usGr"><strong>F6</strong>: Tanlangan matnni kursor turgan joyga ko&#x27;chirish (cut/paste).</li>
    <li id="0ZbS"><strong>F7</strong>: Matnni qidirish muloqot oynasini ochish.</li>
    <li id="Ftdt"><strong>F8</strong>: Tanlangan matnni o&#x27;chirish.</li>
    <li id="Fqas"><strong>F9</strong>: Ekranning yuqori qismidagi asosiy menyuga fokusni o&#x27;tkazish.</li>
    <li id="SYjU"><strong>F10</strong>: Tahrirlagichdan chiqish.</li>
  </ul>
  <p id="FKo3">Mana 19 va 20-boblarning 100% to&#x27;liq va akademik tartibdagi o&#x27;zbekcha tarjimasi:</p>
  <hr />
  <h1 id="lgVn">19-bob: Ildiz katalogni o&#x27;zgartirish (chroot)</h1>
  <p id="N6yQ"><strong>Change root (chroot)</strong> — bu joriy ishlayotgan jarayon va uning barcha quyi (child) jarayonlari uchun ko&#x27;rinadigan ildiz katalogni (<code>/</code>) o&#x27;zgartirish operatsiyasidir. Bunday o&#x27;zgartirilgan muhitda ishga tushirilgan dastur ushbu katalog daraxtidan tashqaridagi fayllar va buyruqlarga kira olmaydi.</p>
  <h3 id="u0Zk">19.1-bo&#x27;lim: Talablar (Requirements)</h3>
  <ul id="X5ga">
    <li id="uXth"><strong>Root imtiyozlari</strong> (administrator huquqi).</li>
    <li id="vKiW"><strong>Boshqa ishchi Linux muhiti</strong> (masalan, Live CD yuklanishi yoki mavjud boshqa distributiv).</li>
    <li id="SbA8"><strong>Arxitektura mosligi</strong>: chroot manbasi va boriladigan joyning arxitekturasi mos kelishi kerak (buni <code>uname -m</code> buyrug&#x27;i bilan tekshiring).</li>
    <li id="V1xq"><strong>Yadro modullari</strong>: chroot muhitida kerak bo&#x27;lishi mumkin bo&#x27;lgan yadro modullari yuklangan bo&#x27;lishi shart (masalan, <code>modprobe</code> yordamida).</li>
  </ul>
  <h3 id="KogH">19.2-bo&#x27;lim: Katalog ichida ildizni qo&#x27;lda o&#x27;zgartirish</h3>
  <ol id="MqL7">
    <li id="kHVH">Barcha talablar bajarilganiga ishonch hosil qiling.</li>
    <li id="JM2h"><strong>Vaqtinchalik API fayl tizimlarini ulang (mount):</strong>Bash<code>cd /yangi/ildiz/joylashuvi mount -t proc proc proc/ mount --rbind /sys sys/ mount --rbind /dev dev/ mount --rbind /run run/ # (ixtiyoriy) </code></li>
    <li id="5Zfc"><strong>Internet ulanishi kerak bo&#x27;lsa, DNS ma&#x27;lumotlarini nusxalang:</strong><code>cp /etc/resolv.conf etc/resolv.conf</code></li>
    <li id="nF4Q"><strong>Ildizni o&#x27;zgartiring (chroot):</strong><code>chroot /yangi/ildiz/joylashuvi /bin/bash</code></li>
    <li id="oS4J"><strong>Mahalliy bash konfiguratsiyasini yuklang:</strong><code>source /etc/profile</code> va <code>source ~/.bashrc</code></li>
    <li id="lQBM"><strong>Muhitni farqlash uchun maxsus buyruq satri (prompt) yarating:</strong><code>export PS1=&quot;(chroot) $PS1&quot;</code></li>
    <li id="pTIR"><strong>Ish yakunlangach, chiqish:</strong><code>exit</code></li>
    <li id="BuG9"><strong>Fayl tizimlarini uzing (unmount):</strong><code>cd /</code> va <code>umount --recursive /yangi/ildiz/joylashuvi</code></li>
  </ol>
  <h3 id="PPsH">19.3-bo&#x27;lim: chroot-dan foydalanish sabablari</h3>
  <p id="LHIg">Chroot odatda tizimga yuklanish yoki kirish imkoni bo&#x27;lmagan holatlarda texnik xizmat ko&#x27;rsatish uchun ishlatiladi.</p>
  <p id="IZSJ"><strong>Asosiy misollar:</strong></p>
  <ul id="1BU9">
    <li id="AbCw">Yuklovchini (bootloader - masalan, GRUB) qayta o&#x27;rnatish.</li>
    <li id="PJiK"><strong>initramfs</strong> obrazini qayta qurish.</li>
    <li id="JJmG">Paketlarni yangilash yoki eski versiyaga qaytarish (upgrade/downgrade).</li>
    <li id="UEjY">Unutilgan parolni tiklash.</li>
    <li id="Ojbn">Dasturiy ta&#x27;minotni toza muhitda yaratish (build).</li>
  </ul>
  <hr />
  <h1 id="jeyT">20-bob: Paket menejerlari (Package Managers)</h1>
  <h3 id="Ihlt">20.1-bo&#x27;lim: apt yordamida paketlarni yangilash</h3>
  <p id="4vOt"><strong>Advanced Package Tool (apt)</strong> — Debian, Ubuntu va shunga o&#x27;xshash distributivlarda dasturlarni o&#x27;rnatish va o&#x27;chirishni boshqaradi.</p>
  <ul id="WPt5">
    <li id="wdvv"><strong>update</strong>: Paketlar haqidagi yangi ma&#x27;lumotlarni (<code>Packages.gz</code>) yuklaydi.<code>sudo apt-get update</code></li>
    <li id="SLtx"><strong>upgrade</strong>: Tizimdagi barcha o&#x27;rnatilgan paketlarning eng yangi versiyalarini o&#x27;rnatadi.<code>sudo apt-get upgrade</code></li>
    <li id="BuCe"><strong>dist-upgrade</strong>: <code>upgrade</code> funksiyasidan tashqari, paketlarning yangi versiyalari bilan bog&#x27;liq qaramliklar (dependencies) o&#x27;zgarishini aqlli boshqaradi.<code>sudo apt-get dist-upgrade</code></li>
  </ul>
  <h3 id="G2Pg">20.2-bo&#x27;lim: pacman yordamida paket o&#x27;rnatish</h3>
  <p id="6zIE"><strong>Pacman</strong> — Arch Linux va uning hosilalarida ishlatiladi.</p>
  <ul id="fAFc">
    <li id="8bHK"><strong>Qidiruv</strong>: <code>pacman -Ss qidirilayotgan_soz</code></li>
    <li id="fSZ3"><strong>O&#x27;rnatish</strong>: <code>sudo pacman -S paket_nomi</code></li>
  </ul>
  <h3 id="Na8x">20.3-bo&#x27;lim: pacman yordamida paketlarni yangilash</h3>
  <ul id="P5R6">
    <li id="yl2P">Muayyan dasturni yangilash: <code>sudo pacman -S dastur_nomi</code></li>
    <li id="nXK0">Butun tizimni yangilash: <code>sudo pacman -Syu</code></li>
  </ul>
  <h3 id="asn3">20.4-bo&#x27;lim: yum yordamida paketlarni yangilash</h3>
  <p id="iy0b"><strong>Yum</strong> (Yellowdog Updater, Modified) — Red Hat, Fedora va CentOS tizimlarida qo&#x27;llaniladi.</p>
  <ul id="pPrP">
    <li id="p5NS"><strong>search</strong>: Kerakli dasturni repozitoriyalardan qidiradi.<code>yum search qidiruv_sozi</code></li>
    <li id="clCf"><strong>install</strong>: Dasturni va uning barcha kerakli qaramliklarini avtomatik topib o&#x27;rnatadi.<code>sudo yum install paket_nomi</code></li>
    <li id="tLD3"><strong>update</strong>: O&#x27;rnatilgan paketlarni eng so&#x27;nggi versiyaga yangilaydi.<code>sudo yum update</code></li>
  </ul>
  <p id="SRR4"><code>apt</code>-dan farqli o&#x27;laroq, <code>yum</code> buyruqlari har qanday operatsiyadan oldin repozitoriya metama&#x27;lumotlarini avtomatik tekshiradi.</p>
  <hr />
  <p id="2lV0">Mana ushbu kitobning so&#x27;nggi bobi va mualliflar ro&#x27;yxatining 100% to&#x27;liq o&#x27;zbekcha tarjimasi:</p>
  <hr />
  <h1 id="DvU2">21-bob: Linux yadrosini (kernel) kompilyatsiya qilish</h1>
  <h3 id="EEMx">21.1-bo&#x27;lim: Ubuntu tizimida Linux yadrosini kompilyatsiya qilish</h3>
  <p id="QpKP"><strong>Ogohlantirish:</strong> Diskingizda kamida 15 GB bo&#x27;sh joy borligiga ishonch hosil qiling.</p>
  <p id="r8aJ">Ubuntu &gt;= 13.04 versiyalarida kompilyatsiya qilish:</p>
  <h4 id="Jick">A varianti) Git-dan foydalanish</h4>
  <p id="0MGn">Agar siz doimiy ravishda Ubuntu yadrosining so&#x27;nggi manbalari bilan sinxron bo&#x27;lishni xohlasangiz, Git-dan foydalaning. Batafsil ko&#x27;rsatmalarni &quot;Kernel Git Guide&quot; qo&#x27;llanmasidan topishingiz mumkin. Git repozitoriyasi kerakli boshqaruv fayllarini o&#x27;z ichiga olmaydi, shuning uchun ularni quyidagi buyruq bilan yaratishingiz kerak:</p>
  <p id="uTgO"><code>fakeroot debian/rules clean</code></p>
  <h4 id="a7JU">B varianti) Manba arxivi (source archive) yuklab olish</h4>
  <p id="K8W8">Bu variant standart Ubuntu paketlarini qo&#x27;shimcha tuzatishlar (patches) bilan qayta qurmoqchi bo&#x27;lgan foydalanuvchilar uchun. Quyidagi buyruq yordamida qurish qaramliklarini (dependencies) o&#x27;rnating va manbani joriy katalogga chiqaring:</p>
  <ol id="mCbM">
    <li id="mq4l">Quyidagi paketlarni o&#x27;rnating:<code>sudo apt-get build-dep linux-image-</code>uname -r&#x60;&#x60;</li>
  </ol>
  <h4 id="SjYd">C varianti) Manba paketini yuklab olish va qurish</h4>
  <p id="yJEl">Bu variant Ubuntu tomonidan tahrirlangan yadro manbasini o&#x27;zgartirish yoki u bilan tajriba o&#x27;tkazishni xohlovchilar uchun.</p>
  <ol id="g8a3">
    <li id="2Qwd">Eng so&#x27;nggi yadro manbasini <code>kernel.org</code> saytidan yuklab oling.</li>
    <li id="Vvx9">Arxivni katalogga chiqaring va uning ichiga kiring:Bash<code>tar xf linux-*.tar.xz cd linux-* </code></li>
    <li id="4qSZ"><strong>ncurses</strong> konfiguratsiya interfeysini quring:<code>make menuconfig</code></li>
    <li id="zJsg">Standart konfiguratsiyani qabul qilish uchun yo&#x27;nalish tugmalari yordamida <code>&lt; Exit &gt;</code> yozuvini belgilang va <strong>Enter</strong> ni bosing.</li>
    <li id="ukvN">Konfiguratsiyani saqlash uchun yana bir bor <strong>Enter</strong> ni bosing.</li>
    <li id="FQy8">Yadroni qurish uchun <code>make</code> buyrug&#x27;idan foydalaning:<code>make</code><em>Eslatma: Bir nechta protsessor yadrolaridan foydalanish va fayllarni parallel kompilyatsiya qilish uchun <code>-j</code> bayrog&#x27;idan (masalan, <code>make -j4</code>) foydalanishingiz mumkin.</em></li>
  </ol>
  <p id="3vja">Siqilgan yadro obrazi (compressed kernel image) quyidagi manzilda joylashgan bo&#x27;ladi: <code>arch/[arxitektura]/boot/bzImage</code>. Bu yerda <code>[arxitektura]</code> sizning tizimingiz turiga (masalan, x86) teng.</p>
  <hr />
  <h1 id="sDLU">Minnatdorchilik (Credits)</h1>
  <p id="twDY">Ushbu kontentni taqdim etishda yordam bergan <strong>Stack Overflow Documentation</strong> hamjamiyatining barcha a&#x27;zolariga o&#x27;z minnatdorchiligimizni bildiramiz. Yangi kontent yoki o&#x27;zgarishlar bo&#x27;yicha takliflarni <code>web@petercv.com</code> manziliga yuborishingiz mumkin.</p>
  <p id="MKSE"><strong>Mualliflar va hissa qo&#x27;shganlar (ba&#x27;zilari):</strong></p>
  <ul id="SXfI">
    <li id="oHtF"><strong>Léo Léopold Hertz 준영</strong> — 21-bob</li>
    <li id="Lvyl"><strong>Nathan Osman</strong> — 21-bob</li>
    <li id="gLyU"><strong>BrightOne</strong> — 9, 13, 14 va 19-boblar</li>
    <li id="N6rd"><strong>Philip Kirkbride</strong> — 4, 7, 12 va 20-boblar</li>
    <li id="7FNP"><strong>Sava</strong> — 1, 4, 14 va 18-boblar</li>
    <li id="bxe7"><strong>Y4Rv1K</strong> — 6 va 17-boblar</li>
    <li id="wW1A"><em>(Va ro&#x27;yxatda keltirilgan o&#x27;nlab boshqa ko&#x27;ngillilar)</em></li>
  </ul>
  <hr />
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="HqDT" data-align="center"><strong>Tabriklayman! Biz Linux bo&#x27;yicha professional qaydlar kitobining barcha asosiy qismlarini tarjima qilib tugatdik. <br /><br />Kitob Ingiliz tilidan tarjima qilindi: <br />Asl kitob bu havola orqali yuklab olishingiz mumkin:</strong>  <br />https://goalkicker.com/LinuxBook/</p>
  </section>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@snrg_py/5aqOCoe0dTD</guid><link>https://teletype.in/@snrg_py/5aqOCoe0dTD?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py</link><comments>https://teletype.in/@snrg_py/5aqOCoe0dTD?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py#comments</comments><dc:creator>snrg_py</dc:creator><title>Arduino Amaliy:                                          (tosh qog'oz qaychi )</title><pubDate>Thu, 25 Dec 2025 21:17:41 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/bc/b5/bcb53444-9f9d-4f96-8f31-aa76281d084c.png"></media:content><description><![CDATA[<img src="https://ibles-content.tinkercad.com/F5E/KC92/LEMTZAXH/F5EKC92LEMTZAXH.jpg?width=620&amp;height=620&amp;fit=bounds"></img>Salom ijodkorlar! Ushbu ko'rsatmalarda men sizga tosh qog'oz qaychi o'yinini qanday qilganimni ko'rsataman, Ha siz buni to'g'ri eshitdingiz!]]></description><content:encoded><![CDATA[
  <figure id="AFP6" class="m_original">
    <img src="https://ibles-content.tinkercad.com/F5E/KC92/LEMTZAXH/F5EKC92LEMTZAXH.jpg?width=620&height=620&fit=bounds" width="620" />
  </figure>
  <figure id="8lSt" class="m_original">
    <img src="https://ibles-content.tinkercad.com/FLA/0PCB/LEMTZBBM/FLA0PCBLEMTZBBM.jpg?width=620&height=620&fit=bounds" width="620" />
  </figure>
  <p id="E7p2">https://meet.google.com/jta-hitg-tfe?authuser=0<br /><br />Salom ijodkorlar! Ushbu ko&#x27;rsatmalarda men sizga tosh qog&#x27;oz qaychi o&#x27;yinini qanday qilganimni ko&#x27;rsataman, Ha siz buni to&#x27;g&#x27;ri eshitdingiz!</p>
  <p id="Xflj">Qaror qabul qilish uchun tosh qog&#x27;oz qaychi o&#x27;ynagan kunlarni eslaysizmi?</p>
  <p id="u3xd">O&#x27;sha yaxshi kunlar qanday edi, o&#x27;sha kunlar unutilmas, keksayganimiz sayin bizda bir nechta do&#x27;stlar qoladi, ba&#x27;zilari esa do&#x27;stlarsiz tugaydi.</p>
  <p id="3wmO">Bu kulgili tuyulishi mumkin, lekin u qattiq haqdir va ularning ko&#x27;plari allaqachon bu tajribali bo&#x27;lishi mumkin.</p>
  <p id="a6GX">Endi siz so&#x27;rashingiz mumkin, nega men bularning barchasini aytyapman? Javob ushbu loyihada yotadi.</p>
  <p id="4Gk4">Men introverts yoki zerikish bilan urdi, kim bir necha uchun, shuningdek, interaktiv loyiha sifatida bu qildi.</p>
  <p id="5dPW">&#x27;Bu hech qachon qaror qabul qilish, aks holda do&#x27;stlaringiz uchun ishlatiladigan xiyla kim siz uchun bir do&#x27;stim! ular tosh qog&#x27;oz qaychi o&#x27;ynaganda.</p>
  <p id="y8Ch"><strong>Ushbu loyihaning rejasi</strong></p>
  <p id="IW5D">Ushbu loyiha uchun ushbu sxema Tinkercad <strong>sxemalari yordamida, so&#x27;ngra xuddi shu dastur yordamida simulyatsiya qilingan</strong></p>
  <p id="Nta7"><strong>Simulyatsiyaning afzalliklari</strong></p>
  <p id="lNK4">Hech qanday virtual sinovsiz quradigan loyihani o&#x27;ylab ko&#x27;ring, oxirida, agar loyiha muvaffaqiyatsiz bo&#x27;lsa, jarayonda vaqtni behuda sarflashingiz mumkin.</p>
  <p id="0QiW">Ushbu dramalarni yo&#x27;q qilish uchun men simulyatorlardan foydalanishni taklif qilaman.</p>
  <p id="PR6A">Ushbu loyihada men sxemani qurish va sinab ko&#x27;rish uchun Tinkercad Circuits simulyatoridan foydalandim, keyinchalik ushbu virtual loyihani haqiqiy elektron komponentlar yordamida jismoniy loyihaga aylantirdim.</p>
  <p id="12CD">Bu vaqt va pulni tejash uchun loyihaning 100% mukammal ishlashini ta&#x27;minlaydi.</p>
  <p id="bSV9"><strong>Eslatma:</strong> rahmat WWW.LETSMAKEPROJECTS.COM arduino kodlari uchun</p>
  <p id="qMtG"><strong>Bizning loyihamiz nima qiladi?</strong></p>
  <p id="N0E0">Yuqorida aytib o&#x27;tilganidek, rok qog&#x27;oz qaychi o&#x27;yinni o&#x27;ynash uchun 2 kishiga muhtoj, bu erda siz bitta odamsiz, ikkinchisi esa ushbu qurilma.</p>
  <p id="ki3a"><strong>Rahmat NextPCB:</strong></p>
  <p id="sMOU">Ushbu loyiha NextPCB ko&#x27;magi tufayli ajoyib muvaffaqiyat bilan yakunlandi. Agar sizda PCB loyihalari bo&#x27;lsa, jozibador chegirmalar olish uchun ularning veb-saytiga tashrif buyuring.</p>
  <ul id="D9Gn">
    <li id="mDG1">0-5pcs PCB prototiplari uchun faqat 10$. <a href="https://www.nextpcb.com/?code=Romeohacker" target="_blank">Nextpcb.com/pcbprototype</a></li>
    <li id="VoHQ">Ro&#x27;yxatdan o&#x27;ting va NextPCB dan $100 oling: <a href="https://www.nextpcb.com/register?code=Romeohacker" target="_blank">Nextpcb.com/coupon</a></li>
  </ul>
  <p id="MBr6">Nima Uchun NextPCB</p>
  <ul id="OgFp">
    <li id="9EFs">Eng samarali, iqtisodiy, innovatsion PCB echimlari</li>
    <li id="NQ1n">Yuqori Sifat</li>
    <li id="RFkQ">Arzonroq Narx</li>
    <li id="JN2q">Tezroq Yetkazib Berish</li>
  </ul>
  <p id="6NcW"><strong>Bu interaktiv qurilma va bu ajoyib oilaviy vaqt o&#x27;tkazish uchun ishlatilishi mumkin!</strong></p>
  <p id="Itwy">Bu sizning do&#x27;stingiz uchun mukammal o&#x27;rinbosar sifatida ishlaydi!(hazil)</p>
  <p id="dUMt">Faqat ushbu qurilma oldida belgilaringizni ko&#x27;rsating va mashina nima berishini ko&#x27;ring.</p>
  <p id="tnvp">Servolar tasodifiy ko&#x27;rinishi uchun kodlanganligi sababli qurilma oxiridan aldash imkoniyati yo&#x27;q.</p>
  <p id="nW6O">Bu bilan bizga bu loyihani qurish tomon bosh qilaylik dedi etilmoqda.</p>
  <h2 id="xg9R">Materiallar</h2>
  <figure id="SidY" class="m_original">
    <img src="https://ibles-content.tinkercad.com/FLB/NE3I/LEMTZC07/FLBNE3ILEMTZC07.png?width=620&height=620&fit=bounds" width="593" />
  </figure>
  <figure id="qkVU" class="m_original">
    <img src="https://ibles-content.tinkercad.com/FTW/DD1J/LEMTZBTL/FTWDD1JLEMTZBTL.png?width=620&height=620&fit=bounds" width="593" />
  </figure>
  <p id="w1Jh">Bu yerda siz ham men sotib yo&#x27;nalishlarga bergan bu loyihani qurish kerak bo&#x27;ladi materiallar ro&#x27;yxati</p>
  <ul id="zTzf">
    <li id="SY4V">Tinkercad</li>
    <li id="4I8k">Arduino IDE</li>
    <li id="YzFs">Internetga ulangan kompyuter/noutbuk</li>
    <li id="yieK">Ramka yasash uchun karton</li>
    <li id="XPui">Arduino UNO bu <strong>yerdan</strong> oling (havola olib tashlandi)</li>
    <li id="93lH">dasturlash kabeli</li>
    <li id="LJjV">Plastik Servos x 3 bu <strong>yerdan</strong> (havola olib tashlandi)</li>
    <li id="oEdO">Oddiy o&#x27;chirish tugmasi</li>
    <li id="qza0">Qayta zaryadlanuvchi batareyalar/18650 yoki lityum-ion batareyalar</li>
    <li id="XCfj">Batareya ushlagichi</li>
    <li id="cR5P">Kichik Non Taxtasi</li>
    <li id="8L9n">Jumper simlari</li>
    <li id="7IhF">Bu <strong>yerdan</strong> ultratovush sensori va o&#x27;tish simlari (havola olib tashlandi)</li>
    <li id="C3GA">Issiq elim</li>
    <li id="jbla">Super elim</li>
    <li id="Nlo1">Qora mato bo&#x27;yoq</li>
    <li id="CZ7J">Shaffof lenta</li>
  </ul>
  <p id="rOly">Siz mahsulotni yuqoridagi havolalarimdan olishingiz mumkin, shunda siz meni qo&#x27;shimcha xarajatlarsiz qo&#x27;llab-quvvatlaysiz.</p>
  <h2 id="anEb">1-Qadam: Tinkercad Circuits Muharriri Yordamida Simulyatsiya</h2>
  <figure id="8lWi" class="m_original">
    <img src="https://ibles-content.tinkercad.com/FSZ/20WC/LEMTZKW3/FSZ20WCLEMTZKW3.png?width=620&height=620&fit=bounds" width="620" />
  </figure>
  <p id="cH4g">Haqiqiy modelni qurishdan oldin men sxemani yaratish uchun Tinkercard-dan foydalanardim.</p>
  <p id="j12H"><strong>VIDEO:</strong> men simulyatsiya videosini yozib oldim va uning funktsiyalari haqida aniq tasavvurga ega bo&#x27;lishingiz uchun uning qanday ishlashini ko&#x27;rsatish uchun ushbu bosqichning oxiriga biriktirdim.</p>
  <p id="3Npo">Chalkashlik uchun biron bir xonani oldini olish uchun men sxemani qurgandan keyin simulyatordan foydalanish videosini qo&#x27;shdim.</p>
  <p id="hjS0">Sxemani qurish juda oddiy va oson, buning uchun komponentlarni sudrab olib tashlash, ularni rangli simlar bilan ulash va kodni matn shaklida yuklash kifoya.</p>
  <p id="h3As">Men allaqachon kodni yozdim va faqat ushbu kodni berdim.</p>
  <p id="KJZq">Kod ishlayotganligini tekshirish uchun simulyatorni yoqing.</p>
  <p id="PZal">Kodi mukammal yaxshi ishlaydi va siz bilan o&#x27;ynash uchun, men bir xil kodlari bergan.</p>
  <p id="3CXQ">Kod uchun quyidagi amallarni bajaring.</p>
  <p id="Z8GT">Kodga ko&#x27;ra, servo harakati tasodifiydir, shuning uchun servo keyingi harakatini aniqlab bo&#x27;lmaydi.</p>
  <ul id="fWcl">
    <li id="9ner">Tinkercad sxemalari va Arduino yordamida tosh qog&#x27;oz qaychi-1-qadam<a href="https://ibles-content.tinkercad.com/F7Y/4RJK/LEMTZI90/F7Y4RJKLEMTZI90.mp4" target="_blank">Yuklash</a></li>
  </ul>
  <h2 id="dcjS">2-Qadam: Tosh Qog&#x27;oz Qaychi Sxemasi</h2>
  <figure id="EyzP" class="m_original">
    <img src="https://ibles-content.tinkercad.com/F8L/NRET/LEMTZIO3/F8LNRETLEMTZIO3.png?width=620&height=620&fit=bounds" width="620" />
  </figure>
  <p id="sqd9">Ushbu loyihani amalga oshirish uchun ishlatiladigan sxema yuqorida ko&#x27;rsatilgan</p>
  <p id="6fVE">Bu oddiy va oson, agar siz sxemani o&#x27;qishda qiyinchiliklarga duch kelsangiz, bu erda elektron qurish uchun yozma tushuntirish mavjud</p>
  <p id="4QMp"><strong>Ultrasonik yoki HC-SR04 sensor ulanishlari</strong></p>
  <p id="P5gJ">Bu bor 4 Gnd bor ignalar majmui, Trig, Echo va Vcc</p>
  <p id="th1e">Gnd va Vcc salbiy va ijobiy elektr ta&#x27;minoti uchun va bu bevosita ulangan-va + bir breadboard haqida relslar</p>
  <p id="CeT5">Trig Uno kuni D11 pin ulangan</p>
  <p id="3EUW">Echo d10 piniga ulangan</p>
  <p id="mP2P"><strong>Arduino uno ulanishlari</strong></p>
  <p id="x9R0">Barcha qismlarga elektr ta&#x27;minoti BMT kengashi tomonidan taqdim etiladi</p>
  <p id="75rV">Shunday qilib, biz BMT Gnd - ni breadboard-ga ulaymiz</p>
  <p id="hB0n">5v uchun Uno + breadboard temir</p>
  <p id="BC1I">Arduino ning Gnd va Vin pinlari batareyadan tashqi quvvat manbai uchun ishlatiladi</p>
  <p id="yMJZ"><strong>Mikro servo ulanishlar</strong></p>
  <p id="HiXp"><strong>Ushbu loyihada biz 3 mikro servosidan foydalanamiz</strong></p>
  <p id="BgOj"><strong>Har bir mikro servo 3 kirish piniga ega</strong></p>
  <p id="Nla5">Ijobiy, salbiy va Signal pimi</p>
  <p id="Y8Qp">Barcha 3 servolarning ijobiy va salbiy pinlari breadboardning + va-relslariga ulanadi</p>
  <p id="UDxM">Servo signal pin D3 ulangan bo&#x27;ladi-da, Uno haqida D6 va D9 Pim</p>
  <p id="qQvC">Bu sxemani yakunlaydi</p>
  <h2 id="4Vy3">3-Qadam: Ulanishlarni O&#x27;rnatish</h2>
  <figure id="Epjw" class="m_original">
    <img src="https://ibles-content.tinkercad.com/FEY/993D/LEMTZC39/FEY993DLEMTZC39.png?width=620&height=620&fit=bounds" width="593" />
  </figure>
  <figure id="l5GZ" class="m_original">
    <img src="https://ibles-content.tinkercad.com/FP6/UQP0/LEMTZC5O/FP6UQP0LEMTZC5O.png?width=620&height=620&fit=bounds" width="593" />
  </figure>
  <figure id="6He7" class="m_original">
    <img src="https://ibles-content.tinkercad.com/FR2/LQFW/LEMTZC8D/FR2LQFWLEMTZC8D.png?width=620&height=620&fit=bounds" width="593" />
  </figure>
  <p id="htMi"><a href="true">Ko&#x27;rish 1 ko&#x27;proq</a></p>
  <p id="3YZO">Biz allaqachon simulyatsiya va sxemani qurishdan o&#x27;tganimizdek, sxema hech qanday qiyin ish bo&#x27;lmaydi</p>
  <p id="9mKH">Jumper simlarini komponentlarga ulashdan, so&#x27;ngra non taxtasi bilan ulanishdan boshlang</p>
  <p id="eiBc">Ulanish paytida bo&#x27;shashgan o&#x27;tish simlarini ishlatishdan saqlaning, chunki agar shunday qilsangiz va oxirida, agar biron bir komponent ishlamasa, vaqtni behuda sarflashga olib keladigan aniq joyni topish qiyin ish</p>
  <p id="ltVj">Barcha komponentlar orasidagi aloqalarni o&#x27;rnatganingizdan so&#x27;ng biz kodni yuklashga tayyormiz</p>
  <h2 id="S8Fx">4-qadam: tosh qog&#x27;oz qaychi uchun Arduino kodi</h2>
  <figure id="Z0e1" class="m_original">
    <img src="https://ibles-content.tinkercad.com/F2N/PCM2/LEMTZCBG/F2NPCM2LEMTZCBG.jpg?width=620&height=620&fit=bounds" width="620" />
  </figure>
  <figure id="snlf" class="m_original">
    <img src="https://ibles-content.tinkercad.com/F81/0IL8/LEMU0ZAH/F810IL8LEMU0ZAH.jpg?width=620&height=620&fit=bounds" width="620" />
  </figure>
  <p id="tzat">Mana, <a href="https://drive.google.com/file/d/1T0LncaEpSd0mXs4OAsLF_dOtke5KIPC0/view?usp=share_link" target="_blank"><strong>tosh qog&#x27;oz qaychi uchun Arduino kodi</strong></a> simulyatorda xuddi shu kod ishlatilgan</p>
  <p id="9ZMg">Siz ushbu kodni yuklab olishingiz va Arduino IDE-da ochishingiz mumkin</p>
  <p id="VMw0">UNO platasini dasturlash kabeli bilan ulang va menyu-asboblar-portga o&#x27;tib, IDE ichidagi to&#x27;g&#x27;ri portni tekshiring</p>
  <p id="MG0H">Portni tanlang, taxta turini tanlang va yuklash-ni bosing</p>
  <p id="JXm6">Kengash kod bilan yuklangandan so&#x27;ng biz sxemani sinab ko&#x27;rishimiz mumkin</p>
  <p id="LOAH"><strong>Eslatma:</strong> Arduino USB quvvatidan foydalanmaslikni tavsiya qilaman, aksincha batareyadan bo&#x27;lgani kabi alohida quvvat manbaidan foydalaning</p>
  <p id="nYPj">ushbu bosqichdagi ikkinchi rasmda mikro servolarga ajratilgan pinlar ko&#x27;rsatilgan</p>
  <h2 id="W6PE">5-Qadam: Ramka Yasash</h2>
  <figure id="8j9D" class="m_original">
    <img src="https://ibles-content.tinkercad.com/FC2/V2IE/LEMTZBUY/FC2V2IELEMTZBUY.png?width=620&height=620&fit=bounds" width="593" />
  </figure>
  <figure id="tlBR" class="m_original">
    <img src="https://ibles-content.tinkercad.com/FR1/ZBLU/LEMTZBVD/FR1ZBLULEMTZBVD.png?width=620&height=620&fit=bounds" width="593" />
  </figure>
  <figure id="JDTG" class="m_original">
    <img src="https://ibles-content.tinkercad.com/FHC/4CNY/LEMTZBWH/FHC4CNYLEMTZBWH.png?width=620&height=620&fit=bounds" width="593" />
  </figure>
  <p id="CQ9w"><a href="true">Yana 3 ni ko&#x27;rish</a></p>
  <p id="rHvL">Barcha elektronikalarni ushlab turish uchun men kartondan kassa yasadim, chunki elektron komponentlar standart o&#x27;lchamlarda bo&#x27;ladi, siz ushbu o&#x27;lchamlardan mos keladigan muammolar haqida qayg&#x27;urmasdan foydalanishingiz mumkin.</p>
  <p id="fy2f">Men ushbu o&#x27;lchamlarning qismlarini ishlatdim</p>
  <p id="6QzP">Baza va yuqori 2 dona 15 x 8cm uchun</p>
  <p id="DXX7">Tomonlar uchun 2 dona 15 x 4 sm va qirralarning 8 x 4 sm</p>
  <p id="SHbL">Siz ushbu kartondan foydalanishingiz mumkin, ammo unga yanada jozibali ko&#x27;rinish berish uchun ularni mato bo&#x27;yoqlari yordamida qora rangga bo&#x27;yadim</p>
  <p id="OKza"><strong>Bilasizmi?</strong></p>
  <p id="iCgD">Agar sizda kartonni bo&#x27;yash uchun bo&#x27;yoq cho&#x27;tkasi va vatingiz bo&#x27;lmasa, siz quloqchinlar / quloq tamponlaridan foydalanishingiz mumkin, ular kartonni bo&#x27;yash uchun juda yaxshi ishlaydi</p>
  <h2 id="ixzj">6-Qadam: Qurilish Ramkasi</h2>
  <figure id="KejD" class="m_original">
    <img src="https://ibles-content.tinkercad.com/FQ0/A47Z/LEMTZCDN/FQ0A47ZLEMTZCDN.png?width=620&height=620&fit=bounds" width="593" />
  </figure>
  <figure id="DkFp" class="m_original">
    <img src="https://ibles-content.tinkercad.com/FKL/ESGV/LEMTZCF4/FKLESGVLEMTZCF4.png?width=620&height=620&fit=bounds" width="593" />
  </figure>
  <figure id="V3WM" class="m_original">
    <img src="https://ibles-content.tinkercad.com/FWG/TNPM/LEMTZCFV/FWGTNPMLEMTZCFV.png?width=620&height=620&fit=bounds" width="593" />
  </figure>
  <p id="bD44"><a href="true">Yana 3 ni ko&#x27;rish</a></p>
  <p id="iNRh">Karton bilan bo&#x27;yalgan joylar quriganidan keyin biz ularni yig&#x27;ishimiz mumkin, men sizga yopishtirish uchun super elim ishlatishni maslahat bermayman, chunki agar siz superglue qo&#x27;llaganingizdan keyin biron bir joyni o&#x27;tkazib yuborsangiz, sirt juda qattiq bo&#x27;ladi va yana elim surtsangiz, xuddi shu joy yaxshiroq xizmat qilmaydi</p>
  <p id="oYvP">Men issiq elimdan foydalanishni maslahat beraman, bu erda taqdim etilgan bosqichlardagi rasmlarni kuzatib boring, keyinchalik qirralar bilan boshlang</p>
  <p id="YbXL">Kuchni oshirish uchun burchaklar uchun ham issiq elim qo&#x27;shing</p>
  <h2 id="IuHT">7-Qadam: Ramka Ichiga Komponentlarni Qo&#x27;shish</h2>
  <figure id="oLFl" class="m_original">
    <img src="https://ibles-content.tinkercad.com/FMX/4LR8/LEMTZCL9/FMX4LR8LEMTZCL9.png?width=620&height=620&fit=bounds" width="593" />
  </figure>
  <figure id="s4Zc" class="m_original">
    <img src="https://ibles-content.tinkercad.com/FW5/DFDN/LEMTZCME/FW5DFDNLEMTZCME.png?width=620&height=620&fit=bounds" width="593" />
  </figure>
  <figure id="2RJx" class="m_original">
    <img src="https://ibles-content.tinkercad.com/FD7/67XV/LEMTZCQ4/FD767XVLEMTZCQ4.png?width=620&height=620&fit=bounds" width="593" />
  </figure>
  <p id="vWMm"><a href="true">Ko&#x27;rish 2 ko&#x27;proq</a></p>
  <p id="hNxH">Ramkamiz tayyor bo&#x27;lgandan so&#x27;ng, biz ilgari yig&#x27;ilgan elektronikani qo&#x27;shishimiz mumkin.</p>
  <p id="Ex0Z">Ramka ichidagi komponentlarni mahkamlashdan oldin sxemani ishlash uchun sinab ko&#x27;ring, agar biror narsani o&#x27;tkazib yuborsangiz, avval uni tuzating.</p>
  <p id="Nxda">Har qanday komponentni siljitmaslik uchun komponentlarni taglikka joylashtirishdan oldin oz miqdorda superglue ishlating.</p>
  <p id="H1L7">Arduino kichik breadboard ustiga o&#x27;tiradi, holbuki, men bazasiga bir batareya saqlovchi va breadboard qo&#x27;shib bo&#x27;ladi.</p>
  <p id="gWRE">Batareya va Arduino platasi o&#x27;rtasida kalitni qo&#x27;shing, bu oddiy kalit tugmani bosish orqali quvvatni ta&#x27;minlashi kerak</p>
  <p id="XLmD">Ushbu bosqichning oxirgi rasmida qutidagi barcha komponentlarning qushlarning ko&#x27;rinishi ko&#x27;rsatilgan.</p>
  <p id="gOOZ">Endi asosiy qism o&#x27;qiladi, biz keyingi bosqichda yuqori qism ustida ishlaymiz.</p>
  <h2 id="1Vl7">8-Qadam: Yuqori Qismni O&#x27;rnating</h2>
  <figure id="H3ew" class="m_original">
    <img src="https://ibles-content.tinkercad.com/F5N/AVDG/LEMTZCSJ/F5NAVDGLEMTZCSJ.png?width=620&height=620&fit=bounds" width="593" />
  </figure>
  <figure id="wPuD" class="m_original">
    <img src="https://ibles-content.tinkercad.com/FOV/6IN0/LEMTZCTD/FOV6IN0LEMTZCTD.png?width=620&height=620&fit=bounds" width="593" />
  </figure>
  <figure id="30Xz" class="m_original">
    <img src="https://ibles-content.tinkercad.com/FLR/XLK3/LEMTZCTS/FLRXLK3LEMTZCTS.png?width=620&height=620&fit=bounds" width="593" />
  </figure>
  <p id="dztC"><a href="true">Ko&#x27;rish 4 ko&#x27;proq</a></p>
  <p id="WTep">Yuqori qismda servo kabi barcha ishlaydigan komponentlar mavjud, bu bizning loyihamizning eng muhim qismidir</p>
  <p id="RjZ8">Biz birinchi navbatda yuqori qopqoqqa ultrasonik sensorni qo&#x27;shamiz (ilgari kartondan qilingan)</p>
  <p id="Grt4">Men ushbu sensorni qo&#x27;shish uchun kartonda kichik bir uyani yasadim, uni aniq joyga qo&#x27;yishingiz mumkin</p>
  <p id="lDeG">Hammasini birlashtirish uchun issiq elimdan foydalaning</p>
  <p id="2wdB">Endi bizning yuqori qismimiz tayyor, avval qurilmadagi yuqori kalitdagi servolarni yopishtirishdan oldin va servo harakatlarini tekshiring</p>
  <p id="q6jl">Siz bu qismni o&#x27;tkazib yubora olmaysiz va uni to&#x27;g&#x27;ridan-to&#x27;g&#x27;ri yopishtira olmaysiz, chunki servo noto&#x27;g&#x27;ri joylashishi noto&#x27;g&#x27;ri harakatlarga olib keladi</p>
  <p id="43KX">harakatlarni tekshiring va servolarni tepaga yopishtiring</p>
  <p id="kbu8">Ushbu jarayonning oxiri bizda deyarli loyihani tugatishga tayyormiz</p>
  <h2 id="oUV9">9-Qadam: Tugatish</h2>
  <figure id="K4Kq" class="m_original">
    <img src="https://ibles-content.tinkercad.com/F34/HXBE/LEMTZCUN/F34HXBELEMTZCUN.png?width=620&height=620&fit=bounds" width="593" />
  </figure>
  <figure id="3Wzr" class="m_original">
    <img src="https://ibles-content.tinkercad.com/F22/NKJF/LEMTZCUO/F22NKJFLEMTZCUO.png?width=620&height=620&fit=bounds" width="593" />
  </figure>
  <figure id="VAr8" class="m_original">
    <img src="https://ibles-content.tinkercad.com/FXQ/88K0/LEMTZCUP/FXQ88K0LEMTZCUP.png?width=620&height=620&fit=bounds" width="593" />
  </figure>
  <p id="9Arz"><a href="true">Ko&#x27;rish 4 ko&#x27;proq</a></p>
  <p id="izhw">Bilasizmi va men bilamanki, ushbu loyihada ko&#x27;plab o&#x27;tish simlari ishlatilgan va ularni tashqarida qoldirish loyihani tartibsiz ko&#x27;rinishga olib keladi.</p>
  <p id="QrXp">Shunday qilib, tugatish bu ko&#x27;rinishni ancha toza qiladi.</p>
  <p id="6euu">Ushbu qurilmadan uzoq vaqt foydalanganimizdan keyin qayta zaryadlanuvchi batareyalardan foydalanayotganimiz sababli batareyani zaryadlash kerak, buning uchun ramkani ochish va yopish uchun tizim kerak</p>
  <p id="7uR0">Shu maqsadda, orqa ramkaning bir tomoni shaffof lenta / yopishqoq lenta yordamida birlashtiriladi, shunda biz kerak bo&#x27;lganda batareyaga va kontaktlarning zanglashiga kirishimiz mumkin</p>
  <p id="G0yb">Yuqoridagi rasmlarda ko&#x27;rsatilgan kalitlarni joylashtirishni ko&#x27;rib chiqing</p>
  <h2 id="k3pT">10-Qadam: Belgilarni Qo&#x27;shish</h2>
  <figure id="OAfH" class="m_original">
    <img src="https://ibles-content.tinkercad.com/F73/72KQ/LEMTZCXP/F7372KQLEMTZCXP.png?width=620&height=620&fit=bounds" width="593" />
  </figure>
  <figure id="Riho" class="m_original">
    <img src="https://ibles-content.tinkercad.com/FRQ/3975/LEMTZCYO/FRQ3975LEMTZCYO.png?width=620&height=620&fit=bounds" width="593" />
  </figure>
  <figure id="DWLG" class="m_original">
    <img src="https://ibles-content.tinkercad.com/F8M/RN07/LEMTZCYP/F8MRN07LEMTZCYP.png?width=620&height=620&fit=bounds" width="593" />
  </figure>
  <p id="mMFI"><a href="true">Ko&#x27;rish 1 ko&#x27;proq</a></p>
  <p id="4zZ9">Men micro servo shoxi qo&#x27;shiladi 1cm x 11cm bo&#x27;lgan karton chiziqlar kesib qilgan, men bu loyiha uchun buyumlar eng chop 3D bir rejasi bor edi, lekin ularning ko&#x27;plari o&#x27;z uyida bir 3D printer yo&#x27;q, deb men karton yordamida qilgan.</p>
  <p id="aNP3">Endi buni har kim amalga oshirishi mumkin, chunki hamma kartonga kirish huquqiga ega</p>
  <p id="GrwO">Tosh, qog&#x27;oz va qaychi belgilari/ramzlari men qog&#x27;ozga qo&#x27;l bilan chizganman</p>
  <p id="tYfC">Ushbu belgilarni karton chiziqlar uchiga yopishtiring, endi superglue yordamida bu chiziqlarni mikro servo shoxlariga ulang</p>
  <p id="69kQ">agar elim butunlay quruq sinov, bu qurilma bor bir marta, shubhasiz, u har qanday masalalar holda ishlashi kerak</p>
  <h2 id="kTPM">11-qadam: qanday foydalanish</h2>
  <figure id="dQS0" class="m_original">
    <img src="https://ibles-content.tinkercad.com/FB0/28XC/LEMTZD0V/FB028XCLEMTZD0V.png?width=620&height=620&fit=bounds" width="593" />
  </figure>
  <figure id="IKgw" class="m_original">
    <img src="https://ibles-content.tinkercad.com/FYT/ZIX2/LEMTZD1G/FYTZIX2LEMTZD1G.png?width=620&height=620&fit=bounds" width="593" />
  </figure>
  <p id="43mb">Ushbu qurilmadan foydalanish juda oddiy</p>
  <ul id="jvMn">
    <li id="r9ys">Faqat tugmani yoqing va 2 soniya kuting.</li>
    <li id="7KFo">Endi qo&#x27;llaringizni sensorga yaqinlashtiring va tosh qog&#x27;oz yoki qaychi belgilarini yasashni boshlang</li>
    <li id="8VLh">Qurilma o&#x27;z belgilarini ko&#x27;rsatadi</li>
    <li id="hKwX">Endi sizda qattiq raqobatchi bor!</li>
    <li id="mXJq">Qurilmadagi belgilar tasodifiy bo&#x27;ladi, shuning uchun siz keyingi harakatni taxmin qila olmaysiz</li>
    <li id="fbel">Ushbu qurilmani taassurot qoldirish uchun oilaviy vaqt partiyalariga yoki do&#x27;stingizning uyiga olib boring.</li>
  </ul>
  <p id="OkVK">Maza qiling!</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@snrg_py/sAfFsZIyKZ8</guid><link>https://teletype.in/@snrg_py/sAfFsZIyKZ8?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py</link><comments>https://teletype.in/@snrg_py/sAfFsZIyKZ8?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py#comments</comments><dc:creator>snrg_py</dc:creator><title>Xotira o'yini (Memory Game / Memo) - Flet bilan</title><pubDate>Wed, 10 Dec 2025 05:11:46 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/43/ad/43ad2d2b-0c21-49b1-af6d-422597e6bea3.png"></media:content><description><![CDATA[<img src="https://screens.cdn.wordwall.net/400/cf84fc1b62934f5ca89e600d090600d1_0"></img>O'yin kodini ishga tushirganingizda, u quyidagi kabi ko'rinadi: Boshida kartalar teskari (orqa tomoni ko'rinadi), siz kartalarni bosib ochasiz va juftlarini topasiz. Bu yerda umumiy xotira o'yini misollari (Flet versiyasi o'xshash):]]></description><content:encoded><![CDATA[
  <pre id="z0s5" data-lang="python"># Xotira o&#x27;yini (Memory Game / Memo) - Flet bilan
# Bu kod Flet kutubxonasi yordamida xotira o&#x27;yini yaratadi.
# O&#x27;yinchi kartalarni teskari qilib, juftlarini topishi kerak.
# Ishga tushirish: &#x60;pip install flet&#x60; so&#x27;ng &#x60;python memory_game.py&#x60;
# O&#x27;yin: Kartalarni juftlashtiring, vaqtni o&#x27;lchang!

import flet as ft  # Flet - veb va desktop ilovalar uchun Python UI kutubxonasi
import random     # Tasodifiy sonlar va aralashtirish uchun
import time       # Vaqtni o&#x27;lchash va kechikishlar uchun

def main(page: ft.Page):
    # Asosiy funksiya: Sahifani sozlash va o&#x27;yin logikasini boshqarish
    page.title = &quot;Xotira o&#x27;yini - Flet&quot;  # Sahifa sarlavhasi
    page.window_height = 710             # Oyna balandligi
    page.window_width = 910              # Oyna kengligi

    number_of_single_cards: int = 20     # Har bir juftdan nechta (umumiy 40 karta)

    global idx_of_cards                  # Kartalar ro&#x27;yxati global o&#x27;zgaruvchi
    list_of_pairs = []                   # Tanlangan kartalar juftligi
    find = []                            # Topilgan juftlar
    image_page = &quot;https://picsum.photos/id/&quot;  # Rasmlar uchun URL (tasodifiy rasmlar)

    def make_cards(number_of_single_cards):
        # Kartalarni yaratish: Har bir raqamdan ikkita nusxa (A va B)
        card_deck_with_duplicates = \
            [f&quot;{i}_A&quot; for i in range(number_of_single_cards)] + \
            [f&quot;{i}_B&quot; for i in range(number_of_single_cards)]
        random.shuffle(card_deck_with_duplicates)  # Aralashtirish
        return card_deck_with_duplicates

    idx_of_cards = make_cards(number_of_single_cards)  # Kartalarni yaratish va aralashtirish

    def start_game(e):
        # O&#x27;yinni boshlash funksiyasi
        start_button.disabled = True  # Tugmani o&#x27;chirish

        global start_time
        start_time = time.time()      # Vaqtni boshlash

        # Orqa tomonlarni qo&#x27;yish: Barcha kartalarni teskari qilish
        for i in range(len(idx_of_cards)):
            row_board.controls[i].content = None            # Rasmlarni yashirish
            row_board.controls[i].bgcolor = ft.colors.AMBER # Orqa rang
            row_board.controls[i].border_radius = \
                ft.border_radius.all(10)                    # Burchaklarni yumaloq qilish
            page.update()                                   # Sahifani yangilash

    def match_pairs(e):
        # Kartalarni juftlashtirish funksiyasi (klik bo&#x27;lganda ishlaydi)
        if len(list_of_pairs) == 2:  # Ikki karta tanlangan bo&#x27;lsa, qaytish
            return

        if start_button.disabled:    # O&#x27;yin boshlangan bo&#x27;lsa
            num = e.control.data     # Bosilgan karta indeksi

            idx = idx_of_cards[num].split(&#x27;_&#x27;)[0]  # Kartaning raqami (masalan, 5)
            index_a = idx_of_cards.index(str(idx)+&#x27;_A&#x27;)  # A nusxasi indeksi
            index_b = idx_of_cards.index(str(idx)+&#x27;_B&#x27;)  # B nusxasi indeksi
            index_of_image_ = idx_of_cards[num].split(&quot;_&quot;)[0]  # Rasm indeksi

            if len(list_of_pairs) &lt; 2:
                # Kartani ochish: Rasmini ko&#x27;rsatish
                row_board.controls[num].content = ft.Image(src=f&quot;{image_page+&#x27;1&#x27;+index_of_image_}/100&quot;,
                                                           border_radius=ft.border_radius.all(10))
                if idx_of_cards[num] not in list_of_pairs:
                    list_of_pairs.append(idx_of_cards[num])  # Tanlanganlarga qo&#x27;shish

            page.update()  # Sahifani yangilash

            if len(list_of_pairs) == 2:
                # Ikki karta tanlangan: Juftligini tekshirish
                a = int(list_of_pairs[0].split(&#x27;_&#x27;)[0])
                b = int(list_of_pairs[1].split(&#x27;_&#x27;)[0])

                if a == b:
                    # Juft: Muvaffaqiyatli
                    time.sleep(.4)  # Qisqa pauza

                    for index in (index_a, index_b):
                        row_board.controls[index].disabled = True  # Kartalarni o&#x27;chirish
                        row_board.controls[index].content = None   # Rasmlarni olib tashlash
                        row_board.controls[index].bgcolor = ft.colors.BLACK  # Qora rang

                    find.append(index_a)  # Topilganlarga qo&#x27;shish

                    if len(find) == number_of_single_cards:
                        # O&#x27;yin tugadi: Barcha juftlar topildi
                        stop_time = time.time()
                        start_button.text = &quot;Vaqt: \n{} soniya&quot;.format(
                            str(round(stop_time - start_time, 0)))  # Vaqtni ko&#x27;rsatish
                        page.update()

                    page.update()
                    list_of_pairs.clear()  # Tanlanganlarni tozalash
                else:
                    # Juft emas: Qayta teskari qilish
                    time.sleep(1)  # Pauza
                    flip_a = idx_of_cards.index(list_of_pairs[0])
                    flip_b = idx_of_cards.index(list_of_pairs[1])

                    for index in (flip_a, flip_b):
                        row_board.controls[index].content = None
                        row_board.controls[index].bgcolor = ft.colors.AMBER

                    list_of_pairs.clear()
                    page.update()

            page.update()

    def board(idx_of_cards):
        # O&#x27;yin taxtasini yaratish: Kartalarni konteynerlar sifatida
        card_images = []

        for num in range(len(idx_of_cards)):
            index_of_image = idx_of_cards[num].split(&quot;_&quot;)[0]

            card_images.append(
                ft.Container(
                    width=100,                  # Karta kengligi
                    height=100,                 # Karta balandligi
                    bgcolor=ft.colors.AMBER,    # Boshlang&#x27;ich rang
                    border_radius=ft.border_radius.all(10),  # Burchaklar
                    data=num,                   # Indeks saqlash
                    on_click=match_pairs        # Klik hodisasi
                )
            )
        return card_images

    row_board = ft.Row(wrap=True, controls=board(idx_of_cards), spacing=10)  # Kartalarni satrga joylash
    start_button = ft.ElevatedButton(text=&quot;O&#x27;yinni boshlash&quot;, width=200, height=50, on_click=start_game)  # Boshlash tugmasi
    
    page.add(
        ft.Column([
            ft.Text(&quot;Xotira o&#x27;yini: Kartalarni juftlashtiring!&quot;, size=24, weight=ft.FontWeight.BOLD),  # Sarlavha
            row_board,  # O&#x27;yin taxtasi
            start_button  # Tugma
        ], horizontal_alignment=ft.CrossAxisAlignment.CENTER)  # Markazga joylash
    )

ft.app(target=main)  # Ilovani ishga tushirish</pre>
  <p id="Fusz">O&#x27;yin kodini ishga tushirganingizda, u quyidagi kabi ko&#x27;rinadi: Boshida kartalar teskari (orqa tomoni ko&#x27;rinadi), siz kartalarni bosib ochasiz va juftlarini topasiz. Bu yerda umumiy xotira o&#x27;yini misollari (Flet versiyasi o&#x27;xshash):</p>
  <figure id="UnUm" class="m_original">
    <img src="https://screens.cdn.wordwall.net/400/cf84fc1b62934f5ca89e600d090600d1_0" width="400" />
  </figure>
  <p id="3JGY"><a href="https://wordwall.net/en-mx/community/memory-game" target="_blank">wordwall.net</a></p>
  <figure id="GKeZ" class="m_original">
    <img src="https://images.sftcdn.net/images/t_app-cover-s,f_auto/p/441ece4a-9b38-11e6-b257-00163ec9f5fa/1517048909/memory-games-screenshot.png" width="340" />
  </figure>
  <p id="BDrN"><a href="https://memory-games.en.softonic.com/" target="_blank">memory-games.en.softonic.com</a></p>
  <figure id="SjJR" class="m_original">
    <img src="https://www.memozor.com/templates/memoire/images/zoom/free_memory_games_online_adults.jpg" width="1800" />
  </figure>
  <p id="4Oo3"><a href="https://www.memozor.com/memory-games/for-adults" target="_blank">memozor.com</a></p>
  <figure id="Cy35" class="m_original">
    <img src="https://www.mindgames.com/uploaded/game/screenshot/3d-memory-matching-800.webp" width="800" />
  </figure>
  <p id="DgiX"><a href="https://www.mindgames.com/game/3D+Memory+Matching" target="_blank">mindgames.com</a></p>
  <p id="8oRV">Kodda rasmlar tasodifiy (picsum.photos dan), shuning uchun sizda turli rasmlar chiqishi mumkin, lekin mexanizm bir xil. Agar o&#x27;zingiz ishga tushirib ko&#x27;rmoqchi bo&#x27;lsangiz, python memory_game.py buyruq bilan bajaring!</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@snrg_py/eN_cHwqzchp</guid><link>https://teletype.in/@snrg_py/eN_cHwqzchp?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py</link><comments>https://teletype.in/@snrg_py/eN_cHwqzchp?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py#comments</comments><dc:creator>snrg_py</dc:creator><title>instagam down</title><pubDate>Mon, 10 Nov 2025 04:35:09 GMT</pubDate><description><![CDATA[Bu bot:]]></description><content:encoded><![CDATA[
  <hr />
  <h2 id="sIqS">🧠 Umumiy ma’lumot</h2>
  <p id="3nKe">Bu bot:</p>
  <ul id="aaMn">
    <li id="UrHs">Foydalanuvchi yuborgan <strong>Instagram havolalari</strong> orqali <strong>public post, reels, story</strong>larni yuklab beradi.</li>
    <li id="10wc"><strong>Private yoki o‘chirilgan</strong> kontentni yuklamaydi.</li>
    <li id="uKTz">Asosiy yuklab olish ishini <strong><code>yt-dlp</code></strong> kutubxonasi orqali bajaradi.</li>
    <li id="yzfv">Bot esa <strong><code>Aiogram 3.22</code></strong> orqali Telegram interfeysini boshqaradi.</li>
  </ul>
  <hr />
  <h2 id="wxND">🔧 Asosiy kutubxonalar</h2>
  <pre id="sAVH">import os, asyncio, tempfile, shutil
from concurrent.futures import ThreadPoolExecutor
from typing import List
from yt_dlp import YoutubeDL, DownloadError
from aiogram import Bot, Dispatcher, types
from aiogram.filters import Command
from aiogram.types import FSInputFile
</pre>
  <h3 id="PAiQ">Izoh:</h3>
  <ul id="0XpA">
    <li id="YUkz"><code>yt_dlp</code> — videolarni yuklab olish uchun qudratli kutubxona (Instagram, YouTube, TikTok va boshqalar uchun ishlaydi).</li>
    <li id="xsFI"><code>asyncio</code> — asinxron ishlarni boshqarish uchun.</li>
    <li id="adi6"><code>ThreadPoolExecutor</code> — og‘ir bloklovchi ishlarni (masalan, yuklab olish) alohida oqimda bajarish uchun.</li>
    <li id="yyf1"><code>aiogram</code> — Telegram bot yaratish uchun zamonaviy framework.</li>
  </ul>
  <hr />
  <h2 id="rOqm">⚙️ Token va botni ishga tushirish</h2>
  <pre id="76k9">BOT_TOKEN = &quot;7627050170:AAF2w-NYia_7u1GaTD6lW5wSLwEx4C9Tepc&quot;
bot = Bot(token=BOT_TOKEN)
dp = Dispatcher()
executor = ThreadPoolExecutor(max_workers=2)
</pre>
  <h3 id="nTvB">Izoh:</h3>
  <ul id="g4ce">
    <li id="jI8F"><code>BOT_TOKEN</code> — bu sizning Telegram bot tokeningiz.</li>
    <li id="BbGe"><code>ThreadPoolExecutor</code> — fon ishlarini 2 ta oqimda bajarish imkonini beradi, shunda bot “osilib qolmaydi”.</li>
  </ul>
  <hr />
  <h2 id="KT8K">🎬 yt-dlp sozlamalari</h2>
  <pre id="eU1s">YDL_OPTS_COMMON = {
    &quot;quiet&quot;: True,
    &quot;no_warnings&quot;: True,
    &quot;noplaylist&quot;: False,
    &quot;merge_output_format&quot;: &quot;mp4&quot;,
}
</pre>
  <h3 id="rTkv">Izoh:</h3>
  <p id="qfM3">Bu sozlamalar <code>yt-dlp</code>ga shovqinli loglarni chiqarishni to‘xtatadi va chiqish faylini MP4 formatda birlashtiradi.</p>
  <hr />
  <h2 id="JUMV">🔍 URL tekshirish funksiyasi</h2>
  <pre id="UFER">def is_instagram_url(text: str) -&gt; bool:
    if not text:
        return False
    t = text.strip()
    return (&quot;instagram.com&quot; in t) or (&quot;instagr.am&quot; in t)
</pre>
  <h3 id="fKqL">Izoh:</h3>
  <p id="ceMR">Bu funksiya yuborilgan matnda Instagram havolasi borligini tekshiradi.</p>
  <hr />
  <h2 id="VXDq">🧰 Yuklab olish yordamchilari</h2>
  <pre id="nLyI">def ytdlp_extract_info(url: str) -&gt; dict:
    opts = YDL_OPTS_COMMON.copy()
    opts[&quot;outtmpl&quot;] = &quot;%(id)s.%(ext)s&quot;
    with YoutubeDL(opts) as ydl:
        info = ydl.extract_info(url, download=False)
    return info
</pre>
  <ul id="jsVN">
    <li id="xpvz">Bu funksiya <strong>faqat metama’lumot</strong> (title, description, views va h.k.) oladi, <strong>faylni yuklamaydi</strong>.</li>
  </ul>
  <hr />
  <pre id="rCYd">def ytdlp_download(url: str, out_dir: str) -&gt; List[str]:
    opts = YDL_OPTS_COMMON.copy()
    opts[&quot;outtmpl&quot;] = os.path.join(out_dir, &quot;%(id)s.%(ext)s&quot;)
    with YoutubeDL(opts) as ydl:
        ydl.download([url])
    files = [os.path.join(out_dir, f) for f in os.listdir(out_dir)]
    return sorted(files)
</pre>
  <ul id="DZLX">
    <li id="QY0t">Bu funksiya esa <strong>fayllarni yuklab olishni</strong> amalga oshiradi va yuklangan fayl nomlarini qaytaradi.</li>
  </ul>
  <hr />
  <h2 id="OT6B">🤖 <code>/start</code> komandasi</h2>
  <pre id="iT4D">@dp.message(Command(&quot;start&quot;))
async def cmd_start(message: types.Message):
    await message.reply(&quot;👋 Salom! ...&quot;)
</pre>
  <ul id="Zf4I">
    <li id="hfCz">Bot ishga tushganda foydalanuvchiga qanday ishlashni tushuntiradi.</li>
  </ul>
  <hr />
  <h2 id="IYvC">👤 <code>/profile</code> komandasi</h2>
  <pre id="muQV">@dp.message(Command(&quot;profile&quot;))
async def cmd_profile(message: types.Message):
    ...
</pre>
  <ul id="Hjws">
    <li id="unsO">Bu komandada foydalanuvchi <code>username</code> yoki <code>link</code> yuboradi.</li>
    <li id="3DjE">Bot <code>yt-dlp</code> yordamida profil haqida <strong>ma’lumot (bio, link, likes, views)</strong> olishga harakat qiladi.</li>
    <li id="r9Pm">Private yoki mavjud bo‘lmagan profilga kirsangiz, xato xabari chiqadi.</li>
  </ul>
  <hr />
  <h2 id="99vD">📖 <code>/story</code> komandasi</h2>
  <pre id="QuKE">@dp.message(Command(&quot;story&quot;))
async def cmd_story(message: types.Message):
    ...
</pre>
  <ul id="zIy8">
    <li id="xkDd">Foydalanuvchi <code>username</code> yuboradi.</li>
    <li id="eR1g">Bot <code>https://www.instagram.com/stories/{username}/</code> sahifasini <code>yt-dlp</code> orqali tahlil qiladi.</li>
    <li id="7owe">Agar foydalanuvchi <strong>public</strong> bo‘lsa, story’larni yuklab, foydalanuvchiga yuboradi.</li>
    <li id="Fwsy">Fayllarni vaqtinchalik papkada saqlaydi (<code>tempfile.mkdtemp</code>) va keyin o‘chiradi.</li>
  </ul>
  <hr />
  <h2 id="BRV1">📎 URL yuborish orqali yuklab olish</h2>
  <pre id="OkbP">@dp.message()
async def handle_any_message(message: types.Message):
    text = (message.text or message.caption or &quot;&quot;).strip()
    if not is_instagram_url(text):
        return
</pre>
  <ul id="Q86y">
    <li id="yw33">Bu universal handler.</li>
    <li id="tPH0">Agar foydalanuvchi Instagram havolasini yuborsa, avtomatik <strong>media yuklab olib</strong>, Telegramga yuboradi.</li>
    <li id="htQe">Har xil fayl turlarini (foto, video, hujjat) ajratib yuboradi.</li>
  </ul>
  <hr />
  <h2 id="nLDz">🧹 Fayllarni tozalash</h2>
  <pre id="82vX">shutil.rmtree(tmpdir, ignore_errors=True)
</pre>
  <ul id="P6nR">
    <li id="zsOv">Yuklab olingan vaqtinchalik fayllar <strong>ish tugagandan so‘ng</strong> avtomatik o‘chiriladi.</li>
  </ul>
  <hr />
  <h2 id="0TYE">🚀 Botni ishga tushirish</h2>
  <pre id="dlZo">async def main():
    print(&quot;🤖 Bot ishga tushmoqda...&quot;)
    await dp.start_polling(bot)
</pre>
  <ul id="LQf9">
    <li id="iaKb">Asosiy <strong>polling</strong> jarayonini ishga tushiradi.</li>
    <li id="6Y1W">Bu <code>asyncio.run(main())</code> bilan bajariladi.</li>
  </ul>
  <hr />
  <h2 id="qGbm">📘 Yakuniy xulosa</h2>
  <p id="UjfD">Bo‘lim Vazifasi     <code>yt_dlp</code> Instagram public kontentni yuklash   <code>ThreadPoolExecutor</code> Og‘ir vazifalarni asinxron bajarish   <code>Aiogram</code> Telegram bilan ishlash   <code>tempfile</code> va <code>shutil</code> Fayllarni vaqtincha saqlash va tozalash   <code>/profile</code>, <code>/story</code>, URL Foydalanuvchi komandalarini bajarish</p>
  <hr />
  <p id="dBpW"></p>
  <p id="5h5A"></p>
  <h2 id="GlS6" data-align="center"><strong>Kod:</strong></h2>
  <hr />
  <pre id="KSSw" data-lang="python">import os
import asyncio
import tempfile
import shutil
from concurrent.futures import ThreadPoolExecutor
from typing import List, Optional

from yt_dlp import YoutubeDL, DownloadError
from aiogram import Bot, Dispatcher, types
from aiogram.filters import Command
from aiogram.types import FSInputFile

# =========================
#  TOKENNI BU YERGA JOYLASH
# =========================
BOT_TOKEN = &quot;1234567890:ABCDEF-your-telegram-bot-token&quot;  # &lt;-- o&#x27;zgartiring

# =========================
#  Aiogram init
# =========================
bot = Bot(token=BOT_TOKEN)
dp = Dispatcher()

# ThreadPoolExecutor for blocking yt-dlp work
executor = ThreadPoolExecutor(max_workers=2)

# yt-dlp umumiy opsiyalari
YDL_OPTS_COMMON = {
    &quot;quiet&quot;: True,
    &quot;no_warnings&quot;: True,
    &quot;noplaylist&quot;: False,  # playlistlarni ham olishga urinish
    &quot;merge_output_format&quot;: &quot;mp4&quot;,
    # &quot;cookiefile&quot;: &quot;cookies.txt&quot;  # agar keyin login kerak bo&#x27;lsa
}

# yordamchi: Instagram URL ekanligini tekshirish
def is_instagram_url(text: str) -&gt; bool:
    if not text:
        return False
    t = text.strip()
    return (&quot;instagram.com&quot; in t) or (&quot;instagr.am&quot; in t)

# =========================
#  yt-dlp yordamchi funksiyalari
# =========================
def ytdlp_extract_info(url: str) -&gt; dict:
    &quot;&quot;&quot;yt-dlp bilan metadata olish (download=False).
    Xatolik bo&#x27;lsa exception tashlanadi.
    &quot;&quot;&quot;
    opts = YDL_OPTS_COMMON.copy()
    opts[&quot;outtmpl&quot;] = &quot;%(id)s.%(ext)s&quot;
    with YoutubeDL(opts) as ydl:
        info = ydl.extract_info(url, download=False)
    return info

def ytdlp_download(url: str, out_dir: str) -&gt; List[str]:
    &quot;&quot;&quot;yt-dlp bilan yuklab olish (bloklovchi). Natija: fayllar ro&#x27;yxati.&quot;&quot;&quot;
    files = []
    opts = YDL_OPTS_COMMON.copy()
    opts[&quot;outtmpl&quot;] = os.path.join(out_dir, &quot;%(id)s.%(ext)s&quot;)
    with YoutubeDL(opts) as ydl:
        # yt-dlp o&#x27;zi ichidagi playlist/entrylarni qaytaradi
        ydl.download([url])
    # yig&#x27;ish
    for fname in os.listdir(out_dir):
        files.append(os.path.join(out_dir, fname))
    files.sort()
    return files

# =========================
#  Aiogram handlers
# =========================
@dp.message(Command(&quot;start&quot;))
async def cmd_start(message: types.Message):
    await message.reply(
        &quot;👋 Salom!\n\n&quot;
        &quot;Men Instagram dan public media (post, reel, story) yuklaydigan botman.\n\n&quot;
        &quot;Foydalanish:\n&quot;
        &quot;• Instagram havolasini yuboring (post/reel/story).\n&quot;
        &quot;• /profile &lt;username_or_link&gt; — profil haqida ma&#x27;lumot.\n&quot;
        &quot;• /story &lt;username&gt; — hozirgi (public) storylarni yuklab ko&#x27;rishga urinish.\n\n&quot;
        &quot;Eslatma: faqat public kontent. Private yoki o&#x27;chirilgan kontentni yuklashga yordam bermayman.&quot;
    )

@dp.message(Command(&quot;profile&quot;))
async def cmd_profile(message: types.Message):
    args = message.get_args().strip()
    if not args:
        await message.reply(&quot;❗ /profile komandasidan so&#x27;ng username yoki profil havolasini yozing.\nMasalan: /profile natgeo yoki /profile https://www.instagram.com/natgeo/&quot;)
        return

    # normalize: agar link bo&#x27;lsa uni profil linkiga aylantirish
    if is_instagram_url(args):
        url = args
    else:
        url = f&quot;https://www.instagram.com/{args}/&quot;

    status_msg = await message.reply(&quot;🔎 Profil ma&#x27;lumotlari olinmoqda...&quot;)

    loop = asyncio.get_event_loop()
    try:
        info = await loop.run_in_executor(executor, ytdlp_extract_info, url)
    except DownloadError:
        await status_msg.edit_text(&quot;❌ Profilni o&#x27;qib bo&#x27;lmadi — ehtimol private yoki mavjud emas.&quot;)
        return
    except Exception as e:
        await status_msg.edit_text(f&quot;❌ Xatolik: {e}&quot;)
        return

    # yt-dlp profiling strukturasiga qarab turli natija bo&#x27;lishi mumkin
    # Urinish: asosiy ma&#x27;lumotlarni chiqarish
    try:
        # agar profiler playlist (e.g., entries) bo&#x27;lsa, uploader info olinadi
        uploader = info.get(&quot;uploader&quot;) or info.get(&quot;uploader_id&quot;) or info.get(&quot;channel&quot;) or info.get(&quot;title&quot;)
        webpage_url = info.get(&quot;webpage_url&quot;) or url
        # ba&#x27;zi hollarda &#x27;entries&#x27; bo&#x27;ladi - bu profilga tegishli postlar
        entries = info.get(&quot;entries&quot;)
        count = len(entries) if entries else None

        text_lines = []
        if uploader:
            text_lines.append(f&quot;👤 Profil: {uploader}&quot;)
        text_lines.append(f&quot;🔗 URL: {webpage_url}&quot;)
        if info.get(&quot;description&quot;):
            text_lines.append(f&quot;📝 Bio: {info.get(&#x27;description&#x27;)[:400]}&quot;)  # qisqaroq Bio
        if info.get(&quot;view_count&quot;) is not None:
            text_lines.append(f&quot;👁️ Views: {info.get(&#x27;view_count&#x27;)}&quot;)
        if info.get(&quot;like_count&quot;) is not None:
            text_lines.append(f&quot;❤️ Likes: {info.get(&#x27;like_count&#x27;)}&quot;)
        if count is not None:
            text_lines.append(f&quot;📦 Ko&#x27;rilgan postlar soni (taxmin): {count}&quot;)

        # fallback: agar info bo&#x27;sh bo&#x27;lsa, butun info dictning bir necha maydonini ko&#x27;rsatamiz
        if not text_lines:
            text_lines.append(&quot;⚠️ Profil haqida batafsil ma&#x27;lumot topilmadi.&quot;)
        await status_msg.edit_text(&quot;\n&quot;.join(text_lines))
    except Exception as e:
        await status_msg.edit_text(f&quot;⚠️ Ma&#x27;lumotni qayta ishlashda xato: {e}&quot;)

@dp.message(Command(&quot;story&quot;))
async def cmd_story(message: types.Message):
    args = message.get_args().strip()
    if not args:
        await message.reply(&quot;❗ /story komandasidan so&#x27;ng username yozing.\nMasalan: /story natgeo&quot;)
        return

    username = args.split()[-1].strip().lstrip(&quot;@&quot;)
    url = f&quot;https://www.instagram.com/stories/{username}/&quot;

    status_msg = await message.reply(&quot;🔄 Storylar olinmoqda (public bo&#x27;lsa)...&quot;)

    tmpdir = tempfile.mkdtemp(prefix=&quot;insta_story_&quot;)
    loop = asyncio.get_event_loop()

    try:
        # avval info so&#x27;raymiz — ba&#x27;zan story~lar uchun extract_info yetadi
        info = await loop.run_in_executor(executor, ytdlp_extract_info, url)
    except DownloadError:
        # qisqaroq xabar
        await status_msg.edit_text(&quot;❌ Storylarni o&#x27;qib bo&#x27;lmadi — ehtimol private yoki mavjud emas.&quot;)
        shutil.rmtree(tmpdir, ignore_errors=True)
        return
    except Exception as e:
        # davom etishga urinamiz: ba&#x27;zida extract_info ishlamaydi, lekin download mumkin
        # lekin umumiy holda biz downloadni sinab ko&#x27;ramiz
        pass

    # endi yuklab ko&#x27;ring
    try:
        files = await loop.run_in_executor(executor, ytdlp_download, url, tmpdir)
    except Exception as e:
        await status_msg.edit_text(f&quot;❌ Storylarni yuklashda xatolik: {e}&quot;)
        shutil.rmtree(tmpdir, ignore_errors=True)
        return

    if not files:
        await status_msg.edit_text(&quot;⚠️ Storylar topilmadi yoki ular public emas.&quot;)
        shutil.rmtree(tmpdir, ignore_errors=True)
        return

    # yuborish
    sent_any = False
    for path in files:
        ext = os.path.splitext(path)[1].lower()
        try:
            if ext in [&quot;.jpg&quot;, &quot;.jpeg&quot;, &quot;.png&quot;, &quot;.webp&quot;]:
                await message.reply_photo(FSInputFile(path))
            elif ext in [&quot;.mp4&quot;, &quot;.mov&quot;, &quot;.mkv&quot;, &quot;.webm&quot;]:
                await message.reply_video(FSInputFile(path))
            else:
                await message.reply_document(FSInputFile(path))
            sent_any = True
        except Exception:
            continue

    if sent_any:
        await status_msg.edit_text(&quot;✅ Storylar yuklandi va yuborildi.&quot;)
    else:
        await status_msg.edit_text(&quot;⚠️ Fayllarni yuborib bo&#x27;lmadi.&quot;)

    shutil.rmtree(tmpdir, ignore_errors=True)

@dp.message()
async def handle_any_message(message: types.Message):
    &quot;&quot;&quot;Agar foydalanuvchi oddiy matn yuborsa — instagram havolasi bo&#x27;lsa yuklab olamiz.&quot;&quot;&quot;
    text = (message.text or message.caption or &quot;&quot;).strip()
    if not is_instagram_url(text):
        # boshqa so&#x27;zlar uchun kichik yo&#x27;l-yo&#x27;riq
        return

    wait_msg = await message.reply(&quot;🔄 URL qabul qilindi. Yuklab olinmoqda...&quot;)

    tmpdir = tempfile.mkdtemp(prefix=&quot;insta_dl_&quot;)
    loop = asyncio.get_event_loop()

    try:
        files = await loop.run_in_executor(executor, ytdlp_download, text, tmpdir)
    except DownloadError:
        await wait_msg.edit_text(&quot;❌ Yuklab olishda xatolik: ehtimol post private yoki mavjud emas.&quot;)
        shutil.rmtree(tmpdir, ignore_errors=True)
        return
    except Exception as e:
        await wait_msg.edit_text(f&quot;❌ Xatolik: {e}&quot;)
        shutil.rmtree(tmpdir, ignore_errors=True)
        return

    if not files:
        await wait_msg.edit_text(&quot;⚠️ Hech qanday fayl yuklanmadi.&quot;)
        shutil.rmtree(tmpdir, ignore_errors=True)
        return

    # Fayllarni yuborish
    sent = False
    # Agar rasmlar/videolar bo&#x27;lsa, birgalikda albumga qo&#x27;shish mumkin — ammo soddaligi uchun alohida yuboramiz
    for path in files:
        ext = os.path.splitext(path)[1].lower()
        try:
            if ext in [&quot;.jpg&quot;, &quot;.jpeg&quot;, &quot;.png&quot;, &quot;.webp&quot;]:
                await message.reply_photo(FSInputFile(path))
            elif ext in [&quot;.mp4&quot;, &quot;.mov&quot;, &quot;.mkv&quot;, &quot;.webm&quot;]:
                await message.reply_video(FSInputFile(path))
            else:
                await message.reply_document(FSInputFile(path))
            sent = True
        except Exception:
            continue

    if sent:
        await wait_msg.edit_text(&quot;✅ Yuklab olindi va yuborildi.&quot;)
    else:
        await wait_msg.edit_text(&quot;⚠️ Fayllarni Telegramga yuborishda muammo bo&#x27;ldi.&quot;)

    shutil.rmtree(tmpdir, ignore_errors=True)

# =========================
#  Start polling
# =========================
async def main():
    print(&quot;🤖 Bot ishga tushmoqda...&quot;)
    try:
        await dp.start_polling(bot)
    finally:
        await bot.session.close()

if __name__ == &quot;__main__&quot;:
    asyncio.run(main())
</pre>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@snrg_py/bBxtHCU5_FG</guid><link>https://teletype.in/@snrg_py/bBxtHCU5_FG?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py</link><comments>https://teletype.in/@snrg_py/bBxtHCU5_FG?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py#comments</comments><dc:creator>snrg_py</dc:creator><title>Namoz vaqtlari 12 ta viloyat</title><pubDate>Mon, 03 Nov 2025 04:24:23 GMT</pubDate><description><![CDATA[Avvalgi Aiogram 3.22 vesiyasida yaratgan Namoz vaqti botimiz faqat 1 ta joyga qarashli bo'lar edi , bugungi Botimiz O'zbekistonning 12 ta viloyatini vaqtini ko'rsata oladigan botini yartamiz.]]></description><content:encoded><![CDATA[
  <p id="ESWq">Avvalgi Aiogram 3.22 vesiyasida yaratgan <a href="https://teletype.in/@snrg_py/fto6yPzuji1" target="_blank"><strong><u>Namoz vaqti botimiz</u></strong></a> faqat 1 ta joyga qarashli bo&#x27;lar edi , bugungi Botimiz O&#x27;zbekistonning 12 ta viloyatini vaqtini ko&#x27;rsata oladigan botini yartamiz.<br /></p>
  <pre id="W2lJ" data-lang="python">import asyncio
import logging
from datetime import datetime
import aiohttp

from aiogram import Bot, Dispatcher, F
from aiogram.filters import Command
from aiogram.types import Message, ReplyKeyboardMarkup, KeyboardButton
from aiogram.enums import ParseMode
from aiogram.client.default import DefaultBotProperties

logging.basicConfig(level=logging.INFO)

BOT_TOKEN = &quot;7627050170:AAF2w-NYia_7u1GaTD6lW5wSLwEx4C9Tepc&quot;

bot = Bot(token=BOT_TOKEN, default=DefaultBotProperties(parse_mode=ParseMode.MARKDOWN))
dp = Dispatcher()

# 12 ta viloyat ro&#x27;yxati
REGIONS = [
    &quot;Toshkent&quot;, &quot;Toshkent viloyati&quot;, &quot;Andijon&quot;, &quot;Farg&#x27;ona&quot;, &quot;Namangan&quot;,
    &quot;Samarqand&quot;, &quot;Buxoro&quot;, &quot;Xorazm&quot;, &quot;Qashqadaryo&quot;, &quot;Surxondaryo&quot;,
    &quot;Jizzax&quot;, &quot;Sirdaryo&quot;, &quot;Navoiy&quot;
]

# Viloyat tanlash uchun Reply Keyboard
region_keyboard = ReplyKeyboardMarkup(
    keyboard=[[KeyboardButton(text=region)] for region in REGIONS],
    resize_keyboard=True
)

# API URL shabloni
API_URL = &quot;https://api.aladhan.com/v1/timingsByCity?city={city}&amp;country=Uzbekistan&amp;method=2&quot;

@dp.message(Command(&quot;start&quot;))
async def start_handler(message: Message):
    await message.answer(
        &quot;Assalomu alaykum! 🇺🇿\nBu bot O&#x27;zbekiston bo&#x27;yicha namoz vaqtlarini ko&#x27;rsatadi.\n\n&quot; \
        &quot;Buyruqlar:\n/namoz - Viloyat tanlash va namoz vaqtlarini olish&quot;,
    )

@dp.message(Command(&quot;namoz&quot;))
async def select_region_handler(message: Message):
    await message.answer(&quot;Viloyatni tanlang:&quot;, reply_markup=region_keyboard)

@dp.message(F.text.in_(REGIONS))
async def send_prayer_times(message: Message):
    city = message.text
    url = API_URL.format(city=city)

    try:
        async with aiohttp.ClientSession() as session:
            async with session.get(url) as response:
                if response.status == 200:
                    data = await response.json()
                    timings = data[&#x27;data&#x27;][&#x27;timings&#x27;]
                    today = datetime.now().strftime(&quot;%d.%m.%Y&quot;)

                    text = (
                        f&quot;🕌 *Namoz vaqtlari — {city}*\n&quot;
                        f&quot;📅 Sana: {today}\n\n&quot;
                        f&quot;🌅 Bomdod: {timings[&#x27;Fajr&#x27;]}\n&quot;
                        f&quot;☀️ Quyosh chiqishi: {timings[&#x27;Sunrise&#x27;]}\n&quot;
                        f&quot;🏙  Peshin: {timings[&#x27;Dhuhr&#x27;]}\n&quot;
                        f&quot;🌆 Asr: {timings[&#x27;Asr&#x27;]}\n&quot;
                        f&quot;🌇 Shom: {timings[&#x27;Maghrib&#x27;]}\n&quot;
                        f&quot;🌙 Xufton: {timings[&#x27;Isha&#x27;]}\n\n&quot;
                        f&quot;*Manba: Aladhan API*&quot;
                    )
                    await message.answer(text)
                else:
                    await message.answer(&quot;❌ API xatosi, keyinroq urinib ko&#x27;ring.&quot;)
    except Exception as e:
        logging.error(f&quot;Xato: {e}&quot;)
        await message.answer(&quot;❌ Xatolik yuz berdi, qayta urinib ko&#x27;ring.&quot;)

async def main():
    await dp.start_polling(bot)

if __name__ == &quot;__main__&quot;:
    asyncio.run(main())
</pre>
  <p id="NATC">Avvalgi botimiz bilan solishtiramiz qanday yangiliklar qo&#x27;shildi!</p>
  <h3 id="gB9Q">🔄 O‘zgartirilgan asosiy joylar (avvalgi kodga nisbatan):</h3>
  <p id="0q7X">Qism</p>
  <p id="6B7R">Nima qo‘shildi / o‘zgardi</p>
  <p id="FVb3">Nima uchun</p>
  <p id="f0gI">✅ ReplyKeyboard qo‘shildi</p>
  <p id="Ace6"><code>ReplyKeyboardMarkup</code>, <code>KeyboardButton</code> import qilindi</p>
  <p id="qBsY">Viloyat tugmalari chiqishi uchun</p>
  <p id="OIos">✅ <code>REGIONS</code> dictionary yaratildi</p>
  <p id="2Y71"><code>{&#x27;Andijon&#x27;: &#x27;Andijan&#x27;, ...}</code></p>
  <p id="z2He">API uchun inglizcha nomni bog‘lash</p>
  <p id="VYpM">✅ <code>/namoz</code> komandasi endi <strong>bevosita vaqt jo‘natmaydi</strong></p>
  <p id="rPiJ">Faqat tugmalarni chiqaradi</p>
  <p id="1SQr">Foydalanuvchi viloyat tanlashi uchun</p>
  <p id="okHB">✅ <code>@dp.message(F.text.in_(REGIONS.keys()))</code> handler qo‘shildi</p>
  <p id="bOWw">Tanlangan viloyatga qarab API’dan so‘rov yuboradi</p>
  <p id="nYlx">Har bir viloyat uchun alohida vaqt</p>
  <p id="yIs9">✅ API URL endi <strong>dinamik</strong> bo‘ldi</p>
  <p id="Txby"><code>city={city}</code> bilan o‘zgaradi</p>
  <p id="a8JM">Har bir hududga mos vaqt olish uchun</p>
  <hr />
  <h3 id="ipit">❓ Sizga savol:</h3>
  <p id="M4dK">Viloyat tugmalarini <strong>2 qatorda</strong> qilaymi, yoki <strong>3 qatorda</strong>?</p>
  <p id="oStQ">Variant A (2×6):</p>
  <pre id="vbV1">Andijon | Farg‘ona
Namangan | Samarqand
Buxoro | Xorazm
...
</pre>
  <p id="u4aM">Variant B (3×4):</p>
  <pre id="F4LE">Andijon | Farg‘ona | Namangan
Samarqand | Buxoro | Xorazm
...
</pre>
  <p id="0hCq">Agar <strong>farqi yo‘q</strong> desangiz — default <strong>3×4</strong> qilib yuboraman.</p>
  <hr />
  <h3 id="DIMy">✅ Agar hozir <code>ok</code> desangiz — to‘liq kodni izohlar bilan yuboraman.</h3>
  <p id="Xo7f">Shu tarzda:</p>
  <pre id="xdqn"># 🆕 Yangi qo‘shilgan qism: viloyatlar ro‘yxati
REGIONS = {
    &quot;Andijon&quot;: &quot;Andijan&quot;,
    ...
}
</pre>
  <p id="StEr">va</p>
  <pre id="xWqA">@dp.message(F.text.in_(REGIONS.keys()))
async def region_handler(message: Message):
    # 🆕 Bu yangi handler — tanlangan viloyat uchun vaqtni olib keladi
</pre>
  <h2 id="p7WY">✅ 1. Asosiy farq — endi bot faqat Toshkent emas, <strong>12 ta viloyat bo‘yicha ishlaydi</strong></h2>
  <p id="rUtb">Eski kod</p>
  <p id="7rXa">Yangi kod</p>
  <p id="AJq5">Faqat Toshkent shahriga bog‘langan (<code>city=Tashkent</code>)</p>
  <p id="znI6">12 ta viloyat ro‘yxati yaratildi (<code>REGIONS = [...]</code>)</p>
  <p id="TzHW"><code>/namoz</code> → darhol vaqt yuborar edi</p>
  <p id="QuB5"><code>/namoz</code> → reply tugmalarni chiqaradi, foydalanuvchi viloyat tanlaydi</p>
  <p id="TZmN">API URL bitta va o‘zgarmas</p>
  <p id="S1pU">API URL dinamik bo‘ldi (<code>city={city}</code>) → har bir viloyat uchun</p>
  <hr />
  <h2 id="cn1Q">✅ 2. REGIONS ro‘yxati qo‘shildi</h2>
  <pre id="BrEI">REGIONS = [
    &quot;Toshkent&quot;, &quot;Toshkent viloyati&quot;, &quot;Andijon&quot;, &quot;Farg&#x27;ona&quot;, &quot;Namangan&quot;,
    &quot;Samarqand&quot;, &quot;Buxoro&quot;, &quot;Xorazm&quot;, &quot;Qashqadaryo&quot;, &quot;Surxondaryo&quot;,
    &quot;Jizzax&quot;, &quot;Sirdaryo&quot;, &quot;Navoiy&quot;
]
</pre>
  <p id="aTlv">🆕 Bu qism <strong>eski kodda yo‘q edi</strong> → bu yangi qo‘shilgan bo‘lim.</p>
  <hr />
  <h2 id="xMPf">✅ 3. Reply Keyboard qo‘shildi (➜ yangi koddagi eng muhim yangilik)</h2>
  <pre id="hTgh">region_keyboard = ReplyKeyboardMarkup(
    keyboard=[[KeyboardButton(text=region)] for region in REGIONS],
    resize_keyboard=True
)
</pre>
  <p id="eT5q">🆕 Bu qism dasturga quyidagi imkoniyatni qo‘shdi:</p>
  <p id="nFII">✅ <code>/namoz</code> buyrug‘i bosilganda foydalanuvchi pastda viloyat tugmalarini ko‘radi<br /> ✅ Har bir tugma bosilganda bot shu viloyat uchun namoz vaqtini olib keladi</p>
  <hr />
  <h2 id="WpVb">✅ 4. <code>/namoz</code> handler o‘zgardi</h2>
  <h3 id="2Bzl">Eski kod:</h3>
  <pre id="66FJ">@dp.message(Command(&quot;namoz&quot;))
async def prayer_times_handler(message: Message):
    # darhol Toshkent uchun API so&#x27;rovi yuboradi
</pre>
  <h3 id="EXrg">Yangi kod:</h3>
  <pre id="SX7q">@dp.message(Command(&quot;namoz&quot;))
async def select_region_handler(message: Message):
    await message.answer(&quot;Viloyatni tanlang:&quot;, reply_markup=region_keyboard)
</pre>
  <p id="gYLp">🔁 ENDILIKDA <code>/namoz</code> <strong>javob qaytarmaydi</strong>, balki <strong>viloyat tanlatadi</strong><br /> 🔥 Bu juda katta farq!</p>
  <hr />
  <h2 id="2apT">✅ 5. Yangi handler qo‘shildi: <code>@dp.message(F.text.in_(REGIONS))</code></h2>
  <pre id="rCQD">@dp.message(F.text.in_(REGIONS))
async def send_prayer_times(message: Message):
</pre>
  <p id="Q9aP">🆕 <strong>Eski kodda bunday handler yo‘q edi</strong><br /> Bu handler tugma bosilganda ishlaydi. Ya’ni foydalanuvchi:</p>
  <pre id="btG8">Andijon ✅
</pre>
  <p id="WxeT">deb bossa — bot API’dan <code>city=Andijan</code> bo‘yicha ma’lumot olib keladi.</p>
  <hr />
  <h2 id="iX1v">✅ 6. API URL endi shunday quriladi:</h2>
  <pre id="xgWL">url = API_URL.format(city=city)
</pre>
  <p id="rarX">🤖 Bu degani:</p>
  <p id="vK5T">👆 Foydalanuvchi <code>&quot;Buxoro&quot;</code> tanlasa → URL bo‘ladi:</p>
  <pre id="1H0p">https://api.aladhan.com/v1/timingsByCity?city=Buxoro&amp;country=Uzbekistan&amp;method=2
</pre>
  <hr />
  <h2 id="dKwu">✅ 7. Toshkent uchun bo‘lgan eski o‘zgarmas kod olib tashlandi:</h2>
  <pre id="XeK8">CITY_ID = 434877
PRAYER_API_URL = &quot;https://...Tashkent...&quot;
</pre>
  <p id="wQ88">🔴 Yangi kodda bu qismlar <strong>keraksiz bo‘lib qoldi</strong>, chunki <code>city</code> endi dinamik.</p>
  <hr />
  <h2 id="5Tlz">✅ Qisqa xulosa (1 jumlada)</h2>
  <p id="8bin">🟢 Eski kod — <strong>faqat Toshkent uchun ishlardi</strong><br /> 🟢 Yangi kod — <strong>butun O‘zbekiston bo‘yicha ishlaydi</strong>, foydalanuvchi viloyatni o‘zi tanlaydi</p>
  <hr />
  <h3 id="a5O0">🔧 1. Viloyatlar API bilan to‘g‘ri ishlashi uchun <strong>Tugma nomi ≠ API nomi</strong> bog‘lanadi</h3>
  <p id="kTqt">Chunki API Toshkentni <code>Tashkent</code>, Farg‘onani <code>Fergana</code>, Buxoroni <code>Bukhara</code> tarzida qabul qiladi.</p>
  <p id="UTJe">Shuning uchun biz <strong>lug‘at (dict)</strong> shaklida to‘g‘ri xaritalash qilamiz:</p>
  <pre id="nRfX">REGIONS = {
    &quot;Toshkent&quot;: &quot;Tashkent&quot;,
    &quot;Toshkent viloyati&quot;: &quot;Tashkent&quot;,
    &quot;Andijon&quot;: &quot;Andijan&quot;,
    &quot;Farg&#x27;ona&quot;: &quot;Fergana&quot;,
    &quot;Namangan&quot;: &quot;Namangan&quot;,
    &quot;Samarqand&quot;: &quot;Samarkand&quot;,
    &quot;Buxoro&quot;: &quot;Bukhara&quot;,
    &quot;Xorazm&quot;: &quot;Khorezm&quot;,
    &quot;Qashqadaryo&quot;: &quot;Kashkadarya&quot;,
    &quot;Surxondaryo&quot;: &quot;Surkhandarya&quot;,
    &quot;Jizzax&quot;: &quot;Jizzakh&quot;,
    &quot;Sirdaryo&quot;: &quot;Syrdarya&quot;,
    &quot;Navoiy&quot;: &quot;Navoi&quot;
}
</pre>
  <p id="I5aV">✅ Foydalanuvchi tugmada <code>&quot;Farg&#x27;ona&quot;</code> bosadi<br /> 👆 API esa <code>&quot;city=Fergana&quot;</code> so‘raydi<br /> ❌ Aks holda API xato qaytaradi</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@snrg_py/xpFcoh6np2e</guid><link>https://teletype.in/@snrg_py/xpFcoh6np2e?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py</link><comments>https://teletype.in/@snrg_py/xpFcoh6np2e?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py#comments</comments><dc:creator>snrg_py</dc:creator><title>savodxonlik</title><pubDate>Fri, 31 Oct 2025 04:14:49 GMT</pubDate><description><![CDATA[https://meet.google.com/jsj-zzwx-qtk]]></description><content:encoded><![CDATA[
  <p id="52Gm">https://meet.google.com/jmw-zhfa-yyu</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@snrg_py/fto6yPzuji1</guid><link>https://teletype.in/@snrg_py/fto6yPzuji1?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py</link><comments>https://teletype.in/@snrg_py/fto6yPzuji1?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py#comments</comments><dc:creator>snrg_py</dc:creator><title>AioGram - namoz vaqti</title><pubDate>Wed, 29 Oct 2025 05:33:53 GMT</pubDate><description><![CDATA[Salom! Siz taqdim etgan kod aiogram 3.22 kutubxonasi yordamida yaratilgan oddiy Telegram botdir. Bu bot O'zbekistonning Namangan shahri uchun namoz vaqtlarini ko'rsatadi. Ma'lumotlar Aladhan API dan olinadi. Bot quyidagi buyruqlarga javob beradi:]]></description><content:encoded><![CDATA[
  <h3 id="RMK0">Namoz Vaqtlari Telegram Bot Kodini Darslik Sifatida Izohlash (aiogram 3.22)</h3>
  <p id="GP5M">Salom! Siz taqdim etgan kod <strong>aiogram 3.22</strong> kutubxonasi yordamida yaratilgan oddiy Telegram botdir. Bu bot O&#x27;zbekistonning Namangan shahri uchun namoz vaqtlarini ko&#x27;rsatadi. Ma&#x27;lumotlar <a href="https://aladhan.com/prayer-times-api" target="_blank">Aladhan API</a> dan olinadi. Bot quyidagi buyruqlarga javob beradi:</p>
  <ul id="06tJ">
    <li id="WZDK">/start: Bot haqida ma&#x27;lumot va yordam.</li>
    <li id="aO50">/namoz: Bugungi namoz vaqtlari (Namangan uchun, o&#x27;zbekcha nomlar bilan).</li>
  </ul>
  <p id="V4xT">Bu darslikda kodni <strong>qism-qismga bo&#x27;lib izohlayman</strong>: Har bir qator yoki blokni tushuntiraman, nima uchun kerakligini va qanday ishlayotganini. Bu yangi boshlovchilar uchun foydali bo&#x27;ladi. Kod Python 3 da yozilgan, asinxron (async) usulda ishlaydi.</p>
  <h4 id="Bnh3">1. Kirish: O&#x27;rnatish va Umumiy Tuzilish</h4>
  <ul id="IssM">
    <li id="PYjo"><strong>O&#x27;rnatish</strong>: Kodni ishga tushirish uchun Python 3.8+ kerak. Quyidagi paketlarni o&#x27;rnating: text<code>pip install aiogram==3.22.0 aiohttp</code></li>
    <li id="HBhf"><strong>Bot Token</strong>: Kodda <strong>BOT_TOKEN</strong> = <u>&quot;7627050170:AAF2w-NYia_7u1GaTD6lW5wSLwEx4C9Tepc&quot;</u>  – bu Telegram BotFather dan olingan token. O&#x27;zingizniki bilan almashtiring.</li>
    <li id="BFWZ"><strong>Ishga Tushirish</strong>: Faylni bot.py deb saqlang va python bot.py bilan ishga tushiring. Bot doimiy ishlaydi (Ctrl+C bilan to&#x27;xtating).</li>
    <li id="nAuF"><strong>Umumiy Tuzilish</strong>:</li>
    <ul id="UEx9">
      <li id="a3cK">Importlar (kutubxonalar yuklash).</li>
      <li id="Gpay">Sozlamalar (token, API URL).</li>
      <li id="o01a">Handlerlar (buyruqlar uchun funksiyalar: /start, /namoz).</li>
      <li id="ZhbV">Asosiy funksiya (botni ishga tushirish).</li>
    </ul>
  </ul>
  <p id="TCXn">Endi kodni qator-qator izohlaymiz.</p>
  <h4 id="jG7l">2. Import Qismi (Kutubxonalar Yuklash)</h4>
  <p id="iZyD">python</p>
  <pre id="gAVI" data-lang="python">import asyncio  # Asinxron operatsiyalar uchun
import logging  # Loglar uchun (xatoliklarni kuzatish)
from datetime import datetime  # Sana va vaqt bilan ishlash uchun
import aiohttp  # Asinxron HTTP so&#x27;rovlar uchun (API dan ma&#x27;lumot olish)

from aiogram import Bot, Dispatcher, F  # aiogram asosiy komponentlari
from aiogram.filters import Command  # Buyruq filtrlari
from aiogram.types import Message  # Xabar turlari
from aiogram.enums import ParseMode  # Markdown format uchun
from aiogram.client.default import DefaultBotProperties  # *** YANGI: DefaultBotProperties import qilish (xato tuzatish uchun)</pre>
  <ul id="O3RQ">
    <li id="1whm"><strong>Izoh</strong>: Bu qismda kerakli kutubxonalar yuklanadi.</li>
    <ul id="JNOt">
      <li id="OAP2">asyncio: Asinxron kodni ishlatish uchun (bot bir vaqtda bir nechta so&#x27;rovni boshqarishi mumkin).</li>
      <li id="tMbi">logging: Xatoliklarni konsolga chiqarish va kuzatish uchun.</li>
      <li id="y41w">datetime: Bugungi sanani olish uchun.</li>
      <li id="joW8">aiohttp: API ga asinxron so&#x27;rov yuborish uchun (HTTP GET).</li>
      <li id="eEP8">aiogram modullari: Bot yaratish (Bot), xabarlarni boshqarish (Dispatcher), filtrlar (Command, F), xabar turlari (Message), formatlash (ParseMode), va default sozlamalar (DefaultBotProperties – aiogram 3.7+ da parse_mode ni belgilash uchun).</li>
    </ul>
  </ul>
  <h4 id="QZR9">3. Logging Sozlamalari</h4>
  <p id="nMy7">python</p>
  <pre id="iDwc" data-lang="python"># Logging sozlamalari: Bot ishida xatoliklarni konsolga chiqarish
logging.basicConfig(level=logging.INFO)</pre>
  <ul id="WVFJ">
    <li id="1SdD"><strong>Izoh</strong>: Logging ni sozlaydi. INFO darajasi – oddiy ma&#x27;lumotlar va xatolar konsolga chiqadi. Bu botdagi muammolarni topishga yordam beradi (masalan, API xatosi).</li>
  </ul>
  <h4 id="iVlu">4. Bot Token va Yaratish</h4>
  <p id="CfOl">python</p>
  <pre id="cDr8" data-lang="python"># Bot tokenini shu yerga kiriting (BotFather dan olingan)
BOT_TOKEN = &quot;7627050170:AAF2w-NYia_7u1GaTD6lW5wSLwEx4C9Tepc&quot;  # O&#x27;z tokeningizni yozing!

# Bot va Dispatcher yaratish
bot = Bot(token=BOT_TOKEN, default=DefaultBotProperties(parse_mode=ParseMode.MARKDOWN))  # *** Tuzatilgan: default parametri orqali Markdown belgilash
dp = Dispatcher()  # Xabarlarni boshqaruvchi</pre>
  <ul id="Exwp">
    <li id="6ZHz"><strong>Izoh</strong>:</li>
    <ul id="32gg">
      <li id="ZwH4">BOT_TOKEN: Botning &quot;pasporti&quot; – Telegram bilan bog&#x27;lanish uchun kerak. BotFather dan oling.</li>
      <li id="hF9r">bot = Bot(...): Bot ob&#x27;ektini yaratadi. default=DefaultBotProperties(parse_mode=ParseMode.MARKDOWN) – barcha javoblarda Markdown formatini standart qiladi (masalan, <em>qalin</em> matn).</li>
      <li id="6Ao0">dp = Dispatcher(): Xabarlarni qabul qiluvchi va handlerlarga (funksiyalarga) yuboruvchi ob&#x27;ekt. Botning &quot;miyasi&quot;.</li>
    </ul>
  </ul>
  <h4 id="q384">5. API Sozlamalari</h4>
  <p id="NYxo">python</p>
  <pre id="N21L" data-lang="python"># Aladhan API sozlamalari: Toshkent uchun (ID=434877, mamlakat=O&#x27;zbekiston)
CITY_ID = 434877  # Toshkent shahar ID (API dan)
COUNTRY = &quot;Uzbekistan&quot;
METHOD = 2  # Hanafiy mazhab uchun (O&#x27;zbekiston uchun mos)

# API URL shabloni
PRAYER_API_URL = f&quot;https://api.aladhan.com/v1/timingsByCity?city=Namangan&amp;country={COUNTRY}&amp;method={METHOD}&quot;</pre>
  <ul id="u9A3">
    <li id="mZCQ"><strong>Izoh</strong>:</li>
    <ul id="5MYU">
      <li id="Vspu">CITY_ID: Shahar ID (lekin bu kodda ishlatilmagan, ehtimol eskilik).</li>
      <li id="IzoL">COUNTRY = &quot;Uzbekistan&quot;: Mamlakat nomi (API uchun inglizcha).</li>
      <li id="J4ix">METHOD = 2: Namoz hisoblash usuli (2 – Hanafiy mazhab, O&#x27;zbekiston uchun mos).</li>
      <li id="YCbp">PRAYER_API_URL: API manzili. f-string orqali shablon yaratilgan. Bu yerda city=Namangan – Namangan shahri uchun o&#x27;zgartirilgan. API dan JSON javob olinadi.</li>
    </ul>
  </ul>
  <h4 id="uRXU">6. /start Buyrug&#x27;i Handleri</h4>
  <p id="Kd94">python</p>
  <pre id="wF2Z" data-lang="python"># /start buyrug&#x27;i: Foydalanuvchiga salom va yordam ko&#x27;rsatish
@dp.message(Command(&quot;start&quot;))
async def start_handler(message: Message):
    &quot;&quot;&quot;
    /start buyrug&#x27;i uchun handler.
    Foydalanuvchiga bot haqida ma&#x27;lumot beradi.
    &quot;&quot;&quot;
    welcome_text = (
        &quot;Assalomu alaykum! 🇺🇿\n&quot;
        &quot;Bu bot namoz vaqtlarini ko&#x27;rsatadi (Namangan uchun).\n\n&quot;
        &quot;Buyruqlar:\n&quot;
        &quot;/namoz - Bugungi namoz vaqtlari\n&quot;
        &quot;/start - Bu xabar&quot;
    )
    await message.answer(welcome_text)  # Javob yuborish</pre>
  <ul id="JCtH">
    <li id="rx5i"><strong>Izoh</strong>:</li>
    <ul id="XIHr">
      <li id="dsvi">@dp.message(Command(&quot;start&quot;)): Dekorator – bu funksiya /start buyruqiga bog&#x27;lanadi.</li>
      <li id="VeHk">async def start_handler(message: Message): Asinxron funksiya. message – kiruvchi xabar ob&#x27;ekti.</li>
      <li id="m7xR">welcome_text: Matn shabloni (multiline string). O&#x27;zbekcha salom va yordam.</li>
      <li id="4j3F">await message.answer(...): Foydalanuvchiga javob yuboradi. await – asinxron kutish.</li>
    </ul>
  </ul>
  <h4 id="XSpx">7. /namoz Buyrug&#x27;i Handleri</h4>
  <p id="Lbqe">python</p>
  <pre id="OVv3" data-lang="python"># /namoz buyrug&#x27;i: Namoz vaqtlarini API dan olish va ko&#x27;rsatish
@dp.message(Command(&quot;namoz&quot;))
async def prayer_times_handler(message: Message):
    &quot;&quot;&quot;
    /namoz buyrug&#x27;i uchun handler.
    Asinxron ravishda API dan ma&#x27;lumot oladi va formatlab yuboradi.
    &quot;&quot;&quot;
    try:
        # Asinxron HTTP so&#x27;rov yuborish
        async with aiohttp.ClientSession() as session:
            async with session.get(PRAYER_API_URL) as response:
                if response.status == 200:  # Muvaffaqiyatli javob
                    data = await response.json()  # JSON ni o&#x27;qish
                    timings = data[&#x27;data&#x27;][&#x27;timings&#x27;]  # Vaqtlar ma&#x27;lumoti
                    
                    # Bugungi sana
                    today = datetime.now().strftime(&quot;%d.%m.%Y&quot;)
                    
                    # Namoz vaqtlari matni (Markdown formatda)
                    prayer_text = (
                        f&quot;🕌 *Bugungi namoz vaqtlari (Namangan)*\n&quot;
                        f&quot;📅 Sana: {today}\n\n&quot;
                        f&quot;🌅 Bomdot: {timings[&#x27;Fajr&#x27;]}\n&quot;
                        f&quot;☀️ Quyosh: {timings[&#x27;Sunrise&#x27;]}\n&quot;
                        f&quot;🏙 Peshin: {timings[&#x27;Dhuhr&#x27;]}\n&quot;
                        f&quot;🌆 Asr: {timings[&#x27;Asr&#x27;]}\n&quot;
                        f&quot;🌇 Shom: {timings[&#x27;Maghrib&#x27;]}\n&quot;
                        f&quot;🌙 Xufton(Vitr): {timings[&#x27;Isha&#x27;]}\n\n&quot;
                        f&quot;*Manba: Aladhan API*\n&quot;
                        f&quot;*Dasturchi: @nematjon_shahobiddinov*&quot;
                    )
                    
                    await message.answer(prayer_text)  # Formatlangan javob yuborish
                else:
                    await message.answer(&quot;❌ API xatosi: Ma&#x27;lumot olinmadi. Keyinroq urinib ko&#x27;ring.&quot;)  # Xato xabari
    except Exception as e:  # Boshqa xatolar (internet, va h.k.)
        logging.error(f&quot;Xato: {e}&quot;)  # Logga yozish
        await message.answer(&quot;❌ Xato yuz berdi. Botni qayta ishga tushiring.&quot;)</pre>
  <ul id="XX1w">
    <li id="q9WQ"><strong>Izoh</strong>:</li>
    <ul id="JGNZ">
      <li id="hbt0">@dp.message(Command(&quot;namoz&quot;)): /namoz buyruqiga bog&#x27;langan.</li>
      <li id="xPfC">try-except: Xatolarni ushlash (masalan, internet yo&#x27;q yoki API xatosi).</li>
      <li id="LGJI">async with aiohttp.ClientSession() as session: HTTP sessiyasi yaratish (asinxron).</li>
      <li id="IpSC">session.get(PRAYER_API_URL): API ga GET so&#x27;rov yuborish.</li>
      <li id="ZJx9">if response.status == 200: Muvaffaqiyatli bo&#x27;lsa, JSON o&#x27;qish (await response.json()).</li>
      <li id="VWuQ">timings = data[&#x27;data&#x27;][&#x27;timings&#x27;]: Vaqtlar lug&#x27;atini olish (masalan, &#x27;Fajr&#x27;: &#x27;04:30&#x27;).</li>
      <li id="l7Db">today = datetime.now().strftime(&quot;%d.%m.%Y&quot;): Bugungi sanani formatlash.</li>
      <li id="WKgL">prayer_text: Matn shabloni. Namoz nomlari o&#x27;zbekcha (Bomdot = Fajr, va h.k.). Emoji va Markdown ishlatilgan.</li>
      <li id="zRUY">await message.answer(...): Javob yuborish.</li>
      <li id="necc">else va except: Xato xabarlari. logging.error: Xatoni logga yozish.</li>
    </ul>
  </ul>
  <h4 id="I1jI">8. Asosiy Funksiya va Ishga Tushirish</h4>
  <p id="CrfW">python</p>
  <pre id="sqOv" data-lang="python"># Botni ishga tushirish funksiyasi
async def main():
    &quot;&quot;&quot;
    Asosiy funksiya: Botni polling rejimida ishga tushirish.
    Polling - Telegram serverini doimiy tekshirish (webhook o&#x27;rniga oddiy).
    &quot;&quot;&quot;
    # Dispatcher ga botni bog&#x27;lash
    await dp.start_polling(bot)

# Dasturni ishga tushirish
if __name__ == &quot;__main__&quot;:
    asyncio.run(main())  # Asinxron ishga tushirish</pre>
  <ul id="jbsL">
    <li id="Okrv"><strong>Izoh</strong>:</li>
    <ul id="8O7F">
      <li id="Rrvv">async def main(): Asosiy asinxron funksiya. dp.start_polling(bot) – botni polling rejimida ishga tushiradi (Telegram serverini doimiy tekshiradi, webhook o&#x27;rniga oddiy usul).</li>
      <li id="aapK">if __name__ == &quot;__main__&quot;: Fayl to&#x27;g&#x27;ridan-to&#x27;g&#x27;ri ishga tushirilganda bajariladi (modul sifatida emas).</li>
      <li id="2R32">asyncio.run(main()): Asinxron kodni ishga tushiradi.</li>
    </ul>
  </ul>
  <pre id="s0Br" data-lang="python">&#x60;&#x60;&#x60;python
import asyncio  # Asinxron operatsiyalar uchun
import logging  # Loglar uchun (xatoliklarni kuzatish)
from datetime import datetime  # Sana va vaqt bilan ishlash uchun
import aiohttp  # Asinxron HTTP so&#x27;rovlar uchun (API dan ma&#x27;lumot olish)

from aiogram import Bot, Dispatcher, F  # aiogram asosiy komponentlari
from aiogram.filters import Command  # Buyruq filtrlari
from aiogram.types import Message  # Xabar turlari
from aiogram.enums import ParseMode  # Markdown format uchun
from aiogram.client.default import DefaultBotProperties  # *** YANGI: DefaultBotProperties import qilish (xato tuzatish uchun)

# Logging sozlamalari: Bot ishida xatoliklarni konsolga chiqarish
logging.basicConfig(level=logging.INFO)

# Bot tokenini shu yerga kiriting (BotFather dan olingan)
BOT_TOKEN = &quot;7627050170:AAF2w-NYia_7u1GaTD6lW5wSLwEx4C9Tepc&quot;  # O&#x27;z tokeningizni yozing!

# Bot va Dispatcher yaratish
bot = Bot(token=BOT_TOKEN, default=DefaultBotProperties(parse_mode=ParseMode.MARKDOWN))  # *** Tuzatilgan: default parametri orqali Markdown belgilash
dp = Dispatcher()  # Xabarlarni boshqaruvchi

# Aladhan API sozlamalari: Toshkent uchun (ID=434877, mamlakat=O&#x27;zbekiston)
CITY_ID = 434877  # Toshkent shahar ID (API dan)
COUNTRY = &quot;Uzbekistan&quot;
METHOD = 2  # Hanafiy mazhab uchun (O&#x27;zbekiston uchun mos)

# API URL shabloni
PRAYER_API_URL = f&quot;https://api.aladhan.com/v1/timingsByCity?city=Namangan&amp;country={COUNTRY}&amp;method={METHOD}&quot;

# /start buyrug&#x27;i: Foydalanuvchiga salom va yordam ko&#x27;rsatish
@dp.message(Command(&quot;start&quot;))
async def start_handler(message: Message):
    &quot;&quot;&quot;
    /start buyrug&#x27;i uchun handler.
    Foydalanuvchiga bot haqida ma&#x27;lumot beradi.
    &quot;&quot;&quot;
    welcome_text = (
        &quot;Assalomu alaykum! 🇺🇿\n&quot;
        &quot;Bu bot namoz vaqtlarini ko&#x27;rsatadi (Namangan uchun).\n\n&quot;
        &quot;Buyruqlar:\n&quot;
        &quot;/namoz - Bugungi namoz vaqtlari\n&quot;
        &quot;/start - Bu xabar&quot;
    )
    await message.answer(welcome_text)  # Javob yuborish

# /namoz buyrug&#x27;i: Namoz vaqtlarini API dan olish va ko&#x27;rsatish
@dp.message(Command(&quot;namoz&quot;))
async def prayer_times_handler(message: Message):
    &quot;&quot;&quot;
    /namoz buyrug&#x27;i uchun handler.
    Asinxron ravishda API dan ma&#x27;lumot oladi va formatlab yuboradi.
    &quot;&quot;&quot;
    try:
        # Asinxron HTTP so&#x27;rov yuborish
        async with aiohttp.ClientSession() as session:
            async with session.get(PRAYER_API_URL) as response:
                if response.status == 200:  # Muvaffaqiyatli javob
                    data = await response.json()  # JSON ni o&#x27;qish
                    timings = data[&#x27;data&#x27;][&#x27;timings&#x27;]  # Vaqtlar ma&#x27;lumoti
                    
                    # Bugungi sana
                    today = datetime.now().strftime(&quot;%d.%m.%Y&quot;)
                    
                    # Namoz vaqtlari matni (Markdown formatda)
                    prayer_text = (
                        f&quot;🕌 *Bugungi namoz vaqtlari (Namangan)*\n&quot;
                        f&quot;📅 Sana: {today}\n\n&quot;
                        f&quot;🌅 Bomdot: {timings[&#x27;Fajr&#x27;]}\n&quot;
                        f&quot;☀️ Quyosh: {timings[&#x27;Sunrise&#x27;]}\n&quot;
                        f&quot;🏙 Peshin: {timings[&#x27;Dhuhr&#x27;]}\n&quot;
                        f&quot;🌆 Asr: {timings[&#x27;Asr&#x27;]}\n&quot;
                        f&quot;🌇 Shom: {timings[&#x27;Maghrib&#x27;]}\n&quot;
                        f&quot;🌙 Xufton(Vitr): {timings[&#x27;Isha&#x27;]}\n\n&quot;
                        f&quot;*Manba: Aladhan API*\n&quot;
                        f&quot;*Dasturchi: @nematjon_shahobiddinov*&quot;
                    )
                    
                    await message.answer(prayer_text)  # Formatlangan javob yuborish
                else:
                    await message.answer(&quot;❌ API xatosi: Ma&#x27;lumot olinmadi. Keyinroq urinib ko&#x27;ring.&quot;)  # Xato xabari
    except Exception as e:  # Boshqa xatolar (internet, va h.k.)
        logging.error(f&quot;Xato: {e}&quot;)  # Logga yozish
        await message.answer(&quot;❌ Xato yuz berdi. Botni qayta ishga tushiring.&quot;)

# Botni ishga tushirish funksiyasi
async def main():
    &quot;&quot;&quot;
    Asosiy funksiya: Botni polling rejimida ishga tushirish.
    Polling - Telegram serverini doimiy tekshirish (webhook o&#x27;rniga oddiy).
    &quot;&quot;&quot;
    # Dispatcher ga botni bog&#x27;lash
    await dp.start_polling(bot)



# Dasturni ishga tushirish
if __name__ == &quot;__main__&quot;:
    asyncio.run(main())  # Asinxron ishga tushirish
&#x60;&#x60;&#x60;</pre>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@snrg_py/1s0-3agoucC</guid><link>https://teletype.in/@snrg_py/1s0-3agoucC?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py</link><comments>https://teletype.in/@snrg_py/1s0-3agoucC?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py#comments</comments><dc:creator>snrg_py</dc:creator><title>Aiogram 3.22 + Wikipedia API</title><pubDate>Mon, 27 Oct 2025 04:39:21 GMT</pubDate><description><![CDATA[bash]]></description><content:encoded><![CDATA[
  <h2 id="zDWE"><strong>Aiogram 3.22 + Wikipedia API</strong> – Telegram bot yaratish (o‘zbek tilida)</h2>
  <hr />
  <h3 id="fSoI"><code><a href="https://aiogram-322-wikipedia-ap-qcal71o.gamma.site/" target="_blank">1. Maqsad</a></code></h3>
  <ul id="AnFX">
    <li id="nt8P"><strong>Telegram bot</strong> yaratamiz.</li>
    <li id="q5I0">Foydalanuvchi <strong>matn</strong> yuborsa, o‘zbekcha <strong>Wikipedia</strong>dan qisqa ma’lumot (summary) olib, javob qaytaradi.</li>
    <li id="12vv">Barcha kod <strong>Aiogram 3.22</strong> asosida, <strong>asinxron</strong> usulda ishlaydi.</li>
  </ul>
  <hr />
  <h3 id="T7Hz">2. Kerakli kutubxonalar</h3>
  <p id="QiaT">bash</p>
  <pre id="3D2E">pip install aiogram==3.22.0 wikipedia-api</pre>
  <ul id="gGb0">
    <li id="B4GO">aiogram – Telegram Bot API bilan ishlash.</li>
    <li id="s637">wikipedia-api – Wikipedia sahifalarini oson olish uchun.</li>
  </ul>
  <hr />
  <h3 id="JaiG">3. Bot yaratish (BotFather)</h3>
  <ol id="H83r">
    <li id="kkI6">Telegramda <strong>@BotFather</strong> ga yozing.</li>
    <li id="gKsz">/newbot → bot nomini va username kiriting.</li>
    <li id="uzB0"><strong>Token</strong> olasiz → 7627050170:AAF2w-NYia_7u1GaTD6lW5wSLwEx4C9Tepc (masalan).  <strong>Muhim:</strong> Tokenni hech kimga ko‘rsatmang!</li>
  </ol>
  <hr />
  <h3 id="9DDG">4. Kod (to‘liq, izohli)</h3>
  <p id="conE">python</p>
  <pre id="O0An"># 1. Importlar
import asyncio
from aiogram import Bot, Dispatcher, F
from aiogram.types import Message
from wikipediaapi import Wikipedia

# 2. Bot va sozlamalar
TOKEN = &quot;7627050170:AAF2w-NYia_7u1GaTD6lW5wSLwEx4C9Tepc&quot;   # &lt;-- O&#x27;z tokeningiz
bot = Bot(token=TOKEN)
dp = Dispatcher()

# Wikipedia (o&#x27;zbek tili)
wiki = Wikipedia(
    user_agent=&quot;WikiBot (siz@email.com)&quot;,   # O&#x27;z emailingizni yozing!
    language=&quot;uz&quot;
)

# 3. Handler: har qanday matnli xabar
@dp.message(F.text)
async def wiki_handler(message: Message):
    query = message.text.strip()          # foydalanuvchi so&#x27;zi
    page = wiki.page(query)               # Wikipedia sahifasini izlash

    if page.exists():                     # sahifa topilsa
        # 200 belgigacha qisqartiramiz
        summary = page.summary[:200] + &quot;...&quot; if len(page.summary) &gt; 200 else page.summary
        # Javob yuborish (HTML format)
        await message.answer(
            f&quot;&lt;b&gt;{page.title}&lt;/b&gt;\n\n{summary}\n\n{page.fullurl}&quot;,
            parse_mode=&quot;HTML&quot;
        )
    else:                                 # sahifa topilmasa
        await message.answer(f&quot;&#x27;{query}&#x27; topilmadi. Boshqa so&#x27;z kiriting.&quot;)

# 4. Botni ishga tushirish
async def main():
    print(&quot;Bot ishga tushdi...&quot;)
    await dp.start_polling(bot)

if __name__ == &quot;__main__&quot;:
    asyncio.run(main())</pre>
  <hr />
  <h3 id="Z5ho">5. Kodni <strong>qator-qator</strong> tushuntirish (dars uchun)</h3>
  <p id="oOvO">Qator</p>
  <p id="syoC">Nima qiladi?</p>
  <p id="qRWb">Nima uchun kerak?</p>
  <p id="2gKK">import asyncio</p>
  <p id="stjN">Asinxron ishlash uchun</p>
  <p id="XlwG">Bot bir vaqtda ko‘p xabarlarni qayta ishlay oladi</p>
  <p id="Dgii">from aiogram import ...</p>
  <p id="ltZ2">Bot, Dispatcher, F</p>
  <p id="lWQZ">Botni boshqarish uchun asosiy vositalar</p>
  <p id="YWrU">from aiogram.types import Message</p>
  <p id="mrYt">Xabar tipini aniqlash</p>
  <p id="ZFWQ">message.text ni olish uchun</p>
  <p id="OVvc">from wikipediaapi import Wikipedia</p>
  <p id="rcMk">Wikipedia API</p>
  <p id="485n">Sahifalarni olish uchun</p>
  <p id="OYzm">TOKEN = &quot;...&quot;</p>
  <p id="FksY">Bot tokeni</p>
  <p id="OGce">Botni Telegramga ulash</p>
  <p id="oDDQ">bot = Bot(token=TOKEN)</p>
  <p id="P4ky">Bot obyekti yaratish</p>
  <p id="mlra">API bilan aloqa</p>
  <p id="NqNG">dp = Dispatcher()</p>
  <p id="Kiuc">Xabarlarni yo‘naltiruvchi</p>
  <p id="stN0">Handlerlarni bog‘lash</p>
  <p id="eq21">wiki = Wikipedia(...)</p>
  <p id="MrWg">Wikipedia sozlamalari</p>
  <p id="pf1Z">Til va identifikatsiya</p>
  <p id="SYJD">@dp.message(F.text)</p>
  <p id="69JN"><strong>Dekorator</strong> – faqat matnli xabarlarga javob ber</p>
  <p id="7haE">/start emas, faqat oddiy matn</p>
  <p id="PVn2">async def wiki_handler(message: Message):</p>
  <p id="LwMu">Asinxron funksiya</p>
  <p id="1EQ4">await ishlatish uchun</p>
  <p id="K3d7">query = message.text.strip()</p>
  <p id="t20z">Foydalanuvchi so‘zini olish</p>
  <p id="O4Lm">Bo‘sh joylarni olib tashlash</p>
  <p id="8mD2">page = wiki.page(query)</p>
  <p id="o7gu">Wikipedia sahifasini izlash</p>
  <p id="oCaD">Ma’lumot olish</p>
  <p id="nmJt">if page.exists():</p>
  <p id="9VFj">Sahifa bor yoki yo‘qligini tekshirish</p>
  <p id="uRBx">Xato oldini olish</p>
  <p id="1R1g">summary = ...</p>
  <p id="5gFz">200 belgigacha qisqartirish</p>
  <p id="uhbv">Telegram xabarlari cheklangan</p>
  <p id="4o6f">await message.answer(...)</p>
  <p id="bcjS">Javob yuborish</p>
  <p id="g0Oj">Foydalanuvchiga ko‘rsatish</p>
  <p id="Skcm">parse_mode=&quot;HTML&quot;</p>
  <p id="vlcd">&lt;b&gt; tegi ishlasin</p>
  <p id="P6Cx">Sarlavha qalin bo‘lsin</p>
  <p id="xCUT">else:</p>
  <p id="h4xF">Sahifa topilmasa</p>
  <p id="rj9u">Foydalanuvchiga xabar berish</p>
  <p id="NE4a">async def main():</p>
  <p id="hwtP">Botni ishga tushirish</p>
  <p id="qrpp">start_polling chaqirish</p>
  <p id="pVCw">asyncio.run(main())</p>
  <p id="uirX">Asinxron dasturni ishga tushirish</p>
  <p id="5FvT">Python tomonidan talab qilinadi</p>
  <hr />
  <h3 id="fO4y">6. Botni sinash</h3>
  <ol id="lnY1">
    <li id="fx1j">Faylni wiki_bot.py deb saqlang.</li>
    <li id="JIqK">Terminalda:</li>
  </ol>
  <p id="20qu">bash</p>
  <pre id="lE9b">python wiki_bot.py</pre>
  <ol id="gKhb">
    <li id="sBlz">Telegramda botga yozing:</li>
    <ul id="7FsQ">
      <li id="aNNM">O&#x27;zbekiston → qisqa ma’lumot chiqadi</li>
      <li id="1QrF">Toshkent → shahar haqida</li>
      <li id="KaKS">Python → inglizcha sahifa (agar uz da bo‘lmasa) topilmaydi</li>
    </ul>
  </ol>
  <hr />
  <h3 id="ofR2">7. Qo‘shimcha vazifalar (uyga)</h3>
  <p id="xQFP">Vazifa</p>
  <p id="rLqX">Nima qilish kerak?</p>
  <p id="g7QQ">/start qo‘shish</p>
  <p id="OZx1">Salomlashuv xabari</p>
  <p id="rTzo">/help qo‘shish</p>
  <p id="avqg">Botdan foydalanish qo‘llanmasi</p>
  <p id="lqNU">try-except qo‘shish</p>
  <p id="kNN0">API xatolarini ushlash</p>
  <p id="sICu">Tilni tanlash</p>
  <p id="KBHR">/lang uz yoki /lang en</p>
  <p id="QQZc">Tugma qo‘shish</p>
  <p id="Fe8o">“To‘liq o‘qish” → havola</p>
  <hr />
  <h3 id="8M4C">8. Xulosa</h3>
  <ul id="BThn">
    <li id="ziz5"><strong>Aiogram</strong> – zamonaviy, tez, asinxron.</li>
    <li id="vcKI"><strong>Wikipedia API</strong> – bepul, oddiy.</li>
    <li id="U76i"><strong>Bot</strong> – 30 qatordan kam kod bilan ishlaydi!</li>
  </ul>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@snrg_py/IzgH3iJ8vxD</guid><link>https://teletype.in/@snrg_py/IzgH3iJ8vxD?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py</link><comments>https://teletype.in/@snrg_py/IzgH3iJ8vxD?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py#comments</comments><dc:creator>snrg_py</dc:creator><title>Aiogram 3 ( lotin-kiril )</title><pubDate>Mon, 20 Oct 2025 04:02:22 GMT</pubDate><description><![CDATA[Bu dastur Aiogram 3.x kutubxonasida yozilgan Telegram-bot bo‘lib, foydalanuvchi yuborgan matnni avtomatik tarzda lotindan kirilga yoki kirildan lotinga o‘giradi.]]></description><content:encoded><![CDATA[
  <h2 id="1peB"><a href="https://telegram-bot-serveri-8bac7i5.gamma.site/" target="_blank">🧠 </a>Umumiy maqsad.</h2>
  <p id="hUCw">Bu dastur <strong>Aiogram 3.x</strong> kutubxonasida yozilgan <strong>Telegram-bot</strong> bo‘lib, foydalanuvchi yuborgan matnni avtomatik tarzda <strong>lotindan kirilga</strong> yoki <strong>kirildan lotinga</strong> o‘giradi.</p>
  <hr />
  <h2 id="uOSE">🧩 KODNI IZOHLI TAHLILI</h2>
  <pre id="JGm2"># lotin kiril
</pre>
  <p id="3xnl">➡️ Faqat fayl nomi yoki sarlavha sifatida yozilgan. Ma’lumot uchun.</p>
  <hr />
  <pre id="BNWf">from aiogram import Bot, Dispatcher, types
from aiogram.filters import Command
from aiogram.types import Message
import asyncio
from translete import to_cyrillic, to_latin  # agar bu funksiyalar sizda mavjud bo‘lsa
</pre>
  <h3 id="8wFJ">🧱 Bu joyda:</h3>
  <ul id="86IX">
    <li id="Piiv"><strong>aiogram</strong> — Telegram botlarini asinxron (ya’ni bir vaqtning o‘zida bir nechta foydalanuvchi bilan ishlay oladigan) shaklda yozish uchun kutubxona.</li>
    <li id="OQ5l"><code>Bot</code> — botning o‘zini yaratish uchun ishlatiladi (TOKEN orqali).</li>
    <li id="ltWr"><code>Dispatcher</code> — barcha xabarlar (message) va komandalarni boshqaruvchi “markaz”.</li>
    <li id="O3a6"><code>types</code> va <code>Message</code> — Telegramdagi turli obyektlar (xabar, foydalanuvchi, rasm va hokazo) bilan ishlash uchun kerak.</li>
    <li id="Bt59"><code>Command</code> — foydalanuvchi tomonidan yuborilgan komandalarni (<code>/start</code>, <code>/help</code> va hokazo) ushlaydi.</li>
    <li id="pTJW"><code>asyncio</code> — Pythonning asinxronlikni boshqaruvchi moduli (Aiogram asinxron ishlaydi).</li>
    <li id="XJi1"><code>from translete import to_cyrillic, to_latin</code> — bu joyda siz o‘zingiz yozgan yoki import qilgan <strong>transliteratsiya funksiyalari</strong>ni chaqiryapsiz.<br /> ❗ Agar sizda <code>translete.py</code> degan fayl bo‘lmasa, nomi <strong>xato</strong> yozilgan bo‘lishi mumkin. To‘g‘risi odatda <code>transliterate</code> yoki <code>translit</code> bo‘ladi.</li>
  </ul>
  <hr />
  <pre id="E4kY">TOKEN = &quot;7627050170:AAF2w-NYia_7u1GaTD6lW5wSLwEx4C9Tepc&quot;
</pre>
  <p id="4Jbn">➡️ Bu sizning <strong>bot tokeningiz</strong>, ya’ni @BotFather dan olingan maxsus kalit.<br /> ⚠️ <strong>Muhim:</strong> Tokenni ochiq kodda joylashtirmaslik tavsiya etiladi (uni <code>.env</code> faylga yashiring yoki o‘zgartirib qo‘ying).</p>
  <hr />
  <pre id="mpMH">bot = Bot(token=TOKEN)
dp = Dispatcher()
</pre>
  <ul id="7gRd">
    <li id="Ec2Q"><code>bot</code> — Telegram bot obyektini yaratadi.</li>
    <li id="h11j"><code>dp</code> (dispatcher) — botga keladigan barcha xabarlarni qabul qiladi va ularni kerakli funksiyalarga yuboradi.</li>
  </ul>
  <hr />
  <pre id="TjNR">@dp.message(Command(&quot;start&quot;))
async def send_welcome(message: Message):
    username = message.from_user.username
    text = f&quot;Assalom alaykum, {username}! Kirill-Lotin-Kirill botiga xush kelibsiz!\n&quot;
    text += &quot;Matningizni yuboring.&quot;
    await message.answer(text)
</pre>
  <h3 id="IMI5">🔍 Bu funksiya:</h3>
  <ul id="8ODb">
    <li id="tBFq"><code>/start</code> buyrug‘ini ushlab qoladi.</li>
    <li id="5jp7"><code>message.from_user.username</code> yordamida foydalanuvchining Telegram nomini oladi.</li>
    <li id="8SPc">Foydalanuvchiga salomlashuv va ko‘rsatma yuboradi (<code>await message.answer(text)</code>).</li>
  </ul>
  <p id="VyeN">📩 <strong>Natija:</strong><br /> Agar foydalanuvchi botga <code>/start</code> yozsa, unga quyidagi javob ketadi:</p>
  <pre id="b3HB">Assalom alaykum, username! Kirill-Lotin-Kirill botiga xush kelibsiz!
Matningizni yuboring.
</pre>
  <hr />
  <pre id="C1Wz">@dp.message()
async def translit(message: Message):
    msg = message.text
    javob = to_cyrillic(msg) if msg.isascii() else to_latin(msg)
    await message.answer(javob)
</pre>
  <h3 id="fTOt">🧠 Bu funksiya:</h3>
  <ul id="fC1O">
    <li id="dIRl">Barcha oddiy matnli xabarlarni qabul qiladi (ya’ni komandalar emas).</li>
    <li id="UHpj"><code>msg = message.text</code> — foydalanuvchining yozgan matnini oladi.</li>
    <li id="kkuZ"><code>msg.isascii()</code> — matnda <strong>faqat lotincha</strong> belgilar borligini tekshiradi.</li>
    <ul id="TuLg">
      <li id="OwPI">Agar ha (<code>True</code>) bo‘lsa — demak matn lotinda, shuning uchun <strong>to_cyrillic()</strong> ishlaydi.</li>
      <li id="t2tg">Aks holda — matn kirilda, shuning uchun <strong>to_latin()</strong> ishlaydi.</li>
    </ul>
    <li id="HFFz"><code>await message.answer(javob)</code> — o‘girib berilgan matnni foydalanuvchiga yuboradi.</li>
  </ul>
  <p id="BhWH">📩 <strong>Natija:</strong><br /> Foydalanuvchi “Salom” yozsa → “Салом”<br /> Foydalanuvchi “Салом” yozsa → “Salom”</p>
  <hr />
  <pre id="HpVI">async def main():
    await dp.start_polling(bot)
</pre>
  <h3 id="OasF">⚙️ Bu funksiya:</h3>
  <ul id="Rvlh">
    <li id="zx5N">Botni ishga tushiradi.</li>
    <li id="baFB"><code>start_polling()</code> — Telegram serveridan doimiy ravishda xabarlarni olib turadi.</li>
    <li id="qvDp">Asinxron funksiya bo‘lgani uchun <code>await</code> bilan chaqiriladi.</li>
  </ul>
  <hr />
  <pre id="7kj4">if __name__ == &quot;__main__&quot;:
    asyncio.run(main())
</pre>
  <h3 id="uzlk">🚀 Bu joyda:</h3>
  <ul id="wsm3">
    <li id="Clc9">Fayl to‘g‘ridan-to‘g‘ri ishga tushirilsa (<code>python main.py</code> deb), bot <code>main()</code> funksiyasini bajaradi.</li>
    <li id="bPI3"><code>asyncio.run()</code> yordamida asinxron sikl ishga tushadi.</li>
  </ul>
  <p id="PuPa"></p>
  <hr />
  <pre id="NFvM" data-lang="python"># lotin kiril

from aiogram import Bot, Dispatcher, types
from aiogram.filters import Command
from aiogram.types import Message
import asyncio
from translete import to_cyrillic, to_latin  # agar bu funksiyalar sizda mavjud bo‘lsa

TOKEN = &quot;7627050170:AAF2w-NYia_7u1GaTD6lW5wSLwEx4C9Tepc&quot;  # &lt;-- Tokeningizni shu yerga yozing

bot = Bot(token=TOKEN)
dp = Dispatcher()


@dp.message(Command(&quot;start&quot;))
async def send_welcome(message: Message):
    username = message.from_user.username
    text = f&quot;Assalom alaykum, {username}! Kirill-Lotin-Kirill botiga xush kelibsiz!\n&quot;
    text += &quot;Matningizni yuboring.&quot;
    await message.answer(text)


@dp.message()
async def translit(message: Message):
    msg = message.text
    javob = to_cyrillic(msg) if msg.isascii() else to_latin(msg)
    await message.answer(javob)


async def main():
    await dp.start_polling(bot)


if __name__ == &quot;__main__&quot;:
    asyncio.run(main())
</pre>

]]></content:encoded></item></channel></rss>