Поиск по содержимому файлов в linux

Разница между grep, egrep, fgrep, pgrep, zgrep

Различные переключатели grep исторически были включены в различные двоичные файлы. В современных системах Linux вы найдете эти переключатели доступными в команде base grep, но часто дистрибутивы поддерживают и другие команды.

Со страницы руководства для grep:

egrep является эквивалентом grep -E

Этот переключатель будет интерпретировать шаблон как расширенное регулярное выражение . Есть множество разных вещей, которые вы можете сделать с этим, но вот пример того, как выглядит использование регулярного выражения с grep.

Давайте найдем в текстовом документе строки, которые содержат две последовательные буквы «р»:

$ egrep p\{2} fruits.txt

или

$ grep -E p\{2} fruits.txt

fgrep является эквивалентом grep -F

Этот переключатель будет интерпретировать шаблон как список фиксированных строк и попытаться сопоставить любую из них. Это полезно, когда вам нужно искать символы регулярного выражения. Это означает, что вам не нужно экранировать специальные символы, как если бы вы использовали обычный grep.

$ fgrep $ License.txt
There is a $100 free for commercial use.

pgrep — это команда для поиска имени запущенного процесса в вашей системе и возврата соответствующих идентификаторов процесса. Например, вы можете использовать его, чтобы найти идентификатор процесса демона SSH:

$ pgrep sshd

По функциям это похоже на простую передачу вывода команды ‘ps’ в grep.

Вы можете использовать эту информацию, чтобы убить работающий процесс или устранить проблемы со службами, работающими в вашей системе.

zgrep используется для поиска сжатых файлов по шаблону. Это позволяет вам искать файлы внутри сжатого архива без необходимости сначала распаковывать этот архив, в основном экономя вам дополнительный шаг или два.

$ zgrep apple fruits.txt.gz

zgrep также работает с tar-файлами, но кажется, что он говорит только о том, удалось ли найти совпадение.

$ zgrep apple fruits.tar.gz

Мы упоминаем об этом, потому что файлы, сжатые с помощью gzip, обычно являются архивами tar.

Концепция

Для понимания того как с этим взлетать стоит знать, как минимум, основы основ сетевой терминилогии:

  • Про них мы писали вот здесь. Благодаря им Вы узнаете, что такое IP, DNS, сети подсети, порты и как оно примерно работает. Так у Вас в голове будет некое понимание того, что к чему бегает и прыгает;
  • Следующим шагом, собственно, не лишним будет прочитать про прокси-сервера и как они помогают избегать блокировок, пускать трафик во всякие там обходы гадостей и просто принципы их работы (ну и настройку само собой). Относительно прилично написано про это у нас вот тут;
  • Ну и, собственно, напоследок, про VPN, — что это, зачем и почему оно вообще такое вкусное.

Это такая подборка для тех, кто хочет вообще понимать, что происходит, как работает и думать своей головой, а не внимать желтым новостям (где бы их не показывали).

Снижаем нагрузку на роутер — теория

Глобально, смысл в том, что роутер, сам по себе, — устройство с определенными характеристиками железа внутри (так же, как и в компьютере, — там есть память, процессор со своей частотой и тд и тп). От характеристик, что логично зависит мощность и цена.

Логично, что роутер, помимо трансляции трафика, занимается много чем еще, — предоставляет услуги DHCP, Firewall, NAT, обеспечивает то самое шифрование данных, обеспечивает зону покрытия и прочее и прочее.

Само собой, что всем этим занимается его железо и операционной системы (прошивки), от которых, во многой степени и зависит производительность. В частности, как раз на железо в большей части ложится нагрузка, связанная с шифрованием фильтрацией трафика.

Вот тут то можно и немного схитрить.

Вводная

Как уже говорилось, — на написание пакетов ушло много сил и времени. Точнее несколько лет.

Если Вы внимательно следили за блоговой частью, то в курсе, что где-то еще в 2014-ом я начал детально прорабатывать тему программирования под Android как таковую, вместе с тем начали выходить и небольшие статьи, правда больше по простеньким вещам, вроде программ, лаунчеров, рутования и всего того, то так или иначе просили через темник.

Про Linux обучалка планировалась давно, собственно, я собирался выпускать книгу на эту тему, но как последний тираж остался невостребованным, то я решил свернуть это дело и переключить силы на разработку пакета обучения по этой теме, благо и материала, и знаний, и статей, — предостаточно.

Итого получилось следующее.

ВНИМАНИЕ

Это будут пилотные группы, т.е первые. Да, они уже протестированы и не раз, и даже не десятком людей. Но для своих и на «публику», по сути, будут обкатываться впервые.

Но это еще не всё. Это может быть не просто первые пилотные, но и единственные группы по данным пакетам вообще. Пакеты очень новые, очень большие, действительно профессиональные и интересные. Информации в них реально много. Как и практики.

Либо, есть еще бОльшая вероятность, что мы их не будем их выставлять более потому, что покуда мы их тестировали силами нанятых людей и компаний, к нам поступило 2 предложения от крупных игроков рынка о выкупе пакетов и авторских прав на них, т.е продаваться они потом будут не под нашим брендом, не по нашей цене и не для всех, кто просто зашел полистать «Заметки Сис.Админа».

Такие дела.

Выражения в квадратных скобках и Классы символов

В дополнение к совпадению любого символа в заданной позиции в нашем регулярном выражении, мы также, используя выражения в квадратных скобках, можем задать совпадение единичного символа из указанного набора символов. С выражениями в квадратных скобках мы можем указать набор символов для соответствия (включая символы, которые в противном случае были бы истолкованы как метасимволы). В этом примере, используя набор из двух символов:

grep -h 'zip' dirlist*.txt
bzip2
bzip2recover
gzip

мы найдём любые строчки, содержащие строки «bzip» или «gzip».

Набор может содержать любое количество символов, а метасимволы теряют своё специальное значение, когда помещаются внутрь квадратных скобок. Тем не менее, есть два случая в которых метасимволы, используемые внутри квадратных скобок, имеют различные значения. Первый – это каретка (^), которая используется для указания отрицания; второй – это тире (-), которое используется для указания диапазона символов.

Отрицание

Если первым символом выражения в квадратных скобках является каретка (^), то остальные символы принимаются как набор символов, которые не должны присутствовать в заданной позиции символа. Сделаем это изменив наш предыдущий пример:

grep -h 'zip' dirlist*.txt
bunzip2
gunzip
funzip
gpg-zip
mzip
p7zip
preunzip
prezip
prezip-bin
unzip
unzipsfx

С активированным отрицанием, мы получили список файлов, которые содержат строку «zip», перед которой идёт любой символ, кроме «b» или «g»

Обратите внимание, что zip не был найден. Отрицаемый набор символов всё равно требует символ на заданной позиции, но символ не должен быть членом инвертированного набора.. Символ каретки вызывает отрицание только если он является первым символом внутри выражения в квадратных скобках; в противном случае, он теряет своё специальное назначение и становится обычным символом из набора.

Символ каретки вызывает отрицание только если он является первым символом внутри выражения в квадратных скобках; в противном случае, он теряет своё специальное назначение и становится обычным символом из набора.

Традиционные диапазоны символов

Если мы хотим сконструировать регулярное выражение, которое должно найти каждый файл из нашего списка, начинающийся на заглавную букву, мы можем сделать следующее:

grep -h '^' dirlist*.txt
MAKEDEV
GET
HEAD
POST
VBoxClient
X
X11
Xorg
ModemManager
NetworkManager
VBoxControl
VBoxService

Суть в том, что мы разместили все 26 заглавных букв в выражение внутри квадратных скобок. Но мысль печатать их все не вызывает энтузиазма, поэтому есть другой путь:

grep -h '^' dirlist*.txt

Используя трёхсимвольный диапазон, мы можем сократить запись из 26 букв. Таким способом можно выразить любой диапазон символов, включая сразу несколько диапазонов, такие, как это выражение, которое соответствует всем именам файлов, начинающихся с букв и цифр:

grep -h '^' dirlist*.txt

В диапазонах символов мы видим, что символ чёрточки трактуется особым образом, поэтому как мы можем включить символ тире в выражение внутри квадратных скобок? Сделав его первым символом в выражении. Рассмотрим два примера:

grep -h '' dirlist*.txt

Это будет соответствовать каждому имени файла, содержащему заглавную букву. При этом:

grep -h '' dirlist*.txt

будет соответствовать каждому имени файла, содержащему тире, или заглавную «A», или заглавную «Z».

Классы символов POSIX

Подробнее о POSIX вы можете почитать в Википедии.

В POSIX имеются свои классы символов, которые вы можете использовать в регулярных выражениях:

Класс символов Описание
Алфавитно-цифровые символы. В ASCII эквивалентно:
То же самое, что и , с дополнительным символом подчёркивания (_).
Алфавитные символы. В ASCII эквивалентно:
Включает символы пробела и табуляции.
Управляющие коды ASCII. Включает ASCII символы с 0 до 31 и 127.
Цифры от нуля до девяти.
Видимые символы. В ASCII сюда включены символы с 33 по 126.
Буквы в нижнем регистре.
Символы пунктуации. В ASCII эквивалентно: [-!»#$%&'()*+,./:;?@_`{|}~]
Печатные символы. Все символы в плюс символ пробела.
Символы белых пробелов, включающих пробел, табуляцию, возврат каретки, новую строку, вертикальную табуляцию и разрыв страницы. В ASCII эквивалентно:
Символы в верхнем регистре.
Символы, используемые для выражения шестнадцатеричных чисел. В ASCII эквивалетно:

В этих выражениях квадратные скобки и двоеточия являются частью записи класса символов (диапазонов).

Внимание: в зависимости от настроек локали, , , и другие буквенные диапазоны могут включать буквы вашего алфавита, например, русского. Т.е. может соответствовать не , а .

может соответствовать не , а .

Усиливаем сигнал с помощью усилителя

В случаях, если беспроводной сетью нужно обеспечить большую площадь, можно использовать специальные усилители Wi-Fi-сигнала, позволяющие одним нажатием кнопки существенно (как минимум вдвое) увеличить зону покрытия. Такие устройства относительно недороги (порядка 1-1,5 тысячи рублей) и позволяют малыми средствами решить проблему недостаточной мощности сигнала.

Типичный пример современного Wi-Fi-усилителя — TL-WA850RE компании TP-Link. Он устанавливается непосредственно в электрическую розетку, способен работать в сетях IEEE 802.11b/g/n, оснащён двумя встроенными антеннами, позволяющими передавать данные со скоростью до 300 Мбит/с, чего вполне достаточно как для потокового видео высокого разрешения, так и для видеоигр. Кроме того, благодаря встроенному порту Ethernet к сети можно дополнительно подключать проводные сетевые устройства, например принтеры.

Как посмотреть логи в Linux?

Большинство логов в Linux генерируются системными демонами syslogd или rsyslogd и хранятся в обычном текстовом файле ASCII в каталоге /var/log. Этот каталог содержит лог-файлы самой ОС, служб и различных приложений, запущенных в системе. Вот как этот каталог выглядит в типичной системе Debian Linux:

Если вы попробуете просмотреть какой-нибудь лог-файл от имени обычного пользователя, то в 99% случаев система ответит вам сообщением о нехватке прав доступа. Поэтому я заранее переключился на пользователя root (команда su –) и все дальнейшие действия будут выполняться от его имени.

Как вы можете заметить, команда вывела последние 10 строк лог-файла, которые дают нам информацию о последовательном запуске различных сервисов, а также отображает их статус.

Как уже было сказано выше, многие лог-файлы хранятся в виде обычных текстовых файлов, поэтому их можно просматривать с помощью следующих стандартных команд:

   tail — вывод последних 10 строк;

   head — вывод первых 10 строк;

   cat — вывод содержимого всего лог-файла;

   grep — поиск в лог-файле всех вхождений заданного выражения или фильтрация лог-файла по заданному выражению;

   zcat — отображает всё содержимое сжатых лог-файлов (с расширением *.gz);

   zmore — постраничный просмотр сжатых лог-файлов, без их распаковки;

   zgrep — поиск внутри сжатого лог-файла.

Оптимизируем настройки QoS

В большинстве современных роутеров, за исключением совсем уж «игрушечных», реализована функция под названием Quality of Service (QoS), то есть, буквально, «Качество обслуживания». Смысл этой функции заключается в анализе трафика и приоритетном обслуживании его определённого типа — например, онлайновых игр, потокового видео или сигнала Skype.

В дешёвых моделях функция QoS может лишь включаться или выключаться, а настройки определяются автоматически, а в более дорогих вы сможете сами выбирать, каким программами предоставлять приоритет, то есть самую широкую полосу пропускания, а кому ограничить доступ, например почтовому клиенту.

Способы настройки QoS отличаются в зависимости от производителя и модели роутера, но все они осуществляются через веб-интерфейс.

Примеры использования find

Поиск файла по имени

1. Простой поиск по имени:

find / -name «file.txt»

* в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня .

2. Поиск файла по части имени:

find / -name «*.tmp»

* данной командой будет выполнен поиск всех папок или файлов в корневой директории /, заканчивающихся на .tmp

3. Несколько условий. 

а) Логическое И. Например, файлы, которые начинаются на sess_ и заканчиваются на cd:

find . -name «sess_*» -a -name «*cd»

б) Логическое ИЛИ. Например, файлы, которые начинаются на sess_ или заканчиваются на cd:

find . -name «sess_*» -o -name «*cd»

в) Более компактный вид имеют регулярные выражения, например:

find . -regex ‘.*/\(sess_.*cd\)’

find . -regex ‘.*/\(sess_.*\|.*cd\)’

* где в первом поиске применяется выражение, аналогичное примеру а), а во втором — б).

4. Найти все файлы, кроме .log:

find . ! -name «*.log»

* в данном примере мы воспользовались логическим оператором !.

Поиск по дате

1. Поиск файлов, которые менялись определенное количество дней назад:

find . -type f -mtime +60

* данная команда найдет файлы, которые менялись более 60 дней назад.

Или в промужутке:

find . -mmin -20 -mmin +10 -type f

* найти все файлы, которые менялись более 10 минут, но не более 20-и.

2. Поиск файлов с помощью newer. Данная опция доступна с версии 4.3.3 (посмотреть можно командой find —version).

а) дате изменения:

find . -type f -newermt «2019-11-02 00:00»

* покажет все файлы, которые менялись, начиная с 02.11.2019 00:00.

find . -type f -newermt 2019-10-31 ! -newermt 2019-11-02

* найдет все файлы, которые менялись в промежутке между 31.10.2019 и 01.11.2019 (включительно).

б) дате обращения:

find . -type f -newerat 2019-10-08

* все файлы, к которым обращались с 08.10.2019.

find . -type f -newerat 2019-10-01 ! -newerat 2019-11-01

* все файлы, к которым обращались в октябре.

в) дате создания:

find . -type f -newerct 2019-09-07

* все файлы, созданные с 07 сентября 2019 года.

find . -type f -newerct 2019-09-07 ! -newerct «2019-09-09 07:50:00»

* файлы, созданные с 07.09.2019 00:00:00 по 09.09.2019 07:50

Искать в текущей директории и всех ее подпапках только файлы:

find . -type f

* f — искать только файлы.

Поиск по правам доступа

1. Ищем все справами на чтение и запись:

find / -perm 0666

2. Находим файлы, доступ к которым имеет только владелец:

find / -perm 0600

Поиск файла по содержимому

find / -type f -exec grep -i -H «content» {} \;

* в данном примере выполнен рекурсивный поиск всех файлов в директории и выведен список тех, в которых содержится строка content.

С сортировкой по дате модификации

find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r

* команда найдет все файлы в каталоге /data, добавит к имени дату модификации и отсортирует данные по имени. В итоге получаем, что файлы будут идти в порядке их изменения.

Лимит на количество выводимых результатов

Самый распространенный пример — вывести один файл, который последний раз был модифицирован. Берем пример с сортировкой и добавляем следующее:

find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | sort -r | head -n 1

Поиск с действием (exec)

1. Найти только файлы, которые начинаются на sess_ и удалить их:

find . -name «sess_*» -type f -print -exec rm {} \;

* -print использовать не обязательно, но он покажет все, что будет удаляться, поэтому данную опцию удобно использовать, когда команда выполняется вручную.

2. Переименовать найденные файлы:

find . -name «sess_*» -type f -exec mv {} new_name \;

или:

find . -name «sess_*» -type f | xargs -I ‘{}’ mv {} new_name

3. Переместить найденные файлы:

find . -name «sess_*» -type f -exec mv {} /new/path/ \;

* в данном примере мы переместим все найденные файлы в каталог /new/path/.

4. Вывести на экран количество найденных файлов и папок, которые заканчиваются на .tmp:

find . -name «*.tmp» | wc -l

5. Изменить права:

find /home/user/* -type d -exec chmod 2700 {} \;

* в данном примере мы ищем все каталоги (type d) в директории /home/user и ставим для них права 2700.

6. Передать найденные файлы конвееру (pipe):

find /etc -name ‘*.conf’ -follow -type f -exec cat {} \; | grep ‘test’

* в данном примере мы использовали find для поиска строки test в файлах, которые находятся в каталоге /etc, и название которых заканчивается на .conf. Для этого мы передали список найденных файлов команде grep, которая уже и выполнила поиск по содержимому данных файлов.

7. Произвести замену в файлах с помощью команды sed:

find /opt/project -type f -exec sed -i -e «s/test/production/g» {} \;

* находим все файлы в каталоге /opt/project и меняем их содержимое с test на production.

Выберите наименее загруженный канал

Если программное обеспечение установлено корректно, но проблема не решается, есть смысл изменить в настройках канал беспроводной сети. Дело в том, что в многоквартирных домах значительная часть маршрутизаторов работают в ограниченном количестве частот. Из-за загруженности канала падает качество связи.

Для того, чтобы корректно настроить роутер, потребуется зайти в раздел настроек беспроводной сети (точное название пункта меню можно найти в эмуляторе прошивки, который, как правило, находится на сайте производителя). Будет предложено выбрать из списка 12 каналов. Самый простой способ – выбрать канал «Авто» и перезапустить устройство. В этом случае роутер автоматически настроится на самый свободный вариант.

Второй способ – скачать любую программу-анализатор для проверки загруженности каналов (к примеру, WiFi Analyzer). Такая программа просканирует степень загруженности всех доступных каналов по частотам и выделит оптимальный. Достаточно будет выбрать необходимое значение в настройках.

«Андроидный» пакет обучения

Так как кое-кто не успел написать полноценное описание пакета под страницу обучения в лаборатории, то краткое, совсем общее описание есть как раз ниже по тексту.

В ходе этого пакета обучения мы рассматриваем всё, — от самых основ (в том числе Android Studio) и всяких «Hello, world!» до самых сложных вещей и создания полноценный крупных приложений.

Если говорить очень кратко, то мы сделаем небольшое введение, познакомимся с банальностями, узнаем, что вообще нужно и как оно работает, узнаем про AVD и рассмотрим структуру Android-проекта, посмотрим, что есть Layouts (а так же какие бывают, как работают и зачем нужны), создадим первое простенькое приложение, узнаем, что такое обработчики, поработаем с элементами экрана из кода, посмотрим на «рисование»/»анимацию»/»функции» и научимся их реализовывать, узнаем теорию и практику про Intent, Intent Filter, Context; рассмотрим хранение данных и транзакции; разберем  методы, списки, экраны, категории; поработаем с Preferences; нырнём детально в такие вещи как Handler, диалоги; сюда же запихнут AsyncTask, Service; посмотрим на обработку касаний и мультикасаний; посмотрим на обработку виджитеов, уведомлений; научимся со всем этим работать, создавать и дохрена всего прочего.

Сюда же входит всякая оптимизация, настройка, основы и углубленные теории, разжевывание всего детально и нещадное количество другой информации. Ну и само собой, практика. Много практики. Вы собственноручно создадите свой браузер, калькулятор, научитесь записывать звук, работать с камерой и датчиками через своё приложение, эмулировать что-либо, рисовать и черт знает что еще.

Курс насчитавыет примерно 200 уроков. Их количество будет меняться в большую или меньшую сторону, по мере обучения группы этой зимой (и, подозреваю, что дальше тоже), т.к постоянно что-то требуется обновлять, добавлять, упрощать и прочее.

Но, в связи с обширностью курса есть небольшой нюанс. Совсем маленький

Настолько, что о нём Вы можете прочитать в подзаголовке «ВНИМАНИЕ!» ниже по тексту

Самые важные команды, которые нужно знать

Мы рассмотрели некоторые основные команды в предыдущих разделах. В этом разделе мы рассмотрим некоторые другие важные команды.

Find command

Вы можете использовать команды find, locate и grep с помощью команды find.

Команда find ищет файлы на вашем диске. Это позволяет вам искать файлы и каталоги на основе групп пользователей, времени изменения файлов или доступа к ним, прав доступа к файлам, дат и размера.

Чтобы игнорировать регистр, используйте:

Раньше мы говорили о диких картах. Здесь мы используем их для поиска определенных файлов. Эта команда перечисляет все имена файлов, оканчивающиеся на donut.txt.

И эта команда перечисляет все имена файлов, начинающиеся с c.

Вы можете искать файлы по размеру, используя:

Используйте команду ниже для поиска файлов по дате их последнего изменения:

Чтобы найти каталог, используйте команду:

Locate command

По сравнению с поиском locateработает быстрее, так как считывает пути к файлам, хранящиеся в mlocate.dbбазе данных. Прежде чем приступить к работе, вам необходимо установитьlocate.

Команда для установки locate:

Первый шаг — это ввод пароля. После ввода пароля начнется установка.

После установки необходимо обновить поисковую базу. Locateполагается на эту базу данных, поэтому ее регулярное обновление обеспечивает эффективность. Для обновления mlocateбазы данных необходимы права суперпользователя.

Чтобы искать файлы по их именам, используйте:

Примечание. Функция Locate чувствительна к регистру, поэтому CreamPuffs.txtи creamPuffs.txtне одно и то же.

Чтобы игнорировать регистр, добавьте в команду —i.

grep command

Печать глобального регулярного выражения (grep) используется в Linux для поиска строк в конкретном файле. Если grep находит эти символы, он печатает строку. Команда такая:

Вы распечатываете номера строк вместе со строкой соответствия, добавляя —nк команде:

Примечание: Grep чувствителен к регистру, поэтому glazedи Glazedне одно и то же.

Чтобы игнорировать регистр, используйте:

Для поиска чего-либо в каталоге используйте:

chmod

Команда chmod, изменить режим, используется для просмотра разрешений на чтение, запись и выполнение, связанных с файлом. У вас есть три разных типа пользователей: пользователь (владелец), группа и другие (все остальные), которые могут читать, писать или выполнять файл.

Чтобы просмотреть разрешения, связанные с файлом, используйте:

Посмотрим, что означает вывод:

  • -означает, что это обычный файл. Если бы это был каталог, то так и было бы d.
  • rw-rw-r— показывает права доступа к файлу.

Посмотрим на файл hello.c. Скажем, мы хотим, чтобы пользователь читал, записывал и выполнял файл, группа просто читала и выполняла его, а остальные только читали его. Вы будете использовать:

Вы можете просмотреть обновленные разрешения, используя:

Вы также можете использовать команду chmod с числовым методом. Разрешения имеют следующие числовые значения:

  • Читать = 4
  • Написать = 2
  • Выполнить = 1
  • Нет разрешений = 0

Разрешения, которые получает определенный пользователь, представляют собой сумму этих чисел, поэтому, если вы хотите дать разрешение на чтение, запись и выполнение, это будет 4 + 2 + 1 = 74 + 2 + 1 = 7. Прочитать и выполнить будет4 + 0 + 1 = 54 + 0 + 1 = 5, и просто читать будет 4 + 0 + 0 = 44 + 0 + 0 = 4.

ping command

Команда ping используется для проверки статуса вашего соединения с сервером.

Вы можете проверить, смогли ли вы подключиться, и посмотреть время ответа. Команда продолжает выполняться, пока вы ее не остановите нажатием CTRL+C.

free command

Чтобы просмотреть использование памяти, используйте бесплатную команду.

В hпротивном случае он делает его удобочитаемым, он показывает данные в байтах.

gzip

Для сжатия файлов через терминал используйте gzipкоманду. Если вы хотите сохранить как исходный файл, так и сжатую версию, добавьте —k, в противном случае исходный файл будет удален.

mv

Чтобы переместить файлы из одного каталога в другой, используйте mv. Вы также можете переименовывать файлы с помощью этой команды.

Чтобы переименовать файл, используйте:

Чтобы переименовать файл при его перемещении, используйте:

man

Чтобы узнать больше о любой команде, используйте man. Вы попадете в руководство, где сможете просмотреть описание и все параметры команды. Давайте рассмотрим команду ls более подробно.

Понравилась статья? Поделиться с друзьями:
Компьютерная помощь
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: