ToCode
Ir al canal en Telegram
ืืืคืื ืงืฆืจืื ืืืชืื ืชืื ืืืช ืื ืื ืคืจืง
Mostrar mรกs1 419
Suscriptores
Sin datos24 horas
Sin datos7 dรญas
Sin datos30 dรญas
Archivo de publicaciones
1 419
ื .ื. ืืื ืชืืื ื action ืจืฅ ืจืง ืืื ืืช ืืื ืืจื ื cron ืฉืืืืืจ ืฉืโฆ ืื ืืืืฉืื/ื ืืฉ ืจืขืืื ืืื ืืฉืื ืืื ืขืืจื
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 ืืื. ืื ืฉืืืื ืงืืื.1 419
# ืขืืืช ืืืืฉืืช
ืืชืื ืช ืจืืืืก, ืื ืื ืืืื ืืืืฉืจ, ืืื ืฉืื ื ืืข ืืจืืืืก 5 ืฉื ืื, ืืชืงืฉื ืืืฆืื ืืื ืขืืืื ืืืื.
ืืชืื ืชืช ืืื, ืืคืืื ืืืื ืืืืฉืจืช, ืฉืคืขื ืืืจืื ื ืฉืืชืื ืงืื JavaScript ืืืชื ืืคื ื ืืืฉ ืฉื ืื ื jQuery, ืชืชืงืฉื ืืืฆืื ืขืืืื ืืืื.
ืืืฉ ืืืืืช ืืืืข ืฉืืืจ ืืืืื ืืขืืื ืฉื ืืืฉ ืฉื ืื, ืืืื ืืืืืช ืฉืื ืจืง ืฉืืื ืื ืืืืจ ืืจืื ืคืจืืื ืืื ืืื ืขื ืืืคืืฉ ืืขืืืช ืืืืื ืืืขืจืืืช, ืื ืืืขืจืืืช ืขืฆืื ืืฉืชื ื ืืืืชื ืคืจืืื ืืื ืืื ืืืจ ืื ืืขืืจื ืื.
ืืืืชื ืืืจ ืืื ืชืืื ืืื ืืืืื ืฉืื ื ืืืื ืืืืืื: ืืจืืข ืฉืืฆืื ื ืืืืกืืื ื ืื ืกืื ืืคืขืืื ืฉื ื ืืืืืช ืืืฉืชืคืื ื ืืื ื ืคืขืืื - ืืฆื ืืื ืื ืืื ืฉืื ื ืืืขืื ืืืฉืื ืื ืื ื ืฉืืืืื ืืื ืืขืฉืืช ืืช ืื, ืืืฆื ืฉื ื ืืชืคืชืืืืืช ืืื ืืืืืืืช ืฉืื ืืืื ืงืืจืืช ืืืคืืืช ืืช ืืืืข ืฉืขืื ืืื ืื ื ืืื ืจืืืื ืื.
ืขืืืจ ืืคืชืืื ืฉืขืืจื ืืกืื ืืืื ืืืืืื ืืืจืช, ืืฉืืขืืืคืื ืื ืืฉืืื ืืืจืื ืฉืื ืื ื ืืืจ ืืืืขืื, ืืืขื ืชืืื ืืฉืชืื ืืืฉืงืืข ืงืฆืช ืืื ืื ืืื ืื ืืืืื ืฉืื ืื ืืืืื ืืืจืืืืื ืฉื ืืืื ืืื:
1. ืืืชืื ืกืงืจืืคืืื ืงืื ืื ืืคืืืชืื ืื ื bash, ืืคืืื ืฉืื ืื ื ืืืชืืื ืงืื ื Java.
2. ืืืืฉืื ืืขืืื ืืืื ืืงืก ืขื ืืืคืืืค, ืืคืืื ืฉืืืงืื ืืืืฉ ืืืชืจ ืืขืืื ืื ื Windows.
3. ืืื ืืช ืืืฉืงืื ืื ืืคืืืงืฆืืืช ืงืื ืืช ืืืืจืื "ืฉืืืืื" ืืื ืืืฉืง ืฉืืจืื ืืื ืืืืจื ืืฉ ืืื ืืืืืช ืืืืืฉ.
4. ืืืฉืชืชืฃ ืืคืขืืืืืืช ืฉื ืงืืืฆืืช ืืืจืืช ืืืจืืื, ืื ืื ืกืืช ืืขืืืจ ืืื ืฉืื ืฉืขืืืืื ืขืืฉืื ืืืฉืื ืฉืืชื ืคืขื ืืืืชื ืืืืื ืื.
ืื ื ืืื ืื ืืงืืชื 5 ืฉื ืื ืืืืื ืืกืืื ืืขืืื ืืื ืืขื ืืืืฉืื ืืฉืื ืืช ืืขืืืช ืืืืืฉืืช ืฉื ืฉืืืืจ ืืืืข; ืืื ืื ืืชื ืืืจ ืคื ืืขืืืื ืืืชืืื ืงืื, ืืืื ืฉืืื ืืฉืื ืืช ืืฉืขื ืืืื ืืื ืืืฉืืืจ ืขืื ืืืช ืคืชืืื ืืืื ืกืืจืืจ.
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.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) {
```
ืคื ืื ืจืง ืฉืื ืื ื ืืงืืืื ืชืืืืจ ืฉื ืื ืืคืื ืงืฆืื ืขืืฉื, ืืื ืื ืืช ืกืื ืืืืืืงื ืฉืืืชืจ ืืืขืืืจ ืืื ืคืจืืืจ ืฉื ืืคืื ืงืฆืื ืืืืืืช ืืคืขืื ืขื ืคืืจืื ืขืจื ืืืืจื. ืืืจื ืงืจืืื ืฉื ืชืืขืื ืืื ืืจืืจ ืืืืจื ืื ืืืคืฉืจืืืืช ืฉืื ืืขืืืื ืขื ืืคืื ืงืฆืื.
ืชืืขืื ืืื ืืืื ืื ืืืืืฃ ืงืื ืืื, ืืื ืืื ืืืืื ืขืืืจ ืืื ืฉืื ืืืจืื ืืขืืื ืขื ืืงืื ืืืืืื ืืืชื ืืื ืืืชืจ. ืืฉืงืขื ืืชืืขืื, ืืื ืืฉืงืขื ืืฉืืคืืจ ืืืฆืืขืื, ืืืืื, ืืืฉืง ืืฉืชืืฉ ืืชืืืืื ืขืืืื ืืชืงืืืื, ืื ื ืจืืืช ืืฉืชืืืช ืืืืชื ืจืืข ืืื ืชืืืื ืืื ืงืื ืฉืืืื ืงื ืืชืืืง ืืืฉืคืจ ืืืชื.
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.
```
1 419
# ืขืืืช ืืืืฉืืช
ืืชืื ืช ืจืืืืก, ืื ืื ืืืื ืืืืฉืจ, ืืื ืฉืื ื ืืข ืืจืืืืก 5 ืฉื ืื, ืืชืงืฉื ืืืฆืื ืืื ืขืืืื ืืืื.
ืืชืื ืชืช ืืื, ืืคืืื ืืืื ืืืืฉืจืช, ืฉืคืขื ืืืจืื ื ืฉืืชืื ืงืื JavaScript ืืืชื ืืคื ื ืืืฉ ืฉื ืื ื jQuery, ืชืชืงืฉื ืืืฆืื ืขืืืื ืืืื.
ืืืฉ ืืืืืช ืืืืข ืฉืืืจ ืืืืื ืืขืืื ืฉื ืืืฉ ืฉื ืื, ืืืื ืืืืืช ืฉืื ืจืง ืฉืืื ืื ืืืืจ ืืจืื ืคืจืืื ืืื ืืื ืขื ืืืคืืฉ ืืขืืืช ืืืืื ืืืขืจืืืช, ืื ืืืขืจืืืช ืขืฆืื ืืฉืชื ื ืืืืชื ืคืจืืื ืืื ืืื ืืืจ ืื ืืขืืจื ืื.
ืืืืชื ืืืจ ืืื ืชืืื ืืื ืืืืื ืฉืื ื ืืืื ืืืืืื: ืืจืืข ืฉืืฆืื ื ืืืืกืืื ื ืื ืกืื ืืคืขืืื ืฉื ื ืืืืืช ืืืฉืชืคืื ื ืืื ื ืคืขืืื - ืืฆื ืืื ืื ืืื ืฉืื ื ืืืขืื ืืืฉืื ืื ืื ื ืฉืืืืื ืืื ืืขืฉืืช ืืช ืื, ืืืฆื ืฉื ื ืืชืคืชืืืืืช ืืื ืืืืืืืช ืฉืื ืืืื ืงืืจืืช ืืืคืืืช ืืช ืืืืข ืฉืขืื ืืื ืื ื ืืื ืจืืืื ืื.
ืขืืืจ ืืคืชืืื ืฉืขืืจื ืืกืื ืืืื ืืืืืื ืืืจืช, ืืฉืืขืืืคืื ืื ืืฉืืื ืืืจืื ืฉืื ืื ื ืืืจ ืืืืขืื, ืืืขื ืชืืื ืืฉืชืื ืืืฉืงืืข ืงืฆืช ืืื ืื ืืื ืื ืืืืื ืฉืื ืื ืืืืื ืืืจืืืืื ืฉื ืืืื ืืื:
1. ืืืชืื ืกืงืจืืคืืื ืงืื ืื ืืคืืืชืื ืื ื bash, ืืคืืื ืฉืื ืื ื ืืืชืืื ืงืื ื Java.
2. ืืืืฉืื ืืขืืื ืืืื ืืงืก ืขื ืืืคืืืค, ืืคืืื ืฉืืืงืื ืืืืฉ ืืืชืจ ืืขืืื ืื ื Windows.
3. ืืื ืืช ืืืฉืงืื ืื ืืคืืืงืฆืืืช ืงืื ืืช ืืืืจืื "ืฉืืืืื" ืืื ืืืฉืง ืฉืืจืื ืืื ืืืืจื ืืฉ ืืื ืืืืืช ืืืืืฉ.
4. ืืืฉืชืชืฃ ืืคืขืืืืืืช ืฉื ืงืืืฆืืช ืืืจืืช ืืืจืืื, ืื ืื ืกืืช ืืขืืืจ ืืื ืฉืื ืฉืขืืืืื ืขืืฉืื ืืืฉืื ืฉืืชื ืคืขื ืืืืชื ืืืืื ืื.
ืื ื ืืื ืื ืืงืืชื 5 ืฉื ืื ืืืืื ืืกืืื ืืขืืื ืืื ืืขื ืืืืฉืื ืืฉืื ืืช ืืขืืืช ืืืืืฉืืช ืฉื ืฉืืืืจ ืืืืข; ืืื ืื ืืชื ืืืจ ืคื ืืขืืืื ืืืชืืื ืงืื, ืืืื ืฉืืื ืืฉืื ืืช ืืฉืขื ืืืื ืืื ืืืฉืืืจ ืขืื ืืืช ืคืชืืื ืืืื ืกืืจืืจ
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
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. ืืฉืืืฆืจืื ืงืืืฅ ืืืฉ ืืืจืฉืืืช
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"
```
ืืืืจืืืฉ ืืืืื ืืืื ืื ืืฉืชื ื.
ยกYa disponible! Investigaciรณn de Telegram 2025 โ los principales insights del aรฑo 
