Не удалось выполнить процесс-потомок xterm, нет такого файла или каталога

Обновлено: 21.11.2024

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

Настройка файлов запуска

  • обычно у каждого пользователя есть только .bash_profile и .bashrc
  • .bash_profile содержит следующие строки, которые гарантируют, что .bashrc будет выполнен как для входа в систему, так и для оболочек без входа.

Примеры

установить псевдонимы в .bashrc
.
псевдоним df='df -h'
.

Обратите внимание на функцию.

Запуск файла запуска (используя «исходный код» или «.» для запуска сценария)

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

    Стандартная ошибка перенаправления

    • ввод и вывод извлекаются со стандартных устройств
    • они включают
      • стандартный ввод
      • стандартный вывод
      • стандартная ошибка

      Описатели файлов

      • трем стандартным устройствам присваиваются номера, называемые файловыми дескрипторами
        0 = стандартный ввод,
        1 = стандартный вывод,
        2 = стандартная ошибка
      • символ перенаправления ">" является сокращением от "1>"
        cat a.sh > b.sh
        то же самое, что и
        cat a.sh 1>b.sh
      • < это сокращение от 0
      • 2> как вы перенаправляете стандартную ошибку

      Примеры перенаправления

      Здесь на экран отправляются как стандартный вывод, так и стандартная ошибка

      $cat y
      Это y
      $cat x
      cat: x: Нет такого файла или каталога
      $
      $cat xy
      cat :x: Нет такого файла или каталога
      Это y
      $

      Здесь содержимое y, которое было отправлено на стандартный вывод, было перенаправлено на хранение.
      Ошибка по-прежнему выводится на экран.

      Стандартный вывод был перенаправлен, стандартная ошибка — нет.

      $cat x y > hold
      cat: x: Нет такого файла или каталога
      $cat hold
      Это y
      $

      Здесь мы отправляем стандартный вывод на Hold1 и стандартную ошибку на Hold2

      $
      $cat xy 1>hold1 2>hold2
      $cat hold1
      Это y
      $cat hold2
      cat: x: Нет такого файла или каталог
      $

      Это полезно, потому что иногда вы хотите сохранить вывод сценария, ОСОБЕННО ОШИБКИ (например, сценарий сборки X Windows или ошибки startx) в файл, чтобы вы могли изучить его позже.

      Дублирование дескриптора файла

      Иногда требуется, чтобы стандартный вывод и стандартная ошибка перенаправлялись в один и тот же файл. Вы хотите «дублировать» файловый дескриптор

      Стандартный вывод перенаправляется на удержание. 2>&1 объявляет файловый дескриптор 2 дубликатом файлового дескриптора 1. В результате стандартная ошибка и стандартный вывод перенаправляются на хранение.

      $
      $cat xy 1> удерживать 2>&1
      $cat удерживать
      cat: x: Нет такого файла или каталога
      Это у
      $< /p>

      Здесь 2 является дубликатом 1, и весь вывод передается команде tr.

      $
      $cat x y 2>&1 | tr "[a-z]" "[A-Z]"
      CAT: X: НЕТ ТАКОГО ФАЙЛА ИЛИ КАТАЛОГА
      ЭТО Y
      $

      Написание простого сценария оболочки

      Простой скрипт: whoson.sh

      echo "Пользователи, выполнившие вход в систему

      примеры; /bin/bash, /bin/tcsh, /bin/perl, /bin/python.

      Это гарантирует, какая оболочка выполнит сценарий, независимо от текущей оболочки.

      Сделать его исполняемым

      chmod u+x whoson.sh

      Выполнить

      Комментарии

      Команды разделения и группировки

      Размещайте более одной команды в одной строке.

      лс ; ./кто

      выполняет ls, ТОГДА выполняет ./whoson

      продолжить команду

      echo 'Пожалуйста, введите три значения \
      >, необходимые для завершения транзакции.'

      продолжить команду на следующей строке.

      $ х | у | я

      x выполняется, затем y, затем z

      одно задание с тремя задачами

      d выполняется в фоновом режиме, e выполняется в фоновом режиме, e выполняется на переднем плане.

      Подсказка не возвращается, пока f не завершит выполнение.

      (a ; b) & c &

      сгруппировать команды внутри (). a и b выполняются последовательно в фоновом режиме. a и b выполняются одновременно с c, который также выполняется в фоновом режиме.

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

      $ cat cpdir

      ( cd $1 ; tar -cf - . ) | (cd $2 ; tar -xvf - )

      Этот скрипт копирует один каталог в другой. Из-за круглых скобок (cd $1 ; tar -cf - .) и (cd $2 ; tar -xvf - ) выполняются в своих собственных подоболочках, что означает, что каждая из команд cd относится к текущему рабочему каталогу. Если бы круглых скобок не было, то вторая команда cd относилась бы к текущему рабочему каталогу первой команды cd.

      Пример работы (используются скобки)

      Пример того, что это не работает: скобки отсутствуют, второй компакт-диск не может найти папку b

      $./cpdir2 a b
      ./cpdir2: строка 1: cd: b: нет такого файла или каталога

      • Задание — это конвейер команд.
        • когда вы запускаете команду, команда выполняется как задание
          • $дата
            • дата выполняется как задание
            • найти . печать | сортировать | lpr & grep -l alex /tmp/* > alexfiles &
              • найти . печать | сортировать | lpr & – это одно задание, состоящее из 3 процессов, соединенных конвейерами.
              • grep -l alex /tmp/* > alexfiles & b — это одно задание, выполняющее один процесс.
              • список вакансий
              • fg 2 — выводит задание 2 на передний план.
              • бг

              Стек каталогов

              10 каталогов, 0 файлов
              $cd a/1/2/3/
              $pushd ../../../../b/1/2/3/4/
              ~/tmp/stack/b/1/2/3/4 ~/tmp/stack/a/1/2/3
              $pwd
              /home/fcarella/tmp/stack /b/1/2/3/4
              $popd
              ~/tmp/stack/a/1/2/3
              $pwd
              /home/fcarella/tmp/ стек/а/1/2/3
              $

              Параметры и переменные оболочки

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

              Переменные ключевых слов

              • когда вы входите в систему, сценарии входа в систему устанавливают для вас некоторые переменные
              • они доступны для всех последующих подоболочек
              • список переменных

              Позиционные и специальные параметры

              • позиционные параметры - числа: 1, 2, 3 ..
                • каждый аргумент скрипта является позиционным параметром

                Подстановка переменных

                • создать переменную

                Это повторяло имя слова, а не значение имени

                Символ $ интерпретируется оболочкой как оператор подстановки. В нем говорится, что замените значение $name, а не буквальное «имя»

                Что делать, если вы хотите отобразить $? Избегайте этого.

                Примечательные переменные ключевых слов, стр. 283

                Процессы

                • когда вы выполняете команду в Linux, она запускает процесс.
                • встроенные функции не запускаются в отдельном процессе

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

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

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

                      История

                      • оболочка сохраняет запись о недавно выполненной команде в списке истории
                      • эти записанные командные строки также называются событиями
                      • каждому событию присваивается номер

                      Переменные, управляющие историей

                      HISTSIZE — максимальное количество событий, сохраняемых за сеанс. По умолчанию=500
                      HISTFILE - расположение файла истории (~/.bash_history)
                      HISTFILESIZE

                      Просмотреть историю

                      Повторное выполнение команды

                      • Используйте fc
                        fc -l - список истории
                        fc -l 100 200 - список команд от 100 до 200
                        fc 21 - открывает редактор командой 21. При выходе из редактора он выполняет команду
                      • Используйте ! (проще)

                      Учитель: повторное выполнение демонстрационной команды.

                      Библиотека readline

                      • редактирование командной строки выполняется библиотекой readline
                      • функции
                        • дополнение имени команды/пути (вкладка)
                        • завершение переменных
                        • Ctrl
                        • ctrl a, ctrl e
                        • настройка readline — переопределение последовательности клавиш
                          • ./.inputrc

                          Псевдонимы

                          • создавать собственные команды (сокращение от существующих команд)
                          • псевдоним имя=значение

                          Пример с " (расширение))
                          echo $PWD
                          /home/fcarella
                          alias dirA="echo Рабочий каталог $PWD"
                          alias dirA
                          alias dirA='echo Рабочий каталог /home/fcarella'

                          Функции

                          • функции — это похожие скрипты, вы можете хранить часто используемые команды в функциях
                          • функции хранятся в памяти, поэтому занимают место, но выполняются быстро.
                          • создавайте функции в ~/.bash_profile, а затем выполняйте их в любое время
                          • синтаксис

                          date
                          echo "Пользователи, выполнившие вход в систему"
                          кто

                          Обработка командной строки

                          • bash считывает всю строку перед ее обработкой.
                          • если команда занимает несколько строк, она считывает всю команду перед ее обработкой.
                          • bash затем расширяет все псевдонимы или события истории.
                          • bash разбирает строку на токены (ее составные части)
                          • токены сканируются на наличие специальных символов и шаблонов. Это может потребовать дальнейших действий. Если это так, bash обрабатывает действия и подставляет результат
                            example;
                            $ cp ~/letter .
                            разделяется на 3 токена и выполняется расширение: ~ преобразуется в /home/folder и . расширяется до имени текущего рабочего каталога.

                          Расширение командной строки

                          Расширение фигурной скобки

                          echo chap_.txt
                          заменяется на
                          echo chap_one.txt chap_two.txt chap_three.txt

                          cp /usr/local/src/C/.c .
                          копирует main.c, f1.c, f2.c и tmp.c из /usr/local/src/C в текущую папку.

                          Расширение параметров и переменных

                          Арифметическое расширение

                          Пример вырезания, wc, арифметического расширения и подстановки команд

                          Подсчитать количество строк в letter.txt

                          wc -l letter.txt
                          351 letter.txt

                          Вырезать первые три символа в выводе
                          wc - л письмо.txt | cut -c1-4
                          351

                          Используйте $ и () для выполнения подстановки команд
                          Рассчитайте количество страниц, необходимых для печати letter.txt (предположим, 66 строк / страница)
                          echo $(( $(wc -l letter.txt | cut -c1-4)/66 +1))
                          6

                          Подстановка команд

                          Заменить команду выводом этой команды

                          cat where
                          where=$(pwd)
                          echo "Вы находитесь в папке $where"

                          ИЛИ
                          cat where
                          echo "Вы находитесь в папке $(pwd)"

                          Найдите все файлы с именем README, затем выполните команду ls -l для этого файла

                          ls -l $(find . -name "README" -print)

                          Расширение пути

                          Здесь tmp* расширяется до tmp1, tmp2, tmp3
                          echo tmp*
                          tmp1 tmp2 tmp3

                          Двойные кавычки подавляют расширение имени пути, но не раскрытие переменной

                          Без подавления
                          echo $tmp* $alex
                          tmp1 tmp2 tmp3 сонар

                          Подавить расширение имени пути
                          echo "tmp* $alex"
                          tmp* sonar

                          Подавить все расширения
                          echo 'tmp* $alex'
                          tmp* $alex

                          В Unix используется модель процесса, ориентированная на семейство: только существующий процесс может создать в системе новый процесс. После создания пара называется родительским и дочерним процессами. Оттуда дочерние процессы могут создавать своих собственных дочерних процессов. Таким образом, вы получаете семейное дерево связанных процессов.

                          Все процессы имеют предком init. Init запускается при загрузке Unix и отвечает за запуск системы, перезапуск демонов входа в систему getty и ожидание процессов зомби (подробнее на них позже).

                          3 многопроцессорных возможности

                          Как упоминалось ранее, Unix — это многопользовательская система и многопроцессорная система. Другими словами, может показаться, что Unix запускает несколько программ одновременно. Войдите в свой ящик Linux, а затем используйте SSH для подключения к другому ящику, например. поле 14.

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


                          Средняя нагрузка фактически представляет собой средний размер очереди готовности к выполнению в системе. Даны три значения: среднее за последние 1, 5 и 15 минут. Средняя нагрузка 1,0 говорит о том, что в среднем 1,0 процесса готовы к запуску. Нагрузка 3,5 указывает на то, что 3,5 процесса (в среднем) конкурируют за ЦП, поэтому машина достаточно загружена.

                          Нагрузки выше 5,0 считаются очень высокими: в среднем ваши программы будут выполняться в пять раз дольше. Нагрузка ниже 1,0 показывает, что система в основном простаивает: не так много процессов в системе готовы к запуску.

                          4 возможности многозадачности

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

                          В отличие от других систем, оболочка Unix представляет собой обычный процесс, который читает командные строки и выполняет команды. Любой может написать свою оболочку. Исторически существовало несколько оболочек Unix, каждая из которых имела свои особенности и функциональные возможности. Если у вас есть приглашение со знаком доллара, вы, вероятно, используете оболочку Korn (или, возможно, оболочку Bourne или Bash). Если у вас есть приглашение со знаком процента, вы, вероятно, используете C-Shell (или, возможно, TC-Shell).

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

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

                          Эта страница предназначена для советов по отладке для Chromium; изучение того, как запускать gdb, выходит за рамки.

                          Содержание

                          Символизированная трассировка стека

                          Песочница может мешать внутреннему символизатору. Используйте --no-sandbox (но оставьте это временно) или внешний символизатор (см. tools/valgrind/asan/asan_symbolize.py ).

                          Любая предыдущая версия не сможет разрешать символы или ошибки сегментации.

                          Базовая отладка процесса браузера

                          Разрешение присоединения к сторонним процессам

                          В дистрибутивах, использующих Yama LSM (включая Ubuntu и Chrome OS), процесс A может подключаться к процессу B, только если A является предком B.

                          Возможно, вы захотите отключить эту функцию с помощью

                          В противном случае вы получите сообщение об ошибке, например "Не удалось подключиться к процессу".

                          Обратите внимание, что вы, вероятно, захотите использовать --no-sandbox , как описано ниже.

                          Многопроцессорные хитрости

                          Получение подпроцессов рендерера в gdb

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

                          Флаг --no-sandbox необходим, потому что в противном случае песочница seccomp уничтожит процесс рендеринга при запуске, или песочница setuid предотвратит выполнение xterm. «xterm» необходим, иначе gdb будет работать в текущем терминале, что может стать особенно запутанным, поскольку он работает в фоновом режиме, и если вы также запускаете основной процесс в gdb, он вообще не будет работать (два экземпляра будет драться за терминал). Чтобы автоматически запустить средства визуализации в отладчике, отправьте отладчику команду «запустить»:

                          Если вы используете Emacs и M-x gdb, вы можете сделать

                          Примечание: использование параметра --renderer-cmd-prefix обходит средство запуска zygote, поэтому средства визуализации не будут помещены в песочницу. Как правило, это не проблема, за исключением случаев, когда вы пытаетесь отладить взаимодействие с песочницей. Если это то, что вы делаете, вам нужно будет подключить отладчик к работающему процессу визуализации (см. ниже).

                          Вы также можете передать --disable-hang-monitor, чтобы подавить монитор зависаний, который довольно раздражает.

                          Выбор средств визуализации для отладки

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

                          Выборочные точки останова

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

                          Кроме того, вместо запуска gdb вы можете использовать приведенный выше скрипт, который позволяет выбрать процесс отладки для отладки. Примечание. Возможно, вам придется использовать полный путь к сценарию и избегать $HOME или ~/.

                          Подключение к запущенному модулю визуализации

                          Обычно ps aux | grep chrome не даст очень полезного результата. Попробуйте pstree -p | grep chrome, чтобы получить что-то вроде

                          Большинство из них — треды. В этом случае процесс браузера будет 672, а (единственный) процесс рендеринга - 696. Вы можете использовать gdb -p 696 для подключения. Кроме того, вы можете узнать идентификатор процесса из встроенного диспетчера задач Chrome (в меню «Инструменты»). Щелкните правой кнопкой мыши Диспетчер задач и включите «Идентификатор процесса» в списке столбцов.

                          Примечание. По умолчанию изолированные процессы не могут быть присоединены отладчиком. Чтобы сделать это, вам нужно передать параметр --allow-sandbox-debugging.

                          Если проблема возникает только при включенной песочнице seccomp (и предыдущие приемы не помогают), можно попробовать включить дампы ядра (см. раздел «Файлы ядра»). Это позволит вам получить обратную трассировку и увидеть некоторые локальные переменные, хотя вы не сможете пошагово выполнять запущенную программу.

                          Примечание. Если вас интересует отладка процесса LinuxSandboxIPC, вы можете подключиться к 694 на приведенной выше диаграмме. Процесс LinuxSandboxIPC имеет тот же флаг командной строки, что и процесс браузера, поэтому его легко идентифицировать, если вы запустите pstree -pa .

                          Получение подпроцессов GPU в gdb

                          Используйте флаг --gpu-launcher вместо --renderer-cmd-prefix в приведенных выше инструкциях для средства визуализации.

                          Получение запускаемых браузеров browser_tests в gdb

                          Используйте переменную среды BROWSER_WRAPPER вместо параметра --renderer-cmd-prefix в приведенных выше инструкциях.

                          Процессы плагинов

                          Те же стратегии, что и для рендереров выше, но флаг называется --plugin-launcher :

                          Примечание. На данный момент это не относится к подключаемым модулям PPAPI, поскольку в настоящее время они выполняются в процессе рендеринга.

                          Однопроцессный режим

                          В зависимости от того, имеет ли это отношение к проблеме, часто бывает проще просто запустить в режиме «один процесс», когда потоки рендерера находятся в процессе. Затем вы можете просто запустить gdb в основном процессе.

                          Обратите внимание, что по техническим причинам плагины не могут быть внутрипроцессными, поэтому --single-process помещает средства визуализации только в процесс браузера. Флаг по-прежнему полезен для отладки плагинов (поскольку это только два процесса вместо трех), но вам все равно придется использовать --plugin-launcher или другой подход.

                          Печать типов Chromium

                          gdb 7 позволяет нам использовать Python для написания симпатичных принтеров для типов Chromium. Каталог tools/gdb/ содержит скрипты Python gdb, полезные для кода Chromium. Похожий скрипт находится в thrid_party/blink/tools/gdb , полученном из WebKit.

                          Чтобы включить эти симпатичные принтеры в gdb, поместите в ~/.gdbinit следующее:

                          Также будут импортированы красивые принтеры Blink.

                          Принтеры для типов std не нужны в gdb 7, но здесь они есть на случай, если вы используете более раннюю версию gdb. Поместите следующее в ~/.gdbinit :

                          Графическая отладка для представлений Chromium

                          По следующей ссылке описан инструмент, который можно использовать в Linux, Windows и Mac в рамках GDB.

                          Быстрый запуск

                          Используйте скрипт gdb-add-index (например, build/gdb-add-index out/Debug/browser_tests )

                          Имеет смысл, только если вы запускаете двоичный файл несколько раз или, возможно, используете компонентную сборку, поскольку большинство файлов .so не требуют переиндексации при перестройке.

                          Вы можете значительно сократить время загрузки GDB за счет времени компоновки, разделив символы из объектных файлов. В GN установите use_debug_fission=false в «gn args».

                          Отладка исходного кода с помощью -fdebug-compilation-dir

                          Когда вы включаете GN config strip_absolute_paths_from_debug_symbols , это включено по умолчанию для goma в сборке Linux, вам нужно добавить следующую команду в ваш файл ~/.gdbinit для отладки исходного кода, чтобы загрузить настроенный gdbinit или скопировать содержимое файла в ваш ~/.gdbinit .

                          Основные файлы

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

                          Некоторые подпроцессы в песочнице могут не выполнять дамп ядер, если вы не передадите флаг --allow-sandbox-debugging.

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

                          Файлы минидампа Breakpad

                          Выполнение тестов

                          Многие из наших тестов выводят окна на экран. Это может раздражать (они отвлекают ваше внимание) и трудны для отладки (они получают дополнительные события, когда вы наводите на них курсор). Вместо этого используйте Xvfb или Xephyr для запуска вложенного сеанса X для их отладки, как описано в layout_tests_linux.md.

                          Тесты браузера

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

                          обратите внимание на символ подчеркивания в single_process — это делает тестовую среду и процесс браузера общим для самого внешнего процесса.

                          В этом случае для отладки процесса рендерера воспользуйтесь приведенными выше советами о рендерерах.

                          Тесты макета

                          См. несколько советов на странице layout_tests_linux.md. В частности, обратите внимание, что можно отлаживать тест макета через ssh-подключение к Linux-системе; вам ничего не нужно на экране, если вы используете Xvfb .

                          Тесты пользовательского интерфейса

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

                          Чтобы передать флаги в браузер, используйте командную строку, например --extra-chrome-flags="--foo --bar" .

                          Время ожидания

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

                          • --test-timeout=100000000
                          • --ui-test-action-timeout=100000000
                          • --ui-test-terminate-timeout=100000000

                          Чтобы воспроизвести настройку оконного менеджера на ботах

                          Проверочные боты Chromium и основные боты водопада запускают тесты в сочетании с Xvfb и openbox. Xvfb — это сервер X11, перенаправляющий графический вывод в память, а openbox — простой оконный менеджер, работающий поверх Xvfb. Поведение openbox заметно отличается, когда речь идет об управлении фокусом и других оконных задачах, поэтому тест, который нормально работает локально, может дать сбой или работать нестабильно на пробных ботах. Чтобы запустить тесты на локальном компьютере, как на боте, выполните следующие действия:

                          Убедитесь, что у вас есть openbox:

                          Запустите Xvfb и openbox на определенном дисплее:

                          Запустите свои тесты с перенаправлением графического вывода на этот дисплей:

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

                          Кроме того, вы можете использовать testing/xvfb.py для настройки своей среды:

                          BROWSER_WRAPPER

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

                          Репликация медлительности пробного бота

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

                          Ведение журнала

                          Просмотр всех сообщений LOG(foo)

                          Уровень журнала по умолчанию скрывает LOG(INFO) . Запускать с флагами --log-level=0 и --enable-logging=stderr.

                          Для более новых версий Chromium с VLOG также может потребоваться параметр --v=1. Дополнительные советы по работе с VLOG см. в ветке chromium-dev.

                          Просмотр отладочных сообщений IPC

                          Запустить с CHROME_IPC_LOGGING=1, например.

                          Если некоторые сообщения отображаются как неизвестные, проверьте, актуален ли список заголовков сообщений IPC в chrome/common/logging_chrome.cc. Если эта ссылка на файл устарела, попробуйте использовать макросы, такие как IPC_MESSAGE_LOG_ENABLED или IPC_MESSAGE_MACROS_LOG_ENABLED .

                          Профилирование

                          Мы соблюдаем региональные настройки вашей системы. Попробуйте что-то вроде:

                          Если это не работает, убедитесь, что переменные окружения LANGUAGE , LC_ALL и LC_MESSAGE не установлены — они имеют более высокий приоритет, чем LANG в указанном порядке. В качестве альтернативы просто сделайте следующее:

                          Обратите внимание, что поскольку мы используем GTK, некоторые данные о локали поступают из системы, например поля для сохранения файлов и сведения о том, считается ли текущий язык RTL. Без всех доступных языковых данных Chrome будет использовать смесь вашего системного языка и языка, на котором вы запускаете Chrome.

                          Вот как установить языковые пакеты для арабского (ar) и иврита (he):

                          Обратите внимание, что флаг --lang не работает для этого должным образом.

                          В системах, отличных от Debian, вам потребуются файлы gtk20.mo. (Пожалуйста, обновите эти документы соответствующими инструкциями, если вы знаете, что это такое.)

                          Блокнот

                          См. последний раздел Linux Crash Dumping; вам нужно установить переменную gyp и переменную среды для работы аварийных тестов дампа.

                          Перетаскивание

                          Если вы сломаете отладчик во время перетаскивания, Chrome захватит вашу мышь и клавиатуру, и вы не сможете взаимодействовать с отладчиком! Чтобы обойти это, запустите Xephyr. Инструкции по использованию Xephyr находятся на странице Выполнение тестов макета в Linux.

                          Отслеживание ошибок

                          Выделение регрессий

                          tools/bisect-builds.py в дереве автоматизирует разделение архивных сборок пополам. Несмотря на образование в области информатики, я до сих пор удивляюсь, как быстро бинарный поиск находит свою цель.

                          Запись экрана для отчетов об ошибках

                          Проблемы, связанные с версией

                          Google Chrome

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

                          Убунту Хром

                          Chromium от Fedora

                          Если вы пытаетесь отследить X ошибок, таких как:

                          • передайте --sync в командной строке, чтобы сделать все вызовы X синхронными
                          • запустить Chrome через xtrace
                          • включить отладку IPC (см. раздел выше)

                          Оконные менеджеры

                          Для тестирования различных оконных менеджеров можно использовать вложенный X-сервер, например Xephyr. Инструкции по использованию Xephyr находятся на странице Выполнение тестов макета в Linux.

                          Если вам нужно протестировать что-то с аппаратным ускорением компоновки (например, compiz), вы можете использовать Xgl ( sudo apt-get install xserver-xgl ). Например:

                          Насколько мне известно, файлы /dev/pts создаются для сеансов ssh или telnet.

                          Принятый ответ:

                          В /dev/pts ничего не хранится. Эта файловая система живет исключительно в памяти.

                          Записи в /dev/pts — это псевдотерминалы (сокращенно pty). Ядра Unix имеют общее понятие терминалов. Терминал предоставляет приложениям способ отображения вывода и получения ввода через терминальное устройство. У процесса может быть управляющий терминал — для приложения в текстовом режиме именно так он взаимодействует с пользователем.

                          • Приложения с графическим интерфейсом, такие как xterm, gnome-terminal, konsole и т. д., преобразуют события клавиатуры и мыши в ввод текста и отображают вывод графически с использованием определенного шрифта.
                          • Мультиплексорные приложения, такие как вход и выход реле экрана и tmux с другого терминала и на него, чтобы отделить приложения текстового режима от фактического терминала.
                          • Приложения удаленной оболочки, такие как sshd, telnetd, rlogind и т. д., передают ввод и вывод между удаленным терминалом на клиенте и pty на сервере.

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

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

                          Чтобы поэкспериментировать, запустите tty в терминале, чтобы узнать, что это за терминальное устройство. Допустим, это /dev/pts/42. В оболочке на другом терминале запустите echo hello >/dev/pts/42 : строка hello будет отображаться на другом терминале. Теперь запустите cat /dev/pts/42 и введите другой терминал. Чтобы убить эту команду cat (которая затруднит использование другого терминала), нажмите Ctrl + C .

                          Запись на другой терминал иногда полезна для отображения уведомления; например, команда записи делает это. Чтение с другого терминала обычно не выполняется.

                          У меня возникли трудности с переводом mpd в фоновый режим внутри firejail. Используя «mpd; информация о сне; раньше работало, но теперь отвечает «mpd; sleep inf;: команда не найдена». Каков «официальный» способ заставить это снова работать? Спасибо!

                          Должно работать без «информации о сне». Попробуйте «firejail mpd».

                          Нет, он просто умирает с сообщением «родитель отключается, пока…».

                          параметр nosound прерывает профили.
                          Я попробовал это в icedove, piding, firefox, и это ломает их все. если я попытаюсь использовать профиль с этой опцией, он просто выдаст ошибку в этой строке. Если я делаю это как «firejail – nosound firefox», то это работает безупречно. Я использую 0.9.38

                          Команда профиля nosound недоступна в версии 0.9.38. Он появится в следующей версии.

                          Кроме того, когда я использую параметр nosound в одном приложении, вся система отключает звук 😦 это нормально??

                          Да, он отключает ALSA и PulseAudio.

                          Я ожидал, что это просто запретит этому конкретному приложению использовать звук. Таким образом, это очень «анти-функция», поскольку, чтобы предотвратить использование одного приложения для шпионажа, мы теряем звук во всех других приложениях. Есть обходной путь?

                          Когда я установил это для использования с Chrome, где-то был создан профиль для Chrome, поэтому он начинается с загруженного кеша Chrome и некоторых функций, включенных в расширениях Chrome. Поэтому я очищаю кеш и меняю настройки расширения каждый раз, когда я его использую. firejail google-chrome - это то, как я его запускаю. Я даже удалил его и переустановил, но профиль всегда один и тот же. Это также последняя версия. Как мне удалить это? Он работает так, как будто это в приватном режиме, который, как я думал, устарел, помогите!

                          Конфигурация google-chrome является постоянной и хранится в каталоге ~/.config/google-chrome. Итак, если вы добавите закладку, при следующем запуске Chrome она должна быть там. Вы можете удалить конфигурацию перед запуском Chrome (rm -fr ~/.config/google-chrome). Ваш каталог загрузки также является постоянным.

                          Если вы действительно хотите каждый раз начинать с конфигурации Chrome по умолчанию, вам следует запустить «firejail –private google-chrome».

                          [quote]
                          Это работает для нажатия на значки среды рабочего стола, меню и т. д. Используйте
                          “firejail –tree”, чтобы убедиться, что программа изолирована.
                          [/quote]

                          К сожалению, это не работает для большинства приложений Gnome3 в Debian Stretch. Наверное, потому что в файлах *.desktop прописан полный путь.
                          Вы знаете обходной путь или предлагаете отправить отчет об ошибке?

                          На самом деле я нашел «firecfg –fix», который решает эту проблему. 🙂
                          Теперь работает нормально.

                          Привет. Большое спасибо за FireJail — это потрясающее достижение.

                          Есть ли способ для FireJail помещать в песочницу программы с выходом в Интернет, чьи пользовательские данные и файлы конфигурации НЕ хранятся, как обычно, в /home, а вместо этого находятся в отдельном разделе /DATA [хотя и имеют символическую ссылку на /home]? До сих пор все мои тесты с комбинациями --blacklist и --noblacklist в их пусковых установках [например, для Thunderbird и Firefox] не увенчались успехом [& --whitelist вообще нельзя использовать, если я правильно понимаю, учитывая, что их активные каталоги не находятся в / home] в том смысле, что либо программы вообще не могут запускаться [потому что не могут получить доступ к своей конфигурации и данным], либо они запускаются, но ВСЕ другие каталоги и файлы в /DATA доступны в Интернете. Пожалуйста?

                          К сожалению, в данный момент нет поддержки каталогов пользователей, расположенных за пределами /home.

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

                          Попытка использовать –private-home с профилем Google Chrome по умолчанию. Я пытаюсь сохранить надстройки и плагины из моего профиля Chrome по умолчанию. Я пробовал много итераций, в том числе [firejail –private-home=~/.google-chrome/Default google-chrome-stable]

                          Но Chrome просто не загружается, когда я дважды щелкаю по нему в Firetools.

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

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

                          По умолчанию Firejail позволяет использовать все надстройки и плагины Chrome. В вашем доме доступны только каталоги «Загрузки» и файлы конфигурации Chrome.

                          Я бы сказал, просто запустите его как «firejail chrome», и все будет в порядке. Мы делаем это для всех браузеров.

                          Спасибо за информацию. Очень признателен. Когда я занимался оптимизацией функций безопасности Firejail и обнаружил, что --seccomp, --overlay и --overlay-tmpfs не работают с Chrome, мне удалось придумать следующее (не уверен, что я что-то пропустил ):

                          firejail –caps.drop=all –noroot –allow-private-blacklist –blacklist=/Home/ –read-only=~ google-chrome-stable

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

                          В настоящее время я использую Fedora v26, и, поскольку это касается всех параметров командной строки, которые добавляют дополнительные меры безопасности, потребовалось некоторое время, чтобы выяснить, что работает с Chrome, а что нет.

                          С учетом вышеизложенного, и как уже упоминалось ранее, спасибо вам за всю вашу тяжелую работу (и всем, кто работал над Firejail/Firetools).

                          Ой. Прошу прощения, что не упомянул об этом в своем ответе выше. Моя основная цель внедрения Firejail / Firetools — исключительно улучшить общую безопасность сеансов просмотра в Интернете. Я не тестирую программное обеспечение и не пишу код. Это просто для предотвращения внедрения вирусов / вредоносных программ. Еще раз спасибо!

                          Вопрос: почему вы не используете профиль по умолчанию для Chrome, распространяемый firejail?

                          Вы найдете его в /etc/firejail/google-*.,profile. У нас есть профили для всех вариантов Chrome, включая Chromium. Все они в основном одинаковы, с очень небольшими отличиями. Некоторые функции, такие как seccomp, не будут работать в браузере Chrome, поскольку Chrom запускает вторую песочницу внутри песочницы firejail.

                          Я нашел файлы /etc/firejail/google*.profile и выполнил шаги (как вы описали в разделе профилей здесь на сайте), чтобы сохранить новый стабильный профиль google-chrome в моем [/home/. config/firejail] и добавьте параметры nonewprivs и noroot. Я также удалил строки caps.keep sys_chroot, sys_admin и добавил caps.drop all. Теперь все, что мне нужно сделать, это «firejail google-chrome-stable». Я (еще раз) извиняюсь, поскольку я действительно не знаю, нужны ли возможности chroot и администратора в Chrome для чистого просмотра Интернета. Я провел некоторое онлайн-исследование этих возможностей, но не смог найти ничего определенного. Как видите, мои практические знания Linux еще не на высоте.

                          NetBlue, еще раз искренне благодарю за замечательную программу.

                          Вы сделали отличный инструмент, и я благодарен.

                          Однако мне трудно им пользоваться. Отчасти это потому, что я изучаю информатику по ходу дела. Я нуб.

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

                          Пример: я хочу прочитать, как перенести файл из песочницы в папку «Документы» моей хост-системы. На этой странице есть как минимум три места, где находится «ПЕРЕДАЧА ФАЙЛОВ», и у меня есть два варианта их поиска: прокрутка, длинный путь или; crtl+F в моем браузере.

                          Почему эти записи не связаны друг с другом? Или любой, между другими частями страницы или сайта.

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

                          Нет даже якоря, поэтому я могу добавить место в закладки, как только найду его. [Добавьте дополнительное время на бесплодные поиски расширений для браузера, которые могут помочь].

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

                          По сути, вы просите меня просмотреть страницу тарабарщины (технический термин) в поисках чего-то, чего я на самом деле не понимаю, и даже забыть, как пишется сочетание клавиш Ctrl+F.

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

                          Что меня убивает, так это то, что я вспомнил, что понял это шесть месяцев назад, но мне нужно делать это снова… Я уже потерял пару часов, которых у меня нет.

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

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

                          Вы правы, нужно еще поработать над документацией. И да, в данный момент это слишком технично.

                          Кроме того, я просто не могу заставить перенос работать.

                          Сначала я делаю следующее:

                          11:31:25 b:~ $ firemon –list
                          3799:b:/usr/bin/firejail /usr/bin/keepass2 /xxxxxxxxxxxxxxx
                          3821:b:/usr/bin/ firejail /usr/bin/firefox
                          4632:b:/usr/bin/firejail /usr/bin/VirtualBox
                          13497:b:/usr/bin/firejail /usr/bin/google-chrome- стабильная
                          20129:b:firejail –частный firefox –частное окно –без удаленного –без первого запуска
                          22100:b:/usr/bin/firejail /usr/bin/pluma /home/ б/хххххххххххх

                          (редактировать - я добавил несколько x)

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

                          Но в инструкциях сказано, что PID можно использовать, поэтому

                          11:33:36 b:~ $ sudo firejail –ls=20129 ~/Downloads
                          drwx—— b b 60 .
                          drwx—— b b 220 ..
                          -rw-rw-r– b b 13058 Целевой документ

                          Итак, я хочу «Целевой документ».

                          11:34:07 b:~ $ firejail –get=20129 ~/Загрузки/'Целевой документ'
                          Предупреждение: невозможно открыть исходный файл /home/b/Загрузки/Целевой документ, файл не скопирован

                          «Что…?» — бормочу я себе под нос. Я перепроверяю инструкции. Нет…

                          Всемогущий sudo?

                          15:32:36 b:~ $ sudo firejail –get=20129 ~/Downloads/'Target Document'
                          Предупреждение: невозможно открыть исходный файл /home/b/Downloads/Centrelink Statement, файл не скопирован< /p>

                          Нет. Мне потребовалось довольно много времени, прежде чем я понял, что разрешения, вероятно, были в основе всего этого. Однако я не могу понять, как попасть в эту песочницу, чтобы изменить разрешения, и вообще — почему я, как пользователь на хосте (и как sudo, не меньше), должен изменить права для копирования загруженного мной файла ? Я не понимаю ограничений, но это кажется странным. (Если злоумышленник отдает команды с хост-терминала, значит, игра уже окончена?)

                          Я попробовал еще несколько способов

                          15:43:07 b:~ $ firejail –chmod=20129 777 ~/Загрузки
                          Ошибка: недопустимый параметр командной строки –chmod=20129
                          15:44:49 b:~ $ $ firejail –whitelist=~/.mozilla –whitelist=~/Скачать firefox
                          $: команда не найдена

                          и даже попробовал всю команду, указанную в выводе –ls как `имя`, но это не сработало. Прочитайте всю запись Firefox и не увидите решения. Не знаю, где искать, и обратите внимание, что поисковая система выдает другие проблемы с переносом, но я не могу приложить достаточно усилий, чтобы исправить мою ситуацию.

                          Я совсем запутался. Пожалуйста, помогите.

                          Я пишу «./configure –prefix=/usr –enable-apparmor» в терминале, и он сообщает мне, что файл или категория не могут быть найдены. Firejail установлен на 100%. Я делаю что-то неправильно? 😦

                          Linux Mint 19 XFCE.

                          Возможно, пакет разработки apparmor не установлен (sudo apt-get install libapparmor-dev)?

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

                          Не уверен, что это сделано намеренно (но не задокументировано) или это ошибка: я пытаюсь заключить приложение в тюрьму, но по-прежнему делаю его файлы конфигурации доступными для него. Конфигурация хранится в $HOME/.config/xyz, поэтому я добавляю «–whitelist=~/.config/xyz». Каталог действительно добавляется, но он не принадлежит никому, а права доступа равны 400, что делает его недоступным. Если это не ошибка, как правильно сопоставить конфигурацию?

                          Извините за беспокойство. Я не заметил, чтобы некоторые профили по умолчанию загружались. Один из тех заблокировал доступ к подпапкам…

                          Система RHEL 6.5, в которой я использую Firejail, использует syslog-ng, а не rsyslog. Из проведенного мной устранения неполадок я могу заставить работать функцию «tracelog» только тогда, когда я вручную запускаю rsyslog вместо syslog-ng. Я не могу заставить syslog-ng нормально работать с сообщениями из черного списка — это означает, что они вообще не отображаются в /var/log/messages или любом другом журнале, который я просматривал. Есть ли способ заставить firejail использовать syslog-ng вместо rsyslog?

                          Вам нужно узнать имя вашего интерфейса Ethernet/Wireless, а затем использовать команду –net.

                          Отличная работа! Запустите программное обеспечение с USB через firejail.
                          Но не могу найти команду, которая запускается в песочнице, ни в одном файле журнала, это ошибка?

                          Читайте также: