<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Arthur Kh</title>
    <description>The latest articles on DEV Community by Arthur Kh (@arthurkh).</description>
    <link>https://dev.to/arthurkh</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F652298%2F0e2e0cab-1168-4ca7-8a4b-d1a7b4feffff.png</url>
      <title>DEV Community: Arthur Kh</title>
      <link>https://dev.to/arthurkh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arthurkh"/>
    <language>en</language>
    <item>
      <title>What would you use instead of WordPress?</title>
      <dc:creator>Arthur Kh</dc:creator>
      <pubDate>Fri, 23 Feb 2024 21:18:34 +0000</pubDate>
      <link>https://dev.to/arthurkh/what-would-you-use-instead-of-wordpress-5110</link>
      <guid>https://dev.to/arthurkh/what-would-you-use-instead-of-wordpress-5110</guid>
      <description>&lt;p&gt;&lt;strong&gt;WordPress&lt;/strong&gt; is a popular open-source content management system (CMS) that enables users to create and manage websites with ease. It was first released in 2003 and since then, WordPress is one of the most popular CMS used. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;However:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WordPress sites can sometimes become slow and sluggish, especially if too many plugins are installed or if the theme is poorly coded.&lt;/li&gt;
&lt;li&gt;Being the most popular CMS, WordPress is a frequent target for hackers. Though the WordPress core is secure, vulnerabilities can arise from third-party themes and plugins.&lt;/li&gt;
&lt;li&gt;While WordPress can handle sites with varying sizes, high-traffic sites might require significant optimization.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;So let's discuss on this main questions&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What alternatives to WordPress do you know? &lt;/li&gt;
&lt;li&gt;Which one have you used, and what was your experience with them?&lt;/li&gt;
&lt;li&gt;Would you use &lt;strong&gt;dev.to&lt;/strong&gt; as a data provider for your portfolios? &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Be sure to follow my &lt;a href="https://dev.to/mainarthur"&gt;dev.to blog&lt;/a&gt; and &lt;a href="https://t.me/MainArthur" rel="noopener noreferrer"&gt;Telegram channel&lt;/a&gt;; there will be even more content soon.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>📝 Writing a professional resume: Ultimate guide</title>
      <dc:creator>Arthur Kh</dc:creator>
      <pubDate>Tue, 23 Jan 2024 13:52:48 +0000</pubDate>
      <link>https://dev.to/arthurkh/writing-a-professional-resume-ultimate-guide-kj8</link>
      <guid>https://dev.to/arthurkh/writing-a-professional-resume-ultimate-guide-kj8</guid>
      <description>&lt;p&gt;As I wrote in &lt;a href="https://dev.to/mainarthur/resume-4pf8"&gt;my previous article&lt;/a&gt; about the importance of a Resume, almost everyone needs one. I've also provided some key points you should follow to increase your job application chances, so I'd recommend &lt;em&gt;reading it first&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;In this article, I'm going to provide you an &lt;strong&gt;ultimate step-by-step guide&lt;/strong&gt; on how to write a &lt;strong&gt;professional resume&lt;/strong&gt; based on more than 20 resumes I've made for different fields. This guide will suit well for IT-related specialties, but also works to non IT-related roles.&lt;/p&gt;

&lt;p&gt;We will go through three steps: 1 - research, 2 - all data composition, and 3 - formatting. In the first step we will research the job market to have better keywords in our resume, in the second step we will fill our data into one document which at the last step will be formatted into the pretty form you'd like.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Want to check out what is a result we're gaining to? Scroll to the end of the article: I've placed my own resume there. If you like it - this post is for you!&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1 - Research
&lt;/h2&gt;

&lt;p&gt;The first and best tool you need to create a resume is Google Sheets. Yes, Excel/Sheets are your very first tools for resume creation, not Google Docs nor Word. You would ask "why?", and the answer is simple: every good work starts from research.&lt;/p&gt;

&lt;p&gt;Foremost, we need to create a spreadsheet document with three columns: &lt;code&gt;Required skill&lt;/code&gt;, &lt;code&gt;Frequency&lt;/code&gt; and a separate column &lt;code&gt;Vacancy URL&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsffl0fkquaztf6cbnqe3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsffl0fkquaztf6cbnqe3.png" alt="Research template example" width="800" height="359"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;You can copy the template from &lt;a href="https://docs.google.com/spreadsheets/d/1DM2hY_D_l4YBF8xt-3E-ZH0m58BiUVGHellp_VoQYOQ/edit?usp=sharing" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Also, we will have to use job board websites, like &lt;a href="https://www.linkedin.com/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or &lt;a href="https://indeed.com" rel="noopener noreferrer"&gt;Indeed&lt;/a&gt;. There probably can be some other websites which are used in your region, so it's better to do some research on it and find out what suits your situation the most.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp6yan47pjbn2g2yvo4uy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp6yan47pjbn2g2yvo4uy.png" alt="Vacancy list" width="800" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we're ready to start. Use at least two-three job boards, apply filters regarding your desired position/location/experience. It's better to go as specific on position names as possible. "Software Engineer" can give you many types of software engineering, so you will have to scan numerous totally different vacancies, which is not good for research and its results.&lt;/p&gt;

&lt;p&gt;If you don't have any work experience, and there are less than 30 vacancies for non-experienced, set 1–2 years in filters to have more vacancies for research. Also, companies are ready to review your resume in some cases and help you on the onboarding stage depending on skills you have: like good knowledge of some language, knowledge of some fields like physics, marketing, food cooking etc. &lt;/p&gt;

&lt;p&gt;After setting all the required filters, we go one-by-one and scan vacancies for requirements. Fill them into your document, or increase the number if you have already seen this requirement. Save vacancy links, it will be very handy in the future. We must go through as many vacancies as we can (or the top 30-40 in total) from different sources. You can go with a more significant number, but it will not make a big difference if you have a specific position name like "React.js Front-End Developer". &lt;/p&gt;

&lt;p&gt;Your document will look like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flrgw6jm3d335kpz9vrlg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flrgw6jm3d335kpz9vrlg.png" alt="filled example" width="800" height="262"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;You will have way more skills in the document, it's just an example&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If there are very frequent skills, but you are not sure if you have them, it would be very useful to spend some time on testing these skills or gaining additional education to fit the required level. For example: if Spanish is a common requirement, but your Spanish is only "¡Hola!", you will have an advantage if you increase your knowledge at least to an average level like A2 or B1.&lt;/p&gt;

&lt;p&gt;So now the research step is finished, we're ready for the next step.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Please share your research results with your filters in the comments to make everyone else's work easier!&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 2 - Fill all the data
&lt;/h2&gt;

&lt;p&gt;When the research is finished, it's time to fill the data and use suitable tools for resume creation: Google Docs or Word (or any popular text redactor). Create a blank document or use this &lt;a href="https://docs.google.com/document/d/1rLzdc-4Q5c8Rui7po5YvtgRbS_uGjOIGxkj5JZ15WRE/edit?usp=sharing" rel="noopener noreferrer"&gt;template&lt;/a&gt;. This document will accumulate all the &lt;strong&gt;ACTUAL&lt;/strong&gt; experiences and skills you have. &lt;/p&gt;

&lt;p&gt;Add these sections to the document:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Headline&lt;/strong&gt; - required&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contact information&lt;/strong&gt; - required&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Work experience&lt;/strong&gt; - required&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Languages&lt;/strong&gt; - required, but can be merged with skills block&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Education&lt;/strong&gt; - required&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Certifications and licenses&lt;/strong&gt; - if you have them&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Publications&lt;/strong&gt; - if you have scientific publications; for bloggers, you can skip it and place URL to your blog in the contact block&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Awards&lt;/strong&gt; - if you have them&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Volunteer work&lt;/strong&gt; - optional&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Summary&lt;/strong&gt; - required&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills&lt;/strong&gt; - required&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fill the document one by one following this guide because &lt;strong&gt;THE ORDER MATTERS&lt;/strong&gt;. This order lets you achieve the correct structure of information and focus on the most important parts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fymvogwxc79zjleh9qln1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fymvogwxc79zjleh9qln1.png" alt="Word template" width="800" height="725"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This &lt;a href="https://docs.google.com/document/d/1rLzdc-4Q5c8Rui7po5YvtgRbS_uGjOIGxkj5JZ15WRE/edit?usp=sharing" rel="noopener noreferrer"&gt;template&lt;/a&gt; also contains a couple of examples to make it easier to fill.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Headline
&lt;/h3&gt;

&lt;p&gt;This section is easy to fill. It's just your full name (like in your documents) and desired position name which could be found in vacancy headlines, for ex: "Manual QA".&lt;/p&gt;

&lt;h3&gt;
  
  
  Contact information
&lt;/h3&gt;

&lt;p&gt;Second easy to fill section. The most important thing here is relevancy. All contact data should be relevant and actual, so the recruiter should be able to contact you with this data. Your phone number, email and work location are important to specify. For remote workers, you can also specify the location or time-zone of remote work, for example "Remote/Germany".&lt;/p&gt;

&lt;h3&gt;
  
  
  Work experience
&lt;/h3&gt;

&lt;p&gt;The most important section of every resume is the work experience section. All other sections could be skipped by recruiter easily if your experience is relevant and outstanding. Here you should list in &lt;strong&gt;reverse chronological order&lt;/strong&gt; all your relevant workplaces, positions, time period and your &lt;strong&gt;results and achievements&lt;/strong&gt;. Don't forget that results matter more than responsibilities, they make the difference between developers who fix features and implement bugs. All results should be short, precise and include numbers. It can be started from one of the resume &lt;a href="https://www.indeed.com/career-advice/resumes-cover-letters/cv-buzzwords" rel="noopener noreferrer"&gt;buzzword&lt;/a&gt;, for example: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Redesigned the whole database structure, which improved writing and reading speed by &lt;strong&gt;four&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also, use bullet points instead of solid text to divide multiple results in the experience section, and highlight keywords and numbers in bold to attract attention. Bullet points increase readability drastically. Just compare:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Redesigned the whole database schema, which improved writing and reading speed by four. Migrated from GRPC to GraphQL when we reached GRPC data volume limits, which helped to bypass the limit and improved fetching speed from a minute to 2 seconds for 5MB payload. Developed a client-side proxy library which reduced about 7 redundant Nest.js microservices and bypass third-party rate-limits&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and:&lt;/p&gt;

&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Redesigned the whole database structure, which improved writing and reading speed by &lt;strong&gt;four&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Migrated from &lt;strong&gt;GRPC&lt;/strong&gt; to &lt;strong&gt;GraphQL&lt;/strong&gt; when we reached &lt;strong&gt;GRPC&lt;/strong&gt; data volume limits, which helped to bypass the limit and improved fetching speed &lt;strong&gt;from a minute to 2 seconds for 5MB payload&lt;/strong&gt;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Developed a client-side proxy library which &lt;strong&gt;reduced about 7 redundant Nest.js microservices&lt;/strong&gt; and bypass third-party rate-limits&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you don't have at least three &lt;strong&gt;measurable results&lt;/strong&gt;, you can include your key responsibilities, but don't forget that measurable results are way preferable. Also, you can add one bullet point to write a small description of the workplace or project where you have worked.&lt;/p&gt;

&lt;h3&gt;
  
  
  Languages
&lt;/h3&gt;

&lt;p&gt;This is a required section. However, you can skip it just by moving your languages to the skills section like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwy6y8ydnlfie8hes2yju.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwy6y8ydnlfie8hes2yju.png" alt="Languages in skills" width="800" height="133"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But if you have enough space for it in your resume, you can just list all your languages with knowledge level at least on A2, in case they're relevant for your job application.&lt;/p&gt;

&lt;h3&gt;
  
  
  Education
&lt;/h3&gt;

&lt;p&gt;In the education section you just list all the places where you have studied, its names, locations and time periods. If you have a high degree in one field, then just include the highest and don't include your elementary or middle school. If you have passed specialized courses, you can also include them. You also can specify one bullet on your most interesting achievement: like top place in Olympiad, scientific publication, high GPA score, etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  Certifications and licenses / Publications / Awards
&lt;/h3&gt;

&lt;p&gt;These three sections are optional, but if you have awards, certifications, scientific publications, they will highlight you from a dozen other resumes. The format is pretty obvious: bullet points with certification/award/publication names and dates.&lt;/p&gt;

&lt;h3&gt;
  
  
  Volunteer work
&lt;/h3&gt;

&lt;p&gt;The format of this section is almost the same as work experience's format, but this section is optional most of the time. However, if volunteer work is valued for your position or field, then you have to fill it too.&lt;/p&gt;

&lt;h3&gt;
  
  
  Summary
&lt;/h3&gt;

&lt;p&gt;The objective of a resume summary is to accentuate elements related to the position you are seeking, which are not detailed elsewhere in your resume. This includes showcasing transferable skills, high-level accomplishments or a context that makes your accomplishments stand out. Also, you can specify your motivation and what you're looking for.&lt;/p&gt;

&lt;h3&gt;
  
  
  Skills
&lt;/h3&gt;

&lt;p&gt;The Skills section is a keyword section. It's used for resume search and matching. The better keywords you have, the higher are your chances to appear in the search results. To build a correct list of skills, you will need all the frequent required skills from &lt;em&gt;Step 1 - Research&lt;/em&gt;, and you can add skills from your already described work experience, education and other sections. Add only relevant skills and &lt;strong&gt;skip all&lt;/strong&gt; the &lt;a href="https://cresuma.com/career-guides/resume-buzzwords-cliches/" rel="noopener noreferrer"&gt;cliché skills&lt;/a&gt; like "Team player" or "Result-driven".&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2.1 - Spellcheck
&lt;/h3&gt;

&lt;p&gt;Use some spellcheck tools like &lt;em&gt;Grammarly&lt;/em&gt; or &lt;em&gt;LanguageTool&lt;/em&gt; to fix all possible typos. &lt;strong&gt;It's an IMPORTANT step&lt;/strong&gt;. If your resume has typos, it will decrease your chances drastically. &lt;/p&gt;

&lt;p&gt;And we've finished the second step. Now we have all the necessary data in one document. And it's time for formatting!&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3 - Formatting
&lt;/h2&gt;

&lt;p&gt;The main goal of the formatting step is to format all the most important data in one page in a readable style with &lt;em&gt;Application Tracking System&lt;/em&gt; (ATS) compatibility. You can try two pages if you have a lot of relevant work experience, but one page is always preferable. If you can remove some optional sections or shorten them to fit everything in one page, it's better to do so.&lt;/p&gt;

&lt;h3&gt;
  
  
  File format
&lt;/h3&gt;

&lt;p&gt;The resume should look the same both in &lt;code&gt;.docx&lt;/code&gt; and &lt;code&gt;.pdf&lt;/code&gt; formats. PDF is more common. However, sometimes ATS could require &lt;code&gt;.docx&lt;/code&gt; format, so having them both is an ultimate move. &lt;/p&gt;

&lt;h3&gt;
  
  
  Template
&lt;/h3&gt;

&lt;p&gt;The right template is important for a professional resume. So there are three main requirements for a resume template: readability, style and ATS-compatibility. The readability requirement is challenging to estimate until you fill all the necessary data, but if you pick an ATS-compatible template, it's going to be human-readable in most cases with all the relevant data. The style requirement is determined by your seniority and the work field. If you work in design, you can showcase some "bells and whistles" in your resume, but in most other cases a minimalistic style will work better. &lt;/p&gt;

&lt;p&gt;You can use templates from these lists:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://resumeworded.com/resume-templates#signupmodal" rel="noopener noreferrer"&gt;resume worded&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.jobscan.co/resume-templates/ats-templates" rel="noopener noreferrer"&gt;jobscan&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;In the next article I will share you some more advices about resume styling, so be sure to follow my &lt;a href="https://dev.to/mainarthur"&gt;dev.to blog&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Template filling
&lt;/h3&gt;

&lt;p&gt;Now we have our resume template selected and data prepared from the previous step. The template can be filled with your data and converted to your personal resume. You can rearrange sections, but most of the time they're in traditional order.&lt;/p&gt;

&lt;p&gt;And we're done. We have our professional resume prepared to be used in your job application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Extra Step 4 - Application
&lt;/h2&gt;

&lt;p&gt;It's time for the extra step: remember that your resume was built using vacancy descriptions? Use the links you saved in &lt;code&gt;Step 1&lt;/code&gt; and apply for these vacancies. You will have a pretty high chance of passing the resume filter and being invited to the interview, which will help you to test your skills and boost yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  My resume
&lt;/h2&gt;

&lt;p&gt;Here is my resume! I built it by using my own guide and following steps I've described:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpuwvu4qqspb5l7njspxf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpuwvu4qqspb5l7njspxf.png" alt="My Resume" width="800" height="1035"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;&lt;a href="https://docs.google.com/document/d/1ohWIwu7B2K3Xuak3XlQgzIVsP9aHnbpG/edit?usp=sharing&amp;amp;ouid=112561330604077238243&amp;amp;rtpof=true&amp;amp;sd=true" rel="noopener noreferrer"&gt;Here&lt;/a&gt; you can find it on &lt;a href="https://docs.google.com/document/d/1ohWIwu7B2K3Xuak3XlQgzIVsP9aHnbpG/edit?usp=sharing&amp;amp;ouid=112561330604077238243&amp;amp;rtpof=true&amp;amp;sd=true" rel="noopener noreferrer"&gt;Google Docs&lt;/a&gt; and make your own copy.&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For those who didn't know, I've started my own &lt;strong&gt;&lt;a href="https://bit.ly/private-consultations" rel="noopener noreferrer"&gt;private consultations&lt;/a&gt;&lt;/strong&gt;! More than that, I regularly help people in &lt;strong&gt;creating good resumes&lt;/strong&gt; from scratch or using existing ones. So check out my &lt;a href="https://t.me/MainArthur" rel="noopener noreferrer"&gt;Telegram channel&lt;/a&gt; for more information!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Be sure to follow my &lt;a href="https://dev.to/mainarthur"&gt;dev.to blog&lt;/a&gt; and &lt;a href="https://t.me/MainArthur" rel="noopener noreferrer"&gt;Telegram channel&lt;/a&gt;; there will be even more content soon.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>tutorial</category>
      <category>resume</category>
      <category>guide</category>
    </item>
    <item>
      <title>Resume</title>
      <dc:creator>Arthur Kh</dc:creator>
      <pubDate>Thu, 11 Jan 2024 09:52:01 +0000</pubDate>
      <link>https://dev.to/arthurkh/resume-4pf8</link>
      <guid>https://dev.to/arthurkh/resume-4pf8</guid>
      <description>&lt;p&gt;Resume (or CV) is probably one of the most important documents you can have. It's the passport when you want to find your dream job, and a properly written resume is your visa. In two words: resume is your work and skills history summary.&lt;/p&gt;

&lt;p&gt;Your resume has only one purpose: to help an employer find out whether you're a good fit or not for a role. It has its own structure and style, so the more you follow the rules, the more are your chances to be invited to interview.&lt;/p&gt;

&lt;p&gt;So let's find out what are the main points of a strong resume!&lt;/p&gt;

&lt;h2&gt;
  
  
  Size
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1 or 2 pages&lt;/strong&gt;. Recruiters only have about 7–10 seconds to check your resume on average, so no one will check all 10 pages of your most detailed work history in most of the cases. This is why 1 page is just perfect. Instead of many pages, you can stand out with different page mock-ups to fit all the data or remove less relevant information. Point out the most important information and your selling points, and don't worry: you can always tell more in an interview if it's relevant and can be told quickly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Structure
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Headline&lt;/strong&gt; - first section in every CV, here you write your full name, desired position, contact information and links to your LinkedIn, portfolio or blog.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt; &lt;em&gt;(optional)&lt;/em&gt; - some recruiters like to start from the summary and read about your main skills and experience. It's not a required section, but it's useful for most of the cases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Work experience&lt;/strong&gt; - the most important resume section because here you describe all the &lt;strong&gt;&lt;em&gt;relevant&lt;/em&gt;&lt;/strong&gt; places where you have worked and what achievements you accomplished in there. Usually, you specify the company where you have worked, time period and what achievements you accomplished or at least your key responsibilities. Aim to fill 12–20 bullets in the description.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Education&lt;/strong&gt; - if you're an experienced professional, your Education section can be very short. You can just include the names of the colleges/institutions you've attended along with your major. Also, you can write one bullet on your most interesting achievement: like top place in Olympiad, scientific publication, high GPA score, etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skills&lt;/strong&gt; - skills sections is keywords section, so here you just list all the skills you have. At first glance, it sounds hard because everyone has numerous skills, from cooking to designing rockets. The easiest way to know what skills are relevant and what are not:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;At first - open all vacancies for your position;&lt;/li&gt;
&lt;li&gt;At second - build a &lt;a href="https://www.wordclouds.com/" rel="noopener noreferrer"&gt;words cloud&lt;/a&gt; from requirements you can find in descriptions;&lt;/li&gt;
&lt;li&gt;At third - just write the most frequent skills which you have.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Style
&lt;/h2&gt;

&lt;p&gt;Document should be &lt;a href="https://www.oracle.com/in/human-capital-management/recruiting/what-is-applicant-tracking-system/" rel="noopener noreferrer"&gt;ATS&lt;/a&gt; and human ready. It should be simple with clear and concise language and page mark up. Be sure to use only PDF/DOC format. It will simplify the job for ATS parser to get all the data correctly and match it with vacancy description so you will be on the top of the list, and it will simplify recruiters life when he starts reading and matching it. Try to avoid buzzwords and clichés, align dates in reverse chronological order (latest data goes first) and proofread your resume to be sure that everything is consistent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Resume is important for almost every one, and I shared all the main points of a strong resume which I discovered from my resume writing experience so you can create your filter crashing resume.&lt;/p&gt;

&lt;p&gt;In the next article, I will share my own strategy for writing a really great resume and give you some advices to make it flawless.&lt;/p&gt;

&lt;p&gt;For those who didn't know, I've started my own &lt;strong&gt;&lt;a href="https://bit.ly/private-consultations" rel="noopener noreferrer"&gt;private consultations&lt;/a&gt;&lt;/strong&gt;! More than that, I regularly help people in &lt;strong&gt;creating good resumes&lt;/strong&gt; from scratch or using existing ones. So check out my Telegram channel for more information!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Be sure to follow my &lt;a href="https://dev.to/mainarthur"&gt;dev.to blog&lt;/a&gt; and &lt;a href="https://t.me/MainArthur" rel="noopener noreferrer"&gt;Telegram channel&lt;/a&gt;; there will be even more content soon.&lt;/strong&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Optimize your JS code in 10 seconds</title>
      <dc:creator>Arthur Kh</dc:creator>
      <pubDate>Tue, 21 Nov 2023 09:13:20 +0000</pubDate>
      <link>https://dev.to/arthurkh/optimize-your-js-code-in-10-seconds-6jb</link>
      <guid>https://dev.to/arthurkh/optimize-your-js-code-in-10-seconds-6jb</guid>
      <description>&lt;p&gt;&lt;strong&gt;Performance&lt;/strong&gt; is the heartbeat of any JavaScript application, wielding a profound impact on user experience and overall success. It's not just about speed: it's about responsiveness, fluidity and efficiency. A well-performing JS app increases load speed, provides smoother interactions and more engaged user base. Users expect seamless experience, and optimizing performance ensures that your app meets the expectations. Improved performance leads to better SEO rankings, higher conversion rates and increased user retention. It's the cornerstone of user satisfaction, which makes it imperative to prioritize and continually optimize performance in your JavaScript applications.&lt;/p&gt;

&lt;p&gt;Let's go to the problems!&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem #1 - Combination of Array Functions
&lt;/h2&gt;

&lt;p&gt;I've already reviewed numerous PRs (Pull Requests) in my life, and there is an issue I've seen a lot of times. It happens when someone combines &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" rel="noopener noreferrer"&gt;.map&lt;/a&gt; with &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter" rel="noopener noreferrer"&gt;.filter&lt;/a&gt; or &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce" rel="noopener noreferrer"&gt;.reduce&lt;/a&gt; in any order like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(...)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you combine these methods, they go through all of the elements for a couple of times. For a small amount of data it doesn't really make any difference, but when the array gets bigger the computations take longer.&lt;/p&gt;

&lt;h3&gt;
  
  
  The easy solution
&lt;/h3&gt;

&lt;p&gt;Use only &lt;code&gt;reduce&lt;/code&gt; method. &lt;code&gt;reduce&lt;/code&gt; is the ultimate solution when you need mapping and filtering at the same time. It'll go through the array only once and do both operations simultaneously, saving time and iterations count.&lt;/p&gt;

&lt;p&gt;For example, this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;will transform into:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mappedElement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mappedElement&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mappedElement&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Problem #2 - Useless Reference Update
&lt;/h2&gt;

&lt;p&gt;This problem shows up if you're using &lt;a href="https://react.dev/" rel="noopener noreferrer"&gt;React.js&lt;/a&gt; or any other library where immutability is important for reactivity and re-renders. Creating a new reference using spreading is quite a common action to do when you update the state/property of the component:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;arrState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setArrayState&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="nf"&gt;setArrayState&lt;/span&gt;&lt;span class="p"&gt;([...&lt;/span&gt;&lt;span class="nx"&gt;newArrayState&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However, spreading the results of &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" rel="noopener noreferrer"&gt;.map&lt;/a&gt;,&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter" rel="noopener noreferrer"&gt;.filter&lt;/a&gt; and other functions into a new array for new references is useless, because you'll just create an array with new reference to the result which is a new array with new result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;arrState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setArrayState&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="nf"&gt;setArrayState&lt;/span&gt;&lt;span class="p"&gt;([...&lt;/span&gt;&lt;span class="nx"&gt;arrState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;f&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;))])&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The solution
&lt;/h3&gt;

&lt;p&gt;Just remove useless spread operator when you use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" rel="noopener noreferrer"&gt;.map&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter" rel="noopener noreferrer"&gt;.filter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce" rel="noopener noreferrer"&gt;.reduce&lt;/a&gt; - with new array accumulator-result&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduceRight" rel="noopener noreferrer"&gt;.reduceRight&lt;/a&gt; - with new array accumulator-result&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat" rel="noopener noreferrer"&gt;.flat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap" rel="noopener noreferrer"&gt;.flatMap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat" rel="noopener noreferrer"&gt;.concat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toReversed" rel="noopener noreferrer"&gt;.toReversed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toSorted" rel="noopener noreferrer"&gt;.toSorted&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toSpliced" rel="noopener noreferrer"&gt;.toSpliced&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;You are welcome to share other JS antipatterns you know in the comments, I'll add them all in the post!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;Be sure to follow my &lt;a href="https://dev.to/mainarthur"&gt;dev.to blog&lt;/a&gt; and &lt;a href="https://t.me/MainArthur" rel="noopener noreferrer"&gt;Telegram channel&lt;/a&gt;; there will be even more content soon.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>tutorial</category>
      <category>programming</category>
    </item>
    <item>
      <title>Remote vs Hybrid vs Office</title>
      <dc:creator>Arthur Kh</dc:creator>
      <pubDate>Thu, 16 Nov 2023 12:52:58 +0000</pubDate>
      <link>https://dev.to/arthurkh/remote-vs-hybrid-vs-office-3k78</link>
      <guid>https://dev.to/arthurkh/remote-vs-hybrid-vs-office-3k78</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What employment option resonates most with you, and what factors influence your preference in today's evolving work landscape?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The realm of employment options is rich and varied, each offering its unique blend of advantages and considerations. From the structured environment of traditional office-based roles to the flexibility of remote work and the hybrid approach that combines both, preferences often hinge on individual needs and work styles. Some prioritize the camaraderie and face-to-face interactions inherent in office settings, while others cherish the autonomy and work-life balance that remote work affords. The hybrid model, straddling between the two, seeks to merge the benefits of in-person collaboration with the freedom of remote arrangements. &lt;/p&gt;

</description>
      <category>discuss</category>
      <category>watercooler</category>
    </item>
    <item>
      <title>Challenging Bugs and Solutions of the Week: Share Your Stories! 🐞</title>
      <dc:creator>Arthur Kh</dc:creator>
      <pubDate>Fri, 13 Oct 2023 18:30:35 +0000</pubDate>
      <link>https://dev.to/arthurkh/challenging-bugs-and-solutions-of-the-week-share-your-stories-c72</link>
      <guid>https://dev.to/arthurkh/challenging-bugs-and-solutions-of-the-week-share-your-stories-c72</guid>
      <description>&lt;p&gt;Hello Dev.to Community! It's Friday, 13.10.2023, and it's a good time to share what bugs you have faced during the week.&lt;/p&gt;

&lt;p&gt;We all know that development is far from a smooth journey; it's rife with obstacles and challenges that test our problem-solving skills. One of the best ways to grow as a developer is to learn from these challenges — both ours and others. So let's share some of our battles with bugs this week!&lt;/p&gt;

&lt;h3&gt;
  
  
  Guidelines:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Be Specific:&lt;/strong&gt; Mention the tech stack, context, and what led you to encounter the bug.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Describe the Problem:&lt;/strong&gt; Share the specific behavior or performance issues caused by the bug.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Share the Solution:&lt;/strong&gt; Briefly describe how you resolved it. Did you find an elegant fix or a temporary workaround?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key Takeaways:&lt;/strong&gt; Are there any lessons learned or insights that others could benefit from?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code Snippets:&lt;/strong&gt; If applicable, feel free to share code snippets but make sure to redact sensitive information.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Be Respectful:&lt;/strong&gt; Different skill levels are at play, so let’s be constructive and respectful with our comments and responses.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Happy debugging! 🛠&lt;/p&gt;




&lt;p&gt;Cover photo by &lt;a href="https://unsplash.com/@davidclode?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;David Clode&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/iZJTmZAff8w?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>My Database History</title>
      <dc:creator>Arthur Kh</dc:creator>
      <pubDate>Mon, 25 Sep 2023 10:12:00 +0000</pubDate>
      <link>https://dev.to/arthurkh/my-database-history-mfg</link>
      <guid>https://dev.to/arthurkh/my-database-history-mfg</guid>
      <description>&lt;p&gt;My first ever public pet project &lt;a href="https://t.me/songlyrbot" rel="noopener noreferrer"&gt;Lyrics Bot&lt;/a&gt; provided me lots of opportunities to experiment, especially in terms of database selection. I had a chance to explore lots of different options and to reach its limits. So now I'd like to share my experiences with these options.&lt;/p&gt;

&lt;p&gt;During the course of this project I've faced numerous challenges that tested my problem-solving skills. Whether it was optimizing the database for faster retrieval or ensuring data consistency, each challenge taught me its own lessons. Reflecting on these hurdles not only enriched my understanding of database management but also deepened my appreciation of intricate balance between efficiency and reliability in technology.&lt;/p&gt;

&lt;h2&gt;
  
  
  RAM
&lt;/h2&gt;

&lt;p&gt;In the first version of the project I stored everything in RAM to build a POC (Proof Of Concept). I was aware that this approach wouldn't be sustainable in long term. Fortunately I knew it wouldn't go in production, so I began exploring data persistence options, starting with the most obvious choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  VERY BIG JSON FILE
&lt;/h2&gt;

&lt;p&gt;I chose to maintain my RAM state as it was, without altering any code. Instead of altering the code I saved everything to a JSON file by using Node's standard &lt;code&gt;fs&lt;/code&gt; (file system) package.&lt;/p&gt;

&lt;p&gt;I used synchronous file-writing functions. Every time I updated the global database object, I wrote the changes to the file. I hit my first bottleneck when I reached 1,000 users. Due to the frequency and volume of data changes my VPS (Virtual Private Server) couldn't handle it. This prompted my decision to switch the storage for a second time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multiple JSON files
&lt;/h2&gt;

&lt;p&gt;I selected the transition to multiple JSON files to manage the volume more effectively, and it worked well. I also implemented a savvy approach: I adopted the Repository pattern for the data management. I made this decision because I wanted to avoid the logic altering each time I change the data storage method. For now I'm aiming to apply this pattern universally.&lt;/p&gt;

&lt;p&gt;In simple terms, to use this pattern you should:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Define a repository class/object. This class should offer an interface to the code that manipulates the data.&lt;/li&gt;
&lt;li&gt;Modify and access data solely through the repository. Avoid any direct interactions with storage in your business logic. If you ever decide to switch, direct interactions would require updates. If you need specific data manipulations, update the Repository class to provide this functionality.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After adopting multiple JSON files and the Repository pattern I encountered my next challenge when reaching 20,000 users: the write/read operations began delaying responses.&lt;/p&gt;

&lt;h2&gt;
  
  
  NeDB
&lt;/h2&gt;

&lt;p&gt;NeDB is akin to SQLite, but designed for the JSON ecosystem. It offers an interface similar to what MongoDB provides for data collection management. If you recall, I implemented the Repository pattern in my code earlier, so this was the only aspect I needed to change. The smooth transition reinforced that I had made the right choice in terms of code structure. Following this, my bot operated seamlessly for years until I encountered the next bottleneck.&lt;/p&gt;

&lt;p&gt;When reaching approximately 120,000 users, I stumbled upon one of NeDB's shortcomings: the problem of reading large files. The system attempted to read the entire file in one go, hitting Node.js's MAX_STRING_LENGTH limit. This error was a really first for me and took me by surprise. However, &lt;a href="https://masterarthur.xyz/blog/gently-reminder-to-set-up-backups" rel="noopener noreferrer"&gt;thanks to the backup mechanism I had in place&lt;/a&gt; my data remained intact. Subsequently I transitioned to MongoDB.&lt;/p&gt;

&lt;h2&gt;
  
  
  MongoDB
&lt;/h2&gt;

&lt;p&gt;My transitioning to MongoDB was swift and straightforward, primarily due to my prior use of the Repository pattern; I only had to update a single file. I was optimistic with that my MongoDB setup would be long-lasting. However, the unforeseen circumstances surrounding &lt;a href="https://en.wikipedia.org/wiki/Russian_invasion_of_Ukraine" rel="noopener noreferrer"&gt;the Russian invasion of Ukraine&lt;/a&gt; led to my server crashing, resulted loss of the most of my data and projects. Fortunately I've since managed to recover and relocate everything I could to &lt;a href="https://www.digitalocean.com/" rel="noopener noreferrer"&gt;Digital Ocean&lt;/a&gt; (&lt;a href="https://m.do.co/c/a67292d1e44f" rel="noopener noreferrer"&gt;My referral link&lt;/a&gt;). So now everything is back in operation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In retrospect, the journey of developing and maintaining my Lyrics Bot has been a tale of continuous learning and adaptation. From the initial choice of storing data in RAM to transitioning through various database systems, each step carried its unique challenges and insights. The unpredictable events, such as server crashes due to external geopolitical factors, reinforced the importance of flexibility, foresight, and the necessity of having robust backup mechanisms. The Repository pattern served as a testament to the value of scalable code architecture, making transitions smoother and more manageable.&lt;/p&gt;

&lt;p&gt;Through all the ups and downs this experience has profoundly shaped my perspective on technology, infrastructure management and the impermanence of digital assets. Embracing challenges, being prepared for the unexpected and continuously learning from experiences are the cornerstones of successful digital project management.&lt;/p&gt;

&lt;p&gt;Be sure to follow my &lt;a href="https://dev.to/mainarthur"&gt;dev.to account&lt;/a&gt; and &lt;a href="https://t.me/MainArthur" rel="noopener noreferrer"&gt;Telegram channel&lt;/a&gt;; there will be even more content soon.&lt;/p&gt;

</description>
      <category>database</category>
      <category>programming</category>
      <category>testing</category>
      <category>story</category>
    </item>
    <item>
      <title>"Мобильная" разработка. [Системы контроля версий, Git]</title>
      <dc:creator>Arthur Kh</dc:creator>
      <pubDate>Fri, 08 Sep 2023 09:56:23 +0000</pubDate>
      <link>https://dev.to/arthurkh/mobilnaia-razrabotka-sistiemy-kontrolia-viersii-git-2bf2</link>
      <guid>https://dev.to/arthurkh/mobilnaia-razrabotka-sistiemy-kontrolia-viersii-git-2bf2</guid>
      <description>&lt;h2&gt;
  
  
  Системы контроля версий
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Системы Контроля Версий (СКВ или SCM)&lt;/strong&gt; - это инструменты, которые позволяют отслеживать изменения в коде и других файлах, обеспечивая возможность возвращаться к предыдущим версиям и совмещать изменения от разных источников. В этой статье мы рассмотрим, что такое СКВ, какие их виды существуют и в чём их преимущества. Здесь же подробно рассмотрим и самую популярную СКВ - Git.&lt;/p&gt;

&lt;h3&gt;
  
  
  Виды СКВ
&lt;/h3&gt;

&lt;p&gt;Системы контроля версий делятся на два основных типа:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Централизованные СКВ (ЦСКВ)&lt;/strong&gt;: у таких систем есть единый центральный сервер, на котором хранятся все версии файлов. Примером может служить Subversion (SVN).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Распределённые СКВ (РСКВ)&lt;/strong&gt;: каждый участник имеет свою локальную копию репозитория (хранилища), содержащую всю историю изменений. Примером является Git.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Преимущества использования СКВ
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Отслеживание изменений&lt;/strong&gt;: вы всегда можете узнать, кто, когда и что изменил.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Совместная работа&lt;/strong&gt;: несколько разработчиков могут одновременно работать над проектом без конфликтов.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Безопасность&lt;/strong&gt;: в случае ошибок или сбоев можно легко вернуться к стабильной версии.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Эффективное слияние&lt;/strong&gt;: СКВ помогает объединять изменения из разных веток разработки.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Популярные системы контроля версий
&lt;/h3&gt;

&lt;p&gt;Из самых распространённых систем контроля версий следует выделить следующие:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Git&lt;/strong&gt;: наиболее популярная РСКВ, используется в таких сервисах, как GitHub, GitLab и Bitbucket.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subversion (SVN)&lt;/strong&gt;: ещё одна популярная ЦСКВ, но менее актуальная, нежели Git.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mercurial&lt;/strong&gt;: РСКВ, во многом похожая на Git, но с некоторыми отличиями в интерфейсе и подходах.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Git
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Git&lt;/strong&gt; - это распределённая система контроля версий, которая позволяет нескольким разработчикам одновременно работать с одним и тем же кодом, не мешая при этом друг другу. Она была создана Линусом Торвальдсом в 2005 году для разработки ядра Linux. Сегодня Git является одной из самых популярных и распространённых систем контроля версий.&lt;/p&gt;

&lt;h3&gt;
  
  
  Основные понятия Git
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Репозиторий (repository)&lt;/strong&gt;: это хранилище, в котором находятся ваш код, история всех изменений, ветки для разработки и другая важная информация.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Коммит (commit)&lt;/strong&gt;: отдельное изменение или набор изменений. Каждый коммит имеет свой уникальный идентификатор.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ветка (branch)&lt;/strong&gt;: независимый поток разработки. С помощью веток можно разрабатывать новые функции, не затрагивая основной код.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Слияние (merge)&lt;/strong&gt;: процесс объединения изменений в одной ветке с изменениями в другой.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rebase&lt;/strong&gt;: это процесс переприменения коммитов из одной ветки на другую. В отличие от слияния, которое объединяет историю двух веток, rebase создаёт новые коммиты для каждого коммита в исходной ветке. Это делает историю коммитов более линейной.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Установка Git
&lt;/h3&gt;

&lt;p&gt;Несмотря на то, что Git сам по себе можно использовать только локально, обычно он используется совместно с такими хостингами репозиториев, как GitHub или gitlab. В этом гайде мы будем использовать GitHub. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Перейдите на сайт GitHub&lt;/strong&gt;: откройте веб-браузер и перейдите на &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;github.com&lt;/a&gt;.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3b7w3d8lp8um98055oso.png" alt="Github homepage" width="800" height="1422"&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Регистрация&lt;/strong&gt;: на главной странице вам будет предложено создать учётную запись (Sign up). Введите адрес электронной почты, пароль и желаемое имя пользователя.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx2x8pb9swzqbdiwhbv0h.png" alt="Sign up example" width="800" height="1422"&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Подтверждение регистрации&lt;/strong&gt;: после ввода данных нажмите на кнопку "Sign up for GitHub". Вам может быть предложено решить простую капчу для подтверждения, что вы не робот.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Выбор тарифного плана&lt;/strong&gt;: GitHub предлагает различные тарифные планы, включая также и бесплатный. Выберите тот, который подходит вам лучше всего. Для большинства индивидуальных пользователей и малых проектов бесплатного плана будет достаточно.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Настройка дополнительных параметров&lt;/strong&gt;: вам может быть предложено ответить на несколько вопросов, чтобы помочь GitHub понять, как вы планируете использовать платформу. Этот шаг можно пропустить.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Подтверждение электронной почты&lt;/strong&gt;: перейдите на свой почтовый ящик, который вы указали при регистрации. Вы должны получить письмо от GitHub с ссылкой для подтверждения вашего адреса электронной почты. Нажмите на эту ссылку, чтобы завершить процесс регистрации.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Завершение регистрации&lt;/strong&gt;: после подтверждения адреса электронной почты вы будете перенаправлены на GitHub, где сможете начать работу с платформой.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj0ksmrp18ui1wkqoseh7.png" alt="Gtihub dashboard" width="800" height="1422"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Теперь мы можем установить &lt;code&gt;git&lt;/code&gt; в наш эмулятор консоли Termux. Для этого используем стандартный пакетный менеджер &lt;code&gt;pkg&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pkg &lt;span class="nb"&gt;install &lt;/span&gt;git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;И сразу же проверим доступность новой команды, выведя её версию:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjk0o92y1rl9u1fukcywn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjk0o92y1rl9u1fukcywn.png" alt="git installation" width="800" height="1422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Настройка git
&lt;/h3&gt;

&lt;p&gt;После установки нам следует сразу же настроить git. И начнём мы с настройки пользователя. Для этого нужно установить своё имя и адрес электронной почты. Это важно, потому что каждый коммит в Git содержит эту информацию:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; user.name &lt;span class="s2"&gt;"ваш юзернейм, который вы указали при регистрации в GitHub"&lt;/span&gt;
git config &lt;span class="nt"&gt;--global&lt;/span&gt; user.email &lt;span class="s2"&gt;"ваша_почта@example.com, которую вы указали при регистрации в GitHub"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Для моего случая это будет:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj3xxtddhp6xb7ojf7331.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj3xxtddhp6xb7ojf7331.png" alt="my git config fill" width="800" height="134"&gt;&lt;/a&gt;&lt;br&gt;
Настройка цветового вывода команд:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--global&lt;/span&gt; color.ui &lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Чтобы проверить установленные настройки:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git config &lt;span class="nt"&gt;--list&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyadzsa47nsb91gcv7sgv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyadzsa47nsb91gcv7sgv.png" alt="config list" width="800" height="158"&gt;&lt;/a&gt;&lt;br&gt;
Теперь же &lt;strong&gt;очень важно&lt;/strong&gt; настроить авторизацию с GitHub. При каждом взаимодействии с GitHub (например, когда вы загружаете свои изменения или подтягиваете их с сервера) вам нужно будет авторизоваться. Самый простой, безопасный и общепринятый вариант авторизации при работе с &lt;code&gt;git&lt;/code&gt; - это использовать &lt;strong&gt;SSH ключи&lt;/strong&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Для начала нам скорее всего понадобится установить OpenSSH локально. Для этого мы снова можем использовать &lt;code&gt;pkg&lt;/code&gt;:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pkg &lt;span class="nb"&gt;install &lt;/span&gt;openssh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc3n2e7kq1zlowz9yx2pv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc3n2e7kq1zlowz9yx2pv.png" alt="openssh installation" width="800" height="1422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Сгенерируем ключи для GitHub:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/.ssh
ssh-keygen
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7d82xrslcgw8iu9l6wxu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7d82xrslcgw8iu9l6wxu.png" alt="ssh-keygen" width="800" height="773"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Теперь нам нужно скопировать наш публичный ключ. Он нам понадобится для настроек GitHub.
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;id_rsa.pub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvyn0fwlwmmjlv4tr8h3k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvyn0fwlwmmjlv4tr8h3k.png" alt="public key example" width="800" height="384"&gt;&lt;/a&gt;&lt;br&gt;
Чтобы скопировать текст в Termux, нужно зажать текст, который вы хотите выделить, и тогда появятся стандартные кнопки для выделения и кнопка скопировать. Выделяем &lt;strong&gt;весь выведенный&lt;/strong&gt; текст и копируем его:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyhkg546xccz33sanji2k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyhkg546xccz33sanji2k.png" alt="termux copy" width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Теперь переходим в настройки аккаунта Github, чтобы установить наш публичный SSH ключ.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Откроем боковое меню, нажав на аватарку:
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb35w45n8kbnbl2tuhk9i.png" alt="Side menu" width="800" height="370"&gt;
&lt;/li&gt;
&lt;li&gt;Выберем настройки:
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2m7esca74cya4adyzpqm.png" alt="settings" width="800" height="1542"&gt;
&lt;/li&gt;
&lt;li&gt;На странице настроек выберем &lt;em&gt;"SSH and GPG keys"&lt;/em&gt;:&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp2qk3jyed1nu5xu2mc28.png" alt="ssh gpg keys" width="800" height="358"&gt;
&lt;/li&gt;
&lt;li&gt;И нажимаем на &lt;em&gt;"New SSH Key"&lt;/em&gt;, чтобы добавить наш SSH ключ:
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxhpcjvnn4ixfuwlwyggm.png" alt="Add new SSH Key" width="800" height="517"&gt;
&lt;/li&gt;
&lt;li&gt;Теперь мы можем заполнить форму для добавления SSH ключа. Названия ключа может быть любым, но лучше всего указать &lt;em&gt;"termux"&lt;/em&gt;, чтобы потом точно знать, к какому именно устройству привязан ключ. Тип указываем или оставляем &lt;em&gt;"Authentication key"&lt;/em&gt; и вставляем скопированный публичный SSH ключ из Termux. После чего нажимаем &lt;em&gt;"Add SSH Key"&lt;/em&gt;, чтобы сохранить его.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7lnpjx68o640ogrbjvpz.png" alt="new ssh key addition page" width="800" height="1135"&gt;
&lt;/li&gt;
&lt;li&gt;Если вы всё сделали правильно, то после добавления появится сообщение об успешном добавлении нового SSH ключа:
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx3jiwhnkxhdcag4zta51.png" alt="SSH success message" width="800" height="412"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Теперь мы настроили git, подключили его к GitHub и можем приступить к созданию своего первого репозитория.&lt;/p&gt;
&lt;h3&gt;
  
  
  Создание репозитория
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Репозиторий Git&lt;/strong&gt; - это специально организованное хранилище, в котором сохраняется история изменений проекта и различная информация, необходимая для работы системы контроля версий Git. Простыми словами, это место, где Git хранит все данные о вашем проекте.&lt;/p&gt;

&lt;p&gt;Существуют два основных типа репозиториев Git:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Локальный репозиторий&lt;/strong&gt;: это репозиторий, который находится на вашем компьютере. Когда вы инициализируете новый репозиторий с помощью команды &lt;code&gt;git init&lt;/code&gt; или клонируете существующий репозиторий с помощью &lt;code&gt;git clone&lt;/code&gt;, вы работаете с локальным репозиторием. Он содержит все коммиты, ветки, теги и другую информацию, связанную с историей проекта.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Удалённый репозиторий&lt;/strong&gt;: это версия вашего репозитория, которая хранится в интернете или на каком-либо удалённом сервере. Примеры платформ для хостинга удалённых репозиториев - GitHub, GitLab, Bitbucket и другие. Удалённые репозитории используются для совместной работы с другими разработчиками, а также для резервного копирования вашего проекта. Команды, такие как &lt;code&gt;git push&lt;/code&gt; и &lt;code&gt;git pull&lt;/code&gt;, позволяют вам взаимодействовать с удалёнными репозиториями, отправляя изменения на сервер или получая изменения с него.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Мы начнем с создания удалённого репозитория:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Переходим в GitHub и открываем боковое меню, как мы делали при настройке SSH ключей, и нажимаем на "плюс":
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyqk1dcax7gptxkeih6a6.png" alt="plus" width="800" height="442"&gt;
&lt;/li&gt;
&lt;li&gt;Нажимаем на &lt;em&gt;"New repository"&lt;/em&gt;:
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzfusm9bpnej2eqa6nwa2.png" alt="New repository" width="800" height="746"&gt;
&lt;/li&gt;
&lt;li&gt;После этого у нас откроется форма для создания репозитория. Для начала нам будет достаточно просто ввести своё имя для репозитория. Нажимаем &lt;em&gt;"Create repository"&lt;/em&gt;. Я буду использовать для первого репозитория имя &lt;code&gt;my-first-repo&lt;/code&gt;:
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foiojtntd3gmn6f1xpgc5.png" alt="first repo" width="800" height="763"&gt; 
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe5k8k666zg4yzu01gj4n.png" alt="create repository" width="800" height="1071"&gt;
&lt;/li&gt;
&lt;li&gt;Теперь нам открылась пустая страница нового репозитория.  Здесь мы выбираем тип SSH и копируем команды для создания репозитория из терминала:
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffidsq2y156gc15zxmtp0.png" alt="empty repository page" width="800" height="1273"&gt;
&lt;/li&gt;
&lt;li&gt;Открываем Termux. В нём переходим в домашнюю папку и создаём папку для репозитория:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd
mkdir &lt;/span&gt;my-first-repo
&lt;span class="nb"&gt;cd &lt;/span&gt;my-first-repo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fel1zmkp9jgw9mu4f7km3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fel1zmkp9jgw9mu4f7km3.png" alt="folder navigation" width="800" height="148"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Теперь вставляем команды, которые скопировали из GitHub:
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdoy576vmjf2yywdt83mn.png" alt="paste example" width="800" height="461"&gt;
&lt;/li&gt;
&lt;li&gt;Вызываем команды, нажав &lt;code&gt;Enter&lt;/code&gt;:
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3m4se94idv0j2py6yao9.png" alt="git init" width="800" height="923"&gt;
&lt;/li&gt;
&lt;li&gt;Ответив &lt;code&gt;yes&lt;/code&gt;, мы закончим процесс создания репозитория:
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbq8n4y4fa16by7d9t6xo.png" alt="git init finish" width="800" height="374"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Так мы создали свой первый удалённый репозиторий и его локальную копию. После этого мы можем приступить к созданию коммитов и веток.&lt;/p&gt;
&lt;h3&gt;
  
  
  Создание коммита
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Коммит (commit)&lt;/strong&gt; - это запись о наборе изменений в репозитории. Суть коммита - зафиксировать текущее состояние проекта в определённый момент времени. Это позволяет разработчикам отслеживать историю изменений, а также возвращаться к любому предыдущему состоянию проекта, если это необходимо.&lt;/p&gt;

&lt;p&gt;Каждый коммит в Git содержит:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ссылку на набор изменений&lt;/strong&gt; - детальное описание того, какие файлы были добавлены, изменены или удалены.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Уникальный идентификатор&lt;/strong&gt; - идентификатор (обычно хеш SHA-1), который позволяет Git однозначно идентифицировать коммит.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Информацию о коммиттере&lt;/strong&gt; - имя и адрес электронной почты того, кто совершил коммит.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Дату и время&lt;/strong&gt; создания коммита.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Сообщение коммита&lt;/strong&gt; - короткое описание изменений, внесённых в коммит, которое помогает разработчикам понять, что было сделано и почему.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Чтобы создать коммит, нужно выполнить следующие шаги:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Вносим изменения в любой файл проекта:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano code.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8qbeh769e16my0n9d49l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8qbeh769e16my0n9d49l.png" alt="code nano" width="800" height="637"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsa50k2p9hy7ixus148t4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsa50k2p9hy7ixus148t4.png" alt="cat code.sh" width="800" height="86"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Добавляем эти изменения в индекс с помощью команды
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &amp;lt;filename&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Обычно для добавления всех изменений вызывают &lt;code&gt;git add&lt;/code&gt; с текущей папкой &lt;code&gt;.&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Фиксируем изменения, создав коммит с помощью команды
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Ваше сообщение о коммите"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcn42kzsyrsuvrm6p57e9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcn42kzsyrsuvrm6p57e9.png" alt="git commit" width="800" height="236"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;С помощью коммитов вы можете просмотреть историю вашего проекта, а также перемещаться между различными состояниями кода. Чтобы вывести историю коммитов, можно использовать команду&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feayoeyzgjoh2dopbpqqf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feayoeyzgjoh2dopbpqqf.png" alt="git log" width="800" height="428"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Когда у вас образуется большое количество коммитов, нужно будет нажать&lt;/em&gt; &lt;code&gt;q&lt;/code&gt;, *чтобы выйти из режима лога.&lt;/p&gt;
&lt;h3&gt;
  
  
  Создание ветки
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Ветка (branch)&lt;/strong&gt; - это линия развития работы, изолированная от других линий развития. Ветка представляет собой независимый поток изменений, который может быть объединён с главной линией развития или другими ветками в любой момент времени.&lt;/p&gt;

&lt;p&gt;Ветвление позволяет работать над различными функциями или исправлениями одновременно, не влияя на основной код проекта. Когда новая функция или какое-то исправление готовы, изменения из этой ветки могут быть объединены (мердж) с главной веткой или другой веткой.&lt;/p&gt;

&lt;p&gt;Чтобы создать новую ветку и переключиться на неё, вы можете использовать команду:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout &lt;span class="nt"&gt;-b&lt;/span&gt; имя_новой_ветки
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Чтобы переключиться между ветками:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout имя_ветки
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Чтобы обновить ветку на GitHub (или другом удалённом репозитории):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin имя_ветки
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Создадим ветку для нашего изменения:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout &lt;span class="nt"&gt;-b&lt;/span&gt; new-branch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5qamm3ut75hx7hwhgtdq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5qamm3ut75hx7hwhgtdq.png" alt="git checkout" width="800" height="66"&gt;&lt;/a&gt;&lt;br&gt;
И обновим ветку в GitHub:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin new-branch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm3vsj782rzcs40boe215.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm3vsj782rzcs40boe215.png" alt="git push" width="800" height="515"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Теперь, после того как мы обновили ветку в GitHub, мы можем создать Pull Request, чтобы обновить основную ветку.&lt;/p&gt;

&lt;h3&gt;
  
  
  Создание Pull Request
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Пулреквест (Pull Request, часто сокращенно PR)&lt;/strong&gt; - это функциональность платформ управления репозиториями, таких как GitHub, GitLab или Bitbucket. Пулреквест представляет собой предложение внести изменения из одной ветки в другую, чаще всего из ветки в вашем форке репозитория в основную ветку оригинального репозитория.&lt;/p&gt;

&lt;p&gt;Пулреквесты служат не только средством предложения изменений, но и платформой для обсуждения этих изменений с другими участниками проекта. &lt;/p&gt;

&lt;p&gt;Пулреквесты позволяют:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Просматривать изменения&lt;/strong&gt;: вы и другие участники проекта можете просмотреть предложенные изменения перед их интеграцией.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Обсуждать детали&lt;/strong&gt;: в комментариях к пулреквесту можно обсудить детали предложенных изменений, задать вопросы или предложить дополнения.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Проводить ревью кода&lt;/strong&gt;: другие разработчики могут рассмотреть код на предмет ошибок или улучшений.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Тестировать изменения&lt;/strong&gt;: некоторые системы позволяют автоматически запускать тесты на код из пулреквеста, чтобы убедиться, что предложенные изменения не нарушают функциональность проекта.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Чтобы создать пулреквест, переходим в наш репозиторий GitHub и переходим во вкладку Pull Request:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Во вкладке Pull Request нажимаем на &lt;em&gt;"New"&lt;/em&gt;:
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsgvbn96b01o7kf7bfrx1.png" alt="PR Page" width="800" height="1162"&gt;
&lt;/li&gt;
&lt;li&gt;Далее выбираем ветку, изменения которой мы хотим внести в основную ветку:
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0u8drwbd3ydcjtcjzu9d.png" alt="branch selection 1" width="800" height="534"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxayyyjit3x1kzn5clbuj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxayyyjit3x1kzn5clbuj.png" alt="branch selection 2" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;После этого нажимаем на "Create pull request". Здесь мы уже можем увидеть, какие изменения будут внесены:
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fih48m1m12fcpn93i7l9p.png" alt="Create Pull Request" width="800" height="740"&gt;
&lt;/li&gt;
&lt;li&gt;На странице Pull Request можно вести обсуждение по изменению; перейдя во вкладку "Commits", можно увидеть коммиты, которые будут добавлены. Проскролим вниз, чтобы принять наш Pull Request:
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy47wjn21hhlyqb97j2es.png" alt="PR Page" width="800" height="1017"&gt;
&lt;/li&gt;
&lt;li&gt;Внизу мы можем принять наши изменения, отклонить их или написать комментарий. Для принятия наших изменений нажмём &lt;em&gt;"Merge pull request"&lt;/em&gt;:
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frzf33dub1xa1vhxssy7y.png" alt="Merge, Close Buttons" width="800" height="1162"&gt;
И подтвердим:
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs13caajxfep6o02z1mpj.png" alt="Confirm merge" width="800" height="479"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Теперь мы можем перейти на главную страницу репозитория и увидеть наши изменения:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyhct68fea3psfym1qa8f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyhct68fea3psfym1qa8f.png" alt="repo page" width="800" height="518"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd145ocz6doem5u5owsdj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd145ocz6doem5u5owsdj.png" alt="code.sh content" width="800" height="610"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Итог
&lt;/h2&gt;

&lt;p&gt;Системы контроля версий являются незаменимым инструментом для всех современных разработчиков. Они обеспечивают безопасность, стабильность и эффективность процесса разработки. Вне зависимости от того, трудитесь ли вы над маленьким проектом один или над крупным проектом в команде, СКВ предоставят вам полезные ресурсы для успешной работы.&lt;/p&gt;

&lt;p&gt;В свою очередь, конкретно Git - очень мощный инструмент для управления версиями, который стал стандартом для индустрии. В этой статье мы освоили основные команды и понятия, и теперь вы сможете эффективно управлять своим кодом, а также сотрудничать с другими разработчиками. Впереди, конечно же, вас ждёт ещё множество других возможностей Git, и вы позднее сможете освоить их по необходимости.&lt;/p&gt;

&lt;h2&gt;
  
  
  Полезные ссылки
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Официальные ресурсы&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/" rel="noopener noreferrer"&gt;Официальный сайт Git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/doc" rel="noopener noreferrer"&gt;Официальная документация Git&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Обучающие ресурсы&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://git-scm.com/book/en/v2" rel="noopener noreferrer"&gt;Pro Git book&lt;/a&gt; - бесплатная книга на официальном сайте Git. Она доступна на многих языках и охватывает почти все аспекты работы с Git.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://githowto.com/" rel="noopener noreferrer"&gt;Git How To&lt;/a&gt; - интерактивное руководство для изучения Git.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Вспомогательные инструменты&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.toptal.com/developers/gitignore" rel="noopener noreferrer"&gt;Gitignore.io&lt;/a&gt; - генератор файлов &lt;code&gt;.gitignore&lt;/code&gt; для различных сред разработки.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://git-school.github.io/visualizing-git/" rel="noopener noreferrer"&gt;Visualizing Git&lt;/a&gt; - интерактивная визуализация для понимания команд Git.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Полезные статьи и руководства&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://nvie.com/posts/a-successful-git-branching-model/" rel="noopener noreferrer"&gt;A successful Git branching model&lt;/a&gt; - известная модель ветвления от Vincent Driessen.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.github.com/en/get-started/quickstart/github-flow" rel="noopener noreferrer"&gt;GitHub Flow&lt;/a&gt; - понимание процесса ветвления и слияния на GitHub.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/git-tips/tips" rel="noopener noreferrer"&gt;Git Tips&lt;/a&gt; - сборник полезных советов и трюков по Git.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Курсы и видео&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/watch?v=SWYqp7iY_Tc" rel="noopener noreferrer"&gt;Git and GitHub Crash Course&lt;/a&gt; на YouTube.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.linkedin.com/learning/git-essential-training-the-basics" rel="noopener noreferrer"&gt;Git Essential Training&lt;/a&gt; на LinkedIn Learning.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Форумы и сообщества&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://stackoverflow.com/questions/tagged/git" rel="noopener noreferrer"&gt;Stack Overflow Git tags&lt;/a&gt; - для решения конкретных проблем и вопросов по Git.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.reddit.com/r/git/" rel="noopener noreferrer"&gt;Reddit r/git&lt;/a&gt; - сообщество для обсуждения новостей, вопросов и лучших практик, связанных с Git.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/t/git"&gt;dev.to Git tags&lt;/a&gt; - другие статьи на dev.to на тему git.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;Обязательно подписывайтесь на мой аккаунт &lt;a href="https://dev.to/mainarthur"&gt;dev.to&lt;/a&gt; и Telegram-канал, скоро будет ещё больше контента:&lt;/em&gt; &lt;a href="https://t.me/MainArthur" rel="noopener noreferrer"&gt;https://t.me/MainArthur&lt;/a&gt;&lt;/p&gt;

</description>
      <category>git</category>
      <category>bash</category>
      <category>github</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Gently reminder to set up backups</title>
      <dc:creator>Arthur Kh</dc:creator>
      <pubDate>Tue, 22 Aug 2023 08:56:43 +0000</pubDate>
      <link>https://dev.to/arthurkh/gently-reminder-to-set-up-backups-151i</link>
      <guid>https://dev.to/arthurkh/gently-reminder-to-set-up-backups-151i</guid>
      <description>&lt;h2&gt;
  
  
  What is a Backup?
&lt;/h2&gt;

&lt;p&gt;At its core, a backup refers to the process of copying and storing data from your primary storage to another location. This duplicated data guarantees that in the event of a hardware failure, software error or any other form of data loss there is a second copy existing to restore the lost information.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Are Backups Important?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Protection Against Hardware Failures.&lt;/strong&gt; All hardware, from the most robust servers to personal smartphones, has a finite lifespan. Over time these devices can malfunction or break down entirely. Without backups the data stored on these devices could be lost forever.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Defense Against Cyber Threats.&lt;/strong&gt; Malware, ransomware and other malicious software can corrupt or encrypt your data, making it inaccessible. A solid backup strategy can help users recover from such threats without paying hefty ransoms or losing data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guarding Against Human Error.&lt;/strong&gt; Mistakes happen. Files may be accidentally deleted or overwritten. In such cases having a backup allows for a swift restoration, minimizing disruptions and potential losses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Historical Record Keeping.&lt;/strong&gt; Backups also serve as historical records for businesses. They allow organizations to access previous document versions or to recover information that might not be immediately relevant but becomes crucial down the line.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance and Regulations.&lt;/strong&gt; Many industries have strict data retention requirements. Healthcare and finance, for instance, have regulations necessitating the secure storage of data for extended periods. Backups help these sectors remain compliant.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Peace of Mind.&lt;/strong&gt; Knowing that your data is safe and recoverable provides an invaluable peace of mind. This is especially important for businesses where data loss could translate to significant monetary losses or reputational damage.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Best Practices for Backups:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;3-2-1 Rule.&lt;/strong&gt; Always have at least three copies of your data. Two of these are locally stored on different devices, and one is stored offsite (like a cloud storage or a remote server).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regular Backups.&lt;/strong&gt; Schedule your automatic backups, whether daily, weekly or monthly, depending on the critical nature of the data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify the Backups.&lt;/strong&gt; From time to time test and verify backups to ensure they're functioning correctly and data is recoverable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Encrypt.&lt;/strong&gt; If your backup includes sensitive data, ensure that it's encrypted. This safeguards your data from potential threats, even if the backup storage itself is compromised.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stay Updated.&lt;/strong&gt; Just like any other software, backup software and the tools you use need to be updated regularly. Ensure you’re using the latest versions to benefit from the most recent security patches and functionalities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use git.&lt;/strong&gt; use git and git hostings like github or gitlab for keeping your code in cloud.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  My Story
&lt;/h2&gt;

&lt;p&gt;I really love to test in production (for my pet projects), so yesterday I discovered that the database for my bot &lt;a href="https://t.me/indbbot" rel="noopener noreferrer"&gt;https://t.me/indbbot&lt;/a&gt; is lost. This happened because I started restoring my old bots and it needed to update some MongoDB utilities. During the updates I decided to delete the MongoDB data to avoid migration issues (btw MongoDB doesn't have migration issues). Since I'm moving to a separate instance from DigitalOcean: &lt;a href="https://docs.digitalocean.com/products/databases/mongodb/" rel="noopener noreferrer"&gt;https://docs.digitalocean.com/products/databases/mongodb/&lt;/a&gt;, I wondered why I should keep anything on &lt;a href="https://www.digitalocean.com/solutions/vps-hosting" rel="noopener noreferrer"&gt;VPS&lt;/a&gt;. Fortunately, I have set up VPS backups so I successfully recovered all of my data. However, I remembered this only after several hours of finding the solution, which led me to experience a rollercoaster of emotions that I wouldn't recommend.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;em&gt;PLEASE SET UP BACKUPS WHEREVER POSSIBLE&lt;/em&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Be sure to follow my dev.to account and &lt;a href="https://t.me/MainArthur" rel="noopener noreferrer"&gt;Telegram channel&lt;/a&gt;; there will be even more content soon.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>backup</category>
      <category>productivity</category>
      <category>development</category>
      <category>motivation</category>
    </item>
    <item>
      <title>"Мобильная" разработка. [Bash и основные утилиты терминала]</title>
      <dc:creator>Arthur Kh</dc:creator>
      <pubDate>Fri, 18 Aug 2023 09:25:00 +0000</pubDate>
      <link>https://dev.to/mainarthur/mobilnaia-razrabotka-bash-i-osnovnyie-utility-tierminala-5445</link>
      <guid>https://dev.to/mainarthur/mobilnaia-razrabotka-bash-i-osnovnyie-utility-tierminala-5445</guid>
      <description>&lt;h2&gt;
  
  
  sh и bash
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;sh&lt;/code&gt; (Bourne Shell) и &lt;code&gt;bash&lt;/code&gt; (Bourne Again SHell) оба являются командными интерпретаторами (оболочками) для Unix-подобных систем, но между ними есть ряд ключевых различий:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;История&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;sh&lt;/code&gt;. Один из первых командных интерпретаторов для Unix, созданный Стивеном Борном в 1970-х годах.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;bash&lt;/code&gt;. Создан Брайаном Фоксом в рамках проекта GNU в конце 1980-х годов как свободная замена &lt;code&gt;sh&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Функциональные возможности&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;bash&lt;/code&gt; содержит все особенности &lt;code&gt;sh&lt;/code&gt;, плюс множество улучшений и дополнений. Например:

&lt;ul&gt;
&lt;li&gt;Поддержка истории команд.&lt;/li&gt;
&lt;li&gt;Поддержка автодополнения команд по нажатию &lt;code&gt;Tab&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Расширенные возможности тестирования с &lt;code&gt;[[ ]]&lt;/code&gt; вместо &lt;code&gt;[ ]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Функции и массивы.&lt;/li&gt;
&lt;li&gt;Улучшенный синтаксис для управления заданиями.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Совместимость&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;bash&lt;/code&gt; обычно работает в режиме совместимости с &lt;code&gt;sh&lt;/code&gt;, когда запущен как &lt;code&gt;sh&lt;/code&gt;, что позволяет ему исполнять скрипты, написанные для &lt;code&gt;sh&lt;/code&gt;. Однако есть некоторые особенности поведения &lt;code&gt;bash&lt;/code&gt;, которые могут не совпадать с традиционным &lt;code&gt;sh&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Популярность и распространение&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;bash&lt;/code&gt; стал стандартной оболочкой во многих Linux-дистрибутивах и macOS (хотя в последних версиях macOS заменён на zsh).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;sh&lt;/code&gt; часто ссылается на другие оболочки в современных системах. Например, в Debian &lt;code&gt;sh&lt;/code&gt; на самом деле является символической ссылкой на &lt;code&gt;dash&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Скрипты&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Если скрипт начинается с &lt;code&gt;#!/bin/sh&lt;/code&gt;, он должен быть совместим с &lt;code&gt;sh&lt;/code&gt; и не использовать особенности &lt;code&gt;bash&lt;/code&gt;, если только не известно, что &lt;code&gt;/bin/sh&lt;/code&gt; на самом деле является &lt;code&gt;bash&lt;/code&gt; (некоторые дистрибутивы могут заменять &lt;code&gt;/bin/sh&lt;/code&gt; на &lt;code&gt;bash&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;В общем, &lt;code&gt;bash&lt;/code&gt; - это более современная и функциональная оболочка по сравнению с &lt;code&gt;sh&lt;/code&gt;, но, тем не менее, &lt;code&gt;sh&lt;/code&gt; до сих пор продолжает оставаться важным стандартом совместимости. В дальнейшем мы будем использовать в Termux &lt;code&gt;bash&lt;/code&gt;, поэтому ниже рассмотрим все основные команды &lt;code&gt;bash&lt;/code&gt;, которые нам понадобятся.&lt;/p&gt;

&lt;h2&gt;
  
  
  Termux
&lt;/h2&gt;

&lt;p&gt;Как говорилось ранее, Termux - это приложение-эмулятор терминала. Именно его мы будем использовать для нашей работы. &lt;/p&gt;

&lt;p&gt;Termux использует &lt;code&gt;bash&lt;/code&gt; как свою оболочку терминала. Мы рассмотрим здесь далеко не все команды &lt;code&gt;bash&lt;/code&gt; - я расписал здесь только те, которые с наибольшей вероятностью понадобятся вам в будущем. К тому же, я крайне не рекомендую вам сейчас заучивать их все, так как справка по ним всегда доступна, а с опытом большая часть команд вообще станет использоваться на автомате. Советую просто пройтись по ним глазами и сразу же перейти к выполнению размещённого в конце домашнего задания, что сразу же даст куда более основательное понимание работы с терминалом. &lt;/p&gt;

&lt;h2&gt;
  
  
  Основные команды Bash
&lt;/h2&gt;

&lt;p&gt;В общем виде команда в &lt;code&gt;bash&lt;/code&gt; имеет такой синтаксис:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;command&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;OPTIONS] &lt;span class="o"&gt;[&lt;/span&gt;ARGUMENTS]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;[OPTIONS]&lt;/code&gt; - набор опций, которые обычно начинаются со знака "минус" &lt;code&gt;-&lt;/code&gt; для короткой версии опции (например, &lt;code&gt;-a&lt;/code&gt;) или с двух знаков "минус" &lt;code&gt;--&lt;/code&gt; для полного названия опции (например, &lt;code&gt;--all&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;[ARGUMENTS]&lt;/code&gt; - аргументы к опциям или самой команде.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Клавиши быстрого доступа
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Ctrl + C&lt;/code&gt;: прервать текущую команду.
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.youtube.com/shorts/ZfURZ78XF_g" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--UMnO6SzM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.ytimg.com/vi/ZfURZ78XF_g/hq2.jpg%3Fsqp%3D-oaymwEoCOADEOgC8quKqQMcGADwAQH4Af4EgAKgCYoCDAgAEAEYZSBlKGUwDw%3D%3D%26rs%3DAOn4CLA3iSemV2vrz-pjoScl6wcSy8nvvg" height="360" class="m-0" width="480"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.youtube.com/shorts/ZfURZ78XF_g" rel="noopener noreferrer" class="c-link"&gt;
          Ctrl+C Example - YouTube
        &lt;/a&gt;
      &lt;/h2&gt;
        
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://res.cloudinary.com/practicaldev/image/fetch/s--QIiCHmfA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.youtube.com/s/desktop/4feff1e2/img/favicon.ico" width="16" height="16"&gt;
        youtube.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Также &lt;code&gt;Ctrl + C&lt;/code&gt; можно использовать, чтобы прервать текущий ввод длинной команды, которую вы больше не хотите выполнять.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Ctrl + Z&lt;/code&gt;: приостановить текущий процесс (можно вернуть на передний план с помощью &lt;code&gt;fg&lt;/code&gt;).

&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.youtube.com/shorts/34h2-sGgDdM" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--67Zxdawz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.ytimg.com/vi/34h2-sGgDdM/hq2.jpg%3Fsqp%3D-oaymwEoCOADEOgC8quKqQMcGADwAQH4Af4EgAKgCYoCDAgAEAEYZSBlKGUwDw%3D%3D%26rs%3DAOn4CLBzPX38-0TXgYVPTzj0zDYsJhMv_A" height="360" class="m-0" width="480"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.youtube.com/shorts/34h2-sGgDdM" rel="noopener noreferrer" class="c-link"&gt;
          Ctrl + Z and fg - YouTube
        &lt;/a&gt;
      &lt;/h2&gt;
        
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://res.cloudinary.com/practicaldev/image/fetch/s--QIiCHmfA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.youtube.com/s/desktop/4feff1e2/img/favicon.ico" width="16" height="16"&gt;
        youtube.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Ctrl + D&lt;/code&gt;: завершить текущую сессию.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Ctrl + L&lt;/code&gt;: очистить экран.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Ctrl + R&lt;/code&gt;: обратный поиск в истории команд.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Ctrl + A&lt;/code&gt;: перейти в начало строки.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Ctrl + E&lt;/code&gt;: перейти в конец строки.&lt;/li&gt;
&lt;li&gt;Нажмите &lt;code&gt;Tab&lt;/code&gt; после начала ввода имени файла, директории или команды, и терминал попробует автоматически его дополнить.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Навигация
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ls&lt;/code&gt;: показать содержимое директории: не скрытые папки и файлы.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdge1f05sgltrmpu9xoql.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdge1f05sgltrmpu9xoql.png" alt="ls пример работы" width="800" height="70"&gt;&lt;/a&gt;&lt;br&gt;
Чтобы увидеть скрытые папки и файлы (в Unix системах они начинаются с точки в названии файла), необходимо добавить аргумент &lt;code&gt;-a&lt;/code&gt; к команде.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxofpof8vmdjkblxrurzy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxofpof8vmdjkblxrurzy.png" alt="ls -a" width="800" height="142"&gt;&lt;/a&gt;&lt;br&gt;
Если добавить аргумент &lt;code&gt;-l&lt;/code&gt;, команда выведет каждый файл/папку отдельной строкой. Можно скомбинировать с аргументом  &lt;code&gt;-a&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-la&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fayargu5gyd7c3cnk4av5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fayargu5gyd7c3cnk4av5.png" alt="ls -la" width="800" height="727"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;pwd&lt;/code&gt;: вывести текущую рабочую директорию.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;pwd&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm9i5sqpx24kyul0b9838.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm9i5sqpx24kyul0b9838.png" alt="pwd" width="800" height="66"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cd&lt;/code&gt;: изменение директории. По умолчанию вы находитесь в домашней папке &lt;code&gt;~&lt;/code&gt;, а изменить директорию можно, передав новый путь к команде &lt;code&gt;cd newFolder&lt;/code&gt;, &lt;code&gt;cd newFolder/subFolder/subSubFolder&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;folderA
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fex3k0rcodbaj77avt5rg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fex3k0rcodbaj77avt5rg.png" alt="cd/pwd" width="800" height="196"&gt;&lt;/a&gt;&lt;br&gt;
Чтобы вернуться назад, можно использовать &lt;code&gt;cd -&lt;/code&gt; - вы вернётесь к папке, в которой находились до предыдущего вызова &lt;code&gt;cd&lt;/code&gt;, а вызвав &lt;code&gt;cd ..&lt;/code&gt;, вы перейдёте к родительской папке.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ..
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fknln16f5rvaamm14xdcb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fknln16f5rvaamm14xdcb.png" alt="cd .., cd -" width="800" height="227"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Файловые операции
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;touch&lt;/code&gt;: создать пустой файл. Для применения достаточно просто дописать имя файла &lt;code&gt;touch newFile&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;touch &lt;/span&gt;newFile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft6xnb4gbjtmrzgwejhio.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft6xnb4gbjtmrzgwejhio.png" alt="touch newFile" width="800" height="89"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;mkdir&lt;/code&gt;: создать директорию. Работает аналогично &lt;code&gt;touch&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;subFolderB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl701i8ir776ieej0o3jy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl701i8ir776ieej0o3jy.png" alt="mkdir" width="800" height="108"&gt;&lt;/a&gt;&lt;br&gt;
Если необходимо создать целую вложенность из папок, можно использовать аргумент &lt;code&gt;-p&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;subFolderC/subSubFolderD &lt;span class="nt"&gt;-p&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6c6bc34vke0bab3wzgtp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6c6bc34vke0bab3wzgtp.png" alt="mkdir -p" width="800" height="180"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cp&lt;/code&gt;: копировать файлы или директории. Для использования команды нужно передать путь к старому файлу и путь к новому файлу.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp &lt;/span&gt;oldPath newCopy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5r2fjof5mikuv5xzbfjm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5r2fjof5mikuv5xzbfjm.png" alt="cp" width="800" height="85"&gt;&lt;/a&gt;&lt;br&gt;
Для копирования папок необходим аргумент &lt;code&gt;-r&lt;/code&gt; в конце команды.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;mv&lt;/code&gt;: переместить или переименовать файлы/директории. Аналогичен &lt;code&gt;cp&lt;/code&gt;, только он переименовывает или перемещает файлы вместо копирования
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mv &lt;/span&gt;oldFileName newFileName
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0xphvkq5o5gudb6o8c1i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0xphvkq5o5gudb6o8c1i.png" alt="mv" width="800" height="165"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;rm&lt;/code&gt;: удалить файлы или директории. Чтобы удалить файл, достаточно передать к нему путь, а для удаления папки потребуется передать аргумент &lt;code&gt;-r&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;rm &lt;/span&gt;subFolderA &lt;span class="nt"&gt;-r&lt;/span&gt;
&lt;span class="nb"&gt;rm &lt;/span&gt;fileName
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbnbbwel8kxaen7ad0jxi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbnbbwel8kxaen7ad0jxi.png" alt="rm" width="800" height="178"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;rmdir&lt;/code&gt;: удалить пустую директорию. Аналогичен &lt;code&gt;rm&lt;/code&gt;.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;rmdir &lt;/span&gt;subFolderB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvxyc8u4nkjj5z2q8mf05.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvxyc8u4nkjj5z2q8mf05.png" alt="rmdir" width="800" height="104"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Текстовые редакторы
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;nano&lt;/code&gt;: простой текстовый редактор. Для того чтобы отредактировать новый или уже существующий файл, достаточно ввести &lt;code&gt;nano path/to/file&lt;/code&gt;, и нам откроется редактор &lt;code&gt;nano&lt;/code&gt;:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano fileToEdit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr8rr36d7f4i8fntfj4q6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr8rr36d7f4i8fntfj4q6.png" alt="nano" width="800" height="1422"&gt;&lt;/a&gt;&lt;br&gt;
Теперь мы можем вносить наши изменения в файл, практически как в обычно текстовом редакторе:&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0mwf8ggjp1n8qfnqgbzk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0mwf8ggjp1n8qfnqgbzk.png" alt="nano" width="800" height="1422"&gt;&lt;/a&gt;&lt;br&gt;
Снизу нам доступна панель действий (справка, поиск, замена, выход и другие):&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq5fbsrnp8hobsgy3qjxd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq5fbsrnp8hobsgy3qjxd.png" alt="nano" width="800" height="116"&gt;&lt;/a&gt;&lt;br&gt;
Чтобы вызвать какое-либо действие (например, выведем справку), нужно зажать &lt;code&gt;CTRL&lt;/code&gt; и соответствующую клавишу:&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1pupohhn0u02vs9dgrg9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1pupohhn0u02vs9dgrg9.png" alt="nano" width="800" height="438"&gt;&lt;/a&gt;&lt;br&gt;
И получаем нашу справку:&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F064rcyqmnfs7sp9jdtli.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F064rcyqmnfs7sp9jdtli.png" alt="nano" width="800" height="1422"&gt;&lt;/a&gt;&lt;br&gt;
Чтобы сохранить файл, нужно нажать &lt;code&gt;CTRL + x&lt;/code&gt;.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fehcr5237iar28pqxnt1m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fehcr5237iar28pqxnt1m.png" alt="nano" width="800" height="545"&gt;&lt;/a&gt;&lt;br&gt;
Выведется вопрос, желаете ли вы сохранить ваши изменения. Если нажать &lt;code&gt;N&lt;/code&gt;, изменения не сохранятся, а редактор закроется. &lt;code&gt;CTRL + c&lt;/code&gt; вернёт вас в режим редактирования, а &lt;code&gt;Y&lt;/code&gt; - сохранит ваши изменения.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fka1njtcb9xe9csxe8478.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fka1njtcb9xe9csxe8478.png" alt="nano" width="800" height="111"&gt;&lt;/a&gt;&lt;br&gt;
Нажимаем на &lt;code&gt;Y&lt;/code&gt;, чтобы сохранить файл. Дополнительно редактор спросит, как назвать файл, который вы хотите сохранить. Если всё указано правильно, достаточно нажать &lt;code&gt;Enter&lt;/code&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9gpf0lrqrcdl338gpco7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9gpf0lrqrcdl338gpco7.png" alt="nano" width="800" height="119"&gt;&lt;/a&gt;&lt;br&gt;
И мы можем воспользоваться командой &lt;code&gt;cat&lt;/code&gt;, чтобы вывести новое содержимое файла:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;fileToEdit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcfs3r4rxzt5256v31ssf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcfs3r4rxzt5256v31ssf.png" alt="nano cat" width="800" height="211"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;vi&lt;/code&gt; или &lt;code&gt;vim&lt;/code&gt;: расширенный текстовый редактор. &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;emacs&lt;/code&gt;: мощный текстовый редактор с множеством функций.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Для работы с &lt;code&gt;vi&lt;/code&gt;/&lt;code&gt;vim&lt;/code&gt; и &lt;code&gt;emacs&lt;/code&gt; крайне рекомендую рассмотреть их документации: &lt;a href="https://www.vim.org/docs.php"&gt;vim&lt;/a&gt;, &lt;a href="https://www.gnu.org/software/emacs/documentation.html"&gt;emacs&lt;/a&gt;, так как для раскрытия всех нюансов их работы и взаимодействия потребуются целые отдельные статьи, ориентированные на начинающего пользователя. В то же время nano вам будет более чем достаточно для решения большинства запросов по редактуре текста в терминале.&lt;/p&gt;

&lt;h3&gt;
  
  
  Работа с текстом
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;echo&lt;/code&gt;: вывести строку текста.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo &lt;/span&gt;Hello World!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foexodm5qha2f9zme3tsj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foexodm5qha2f9zme3tsj.png" alt="echo" width="800" height="108"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cat&lt;/code&gt;: вывести содержимое файла.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;fileToEdit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcfs3r4rxzt5256v31ssf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcfs3r4rxzt5256v31ssf.png" alt="nano cat" width="800" height="211"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;less&lt;/code&gt; и &lt;code&gt;more&lt;/code&gt;: аналогично &lt;code&gt;cat&lt;/code&gt;, просмотр содержимого большого файла постранично. Удобен для просмотра логов:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;less article.md
more article.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fphsnlt2cisd554ln0843.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fphsnlt2cisd554ln0843.png" alt="less" width="800" height="830"&gt;&lt;/a&gt;&lt;br&gt;
Чтобы выйти, необходимо нажать &lt;code&gt;q&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;grep&lt;/code&gt;: поиск в тексте. Синтаксис команды:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;OPTIONS]... PATTERNS &lt;span class="o"&gt;[&lt;/span&gt;FILES]...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Больше про паттерны и опции можно прочитать &lt;a href="https://www.gnu.org/software/grep/manual/grep.html"&gt;здесь&lt;/a&gt;.&lt;br&gt;
Для примера поищем &lt;code&gt;'ChatGPT'&lt;/code&gt; в файле &lt;code&gt;article.md&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;--color&lt;/span&gt; ChatGPT article.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyozn2qbdzdm06pew1rh6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyozn2qbdzdm06pew1rh6.png" alt="grep" width="800" height="610"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Информация о системе
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;man&lt;/code&gt;: просмотреть руководство по команде.
Вам скорее всего понадобится установить эту команду:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pkg &lt;span class="nb"&gt;install &lt;/span&gt;man
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Пример использования достаточно прост:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;man &lt;span class="nb"&gt;cat&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxtrwmn4odh2q20u2m7qm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxtrwmn4odh2q20u2m7qm.png" alt="man" width="800" height="791"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;df&lt;/code&gt;: показать доступное дисковое пространство. Аргумент &lt;code&gt;-h&lt;/code&gt; сделает вывод более читабельным:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;df&lt;/span&gt; &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa74l32ukvplltxirq0qa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa74l32ukvplltxirq0qa.png" alt="df" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;du&lt;/code&gt;: подсчёт занятого места в директориях. Аргумент &lt;code&gt;-h&lt;/code&gt; сделает вывод более читабельным:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;du&lt;/span&gt; &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk5t0hqs6b20qfp4dlnjt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk5t0hqs6b20qfp4dlnjt.png" alt="du" width="800" height="287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Сеть
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ping&lt;/code&gt;: проверка соединения с хостом.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping &lt;span class="o"&gt;[&lt;/span&gt;host]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping google.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34azcc37nu4at0owfuok.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34azcc37nu4at0owfuok.png" alt="ping" width="800" height="63"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;netstat&lt;/code&gt;: сетевая статистика.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;netstat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fttkbprkrbvzms6hc3djf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fttkbprkrbvzms6hc3djf.png" alt="netstat" width="800" height="631"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ifconfig&lt;/code&gt; (или &lt;code&gt;ip&lt;/code&gt; в некоторых дистрибутивах): конфигурация сетевого интерфейса.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ifconfig
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3nlzmenl0jo1wt17nqkm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3nlzmenl0jo1wt17nqkm.png" alt="ifconfig" width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Работа с архивами
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;tar&lt;/code&gt;: архивация и разархивация файлов.
Если у вас есть несколько файлов или каталогов, которые вы хотите заархивировать в один файл, вы можете использовать следующую команду:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;-cvf&lt;/span&gt; archive_name.tar file1 file2 dir1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Где:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;c&lt;/code&gt; означает создание архива.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;v&lt;/code&gt; означает режим подробного вывода (verbose), чтобы увидеть, какие файлы добавляются.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;f&lt;/code&gt; говорит &lt;code&gt;tar&lt;/code&gt; использовать следующий аргумент как имя файла архива.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Извлечение файлов из архива:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;-xvf&lt;/span&gt; archive_name.tar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;zip&lt;/code&gt;, &lt;code&gt;unzip&lt;/code&gt;: работа с ZIP-архивами. Аналогичен tar, но проще и создает &lt;code&gt;.zip&lt;/code&gt; архивы.
Архивация нескольких файлов:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;zip archive_name.zip file1.txt file2.txt file3.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Архивация каталога (с включением всех файлов и подкаталогов):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;zip &lt;span class="nt"&gt;-r&lt;/span&gt; archive_name.zip directory_name/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Исключение файлов при архивации:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;zip archive_name.zip directory_name/ &lt;span class="nt"&gt;-x&lt;/span&gt; &lt;span class="se"&gt;\*&lt;/span&gt;exclude.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Добавление файлов в существующий архив:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;zip &lt;span class="nt"&gt;-u&lt;/span&gt; archive_name.zip new_file.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Создание зашифрованного zip-архива (вам будет предложено ввести пароль):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;zip &lt;span class="nt"&gt;-e&lt;/span&gt; archive_name.zip file.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Извлечение всех файлов из архива:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;unzip archive_name.zip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Извлечение определённых файлов из архива:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;unzip archive_name.zip file1.txt file2.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Просмотр содержимого архива без извлечения:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;unzip &lt;span class="nt"&gt;-l&lt;/span&gt; archive_name.zip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Извлечение файлов в определённый каталог:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;unzip archive_name.zip &lt;span class="nt"&gt;-d&lt;/span&gt; destination_directory/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Управление процессами
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ps&lt;/code&gt;: просмотр активных процессов.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2gzah6estrhkfjdvwyv5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2gzah6estrhkfjdvwyv5.png" alt="ps" width="800" height="122"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;kill&lt;/code&gt;: завершение процесса.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;kill&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;signal] pid
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;kill&lt;/span&gt; &lt;span class="nt"&gt;-9&lt;/span&gt; 11689
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;-9&lt;/code&gt; - сигнал для прерывания процесса.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3q140dk716tsz13k4yfo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3q140dk716tsz13k4yfo.png" alt="kill" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Управление пакетами (зависит от дистрибутива):
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;pkg&lt;/code&gt;: менеджер пакетов Termux. Менеджер пакетов нужен, чтобы устанавливать новые пакеты, обновлять и удалять старые, эдакий терминальный Play Store. Перед установкой новых пакетов крайне рекомендуется обновить существующие пакеты командой:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pkg upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;В процессе обновления/установки пакетный менеджер может запросить дополнительные подтверждения. Чтобы согласиться, нужно нажать &lt;code&gt;Y&lt;/code&gt;, а потом &lt;code&gt;Enter&lt;/code&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3wvucsl99c02puw9lx1u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3wvucsl99c02puw9lx1u.png" alt="pkg" width="800" height="385"&gt;&lt;/a&gt;&lt;br&gt;
Также возможны дополнительные вопросы во время обновления определённых пакетов. Рекомендую использовать опцию по умолчанию и просто прожать &lt;code&gt;Enter&lt;/code&gt;:&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7hlmagxtq3cijirvkr10.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7hlmagxtq3cijirvkr10.png" alt="pkg" width="800" height="483"&gt;&lt;/a&gt;&lt;br&gt;
Чтобы получить справку, нужно использовать команду &lt;code&gt;help&lt;/code&gt;, например:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pkg &lt;span class="nb"&gt;help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnxjdn99p7esw6du1ciop.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnxjdn99p7esw6du1ciop.png" alt="pkg help" width="800" height="1134"&gt;&lt;/a&gt;&lt;br&gt;
Чтобы установить новый пакет, нужно использовать команду &lt;code&gt;install&lt;/code&gt;, например:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pkg &lt;span class="nb"&gt;install &lt;/span&gt;nodejs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Также дополнительное согласие может потребоваться во время установки:&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpiil895rcfm5uhr9xgq8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpiil895rcfm5uhr9xgq8.png" alt="pkg install" width="800" height="585"&gt;&lt;/a&gt;&lt;br&gt;
Теперь мы можем воспользоваться новыми пакетами:&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flxeh8oxl8xekfxawlnuy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flxeh8oxl8xekfxawlnuy.png" alt="node" width="800" height="158"&gt;&lt;/a&gt;&lt;br&gt;
Чтобы удалить существующий пакет, нужно использовать команду &lt;code&gt;uninstall&lt;/code&gt;, например:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pkg uninstall nodejs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Также дополнительное согласие может потребоваться во время удаления:&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvhr5rw6p6cti941rgjpq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvhr5rw6p6cti941rgjpq.png" alt="pkg uninstall" width="800" height="417"&gt;&lt;/a&gt;&lt;br&gt;
Теперь команда недоступна:&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frohr0noqkkac5ngkupge.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frohr0noqkkac5ngkupge.png" alt="pkg" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Поиск файлов
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;find&lt;/code&gt;: поиск файлов в директории.
Поиск файлов с именем "example.txt" в каталоге &lt;code&gt;/home/user&lt;/code&gt; и во всех его подкаталогах:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find /home/user &lt;span class="nt"&gt;-name&lt;/span&gt; &lt;span class="s2"&gt;"example.txt"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Поиск каталогов с именем "mydir" в каталоге &lt;code&gt;/home/user&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find /home/user &lt;span class="nt"&gt;-type&lt;/span&gt; d &lt;span class="nt"&gt;-name&lt;/span&gt; &lt;span class="s2"&gt;"mydir"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Поиск файлов в каталоге &lt;code&gt;/home/user&lt;/code&gt;, размер которых превышает 100 МБ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find /home/user &lt;span class="nt"&gt;-type&lt;/span&gt; f &lt;span class="nt"&gt;-size&lt;/span&gt; +100M
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Поиск по содержимому с помощью &lt;code&gt;grep&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;find /home/user &lt;span class="nt"&gt;-type&lt;/span&gt; f &lt;span class="nt"&gt;-exec&lt;/span&gt; &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; &lt;span class="s2"&gt;"my_search_term"&lt;/span&gt; &lt;span class="o"&gt;{}&lt;/span&gt; &lt;span class="se"&gt;\;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Это только верхушка айсберга всех возможностей команды &lt;code&gt;find&lt;/code&gt;. Она имеет множество других опций и комбинаций, которые позволяют выполнять сложные поисковые запросы. Чтобы узнать больше, вы можете обратиться к справочной странице команды, набрав &lt;code&gt;man find&lt;/code&gt; в терминале.&lt;/p&gt;

&lt;h3&gt;
  
  
  Управление разрешениями
&lt;/h3&gt;

&lt;p&gt;Управление разрешениями является ключевой частью безопасности. Разрешения определяют, кто и как сможет взаимодействовать с файлами и каталогами.&lt;/p&gt;

&lt;h4&gt;
  
  
  Типы разрешений
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Read (r)&lt;/strong&gt;: разрешение на чтение содержимого файла или просмотр содержимого каталога.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write (w)&lt;/strong&gt;: разрешение на изменение содержимого файла или добавление/удаление файлов в каталоге.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Execute (x)&lt;/strong&gt;: разрешение на выполнение файла (если это исполняемый файл) или вход в каталог.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Три категории пользователей
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Owner (u)&lt;/strong&gt;: владелец файла или каталога.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Group (g)&lt;/strong&gt;: группа пользователей, ассоциированная с файлом или каталогом.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Others (o)&lt;/strong&gt;: все остальные пользователи.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Команды для управления разрешениями
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;chmod&lt;/code&gt;: изменение прав на файл или директорию. У команды &lt;code&gt;chmod&lt;/code&gt; есть два режима: символьный и цифровой. В символьном режиме вы можете указать, как изменить разрешения с использованием символов:&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;u&lt;/strong&gt; - владелец файла&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;g&lt;/strong&gt; - группа файла&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;o&lt;/strong&gt; - другие пользователи&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;a&lt;/strong&gt; - все пользователи (то есть ugo)
И операторы:&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;+&lt;/strong&gt; - добавить разрешение&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-&lt;/strong&gt; - удалить разрешение&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;=&lt;/strong&gt; - установить разрешение
А также типы разрешений:&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;r&lt;/strong&gt; - разрешение на чтение&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;w&lt;/strong&gt; - разрешение на запись&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;x&lt;/strong&gt; - разрешение на выполнение
Примеры:
Дать владельцу право на выполнение файла:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;u+x filename
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Удалить у группы право на запись в файл:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;g-w filename
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Дать всем пользователям (владелец, группа, другие) право на чтение файла:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;a+r filename
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Установить разрешения так, чтобы только владелец мог читать и записывать файл, а все остальные могли только читать:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;&lt;span class="nv"&gt;u&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;rw,go&lt;span class="o"&gt;=&lt;/span&gt;r filename
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;В числовом режиме разрешения представлены тремя числами (октетами):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;4 - чтение (r)&lt;/li&gt;
&lt;li&gt;2 - запись (w)&lt;/li&gt;
&lt;li&gt;1 - выполнение (x)
Примеры:
Установить разрешения так, чтобы владелец мог читать, записывать и выполнять файл; группа могла читать и выполнять; другие пользователи могли только читать:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;755 filename
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Здесь 7 (rwx) для владельца, 5 (r-x) для группы и 5 (r-x) для других.&lt;br&gt;
Установить разрешения так, чтобы только владелец мог читать и записывать файл, а всем другим не было предоставлено никаких разрешений:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;600 filename
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Здесь 6 (rw-) для владельца, 0 (---) для группы и 0 (---) для других.&lt;/p&gt;

&lt;p&gt;Используя команду &lt;code&gt;ls -l&lt;/code&gt;, вы можете просмотреть текущие разрешения файла и при необходимости изменить их с помощью &lt;code&gt;chmod&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;chown&lt;/code&gt;: изменение владельца файла или директории. Предположим, у нас есть файл &lt;code&gt;example.txt&lt;/code&gt;, и мы хотим изменить его владельца на пользователя &lt;code&gt;john&lt;/code&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chown &lt;/span&gt;john example.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Также можно изменить группу файла с помощью &lt;code&gt;chown&lt;/code&gt;. Если мы хотим, чтобы файл &lt;code&gt;example.txt&lt;/code&gt; принадлежал пользователю &lt;code&gt;john&lt;/code&gt; и группе &lt;code&gt;developers&lt;/code&gt;, мы можем использовать следующую команду:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chown &lt;/span&gt;john:developers example.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Если вы хотите рекурсивно изменить владельца для директории и всех её поддиректорий и файлов, вы можете использовать флаг &lt;code&gt;-R&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chown&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; john:developers directory_name/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;chgrp&lt;/code&gt;: изменение группы файла или директории. Предположим, у нас есть файл &lt;code&gt;example.txt&lt;/code&gt;, и мы хотим изменить его группу на &lt;code&gt;developers&lt;/code&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chgrp &lt;/span&gt;developers example.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Если вы хотите рекурсивно изменить группу для директории и всех её поддиректорий и файлов, вы можете использовать флаг &lt;code&gt;-R&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chgrp&lt;/span&gt; &lt;span class="nt"&gt;-R&lt;/span&gt; developers directory_name/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Чтобы узнать больше о каждой из этих команд и их опциях, вы можете использовать страницы руководства man, например: &lt;code&gt;man chmod&lt;/code&gt;, &lt;code&gt;man chown&lt;/code&gt;, и &lt;code&gt;man chgrp&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Разное
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;alias&lt;/code&gt;: создание псевдонимов для команд.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;alias grep&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"grep --color"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F04zw06orsd8dk6vhaqge.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F04zw06orsd8dk6vhaqge.png" alt="alias" width="800" height="636"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;export&lt;/code&gt;: экспорт переменных окружения.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;VALUE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fve7znzrc8vfiopti0sc5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fve7znzrc8vfiopti0sc5.png" alt="Image description" width="800" height="124"&gt;&lt;/a&gt;&lt;br&gt;
Переменные окружения можно использовать как в самой оболочке, так и в подпроцессах:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;GREETING&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Hello"&lt;/span&gt;
bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s1"&gt;'echo $GREETING'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frxput4m6aw1phcvf8a30.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frxput4m6aw1phcvf8a30.png" alt="export bash" width="800" height="135"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;env&lt;/code&gt;: вывод или установка переменных окружения.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;env&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvli6et0vevibwgx8dq60.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvli6et0vevibwgx8dq60.png" alt="Image description" width="800" height="954"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;wget&lt;/code&gt; и &lt;code&gt;curl&lt;/code&gt;: загрузка файлов из интернета.
Вам скорее всего понадобится установить эту команду:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pkg &lt;span class="nb"&gt;install &lt;/span&gt;wget
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;wget&lt;/code&gt; в основном используется для скачивания файлов:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget https://dev.to/mainarthur/how-to-automate-job-application-with-chatgpt-in-3-steps-3blg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffe7m0zxa9l9r98doc07z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffe7m0zxa9l9r98doc07z.png" alt="wget" width="800" height="521"&gt;&lt;/a&gt;&lt;br&gt;
Указав аргумент &lt;code&gt;-O&lt;/code&gt;, можно указать, куда сохранить файл:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget https://dev.to/mainarthur/how-to-automate-job-application-with-chatgpt-in-3-steps-3blg &lt;span class="nt"&gt;-O&lt;/span&gt; index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9i9ulg1bpsrrfqhcd1ex.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9i9ulg1bpsrrfqhcd1ex.png" alt="wget" width="800" height="474"&gt;&lt;/a&gt;&lt;br&gt;
Это лишь базовые примеры использования &lt;code&gt;wget&lt;/code&gt;. У этой утилиты есть много других возможностей и параметров, которые можно изучить, обратившись к официальной документации или введя &lt;code&gt;man wget&lt;/code&gt; в командной строке (если вы находитесь на Unix-подобной системе).&lt;/p&gt;

&lt;p&gt;&lt;code&gt;curl&lt;/code&gt; - это инструмент командной строки, который позволяет выполнять различные запросы к серверу и взаимодействовать с ним, чаще всего по протоколам HTTP и HTTPS, но также и по многим другим протоколам.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl ipinfo.io
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdo4wo2deuza2zdl400ay.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdo4wo2deuza2zdl400ay.png" alt="curl" width="800" height="391"&gt;&lt;/a&gt;&lt;br&gt;
Это только базовые примеры использования &lt;code&gt;curl&lt;/code&gt;. У этого инструмента есть множество других опций и возможностей. Для получения подробной информации и изучения всех функций можно обратиться к официальной документации или ввести &lt;code&gt;man curl&lt;/code&gt; в командной строке на Unix-подобных системах.&lt;/p&gt;

&lt;h3&gt;
  
  
  Заключение
&lt;/h3&gt;

&lt;p&gt;У bash и Unix ещё очень много важных аспектов (пайпы, перенаправления, скрипты, условия, циклы, функции), однако знания базовых команд будет достаточно для простого использования терминала. В случае же использования чего-то нового будут даваться необходимые дополнительные пояснения и объяснения.&lt;/p&gt;

&lt;h2&gt;
  
  
  Домашнее задание
&lt;/h2&gt;

&lt;p&gt;Попробуйте каждую из перечисленных в этом списке команд в Termux на вашем устройстве: просмотрите их справки и попытайтесь их вызвать с успешным результатом, чтобы у вас сложилось чёткое представление, как они работают.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Обязательно подписывайтесь на мой аккаунт dev.to и Telegram-канал, скоро будет ещё больше контента:&lt;/em&gt; &lt;a href="https://t.me/MainArthur"&gt;https://t.me/MainArthur&lt;/a&gt;&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>bash</category>
      <category>linux</category>
      <category>beginners</category>
    </item>
    <item>
      <title>"Мобильная" разработка. [Операционные системы и терминал]</title>
      <dc:creator>Arthur Kh</dc:creator>
      <pubDate>Thu, 17 Aug 2023 20:09:11 +0000</pubDate>
      <link>https://dev.to/arthurkh/mobilnaia-razrabotka-opieratsionnyie-sistiemy-i-tierminal-5fpb</link>
      <guid>https://dev.to/arthurkh/mobilnaia-razrabotka-opieratsionnyie-sistiemy-i-tierminal-5fpb</guid>
      <description>&lt;p&gt;Для того чтобы разобраться в Bash и терминале, необходимо сначала провести небольшой экскурс в основные операционные системы, их файловые системы, а также немного поговорить об истории.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;А зачем нам вообще этот терминал и Bash?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Дело в том, что когда мы занимаемся разработкой на ПК, у нас есть огромный выбор IDE (Integrated Development Environment - интегрированная среда разработки) и текстовых редакторов, которые упрощают работу с утилитами, предназначенными для анализа кода и его выполнения, до нажатия лишь пары кнопок.&lt;br&gt;
В Android такого разнообразия нет (а навык работы с терминалом и Bash будет полезен даже на ПК), поэтому мы будем использовать терминал для выполнения нужных нам команд: установки зависимостей, управления проектом, запуска кода и др.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Основные ОС
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Операционные системы&lt;/strong&gt; - это основные программные платформы, на которых работают наши компьютеры. Хотя между ними есть множество различий, многие операционные системы имеют общие корни и идеи. Особое внимание в этом контексте нам стоит уделить системе Unix, поскольку этот исторический стандарт оказал огромное влияние на все современные системы.&lt;/p&gt;

&lt;p&gt;В мире операционных систем существует несколько крупных игроков: Windows от Microsoft; Linux, представляющий собой множество дистрибутивов на базе одноимённого ядра (например Android, Ubuntu, Arch и др.); macOS от Apple. Один из ключевых аспектов, определяющих работу и эффективность операционных систем - это файловая система. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Файловая система&lt;/strong&gt; - это способ, с помощью которого ОС хранит и организует данные на диске, получает к ним доступ. В этой статье мы рассмотрим основные файловые системы, используемые в каждой из этих ОС.&lt;/p&gt;

&lt;h3&gt;
  
  
  Unix
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Unix&lt;/strong&gt; - это не только операционная система, но и культурное наследие, заложившее основы для многих современных ОС. Два ключевых элемента, которые демонстрируют философию Unix: терминал (или командная строка) и файловая система.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Терминал Unix&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Основы&lt;/em&gt;. Терминал в Unix - это интерфейс для взаимодействия с операционной системой через текстовые команды. Он предоставляет пользователю возможность запускать программы, управлять файловой системой и выполнять другие задачи без графического интерфейса.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Философия&lt;/em&gt;. Одной из ключевых концепций Unix является принцип: "Делай одно дело и делай его хорошо". Большинство инструментов терминала предназначены для выполнения конкретной задачи, и их можно комбинировать для создания сложных рабочих процессов.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Примеры команд&lt;/em&gt;. &lt;code&gt;ls&lt;/code&gt; (список файлов), &lt;code&gt;grep&lt;/code&gt; (поиск текста), &lt;code&gt;chmod&lt;/code&gt; (изменение прав доступа к файлам).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Файловая система Unix&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Иерархия&lt;/em&gt;. Файловая система Unix организована в иерархической структуре, начиная с корневого каталога &lt;code&gt;/&lt;/code&gt;. От корня распространяются различные каталоги, такие как &lt;code&gt;/bin&lt;/code&gt; (базовые команды), &lt;code&gt;/etc&lt;/code&gt; (конфигурационные файлы) и &lt;code&gt;/home&lt;/code&gt; (домашние каталоги пользователей).&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Всё является файлом&lt;/em&gt;. В Unix принято считать, что "всё является файлом". Это означает, что устройства, сокеты и даже процессы можно представить в виде файлов в файловой системе.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Права доступа&lt;/em&gt;. В Unix каждый файл и каталог имеют набор прав доступа, который определяет, кто может читать, писать или выполнять данный файл. Это обеспечивает гибкое управление безопасностью.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;А теперь посмотрим, каким именно образом Unix повлиял на все основные ОС, их файловые системы и использование в них терминала.&lt;/p&gt;

&lt;h4&gt;
  
  
  Linux и Unix
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Совместимость с Unix&lt;/em&gt;. Linux прямо произошел из Unix-подобных систем и во многом соответствует стандартам Unix. Это означает, что большинство команд и интерфейсов, характерных для Unix, также применимы в Linux.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Терминал&lt;/em&gt;. Терминал Linux практически идентичен терминалу Unix. Здесь можно использовать широкий спектр инструментов и команд Unix.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Файловая система&lt;/em&gt;. Файловая система Linux (например, ext4) вдохновлена файловой системой Unix. Иерархическая структура директорий начинается с корневого каталога (/), что схоже с Unix.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  macOS и Unix
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Совместимость с Unix&lt;/em&gt;. macOS основан на Darwin, который, в свою очередь, произошёл от NeXTSTEP и BSD Unix. Таким образом, macOS наследует многие черты Unix.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Терминал&lt;/em&gt;. Терминал macOS предоставляет доступ к большинству стандартных Unix-команд благодаря его происхождению от BSD.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Файловая система&lt;/em&gt;. HFS+ и APFS - основные файловые системы для macOS. Они уникальны для Apple, но сохраняют многие Unix-подобные атрибуты, такие как права доступа и символические ссылки.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Windows и Unix
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Совместимость с Unix&lt;/em&gt;. Изначально Windows не имел прямых наследований от Unix, но с дальнейшим его развитием, особенно с внедрением подсистемы Windows для Linux (WSL), появилась возможность работы с Unix-подобными инструментами.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Терминал&lt;/em&gt;. Стандартный командный интерпретатор Windows (cmd) сильно отличается от Unix-терминала. Однако с внедрением WSL пользователи смогли запускать полноценный Linux-терминал в Windows.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Файловая система&lt;/em&gt;. NTFS - основная файловая система Windows. Она имеет множество отличий от Unix-подобных систем, хотя с внедрением WSL добавилась поддержка файловых систем Linux.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Android
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Android&lt;/strong&gt; - это операционная система, в первую очередь известная как платформа для мобильных устройств. Но что многие не осознают, так это тот факт, что своими корнями она как раз тесно связана Unix, потому что в Android практически всё взаимодействие организовано через готовые программы для упрощения использования смартфонов. Исследование этой связи раскроет нам интересные детали работы Android и её схожести с другими операционными системами.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Android и Unix&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Основы&lt;/em&gt;. Android базируется на ядре Linux, которое, в свою очередь, является Unix-подобной операционной системой. Это означает, что многие особенности и принципы Unix также присутствуют в Android.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Безопасность&lt;/em&gt;. Принципы безопасности Unix, такие как разделение привилегий и права доступа к файлам, также используются в Android для обеспечения безопасности данных и приложений.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Терминал Android&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Доступ&lt;/em&gt;. В Android по умолчанию нет терминала, как в традиционных Unix-системах. Однако существует множество сторонних приложений (например, Termux, который мы будем использовать далее), предоставляющих терминальный интерфейс для продвинутых пользователей и разработчиков.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Команды&lt;/em&gt;. С использованием терминала в Android можно выполнять многие из команд Unix. Однако некоторые команды или инструменты могут отсутствовать или быть изменёнными в зависимости от конкретной сборки Android и установленных ограничений.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Файловая система Android&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Основы&lt;/em&gt;. Файловая система Android, также как и Unix, организована в иерархической структуре. Однако есть некоторые уникальные каталоги и особенности, характерные только для Android.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Доступ&lt;/em&gt;. По умолчанию Android ограничивает доступ к некоторым частям файловой системы для обеспечения безопасности. Однако с правами суперпользователя (root) можно получить полный доступ ко всем файлам и каталогам.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;Обязательно подписывайтесь на мой аккаунт dev.to и Telegram-канал, скоро будет ещё больше контента:&lt;/em&gt; &lt;a href="https://t.me/MainArthur" rel="noopener noreferrer"&gt;https://t.me/MainArthur&lt;/a&gt;&lt;/p&gt;

</description>
      <category>learning</category>
      <category>beginners</category>
      <category>linux</category>
      <category>bash</category>
    </item>
    <item>
      <title>"Мобильная" разработка. [Как работает интернет и схема работы клиент-серверных приложений]</title>
      <dc:creator>Arthur Kh</dc:creator>
      <pubDate>Sun, 13 Aug 2023 19:48:13 +0000</pubDate>
      <link>https://dev.to/arthurkh/mobilnaia-razrabotka-kak-rabotaiet-intierniet-i-skhiema-raboty-kliient-sierviernykh-prilozhienii-37k1</link>
      <guid>https://dev.to/arthurkh/mobilnaia-razrabotka-kak-rabotaiet-intierniet-i-skhiema-raboty-kliient-sierviernykh-prilozhienii-37k1</guid>
      <description>&lt;p&gt;Для написания практически любого программного обеспечения очень важно понимать, как вообще работает Интернет.&lt;/p&gt;

&lt;h2&gt;
  
  
  Как работает интернет
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Интернет&lt;/strong&gt; - это глобальная сеть компьютеров, соединённых между собой. Каждый раз, когда мы посещаем веб-сайт, отправляем электронное письмо или смотрим видео в сети, мы используем различные протоколы и технологии, которые обеспечивают работу интернета. Давайте разберём, как это работает на примере простого запроса к веб-сайту.&lt;/p&gt;

&lt;h3&gt;
  
  
  IP: Интернет-протокол
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8bqpjyof4mueyumrm8ns.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8bqpjyof4mueyumrm8ns.png" alt="IP usage" width="800" height="292"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IP (Internet Protocol)&lt;/strong&gt; – это основной протокол, который регулирует передачу данных в сети Интернет. Все устройства, подключённые к Интернету, имеют уникальный IP-адрес, состоящий или из четырёх чисел, разделённых точками (127.0.0.1 в четвёртой версии протокола - IPv4), или из более сложной комбинации (2001:db8:3333:4444:CCCC:DDDD:EEEE:FFFF в шестой версии - IPv6). IP-адрес позволяет определить местоположение устройства в глобальной сети и гарантировать доставку данных непосредственно к этому устройству.&lt;/p&gt;

&lt;h3&gt;
  
  
  DNS
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw4w7ak8d6vxquw40n3xd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw4w7ak8d6vxquw40n3xd.png" alt="domain exmaple" width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Когда мы вводим имя веб-сайта в адресной строке браузера (например, "google.com"), система именования доменов (DNS) переводит это имя в IP-адрес. Это необходимо для того чтобы узнать, к какому именно серверу следует обратиться.&lt;/p&gt;

&lt;h3&gt;
  
  
  TCP/IP и UDP: основные протоколы передачи данных
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcqu2sg5oj04zku6usoaf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcqu2sg5oj04zku6usoaf.png" alt="tcp-udp" width="800" height="571"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Когда речь заходит о передаче данных в интернете, наиболее важными и часто используемыми протоколами являются TCP/IP и UDP.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TCP (Transmission Control Protocol)&lt;/strong&gt; - это надёжный, ориентированный на соединение протокол, который гарантирует доставку пакетов данных и их правильный порядок. TCP разбивает данные на пакеты, отправляет их, а затем ждёт подтверждение получения от получателя. Если пакет был потерян или поврежден, TCP будет повторно отправлять его. Благодаря этому механизму TCP гарантирует надежность и целостность передачи данных.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IP (Internet Protocol)&lt;/strong&gt;, со своей стороны, занимается маршрутизацией и доставкой пакетов данных между отправителем и получателем. Каждый пакет содержит IP-адреса отправителя и получателя, которые необходимы, чтобы пакет достиг нужного адресата.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UDP (User Datagram Protocol)&lt;/strong&gt; - это ещё один важный протокол передачи данных с иным принципом действия. В отличие от TCP, UDP не гарантирует доставку или порядок пакетов. Тем не менее, он быстрее и требует меньше ресурсов при передаче, так как не устанавливает постоянное соединение и не ожидает подтверждений о доставке. Из-за этой особенности UDP часто используется в приложениях, где скорость важнее надежности, например, в потоковой передаче видео или голоса.&lt;/p&gt;

&lt;p&gt;Таким образом, в зависимости от требований к надёжности и скорости передачи разработчики могут выбирать между TCP и UDP для своих приложений.&lt;/p&gt;

&lt;h3&gt;
  
  
  HTTP: Протокол передачи гипертекста
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frm2r1luforrsyle6b2lh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frm2r1luforrsyle6b2lh.png" alt="http headers" width="752" height="667"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HTTP (HyperText Transfer Protocol)&lt;/strong&gt; является основой веба. Этот протокол определяет, как запросы и ответы должны быть сформированы и переданы между браузерами и веб-серверами. Когда вы вводите URL в браузере, он отправляет HTTP-запрос к соответствующему серверу, который, в свою очередь, возвращает HTTP-ответ, обычно в виде веб-страницы.&lt;/p&gt;

&lt;p&gt;Все HTTP-запросы и ответы содержат заголовки, которые сообщают дополнительную информацию, такую как тип содержимого, статус ответа и другие метаданные. HTTP также может быть использован и для других форм передачи данных, а не только для одного HTML.&lt;/p&gt;

&lt;h3&gt;
  
  
  HTTPS: Защищенный протокол передачи гипертекста
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;HTTPS (HyperText Transfer Protocol Secure)&lt;/strong&gt; - это расширение стандартного HTTP, обеспечивающее шифрование данных между браузером пользователя и веб-сервером. Основное преимущество использования HTTPS - обеспечение конфиденциальности и целостности данных пользователей.&lt;/p&gt;

&lt;p&gt;В основе работы HTTPS лежит технология SSL (Secure Sockets Layer) или её более новый вариант TLS (Transport Layer Security). Эти протоколы используют асимметричное и симметричное шифрование для защиты данных во время их передачи.&lt;/p&gt;

&lt;p&gt;Когда вы посещаете сайт, использующий HTTPS, в адресной строке вашего браузера появляется значок замка. Это означает, что соединение с сайтом защищено. Кроме того, если кликнуть на этот значок, можно получить информацию о сертификате безопасности сайта. Этот сертификат гарантирует, что сайт действительно является настоящим и что все данные, передаваемые между вами и сайтом, шифруются и защищены от посторонних глаз.&lt;/p&gt;

&lt;p&gt;Сегодня HTTPS стал стандартом для многих сайтов, особенно для тех, которые обрабатывают конфиденциальную информацию, такую как пароли, данные кредитных карт и личную информацию пользователей.&lt;/p&gt;

&lt;h3&gt;
  
  
  URL/URI: Универсальные указатели ресурсов
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsu4jh6e74hz5f1i39lij.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsu4jh6e74hz5f1i39lij.png" alt="URL" width="800" height="263"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;URL (Uniform Resource Locator)&lt;/strong&gt; и &lt;strong&gt;URI (Uniform Resource Identifier)&lt;/strong&gt; часто используются как синонимы, хотя между ними есть небольшие различия. В основном URI является общим термином, который может идентифицировать любой ресурс, в то время как URL является подмножеством URI и указывает, как получить доступ к ресурсу.&lt;/p&gt;

&lt;p&gt;Простым языком, URL - это сам веб-адрес, который вы вводите в браузер. Он состоит из нескольких частей: протокол (например, "http"), доменное имя (например, "example.com") и, возможно, путь к конкретному ресурсу на этом сайте (например, "/page1.html").&lt;/p&gt;

&lt;p&gt;Важность URL заключается в том, что он предоставляет ясную и структурированную информацию о том, где находится определенный ресурс в сети Интернет и как получить к нему доступ.&lt;/p&gt;

&lt;h2&gt;
  
  
  Другие протоколы верхнего уровня
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;FTP (File Transfer Protocol)&lt;/strong&gt;: этот протокол используется для передачи файлов между компьютерами в сети. FTP может работать в "активном" или "пассивном" режимах, которые определяют, как устанавливается соединение.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SMTP (Simple Mail Transfer Protocol)&lt;/strong&gt;: SMTP используется для отправки электронной почты. Когда вы отправляете письмо, ваш почтовый клиент использует SMTP, чтобы передать его почтовому серверу.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;POP3 (Post Office Protocol, version 3) и IMAP (Internet Message Access Protocol)&lt;/strong&gt;: это протоколы, которые используются почтовыми клиентами для получения сообщений с почтовых серверов. IMAP позволяет нескольким устройствам синхронизировать состояние почтового ящика, тогда как POP3 просто загружает письма на локальное устройство.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DNS (Domain Name System)&lt;/strong&gt;: хотя DNS часто не рассматривается как протокол верхнего уровня в строгом смысле, его функции жизненно важны для работы Интернета. DNS преобразует человеко-читаемые доменные имена (например, "example.com") в IP-адреса, которые компьютеры используют для идентификации друг друга в сети.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SSH (Secure Shell)&lt;/strong&gt;: протокол для безопасного удаленного управления системами и передачи данных. SSH шифрует своё соединение, чтобы предотвратить перехват или подмену передаваемых данных.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Telnet&lt;/strong&gt;: Это старый протокол для удаленного управления системами, предшественник SSH. Сегодня его использование считается небезопасным, так как данные передаются в открытом виде без шифрования.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Эти протоколы представляют лишь малую часть множества протоколов, использующихся в сети Интернет. Однако именно они играют ключевую роль в повседневной работе многих интернет-сервисов.&lt;/p&gt;

&lt;h2&gt;
  
  
  Клиент-серверные приложения
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgbbb2fdu9wt62l79i04y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgbbb2fdu9wt62l79i04y.png" alt="client-server" width="800" height="568"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;С течением времени и по мере развития информационных технологий общепринятым способом организации и взаимодействия IT-систем стала клиент-серверная архитектура. В её основе лежит простая, но мощная концепция: разделение задач между поставщиком ресурсов (сервером) и его потребителем (клиентом). Подобное разделение позволяет создавать гибкие, масштабируемые и эффективные системы. В мире, где число устройств и приложений, подключённых к Интернету, растёт с каждым днем, понимание принципов работы клиент-серверных приложений становится ключевым для любого IT-специалиста, а потому необходимо сейчас и нам.&lt;/p&gt;

&lt;h3&gt;
  
  
  Что такое клиент-серверное приложение?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Клиент-серверное приложение&lt;/strong&gt; - это распределённая система, состоящая из двух основных компонентов: клиента и сервера. Клиент отправляет запросы на сервер, который обрабатывает их и отправляет обратно ответы. В одно и то же время клиентов может быть несколько: веб-браузер, мобильные клиенты, десктопные клиенты или другие серверные приложения. Точно так же и один клиент может получать данные сразу от нескольких серверов.&lt;/p&gt;

&lt;h3&gt;
  
  
  Преимущества клиент-серверной архитектуры
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Распределение ресурсов:&lt;/strong&gt; серверы могут быть оптимизированы для выполнения определенных задач, в то время как клиенты могут быть настроены на максимальную производительность пользовательского интерфейса.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Масштабируемость:&lt;/strong&gt; добавление новых клиентов или усиление серверной части не требует изменений во всей системе.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Централизованное управление:&lt;/strong&gt; серверные компоненты могут легко обновляться и поддерживаться, что позволяет проводить обновления без какого-либо воздействия на клиентов.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Как работают клиент-серверные приложения?
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Запрос:&lt;/strong&gt; клиент отправляет запрос на сервер. Это может быть запрос на получение данных, обновление информации или выполнение какой-либо операции.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Обработка:&lt;/strong&gt; сервер получает запрос, обрабатывает его - например, извлекает данные из базы данных или выполняет какую-либо логику. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ответ:&lt;/strong&gt; после обработки запроса сервер отправляет ответ обратно клиенту. Клиент интерпретирует этот ответ и предоставляет соответствующую информацию пользователю или выполняет соответствующее действие.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Примеры клиент-серверных приложений
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Веб-приложения:&lt;/strong&gt; ваш браузер действует как клиент, запрашивая веб-страницы и ресурсы с веб-серверов.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Электронная почта:&lt;/strong&gt; приложения электронной почты получают и отправляют сообщения через серверы электронной почты.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Базы данных:&lt;/strong&gt; клиентские приложения часто запрашивают данные у серверов баз данных.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Обязательно подписывайтесь на мой аккаунт dev.to и Telegram канал, скоро будет ещё больше контента:&lt;/em&gt; &lt;a href="https://t.me/MainArthur" rel="noopener noreferrer"&gt;https://t.me/MainArthur&lt;/a&gt;&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
