Как работает команда для установки RVM?

TLDR;

Как описано на веб-сайте Composer:

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

TLDR;

Я нашел более простой способ глобально установить композитора, чем руководство, запрещенное на сайте readme.md. Это действительно на веб-сайте getcomposer.org:

curl -s http://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/

И если вы еще более ленивы, как и я, вы можете создать псевдоним:

alias composer='/usr/local/bin/composer.phar'

Таким образом, вы может вызывать композитор только с помощью composer

2
задан 25 November 2010 в 13:25

16 ответов

Он превращает строку в дескриптор файла для вывода сценария bash, который он представляет. Это может быть запутанным, вот пример

, если вы наберете echo <(ls), он откроет новый файловый дескриптор, имя которого будет заменено. Таким образом, команда может перейти в echo /dev/fd/63.

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

$ my_program ls
Error: 'ls': No such file or directory.
$ my_program <(ls)
my_program was called with the argument /dev/fd/63
bin dev etc ...

Многие программы Linux, если не снабжены источником ввода , дождитесь стандартного ввода. Поскольку стандартный вывод может быть подключен к стандартным входам с помощью оператора «|», вы можете использовать say ls | grep hello. Это работает только потому, что grep ждал ввода в ожидании, если бы ожидал, что имя файла будет открыто и прочитано для получения его данных, оператор трубы не работает. Вот почему вам нужно & lt; (...).

Надеюсь, это понятно. : -)

Вместе с & lt; оператор перенаправляет вывод файла на чтение программ с помощью stdin, это делает следующее значение:

Bash: прочитайте вывод из этого файла, который создается из вывода этой команды.

Разъяснения:

стандартный ввод: «файл» (на самом деле, но в Linux все действует как файл), который при чтении волшебным образом содержит то, что вы набрали стандартный вывод: a «файл», который при записи на него будет распечатан оператором виртуального терминала (т.е. < или <()): то же, что и в обычной математике, выражения операторов и операндов будут оцениваться и заменяться. 3 + 2 * 3 превращается в 5 * 3 поворотов в 15. Это то же самое на языке bash.

Хорошим примером для подчеркивания точки Роджера является это выражение:

if [ -f my_condition ] then something fi

Здесь содержимое скобок будет оцениваться как условное утверждение, т.е. если my_condition истинно, тогда do что нибудь. Но: [ на самом деле является просто псевдонимом программы test, который при вызове с параметром -f проверяет наличие файла.

5
ответ дан 26 May 2018 в 00:15
  • 1
    как он отправляется в вопросе, он будет подавать вывод команды curl на вход bash, тогда как bash | curl http://... будет делать это наоборот. Вы имели в виду curl http://... | bash? Это будет работать в этом случае. – koushik 25 November 2010 в 13:31
  • 2
    Это то, что я имел в виду, конечно, хорошо видно. Я все еще немного устал. :-) – Stefano Palazzo♦ 25 November 2010 в 13:36
  • 3
    Благодаря! Много, чтобы пожевать, я обязательно буду читать больше. Btw, есть ли «имя», для этого оператора <()? – Zabba 25 November 2010 в 14:26
  • 4
    О, получилось: 3.5.6 Process Substitution – Zabba 25 November 2010 в 14:28

Он превращает строку в дескриптор файла для вывода сценария bash, который он представляет. Это может быть запутанным, вот пример

, если вы наберете echo <(ls), он откроет новый файловый дескриптор, имя которого будет заменено. Таким образом, команда может перейти в echo /dev/fd/63.

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

$ my_program ls Error: 'ls': No such file or directory. $ my_program <(ls) my_program was called with the argument /dev/fd/63 bin dev etc ...

Многие программы Linux, если не снабжены источником ввода , дождитесь стандартного ввода. Поскольку стандартный вывод может быть подключен к стандартным входам с помощью оператора «|», вы можете использовать say ls | grep hello. Это работает только потому, что grep ждал ввода в ожидании, если бы ожидал, что имя файла будет открыто и прочитано для получения его данных, оператор трубы не работает. Вот почему вам нужно & lt; (...).

Надеюсь, это понятно. : -)

Вместе с & lt; оператор перенаправляет вывод файла на чтение программ с помощью stdin, это делает следующее значение:

Bash: прочитайте вывод из этого файла, который создается из вывода этой команды.

Разъяснения:

стандартный ввод: «файл» (на самом деле, но в Linux все действует как файл), который при чтении волшебным образом содержит то, что вы набрали стандартный вывод: a «файл», который при записи на него будет распечатан оператором виртуального терминала (т.е. < или <()): то же, что и в обычной математике, выражения операторов и операндов будут оцениваться и заменяться. 3 + 2 * 3 превращается в 5 * 3 поворотов в 15. Это то же самое на языке bash.

Хорошим примером для подчеркивания точки Роджера является это выражение:

if [ -f my_condition ] then something fi

Здесь содержимое скобок будет оцениваться как условное утверждение, т.е. если my_condition истинно, тогда do что нибудь. Но: [ на самом деле является просто псевдонимом программы test, который при вызове с параметром -f проверяет наличие файла.

5
ответ дан 25 July 2018 в 22:50

Он превращает строку в дескриптор файла для вывода сценария bash, который он представляет. Это может быть запутанным, вот пример

, если вы наберете echo <(ls), он откроет новый файловый дескриптор, имя которого будет заменено. Таким образом, команда может перейти в echo /dev/fd/63.

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

$ my_program ls Error: 'ls': No such file or directory. $ my_program <(ls) my_program was called with the argument /dev/fd/63 bin dev etc ...

Многие программы Linux, если не снабжены источником ввода , дождитесь стандартного ввода. Поскольку стандартный вывод может быть подключен к стандартным входам с помощью оператора «|», вы можете использовать say ls | grep hello. Это работает только потому, что grep ждал ввода в ожидании, если бы ожидал, что имя файла будет открыто и прочитано для получения его данных, оператор трубы не работает. Вот почему вам нужно & lt; (...).

Надеюсь, это понятно. : -)

Вместе с & lt; оператор перенаправляет вывод файла на чтение программ с помощью stdin, это делает следующее значение:

Bash: прочитайте вывод из этого файла, который создается из вывода этой команды.

Разъяснения:

стандартный ввод: «файл» (на самом деле, но в Linux все действует как файл), который при чтении волшебным образом содержит то, что вы набрали стандартный вывод: a «файл», который при записи на него будет распечатан оператором виртуального терминала (т.е. < или <()): то же, что и в обычной математике, выражения операторов и операндов будут оцениваться и заменяться. 3 + 2 * 3 превращается в 5 * 3 поворотов в 15. Это то же самое на языке bash.

Хорошим примером для подчеркивания точки Роджера является это выражение:

if [ -f my_condition ] then something fi

Здесь содержимое скобок будет оцениваться как условное утверждение, т.е. если my_condition истинно, тогда do что нибудь. Но: [ на самом деле является просто псевдонимом программы test, который при вызове с параметром -f проверяет наличие файла.

5
ответ дан 2 August 2018 в 04:14

Он превращает строку в дескриптор файла для вывода сценария bash, который он представляет. Это может быть запутанным, вот пример

, если вы наберете echo & lt; (ls) , он откроет новый файловый дескриптор, имя которого будет заменено. Таким образом, команда может превратиться в выражение echo / dev / fd / 63 .

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

  $ my_program ls Ошибка: 'ls': Нет такого файла или  каталог.  $ my_program & lt; (ls) my_program вызывается с помощью аргумента / dev / fd / 63 bin dev и т. д. ...  

Многие программы Linux, если они не снабжены источником ввода, дождитесь стандартного ввода. Поскольку стандартный вывод может быть подан на стандартный вход с помощью оператора «|», вы можете использовать say ls | grep привет . Это работает только потому, что grep ждал ввода в ожидании, если бы ожидал, что имя файла будет открыто и прочитано для получения его данных, оператор трубы не работает. Вот почему вам нужно & lt; (...).

Надеюсь, это понятно. : -)

Вместе с & lt; оператор перенаправляет вывод файла на чтение программ с помощью stdin, это означает следующее значение :

Bash: прочитайте вывод из этого файла, который создается из вывод этой команды.

Пояснения:

  • стандартный ввод: «файл» (не совсем, но в Linux все действует как файл), который, когда читается, волшебным образом содержит то, что вы набрали
  • стандартный вывод: «файл», который при записи на него будет напечатан оператором виртуального терминала
  • (т. е. & lt; или & lt; () ): То же, что и в обычной математике, выражения операторов и операндов будут оцениваться и заменяться. 3 + 2 * 3 превращается в 5 * 3 поворотов в 15. Это то же самое на языке bash.

Хорошим примером для подчеркивания точки Роджера является это выражение:

 , если [-f my_condition], то что-то fi  

Здесь содержимое скобок будет оцениваться как условное утверждение, то есть если my_condition истинно, тогда сделайте что-нибудь. Но: [ на самом деле является просто псевдонимом программы test ), который при вызове с параметром -f проверяет наличие файла.

5
ответ дан 4 August 2018 в 20:19

Он превращает строку в дескриптор файла для вывода сценария bash, который он представляет. Это может быть запутанным, вот пример

, если вы наберете echo & lt; (ls) , он откроет новый файловый дескриптор, имя которого будет заменено. Таким образом, команда может превратиться в выражение echo / dev / fd / 63 .

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

  $ my_program ls Ошибка: 'ls': Нет такого файла или  каталог.  $ my_program & lt; (ls) my_program вызывается с помощью аргумента / dev / fd / 63 bin dev и т. д. ...  

Многие программы Linux, если они не снабжены источником ввода, дождитесь стандартного ввода. Поскольку стандартный вывод может быть подан на стандартный вход с помощью оператора «|», вы можете использовать say ls | grep привет . Это работает только потому, что grep ждал ввода в ожидании, если бы ожидал, что имя файла будет открыто и прочитано для получения его данных, оператор трубы не работает. Вот почему вам нужно & lt; (...).

Надеюсь, это понятно. : -)

Вместе с & lt; оператор перенаправляет вывод файла на чтение программ с помощью stdin, это означает следующее значение :

Bash: прочитайте вывод из этого файла, который создается из вывод этой команды.

Пояснения:

  • стандартный ввод: «файл» (не совсем, но в Linux все действует как файл), который, когда читается, волшебным образом содержит то, что вы набрали
  • стандартный вывод: «файл», который при записи на него будет напечатан оператором виртуального терминала
  • (т. е. & lt; или & lt; () ): То же, что и в обычной математике, выражения операторов и операндов будут оцениваться и заменяться. 3 + 2 * 3 превращается в 5 * 3 поворотов в 15. Это то же самое на языке bash.

Хорошим примером для подчеркивания точки Роджера является это выражение:

 , если [-f my_condition], то что-то fi  

Здесь содержимое скобок будет оцениваться как условное утверждение, то есть если my_condition истинно, тогда сделайте что-нибудь. Но: [ на самом деле является просто псевдонимом программы test ), который при вызове с параметром -f проверяет наличие файла.

5
ответ дан 6 August 2018 в 04:19

Он превращает строку в дескриптор файла для вывода сценария bash, который он представляет. Это может быть запутанным, вот пример

, если вы наберете echo & lt; (ls) , он откроет новый файловый дескриптор, имя которого будет заменено. Таким образом, команда может превратиться в выражение echo / dev / fd / 63 .

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

  $ my_program ls Ошибка: 'ls': Нет такого файла или  каталог.  $ my_program & lt; (ls) my_program вызывается с помощью аргумента / dev / fd / 63 bin dev и т. д. ...  

Многие программы Linux, если они не снабжены источником ввода, дождитесь стандартного ввода. Поскольку стандартный вывод может быть подан на стандартный вход с помощью оператора «|», вы можете использовать say ls | grep привет . Это работает только потому, что grep ждал ввода в ожидании, если бы ожидал, что имя файла будет открыто и прочитано для получения его данных, оператор трубы не работает. Вот почему вам нужно & lt; (...).

Надеюсь, это понятно. : -)

Вместе с & lt; оператор перенаправляет вывод файла на чтение программ с помощью stdin, это означает следующее значение :

Bash: прочитайте вывод из этого файла, который создается из вывод этой команды.

Пояснения:

  • стандартный ввод: «файл» (не совсем, но в Linux все действует как файл), который, когда читается, волшебным образом содержит то, что вы набрали
  • стандартный вывод: «файл», который при записи на него будет напечатан оператором виртуального терминала
  • (т. е. & lt; или & lt; () ): То же, что и в обычной математике, выражения операторов и операндов будут оцениваться и заменяться. 3 + 2 * 3 превращается в 5 * 3 поворотов в 15. Это то же самое на языке bash.

Хорошим примером для подчеркивания точки Роджера является это выражение:

 , если [-f my_condition], то что-то fi  

Здесь содержимое скобок будет оцениваться как условное утверждение, то есть если my_condition истинно, тогда сделайте что-нибудь. Но: [ на самом деле является просто псевдонимом программы test ), который при вызове с параметром -f проверяет наличие файла.

5
ответ дан 7 August 2018 в 22:24

Он превращает строку в дескриптор файла для вывода сценария bash, который он представляет. Это может быть запутанным, вот пример

, если вы наберете echo & lt; (ls) , он откроет новый файловый дескриптор, имя которого будет заменено. Таким образом, команда может превратиться в выражение echo / dev / fd / 63 .

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

  $ my_program ls Ошибка: 'ls': Нет такого файла или  каталог.  $ my_program & lt; (ls) my_program вызывается с помощью аргумента / dev / fd / 63 bin dev и т. д. ...  

Многие программы Linux, если они не снабжены источником ввода, дождитесь стандартного ввода. Поскольку стандартный вывод может быть подан на стандартный вход с помощью оператора «|», вы можете использовать say ls | grep привет . Это работает только потому, что grep ждал ввода в ожидании, если бы ожидал, что имя файла будет открыто и прочитано для получения его данных, оператор трубы не работает. Вот почему вам нужно & lt; (...).

Надеюсь, это понятно. : -)

Вместе с & lt; оператор перенаправляет вывод файла на чтение программ с помощью stdin, это означает следующее значение :

Bash: прочитайте вывод из этого файла, который создается из вывод этой команды.

Пояснения:

  • стандартный ввод: «файл» (не совсем, но в Linux все действует как файл), который, когда читается, волшебным образом содержит то, что вы набрали
  • стандартный вывод: «файл», который при записи на него будет напечатан оператором виртуального терминала
  • (т. е. & lt; или & lt; () ): То же, что и в обычной математике, выражения операторов и операндов будут оцениваться и заменяться. 3 + 2 * 3 превращается в 5 * 3 поворотов в 15. Это то же самое на языке bash.

Хорошим примером для подчеркивания точки Роджера является это выражение:

 , если [-f my_condition], то что-то fi  

Здесь содержимое скобок будет оцениваться как условное утверждение, то есть если my_condition истинно, тогда сделайте что-нибудь. Но: [ на самом деле является просто псевдонимом программы test ), который при вызове с параметром -f проверяет наличие файла.

5
ответ дан 10 August 2018 в 10:33

Он превращает строку в дескриптор файла для вывода сценария bash, который он представляет. Это может быть запутанным, вот пример

, если вы наберете echo & lt; (ls) , он откроет новый файловый дескриптор, имя которого будет заменено. Таким образом, команда может превратиться в выражение echo / dev / fd / 63 .

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

  $ my_program ls Ошибка: 'ls': Нет такого файла или  каталог.  $ my_program & lt; (ls) my_program вызывается с помощью аргумента / dev / fd / 63 bin dev и т. д. ...  

Многие программы Linux, если они не снабжены источником ввода, дождитесь стандартного ввода. Поскольку стандартный вывод может быть подан на стандартный вход с помощью оператора «|», вы можете использовать say ls | grep привет . Это работает только потому, что grep ждал ввода в ожидании, если бы ожидал, что имя файла будет открыто и прочитано для получения его данных, оператор трубы не работает. Вот почему вам нужно & lt; (...).

Надеюсь, это понятно. : -)

Вместе с & lt; оператор перенаправляет вывод файла на чтение программ с помощью stdin, это означает следующее значение :

Bash: прочитайте вывод из этого файла, который создается из вывод этой команды.

Пояснения:

  • стандартный ввод: «файл» (не совсем, но в Linux все действует как файл), который, когда читается, волшебным образом содержит то, что вы набрали
  • стандартный вывод: «файл», который при записи на него будет напечатан оператором виртуального терминала
  • (т. е. & lt; или & lt; () ): То же, что и в обычной математике, выражения операторов и операндов будут оцениваться и заменяться. 3 + 2 * 3 превращается в 5 * 3 поворотов в 15. Это то же самое на языке bash.

Хорошим примером для подчеркивания точки Роджера является это выражение:

 , если [-f my_condition], то что-то fi  

Здесь содержимое скобок будет оцениваться как условное утверждение, то есть если my_condition истинно, тогда сделайте что-нибудь. Но: [ на самом деле является просто псевдонимом программы test ), который при вызове с параметром -f проверяет наличие файла.

5
ответ дан 13 August 2018 в 17:02
  • 1
    как он отправляется в вопросе, он будет подавать вывод команды curl на вход bash, тогда как bash | curl http: // ... будет делать это наоборот. Вы имели в виду curl http: // ... | bash ? Это будет работать в этом случае. – koushik 25 November 2010 в 13:31
  • 2
    Это то, что я имел в виду, конечно, хорошо видно. Я все еще немного устал. :-) – Stefano Palazzo♦ 25 November 2010 в 13:36
  • 3
    Благодаря! Много, чтобы пожевать, я обязательно буду читать больше. Btw, есть ли «имя», для этого оператора & lt; () ? – Zabba 25 November 2010 в 14:26
  • 4
    О, получилось: 3.5.6 Замена процесса – Zabba 25 November 2010 в 14:28

Чтобы уточнить точку Стефано, вторая & lt; это не только символ & lt ;, это фактически & lt; ()

Возможно, вы уже знакомы с аналогичной конструкцией, $ (), которая создает строку, являющуюся результатом команды внутри нее. Итак:

$ which bash # echo the path to bash
/bin/bash
$ ldd $(which bash) # return which libraries bash is linked to
...

После подстановки строки это эквивалентно

ldd /bin/bash

Как говорит Стефано, & lt; () делает очень похожее, но вместо этого возвращает дескриптор файла.

Документацию bash можно найти в man bash. Поскольку это огромная страница руководства, вы можете искать (нажмите /) для <\( (вам нужно выйти из открытой скобки - поиск <( не будет работать).

2
ответ дан 26 May 2018 в 00:15

Чтобы уточнить точку Стефано, вторая & lt; это не только символ & lt ;, это фактически & lt; ()

Возможно, вы уже знакомы с аналогичной конструкцией, $ (), которая создает строку, являющуюся результатом команды внутри нее. Итак:

$ which bash # echo the path to bash /bin/bash $ ldd $(which bash) # return which libraries bash is linked to ...

После подстановки строки это эквивалентно

ldd /bin/bash

Как говорит Стефано, & lt; () делает очень похожее, но вместо этого возвращает дескриптор файла.

Документацию bash можно найти в man bash. Поскольку это огромная страница руководства, вы можете искать (нажмите /) для <\( (вам нужно выйти из открытой скобки - поиск <( не будет работать).

2
ответ дан 25 July 2018 в 22:50

Чтобы уточнить точку Стефано, вторая & lt; это не только символ & lt ;, это фактически & lt; ()

Возможно, вы уже знакомы с аналогичной конструкцией, $ (), которая создает строку, являющуюся результатом команды внутри нее. Итак:

$ which bash # echo the path to bash /bin/bash $ ldd $(which bash) # return which libraries bash is linked to ...

После подстановки строки это эквивалентно

ldd /bin/bash

Как говорит Стефано, & lt; () делает очень похожее, но вместо этого возвращает дескриптор файла.

Документацию bash можно найти в man bash. Поскольку это огромная страница руководства, вы можете искать (нажмите /) для <\( (вам нужно выйти из открытой скобки - поиск <( не будет работать).

2
ответ дан 2 August 2018 в 04:14

Чтобы прояснить точку Стефано, вторая & lt; не только a & lt ;, это фактически & lt; ()

Возможно, вы уже знакомы с аналогичной конструкцией, $ (), которая создает строку, являющуюся результатом команды внутри нее. Итак:

  $, который bash # echo путь к bash / bin / bash $ ldd $ (который bash) # возвращает, какие библиотеки bash связаны с ...  

После подстановки строки это эквивалентно

  ldd / bin / bash  

Как говорит Стефано, & lt () делает очень похожее но вместо этого возвращает дескриптор файла.

Вы можете найти документацию bash в man bash . Поскольку это огромная страница руководства, вы можете выполнить поиск (нажмите / ) для & lt; \ ( (вам нужно выйти из открытой скобки - найти & lt; ( не будет работать.

2
ответ дан 4 August 2018 в 20:19

Чтобы прояснить точку Стефано, вторая & lt; не только a & lt ;, это фактически & lt; ()

Возможно, вы уже знакомы с аналогичной конструкцией, $ (), которая создает строку, являющуюся результатом команды внутри нее. Итак:

  $, который bash # echo путь к bash / bin / bash $ ldd $ (который bash) # возвращает, какие библиотеки bash связаны с ...  

После подстановки строки это эквивалентно

  ldd / bin / bash  

Как говорит Стефано, & lt () делает очень похожее но вместо этого возвращает дескриптор файла.

Вы можете найти документацию bash в man bash . Поскольку это огромная страница руководства, вы можете выполнить поиск (нажмите / ) для & lt; \ ( (вам нужно выйти из открытой скобки - найти & lt; ( не будет работать.

2
ответ дан 6 August 2018 в 04:19

Чтобы прояснить точку Стефано, вторая & lt; не только a & lt ;, это фактически & lt; ()

Возможно, вы уже знакомы с аналогичной конструкцией, $ (), которая создает строку, являющуюся результатом команды внутри нее. Итак:

  $, который bash # echo путь к bash / bin / bash $ ldd $ (который bash) # возвращает, какие библиотеки bash связаны с ...  

После подстановки строки это эквивалентно

  ldd / bin / bash  

Как говорит Стефано, & lt () делает очень похожее но вместо этого возвращает дескриптор файла.

Вы можете найти документацию bash в man bash . Поскольку это огромная страница руководства, вы можете выполнить поиск (нажмите / ) для & lt; \ ( (вам нужно выйти из открытой скобки - найти & lt; ( не будет работать.

2
ответ дан 7 August 2018 в 22:24

Чтобы прояснить точку Стефано, вторая & lt; не только a & lt ;, это фактически & lt; ()

Возможно, вы уже знакомы с аналогичной конструкцией, $ (), которая создает строку, являющуюся результатом команды внутри нее. Итак:

  $, который bash # echo путь к bash / bin / bash $ ldd $ (который bash) # возвращает, какие библиотеки bash связаны с ...  

После подстановки строки это эквивалентно

  ldd / bin / bash  

Как говорит Стефано, & lt () делает очень похожее но вместо этого возвращает дескриптор файла.

Вы можете найти документацию bash в man bash . Поскольку это огромная страница руководства, вы можете выполнить поиск (нажмите / ) для & lt; \ ( (вам нужно выйти из открытой скобки - найти & lt; ( не будет работать.

2
ответ дан 10 August 2018 в 10:33

Чтобы прояснить точку Стефано, вторая & lt; не только a & lt ;, это фактически & lt; ()

Возможно, вы уже знакомы с аналогичной конструкцией, $ (), которая создает строку, являющуюся результатом команды внутри нее. Итак:

  $, который bash # echo путь к bash / bin / bash $ ldd $ (который bash) # возвращает, какие библиотеки bash связаны с ...  

После подстановки строки это эквивалентно

  ldd / bin / bash  

Как говорит Стефано, & lt () делает очень похожее но вместо этого возвращает дескриптор файла.

Вы можете найти документацию bash в man bash . Поскольку это огромная страница руководства, вы можете выполнить поиск (нажмите / ) для & lt; \ ( (вам нужно выйти из открытой скобки - найти & lt; ( не будет работать.

2
ответ дан 13 August 2018 в 17:02

Другие вопросы по тегам:

Похожие вопросы: