Какие файлы запускаются при входе в систему или перезагрузке моей машины?

Я пытаюсь выяснить, какой «скрипт» (на самом деле это, вероятно, файл «* rc») запускает определенную команду при перезагрузке моей машины ubuntu. Я пробовал grepping для того, что отображается при входе в систему после перезагрузки, но я не смог его найти.

Я знаю, что, например, .bash_profile является «источником», когда я вхожу в систему, но что другие запускаются. Это поможет мне отследить скрипт / файл, на котором запущен старый набор команд, которые мне нужно обновить.

Благодаря!

Вот что происходит, когда я вхожу в систему:

bos-mp2o6:~ user$ ssh -A XXXX [email protected]'s password: Linux bos-lpwy9 2.6.32-54-generic #116-Ubuntu SMP Tue Nov 12 19:23:22 UTC 2013 x86_64 GNU/Linux Ubuntu 10.04.4 LTS Welcome to Ubuntu! * Documentation: https://help.ubuntu.com/ New release 'precise' available. Run 'do-release-upgrade' to upgrade to it. Last login: Tue Dec 31 10:53:25 2013 from 172.19.43.138 Agent pid 2117 /home/user/.ssh/internal/2013-07-29: No such file or directory /home/user/.ssh/deployed/2013-07-29: No such file or directory Identity added: /home/user/.ssh/external/2013-07-29 (/home/user/.ssh/external/2013-07-29) 

Если вы заметите, что часть «Добавлена ​​личность», это бит, который я ищу. Поэтому я использовал следующую команду (не повезло):

 [[email protected]_Desktop:~]$grep_bash 2013-07-29 [[email protected]_Desktop:~]$ 

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

Самый простой способ найти соответствующую команду – выполнить grep через все возможные файлы запуска оболочки, как для логина, так и для интерактивных оболочек. У меня есть следующая функция, определенная в моей $HOME/.bashrc :

 grep_bash(){ for f in ~/.bashrc ~/.profile ~/.bash_profile ~/.bash_login \ /etc/profile /etc/bash.bashrc /etc/environment; do [ -e $f ] && grep -H "[email protected]" $f; done } 

Затем я могу использовать его для поиска этих файлов для интересующей строки:

 $ grep_bash foo /home/terdon/.bashrc:echo foo 

Фактически просматриваемые файлы зависят от типа используемой оболочки. Это соответствующие разделы от man bash :

  When bash is invoked as an interactive login shell, or as a non-inter‐ active shell with the --login option, it first reads and executes com‐ mands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. When an interactive shell that is not a login shell is started, bash reads and executes commands from /etc/bash.bashrc and ~/.bashrc, if these files exist. This may be inhibited by using the --norc option. The --rcfile file option will force bash to read and execute commands from file instead of /etc/bash.bashrc and ~/.bashrc. 

В большинстве * nix (единственное исключение, о котором я знаю, это OSX) оболочка по умолчанию при открытии нового терминала представляет собой интерактивную оболочку без входа, поэтому ~/.bashrc и компания читаются.

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


После обсуждения с OP в чате , @derobert помог нам понять, что проблема здесь была вызвана /etc/ssh/sshrc .

«Агент pid» находится от стартового ssh-agent , а «Identity added» – от запуска ssh-add для загрузки ключей в агент. Бит в середине – это, вероятно, собственный скрипт.

Если ваша оболочка входа – bash (по умолчанию), она загружает первый из следующих файлов, которые существуют: ~/.bash_profile , ~/.bash_login , ~/.profile . Проверьте, какой из них он загружает, и добавьте set -x вверху, затем войдите снова или запустите bash --login . Это говорит bash, чтобы распечатать след каждой выполняемой команды. Ищите эти сообщения в трассировке, это должно сказать вам, что их печатает.

Если сообщения поступают до первой трассировки, они могут быть из глобального файла инициализации: /etc/profile или скриптов в /etc/profile.d (или сценариев, которые они вызывают).

Если сообщение не отображается при запуске bash --login , то оно происходит от чего-то, запущенного демоном SSH, а не из оболочки. Проверьте, добавили ли вы что-то необычное в стек PAM : /etc/pam.d/sshd или файлы /etc/pam.d/common-* . Если это происходит только при входе в систему с SSH, это может быть команда в ~/.ssh/rc или /etc/ssh/sshrc на сервере. Если это происходит только при входе в систему с определенным SSH-ключом, это может быть команда, связанная с ключом в ~/.ssh/authorized_keys на сервере.

Более простым решением является использование команд find , grep и file , объединенных таким образом:

  find / -type f -mount -exec sh -c ' file "{}" | grep text 1>/dev/null && grep -l "2013-07-29" "{}" ' \; 

Сначала вы найдете все файлы и передаете имя каждого из них в оболочку, которая сначала проверит свой тип файла и, если окажется, что это тип текста , попытается найти в нем строку 2013-07-29 , выплевывая Имя файла if и only (опция -l ).

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

  • Обновление подсистемы Linux в Windows (Ubuntu) до 16.04
  • Linux. Посмотрите папку и запустите команду, когда файл существует.
  • Как преобразовать документ DjVu в PDF в Linux, используя только инструменты командной строки?
  • Перезагрузка браузера iceweasel (firefox)
  • Динамик Thinkpad отключается - проблема с Linux Codec?
  • Как ограничить пользователя от входа в субботу и воскресенье
  • Неизвестный кодер 'libmp3lame'
  • Как преднамеренно ввести задержку для входящих пакетов UDP
  • Как обрезать или удалять части видео mpeg из командной строки linux?
  • Запустите команду для каждого файла в каталоге, изменив имя вывода
  • Как загрузить систему Linux без графического сервера
  • Interesting Posts
    Давайте будем гением компьютера.