es
Feedback
ToCode

ToCode

Ir al canal en Telegram

ื˜ื™ืคื™ื ืงืฆืจื™ื ืœืžืชื›ื ืชื™ื ืžืืช ื™ื ื•ืŸ ืคืจืง

Mostrar mรกs
1 419
Suscriptores
Sin datos24 horas
Sin datos7 dรญas
Sin datos30 dรญas
Archivo de publicaciones
ToCode
1 419
ื .ื‘. ื‘ื™ื ืชื™ื™ื ื” action ืจืฅ ืจืง ื™ื“ื ื™ืช ื•ืœื ื“ืจืš ื” cron ืฉืžื•ื’ื“ืจ ืฉืโ€ฆ ืื ืœืžื™ืฉื”ื•/ื™ ื™ืฉ ืจืขื™ื•ืŸ ืœืžื” ืืฉืžื— ืœื›ืœ ืขื–ืจื”

ToCode
1 419
# ืฉืœื‘ 2 ืœืคื ื™ ื›ืžื” ื™ืžื™ื ืกื™ืคืจืชื™ ืคื” ืื™ืš ืฉืจื‘ื˜ื˜ื™ ื‘ื•ื˜ ื˜ืœื’ืจื ื‘ืคื™ื™ืชื•ืŸ ื›ื“ื™ ืœื”ื—ืœื™ืฃ ืืช ื”ื‘ื•ื˜ ืฉื”ื™ื” ืœื ื• ื‘ืืœื™ืงืกื™ืจ, ื‘ื’ืœืœ ืฉื”ื™ืฉืŸ ื”ืคืกื™ืง ืœืขื‘ื•ื“ ื•ืขื“ื›ื•ืŸ ื›ืœ ื”ืชืœื•ื™ื•ืช ืฉืœ ื”ืืœื™ืงืกื™ืจ ืœื ื ืจืื” ืœื™ ืฉื•ื•ื” ืืช ื”ื”ืฉืงืขื”. ืขืœ ื”ื“ืจืš ืžื—ืงืชื™ 90% ืžื”ืงื•ื“ ืฉืœ ื”ื‘ื•ื˜. ื•ืื– ื”ืชื—ื™ืœื• ื”ื‘ืขื™ื•ืช: 1. ื”ื‘ื•ื˜ ื”ื—ื“ืฉ ืœื ื”ืฆืœื™ื— ืœืคืฆืœ ื”ื•ื“ืขื•ืช ืืจื•ื›ื•ืช ื›ืžื• ืฉืฆืจื™ืš 2. ื”ื‘ื•ื˜ ื”ื—ื“ืฉ ืœื ืฉืœื— ื”ื•ื“ืขื•ืช Markdown ืืœื ื˜ืงืกื˜ ืจื’ื™ืœ, ื•ืœื›ืŸ ื“ื•ื’ืžืื•ืช ื”ืงื•ื“ ื”ื•ืคื™ืขื• ืฉื‘ื•ืจื•ืช ื‘ืขืจื•ืฅ. ืžื” ืฉืœื ืกื™ืคืจืชื™ ื–ื” ืฉื‘ื’ืœืœ ืœื•ื—ื•ืช ื”ื–ืžื ื™ื (ื”ื‘ื•ื˜ ื”ื™ืฉืŸ ืœื ืขื‘ื“, ืœื ื”ื™ื” ื‘ืจื•ืจ ืื™ืš ืœืชืงืŸ ืื•ืชื• ื•ืจืฆื™ืชื™ ื‘ื•ื˜ ื—ื“ืฉ ืžื”ืจ), ื’ื ื“ื™ืœื’ืชื™ ืขืœ ื›ืœ ื”ื›ืœืœื™ื ืฉืœ ืชื”ืœื™ืš ืคื™ืชื•ื— ืชืงื™ืŸ: 1. ืืช ื”ืงื•ื“ ื›ืชื‘ืชื™ ื™ืฉื™ืจื•ืช ืขืœ ืฉืจืช ื” Production ื‘ vi. 2. ืืช ื”ื˜ื•ืงืŸ ืฉืœ ื˜ืœื’ืจื ื›ืชื‘ืชื™ Hard Coded ื‘ืชื•ืš ื”ืกืงืจื™ืคื˜. 3. ืขืœ Source Control ืื• ื‘ื“ื™ืงื•ืช ืœื ื”ื™ื” ืžื” ืœื“ื‘ืจ. ื”ืจื‘ื” ืชื•ื›ื ื™ื•ืช ืงื˜ื ื•ืช ืžืชื—ื™ืœื•ืช ื›ื›ื”, ืขื ื”ืชืคื™ืกื” ืฉื–ื” ืจืง ืžืฉื”ื• ื–ืžื ื™, ืงื˜ืŸ, ืฉืคื•ืชืจ ืขื›ืฉื™ื• ืื™ื–ื• ื‘ืขื™ื” ื“ื—ื•ืคื” ื•ื‘ืขืชื™ื“ ื›ืฉื™ื”ื™ื” ื–ืžืŸ ื ืกื“ืจ ืืช ื–ื”. ื”ืจื‘ื” ืชื•ื›ื ื™ื•ืช ืงื˜ื ื•ืช ื’ื ื ืฉืืจื•ืช ื‘ืžืฆื‘ ื”ื–ื”, ื•ื’ื ื”ื‘ื•ื˜ ืฉืœื™ ื”ื™ื” ื‘ืงืœื•ืช ื™ื›ื•ืœ ืœื”ื™ืฉืืจ ื‘ืื•ืชื• ื‘ื•ืจ. ื›ืœ ืžื” ืฉื”ื™ื” ืฆืจื™ืš ื–ื” ืœืชืงืŸ ืืช ื”ื‘ืื’ื™ื ื‘ืื•ืชื• vi ื•ืขืœ ืื•ืชื• ืฉืจืช ืคืจื•ื“ืงืฉืŸ. ื›ื ืจืื” ืฉื–ื” ืืคื™ืœื• ื”ื™ื” ืœื•ืงื— ืคื—ื•ืช ื–ืžืŸ. ืื‘ืœ ืขืœ ื”ื ืงื•ื“ื” ื”ื–ืืช ืฉืชื•ื›ื ื™ืช ื›ื‘ืจ ืขื•ื‘ื“ืช ื•ืขื•ืฉื” ืžืฉื”ื• ืขื“ื™ืฃ ืœื”ืกืชื›ืœ ื‘ืชื•ืจ ื”ื–ื“ืžื ื•ืช. ื”ืชื™ืงื•ืŸ ืœื ื—ื™ื™ื‘ ืœืงืจื•ืช ื‘ืื•ืชื• ื™ื•ื ืฉื”ื‘ืขื™ื•ืช ื”ืชื’ืœื•, ืื‘ืœ ื›ืฉื›ื‘ืจ ื™ื•ืฉื‘ื™ื ืœืชืงืŸ ืฉื•ื•ื” ืœื”ืฉืงื™ืข ืขื•ื“ ื›ืžื” ืฉืขื•ืช ื•ืœืกื“ืจ ืืช ื›ืœ ื”ื“ื‘ืจื™ื ืฉื“ื™ืœื’ื ื• ืขืœื™ื”ื ื‘ื’ื™ืจืกื” ื”ืจืืฉื•ื ื” ื•ื”ืžื”ื™ืจื”: 1. ืœื”ืขื‘ื™ืจ ืืช ื”ืงื•ื“ ืœื’ื™ื˜ ืžืกื•ื“ืจ. 2. ืœื”ื•ืกื™ืฃ ื‘ื“ื™ืงื•ืช ืœ flows ื”ื—ืฉื•ื‘ื™ื ืื• ืœืคื—ื•ืช ืœืืœื” ืฉื”ื™ื• ืฉื‘ื•ืจื™ื. 3. ืœื‘ื ื•ืช ืžื ื’ื ื•ืŸ Deploy ืžืกื•ื“ืจ ืฉื™ืฉืชืžืฉ ื‘ CI (ื‘ืžืงื•ื ืœื”ืขืชื™ืง ืงื‘ืฆื™ื ืขื rsync). 4. ืœื”ืขื‘ื™ืจ ื”ื—ื•ืฆื” ืกื•ื“ื•ืช ืœืžืฉืชื ื™ ืกื‘ื™ื‘ื”. ื•ื–ื” ื‘ื“ื™ื•ืง ื”ื™ื” ืฉืœื‘ 2 ื‘ืคื™ืชื•ื— ื”ื‘ื•ื˜, ืฉืื•ืœื™ ื—ืœืงื›ื ืฉืžืชื ืœื‘ ืืœื™ื• ื‘ืคื™ืจืกื•ืžื™ื ื•ื”ืžื—ื™ืงื•ืช ืฉืขืฉื™ืชื™ ื‘ืžื”ืœืš ืืชืžื•ืœ. ื”ืงื•ื“ ื”ืžืขื•ื“ื›ืŸ ืฉืœ ื”ื‘ื•ื˜ ืขืœื” ืœื’ื™ื˜ื”ืื‘ ื•ืืชื ืžื•ื–ืžื ื™ื ืœืงืจื•ื ืื•ืชื• ื›ืืŸ: https://github.com/ynonp/blog-to-telegram ืชื•ืกืคืช ืจืืฉื•ื ื” ืœืงื•ื“ ื”ื™ื ืžื‘ื ื” ื”ืชื™ืงื™ื•ืช, ืขื ืชื™ืงื™ื” ืื—ืช ืœืชื•ื›ื ื™ืช ื•ืชื™ืงื™ื” ืœื‘ื“ื™ืงื•ืช. ืชื•ืกืคืช ืฉื ื™ื” ืœืงื•ื“ ื”ื™ื ื”ืงื•ื‘ืฅ .github/workflows ืฉืžืขืœื” ืžื›ื•ื ื” ืฉืžืชืงื™ื ื” ืืช ื›ืœ ื”ืชืœื•ื™ื•ืช ื•ืžืจื™ืฆื” ืืช ื”ืชื•ื›ื ื™ืช ืคืขื ื‘ื™ื•ื ื‘ืฉืขื” ืฉืžื•ื ื” ื‘ื‘ื•ืงืจ. ืื ื™ ืžืงื•ื•ื” ืฉื”ืžืขื‘ืจ ืœ Github Action ื™ื’ืจื•ื ืœืกืงืจื™ืคื˜ ืœื”ื™ื•ืช ื™ื•ืชืจ ื™ืฆื™ื‘ ื•ืœื ืœื”ื™ืฉื‘ืจ ื’ื ืื ื”ืฉืจืช ืขืžื•ืก ืื• ืฉื•ื“ืจื’. ื–ื” ื” Workflow:
# This workflow will install Python dependencies, run tests and lint with a single version of Python
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions

name: publish-daily-post-to-telegram

on: 
  workflow_dispatch:
  schedule:
    - cron:  "0 8 * * *" 


permissions:
  contents: read

jobs:
  publish:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Set up Python 3.10
      uses: actions/setup-python@v3
      with:
        python-version: "3.10"
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
    - name: run
      env:
        TELEGRAM_TOKEN: ${{ secrets.TELEGRAM_TOKEN }}
      run: |
        python blog_to_telegram/publish_daily_post.py
ื”ืžืขื‘ืจ ืœื’ื™ื˜ื”ืื‘ ื•ืœ Workflow ื’ื ื”ื›ืจื™ื— ืื•ืชื™ ืœื”ื•ืฆื™ื ืืช ื”ืกื•ื“ ืžื”ืงื•ื‘ืฅ ืœืชื•ืš Secret ืฉืœ ื’ื™ื˜ื”ืื‘, ื•ืงื™ื“ื ืื•ืชื™ ืขื•ื“ ืฆืขื“ ื‘ื“ืจืš ืœืงื•ื“ ื˜ื•ื‘ ื™ื•ืชืจ. ื›ืžื•ื‘ืŸ ืฉืฉืœื‘ ืฉื ื™ ื”ื•ื ืœื ืกื•ืฃ ื”ื“ืจืš. ื ืฉืืจ ืขื•ื“: 1. ืœื”ื•ืกื™ืฃ Workflow ืฉื›ืœ ืคืขื ืฉื“ื•ื—ืคื™ื ืงื•ื“ ื—ื“ืฉ ื™ืจื™ืฅ ืื•ื˜ื•ืžื˜ื™ืช ืืช ื›ืœ ื”ื‘ื“ื™ืงื•ืช. 2. ืœื”ื•ืกื™ืฃ ื‘ื“ื™ืงื•ืช (ื›ืจื’ืข ื™ืฉ ืจืง ื‘ื“ื™ืงื•ืช ืœืžื ื’ื ื•ืŸ ืคื™ืฆื•ืœ ื”ื”ื•ื“ืขื•ืช). 3. ืœื”ื•ืกื™ืฃ ืงื•ื‘ืฅ Readme ื•ืชื™ืขื•ื“ ื‘ืชื•ืš ื”ืงื•ื“. ืื‘ืœ ื–ื” ื™ื—ื›ื” ืœื‘ืื’ ื”ื‘ื ืื• ืœ Pull Request ืžื›ื. ืžื” ืฉื™ื‘ื•ื ืงื•ื“ื.

ToCode
1 419
ืชืงืจืื• ืขืœ ื”ื›ืœ ื‘ืคื•ืกื˜ ืžื—ืจ

ToCode
1 419
ืกืœื™ื—ื” ืขืœ ื›ืœ ื”ื—ืคื™ืจื•ืช, ืขืฉื™ืชื™ ื›ืžื” ืชื™ืงื•ื ื™ื ื‘ื‘ื•ื˜

ToCode
1 419
# ืขืœื•ืช ื—ื•ื“ืฉื™ืช ืžืชื›ื ืช ืจื™ื™ืœืก, ื’ื ืื ืžืื•ื“ ืžื•ื›ืฉืจ, ืื‘ืœ ืฉืœื ื ื’ืข ื‘ืจื™ื™ืœืก 5 ืฉื ื™ื, ื™ืชืงืฉื” ืœืžืฆื•ื ื‘ื–ื” ืขื‘ื•ื“ื” ื”ื™ื•ื. ืžืชื›ื ืชืช ื•ื•ื‘, ืืคื™ืœื• ืžืื•ื“ ืžื•ื›ืฉืจืช, ืฉืคืขื ืื—ืจื•ื ื” ืฉื›ืชื‘ื” ืงื•ื“ JavaScript ื”ื™ืชื” ืœืคื ื™ ื—ืžืฉ ืฉื ื™ื ื‘ jQuery, ืชืชืงืฉื” ืœืžืฆื•ื ืขื‘ื•ื“ื” ื”ื™ื•ื. ืื™ืฉ ืื‘ื˜ื—ืช ืžื™ื“ืข ืฉื—ื–ืจ ืžื˜ื™ื•ืœ ื‘ืขื•ืœื ืฉืœ ื—ืžืฉ ืฉื ื™ื, ื”ื•ืœืš ืœื’ืœื•ืช ืฉืœื ืจืง ืฉื”ื•ื ืœื ื–ื•ื›ืจ ื”ืจื‘ื” ืคืจื˜ื™ื ื˜ื›ื ื™ื™ื ืขืœ ื—ื™ืคื•ืฉ ื‘ืขื™ื•ืช ืื‘ื˜ื—ื” ื‘ืžืขืจื›ื•ืช, ื’ื ื”ืžืขืจื›ื•ืช ืขืฆืžืŸ ื”ืฉืชื ื• ื•ืื•ืชื ืคืจื˜ื™ื ื˜ื›ื ื™ื™ื ื›ื‘ืจ ืœื ื™ืขื–ืจื• ืœื•. ื•ืื•ืชื• ื“ื‘ืจ ื‘ื›ืœ ืชื—ื•ื ื˜ื›ื ื•ืœื•ื’ื™ ืฉืื ื™ ื™ื›ื•ืœ ืœื“ืžื™ื™ืŸ: ืžืจื’ืข ืฉื™ืฆืื ื• ืžื”ืžืกืœื•ืœ ื ื›ื ืกื™ื ืœืคืขื•ืœื” ืฉื ื™ ื›ื•ื—ื•ืช ื•ืžืฉืชืคื™ื ื ื’ื“ื ื• ืคืขื•ืœื” - ืžืฆื“ ืื—ื“ ื›ืœ ื™ื•ื ืฉืœื ื ื•ื’ืขื™ื ื‘ืžืฉื”ื• ืื ื—ื ื• ืฉื•ื›ื—ื™ื ืื™ืš ืœืขืฉื•ืช ืืช ื–ื”, ื•ืžืฆื“ ืฉื ื™ ื”ืชืคืชื—ื•ื™ื•ืช ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ืฉื›ืœ ื”ื–ืžืŸ ืงื•ืจื•ืช ื”ื•ืคื›ื•ืช ืืช ื”ื™ื“ืข ืฉืขื•ื“ ื”ื™ื” ืœื ื• ืœืœื ืจืœื•ื•ื ื˜ื™. ืขื‘ื•ืจ ืžืคืชื—ื™ื ืฉืขื‘ืจื• ื”ืกื‘ื” ืœื˜ื›ื ื•ืœื•ื’ื™ื” ืื—ืจืช, ื•ืฉืžืขื“ื™ืคื™ื ืœื ืœืฉื›ื•ื— ื“ื‘ืจื™ื ืฉืื ื—ื ื• ื›ื‘ืจ ื™ื•ื“ืขื™ื, ื›ืžืขื˜ ืชืžื™ื“ ืžืฉืชืœื ืœื”ืฉืงื™ืข ืงืฆืช ื–ืžืŸ ื›ืœ ื™ื•ื ื’ื ื‘ื›ืœื™ื ืฉื”ื ืœื ื”ื›ืœื™ื ื”ืžืจื›ื–ื™ื™ื ืฉืœ ื”ื™ื•ื ื™ื•ื: 1. ืœื›ืชื•ื‘ ืกืงืจื™ืคื˜ื™ื ืงื˜ื ื™ื ื‘ืคื™ื™ืชื•ืŸ ืื• ื‘ bash, ืืคื™ืœื• ืฉืื ื—ื ื• ื›ื•ืชื‘ื™ื ืงื•ื“ ื‘ Java. 2. ืœื”ืžืฉื™ืš ืœืขื‘ื•ื“ ื‘ืœื™ื ื•ืงืก ืขืœ ื”ืœืคื˜ื•ืค, ืืคื™ืœื• ืฉื‘ืžืงื•ื ื”ื—ื“ืฉ ืžื•ืชืจ ืœืขื‘ื•ื“ ื’ื ื‘ Windows. 3. ืœื‘ื ื•ืช ืžืžืฉืงื™ื ืื• ืืคืœื™ืงืฆื™ื•ืช ืงื˜ื ื•ืช ืœื“ื‘ืจื™ื "ืฉื•ืœื™ื™ื" ื›ืžื• ืžืžืฉืง ืฉืžืจืื” ืœืžื™ ื‘ื—ื‘ืจื” ื™ืฉ ื™ื•ื ื”ื•ืœื“ืช ื”ื—ื•ื“ืฉ. 4. ืœื”ืฉืชืชืฃ ื‘ืคืขื™ืœื•ื™ื•ืช ืฉืœ ืงื‘ื•ืฆื•ืช ืื—ืจื•ืช ื‘ืืจื’ื•ืŸ, ืื• ืœื ืกื•ืช ืœืขื–ื•ืจ ืœืื ืฉื™ื ืฉืขื•ื‘ื“ื™ื ืขื›ืฉื™ื• ื‘ืžืฉื”ื• ืฉืืชื ืคืขื ื”ื™ื™ืชื ื˜ื•ื‘ื™ื ื‘ื•. ืื– ื ื›ื•ืŸ ืื ืœืงื—ืชื 5 ืฉื ื™ื ืœื˜ื™ื•ืœ ืžืกื‘ื™ื‘ ืœืขื•ืœื ืื™ืŸ ื˜ืขื ืœื”ืžืฉื™ืš ืœืฉืœื ืืช ื”ืขืœื•ืช ื”ื—ื•ื“ืฉื™ืช ืฉืœ ืฉื™ืžื•ืจ ื”ื™ื“ืข; ืื‘ืœ ืื ืืชื ื›ื‘ืจ ืคื” ื•ืขื“ื™ื™ืŸ ื›ื•ืชื‘ื™ื ืงื•ื“, ืื•ืœื™ ืฉื•ื•ื” ืœืฉื™ื ืืช ื”ืฉืขื” ื‘ื™ื•ื ื›ื“ื™ ืœื”ืฉืื™ืจ ืขื•ื“ ื“ืœืช ืคืชื•ื—ื” ืœื™ื•ื ืกื’ืจื™ืจ.

ToCode
1 419
# ืฉืœื•ืฉ ื“ื•ื’ืžืื•ืช ืœืชื™ืขื•ื“ ื˜ื•ื‘ ืžืคืจื•ื™ืงื˜ื™ ืงื•ื“ ืคืชื•ื— ื”ื‘ืขื™ื” ืขื ืชื™ืขื•ื“ ื”ื™ื ืคืขืจ ื”ื–ืžื ื™ื ื‘ื™ืŸ ื”ืจื’ืข ืฉืžื™ืฉื”ื™ ื›ื•ืชื‘ืช ืื•ืชื• ืœืจื’ืข ืฉืžื™ืฉื”ื™ ืฆืจื™ื›ื” ืื•ืชื•. ื–ื” ื’ื•ืจื ืœืื ืฉื™ื ืœื›ืชื•ื‘ ืชื™ืขื•ื“ ื’ืจื•ืข (ื›ื™ "ืžื™ ื‘ื›ืœืœ ื™ืงืจื ืืช ื–ื”") ื•ืœืื ืฉื™ื ืื—ืจื™ื ืœืขืฉื•ืช ื˜ืขื•ื™ื•ืช ื›ื™ ื“ื‘ืจื™ื ื‘ืกื™ืกื™ื™ื ืœื ื›ืชื•ื‘ื™ื ื‘ืชื™ืขื•ื“. ื›ืžื•ื‘ืŸ ืฉื™ืฉ ื’ื ื™ื•ืฆืื™ื ืžืŸ ื”ื›ืœืœ - ื•ืœื›ืŸ ื‘ืฉื‘ื™ืœ ืœืงื‘ืœ ื”ืฉืจืื” ื”ื ื” ืฉืœื•ืฉ ื“ื•ื’ืžืื•ืช ืœืชื™ืขื•ื“ ืžื•ืฆืœื— ืžืคืจื•ื™ืงื˜ื™ ืงื•ื“ ืคืชื•ื— ื‘ Python ื• JavaScript. ## ืชื™ืขื•ื“ Redux ื”ืคื•ื ืงืฆื™ื” bindActionCreators ืฉืœ ืจื™ื“ืืงืก ื”ื™ื ื“ืจืš ืงืœื” ืœื”ืคื•ืš ืืช ื” Action Creators ืฉืœื ื• ืœืงืœื™ื ื™ื•ืชืจ ืœืฉื™ืžื•ืฉ. ื”ื ื” ืงื•ื“ ื”ืชื™ืขื•ื“ ืฉืœื” ืžืชื•ืš ื”ืงื•ื‘ืฅ src/bindActionCreators.ts ื‘ืคืจื•ื™ืงื˜:

/**
 * Turns an object whose values are action creators, into an object with the
 * same keys, but with every function wrapped into a `dispatch` call so they
 * may be invoked directly. This is just a convenience method, as you can call
 * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.
 *
 * For convenience, you can also pass an action creator as the first argument,
 * and get a dispatch wrapped function in return.
 *
 * @param actionCreators An object whose values are action
 * creator functions. One handy way to obtain it is to use ES6 `import * as`
 * syntax. You may also pass a single function.
 *
 * @param dispatch The `dispatch` function available on your Redux
 * store.
 *
 * @returns The object mimicking the original object, but with
 * every action creator wrapped into the `dispatch` call. If you passed a
 * function as `actionCreators`, the return value will also be a single
 * function.
 */
export default function bindActionCreators<A, C extends ActionCreator<A>>(
ืงื™ืฉื•ืจ ืœืงื•ื“ ื”ืžืงื•ืจื™: https://github.com/reduxjs/redux/blob/master/src/bindActionCreators.ts#L18 ื”ืชื™ืขื•ื“ ืžืกืคืจ ื‘ื“ื™ื•ืง ืžื” ื”ืคื•ื ืงืฆื™ื” ืขื•ืฉื”, ืื™ื–ื” ืคืจืžื˜ืจื™ื ื”ื™ื ืžืงื‘ืœืช ื•ืžื” ื”ื™ื ืžื—ื–ื™ืจื”, ื›ื•ืœืœ ืขืœ ื”ืืคืฉืจื•ืช ืœื”ืขื‘ื™ืจ ืจืง ืคื•ื ืงืฆื™ื” ื‘ื•ื“ื“ืช ื‘ืชื•ืจ ืคืจืžื˜ืจ. ื‘ื”ืกื‘ืจ ืขืœ ื”ืคืจืžื˜ืจ ื”ืจืืฉื•ืŸ ื”ื ืืคื™ืœื• ืžืฆื™ืขื™ื ื˜ื™ืค ืœืฉื™ืžื•ืฉ ื™ืขื™ืœ ื‘ืคื•ื ืงืฆื™ื” ื›ืฉืžืกื‘ื™ืจื™ื ืžืื™ืคื” ืœืงื‘ืœ ืืช ื”ืื•ื‘ื™ืงื˜ ืฉื”ื™ื ืฆืจื™ื›ื” ืœืงื‘ืœ ื›ืคืจืžื˜ืจ. ## ืชื™ืขื•ื“ Requests ื”ืžื•ื“ื•ืœ requests ื‘ืคื™ื™ืชื•ืŸ ืžืกืคืง ืžืžืฉืง ื ื•ื— ืœืคืขื•ืœื•ืช ืจืฉืช ื•ืžื˜ืคืœ ื‘ืื™ื ืกื•ืฃ ืืชื’ืจื™ื ืฉืงืฉื•ืจื™ื ื‘ืชืงืฉื•ืจืช ืขื ืืชืจื™ื - ืœื“ื•ื’ืžื” ื ื™ื”ื•ืœ ืขื•ื’ื™ื•ืช, ื ื™ื”ื•ืœ ืžืกืคืจ ื‘ืงืฉื•ืช ื‘ืจืฆืฃ, ืฉื™ืชื•ืฃ ื”ื’ื“ืจื•ืช ื‘ื™ืŸ ื‘ืงืฉื•ืช ืจืฉืช ื•ืขื•ื“. ื”ื ื” ื”ืคื•ื ืงืฆื™ื” merge_setting ืžืชื•ืš ื”ืงื•ื‘ืฅ requests/sessions.py:
def merge_setting(request_setting, session_setting, dict_class=OrderedDict):
    """Determines appropriate setting for a given request, taking into account
    the explicit setting on that request, and the setting in the session. If a
    setting is a dictionary, they will be merged together using `dict_class`
    """
ื’ื ื‘ืœื™ ืœืงืจื•ื ืืช ื”ืงื•ื“ ืื ื™ ืžื‘ื™ืŸ ืฉื”ืคื•ื ืงืฆื™ื” ืฆืจื™ื›ื” ืœืฉืœื‘ ืžืคืชื—ื•ืช ื”ืฉืžื•ืจื™ื ื‘ืฉื ื™ ืžื‘ื ื™ ื ืชื•ื ื™ื ืื•ืชื ื”ื™ื ืžืงื‘ืœืช ื›ืคืจืžื˜ืจื™ื, ื•ืฉื”ื™ื ืžืืคืฉืจืช ืœื™ ืœืฉืœื•ื˜ ื‘ืžื ื’ื ื•ืŸ ื”ืฉื™ืœื•ื‘ ืื ื™ืฉ ืงื•ื ืคืœื™ืงื˜ ื‘ื™ืŸ ื”ืฉื ื™ื™ื. ืื•ืชื” ืคื•ื ืงืฆื™ื” ื›ื•ืœืœืช ื’ื ื”ืขืจื” ื—ืฉื•ื‘ื” ื‘ืชื•ืš ื”ืงื•ื“:
    # Remove keys that are set to None. Extract keys first to avoid altering
    # the dictionary during iteration.
    none_keys = [k for (k, v) in merged_setting.items() if v is None]
    for key in none_keys:
        del merged_setting[key]
ืงื™ืฉื•ืจ ืœืงื•ื“: https://github.com/psf/requests/blob/main/requests/sessions.py. ื›ืฉืงื•ืจืื™ื ืืช ื”ืงื•ื“ ืืคืฉืจ ืœืชื”ื•ืช ืœืžื” ืฆืจื™ืš ืฉืชื™ ืœื•ืœืื•ืช ื‘ืฉื‘ื™ืœ ืœืžื—ื•ืง ืžืคืชื—ื•ืช ืžื”ืžื™ืœื•ืŸ - ื•ื‘ืฉื‘ื™ืœ ื–ื” ื‘ื“ื™ื•ืง ื”ื”ืขืจื” ืžืขืœ ื”ืœื•ืœืื” ืžืกื‘ื™ืจื” ืœื ื• ืฉื”ืžื˜ืจื” ืฉืœ ื”ื‘ืœืื’ืŸ ื”ื™ื ืœืžื ื•ืข ืžืฆื‘ ืฉืื ื—ื ื• ืžืฉื ื™ื ืžื™ืœื•ืŸ ืชื•ืš ื›ื“ื™ ืฉืจืฆื™ื ืขืœื™ื• ื‘ืœื•ืœืื”. ## ืชื™ืขื•ื“ lodash ื•ื”ื ื” ื“ื•ื’ืžื” ืื—ืจื•ื ื” ืžืกืคืจื™ื™ืช lodash, ืฉืงืจื™ืื” ื‘ืชื™ืขื•ื“ ืฉืœื” ื”ื™ื ืชืžื™ื“ ื—ื•ื•ื™ื” ืžืฉืžื—ืช:
/**
 * Creates an object composed of keys generated from the results of running
 * each element of `collection` thru `iteratee`. The corresponding value of
 * each key is the number of times the key was returned by `iteratee`. The
 * iteratee is invoked with one argument: (value).
 *
 * @since 0.5.0
 * @category Collection
 * @param {Array|Object} collection The collection to iterate over.

ToCode
1 419
``` * @param {Function} iteratee The iteratee to transform keys. * @returns {Object} Returns the composed aggregate object. * @example * * const users = [ * { 'user': 'barney', 'active': true }, * { 'user': 'betty', 'active': true }, * { 'user': 'fred', 'active': false } * ] * * countBy(users, value => value.active); * // => { 'true': 2, 'false': 1 } */ function countBy(collection, iteratee) { ``` ืคื” ืœื ืจืง ืฉืื ื—ื ื• ืžืงื‘ืœื™ื ืชื™ืื•ืจ ืฉืœ ืžื” ื”ืคื•ื ืงืฆื™ื” ืขื•ืฉื”, ืืœื ื’ื ืืช ืกื•ื’ ื”ืื•ื‘ื™ืงื˜ ืฉืžื•ืชืจ ืœื”ืขื‘ื™ืจ ืœื›ืœ ืคืจืžื˜ืจ ืฉืœ ื”ืคื•ื ืงืฆื™ื” ื•ื“ื•ื’ืžืช ื”ืคืขืœื” ืขื ืคื™ืจื•ื˜ ืขืจืš ื”ื—ื–ืจื”. ืื—ืจื™ ืงืจื™ืื” ืฉืœ ืชื™ืขื•ื“ ื›ื–ื” ื‘ืจื•ืจ ืœื’ืžืจื™ ืžื” ื”ืืคืฉืจื•ื™ื•ืช ืฉืœื™ ืœืขื‘ื•ื“ื” ืขื ื”ืคื•ื ืงืฆื™ื”. ืชื™ืขื•ื“ ื˜ื•ื‘ ืื•ืœื™ ืœื ืžื—ืœื™ืฃ ืงื•ื“ ื˜ื•ื‘, ืื‘ืœ ื”ื•ื ื‘ื”ื—ืœื˜ ืขื•ื–ืจ ืœืื ืฉื™ื ืื—ืจื™ื ืœืขื‘ื•ื“ ืขื ื”ืงื•ื“ ื•ืœื”ื‘ื™ืŸ ืื•ืชื• ื˜ื•ื‘ ื™ื•ืชืจ. ื”ืฉืงืขื” ื‘ืชื™ืขื•ื“, ื›ืžื• ื”ืฉืงืขื” ื‘ืฉื™ืคื•ืจ ื‘ื™ืฆื•ืขื™ื, ืื‘ื˜ื—ื”, ืžืžืฉืง ืžืฉืชืžืฉ ื•ืชื”ืœื™ื›ื™ ืขื‘ื•ื“ื” ืžืชืงื“ืžื™ื, ืœื ื ืจืื™ืช ืžืฉืชืœืžืช ื‘ืื•ืชื• ืจื’ืข ืื‘ืœ ืชื‘ื˜ื™ื— ืœื›ื ืงื•ื“ ืฉื™ื”ื™ื” ืงืœ ืœืชื—ื–ืง ื•ืœืฉืคืจ ืื•ืชื•.

ToCode
1 419
# ืฉืœื•ืฉ ื“ื•ื’ืžืื•ืช ืœืชื™ืขื•ื“ ื˜ื•ื‘ ืžืคืจื•ื™ืงื˜ื™ ืงื•ื“ ืคืชื•ื— ื”ื‘ืขื™ื” ืขื ืชื™ืขื•ื“ ื”ื™ื ืคืขืจ ื”ื–ืžื ื™ื ื‘ื™ืŸ ื”ืจื’ืข ืฉืžื™ืฉื”ื™ ื›ื•ืชื‘ืช ืื•ืชื• ืœืจื’ืข ืฉืžื™ืฉื”ื™ ืฆืจื™ื›ื” ืื•ืชื•. ื–ื” ื’ื•ืจื ืœืื ืฉื™ื ืœื›ืชื•ื‘ ืชื™ืขื•ื“ ื’ืจื•ืข (ื›ื™ "ืžื™ ื‘ื›ืœืœ ื™ืงืจื ืืช ื–ื”") ื•ืœืื ืฉื™ื ืื—ืจื™ื ืœืขืฉื•ืช ื˜ืขื•ื™ื•ืช ื›ื™ ื“ื‘ืจื™ื ื‘ืกื™ืกื™ื™ื ืœื ื›ืชื•ื‘ื™ื ื‘ืชื™ืขื•ื“. ื›ืžื•ื‘ืŸ ืฉื™ืฉ ื’ื ื™ื•ืฆืื™ื ืžืŸ ื”ื›ืœืœ - ื•ืœื›ืŸ ื‘ืฉื‘ื™ืœ ืœืงื‘ืœ ื”ืฉืจืื” ื”ื ื” ืฉืœื•ืฉ ื“ื•ื’ืžืื•ืช ืœืชื™ืขื•ื“ ืžื•ืฆืœื— ืžืคืจื•ื™ืงื˜ื™ ืงื•ื“ ืคืชื•ื— ื‘ Python ื• JavaScript. ## ืชื™ืขื•ื“ Redux ื”ืคื•ื ืงืฆื™ื” `bindActionCreators` ืฉืœ ืจื™ื“ืืงืก ื”ื™ื ื“ืจืš ืงืœื” ืœื”ืคื•ืš ืืช ื” Action Creators ืฉืœื ื• ืœืงืœื™ื ื™ื•ืชืจ ืœืฉื™ืžื•ืฉ. ื”ื ื” ืงื•ื“ ื”ืชื™ืขื•ื“ ืฉืœื” ืžืชื•ืš ื”ืงื•ื‘ืฅ `src/bindActionCreators.ts` ื‘ืคืจื•ื™ืงื˜: ```language-javascript /** * Turns an object whose values are action creators, into an object with the * same keys, but with every function wrapped into a `dispatch` call so they * may be invoked directly. This is just a convenience method, as you can call * `store.dispatch(MyActionCreators.doSomething())` yourself just fine. * * For convenience, you can also pass an action creator as the first argument, * and get a dispatch wrapped function in return. * * @param actionCreators An object whose values are action * creator functions. One handy way to obtain it is to use ES6 `import * as` * syntax. You may also pass a single function. * * @param dispatch The `dispatch` function available on your Redux * store. * * @returns The object mimicking the original object, but with * every action creator wrapped into the `dispatch` call. If you passed a * function as `actionCreators`, the return value will also be a single * function. */ export default function bindActionCreators<A, C extends ActionCreator<A>>( ``` ืงื™ืฉื•ืจ ืœืงื•ื“ ื”ืžืงื•ืจื™: [https://github.com/reduxjs/redux/blob/master/src/bindActionCreators.ts#L18](https://github.com/reduxjs/redux/blob/master/src/bindActionCreators.ts#L18) ื”ืชื™ืขื•ื“ ืžืกืคืจ ื‘ื“ื™ื•ืง ืžื” ื”ืคื•ื ืงืฆื™ื” ืขื•ืฉื”, ืื™ื–ื” ืคืจืžื˜ืจื™ื ื”ื™ื ืžืงื‘ืœืช ื•ืžื” ื”ื™ื ืžื—ื–ื™ืจื”, ื›ื•ืœืœ ืขืœ ื”ืืคืฉืจื•ืช ืœื”ืขื‘ื™ืจ ืจืง ืคื•ื ืงืฆื™ื” ื‘ื•ื“ื“ืช ื‘ืชื•ืจ ืคืจืžื˜ืจ. ื‘ื”ืกื‘ืจ ืขืœ ื”ืคืจืžื˜ืจ ื”ืจืืฉื•ืŸ ื”ื ืืคื™ืœื• ืžืฆื™ืขื™ื ื˜ื™ืค ืœืฉื™ืžื•ืฉ ื™ืขื™ืœ ื‘ืคื•ื ืงืฆื™ื” ื›ืฉืžืกื‘ื™ืจื™ื ืžืื™ืคื” ืœืงื‘ืœ ืืช ื”ืื•ื‘ื™ืงื˜ ืฉื”ื™ื ืฆืจื™ื›ื” ืœืงื‘ืœ ื›ืคืจืžื˜ืจ. ## ืชื™ืขื•ื“ Requests ื”ืžื•ื“ื•ืœ requests ื‘ืคื™ื™ืชื•ืŸ ืžืกืคืง ืžืžืฉืง ื ื•ื— ืœืคืขื•ืœื•ืช ืจืฉืช ื•ืžื˜ืคืœ ื‘ืื™ื ืกื•ืฃ ืืชื’ืจื™ื ืฉืงืฉื•ืจื™ื ื‘ืชืงืฉื•ืจืช ืขื ืืชืจื™ื - ืœื“ื•ื’ืžื” ื ื™ื”ื•ืœ ืขื•ื’ื™ื•ืช, ื ื™ื”ื•ืœ ืžืกืคืจ ื‘ืงืฉื•ืช ื‘ืจืฆืฃ, ืฉื™ืชื•ืฃ ื”ื’ื“ืจื•ืช ื‘ื™ืŸ ื‘ืงืฉื•ืช ืจืฉืช ื•ืขื•ื“. ื”ื ื” ื”ืคื•ื ืงืฆื™ื” `merge_setting` ืžืชื•ืš ื”ืงื•ื‘ืฅ `requests/sessions.py`: ```language-python def merge_setting(request_setting, session_setting, dict_class=OrderedDict): """Determines appropriate setting for a given request, taking into account the explicit setting on that request, and the setting in the session. If a setting is a dictionary, they will be merged together using `dict_class` """ ``` ื’ื ื‘ืœื™ ืœืงืจื•ื ืืช ื”ืงื•ื“ ืื ื™ ืžื‘ื™ืŸ ืฉื”ืคื•ื ืงืฆื™ื” ืฆืจื™ื›ื” ืœืฉืœื‘ ืžืคืชื—ื•ืช ื”ืฉืžื•ืจื™ื ื‘ืฉื ื™ ืžื‘ื ื™ ื ืชื•ื ื™ื ืื•ืชื ื”ื™ื ืžืงื‘ืœืช ื›ืคืจืžื˜ืจื™ื, ื•ืฉื”ื™ื ืžืืคืฉืจืช ืœื™ ืœืฉืœื•ื˜ ื‘ืžื ื’ื ื•ืŸ ื”ืฉื™ืœื•ื‘ ืื ื™ืฉ ืงื•ื ืคืœื™ืงื˜ ื‘ื™ืŸ ื”ืฉื ื™ื™ื. ืื•ืชื” ืคื•ื ืงืฆื™ื” ื›ื•ืœืœืช ื’ื ื”ืขืจื” ื—ืฉื•ื‘ื” ื‘ืชื•ืš ื”ืงื•ื“: ```language-python # Remove keys that are set to None. Extract keys first to avoid altering # the dictionary during iteration. none_keys = [k for (k, v) in merged_setting.items() if v is None] for key in none_keys: del merged_setting[key] ``` ืงื™ืฉื•ืจ ืœืงื•ื“: [https://github.com/psf/requests/blob/main/requests/sessions.py](https://github.com/psf/requests/blob/main/requests/sessions.py). ื›ืฉืงื•ืจืื™ื ืืช ื”ืงื•ื“ ืืคืฉืจ ืœืชื”ื•ืช ืœืžื” ืฆืจื™ืš ืฉืชื™ ืœื•ืœืื•ืช ื‘ืฉื‘ื™ืœ ืœืžื—ื•ืง ืžืคืชื—ื•ืช ืžื”ืžื™ืœื•ืŸ - ื•ื‘ืฉื‘ื™ืœ ื–ื” ื‘ื“ื™ื•ืง ื”ื”ืขืจื” ืžืขืœ ื”ืœื•ืœืื” ืžืกื‘ื™ืจื” ืœื ื• ืฉื”ืžื˜ืจื” ืฉืœ ื”ื‘ืœืื’ืŸ ื”ื™ื ืœืžื ื•ืข ืžืฆื‘ ืฉืื ื—ื ื• ืžืฉื ื™ื ืžื™ืœื•ืŸ ืชื•ืš ื›ื“ื™ ืฉืจืฆื™ื ืขืœื™ื• ื‘ืœื•ืœืื”. ## ืชื™ืขื•ื“ lodash ื•ื”ื ื” ื“ื•ื’ืžื” ืื—ืจื•ื ื” ืžืกืคืจื™ื™ืช lodash, ืฉืงืจื™ืื” ื‘ืชื™ืขื•ื“ ืฉืœื” ื”ื™ื ืชืžื™ื“ ื—ื•ื•ื™ื” ืžืฉืžื—ืช: ```language-javascript /** * Creates an object composed of keys generated from the results of running * each element of `collection` thru `iteratee`. The corresponding value of * each key is the number of times the key was returned by `iteratee`. The * iteratee is invoked with one argument: (value). * * @since 0.5.0 * @category Collection * @param {Array|Object} collection The collection to iterate over. ```

ToCode
1 419
# ืขืœื•ืช ื—ื•ื“ืฉื™ืช ืžืชื›ื ืช ืจื™ื™ืœืก, ื’ื ืื ืžืื•ื“ ืžื•ื›ืฉืจ, ืื‘ืœ ืฉืœื ื ื’ืข ื‘ืจื™ื™ืœืก 5 ืฉื ื™ื, ื™ืชืงืฉื” ืœืžืฆื•ื ื‘ื–ื” ืขื‘ื•ื“ื” ื”ื™ื•ื. ืžืชื›ื ืชืช ื•ื•ื‘, ืืคื™ืœื• ืžืื•ื“ ืžื•ื›ืฉืจืช, ืฉืคืขื ืื—ืจื•ื ื” ืฉื›ืชื‘ื” ืงื•ื“ JavaScript ื”ื™ืชื” ืœืคื ื™ ื—ืžืฉ ืฉื ื™ื ื‘ jQuery, ืชืชืงืฉื” ืœืžืฆื•ื ืขื‘ื•ื“ื” ื”ื™ื•ื. ืื™ืฉ ืื‘ื˜ื—ืช ืžื™ื“ืข ืฉื—ื–ืจ ืžื˜ื™ื•ืœ ื‘ืขื•ืœื ืฉืœ ื—ืžืฉ ืฉื ื™ื, ื”ื•ืœืš ืœื’ืœื•ืช ืฉืœื ืจืง ืฉื”ื•ื ืœื ื–ื•ื›ืจ ื”ืจื‘ื” ืคืจื˜ื™ื ื˜ื›ื ื™ื™ื ืขืœ ื—ื™ืคื•ืฉ ื‘ืขื™ื•ืช ืื‘ื˜ื—ื” ื‘ืžืขืจื›ื•ืช, ื’ื ื”ืžืขืจื›ื•ืช ืขืฆืžืŸ ื”ืฉืชื ื• ื•ืื•ืชื ืคืจื˜ื™ื ื˜ื›ื ื™ื™ื ื›ื‘ืจ ืœื ื™ืขื–ืจื• ืœื•. ื•ืื•ืชื• ื“ื‘ืจ ื‘ื›ืœ ืชื—ื•ื ื˜ื›ื ื•ืœื•ื’ื™ ืฉืื ื™ ื™ื›ื•ืœ ืœื“ืžื™ื™ืŸ: ืžืจื’ืข ืฉื™ืฆืื ื• ืžื”ืžืกืœื•ืœ ื ื›ื ืกื™ื ืœืคืขื•ืœื” ืฉื ื™ ื›ื•ื—ื•ืช ื•ืžืฉืชืคื™ื ื ื’ื“ื ื• ืคืขื•ืœื” - ืžืฆื“ ืื—ื“ ื›ืœ ื™ื•ื ืฉืœื ื ื•ื’ืขื™ื ื‘ืžืฉื”ื• ืื ื—ื ื• ืฉื•ื›ื—ื™ื ืื™ืš ืœืขืฉื•ืช ืืช ื–ื”, ื•ืžืฆื“ ืฉื ื™ ื”ืชืคืชื—ื•ื™ื•ืช ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ืฉื›ืœ ื”ื–ืžืŸ ืงื•ืจื•ืช ื”ื•ืคื›ื•ืช ืืช ื”ื™ื“ืข ืฉืขื•ื“ ื”ื™ื” ืœื ื• ืœืœื ืจืœื•ื•ื ื˜ื™. ืขื‘ื•ืจ ืžืคืชื—ื™ื ืฉืขื‘ืจื• ื”ืกื‘ื” ืœื˜ื›ื ื•ืœื•ื’ื™ื” ืื—ืจืช, ื•ืฉืžืขื“ื™ืคื™ื ืœื ืœืฉื›ื•ื— ื“ื‘ืจื™ื ืฉืื ื—ื ื• ื›ื‘ืจ ื™ื•ื“ืขื™ื, ื›ืžืขื˜ ืชืžื™ื“ ืžืฉืชืœื ืœื”ืฉืงื™ืข ืงืฆืช ื–ืžืŸ ื›ืœ ื™ื•ื ื’ื ื‘ื›ืœื™ื ืฉื”ื ืœื ื”ื›ืœื™ื ื”ืžืจื›ื–ื™ื™ื ืฉืœ ื”ื™ื•ื ื™ื•ื: 1. ืœื›ืชื•ื‘ ืกืงืจื™ืคื˜ื™ื ืงื˜ื ื™ื ื‘ืคื™ื™ืชื•ืŸ ืื• ื‘ bash, ืืคื™ืœื• ืฉืื ื—ื ื• ื›ื•ืชื‘ื™ื ืงื•ื“ ื‘ Java. 2. ืœื”ืžืฉื™ืš ืœืขื‘ื•ื“ ื‘ืœื™ื ื•ืงืก ืขืœ ื”ืœืคื˜ื•ืค, ืืคื™ืœื• ืฉื‘ืžืงื•ื ื”ื—ื“ืฉ ืžื•ืชืจ ืœืขื‘ื•ื“ ื’ื ื‘ Windows. 3. ืœื‘ื ื•ืช ืžืžืฉืงื™ื ืื• ืืคืœื™ืงืฆื™ื•ืช ืงื˜ื ื•ืช ืœื“ื‘ืจื™ื "ืฉื•ืœื™ื™ื" ื›ืžื• ืžืžืฉืง ืฉืžืจืื” ืœืžื™ ื‘ื—ื‘ืจื” ื™ืฉ ื™ื•ื ื”ื•ืœื“ืช ื”ื—ื•ื“ืฉ. 4. ืœื”ืฉืชืชืฃ ื‘ืคืขื™ืœื•ื™ื•ืช ืฉืœ ืงื‘ื•ืฆื•ืช ืื—ืจื•ืช ื‘ืืจื’ื•ืŸ, ืื• ืœื ืกื•ืช ืœืขื–ื•ืจ ืœืื ืฉื™ื ืฉืขื•ื‘ื“ื™ื ืขื›ืฉื™ื• ื‘ืžืฉื”ื• ืฉืืชื ืคืขื ื”ื™ื™ืชื ื˜ื•ื‘ื™ื ื‘ื•. ืื– ื ื›ื•ืŸ ืื ืœืงื—ืชื 5 ืฉื ื™ื ืœื˜ื™ื•ืœ ืžืกื‘ื™ื‘ ืœืขื•ืœื ืื™ืŸ ื˜ืขื ืœื”ืžืฉื™ืš ืœืฉืœื ืืช ื”ืขืœื•ืช ื”ื—ื•ื“ืฉื™ืช ืฉืœ ืฉื™ืžื•ืจ ื”ื™ื“ืข; ืื‘ืœ ืื ืืชื ื›ื‘ืจ ืคื” ื•ืขื“ื™ื™ืŸ ื›ื•ืชื‘ื™ื ืงื•ื“, ืื•ืœื™ ืฉื•ื•ื” ืœืฉื™ื ืืช ื”ืฉืขื” ื‘ื™ื•ื ื›ื“ื™ ืœื”ืฉืื™ืจ ืขื•ื“ ื“ืœืช ืคืชื•ื—ื” ืœื™ื•ื ืกื’ืจื™ืจ

ToCode
1 419
ื™ื”ื™ื• 644 ืœืžืฉืชืžืฉ ื•ืงื‘ื•ืฆื” root. ืžื‘ื˜ ื‘ืชื™ืงื™ื” ืžืจืื” ืœื™ ืืช ื”ืœื•ื’ื™ื ื•ื”ืจื•ื˜ืฆื™ื•ืช: ```language-sh # ls -l /var/log/dpkg.log* -rw-r--r-- 1 root root 7010 Aug 3 06:14 /var/log/dpkg.log -rw-r--r-- 1 root root 50427 Jul 30 13:44 /var/log/dpkg.log.1 -rw-r--r-- 1 root root 5053 Jun 30 08:36 /var/log/dpkg.log.2.gz -rw-r--r-- 1 root root 4512 May 28 06:14 /var/log/dpkg.log.3.gz -rw-r--r-- 1 root root 8898 Apr 30 06:05 /var/log/dpkg.log.4.gz -rw-r--r-- 1 root root 979 Mar 2 15:38 /var/log/dpkg.log.5.gz -rw-r--r-- 1 root root 5376 Feb 25 10:52 /var/log/dpkg.log.6.gz -rw-r--r-- 1 root root 4158 Jan 28 2022 /var/log/dpkg.log.7.gz -rw-r--r-- 1 root root 2966 Dec 22 2021 /var/log/dpkg.log.8.gz -rw-r--r-- 1 root root 55022 Nov 28 2021 /var/log/dpkg.log.9.gz ``` ืื ื—ื ื• ืจื•ืื™ื ืื™ืš ื”ืœื•ื’ ื”ืชืงื“ื ื›ืœ ื—ื•ื“ืฉ, ืืช ื”ืœื•ื’ื™ื ื”ืžื›ื•ื•ืฆื™ื ื•ืืช ื”ืœื•ื’ ืขื ืกื™ื•ืžืช `.1` ืฉืขื“ื™ื™ืŸ ืœื ื›ื•ื•ืฅ. ## ื™ืฆื™ืจืช ืงื•ื ืคื™ื’ื•ืจืฆื™ื” ืœืœื•ื’ื™ื ืฉืœื™ ื‘ืฉื‘ื™ืœ ืœื”ื•ืกื™ืฃ ืชื•ื›ื ื™ืช ืฉืœื™ ืœื”ื’ื“ืจื•ืช logrotate ืื ื™ ื‘ืกืš ื”ื›ืœ ืฆืจื™ืš ืœื”ื•ืกื™ืฃ ืขื•ื“ ืงื•ื‘ืฅ ืœืชื™ืงื™ื™ืช ื” include. ืœื“ื•ื’ืžื” ื ื ื™ื— ืฉื™ืฉ ืœื™ ืฉืจืช ื•ื•ื‘ ืฉืžื’ื™ืฉ ืืคืœื™ืงืฆื™ื” ื‘ืฉื `mysite` ื•ื›ื•ืชื‘ ื”ืจื‘ื” ืœื•ื’ื™ื ื‘ื›ืœ ืžื™ื ื™ ืฉืžื•ืช ืœืชื™ืงื™ื™ืช `/var/log/mysite/`. ืื ื™ ื™ื›ื•ืœ ืœื”ื•ืกื™ืฃ ืืช ื”ืงื•ื‘ืฅ `/etc/logrotate.d/mysite` ื•ื‘ืชื•ื›ื• ืœื›ืชื•ื‘ ืืช ื”ืชื•ื›ืŸ ื”ื‘ื: ```language-sh /var/log/your-app/*.log { daily missingok rotate 14 compress notifempty create 0640 www-data www-data sharedscripts postrotate systemctl reload your-app endscript } ``` ื ืชืจื’ื: 1. ืจื•ื˜ืฆื™ื™ืช ืœื•ื’ื™ื ืžื‘ื•ืฆืขืช ื›ืœ ื™ื•ื, ื•ืœื•ื’ื™ื ื ืฉืžืจื™ื 14 ืจื•ื˜ืฆื™ื•ืช, ื›ืœื•ืžืจ ืฉื‘ื•ืขื™ื™ื. 2. ืœื•ื’ื™ื ื™ืฉื ื™ื ืžื›ื•ื•ืฆื™ื. 3. ืœื ื ื•ืจื ืื ืื™ืŸ ืœื•ื’ื™ื. 4. ืœื ื ื•ื’ืขื™ื ื‘ืงื‘ืฆื™ื ืจื™ืงื™ื. 5. ื”ืœื•ื’ื™ื ื ื•ืฆืจื™ื ืชื—ืช ืžืฉืชืžืฉ www-data. 6. ื”ืคืงื•ื“ื•ืช `postrotate` ื• `sharedscripts` ืื•ืžืจื•ืช ืฉืื—ืจื™ ืฉืขืฉื™ื ื•ื™ ืจื•ื˜ืฆื™ื” ืœื›ืœ ื”ืœื•ื’ื™ื ื ืจื™ืฅ ืืช ื”ืคืงื•ื“ื” ืฉื›ืชื•ื‘ื” ื‘ postrotate, ื›ืœื•ืžืจ ื˜ืขื™ื ื” ืžื—ื“ืฉ ืฉืœ ื”ืฉืจืช. ื–ื” ื ื•ืขื“ ืœื”ืชืžื•ื“ื“ ืขื ื–ื” ืฉืฉืจืช ืžืžืฉื™ืš ืœื›ืชื•ื‘ ืœืงื•ื‘ืฅ ืœื•ื’ ืืคื™ืœื• ืื—ืจื™ ืฉื ืžื—ืง ื›ื™ ื”ื•ื ื”ื—ื–ื™ืง ืืช ื”ืงื•ื‘ืฅ ืคืชื•ื—. ื”ืกืงืจื™ืคื˜ ืžืกืชื™ื™ื ื‘ืคืงื•ื“ื” `endscript`. ืจื•ืฆื™ื ืœืœืžื•ื“ ืขื•ื“ ืขืœ logrotate ื•ืืคืฉืจื•ื™ื•ืช ื”ืฉื™ืžื•ืฉ ื‘ื•? ืฉื•ื•ื” ืœื‘ืงืจ ื‘ื“ืฃ ื”ืขื–ืจื” ืฉืœ ื“ื™ื’ื™ื˜ืœ ืื•ืฉืŸ ืขืœ ื”ื›ืœื™ (ืžืฉื ื’ื ืœืงื—ืชื™ ืืช ื”ื“ื•ื’ืžื” ื”ืื—ืจื•ื ื” ื‘ืคื•ืกื˜): [https://www.digitalocean.com/community/tutorials/how-to-manage-logfiles-with-logrotate-on-ubuntu-20-04](https://www.digitalocean.com/community/tutorials/how-to-manage-logfiles-with-logrotate-on-ubuntu-20-04) ื•ื›ืžื•ื‘ืŸ ื‘ man page ืฉืœ logrotate ืขืฆืžื” ื‘ืงื™ืฉื•ืจ: [https://www.man7.org/linux/man-pages/man8/logrotate.8.html](https://www.man7.org/linux/man-pages/man8/logrotate.8.html

ToCode
1 419
# ืžื“ืจื™ืš logrotate ืœื•ื’ ืจื•ื˜ื™ื™ื˜ ื”ื•ื ื›ืœื™ ืื•ื˜ื•ืžื˜ื™ ืฉืžื›ื•ื•ืฅ ืงื‘ืฆื™ ืœื•ื’ ื™ืฉื ื™ื ื•ืžื•ื—ืง ืื•ืชื ื›ืฉื”ื ืžืžืฉ ื™ืฉื ื™ื. ืœื•ื’ ืจื•ื˜ื™ื™ื˜ ื”ื•ื ืื—ื“ ื”ื›ืœื™ื ื”ื—ืฉื•ื‘ื™ื ื‘ืขื‘ื•ื“ื” ืขืœ ืžื›ื•ื ื•ืช ืœื™ื ื•ืงืก ื›ื™ ื‘ืœืขื“ื™ื• ืงื‘ืฆื™ ื”ืœื•ื’ ื™ื›ื•ืœื™ื ืœื”ื’ื™ืข ืœื ืคื— ืขืฆื•ื ื•ืœืžืœื ืืช ื›ืœ ื”ืฉืจืช. ื‘ืžื“ืจื™ืš ื–ื” ืืกื‘ื™ืจ ืื™ืš ื”ื•ื ืขื•ื‘ื“ ื•ืื™ืš ืœื”ื•ืกื™ืฃ ืงื‘ืฆื™ื ืฉืœื›ื ืœื ื™ืงื•ื™ ื‘ืืžืฆืขื•ืช logrotate. ## ื”ืชืงื ื” ื•ื‘ื“ื™ืงืช ืกื˜ื˜ื•ืก ืžืฉื•ืจืช ื”ืคืงื•ื“ื”, ืืคื™ืœื• ื‘ืชื•ืจ ืžืฉืชืžืฉ ืจื’ื™ืœ, ืืคืฉืจ ืœื”ืคืขื™ืœ: ```language-sh $ logrotate --version ``` ื›ื“ื™ ืœืจืื•ืช ืื ื”ื›ืœื™ ืžื•ืชืงืŸ ืืฆืœื›ื (ืžื•ืชืงืŸ ื‘ Ubuntu ืื•ื˜ื•ืžื˜ื™ืช, ืื– ื›ื ืจืื” ืฉื›ืŸ). ืื ืœื ืžื•ืชืงืŸ ืืคืฉืจ ืœื”ืชืงื™ืŸ ืื•ืชื• ืขื: ```language-sh $ sudo apt install logrotate ``` ืื ื™ ืžืฉืชืžืฉ ื‘ื’ื™ืจืกื” 3.14.0. ื‘ืฉื‘ื™ืœ ืœืขื‘ื•ื“ logrotate ืฆืจื™ืš ืœืงื‘ืœ ืงื•ื‘ืฅ ื”ื’ื“ืจื•ืช. ื”ืคืขืœื” ืฉืœื• ื‘ืœื™ ืงื•ื‘ืฅ ื”ื’ื“ืจื•ืช ืžืฆื™ื’ื” ืคื™ืกืงืช ืขื–ืจื” ืงืฆืจื”: ```language-sh logrotate 3.14.0 - Copyright (C) 1995-2001 Red Hat, Inc. This may be freely redistributed under the terms of the GNU General Public License Usage: logrotate [-dfv?] [-d|--debug] [-f|--force] [-m|--mail=command] [-s|--state=statefile] [-v|--verbose] [-l|--log=logfile] [--version] [-?|--help] [--usage] [OPTION...] <configfile> ``` ืงื•ื‘ืฅ ื”ื”ื’ื“ืจื•ืช ื”ื•ื ื”ืžืคืชื— ืœื”ืฆืœื—ื” ื•ื‘ื• ื ืกืคืจ ืœ logrotate ืžื™ื”ื ืงื‘ืฆื™ ื”ืœื•ื’ ืฉืœื ื•, ืžืชื™ ืœื›ื•ื•ืฅ ืื•ืชื ื•ืžืชื™ ืœืžื—ื•ืง ืื•ืชื. ืœื•ื’ืจื•ื˜ื™ื™ื˜ ืžื•ืคืขืœ ืื•ื˜ื•ืžื˜ื™ืช ืžืชื•ืš Cron Job ื™ื•ืžื™. ืื ื™ ื™ื›ื•ืœ ืœืžืฆื•ื ืืช ืคืจื˜ื™ ื”ื’'ื•ื‘ ื‘ืงื•ื‘ืฅ `/etc/cron.daily/logrotate`. ื›ื›ื” ื–ื” ื ืจืื” ื‘ืžื›ื•ื ื” ืฉืœื™: ```language-sh $ cat /etc/cron.daily/logrotate #!/bin/sh # skip in favour of systemd timer if [ -d /run/systemd/system ]; then exit 0 fi # this cronjob persists removals (but not purges) if [ ! -x /usr/sbin/logrotate ]; then exit 0 fi /usr/sbin/logrotate /etc/logrotate.conf EXITVALUE=$? if [ $EXITVALUE != 0 ]; then /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]" fi exit $EXITVALUE ``` ## ื”ื’ื“ืจืช ืœื•ื’ื™ื ืงื•ื‘ืฅ ื”ื”ื’ื“ืจื•ืช ืฉืžื•ืคืขืœ ื‘ื‘ืจื™ืจืช ืžื—ื“ืœ ื”ื•ื `/etc/logrotate.conf`. ื ื›ื ืก ืœืจืื•ืช ืžื” ื›ืชื•ื‘ ื‘ื•: ```language-sh # see "man logrotate" for details # rotate log files weekly weekly # use the adm group by default, since this is the owning group # of /var/log/syslog. su root adm # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # use date as a suffix of the rotated file #dateext # uncomment this if you want your log files compressed #compress # packages drop log rotation information into this directory include /etc/logrotate.d # system-specific logs may be also be configured here. ``` ื”ื ื” ืขื™ืงืจื™ ื”ื“ื‘ืจื™ื ื‘ืชืจื’ื•ื: 1. ื”ืžื™ืœื” weekly ืื•ืžืจืช ืฉืื ื—ื ื• ืžืงื“ืžื™ื ืืช ื”ืœื•ื’ื™ื ืคืขื ื‘ืฉื‘ื•ืข ื‘ื™ื•ื ืจืืฉื•ืŸ. ืืคืฉืจ ืœืฆื™ื™ืŸ ืืช ื”ื™ื•ื ืื ื ื›ืชื•ื‘ ืžืกืคืจ ืื—ืจื™ ื”ืžื™ืœื” weekly. 2. ืืช ื”ืคืขื•ืœื” ื™ื‘ืฆืข ืžืฉืชืžืฉ root ื‘ืงื‘ื•ืฆืช adm. 3. ื”ืคืงื•ื“ื” `rotate 4` ืื•ืžืจืช ืฉื™ื”ื™ื• 4 ืกื‘ื‘ื™ื ืฉืœ "ืฉืžื™ืจืช ืœื•ื’" ืœืคื ื™ ืฉืžื•ื—ืงื™ื ืื•ืชื•, ื›ืœื•ืžืจ ืœื•ื’ื™ื ื™ื™ืฉืžืจื• ืœ 4 ืฉื‘ื•ืขื•ืช. ื›ืœ ืฉื‘ื•ืข ืœืฉื ื”ืงื•ื‘ืฅ ื™ืชื•ื•ืกืฃ ืžืกืคืจ ืฉืขื•ืœื” ื‘-1 ื›ืœ ืกื™ื‘ื•ื‘. 4. ืื—ืจื™ ืกื™ื‘ื•ื‘ ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™ ื™ื•ืฆืจื™ื ืงื•ื‘ืฅ ืœื•ื’ ื—ื“ืฉ ื‘ืฉื ื”ืžืงื•ืจื™. 5. ื”ืžื™ืœื” compress ื”ื™ื ื‘ื”ืขืจื” ืœื›ืŸ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืืฆืœื™ ืขืœ ื”ืžื›ื•ื ื” ื”ื™ื ืœื ืœื›ื•ื•ืฅ ืœื•ื’ื™ื. 6. ื”ื’ื“ืจื•ืช ื ื•ืกืคื•ืช ืœืคื™ ืกืจื‘ื™ืกื™ื ืืคืฉืจ ืœืžืฆื•ื ื‘ืชื™ืงื™ื™ืช `/etc/logrotate.d`. ื‘ืขืฆื ืื ื—ื ื• ืจื•ืื™ื ื›ืืŸ ืฉืžื‘ื ื” ืงื•ื‘ืฅ ื”ื”ื’ื“ืจื•ืช ืžืชืื™ื ืœื–ื” ืฉื›ืœ ืชื•ื›ื ื™ืช ืฉืื ื™ ืžืชืงื™ืŸ ืฆืจื™ื›ื” ืœื”ื•ืกื™ืฃ ืืช ื”ื”ื’ื“ืจื•ืช ืฉืœื” ืœืชื™ืงื™ื™ืช `/etc/logrotate.d` ื•ืื– logrotate ื™ืขืฉื” ืืช ื”ืงืกื ืฉืœื• ื•ื™ื ืงื” ืืช ื”ืœื•ื’ื™ื ืฉืœ ืื•ืชื” ื”ืชื•ื›ื ื™ืช. ืขืœ ืื•ืชื” ืžื›ื•ื ืช ืื•ื‘ื•ื ื˜ื• ื‘ืชื™ืงื™ื™ืช `/etc/logrotate.d` ืื ื™ ืžื•ืฆื ืืช ืงื‘ืฆื™ ื”ื”ื’ื“ืจื•ืช ื”ื‘ืื™ื: ```language-sh # ls alternatives btmp rsyslog unattended-upgrades apport cups-daemon speech-dispatcher wtmp apt dpkg ubuntu-advantage-tools bootlog ppp ufw ``` ื ืคืชื— ืื—ื“ ืžื”ื ื‘ืฉื‘ื™ืœ ืœืจืื•ืช ืื™ืš ืœื›ืชื•ื‘ ื”ื’ื“ืจื•ืช ืœืกืจื‘ื™ืก: ```language-sh # cat /etc/logrotate.d/dpkg /var/log/dpkg.log { monthly rotate 12 compress delaycompress missingok notifempty create 644 root root } ``` ื”ืกืจื‘ื™ืก dpkg ืฉื•ืžืจ ืœื•ื’ื™ื ืื—ืจืช ืžื‘ืจื™ืจืช ื”ืžื—ื“ืœ: 1. ื”ื•ื ืžื’ื“ื™ืจ ืžื”ื• ืงื•ื‘ืฅ ื”ืœื•ื’ ืฉืœื•. 2. ื”ืจื•ื˜ืฆื™ื” ืงื•ืจื™ืช ืคืขื ื‘ื—ื•ื“ืฉ, ื•ืœื•ื’ื™ื ื™ืฉื ื™ื ื ืฉืžืจื™ื 12 ืจื•ื˜ืฆื™ื•ืช, ื›ืœื•ืžืจ ืœืฉื ื”. 3. ืœื•ื’ื™ื ื™ืฉื ื™ื ืžื›ื•ื•ืฆื™ื. 4. ื”ื›ื™ื•ื•ืฅ ืœื ืงื•ืจื” ืžื™ื“ ืืœื ืจืง ื‘ืจื•ื˜ืฆื™ื” ื”ื‘ืื” (ื ื•ืขื“ ืœื”ืชืžื•ื“ื“ ืขื ืชื•ื›ื ื™ื•ืช ืฉืžืฉืื™ืจื•ืช ืงื•ื‘ืฅ ืœื•ื’ ืคืชื•ื— ื•ืžืžืฉื™ื›ื•ืช ืœื›ืชื•ื‘ ืืœื™ื• ื’ื ืื—ืจื™ ืฉืฉื™ื ื• ืœื• ืืช ื”ืฉื). 5. ืœื ืฆืจื™ืš ืœืขืฉื•ืช ืขื ื™ื™ื ื™ื ืื ื”ืงื•ื‘ืฅ ื—ืกืจ. 6. ืœื ืœื›ื•ื•ืฅ ืื• ืœื”ื–ื™ื– ืื ื”ืงื•ื‘ืฅ ืจื™ืง 7. ื›ืฉื™ื•ืฆืจื™ื ืงื•ื‘ืฅ ื—ื“ืฉ ื”ื”ืจืฉืื•ืช

ToCode
1 419
# ื”ื™ื•ื ืœืžื“ืชื™: ืื™ืš ืœืžืฆื•ื ื›ืชื•ื‘ืช IP ื‘ืœื™ ifconfig ื‘ื•ื•ื‘ื™ื ืจ WSL ืฉื”ืชืงื™ื™ื ืืชืžื•ืœ ืจืฆื™ืชื™ ืœื”ืจืื•ืช ืฉื›ืชื•ื‘ืช ื” IP ืฉืœ ืžื›ื•ื ืช ื”ืœื™ื ื•ืงืก ื”ื•ื™ืจื˜ื•ืืœื™ืช ืฉื•ื ื” ืžื›ืชื•ื‘ืช ื” IP ืฉืœ ืžื›ื•ื ืช ื”ื—ืœื•ื ื•ืช ืฉืžืืจื—ืช ืื•ืชื”. ื”ื•ืคืชืขืชื™ ืœืจืื•ืช ืฉื” Ubuntu ื”ื•ื™ืจื˜ื•ืืœื™ ืœื ืžืžืฉ ืฉืžื— ืœื”ืจื™ืฅ ifconfig. ื•ื–ื” ืœื ื‘ื’ืœืœ ืฉื”ื™ื” ื•ื™ืจื˜ื•ืืœื™. ื”ืคืงื•ื“ื” ifconfig ื”ื™ื ืžื™ื•ืฉื ืช ื•ื™ืฉ ืœื” ื›ืžื” ืžื’ื‘ืœื•ืช ืฉืœืขื•ืœื ืœื ื™ืชื•ืงื ื•, ื•ืœื›ืŸ ื”ืคืงื•ื“ื” ื”ืžื•ื“ืจื ื™ืช ื•ื”ืžื•ืžืœืฆืช ืœืฉื™ืžื•ืฉ ื”ื™ื ip. ื‘ืฉื‘ื™ืœ ืœืžืฆื•ื ื›ืชื•ื‘ืช ip ืฉืœ ืžื›ื•ื ื” ืื ื™ ื™ื›ื•ืœ ืœื”ืคืขื™ืœ: ```language-sh $ ip addr show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 52:54:00:1f:e8:4c brd ff:ff:ff:ff:ff:ff inet 192.168.64.4/24 brd 192.168.64.255 scope global dynamic enp0s1 valid_lft 56632sec preferred_lft 56632sec inet6 fd5e:dcce:7fd0:a7fb:5054:ff:fe1f:e84c/64 scope global dynamic mngtmpaddr noprefixroute valid_lft 2591997sec preferred_lft 604797sec inet6 fe80::5054:ff:fe1f:e84c/64 scope link valid_lft forever preferred_lft forever 3: br-20cce5ed46b0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:2a:b6:7a:9c brd ff:ff:ff:ff:ff:ff inet 172.20.0.1/16 brd 172.20.255.255 scope global br-20cce5ed46b0 valid_lft forever preferred_lft forever 4: br-9946704f08d6: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:c3:91:58:ec brd ff:ff:ff:ff:ff:ff inet 172.18.0.1/16 brd 172.18.255.255 scope global br-9946704f08d6 valid_lft forever preferred_lft forever 5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:4d:37:b0:5c brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever ``` ื•ื›ืžื• ืขื ifconfig ื’ื ืคื” ืื ื™ ื™ื›ื•ืœ ืœืกื ืŸ ืืช ื›ืœ ื”ื‘ืœืื’ืŸ: ```language-sh $ ip addr show | grep -w inet inet 127.0.0.1/8 scope host lo inet 192.168.64.4/24 brd 192.168.64.255 scope global dynamic enp0s1 inet 172.20.0.1/16 brd 172.20.255.255 scope global br-20cce5ed46b0 inet 172.18.0.1/16 brd 172.18.255.255 scope global br-9946704f08d6 inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 ``` ืืคืฉืจ ื’ื ืœื”ืคืขื™ืœ ื•ืœื›ื‘ื•ืช ืื™ืชื” ืžืžืฉืงื™ ืจืฉืช, ืื‘ืœ ื”ืžืชื’ ืฉืื ื™ ืื”ื‘ืชื™ ื”ื•ื ื‘ื›ืœืœ ื”ืื•ืช n, ืฉืžืฆื™ื’ื” ืืช ื›ืœ ื”ืฉื›ื ื™ื ื‘ืจืฉืช ืžืคืจื•ื˜ื•ืงื•ืœ arp: ```language-sh $ ip n 192.168.64.1 dev enp0s1 lladdr 52:ed:3c:d3:64:64 REACHABLE fd5e:dcce:7fd0:a7fb:10c8:64d2:15b:ca05 dev enp0s1 lladdr 52:ed:3c:d3:64:64 router STALE fe80::50ed:3cff:fed3:6464 dev enp0s1 lladdr 52:ed:3c:d3:64:64 router STALE ``` ื“ืฃ ื”ืชื™ืขื•ื“ ื”ื•ื ื›ืืŸ: [https://linux.die.net/man/8/ip](https://linux.die.net/man/8/ip) ื•ื”ื™ื•ื ื”ื•ื ื™ื•ื ืžืฆื•ื™ืŸ ืœื”ืชื—ื™ืœ ืœื”ืชืจื’ืœ. ื•ืื ื”ืืฆื‘ืขื•ืช ืฉืœื›ื ืžืžืฉ ืžืชืขืงืฉื•ืช ืขืœ ื”ืชื—ื‘ื™ืจ ื”ื™ืฉืŸ, ืชืžื™ื“ ืืคืฉืจ ืœื”ืคืขื™ืœ: ```language-sh $ alias ifconfig="ip addr show" ``` ื•ืœื”ืจื’ื™ืฉ ื›ืื™ืœื• ื›ืœื•ื ืœื ื”ืฉืชื ื”.

ToCode - Estadรญsticas y analรญtica del canal de Telegram @tocodeil