Как просканировать вашу локальную сеть с помощью терминала на MacOS

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

Здесь мы покажем вам, как вы можете использовать Терминал в macOS для сканирования вашей локальной сети для поиска неисправностей, обслуживания и общего любопытства.

Он работает немного иначе, чем утилиты Linux, с некоторыми флагами в различных случаях, так что не думайте, что навыки Linux будут точными в macOS.

Сканирование открытых портов вашей локальной сети с помощью nmap

Nmap – это король сканеров портов командной строки в macOS, но сначала вам нужно его установить.

Установите nmap с помощью Homebrew

Если у вас установлен Homebrew, запустите

brew install nmap

это позволит скачать и установить nmap и все необходимые зависимости.

Сканирование с помощью Nmap

Nmap создан для сканирования предоставленного имени хоста или сетевого адреса и возврата списка открытых портов.

Название расшифровывается как «network mappe», но больше похоже на маппер портов.

Самый простой способ запустить nmap – это указать IP-адрес или диапазон IP-адресов в качестве цели; замените его соответствующим IP-адресом для сканирования в локальной сети.

Эта конкретная команда сканирует образовательный тестовый сервер nmap по адресу scanme.org.

nmap 74.207.244.221
nmap scanme.org

Для поиска открытых портов на диапазоне IP-адресов используйте косую черту.

sudo nmap -O scanme.org

Это сканирует определенный IP-адрес для операционной системы (-O). Опять же, это должно быть запущено с sudo.

Если вы хотите запустить nmap немного хитрее, используйте флаг -sS:

sudo nmap -sS scanme.org

Это придаст эффект принудительного «полуоткрытого» сканирования.

Система отправляет пакет TCP SYN, чтобы проверить, открыт ли порт, но не отвечает пакетом ACK при получении утвердительного ответа.

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

Флаг -sS и другие параметры режима сканирования должны запускаться с помощью sudo.

Например, переключатель режима -sP будет сканировать IP-адреса, но не порты, действуя примерно так, как описано ниже.

Чтобы получить более подробные результаты, добавьте тег -vv или -v3.

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

В зависимости от того, что вы ищете, эти флаги могут помочь вам найти его.

Конечно, вы всегда можете направить результаты nmap в grep для поиска конкретных результатов.

Например, если вы хотите проверить только порт 22, вы можете выполнить следующую команду:

Сканирование активных IP-адресов вашей локальной сети с помощью arp

ARP сканирует вашу локальную сеть на наличие подключенных устройств.

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

Но он поставляется на каждом Mac, и это быстрый способ получить конкретную информацию.

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

arp -a
Вывод возвращает список всех устройств, подключенных к вашей сети, по IP-адресу и MAC-адресу.
Больше ничего не поделаешь.
Вы можете запустить arp -a -i en0, чтобы получать отчеты только от вашего сетевого интерфейса en0.

Заключение

Самым мощным инструментом для сканирования вашей локальной сети в macOS является nmap.

arp также полезен для запуска пинга в сети.

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

Транзакции, блокировки, уровни изолированности транзакций в MySQL

С приходом master-master репликаций остро встает вопрос о целостность с достоверностью базы данных.

  • Целостность базы данных — соответствие имеющейся в базе данных информации её внутренней логике, структуре и всем явно заданным правилам.
  • Достоверность (или истинность) — соответствие фактов, хранящихся в базе данных, реальному миру

При изменении данных, БД переходит от одного состояния к другому, при этом в процессе обновления данных возможны ситуации, когда состояние целостности или достоверности нарушается.

Например:

Прерванный перевод денег со счета на счет, посредством последовательного исполнения двух команд UPDATE, приведет к нарушению целостности:

UPDATE accounts SET money=money-1100 WHERE account="PC1";
UPDATE accounts SET money=money+1100 WHERE account="PC2";

Чтобы избежать подобные ситуации ввели понятие транзакции — атомарного действия над базой, переводящего ее из одного целостного состояния в другое. По сути это последовательность SQL-инструкций, которые должны быть выполнены целиком или отменены.

Механизмы блокировок

Одновременное чтение одним клиентом и запись другим клиентом одной и той же строки таблицы с большой вероятностью приведет к сбою или чтению некорректных данных. Механизмы блокировок позволяют избежать ситуаций одновременного доступа к данным, регламентируя порядок взаимодействия пользователей между собой. Способы реализации механизма блокировок в СУБД различных производителей могут существенно отличаться, однако суть примерно одинаковая:

Если для выполнения некоторой транзакции необходимо, чтобы некоторый объект базы данных не изменялся без ведома этой транзакции, такой объект блокируется.

Основными видами блокировок являются на чтение и на запись:

  • Если клиент хочет читать данные, то другие клиенты тоже могут читать данные, но никто не может записывать, пока первый клиент  не закончит чтение (read lock).
  • Если клиент  хочет записать данные, то другие клиенты не должны ни читать ни писать эти данные пока первый клиент не закончит (write lock).

Блокировка может быть наложена явно или неявно.

Если клиент не назначает блокировку, MySQL сервер неявно устанавливает необходимый тип блокировки на время выполнения выражения или транзакции. В случае выполнения оператора SELECT сервер установит READ LOCK, а в случае UPDATE — WRITE LOCK.  При неявной блокировке уровень блокировки зависит от типа хранилища данных: для MyISAM, MEMORY и MERGE блокируется вся таблица, для InnoDB — только используемые в выражении строки (в случае, если набор этих строк может быть однозначно определен — иначе, блокируется вся таблица).

Часто возникает необходимость выполнения нескольких запросов подряд без вмешательства других клиентов в это время. Неявная блокировка не подходит для этих целей, так как устанавливается только на время выполнения одного запроса. В этом случае клиент может явно назначить, а потом отменить блокировку с помощью выражений LOCK TABLES и UNLOCK TABLES. Явной блокировка всегда блокирует всю таблицу, независимо от механизма хранения.

Изоляция транзакций

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

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

1) Потерянное обновление (англ. lost update)

При одновременном изменении одного блока данных разными транзакциями, одно из изменений теряется;

Имеются две транзакции, выполняемые одновременно:

Транзакция 1 Транзакция 2
UPDATE tbl1 SET f2=f2+20 WHERE f1=1; UPDATE tbl1 SET f2=f2+25 WHERE f1=1;

В обеих транзакциях изменяется значение поля f2, при этом одно из изменений теряется. Так что, f2 будет увеличено не на 45, а только на 20 или 25.

Причина:

  1. Первая транзакция прочитала текущее состояние поля.
  2. Вторая транзакция сделала свои изменения, основываясь на своих сохраненных в память данных.
  3. Первая делает обновление поля, используя свои «старые» данные.

2) «Грязное» чтение (англ. dirty read)

Чтение данных, добавленных или изменённых транзакцией, которая впоследствии не подтвердится (откатится);

Транзакция 1 Транзакция 2
SELECT f2 FROM tbl1 WHERE f1=1;
UPDATE tbl1 SET f2=f2+1 WHERE f1=1;
SELECT f2 FROM tbl1 WHERE f1=1;
ROLLBACK WORK;

В транзакции 1 изменяется значение поля f2, а затем в транзакции 2 выбирается значение этого поля. После этого происходит откат транзакции 1. В результате значение, полученное второй транзакцией, будет отличаться от значения, хранимого в базе данных.

3) Неповторяющееся чтение (англ. non-repeatable read)

При повторном чтении в рамках одной транзакции, ранее прочитанные данные оказываются изменёнными.

Предположим, имеются две транзакции, открытые различными приложениями, в которых выполнены следующие SQL-операторы:

Транзакция 1 Транзакция 2
SELECT f2 FROM tbl1 WHERE f1=1; SELECT f2 FROM tbl1 WHERE f1=1;
UPDATE tbl1 SET f2=f2+1 WHERE f1=1;
COMMIT;
SELECT f2 FROM tbl1 WHERE f1=1;

В транзакции 2 выбирается значение поля f2, затем в транзакции 1 изменяется значение поля f2. При повторной попытке выбора значения из поля f2 в транзакции 2 будет получен другой результат. Эта ситуация особенно неприемлема, когда данные считываются с целью их частичного изменения и обратной записи в базу данных.

4) Фантомное чтение (англ. phantom reads)

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

Транзакция 1 Транзакция 2
SELECT SUM(f2) FROM tbl1;
INSERT INTO tbl1 (f1,f2) VALUES (15,20);
COMMIT;
SELECT SUM(f2) FROM tbl1;

В транзакции 2 выполняется SQL-оператор, использующий все значения поля f2. Затем в транзакции 1 выполняется вставка новой строки, приводящая к тому, что повторное выполнение SQL-оператора в транзакции 2 выдаст другой результат. Такая ситуация называется фантомным чтением. От неповторяющегося чтения оно отличается тем, что результат повторного обращения к данным изменился не из-за изменения/удаления самих этих данных, а из-за появления новых (фантомных) данных.

Уровни изоляции

Serializable (упорядочиваемость)

Самый высокий уровень изолированности. Транзакции полностью изолируются друг от друга. Только на этом уровне параллельные транзакции не подвержены эффекту «фантомного чтения».

Repeatable read (повторяемость чтения)

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

Read committed (чтение фиксированных данных)

Завершенное чтение, при котором отсутствует черновое, «грязное» чтение (то есть чтение одним пользователем данных, которые не были зафиксированы в БД командой COMMIT). Тем не менее в процессе работы одной транзакции другая может быть успешно завершена и сделанные ею изменения зафиксированы. В итоге первая транзакция будет работать с другим набором данных. Это проблема неповторяемого чтения.

Read uncommitted (чтение незафиксированных данных)

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

Поведение при различных уровнях изолированности

Уровень изоляции Фантомное чтение Неповторяющееся чтение «Грязное» чтение Потерянное обновление
SERIALIZABLE + + + +
REPEATABLE READ + + +
READ COMMITTED + +
READ UNCOMMITTED +

Источники: https://shurshun.ru/tranzaktsii-blokirovki-urovni-izoliovannosti-tranzaktsiy-v-mysql/

Installing PHP 7.2 On OSX With Homebrew

Follow the simple steps below to upgrade to PHP version on you OSX to 7.2

Step # 01: Make sure the brew is updated

brew update

brew upgrade

Step # 02: Unlink the Previously installed PHP version

brew unlink php71

If you have another older version of PHP, write that instead.

Finally – Install PHP 7.2

brew install php72

Wait for the installation to finish, you’re now running on PHP 7.2. You may run php -v to check the current PHP version on your machine.

 

 

 

 

 

 

 

 

 

 


First, make sure you’re on the version of PHP for which you want Xdebug installed. It needs to be installed separately for each major version (7.0 vs 7.1 vs 7.2). You can check your version using php -v.

Then, run pecl install xdebug.

Once it’s finished installing, you’ll see a message like this:

Installing '/usr/local/Cellar/php/7.2.8/pecl/20170718/xdebug.so'

Then go to your php.ini (which you can find by running php --ini, and add these two lines to it:

zend_extension="/usr/local/Cellar/php/7.2.8/pecl/20170718/xdebug.so"
xdebug.remote_enable=on

Obviously, change the path to whatever was printed by the pecl xdebug installation.

Как настроить MySQL Master-Slave репликацию?

MySQL репликация типа Master-Slave часто используется для обеспечения отказоустойчивости приложений. Кроме этого, она позволяет распределить нагрузку на базу данных между несколькими серверами (репликами). Читайте подробнее о применении репликации.Mysql Master-Slave репликация

Настройка репликации происходит в несколько шагов. Мы будем использовать два сервера с адресами:

  • Master сервер, 10.10.0.1
  • Slave сервер, 10.10.0.2

Шаг 1. Настройка Мастера

На сервере, который будет выступать мастером, необходимо внести правки в my.cnf:

# выбираем ID сервера, произвольное число, лучше начинать с 1
server-id = 1

# путь к бинарному логу
log_bin = /var/log/mysql/mysql-bin.log

# название Вашей базы данных, которая будет реплицироваться
binlog_do_db = newdatabase

Перезапускаем Mysql:

/etc/init.d/mysql restart

Шаг 2. Права на репликацию

Далее необходимо создать профиль пользователя, из под которого будет происходить репликация. Для этого запускаем консоль:

mysql -u root -p

Далее создаем и назначаем права пользователю для реплики:

GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

# даем права пользователю slave_user с паролем password

Далее блокируем все таблицы в нашей базе данных:

USE newdatabase;
FLUSH TABLES WITH READ LOCK;

Проверяем статус Мастер-сервера:

SHOW MASTER STATUS;

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

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      107 | newdatabase  |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

# Выделенные значения мы будем использовать для запуска Слейва

Шаг 3. Дамп базы

Теперь необходимо сделать дамп базы данных:

mysqldump -u root -p newdatabase > newdatabase.sql

Разблокируем таблицы в консоли mysql:

UNLOCK TABLES;

Шаг 4. Создание базы на слейве

В консоли mysql на Слейве создаем базу с таким же именем, как и на Мастере:

CREATE DATABASE newdatabase;

После этого загружаем дамп (из bash):

mysql -u root -p newdatabase < newdatabase.sql

Шаг 5. Настройка Слейва

В настройках my.cnf на Слейве необходимо указать такие параметры:

# ID Слейва, удобно выбирать следующим числом после Мастера
server-id = 2

# Путь к relay логу
relay-log = /var/log/mysql/mysql-relay-bin.log

# Путь к bin логу на Мастере
log_bin = /var/log/mysql/mysql-bin.log

# База данных для репликации
binlog_do_db = newdatabase

Шаг 6. Запуск Слейва

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

CHANGE MASTER TO MASTER_HOST='10.10.0.1', MASTER_USER='slave_user', MASTER_PASSWORD='password',
MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 107;

# Указанные значения мы берем из настроек Мастера

После этого запускаем репликацию на Слейве:

START SLAVE;

STOP SLAVE;

Статус репликации

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

mysql> SHOW SLAVE STATUS\G

             Slave_IO_State: Waiting for master to send event
                Master_Host: localhost
                Master_User: root
                Master_Port: 3306
              Connect_Retry: 3
            Master_Log_File: gbichot-bin.005
        Read_Master_Log_Pos: 79
             Relay_Log_File: gbichot-relay-bin.005
              Relay_Log_Pos: 548
      Relay_Master_Log_File: gbichot-bin.005
           Slave_IO_Running: Yes
          Slave_SQL_Running: Yes
            Replicate_Do_DB:
        Replicate_Ignore_DB:
         Replicate_Do_Table:
     Replicate_Ignore_Table:
    Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
                 Last_Errno: 0
                 Last_Error:
               Skip_Counter: 0
        Exec_Master_Log_Pos: 79
            Relay_Log_Space: 552
            Until_Condition: None
             Until_Log_File:
              Until_Log_Pos: 0
         Master_SSL_Allowed: No
         Master_SSL_CA_File:
         Master_SSL_CA_Path:
            Master_SSL_Cert:
          Master_SSL_Cipher:
             Master_SSL_Key:
      Seconds_Behind_Master: 8

Читайте также как настроить Master-Master репликацию на MySQL.

How to install SSHFS

1 On MacOS
Using brew, install FUSE.

brew cask install osxfuse
Now install SSHFS:

brew install sshfs
2 On Ubuntu/Debian
sudo apt-get install sshfs

3 On Windows
Find the desired version of win-sshfs from this page and download it.

git-ftp of Jenkins

Jenkins

git-ftp init -u $FTP_USERNAME -p $FTP_PASSWORD ftp://google.com/

ubuntu https://www.digitalocean.com/community/tutorials/how-to-install-jenkins-on-ubuntu-16-04

отдельно установить java

 

https://github.com/git-ftp/git-ftp/edit/master/INSTALL.md

 

# INSTALL

You can find instructions for:

- [Linux/Unix based systems using make](#linuxunix-based-systems-using-make)
- [Debian, Ubuntu and others using apt](#debian-ubuntu-and-others-using-apt)
- [ArchLinux](#archlinux-aur-unofficial)
- [MacOS](#macos)
- [Windows](#windows)


## Linux/Unix based systems using make

Note: Make sure Git and cURL are installed.

This should work on MacOS, Debian, Ubuntu, Fedora, RedHat, etc.

The easiest way is to use Git for installing:

```sh
git clone https://github.com/git-ftp/git-ftp.git
cd git-ftp

# choose the newest release
tag="$(git tag | grep '^[0-9]*\.[0-9]*\.[0-9]*$' | tail -1)"

# checkout the latest tag
git checkout "$tag"
sudo make install
```

Updating using git:

```sh
git fetch
git checkout "$(git tag | grep '^[0-9]*\.[0-9]*\.[0-9]*$' | tail -1)"
sudo make install
```


## Debian, Ubuntu and others using apt

At least Debian and Ubuntu provide git-ftp in their main repositories.

```sh
sudo apt-get install git-ftp
```

If you would like the newest release maintained by Git-ftp,
you can add the PPA:

```sh
sudo -s
add-apt-repository ppa:git-ftp/ppa

# On Debian, you need to modify the sources list to use the same PPA
source /etc/*-release
if [ "$ID" = "debian" ]; then
    dist="$(echo /etc/apt/sources.list.d/git-ftp-ppa-*.list | sed 's/^.*ppa-\(.*\)\.list$/\1/')"
    sed -i.backup "s/$dist/precise/g" /etc/apt/sources.list.d/git-ftp-ppa-*.list
fi

apt-get update
```


## ArchLinux (AUR: unofficial)

See https://aur.archlinux.org/packages/?O=0&C=0&SeB=nd&K=git-ftp&SB=v&SO=d&PP=50&do_Search=Go


## MacOS

First, ensure you have installed Xcode and command line tools. Command line tools can be download at https://developer.apple.com/download/more/ or via command: 

```
xcode-select --install
```

Using homebrew:

```sh
brew install git
brew install curl --with-libssh2
brew install brotli
brew install git-ftp
```

## Windows

There are at least two ways to install git-ftp on Windows.

- Using Git for Windows, former msysgit (recommended)
- Using cygwin

### Git for Windows, former msysgit (recommended)

Install [Git for Windows](https://git-for-windows.github.io/).
It comes with curl installed, but it doesn't support SFTP by default.
In order to use SFTP, [download curl](http://curl.haxx.se/download.html) for
Windows with SFTP support.
Win32 2000/XP MSI or Win64 2000/XP x86_64 MSI is recommended.
If you installed curl, then remove `bin/curl.exe` from your Git for Windows
installation directory. It will fall back to the newly installed version.

Finally, open the Git Bash which is located in `C:\Program Files (x86)\Git`
by default.

```bash
curl https://raw.githubusercontent.com/git-ftp/git-ftp/master/git-ftp > /bin/git-ftp
chmod 755 /bin/git-ftp
```

*Note: the `/bin` directory is an alias.
By default this is the same as `C:\Program Files (x86)\Git\usr\bin`.*

### cygwin

Install cygwin and install the package 'curl'.
Then open the cygwin console and install Git-ftp with the following commands:

```bash
curl https://raw.githubusercontent.com/git-ftp/git-ftp/master/git-ftp > /bin/git-ftp
chmod 755 /bin/git-ftp
```

### Git for Windows and cygwin both installed

If you have both Git for Windows and cygwin installed on Windows and want to
use Git for Windows for Git commands, you may get an error
"No such file or directory" for a path starting with "/cygdrive/", for example:

    creating `/cygdrive/c/TEMP/git-ftp-m7GH/delete_tmp': No such file or directory

The problem is that Git-ftp use commands from both Git for Windows and cygwin
directories. But by default, cygwin is configured to start paths with the
prefix "/cygdrive" while Git for Windows starts paths with "/".
To fix the problem, open file "<cygwin>\etc\fstab"
(e.g. "c:\cygwin\etc\fstab") and change parameter "/cygwin/" to "/", for example:

    # This is default:
    none /cygdrive/ cygdrive binary,posix=0,user 0 0

change to:

    # This is changed:
    none / cygdrive binary,posix=0,user 0 0

After this, close all console windows and try again.

 

vk.com/video13387403_456239249