Page_c76a3fcf https://linux-notes.org Unix/ Linux блог, на котором можно найти полезную информацию по настройке ОС и ПО. Wed, 25 Dec 2019 17:18:26 +0000 ru-RU hourly 1 https://wordpress.org/?v=6.7.2 Page_c76a3fcf https://linux-notes.org/komandy-kubernetes-v-unix-linux/ https://linux-notes.org/komandy-kubernetes-v-unix-linux/#comments Wed, 25 Dec 2019 17:18:01 +0000 https://linux-notes.org/?p=17585 Сделаю себе заметку со списком команд для работы с Kubernetes. Дополнять буду по мере необходимости использования тех или иных команд на работе или на моем сервере. Для начала, если используете или планируете использовать vi/vim, то добавим настройки. Открываем: Вставляем: Так же можно добавить автодополнение команд для kubectl. Если используете BASH: Перезапускаем оболочку или можно выполнить: […]

The post Команды Kubernetes в Unix/Linux first appeared on linux-notes.org.]]>

Сделаю себе заметку со списком команд для работы с Kubernetes. Дополнять буду по мере необходимости использования тех или иных команд на работе или на моем сервере.

Для начала, если используете или планируете использовать vi/vim, то добавим настройки. Открываем:

$ vim ~/.vimrc

Вставляем:

" Yaml file handling
autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab
filetype plugin indent on
autocmd FileType yaml setl indentkeys-=<:>

" Copy paste with ctr+c, ctr+v, etc
:behave mswin
:set clipboard=unnamedplus
:smap <Del> <C-g>"_d
:smap <C-c> <C-g>y
:smap <C-x> <C-g>x
:imap <C-v> <Esc>pi
:smap <C-v> <C-g>p
:smap <Tab> <C-g>1> 
:smap <S-Tab> <C-g>1<

Так же можно добавить автодополнение команд для kubectl.

Если используете BASH:

$ source <(kubectl completion bash) && \
echo "source <(kubectl completion bash)" >> ~/.bashrc

Перезапускаем оболочку или можно выполнить:

$ bash ~/.bashrc

Если используете ZSH:

$ source <(kubectl completion zsh) && \
echo "if [ $commands[kubectl] ]; then source <(kubectl completion zsh); fi" >> ~/.zshrc

Перезапускаем оболочку или можно выполнить:

$ . ~/.zshrc

И так, приступим к командам.

Работа с POD-ами в Kubernetes

Вывести все поды которые задеплоились:

$ kubectl get pods
NAME                                                              READY   STATUS    RESTARTS   AGE
mirrormaker-in-kubernetes-chart-mirrormaker-in-kubernetes-mpsb8   0/1     Pending   0          19d

Вывести все нейм-спейсы которые используют поды:

$ kubectl get pods --all-namespaces
NAMESPACE     NAME                                                              READY   STATUS    RESTARTS   AGE
default       mirrormaker-in-kubernetes-chart-mirrormaker-in-kubernetes-mpsb8   0/1     Pending   0          19d
docker        compose-7b7c5cbbcc-6l5gt                                          1/1     Running   0          28d
docker        compose-api-dbbf7c5db-jxmz4                                       1/1     Running   1          28d

Чтобы вывести информацию о задеплоином ПОД-е, используем:

$ kubectl get pod mirrormaker-in-kubernetes-chart-mirrormaker-in-kubernetes-mpsb8 -o wide
NAME                                                              READY   STATUS    RESTARTS   AGE   IP       NODE     NOMINATED NODE   READINESS GATES
mirrormaker-in-kubernetes-chart-mirrormaker-in-kubernetes-mpsb8   0/1     Pending   0          19d   <none>   <none>   <none>           <none>

Т.е синтаксис такой:

$ kubectl get pod <NAME_of_POD_HERE> -o wide

Или чтобы вывести инфу в виде YAML вывода, используем:

$ kubectl get pod <NAME_of_POD_HERE> -o yaml

Если нужно получить YAML вывод от ПОД-а без информации о кластере, то вот команда:

$ kubectl get pod my-pod -o yaml --export

Для вывода\дискрайба POD-а, выполняем:

$ kubectl describe pod <NAME_of_POD_HERE>

Или:

$ kubectl describe pods <NAME_of_POD_HERE>

Можно еще так:

$ kubectl describe nodes <NAME_of_POD_HERE>

Если есть необходимость отсортировать поды, например по количеству рестартов, то команда:

$ kubectl get pods --sort-by='.status.containerStatuses[0].restartCount'

Получить все поды по определенной лейбе:

$ kubectl get pods --selector=app=my_app_here -o \
  jsonpath='{.items[*].metadata.labels.version}'

Так же, при необходимости, можно вывести все поды по конкретному неймспйсу и чтобы ПОД-ы были запущены:

$ kubectl get pods --field-selector=status.phase=Running -n docker
NAME                          READY   STATUS    RESTARTS   AGE
compose-7b7c5cbbcc-6l5gt      1/1     Running   0          28d
compose-api-dbbf7c5db-jxmz4   1/1     Running   1          28d

Получить ExternalIPs всех узлов:

$ kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'

Получить ПОД-ы со всеми лейбами которые они имеют, можно запустив команду:

$ kubectl get pods --show-labels

Удалить под можно так:

$ kubectl delete pod <NAME_OF_POD_HERE_1> <NAME_OF_POD_HERE_2>

Чтобы удалить ПОД с помощью файла в котором хранится конфигурация, можно так:

$ kubectl delete -f ./pod.json 

Удалить ПОД-ы по определенной лейбе:

$ kubectl delete pods -l name=myLabel   

Для удаления всех ПОД-ов в определенном неймспейсе:

$ kubectl -n <NAMESPACE_HERE> delete pod --all

Удалить все POD-ы, соответствующие awk pattern1 или pattern2 паттернам:

$ kubectl get pods  -n <NAMESPACE_HERE> --no-headers=true | awk '/pattern1|pattern2/{print $1}' | xargs  kubectl delete -n <NAMESPACE_HERE> pod

Идем дальше.

Работа с Deployments в Kubernetes

Создаем один deployment:

$ kubectl run <NAME_of_POD_HERE> --image=<NAME_of_IMAGE_HERE> --record

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

$ kubectl get deployments

Скользящее обновление «www» контейнеров «frontend» развертывания, обновление образа:

$ kubectl set image deployment/frontend www=image:v2

Список истории развертываний можно получить так:

$ kubectl rollout history deployment/<YOUR_DEPLOYMENT_NAME_HERE>

Если нужно получить конкретную, то выполняем:

$ kubectl rollout undo deployment/<YOUR_DEPLOYMENT_NAME_HERE> --to-revision=N

Наблюдайте за непрерывным обновлением статуса развертывания «внешнего интерфейса» до завершения

$ kubectl rollout status -w deployment/<YOUR_DEPLOYMENT_NAME_HERE>

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

$ kubectl scale deployment/<NAME_of_POD_HERE> --replicas=<N_COUNT_REPLICAS>

Можно использовать файл:

$ kubectl scale --replicas=3 -f scale_replicas.yaml

Если текущий размер деплоймена с равен 3, масштабируйте его до 4 так:

$ kubectl scale --current-replicas=3 --replicas=4 deployment/<YOUR_DEPLOYMENT_HERE>

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

$ kubectl scale --replicas=5 rc/<YOUR_DEPLOYMENT_HERE_1> rc/<YOUR_DEPLOYMENT_HERE_2> rc/<YOUR_DEPLOYMENT_HERE_3>

Чтобы заменить ПОД описание которого содержится в файле можно так:

$ cat pod.json | kubectl replace -f -

Можно выполнить команду и пересоздать ПОД силой (Будет аутедж!):

$ kubectl replace --force -f ./pod.json

И так далее.

Работа с Services в Kubernetes

Чтобы получить список сервисов, выполняем:

$ kubectl get services
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   28d

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

$ kubectl get services --sort-by=.metadata.name

Создать POD в виде сервиса (создает endpoints):

$ kubectl expose deployment/<YOUR_DEPLOYMENT_NAME_HERE> --port=8080 --type=NodePort

Удалить service по определенной лейбе:

$ kubectl delete service -l name=myLabel   

Для удаления всех service-ов в определенном неймспейсе:

$ kubectl -n <NAMESPACE_HERE> delete service --all

Шагаем дальше!

Работа с Volumes в Kubernetes

Чтобы получить список Persistent Volumes:

$ kubectl get pv

Чтобы получить список Persistent Volumes Claims:

$ kubectl get pvc

Если есть необходимость сортировки, можно использовать:

$ kubectl get pv -n <YOUR_NAMESPACE_HERE> --sort-by=.spec.capacity.storage

Можно использовать другие ключи при необходимости.

Работа с Secrets в Kubernetes

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

$ kubectl get secrets
NAME                                                    TYPE                                  DATA   AGE
default-token-rr6t6                                     kubernetes.io/service-account-token   3      28d
sh.helm.release.v1.mirrormaker-in-kubernetes-chart.v1   helm.sh/release.v1                    1      19d

Если не знаете как создать сикрет через CLI, то можно использовать помощь:

$ kubectl create secret generic --help

Например, создаем вот такой сикрет:

$ kubectl create secret generic mysql --from-literal=password=root

Получим информацию о созданном сикрете так:

$ kubectl get secrets mysql -o yaml
apiVersion: v1
data:
  password: cm9vdA==
kind: Secret
metadata:
  creationTimestamp: "2019-12-23T21:33:24Z"
  name: mysql
  namespace: default
  resourceVersion: "210625"
  selfLink: /api/v1/namespaces/default/secrets/mysql
  uid: e0ad6215-cc96-4e03-9ea8-ca5a58a5980c
type: Opaque

Или, можно создать сикрет следующим образом:

$ cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  password: $(echo -n "s33msi4" | base64 -w0)
  username: $(echo -n "jane" | base64 -w0)
EOF

Кому как удобнее, так и используйте.

Вывести все секреты, которые в данный момент используются ПОД-ами:

$ kubectl get pods -o json | jq '.items[].spec.containers[].env[]?.valueFrom.secretKeyRef.name' | grep -v null | sort | uniq

Что дальше? Дальше идем….

Работа с ConfigMaps в Kubernetes

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

$ kubectl create configmap <configmap_name_here> --from-file=config.js

Получаем инфу о конфиг-мапе:

$ kubectl get configmap <configmap_name_here> -o yaml

Работа с DNS в Kubernetes

Получим все DNS-ы по всем неймспейсам:

$ kubectl get pods --all-namespaces |grep dns
kube-system   coredns-5c98db65d4-95dlc                                          1/1     Running   1          28d
kube-system   coredns-5c98db65d4-rhvvs                                          1/1     Running   1          28d

Проверить DNS для nginx ПОД-а (при условии, что POD / контейнер работает) можно так:

$ kubectl exec -ti busybox -- nslookup nginx

Примечание: kube-proxy, работающий в worker узлах, управляет службами и устанавливает правила iptables для прямого трафика.

Работа с Ingress в Kubernetes

Получаем все ингресы:

$ kubectl get ingress

Или, если необходимо использовать другой namespace:

$ kubectl get ingress -n docker
No resources found in docker namespace.

Команды для управления типом службы Ingress для ClusterIP:

$ kubectl expose deployment <YOUR_DEPLOYMENT_HERE> --port=2368

Идем дальше.

Работа с Horizontal Pod Autoscaler в Kubernetes

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

$ kubectl get hpa

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

$ kubectl get hpa -n docker
No resources found in docker namespace.

Задеплоим сервис с репликой, например:

$ kubectl autoscale deployment <YOUR_DEPLOYMENT_HERE> --min=6 --max=666 

Для помощи, используем:

$ kubectl autoscale --help

Работа с DaemonSets в Kubernetes

Чтобы получить ДемонСеты, стоит выполнить:

$ kubectl get daemonsets

Или:

$ kubectl get ds

Дальше добавлю если будет тут инфа.

Работа с Scheduler в Kubernetes

Политика на основе NodeSelector:

$ kubectl label node minikube foo=bar

Связывание узлов через API-сервер:

$ kubectl proxy 
$ curl -H "Content-Type: application/json" -X POST --data @binding.json http://localhost:8001/api/v1/namespaces/default/pods/foobar-sched/binding

Работа с Tains and Tolerations в Kubernetes

Есть команда:

$ kubectl taint node master foo=bar:NoSchedule

Как-то так.

Troubleshooting в Kubernetes

И так, вот список команд которые помогут в траблшутинге K8S:

$ kubectl describe
$ kubectl logs
$ kubectl exec
$ kubectl get nodes --show-labels
$ kubectl get events

Пример, если необходимо получить логи с ПОД-а:

$ kubectl logs <YOUR_POD_HERE>

Тоже самое, но с использованием меток:

$ kubectl logs -l name=<YOUR_LABEL_HERE> 

Вывести логи с придедущего инстала:

$ kubectl logs <YOUR_POD_HERE> --previous 

Тоже самое, но мулитиконвеер:

$ kubectl logs <YOUR_POD_HERE> -c <YOUR_CONTAINER_HERE>

Журналы дампа, с именем метки = yourLabel (стандартный вывод):

$ kubectl logs -l name= yourLabel -c <YOUR_CONTAINER_HERE>

Можно добавить опцию «-f» чтобы получать логи в реальном времени:

$ kubectl logs -f <YOUR_POD_HERE>

Запускать pod как интерактивную оболочку:

$ kubectl run -i --tty busybox --image=busybox -- sh

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

$ kubectl run nginx --image=nginx --restart=Never -n 
your_namespace_here

Запустите pod с nginx и запишите его спецификацию в файл с именем pod.yaml можно так:

$ kubectl run nginx --image=nginx --restart=Never --dry-run -o yaml > pod.yaml

Приатачиться к контейнеру можно так:

$ kubectl attach <YOUR_POD_HERE> -i

Чтобы сделать форвординг портов с локальной машины (например 5555) на ПОД (порт 6666), выполните:

$ kubectl port-forward <YOUR_POD_HERE> 5555:6666

Чтобы выполнить команду на ПОД-е (только в одном контейнере):

$ kubectl exec <YOUR_POD_HERE> -- ls / 

Чтобы выполнить команду на ПОД-е (в нескольких контейнерах):

$ kubectl exec <YOUR_POD_HERE> -c <YOUR_CONTAINER_HERE> -- ls / 

Показать метрики для данного ПОД-а и его контейнеров:

$ kubectl top pod <YOUR_POD_HERE> --containers

Выводим список ивентов отсортированых по timestamp:

$ kubectl get events --sort-by=.metadata.creationTimestamp

Может что-то еще полезное найду и дополню тут.

Взаимодействие с нодами и кластером

Можно пометить ноду как «недоступную» чтобы на нее не шел трафик:

$ kubectl cordon <YOUR_POD_HERE>

Выводим узел на мейнененс окно:

$ kubectl drain <YOUR_POD_HERE>

Вернуть ноду можно так:

$ kubectl uncordon <YOUR_POD_HERE>

Посмотреть метрики на хосте:

$ kubectl top node <YOUR_POD_HERE>

Чтобы вывести мастер-адресс и его сервисы, выполните:

$ kubectl cluster-info
Kubernetes master is running at https://kubernetes.docker.internal:6443
KubeDNS is running at https://kubernetes.docker.internal:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

Вывести текущее состояние дампа кластера в stdout:

$ kubectl cluster-info dump

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

$ kubectl cluster-info dump --output-directory=./k8s_state.json 

Идем дальше.

Работа с Role Based Access Control в Kubernetes

Перечислите все поддерживаемые типы ресурсов вместе с их короткими именами, группой API, являются ли они пространством имен и Kind:

$ kubectl api-resources

Такс, чтобы вывести все ресурсы пространства имен:

$ kubectl api-resources --namespaced=true

Чтобы вывести все ресурсы не относящихся к пространству имен:

$ kubectl api-resources --namespaced=false

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

$ kubectl api-resources -o name

Или, использовать такой подход (показать все ресурсы с расширенным (он же «широкий») выводом):

$ kubectl api-resources -o wide 

Получить все ресурсы, которые поддерживают «list» и «get»:

$ kubectl api-resources --verbs=list,get

Получить все ресурсы в группе API «Расширения»:

$ kubectl api-resources --api-group=extensions
NAME                  SHORTNAMES   APIGROUP     NAMESPACED   KIND
daemonsets            ds           extensions   true         DaemonSet
deployments           deploy       extensions   true         Deployment
ingresses             ing          extensions   true         Ingress
networkpolicies       netpol       extensions   true         NetworkPolicy
podsecuritypolicies   psp          extensions   false        PodSecurityPolicy
replicasets           rs           extensions   true         ReplicaSet

Почти подошли к завершению…

Работа с Role Based Access Control в Kubernetes

Создаем роль:

$ kubectl create role YOUR_ROLE_HERE --verb=get --verb=list --verb=watch --resource=pods

Получаем инфу о роле:

$ kubectl get rolebinding <YOUR_ROLE_HERE> -o yaml

Работа с Security Contexts в Kubernetes

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

$ kubectl apply -f https://k8s.io/examples/pods/security/security-context.yaml

Или 2-й пример:

$ kubectl apply -f https://k8s.io/examples/pods/security/security-context-2.yaml

Дополню позже, когда столкнусь с необходимостью….

Работа с Pod Security Policies в Kubernetes

Дополню позже, когда столкнусь с необходимостью….

Работа с Network Policies в Kubernetes

Создаем аннотацию:

$ kubectl annotate ns <namespace> "net.beta.kubernetes.io/network-policy={\"ingress\": {\"isolation\": \"DefaultDeny\"}}"

Чтобы получить полную или обновленную информацию, советую обратиться к официальной документации!

Вот и все, статья «Команды Kubernetes в Unix/Linux» завершена.

The post Команды Kubernetes в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/komandy-kubernetes-v-unix-linux/feed/ 1
Page_c76a3fcf https://linux-notes.org/utilita-dd-v-unix-linux/ https://linux-notes.org/utilita-dd-v-unix-linux/#respond Wed, 15 May 2019 11:50:49 +0000 http://linux-notes.org/?p=8829 dd (dataset definition) — утилита UNIX, служит для копирования, конвертации файлов, а так же - чтение данных. Название унаследовано от оператора DD (Dataset Definition) из языка JCL.

The post Утилита dd в Unix/Linux first appeared on linux-notes.org.]]>

dd (dataset definition) — утилита UNIX, служит для копирования, конвертации файлов, а так же — чтение данных. Название унаследовано от оператора DD (Dataset Definition) из языка JCL.

Поскольку в UNIX многие объекты (жёсткие/гибкие диски, COM/LPT-порты, оперативная память компьютера, память с кодом/данными каждого процесса) представлены в виде специальных файлов, спектр применения утилиты dd гораздо шире, чем кажется на первый взгляд. Регулярно возникает необходимость не просто скопировать файл или несколько файлов (для чего предназначена утилита cp), а скопировать первые n байт файла, пропустить m байт от начала, прочитать файл с дефектного носителя, транслировать содержимое файла в ASCII, «развернуть» порядок байтов в файле (Little-Endian vs. Big-Endian), просто скопировать очень большой файл или все вместе взятое. Для этой цели и служит dd.

Кроме всего прочего, данная утилита позволяет скопировать регионы из файлов «сырых» устройств, например, сделать резервную копию загрузочного сектора жёсткого диска, или прочитать фиксированные блоки данных из специальных файлов, таких, как /dev/zero или /dev/random.

Название утилиты dd иногда в шутку расшифровывают, как «disk destroyer», «data destroyer», «delete data» или «добей диск», так как утилита позволяет производить низкоуровневые операции на жёстких дисках — при малейшей ошибке (такой, как реверс параметров if и of) можно потерять часть данных на диске (или даже все данные). Есть и более «уважительное» прозвище — «disk duplicator», потому что на практике основное её применение — это копии, образы и бэкапы разделов.

Синтаксис утилиты:

$ dd if=путь_к_файлу of=куда_копировать другие_параметры

где:

  • путь_к_файлу — Путь к файлу, имеджу от куда будут взяты данные.
  • куда_копировать — Куда будут копироваться даные (флешка, диск, файл)
  • другие_параметры — Различные параметры использования.

Возможные параметры:

  • bs — Данная опция служит для указания размера блока (block size), который будет читать и писать данные за один раз. Например, можно указать 512, 1m, 8m. Рекомендую не использовать большие цифры, оптимально — это 4-8мб;
  • cbs — Данный параметр служит для того, чтобы указать сколько байт нужно записывать за один раз;
  • count — Данная опция указывает сколько копировать блоков, а размер блока задается с bs опцией;
  • conv — Опция служит чтобы преобразовать файл в соответствии с разделенными запятыми списком символов. Каждый символ может быть одним из следующих и представляет определенный тип преобразования: ascii, ebcdic, ibm, block, unblock, lcase, nocreat, excl, notrunc, ucase, swab, noerror, sync, fdatasync, fsync. Описание данных типов, будет ниже.
  • ibs — Данная опция указывает на то, сколько необходимо считать байт за раз (Дефолтное значение — 512 байт);
  • obs — Данная опция указывает на то, сколько необходимо записать байт за раз (Дефолтное значение — 512 байт);
  • seek — Данная опция указывает на то, сколько необходимо пропустить количество байт (obs-size блоков) в начале вывода;
  • skip — Данная опция указывает на то, сколько необходимо пропустить количество байт (ibs-size блоков) в начале ввода;
  • status — Указывает насколько подробным нужно сделать вывод;
  • iflag, oflag — Позволяет задать дополнительные флаги работы для устройства ввода и вывода, основные из них: nocache, nofollow.

Параметры conv:

  • ascii — Преобразование с EBCDIC в ASCII.
  • ebcdic — Преобразование с ASCII to EBCDIC.
  • ibm — Преобразование с ASCII в алтернативный EBCDIC.
  • blockpad — Завершение новой строкой записи с пробелами в cbs-size.
  • unblock — Заменить конечные пробелы в записях размера cbs новой строкой.
  • lcase — Изменить верхний регистр на нижний регистрe.
  • nocreat — Не создавайть выходной файл.
  • excl — Ошибка, если выходной файл уже существует.
  • notrunc — Не обрезать выходной файл.
  • ucase — Заменить нижний регистр на верхний.
  • swab — Поменять местами каждую пару входных байтов.
  • noerror — Продолжить после ошибок чтения.
  • sync — Дополняет каждый входной блок значениями NUL до размера ibs; при использовании с block или unblock, используеться блок с пробелами, а не NUL.
  • fdatasync — Физически записывает данные выходного файла до окончания процесса.
  • fsync — Аналогично, но также пишуться метаданные.

Параметры для iflag, oflag:

  • append — append mode (имеет смысл только для вывода; conv=notrunc предложение).
  • direct — Использует прямой ввод/вывод (I/O) для данных.
  • directory — Выдает фейл, если используете каталог.
  • dsync — Использовать синхронизированность I/O для данных.
  • sync — Точно так же, но и для метаданных.
  • fullblock — Накапливает полные блоки ввода (iflag только).
  • nonblock — Использует неблокирующий ввод/вывод (I/O).
  • noatime — Не обновляет время доступа (зачастую используеться).
  • noctty — Не назначает управляющий терминал из файла.
  • nofollow — Не переходит по символическим ссылкам.

Для count, seek, skip, bs, cbs, ibs, obs можно использовать слудующую размерность:

  • c=4
  • w=8
  • b=512
  • kB=1000
  • K=1024
  • MB=1000*1000
  • M=1024*1024
  • xM=M
  • GB=1000*1000*1000
  • G=1024*1024*1024

Примеры утилиты dd в Unix/Linux

Начнем с самого простого — получить помощь:

$ dd --help

Замечаение: в Unix (например на MacOS) может не работать, по этому — имееться следующее решение:

$ man dd

Узнать версию можно вот так:

$ dd --version

Замечание: Работат на Linux. На Unix, возможно не будет работать.

-=== ПРИМЕР 1 ===-

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

$ sudo dd if=2019-04-08-raspbian-stretch-lite.img of=/dev/disk3 bs=1m

-=== ПРИМЕР 2 ===-

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

# dd if=/dev/disk2 of=/dev/disk3 bs=4096 conv=noerror,sync

-=== ПРИМЕР 3 ===-

Так же, иногда полезно сжать данные и записать их куда-то (Проверял только с gzip, bzip2). Например, необходимо сделать бэкап. Используем bzip2 сжатие:

# dd if =/dev/disk2 | bzip2 disk2.img.gz

Или, используем gzip:

$ sudo dd if=/dev/disk3 | gzip -c > /Users/captain/raspberrypi.img.gz
Password:
250347520+0 records in
250347520+0 records out
128177930240 bytes transferred in 6767.601942 secs (18939933 bytes/sec)

Не забываем комбинировать опции (можно использовать в этом случае: bs=8m, status=progress, conv=fsync)

PS: для рестора можно заюзать:

# gzip -dc /Users/captain/raspberrypi.img.gz | dd of=/dev/disk2

Можно удаленно создать бэкап, например:

# ssh your_ssh_user@your_ssh_host "dd if=/dev/disk2 | gzip -1 -" | dd of=your_backup_here.gz

Как другое решение, можно делать бекап по указанному времени и бэкапить его по сети. Например:

# dd if=/dev/disk2 | ssh your_ssh_user@your_ssh_host "dd of=/Users/captain/raspberrypi.img.gz".

PS: Стоит добавить SSH ключи ssh будет работать такая схема

-=== ПРИМЕР 4 ===-

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

# dd if=/dev/zero of=/dev/disk2

PS: Можно обнулить только определенное количество байт, например:

# dd if=/dev/zero of=/home/captain/the_file_here bs=512 count=1 conv=notrunc

Проверить можно тем же dd, но преобразовав данные в hex:

# dd if=/dev/disk2 | hexdump -C

Должны быть 0. Или, можно проверить еще другим методом:

# dd if=/dev/disk2 | hexdump -C | grep [^00] 

Можно для тестирования, взять и скопировать 10 ГБ нулей и перенаправить их в /dev/null (в никуда):

# dd if=/dev/zero of=/dev/null bs=100M count=100

Уничтожить суперблок можно:

# dd if=/dev/zero count=1 bs=1024 seek=1 of=/dev/disk2 

или еще один солюшен:

# dd if=/dev/zero count=1 bs=4096 seek=0 of=/dev/disk2 

Чтобы очистить первые 113 МБ раздела:

# dd if=/dev/zero of=/dev/disk2\
 bs=113m count=1

-=== ПРИМЕР 5 ===-

MBR расположена в первых 512 байтах жесткого диска, и состоит из таблицы разделов, загрузчика и пары дополнительных байт. Иногда, ее приходится бекапить, восстанавливать и т.д. Бекап можно сделать так:

# dd if=/dev/disk2 of=just_mbr_in.img bs=512 count=1

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

# dd if=just_mbr_in.img of=/dev/disk2

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

# dd if=/dev/disk2 of=/tmp/disk2_mbr2.img bs=446 count=1

Вернуть назад можно так:

# dd if=/home/test/just_mbr_in.img of=/dev/disk2 bs=446 count=1

Cкопировать MBR на дискету:

# dd if=/dev/disk2 of=/dev/fd0 bs=512 count=1

Просмотр MBR-а через dd утилиту:

# dd if=/dev/disk2 count=1 | hexdump -C

-=== ПРИМЕР 6 ===-

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

# dd if=/dev/zero of=your_image_is.crypted bs=1M count=1000

Заполнить диск рандомными значениями:

# dd if=/dev/random of=/dev/disk2

Затереть файл\диск n-раз, можно так (в моем случаее, будет перезапись 20 раз):

# for i in {1..20};do dd if=/dev/random of=/dev/disk2; done

-=== ПРИМЕР 7 ===-

Создаем ISO из CD/DVD ROM-а на локальное устройство (файл на вашем диске):

# dd if=/dev/cdrom of=/your_image_from_cdrom.iso

Создать DVD образы раздела (полезно для резервного копирования):

# dd if=/dev/disk2 of=/your_disk2_1.img\
 bs=4M count=4430
# dd if=/dev/disk2 of=/your_disk2_2.img\
 bs=4M count=8860
[...]

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

# dd if=/your_disk2_1.img of=/dev/disk2\
 bs=8M
# dd if=/your_disk2_2.img of=/dev/disk2\
 seek=4430 bs=8M
# dd if=/your_disk2_3.img of=/dev/disk2\
 seek=8860 bs=8M

Создать ISO из флопика можно вот так:

# dd if=/dev/fd0  of=~/floppy_here.img

-=== ПРИМЕР 8 ===-

Преобразовать формат данных файла( пример с EBCDIC в ASCII):

# dd if=textfile.ebcdic of=textfile.ascii conv=ascii

Преобразовать формат данных файла( пример с ASCII в EBCDIC):

# dd if=textfile.ascii of=textfile.ebcdic conv=ebcdic

-=== ПРИМЕР 9 ===-

Например у вас есть файл с текстом:

# cat file_with_lowercase.txt
test dd convert

Если нужно сконвертировать содержимое файл в верхний регистр:

# dd if=~/file_with_lowercase.txt of=~/file_with_uppercase.txt conv=ucase

Еще пример:

# ls -l | dd conv=ucase

Если нужно сконвертировать содержимое файла в нижний регистр:

# dd if=~/file_with_uppercase.txt of=~/file_with_lowercase.txt conv=lcase

-=== ПРИМЕР 10 ===-

Для просмотра вашей виртуальной памяти служит команда:

# dd if=/proc/kcore | hexdump -C | less

-=== ПРИМЕР 11 ===-

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

# dd if=/proc/filesystems | hexdump -C | less

-=== ПРИМЕР 12 ===-

Проверить все загруженные модули с помощью dd:

# dd if=/proc/kallsyms | hexdump -C | less

-=== ПРИМЕР 13 ===-

Для посмотра таблицы прерываний, есть команда:

# dd if=/proc/interrupts | hexdump -C | less

-=== ПРИМЕР 14 ===-

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

# dd if=/proc/uptime | hexdump -C | less

-=== ПРИМЕР 15 ===-

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

# dd if=/proc/partitions | hexdump -C | less

-=== ПРИМЕР 16 ===-

Вывод статистики памяти:

# dd if=/proc/meminfo | hexdump -C | less

-=== ПРИМЕР 17 ===-

Хороший способ проверить наличие бэдов на устройстве с командой dd:

# dd if=/dev/disk2 of=/dev/null bs=1m 

-=== ПРИМЕР 17 ===-

Так же, можно с данной утилитой проверить файл на вирусы (но нужен для этого, нужно установить ClamAV):

# dd if=/home/captain/your_file_for_checking.gz | clamscan -

Ссылка на ClamAV:

Установка ClamAV на Debian/Ubuntu/ Linux Mint

Установка ClamAV на RedHat/Centos/Fedora

-=== ПРИМЕР 18 ===-

Тестируем скорость чтения/записи жестких дисков:

# dd if=/home/your_big_file_here of=/dev/null
# dd if=/dev/zero of=/home/your_big_file_here\
bs=1024 count=1000000

-=== ПРИМЕР 19 ===-

Вывести файл на стандартный вывод можно вот так:

# dd if=/home/your_file_here

-=== ПРИМЕР 20 ===-

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

# dd if=/dev/disk2 bs=16065 | hexdump -C\
 | grep 'search text string here'

-=== ПРИМЕР 21 ===-

Чтобы считать BIOS, выполните:

# dd if=/dev/mem bs=1k skip=768 count=256 \
2>/dev/null | strings -n 8

-=== ПРИМЕР 22 ===-

Нашел забавный пример:

# echo -n "hello man" | dd cbs=1 \
> conv=unblock 2> /dev/null
h
e
l
l
o

m
a
n

-=== ПРИМЕР 23 ===-

Убрать/проигнорировать первые 111 байтов стандартного ввода:

# dd ibs= 111 skip=1

-=== ПРИМЕР 24 ===-

Делаем быстрое резервное копирование по сети с использованием Netcat:

# dd if=/dev/disk2 | nc -l 10001 
nc $system_to_backup_IP 10001 | dd\
 of=sysbackupsda.img 

-=== ПРИМЕР 25 ===-

Создаем временное пространство подкачки:

# dd if=/dev/zero of=tmpswap bs=1k\
 count=1000000
# chmod 600 tmpswap
# mkswap tmpswap
# swapon tmpswap

-=== ПРИМЕР 26 ===-

Определите скорость последовательного ввода-вывода вашего привода. Чтение 1 ГБ файла:

# dd if=/dev/disk2 of=/dev/null bs=1024k \
count=1024

-=== ПРИМЕР 27 ===-

Можно добавить прогресс бар, например:

# dd bs=4M if=2019-04-08-raspbian-stretch-lite.img | pv | of=/dev/disk3 conv=fsync

Или:

# sudo dd if=2019-04-08-raspbian-stretch-lite.img of=/dev/disk3 bs=1m status=progress conv=fsync

-=== ПРИМЕР 28 ===-

Генерируем рандомную строку с 32 символами ( задали их):

$ tr -dc 'A-HJ-NP-Za-km-z2-9' < /dev/urandom | dd bs=32 count=1 status=none; echo ""
x6WN2gsc4YZ82mkR8vDFmMBTcJqedeHU

Или:

$ base64 /dev/urandom | tr -d '/+' | dd bs=32 count=1 2>/dev/null
SHvwctzkxOjm8iV7YBS9KCrfoaaxy0Ye

На этом у меня все, статья «Утилита dd в Unix/Linux» завершена.

The post Утилита dd в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/utilita-dd-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/ustanovka-libnotify-v-unix-linux/ https://linux-notes.org/ustanovka-libnotify-v-unix-linux/#respond Sun, 14 Jan 2018 21:24:43 +0000 http://linux-notes.org/?p=14911 Установка libnotify в Unix/Linux Команда notify-send позволяет отправлять уведомления пользователю. Очень прикольная утилита и сейчас я расскажу как ее использовать. Полезное чтиво: Установка GUI на Arch Linux Установка GUI на Debian/Ubuntu/Mint Установка GUI на RedHat/CentOS/Fedora Установка libnotify в Debian/Ubuntu Вам необходимо установить следующий пакет на Debian/Ubuntu Linux с помощью apt-get команды: $ sudo apt-get install libnotify-bin Установка […]

The post Установка libnotify в Unix/Linux first appeared on linux-notes.org.]]>

Установка libnotify в Unix/Linux

Команда notify-send позволяет отправлять уведомления пользователю. Очень прикольная утилита и сейчас я расскажу как ее использовать.

Полезное чтиво:

Установка GUI на Arch Linux

Установка GUI на Debian/Ubuntu/Mint

Установка GUI на RedHat/CentOS/Fedora

Установка libnotify в Debian/Ubuntu

Вам необходимо установить следующий пакет на Debian/Ubuntu Linux с помощью apt-get команды:

$ sudo apt-get install libnotify-bin

Установка libnotify в CentOS/RedHat

Вам необходимо установить следующий пакет на CentOS/RHEL с помощью yum команды:

# yum install libnotify -y

Установка libnotify в Fedora

Вам необходимо установить следующий пакет на Fedora с помощью dnf команды:

$ sudo dnf install libnotify

Установка libnotify в Arch Linux

Для установки libnotify выполните команду:

# pacman -S libnotify

Установка libnotify в MacOS X

Первое что нужно сделать, — установить homebrew и потом, выполнить поиск пакета:

$ brew search libnotify

Для установки, выполните:

$ brew install libnotify

Использование libnotify в Unix/Linux

Приведу пример, если выполнить в коммандной строке следующее:

$ notify-send "Test notifi-send command"

Получаем следующее:

Использование notify-send

Вот еще пример:

$ notify-send --urgency normal --expire-time=10000 -i typing-monitor -h int:x:500 -h int:y:500 "Пора сделать перерыв" "Глазам нужен отдых"

Данный пример, довольно полезен и можно добавить в крон на 45 или 60 минут.

Хотя на MacOS X имеется данный пакет, я не смог запустить такое сообщение на данной ОС. Исправить можно следующим образом, — поставить другой пакет:

$ brew install terminal-notifier

И пример:

$ echo 'Piped Message Data!' | terminal-notifier -sound default

Для получения дополнительной информации об использовании утилиты notify-send, смотрим помощь:

$ man notify-send

А на этом, у меня все. Статья «Установка libnotify в Unix/Linux» завершена.

The post Установка libnotify в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-libnotify-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/otpravit-soobshhenie-drugomu-pol-zovatelyu-na-servere-v-unix-linux/ https://linux-notes.org/otpravit-soobshhenie-drugomu-pol-zovatelyu-na-servere-v-unix-linux/#respond Sat, 18 Nov 2017 16:35:10 +0000 http://linux-notes.org/?p=14061 Отправить сообщение другому пользователю на сервере в Unix/Linux Так бывает, что на сервере работают и другие пользователи одновременно с вами. Допустим вам, необходимо выполнить перезагрузку ОС так,чтобы другие юзеры не пострадали и успели сохранить свои данные до ребута. Сейчас я расскажу как можно это сделать несколькими способами. Для начала, посмотрим кто находится в системе: $ […]

The post Отправить сообщение другому пользователю на сервере в Unix/Linux first appeared on linux-notes.org.]]>

Отправить сообщение другому пользователю на сервере в Unix/Linux

Так бывает, что на сервере работают и другие пользователи одновременно с вами. Допустим вам, необходимо выполнить перезагрузку ОС так,чтобы другие юзеры не пострадали и успели сохранить свои данные до ребута. Сейчас я расскажу как можно это сделать несколькими способами.

Для начала, посмотрим кто находится в системе:

$ w

Вывод:

 18:07:26 up 38 days,  6:22,  2 users,  load average: 1.22, 1.24, 1.25
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
captain  pts/0    159.224.217.24   17:46    1.00s  0.45s  0.00s w
captain  pts/1    159.224.217.24   17:58    7:05   0.11s  0.11s bash -l

Так же, можно использовать:

$ who -u

Вывод:

captain  pts/0        2017-11-18 17:46 00:05      143820 (159.224.217.24)
captain  pts/1        2017-11-18 17:58   .        145964 (159.224.217.24)

Для примера, я залогинился на сервер дважды от одного и того же юзера.

-=== СПОСОБ 1 — Используем echo команду ==-

Можно отправить сообщение другому пользователю следующим образом:

# echo -e "\033[0;31m Can I reboot this server... OK? \033[0m" > /dev/pts/1

Где:

  • echo -e «\033[0;31m Can I reboot this server… OK? \033[0m» — Команда.
  • /dev/pts/1 — Это открытая сессия пользователя.

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

-=== СПОСОБ 2 — Используем write команду ==-

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

# write captain pts/1

Где:

  • captain — Юзер которому нужно отправить сообщение.
  • pts/1 — Сессия данного юзера.

Напишите сообщение и отправьте его через нажатие ‘Enter’,  и оно будет отправлено в терминал юзера. Используйте Ctrl+D чтобы прервать  утилиту write.

Можно написать сообщение в файл (предположим — send_to_user.txt):

# vim send_to_user.txt

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

$ cat send_to_user.txt | write captain pts/1

Очень простая и полезная тулза.

-=== СПОСОБ 3 — Используем wall команду ==-

Для отправки широковещательного сообщения всем подключенным пользователям, используется команда wall (wall = write to all):

$ wall
I will reboot this server at 02:00!

Но данное сообщение будет отправлено только после того, как вы нажмете — Ctrl+D

Можно написать сообщение в файл (предположим — send_to_user.txt):

# vim send_to_user.txt

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

$ cat send_to_user.txt | wall

Вот и все, статья «Отправить сообщение другому пользователю в Unix/Linux» завершена.

The post Отправить сообщение другому пользователю на сервере в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/otpravit-soobshhenie-drugomu-pol-zovatelyu-na-servere-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/zapustit-komandu-ot-drugogo-pol-zovatelya-v-unix-linux/ https://linux-notes.org/zapustit-komandu-ot-drugogo-pol-zovatelya-v-unix-linux/#comments Sat, 18 Nov 2017 15:56:17 +0000 http://linux-notes.org/?p=14038 Запустить команду от другого пользователя в Unix/Linux Иногда, просто необходимо запустить команду от другого пользователя. И существует несколько способов, как это можно сделать. Я расскажу о них в своей статья «Запустить команду от другого пользователя в Unix/Linux». Запустить команду от другого пользователя в Unix/Linux — способ 1 И так, можно использовать утилиту SUDO. Рассмотрим пример: […]

The post Запустить команду от другого пользователя в Unix/Linux first appeared on linux-notes.org.]]>

Запустить команду от другого пользователя в Unix/Linux

Иногда, просто необходимо запустить команду от другого пользователя. И существует несколько способов, как это можно сделать. Я расскажу о них в своей статья «Запустить команду от другого пользователя в Unix/Linux».

Запустить команду от другого пользователя в Unix/Linux — способ 1

И так, можно использовать утилиту SUDO. Рассмотрим пример:

$ sudo -H -u Your_another_user -c 'ping linux-notes.org'

Пояснения:

  • -H YOUR_HOME: Задает HOME (Переменное окружение для хома конкретного юзера) и по умолчанию — это root.
  • -u YOUR_USER: Задаем пользователя от которого будет выполнена команда.
  • -c YOUR_COMMAND: Служит опцией для ввода команды.

Как-то так.

Запустить команду от другого пользователя в Unix/Linux — способ 2

Можно использовать утилиту SU. И сейчас приведу несколько примеров.

Логин в root юзера

Чтобы получить рута, выполните:

$ su -

Или:

$ su - root

Запустить команду как root юзер

Вот пример команды:

# su - root -c "YOUR_COMMAND_HERE"

Или

su - -c "YOUR_COMMAND_HERE arg1"

Идем дальше….

Выполнить команду от другого пользователя с помощью su

И так, вот пример:

# su -c "/opt/solr/bin/solr create -c test_solr_core -n solrconfig.xml" -s /bin/sh solr

Created new core 'test_solr_core'

Рассмотрим другой пример:

$ su another_user -c 'ping linux-notes.org'

Или:

$ su - YOUR_USER -c "YOUR_COMMAND_HERE"

Где:

  • — — Будет имитировать логин указанного пользователя.
  • -c — Служит для указания команды для выполнения (для указанного юзверя).

Как-то так.

Запустить команду от другого пользователя в Unix/Linux — способ 3

И так, можно использовать утилиту runuser. Команда runuser запускает оболочку с заменяющими идентификаторами пользователей и групп. Эта команда полезна только когда вы залогинены как пользователь root. Синтаксис выглядит следующим образом:

# runuser -l YOUR_USER -c 'YOUR_COMMAND_HERE'

Как пример, я покажу следующую строку:

# runuser -l nginx -c 'service nginx start'

PS: Для использования команды runuser пароль не требуется, и он должен запускаться только пользователем root.

Основные опции:

  • -l: Создаст оболочку для входа в систему, используя файл runuser-l PAM вместо стандартного.
  • -g: Указывает на основную группу.
  • -G: Указывает на дополнительную группу.
  • -c: Собственно, служит для указания команды.
  • –session-command=COMMAND: Передает одну команду в оболочку с  опцией «-c» и не создает новый сеанс.
  • -m: Не сбрасывайте переменные среды (ENV).

Вот и все, тема «Запустить команду от другого пользователя в Unix/Linux» завершена.

The post Запустить команду от другого пользователя в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/zapustit-komandu-ot-drugogo-pol-zovatelya-v-unix-linux/feed/ 5
Page_c76a3fcf https://linux-notes.org/rabota-s-aws-ec2-cherez-komandnuyu-stroku-v-unix-linux/ https://linux-notes.org/rabota-s-aws-ec2-cherez-komandnuyu-stroku-v-unix-linux/#respond Thu, 25 May 2017 16:33:31 +0000 http://linux-notes.org/?p=13222 Работа с AWS EC2 через командную строку в Unix/Linux AWS CLI  — это консольная утилита которая позволяет работать с AWS EC2 через командную строку. Я хотел бы сделать заметку о том как работать AWS EC2 в консоле. Работа с AWS EC2 через командную строку в Unix/Linux Устанавливаем AWS CLI: Установка AWS CLI в Unix/Linux Открываем конфиг: # vim […]

The post Работа с AWS EC2 через командную строку в Unix/Linux first appeared on linux-notes.org.]]>

Работа с AWS EC2 через командную строку в Unix/Linux

AWS CLI  — это консольная утилита которая позволяет работать с AWS EC2 через командную строку. Я хотел бы сделать заметку о том как работать AWS EC2 в консоле.

Работа с AWS EC2 через командную строку в Unix/Linux

Устанавливаем AWS CLI:

Установка AWS CLI в Unix/Linux

Открываем конфиг:

# vim ~/.aws/credentials

Прописываем ключи. Например:

[Your_acc_name]
aws_access_key_id = XXXXXXXXXXXXXXXXXXXXXXXXX
aws_secret_access_key = YYYYYYYYYYYYYYYYYYYY

Где:

  • Your_acc_name — Имя для аккаунта. Потом можно его использовать.
  • aws_access_key_id — Ключик.
  • aws_secret_access_key — Еще один ключик.

Просмотр AWS EC2 через командную строку в Unix/Linux

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

$ aws ec2 --profile Reaxys describe-volumes

PS: Иногда требуется указывать регион:

$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes

Так же, можно region указать в конфиг-файле.

Чтобы распечатать только 1-ю volume, используйте:

$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes --query 'Volumes[0]'

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

$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes --query 'Volumes[*]'

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

$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes --query 'Volumes[*].{ID:VolumeId,AZ:AvailabilityZone,Size:Size}'

Вот еще пример:

$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes --query 'Volumes[*].{ID:VolumeId,InstanceId:Attachments[0].InstanceId,AZ:AvailabilityZone,Size:Size}'

Можно вывести волюмы с определенного региона, например:

$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes --query 'Volumes[?AvailabilityZone==`us-east-1d`]'

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

$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes --query 'Volumes[*].[VolumeId, Attachments[0].InstanceId, AvailabilityZone, Size, FakeKey]' --output text

Добавил параметр для вывода состояния волюмы:

$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes --query 'Volumes[*].[VolumeId, Attachments[0].InstanceId, AvailabilityZone, State, Size, FakeKey]' --output text

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

$ aws ec2 --profile Reaxys --region us-east-1 describe-volumes --query 'Volumes[*].{ID:VolumeId,InstanceId:Attachments[0].InstanceId,AZ:AvailabilityZone,Size:Size}' --output table

Ничего сложного.

Проверим доступность зон:

$ aws ec2 --profile Reaxys --region us-east-1 describe-availability-zones

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

$ aws ec2 --profile Reaxys --region us-east-1 describe-images

Или, для определенного:

$ aws ec2 --profile Reaxys --region us-east-1 describe-images --image-ids "ami-f480c59e"

Идем далее.

Генерация CLI Skeleton через командную строку в Unix/Linux

Большинство команд CLI поддерживают параметры «-generate-cli-skeleton» и «-cli-input-json», которые вы можете использовать для хранения параметров в JSON и читать их из файла, а не вводить их в командной строке.

И так, сгенерируем скелетон:

$ aws ec2 --profile Reaxys --region us-east-1 run-instances --generate-cli-skeleton --dry-run

PS: Опция «—dry-run» служит для тестирования ( она не создает никаких изменений).

Можно сохранить вывод в файл:

$ aws ec2 --profile Reaxys --region us-east-1 run-instances --generate-cli-skeleton > ec2runinst.json

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

Передайте конфигурацию JSON-у:

$ aws ec2 --profile Reaxys --region us-east-1 run-instances --cli-input-json file://ec2runinst.json

Перезапуск AWS EC2 инстенсов через командную строку в Unix/Linux

Смотрим какие имеются:

$ aws ec2 --profile Reaxys --region us-east-1 describe-instances --query 'Reservations[].Instances[].[PrivateIpAddress,InstanceId,State.Name]' --output text

И, собственно, ребутаем:

$ aws ec2 --profile Reaxys --region us-east-1 reboot-instances --instance-ids i-09aa273c40cb05767 --dry-run

PS: Я использую «—dry-run» опцию для тестов. С данной опцией не произойдет рестарт инстенса.

В AWS CLI для EC2 нет ничего сложного. Нужно почитать документацию и вникнуть в процесс.

Для помощи, используйте:

$ aws ec2 help

Я постараюсь дополнять данную тему новыми примерами.

Вот и все, статья «Работа с AWS EC2 через командную строку в Unix/Linux» завершена.

The post Работа с AWS EC2 через командную строку в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/rabota-s-aws-ec2-cherez-komandnuyu-stroku-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/ustanovka-watch-v-unix-linux/ https://linux-notes.org/ustanovka-watch-v-unix-linux/#respond Wed, 24 May 2017 21:45:45 +0000 http://linux-notes.org/?p=10652 Установка watch в Unix/Linux Watch — очень мощный инструмент командной строки, который запускает утилиту в интервал времени и отображает результаты на стандартном выводе в полноэкранном режиме, подобно команде top. Установка watch в Unix/Linux Во многих Linux дистрибутивах уже установлена данная утилита. По этому, ее устанавливать не нужно. Если не установлен данный пакет, можно поставить его. Установка watch […]

The post Установка watch в Unix/Linux first appeared on linux-notes.org.]]>

Установка watch в Unix/Linux

Watch — очень мощный инструмент командной строки, который запускает утилиту в интервал времени и отображает результаты на стандартном выводе в полноэкранном режиме, подобно команде top.

Установка watch в Unix/Linux

Во многих Linux дистрибутивах уже установлена данная утилита. По этому, ее устанавливать не нужно. Если не установлен данный пакет, можно поставить его.

Установка watch в Debian/Ubuntu/Mint

Выполняем:

$ sudo apt-get install watch

Установка watch в RHEL/CentOS

Выполняем:

$ sudo yum install watch

Установка watch в Fedora

Выполняем:

$ sudo dnf install watch

Установка watch в openSUSE

Выполняем:

$ sudo zypper install watch

Установка watch в Arch Linux

Выполняем:

$ sudo pacman -S watch

Установка watch в Mac OS X

Подключаем homebrew:

Установка homebrew на Mac OS X

Выполним поиск пакета:

$ brew search watch

Можно его установить:

$ brew install watch

Установка завершена, можно перейти к использованию.

Использование watch в Unix/Linux

Синтаксис данной утилиты, отличается в Unix/Linux дистрибутивах.

Использование watch в Linux

По умолчанию команда watch выводит результаты каждые 2 секунды. Используйте следующий формат для запуска команды watch каждую секунду:

$ watch -n 1 free -m

Используйте опцию «-d» с командой watch, чтобы получить четкую разницу между выводом (она будет выделять предыдущий вывод и текущий:

$ watch -d -n 1 free -m

Можно легко наблюдать за процессом создания или копирования дампа ( как пример):

$ cp may_dump.tar.gz /home/captain &

И проверяем:

$ watch -n 0.1 du -h /home/captain/my_dump.tar.gz

Или:

$ watch -n 0.1 ls -h /home/captain/my_dump.tar.gz

Можно, мониторить (выводить) логи:

$ watch tail /var/log/messages

В системах Linux ps команда может использоваться вместе с командой watch для наблюдения работой служб. Например, чтобы запустить команду ps 5 раз в секунду (Для zabbix процессов) используйте:

# watch -n 0.2 ps -fu zabbix

Посмотреть/Показать только zabbix_proxy и zabbix_agent процессы:

# watch -tn 0.2 'ps -f -C zabbix_proxy -C zabbix_agentd'

Чтобы показать только процессы синхронизации истории (речь идет о заббикс):

# watch -tn 0.2 'ps -fC zabbix_server | grep history'

Команда ps имеет довольно большой вывод информации (приблизительно 190 столбцов) и по этому, можно попробовать отобразить только командные строки без UID, PID, времени старта:

# watch -tn 0.2 'ps -o cmd -C zabbix_server -C zabbix_proxy -C zabbix_agentd'

Использование watch в BSD

Если команда watch не установлена, аналогичный эффект может быть достигнут при:

# while [ 1 ]; do ps x; sleep 0.2; clear; done

Использование watch в AIX, HP-UX

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

# while [ 1 ]; do ps -fu zabbix; sleep 1; clear; done

Использование watch в Solaris

Если команда watch не установлена, периодически обновляемый список процессов может быть показан с:

# while [ 1 ]; do /usr/ucb/ps gxww; sleep 1; clear; done

Использование watch в Mac OS X

Можно использовать:

# watch -n 0.2 ps -fu captain

Как-то так!

Можно обойтись без этой утилиты, — заюзать алиас. Например:

# vim ~/.bashrc

Добавляем:

alias myWatch='_() { while :; do clear; $2; sleep $1; done }; _'

Выполняем:

# . ~/.bashrc

а вот, собственно примеры:

$ myWatch 5 "ls -lF $HOME"

Или:

$ myWatch 1 ps uax | grep captain

У меня все, статья «Установка watch в Unix/Linux» завершена.

The post Установка watch в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/ustanovka-watch-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/komanda-nohup-v-unix-linux/ https://linux-notes.org/komanda-nohup-v-unix-linux/#respond Mon, 24 Apr 2017 15:54:54 +0000 http://linux-notes.org/?p=10456 Команда nohup в Unix/Linux nohup — утилита, которая позволяет запустить команду, защищенную от зависания с выходом на non-tty (игнорирует потерю сигналов связи SIGHUP). Если стандартным выводом (stdout) команды является терминал, то он и стандартный вывод ошибок (stderr) перенаправляются с добавлением в файл «nohup.out» в текущей директории; если это невозможно сделать, то перенаправление происходит в файл «$HOME/nohup.out». Если […]

The post Команда nohup в Unix/Linux first appeared on linux-notes.org.]]>

Команда nohup в Unix/Linux

nohup — утилита, которая позволяет запустить команду, защищенную от зависания с выходом на non-tty (игнорирует потерю сигналов связи SIGHUP). Если стандартным выводом (stdout) команды является терминал, то он и стандартный вывод ошибок (stderr) перенаправляются с добавлением в файл «nohup.out» в текущей директории; если это невозможно сделать, то перенаправление происходит в файл «$HOME/nohup.out». Если и это невозможно сделать, то команда не запускается совсем. При создании файлов «nohup.out» или «$HOME/nohup.out» команда nohup устанавливает им атрибуты доступа только для владельца этих файлов (группа и остальные пользователи не имеют прав доступа к этим файлам). Если же эти файлы уже существуют, то их права доступа не изменяются.

Команда nohup в Unix/Linux

Некоторая работа или команда занимает много времени. Если вы не уверены, когда закончится задание, лучше оставить работу в фоновом режиме. Все процессы (кроме at и batch), выполняют завершение при выходе из системы. Утилита nohup дает возможность, чтобы  при выходе из  системы процесс продолжал работу в фоновом режиме. Например:

# nohup command Arg(s) &
  • command: Это имя скрипта или клманды которую запускаете. Так же, вы можете передать аргумент(ы) команде или скрипту.
  • Arg(s) — Это аргумент(ы) для команды или скрипта( можно не прописывать).
  • & : Чтобы nohup  работал в фотоновом режиме, используйте & символ.

Приведу очень наглядный пример. Допустим, вам нужно выполнить grep по определенному слову «ddos» и при поступлении данных ( допустим ДДОС или что-то еще), то можно запустить grep с нужным словом для поиска в фоновом режиме. Он будет находить нужные слова и записывать в определенный файл:

# nohup grep ddos * > /home/captain/ddos.txt &

Или:

# nohup cat /var/log/nginx/access.log| grep "admin" > /home/captain/bruteforce.txt &

И смотрим на процесс:

# ps -aux | grep nohup

Вы можете завершить команду nohup с помощью команды kill.

Вот еще пример того, как можно запускать сервер nginx в фоновом режиме:

# nohup service nginx start > /dev/null 2>&1&

В этом примере я собираюсь найти все утилиты/скрипты с setuid битом:

# nohup find / -xdev -type f -perm +u=s -print > /home/output.txt &

Обратите внимание, что nohup не изменяет приоритет ; Для этого используйте «nice» команду:

# nohup nice -n -5 ls / > /home/some_output.txt &

Опции nohup в Unix/Linux

Чтобы вывести помощь:

$ nohup --help

Для отображения версии, используйте:

$ nohup --version

А на этом, у меня статья «Команда nohup в Unix/Linux» подошла к завершению.

The post Команда nohup в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/komanda-nohup-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/utilita-pidstat-v-unix-linux/ https://linux-notes.org/utilita-pidstat-v-unix-linux/#respond Sat, 25 Feb 2017 22:57:43 +0000 http://linux-notes.org/?p=11888 Утилита pidstat в Unix/Linux Утилита pidstat– это сокращение от PID Statistics (статистика по PID) и входит в sysstat пакет и используется для мониторинга процессов в режиме реального время. Это инструментальное средство выдает различные статистические данные по процессу, в том числе об использовании процессора, об использовании процессом дискового пространства, о потоках, связанных с выбранными задачами и дочерними процессами. […]

The post Утилита pidstat в Unix/Linux first appeared on linux-notes.org.]]>

Утилита pidstat в Unix/Linux

Утилита pidstat– это сокращение от PID Statistics (статистика по PID) и входит в sysstat пакет и используется для мониторинга процессов в режиме реального время. Это инструментальное средство выдает различные статистические данные по процессу, в том числе об использовании процессора, об использовании процессом дискового пространства, о потоках, связанных с выбранными задачами и дочерними процессами.

Установка pidstat в Unix/Linux

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

Установка pidstat в CentOS/Fedora/RedHat

Выполните команду:

# yum install sysstat -y

Установка pidstat в Debian/Ubuntu/Mint

Выполните команду:

# apt-get install sysstat -y

Установка pidstat в других Unix/Linux ОС

Сейчас будем собирать с исходного кода:

# cd /usr/local/src/ &&  git clone git://github.com/sysstat/sysstat && cd sysstat

И собираем:

# ./configure && make && make install

Использование pidstat в CentOS/Fedora/RedHat

Запуск pidstat без какого-либо аргумента равносильно «-p ALL» аргументу:

# pidstat -p ALL

# pidstat

Вывод можно получить следующий:

Linux 2.6.32-042stab112.15 (linux-notes.org) 	02/21/2017 	_x86_64_	(24 CPU)


04:44:24 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
04:44:24 PM     0         1    0.00    0.00    0.00    0.01     3  systemd
04:44:24 PM  1001     21820    0.00    0.00    0.00    0.00     0  php-fpm
04:44:24 PM  1001     21835    0.00    0.00    0.00    0.00     3  php-fpm
04:44:24 PM     0    138991    0.00    0.00    0.00    0.00     0  bash
04:44:24 PM   992    139041    0.00    0.00    0.00    0.00     3  check_ping
04:44:24 PM   992    139042    0.00    0.00    0.00    0.00     3  ping
04:44:24 PM     0    139044    0.00    0.00    0.00    0.00     3  pidstat
04:44:24 PM   998    162672    0.00    0.00    0.00    0.00     2  fcgiwrap

Где:

  • PID — Идентификационный номер задачи (процесса).
  • %usr -Процент CPU, который использовался при выполнении задачи на уровне пользователя (приложения) с или без «»nice приоритета. Обратите внимание, что это поле не включает время, затраченное на работу виртуального процессора.
  • %system — Процент CPU, используемый при выполнении задачи на системном уровне.
  • %guest — Процент CPU, используемый при выполнении задачи на виртуальной машине (работает виртуальный процессор).
  • %CPU — Сумарный процент CPU времени на потраченную задачу. В среде SMP, использование процессора на задачу будет разделена на общее число процессоров.
  • CPU — номер процессора, к которому прикреплена задача.
  • Command — Имя команды.

Так же, можно посмотреть общее количество процессов:

# pidstat -p ALL | wc -l

Можно узнать информации по определенному PID:

# pidstat -p 10990
Linux 2.6.32-642.4.2.el6.x86_64 (localhost.localdomain) 02/26/2017 _x86_64_ (1 CPU)

12:33:07 AM PID %usr %system %guest %CPU CPU Command
12:33:07 AM 10990 0.01 0.01 0.00 0.02 0 yumBackend.py
[root@localhost src]#

Просмотр I/O статистики

Мы можем использовать pidstat утилиту чтобы получить статистику ввода/вывода для некоторого процесса, используя флаг «-d». Для примера:

# pidstat -d -p ALL

Вывод:

04:52:21 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
04:52:21 PM     0         1     35.34    289.20      9.68  systemd
04:52:21 PM     0         2      0.00      0.00      0.00  kthreadd/7070
04:52:21 PM     0         3      0.00      0.00      0.00  khelper/7070
04:52:21 PM     0        78      0.06      0.00      0.00  systemd-journal
04:52:21 PM     0       122      0.12      0.00      0.00  systemd-logind
04:52:21 PM    81       147      0.09      0.00      0.00  dbus-daemon
04:52:21 PM     0       210      0.00      0.00      0.00  agetty
04:52:21 PM     0       218      0.00      0.00      0.00  agetty
04:52:21 PM  1001      3419      0.00      0.00      0.00  php-fpm
04:52:21 PM  1001     21745      0.00      0.00      0.00  php-fpm
04:52:21 PM  1001     21818      0.00      0.00      0.00  php-fpm
04:52:21 PM  1001     21819      0.00      0.00      0.00  php-fpm
04:52:21 PM  1001     21820      0.00      0.00      0.00  php-fpm
04:52:21 PM  1001     21835      0.00      0.00      0.00  php-fpm

Где:

  • kB_rd/s — Это количество килобайтов когда процесс считал данные с диска за секунду.
  • kB_wr/s -Это количество килобайтов когда процесс считал или считает данные с диска за секунду.
  • kB_ccwr/s -Это количество килобайтов когда записи на диск былы отменены задачей.

Получить ошибки страниц и использование RAM

статистику использования оперативной памяти

Используйте «-r» опцию чтобы получить статистику об использования оперативной памяти и ошибок страниц:

# pidstat -r -p ALL

Вывод:

04:59:29 PM   UID       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
04:59:29 PM     0         1      0.39      0.00  194796   2632   0.04  systemd
04:59:29 PM     0         2      0.00      0.00       0      0   0.00  kthreadd/7070
04:59:29 PM     0         3      0.00      0.00       0      0   0.00  khelper/7070
04:59:29 PM     0     36783      0.00      0.00  113208   1572   0.02  mysqld_safe
04:59:29 PM   999     37097      1.66      0.00 1335544 484836   7.71  mysqld
04:59:29 PM     0     37204      0.00      0.00   82420   1384   0.02  sshd
04:59:29 PM  1001     93409      0.05      0.00 1035196 116520   1.85  php-fpm
04:59:29 PM  1001     93410      0.05      0.00 1106712 136956   2.18  php-fpm
04:59:29 PM  1001     93411      0.05      0.00 1035700 120460   1.91  php-fpm
04:59:29 PM  1001     93412      0.06      0.00 1033676 118668   1.89  php-fpm

Где:

  • minflt/s — Общее число незначительных сбоев, когда задача выполнялась каждую секунду и не требуют загрузки страничной памяти с диска.
  • majflt/s — Общее число незначительных сбоев, когда задача выполнялась каждую секунду и требуют загрузки страничной памяти с диска.
  • VSZ — Virtual Size: Виртуальное использование памяти для всех задач в килобайтах.
  • RSS — Resident Set Size: Использование физической памыти, но не свапа ( non-swapped) в килобайтах.

Еще примеры.

Отображение статистики по эффективности на основе имени процесса:

# pidstat -C "mysql"

Или:

# pidstat -C mysql

Можно повторять выдачи результата через определенный интервал времени (например 3 секунды):

# pidstat -C mysql -3

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

# pidstat -T CHILD -C mysql

Однако при использовании опции «-l», можно будет просмотреть полный путь к команде и все его аргументы, как показано ниже:

[root@localhost src]# pidstat -C mysql -l
Linux 2.6.32-642.4.2.el6.x86_64 (localhost.localdomain) 	02/26/2017 	_x86_64_	(1 CPU)

12:43:53 AM       PID    %usr %system  %guest    %CPU   CPU  Command
12:43:53 AM      4162    0.02    0.01    0.00    0.03     0  /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/log/mysql/mysqld.log --pid-file=/var/
[root@localhost src]# 

Используя опцию «-t», можно вывести на экран вывод в виде tree (дерева), как показано ниже:

# pidstat -t -C "mysql"

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

# pidstat -r 2 5

Будет показано 5 отчетов в промежуточным временем 2 секунды на отчет о текущей статистики страницы неисправностей.

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

# pidstat -p 3243 -r 1

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

# pidstat -rud

Однако, если вы хотите, видеть всю статистику в горизонтальном  виде и на одной строке для отдельного процесса, используйте опцию «-h», как показано ниже:

# pidstat -urd -h

Эта команда имеет много вариантов, и для получения дополнительной информации, используйте:

$ man pidstat

Вот и все, статья «Утилита pidstat в Unix/Linux» завершена.

The post Утилита pidstat в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/utilita-pidstat-v-unix-linux/feed/ 0
Page_c76a3fcf https://linux-notes.org/udalennoe-udalenie-fajlov-papok-v-unix-linux/ https://linux-notes.org/udalennoe-udalenie-fajlov-papok-v-unix-linux/#respond Tue, 03 May 2016 21:22:20 +0000 http://linux-notes.org/?p=10321 Удаленное удаление файлов/папок в Unix/Linux Недавно узнал что можно удаленно перемещать файлы/папки прямо с консоли через ssh. В своей статье «Удаленное удаление файлов/папок в Unix/Linux» я расскажу как это сделать. Вы можете выполнять удаленную команду через SSH, например: ssh -n your_SSH_user@your_host rm -rf /home/captain/test_dir Или: ssh your_user@your_host "rm -f /home/captain/file.txt" Все, при подключении попросит ввести […]

The post Удаленное удаление файлов/папок в Unix/Linux first appeared on linux-notes.org.]]>

Удаленное удаление файлов/папок в Unix/Linux

Недавно узнал что можно удаленно перемещать файлы/папки прямо с консоли через ssh. В своей статье «Удаленное удаление файлов/папок в Unix/Linux» я расскажу как это сделать.

Вы можете выполнять удаленную команду через SSH, например:

ssh -n your_SSH_user@your_host rm -rf /home/captain/test_dir

Или:

ssh your_user@your_host "rm -f /home/captain/file.txt"

Все, при подключении попросит ввести пароль и после чего переместит (переименует) папку или файл. Тема «Удаленное удаление файлов/папок в Unix/Linux» завершена.

The post Удаленное удаление файлов/папок в Unix/Linux first appeared on linux-notes.org.]]>
https://linux-notes.org/udalennoe-udalenie-fajlov-papok-v-unix-linux/feed/ 0