<?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, 22 Jul 2026 02:23:22 GMT</pubDate><lastBuildDate>Wed, 22 Jul 2026 02:23:22 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@snrg_py/srvcb3GADHY</guid><link>https://teletype.in/@snrg_py/srvcb3GADHY?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py</link><comments>https://teletype.in/@snrg_py/srvcb3GADHY?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py#comments</comments><dc:creator>snrg_py</dc:creator><title>echo bot</title><pubDate>Tue, 14 Jul 2026 06:56:15 GMT</pubDate><description><![CDATA[1-tg bot]]></description><content:encoded><![CDATA[
  <p id="3ZKx">1-tg bot</p>
  <hr />
  <pre id="W6UR" data-lang="markdown"># 1. Kerakli kutubxonalarni import qilish

&#x60;&#x60;&#x60;python
from aiogram import Bot, Dispatcher, types, F
from asyncio import run
&#x60;&#x60;&#x60;

## Bot

Telegram API bilan ishlaydi.

Misol:

&#x60;&#x60;&#x60;python
bot = Bot(token=TOKEN)
&#x60;&#x60;&#x60;

Bot orqali:

- xabar yuborish
- rasm yuborish
- fayl yuborish
- foydalanuvchini bloklash
- va boshqa amallar bajariladi.

---

## Dispatcher

Botning boshqaruv markazi.

Kelgan barcha xabarlarni kerakli funksiyaga yuboradi.

Misol:

&#x60;&#x60;&#x60;
User
 ↓
Dispatcher
 ↓
Handler
&#x60;&#x60;&#x60;

---

## types

Telegram obyektlari.

Masalan:

&#x60;&#x60;&#x60;python
types.Message
&#x60;&#x60;&#x60;

Bu oddiy xabar.

---

## F

Filter.

Masalan:

&#x60;&#x60;&#x60;python
F.text
F.photo
F.document
&#x60;&#x60;&#x60;

Aiogram 3 da juda ko&#x27;p ishlatiladi.

---

## run

Async funksiyani ishga tushiradi.

&#x60;&#x60;&#x60;python
run(start())
&#x60;&#x60;&#x60;

Dastur shu joydan boshlanadi.

---

# 2. Dispatcher yaratish

&#x60;&#x60;&#x60;python
dp = Dispatcher()
&#x60;&#x60;&#x60;

Bu yerda Dispatcher obyekti yaratilmoqda.

Keyinchalik barcha handlerlar unga qo&#x27;shiladi.

---

# 3. Echo funksiyasi

&#x60;&#x60;&#x60;python
async def echo(message: types.Message, bot: Bot):
&#x60;&#x60;&#x60;

Bu asinxron funksiya.

Parametrlar:

### message

Foydalanuvchi yuborgan xabar.

Masalan:

&#x60;&#x60;&#x60;
Salom
&#x60;&#x60;&#x60;

---

### bot

Bot obyekti.

Lekin sizning funksiyangizda ishlatilmayapti.

Uni olib tashlasa ham bo&#x27;ladi.

---

# 4. copy_to()

&#x60;&#x60;&#x60;python
await message.copy_to(
    chat_id=message.chat.id
)
&#x60;&#x60;&#x60;

Bu xabarni nusxalaydi.

Masalan

User yozadi:

&#x60;&#x60;&#x60;
Assalomu alaykum
&#x60;&#x60;&#x60;

Bot ham

&#x60;&#x60;&#x60;
Assalomu alaykum
&#x60;&#x60;&#x60;

deb yuboradi.

---

## chat_id

&#x60;&#x60;&#x60;python
message.chat.id
&#x60;&#x60;&#x60;

Xabar kelgan chatning ID raqami.

---

# 5. start() funksiyasi

&#x60;&#x60;&#x60;python
async def start():
&#x60;&#x60;&#x60;

Bu botni ishga tushirish funksiyasi.

---

## Startup event

&#x60;&#x60;&#x60;python
dp.startup.register(startup_answer)
&#x60;&#x60;&#x60;

Bot ishga tushganda

&#x60;&#x60;&#x60;python
startup_answer()
&#x60;&#x60;&#x60;

funksiyasi ishlaydi.

Ammo sizning kodingizda

&#x60;&#x60;&#x60;python
startup_answer
&#x60;&#x60;&#x60;

yo&#x27;q.

Shuning uchun

&#x60;&#x60;&#x60;
NameError
&#x60;&#x60;&#x60;

chiqadi.

---

## Message handler

&#x60;&#x60;&#x60;python
dp.message.register(echo)
&#x60;&#x60;&#x60;

Har qanday kelgan xabar

&#x60;&#x60;&#x60;
echo()
&#x60;&#x60;&#x60;

funksiyasiga yuboriladi.

---

## Shutdown event

&#x60;&#x60;&#x60;python
dp.shutdown.register(shutdown_answer)
&#x60;&#x60;&#x60;

Bot to&#x27;xtaganda ishlaydi.

Ammo

&#x60;&#x60;&#x60;python
shutdown_answer
&#x60;&#x60;&#x60;

ham mavjud emas.

---

# 6. TOKEN

&#x60;&#x60;&#x60;python
TOKEN = &quot;...&quot;
&#x60;&#x60;&#x60;

Bu BotFather bergan maxfiy kalit.

Uni GitHub yoki internetga joylash mumkin emas.

Eng yaxshi usul:

&#x60;&#x60;&#x60;python
from os import getenv

TOKEN = getenv(&quot;BOT_TOKEN&quot;)
&#x60;&#x60;&#x60;

yoki &#x60;.env&#x60; faylidan o&#x27;qish.

---

# 7. Bot yaratish

&#x60;&#x60;&#x60;python
bot = Bot(token=TOKEN)
&#x60;&#x60;&#x60;

Bu yerda Telegram bot obyekti yaratilmoqda.

---

# 8. Polling

&#x60;&#x60;&#x60;python
await dp.start_polling(bot)
&#x60;&#x60;&#x60;

Bot Telegram serveriga ulanadi.

Keyin doimiy ravishda

&#x60;&#x60;&#x60;
Yangi xabar keldimi?
&#x60;&#x60;&#x60;

deb tekshiradi.

Bu Polling deyiladi.

---

# 9. run()

&#x60;&#x60;&#x60;python
run(start())
&#x60;&#x60;&#x60;

Dastur shu yerdan boshlanadi.

&#x60;&#x60;&#x60;
Python
 ↓
run()
 ↓
start()
 ↓
start_polling()
 ↓
Bot ishlaydi
&#x60;&#x60;&#x60;

# Kodning ishlash ketma-ketligi

&#x60;&#x60;&#x60;
Python

↓

run()

↓

start()

↓

Dispatcher

↓

Telegram

↓

User xabar yuboradi

↓

echo()

↓

copy_to()

↓

Userga xabar qaytadi
&#x60;&#x60;&#x60;

# Kodingizdagi xatolar

### 1.

&#x60;&#x60;&#x60;python
dp.startup.register(startup_answer)
&#x60;&#x60;&#x60;

&#x60;startup_answer&#x60; funksiyasi yozilmagan.

Masalan:

&#x60;&#x60;&#x60;python
async def startup_answer(bot: Bot):
    print(&quot;Bot ishga tushdi&quot;)
&#x60;&#x60;&#x60;

---

### 2.

&#x60;&#x60;&#x60;python
dp.shutdown.register(shutdown_answer)
&#x60;&#x60;&#x60;

Bu funksiya ham yozilmagan.

Masalan:

&#x60;&#x60;&#x60;python
async def shutdown_answer(bot: Bot):
    print(&quot;Bot to&#x27;xtadi&quot;)
&#x60;&#x60;&#x60;

---

### 3.

&#x60;&#x60;&#x60;python
async def echo(message: types.Message, bot: Bot):
&#x60;&#x60;&#x60;

Bu yerda &#x60;bot&#x60; ishlatilmayapti.

Shuning uchun oddiyroq yozish mumkin:

&#x60;&#x60;&#x60;python
async def echo(message: types.Message):
    await message.copy_to(chat_id=message.chat.id)
&#x60;&#x60;&#x60;

---

### 4.

Bot tokenini kod ichida saqlash tavsiya etilmaydi.

&#x60;.env&#x60; fayl ishlatish xavfsizroq.</pre>
  <hr />
  <pre id="TkWD" data-lang="python">
from aiogram import Bot , Dispatcher, types, F
from asyncio import run

dp = Dispatcher()


async def echo(message: types.Message, bot: Bot):
    await message.copy_to( chat_id = message.chat.id)


async def start():
    #dp.startup.register(startup_answer)
    dp.message.register(echo)
    #dp.shutdown.register(shutdown_answer)
    TOKEN = &quot;8735603900:AAFtmzVkH9By8Ypn7y2XRoZtB6TfERp67aY&quot;
    bot = Bot(token = TOKEN)
    await dp.start_polling(bot)
            
run(start())</pre>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@snrg_py/5-BYbSybMHo</guid><link>https://teletype.in/@snrg_py/5-BYbSybMHo?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py</link><comments>https://teletype.in/@snrg_py/5-BYbSybMHo?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py#comments</comments><dc:creator>snrg_py</dc:creator><title>mator xaralat 0-180 grads</title><pubDate>Tue, 23 Jun 2026 05:29:50 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/e0/7c/e07ceb93-ac94-4182-91a4-0ec3775fae00.png"></media:content><description><![CDATA[<img src="https://docs.sunfounder.com/projects/summary-of-fun-projects/en/latest/_images/Servo_Control2.0_bb.png"></img>Wiring]]></description><content:encoded><![CDATA[
  <h2 id="encf">Ushbu Arduino loyihasi sizga servo motorni ikkita tugma yordamida boshqarish imkonini beradi: qizil tugma uni 0° ga va ko&#x27;k tugma 180° ga siljitadi, LEDlar esa teskari aloqa sifatida yonadi.</h2>
  <figure id="71lw" class="m_custom">
    <iframe src="https://www.youtube.com/embed/Qx3GEKwXfXE?autoplay=0&loop=0&mute=0"></iframe>
  </figure>
  <p id="jfVR"></p>
  <p id="P2gQ"><strong>Wiring</strong></p>
  <figure id="MYRS" class="m_retina">
    <img src="https://docs.sunfounder.com/projects/summary-of-fun-projects/en/latest/_images/Servo_Control2.0_bb.png" width="716.5" />
  </figure>
  <p id="4bqD"><strong>Common Connections:</strong></p>
  <ul id="P80W">
    <li id="AaOK"><strong>Digital Servo Motor</strong></li>
    <ul id="IoTt">
      <li id="wbi1">Connect to breadboard’s positive power bus.</li>
      <li id="MLTW">Connect to breadboard’s negative power bus.</li>
      <li id="y1ZP">Connect to <strong>3</strong> on the Arduino.</li>
    </ul>
    <li id="OiOh"><strong>Button1</strong></li>
    <ul id="DkZr">
      <li id="m1Ls"><strong>GND:</strong> Connect to a <strong>1kΩ resistor</strong>, then to negative power bus on the breadboard</li>
      <li id="kjhD"><strong>VCC:</strong> Connect to <strong>7</strong> on the Arduino.</li>
    </ul>
    <li id="1NdN"><strong>Button2</strong></li>
    <ul id="ffdP">
      <li id="p2H5"><strong>GND:</strong> Connect to a <strong>1kΩ resistor</strong>, then to negative power bus on the breadboard</li>
      <li id="1cpf"><strong>VCC:</strong> Connect to <strong>5</strong> on the Arduino.</li>
    </ul>
    <li id="EiMm"><strong>Blue LED</strong></li>
    <ul id="LCRO">
      <li id="v1sf">Connect the LED <strong>cathode</strong> to the to a <strong>1kΩ resistor</strong>, then to negative power bus on the breadboard, <strong>anode</strong> to <strong>6</strong> on the Arduino.</li>
    </ul>
    <li id="SJTf"><strong>Red LED</strong></li>
    <ul id="1BtI">
      <li id="BKqU">Connect the LED <strong>cathode</strong> to the to a <strong>1kΩ resistor</strong>, then to negative power bus on the breadboard, <strong>anode</strong> to <strong>4</strong> on the Arduino.</li>
    </ul>
  </ul>
  <p id="Vth9"><strong>Writing the Code</strong></p>
  <p id="g77s">Note</p>
  <ul id="8Vh7">
    <li id="54Y2">You can copy this code into <strong>Arduino IDE</strong>.</li>
    <li id="PrrF">Don’t forget to select the board(Arduino UNO R4 Minima/WIFI) and the correct port before clicking the <strong>Upload</strong> button.</li>
  </ul>
  <p id="dmso"></p>
  <pre id="dGzf" data-lang="cpp">#include &lt;Servo.h&gt;

// --- Pin definitions ---
const int servoPin = 3;   // Servo signal wire connected to pin 3
const int redLED   = 4;   // Red LED connected to pin 4 (with resistor)
const int redBtn   = 5;   // Red button connected to pin 5
const int blueLED  = 6;   // Blue LED connected to pin 6 (with resistor)
const int blueBtn  = 7;   // Blue button connected to pin 7

Servo myServo;             // Create a Servo object
int currentAngle = 90;     // Start servo at the middle position (90°)
const int stepSize = 5;    // Servo moves 3° for each button press

// Variables to remember the last button states
bool lastRedState  = HIGH; // HIGH means not pressed (because of INPUT_PULLUP)
bool lastBlueState = HIGH;

void setup() {
  myServo.attach(servoPin);       // Attach the servo to pin 3
  myServo.write(currentAngle);    // Move servo to initial position

  pinMode(redLED, OUTPUT);        // Set LED pins as outputs
  pinMode(blueLED, OUTPUT);

  pinMode(redBtn, INPUT_PULLUP);  // Use internal pull-up resistor
  pinMode(blueBtn, INPUT_PULLUP); // Button is active LOW
}

void loop() {
  // Read current button states
  bool redPressed  = (digitalRead(redBtn)  == LOW); // LOW means pressed
  bool bluePressed = (digitalRead(blueBtn) == LOW);

  // --- Red button logic ---
  if (redPressed &amp;&amp; lastRedState == HIGH) { // Detect new press (not held down)
    delay(50);                              // Small delay to debounce
    if (digitalRead(redBtn) == LOW) {       // Check again to confirm press
      digitalWrite(redLED, HIGH);           // Turn on red LED
      currentAngle = max(0, currentAngle - stepSize); // Move 3° toward 0°
      myServo.write(currentAngle);          // Update servo position
    }
  } else {
    digitalWrite(redLED, LOW);              // Turn off LED when not pressed
  }

  // --- Blue button logic ---
  if (bluePressed &amp;&amp; lastBlueState == HIGH) { // Detect new press
    delay(50);                                // Debounce
    if (digitalRead(blueBtn) == LOW) {        // Confirm press
      digitalWrite(blueLED, HIGH);            // Turn on blue LED
      currentAngle = min(180, currentAngle + stepSize); // Move 3° toward 180°
      myServo.write(currentAngle);            // Update servo position
    }
  } else {
    digitalWrite(blueLED, LOW);               // Turn off LED when not pressed
  }

  // Remember button states for next loop
  lastRedState  = redPressed;
  lastBlueState = bluePressed;
}</pre>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@snrg_py/-O5x8X2TJ95</guid><link>https://teletype.in/@snrg_py/-O5x8X2TJ95?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py</link><comments>https://teletype.in/@snrg_py/-O5x8X2TJ95?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=snrg_py#comments</comments><dc:creator>snrg_py</dc:creator><title>yengil oyin</title><pubDate>Wed, 17 Jun 2026 04:22:33 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/df/87/df87e5e6-08e8-480e-9fde-d1104656ba25.png"></media:content><description><![CDATA[<img src="https://docs.sunfounder.com/projects/summary-of-fun-projects/en/latest/_images/Light_Play_bb.png"></img>Ism]]></description><content:encoded><![CDATA[
  <h1 id="djiA">Yengil o&#x27;yin<a href="https://docs.sunfounder.com/projects/summary-of-fun-projects/en/latest/arduino/light_play.html#light-play" target="_blank"></a></h1>
  <p id="dhgd"></p>
  <p id="7mEO"></p>
  <section>
    <p id="S86B">Ism</p>
    <p id="kF6z">Arduino platasini o&#x27;z ichiga oladi</p>
    <p id="w5YZ">XARID HAVOLASI</p>
    <p id="iMRW">Ultimate Sensor Kit</p>
    <p id="hsDV">Arduino Uno R4 Minima</p>
    <p id="48BQ"><a href="https://www.sunfounder.com/collections/arduino-kits-bundles/products/sunfounder-ultimate-sensor-kit-with-original-arduino-uno-r4-minima?ref=jbzmncle" target="_blank">SOTIB OLING</a></p>
    <p id="e1uD">Elite Explorer to&#x27;plami</p>
    <p id="UPhg">Arduino Uno R4 WiFi</p>
    <p id="xVrp"><a href="https://www.sunfounder.com/collections/arduino-kits-bundles/products/sunfounder-elite-explorer-kit-with-official-arduino-uno-r4-wifi?ref=jbzmncle" target="_blank">SOTIB OLING</a></p>
    <p id="R0QB">3 ta 1 tada eng yaxshi boshlang&#x27;ich to&#x27;plam</p>
    <p id="2exP">Arduino Uno R4 Minima</p>
    <p id="3ZSC"><a href="https://www.sunfounder.com/collections/arduino-kits-bundles/products/sunfounder-3-in-1-ultimate-starter-kit-with-original-arduino-uno-r4-minima?ref=jbzmncle" target="_blank">SOTIB OLING</a></p>
    <p id="P7er">Universal Maker Sensor Kit</p>
    <p id="Sy0P">×</p>
  </section>
  <section style="background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="Tall">Kursga kirish</h2>
    <p id="bSpZ"></p>
    <p id="pD8p">Ushbu darsda siz Arduino-dan tugmalar, LEDlar va rezistorlar bilan birgalikda yorug&#x27;lik shousini yaratish uchun qanday foydalanishni o&#x27;rganasiz.</p>
    <p id="8Nj9">Tugmani bosish turli xil yoritish rejimlari o&#x27;rtasida almashinadi.</p>
    <figure id="b3El" class="m_custom">
      <iframe src="https://www.youtube.com/embed/DyyozHdvh80?autoplay=0&loop=0&mute=0"></iframe>
    </figure>
    <p id="Ni6R">Eslatma</p>
    <p id="Qf65">Agar siz Arduino loyihasi bilan birinchi marta ishlayotgan bo&#x27;lsangiz, avval asosiy materiallarni yuklab olish va ko&#x27;rib chiqishingizni tavsiya qilamiz.</p>
    <ul id="gFx8">
      <li id="CX8N"><a href="https://docs.sunfounder.com/projects/summary-of-fun-projects/en/latest/nano_esp32/esp32_start/install_arduino_ide.html#install-arduino" target="_blank">1.1 Arduino IDE ni o&#x27;rnatish (Muhim)</a></li>
      <li id="6Ghu"><a href="https://docs.sunfounder.com/projects/summary-of-fun-projects/en/latest/nano_esp32/esp32_start/introduce_ide.html#introduce-arduino" target="_blank">1.2 Arduino IDE ni taqdim etish</a></li>
    </ul>
    <p id="KHhP"><strong>Kerakli komponentlar</strong></p>
    <p id="MFJ4">Ushbu loyihada bizga quyidagi komponentlar kerak bo&#x27;ladi:</p>
    <p id="r3QL"></p>
    <p id="0vn7">KOMPONENT KIRISH |  MIQDORI</p>
    <p id="WRCL">Arduino UNO R4 Minima  =1</p>
    <p id="VJBp">USB Type-C kabeli      =  1</p>
    <p id="Ip6a">Kabel kanal ( taxtasi) =1</p>
    <p id="0aG6">Simlar = Bir nechta</p>
    <p id="lpKA">1kΩ rezistor  = Bir nechta</p>
    <p id="PoZT">Tugma = 3</p>
    <p id="OjDI">LED        =  Bir nechta</p>
    <p id="97BD"><strong>Simlar</strong></p>
    <figure id="fAhe" class="m_original">
      <img src="https://docs.sunfounder.com/projects/summary-of-fun-projects/en/latest/_images/Light_Play_bb.png" width="1572" />
    </figure>
    <h3 id="zTC4"></h3>
    <h2 id="guEJ">Umumiy ulanishlar:</h2>
    <h3 id="l8FB">LED</h3>
    <h3 id="g0xA">LED katodini 1 kΩ rezistorga , so&#x27;ngra non platasidagi manfiy quvvat shinasiga va LED anodini Arduinodagi 2 dan 9 gacha bo&#x27;lgan oraliqlarga ulang.</h3>
    <h3 id="37Yi">Tugma</h3>
    <h3 id="VENP">Breadboardning salbiy quvvat avtobusiga ulang.</h3>
    <h3 id="22ys">Arduino&#x27;da 10 dan 12 gacha ulanish .</h3>
    <h3 id="cuLF">Kodni yozish</h3>
    <h3 id="COu5">Eslatma</h3>
    <h3 id="ikEC">Ushbu kodni Arduino IDE ga nusxalashingiz mumkin .</h3>
    <h3 id="NHlg">&quot;Yuklash &quot; tugmasini bosishdan oldin platani (Arduino UNO R4 Minima) va to&#x27;g&#x27;ri portni tanlashni unutmang .</h3>
  </section>
  <hr />
  <section style="background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <pre id="eYcf" data-lang="c">// LED pins (blue and red alternately connected to D2 ~ D9)
const int ledPins[8] = {2, 3, 4, 5, 6, 7, 8, 9};

// Button pins
const int redButton = 10;
const int blueButton = 11;
const int greenButton = 12;

// Variables to track previous button states
bool prevRedPressed = false;
bool prevBluePressed = false;
bool prevGreenPressed = false;

void setup() {
  // Set all LED pins as outputs and turn them off
  for (int i = 0; i &lt; 8; i++) {
    pinMode(ledPins[i], OUTPUT);
    digitalWrite(ledPins[i], LOW);
  }

  // Set buttons as input with internal pull-up resistors
  pinMode(redButton, INPUT_PULLUP);
  pinMode(blueButton, INPUT_PULLUP);
  pinMode(greenButton, INPUT_PULLUP);

  Serial.begin(9600); // Optional: debug output
}

void loop() {
  handleRedButton();    // Play red light sequence
  handleBlueButton();   // Play blue LED flowing animation
  handleGreenButton();  // Play full pattern sequence
}

// --- Red button: Runs a 6-step light show pattern ---
void handleRedButton() {
  bool isPressed = digitalRead(redButton) == LOW;
  if (isPressed &amp;&amp; !prevRedPressed) {
    Serial.println(&quot;Red button pressed → 6-step pattern&quot;);
    runRedSequence();
    delay(300); // Simple debounce
  }
  prevRedPressed = isPressed;
}

void runRedSequence() {
  // Step 1: All LEDs on
  setAll(HIGH);
  delay(1000);

  // Step 2: Only blue LEDs on (even indices)
  for (int i = 0; i &lt; 8; i++)
    digitalWrite(ledPins[i], i % 2 == 0 ? HIGH : LOW);
  delay(1000);

  // Step 3: Only red LEDs on (odd indices)
  for (int i = 0; i &lt; 8; i++)
    digitalWrite(ledPins[i], i % 2 == 1 ? HIGH : LOW);
  delay(1000);

  // Step 4: All LEDs on
  setAll(HIGH);
  delay(1000);

  // Step 5: Only blue LEDs on again
  for (int i = 0; i &lt; 8; i++)
    digitalWrite(ledPins[i], i % 2 == 0 ? HIGH : LOW);
  delay(1000);

  // Step 6: Turn all LEDs off
  setAll(LOW);
}

// --- Blue button: Flowing LED animation, back and forth x2 ---
void handleBlueButton() {
  bool isPressed = digitalRead(blueButton) == LOW;
  if (isPressed &amp;&amp; !prevBluePressed) {
    Serial.println(&quot;Blue button pressed → flowing animation&quot;);

    for (int round = 0; round &lt; 2; round++) {
      // Forward flow
      for (int i = 0; i &lt; 8; i++) {
        lightOneOnly(i);
        delay(100);
      }
      // Backward flow
      for (int i = 6; i &gt;= 0; i--) {
        lightOneOnly(i);
        delay(100);
      }

      clearAll();
      delay(100); // Small gap between rounds
    }

    delay(300);
  }
  prevBluePressed = isPressed;
}

// Lights only one LED at the specified index
void lightOneOnly(int index) {
  for (int i = 0; i &lt; 8; i++) {
    digitalWrite(ledPins[i], (i == index) ? HIGH : LOW);
  }
}

// --- Green button: Four full LED pattern cycles ---
void handleGreenButton() {
  bool isPressed = digitalRead(greenButton) == LOW;
  if (isPressed &amp;&amp; !prevGreenPressed) {
    Serial.println(&quot;Green button pressed → full sequence&quot;);

    // Pattern 1: Light up and off from left to right
    for (int i = 0; i &lt; 8; i++) {
      digitalWrite(ledPins[i], HIGH);
      delay(100);
    }
    for (int i = 0; i &lt; 8; i++) {
      digitalWrite(ledPins[i], LOW);
      delay(100);
    }

    // Pattern 2: Right to left on and off
    for (int i = 7; i &gt;= 0; i--) {
      digitalWrite(ledPins[i], HIGH);
      delay(100);
    }
    for (int i = 7; i &gt;= 0; i--) {
      digitalWrite(ledPins[i], LOW);
      delay(100);
    }

    // Pattern 3: Left to right on, right to left off
    for (int i = 0; i &lt; 8; i++) {
      digitalWrite(ledPins[i], HIGH);
      delay(100);
    }
    for (int i = 7; i &gt;= 0; i--) {
      digitalWrite(ledPins[i], LOW);
      delay(100);
    }

    // Pattern 4: Right to left on, left to right off
    for (int i = 7; i &gt;= 0; i--) {
      digitalWrite(ledPins[i], HIGH);
      delay(100);
    }
    for (int i = 0; i &lt; 8; i++) {
      digitalWrite(ledPins[i], LOW);
      delay(100);
    }

    clearAll(); // Make sure all LEDs are off
    delay(300);
  }
  prevGreenPressed = isPressed;
}

// Turns all LEDs on or off
void setAll(int state) {
  for (int i = 0; i &lt; 8; i++) {
    digitalWrite(ledPins[i], state);
  }
}

// Turns off all LEDs
void clearAll() {
  setAll(LOW);
}</pre>
  </section>

]]></content:encoded></item><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></channel></rss>