Перейдите к http://kmuto.jp/debian/hcl и вставьте вывод lspci -n
как спросили. Вы получите рекомендации драйвера.
Можно также просто проверить, работает ли каждый драйвер на Вас - ничто не взорвется из-за него :)
Оболочка входа в систему является первым процессом, который выполняется под Вашим идентификатором пользователя, когда Вы входите в систему для интерактивной сессии. Процесс входа в систему говорит оболочке вести себя как оболочка входа в систему с конвенцией: передающий аргумент 0, который обычно является названием исполняемого файла оболочки с a -
символ предварительно ожидается (например. -bash
тогда как это обычно было бы bash
. Оболочки входа в систему обычно читают файл, который делает вещи как установка переменных среды: /etc/profile
и ~/.profile
для традиционной Оболочки Bourne, ~/.bash_profile
дополнительно для удара †, /etc/zprofile
и ~/.zprofile
для zsh †, /etc/csh.login
и ~/.login
для csh, и т.д.
Когда Вы входите в систему на текстовой консоли, или через SSH, или с su -
, Вы получаете интерактивную оболочку входа в систему. Когда Вы входите в систему в графическом режиме (на X менеджерах по оформлению), Вы не получаете оболочку входа в систему, вместо этого Вы получаете менеджер сеансов или менеджер окон.
Редко выполнить неинтерактивную оболочку входа в систему, но приблизительно X настроек делают это, когда Вы входите в систему с менеджером по оформлению, чтобы расположить считать файлы профиля. Другие настройки (это зависит от распределения и от менеджера по оформлению), чтение /etc/profile
и ~/.profile
явно, или не читайте их. Другой способ получить неинтерактивную оболочку входа в систему состоит в том, чтобы войти в систему удаленно с командой, прошел через стандартный вход, который не является терминалом, например. ssh example.com <my-script-which-is-stored-locally
(в противоположность ssh example.com my-script-which-is-on-the-remote-machine
, который выполняет неинтерактивную, оболочку невхода в систему).
При запуске оболочки в терминале на существующей сессии (экран, X терминалов, буфер терминала Emacs, оболочка в другом, и т.д.), Вы получаете интерактивную, оболочку невхода в систему. Та оболочка могла бы считать конфигурационный файл оболочки (~/.bashrc
для удара, вызванного как bash
, /etc/zshrc
и ~/.zshrc
для zsh, /etc/csh.cshrc
и ~/.cshrc
для csh, файл, обозначенный ENV
переменная для оболочек POSIX/XSI-compliant, таких как тире, ksh, и удар при вызове как sh
, $ENV
если установлено и ~/.mkshrc
для mksh, и т.д.).
Когда оболочка запускает скрипт, или команда передала свою командную строку, это - неинтерактивная, оболочка невхода в систему. Такие оболочки выполняются все время: очень распространено, что, когда программа называет другую программу, она действительно запускает крошечный скрипт в оболочке для вызова той другой программы. Некоторые оболочки читают файл запуска в этом случае (удар петляет обозначенный BASH_ENV
переменная, zsh выполнения /etc/zshenv
и ~/.zshenv
), но это опасно: оболочка может быть вызвана во всех видах контекстов, и существует едва что-либо, что можно сделать, который не мог бы повредить что-то.
† Я упрощаю немного, вижу руководство для окровавленных деталей.
В оболочке входа в систему, argv[0][0] == '-'
. Это - то, как это знает, что это - оболочка входа в систему.
И затем в некоторых ситуациях это ведет себя по-другому в зависимости от его "состояния" оболочки входа в систему. Например, оболочка, которая не является оболочкой входа в систему, не выполнила бы команду "выхода из системы".
man bash
, с добавленным акцентом, "Оболочка входа в систему является той, чей первый символ нуля аргумента - или один, запустился с - опция входа в систему".
– Wildcard
23.01.2017, 13:49
В оболочке входа в систему, argv[0][0] == '-'
. Это - то, как это знает, что это - оболочка входа в систему.
И затем в некоторых ситуациях это ведет себя по-другому в зависимости от его "состояния" оболочки входа в систему. Например, оболочка, которая не является оболочкой входа в систему, не выполнила бы команду "выхода из системы".
Оболочка, запущенная в новом терминале в GUI, была бы интерактивной оболочкой невхода в систему. Это получило бы Ваш .bashrc, но не Ваш .profile, например.
Чтобы определить, находитесь ли вы в оболочке входа в систему:
prompt> echo $0
-bash # "-" is the first character. Therefore, this is a login shell.
prompt> echo $0
bash # "-" is NOT the first character. This is NOT a login shell.
В Bash вы также можете использовать shopt login_shell
:
prompt> shopt login_shell
login_shell off
(или на
в оболочке входа в систему).
Информацию можно найти в man bash
(поиск по Invocation). Вот отрывок:
Оболочка входа в систему - это оболочка, у которой первый символ нулевого аргумента - или , начинающийся с параметром --login.
Вы можете проверить это сами. Каждый раз, когда вы используете SSH, вы используете оболочку входа в систему. Например:
prompt> ssh user@localhost
user@localhost's password:
prompt> echo $0
-bash
Важность использования оболочки входа в систему заключается в том, что будут выполнены любые настройки в /home/user/.bash_profile
.Вот еще немного информации, если вам интересно (из man bash
)
«Когда bash вызывается как интерактивная оболочка входа в систему или как неинтерактивная оболочка с - -login сначала читает и выполняет команды из файла / etc / profile, если этот файл существует. После чтения этого файла он ищет
~ / .bash_profile
,~ / .bash_login
и~ / .profile
в указанном порядке, а также считывает и выполняет команды из первого существующего и доступен для чтения. Параметр --noprofile может использоваться при запуске оболочки, чтобы запретить такое поведение. "
Я подробно расскажу об отличном ответе Жиля в сочетании с методом Тимоти для проверки типа оболочки входа в систему.
Если вы хотите увидеть все своими глазами, попробуйте приведенные ниже фрагменты и сценарии.
Проверка того, является ли оболочка (не -)интерактивной
if tty -s; then echo 'This is interactive shell.'; else echo 'This is non-interactive shell.'; fi
Проверка того, является ли оболочка (не -)логином
Если вывод echo $0
начинается с -
, это пример вывода:-bash
)оболочки входа в систему(echo $0
. В противном случае это не -оболочка входа в систему(echo $0
пример вывода:bash
).
if echo $0 | grep -e ^\- 2>&1>/dev/null; then echo "This is login shell."; else echo "This is non-login shell."; fi;
Давайте объединим два вышеуказанных вместе, чтобы получить обе части информации одновременно:
THIS_SHELL_INTERACTIVE_TYPE='non-interactive';
THIS_SHELL_LOGIN_TYPE='non-login';
if tty -s; then THIS_SHELL_INTERACTIVE_TYPE='interactive'; fi;
if echo $0 | grep -e ^\- 2>&1>/dev/null; then THIS_SHELL_LOGIN_TYPE='login'; fi;
echo "$THIS_SHELL_INTERACTIVE_TYPE/$THIS_SHELL_LOGIN_TYPE"
ssh ubuntu@34.247.105.87
Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.4.0-1083-aws x86_64)
ubuntu@ip-172-31-0-70:~$ THIS_SHELL_INTERACTIVE_TYPE='non-interactive';
ubuntu@ip-172-31-0-70:~$ THIS_SHELL_LOGIN_TYPE='non-login';
ubuntu@ip-172-31-0-70:~$ if tty -s; then THIS_SHELL_INTERACTIVE_TYPE='interactive'; fi;
ubuntu@ip-172-31-0-70:~$ if echo $0 | grep -e ^\- 2>&1>/dev/null; then THIS_SHELL_LOGIN_TYPE='login'; fi;
ubuntu@ip-172-31-0-70:~$ echo "$THIS_SHELL_INTERACTIVE_TYPE/$THIS_SHELL_LOGIN_TYPE"
interactive/login
ubuntu@ip-172-31-0-70:~$ bash -c 'THIS_SHELL_INTERACTIVE_TYPE='non-interactive'; THIS_SHELL_LOGIN_TYPE='non-login'; if tty -s; then THIS_SHELL_INTERACTIVE_TYPE='interactive'; fi; if echo $0 | grep -e ^\- 2>&1>/dev/null; then THIS_SHELL_LOGIN_TYPE='login'; fi;
echo "$THIS_SHELL_INTERACTIVE_TYPE/$THIS_SHELL_LOGIN_TYPE"'
interactive/non-login
ssh ubuntu@34.247.105.87 < checkmy.sh
Pseudo-terminal will not be allocated because stdin is not a terminal.
Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.4.0-1083-aws x86_64)
non-interactive/login
ssh ubuntu@34.247.105.87 'THIS_SHELL_INTERACTIVE_TYPE='non-interactive'; THIS_SHELL_LOGIN_TYPE='non-login'; if tty -s; then THIS_SHELL_INTERACTIVE_TYPE='interactive'; fi; if echo $0 | grep -e ^\- 2>&1>/dev/null; then THIS_SHELL_LOGIN_TYPE='login'; fi; echo "$THIS_SHELL_INTERACTIVE_TYPE/$THIS_SHELL_LOGIN_TYPE"'
non-interactive/non-login
-t
Вы можете явно запросить интерактивную оболочку, если хотите запустить команду удаленно через ssh, используя переключатель -t
.
ssh ubuntu@34.247.105.87 -t 'THIS_SHELL_INTERACTIVE_TYPE='non-interactive'; THIS_SHELL_LOGIN_TYPE='non-login'; if tty -s; then THIS_SHELL_INTERACTIVE_TYPE='interactive'; fi; if echo $0 | grep -e ^\- 2>&1>/dev/null; then THIS_SHELL_LOGIN_TYPE='login'; fi; echo "$THIS_SHELL_INTERACTIVE_TYPE/$THIS_SHELL_LOGIN_TYPE"'
interactive/non-login
Примечание :На тему, почему удаленный запуск команды не работает login shell
подробнее здесь .
Это старая ветка, но я только что нашел конкретный пример интерактивной оболочки без -входа в систему.
Когда я использовал VSCode для удаленной разработки на виртуальной машине Linux, я понял, что мои переменные среды в /etc/profile.d/env_file.sh
не подхватывались интегрированным терминалом VSCode даже после перезапуска VSCode и самого терминала. Вывод для $0
показал, что это не оболочка входа в систему.
Похоже, что после подключения к удаленному Linux-компьютеру VSCode просто запускал одну основную оболочку входа в систему, но для каждого интегрированного терминала он запускал просто другой /bin/bash
процесс. Вы видите, что в выводе ps
нет -
, но это не помогло решить, является ли текущая оболочка логином или нет.
$ echo $0
/bin/bash
$ ps $(echo $$)
PID TTY STAT TIME COMMAND
2274 pts/3 Ss 0:00 /bin/bash
Когда я захожу на сервер напрямую через SSH, я вижу -bash
, это оболочка входа.
~$ echo $0
-bash
~$ ps $(echo $$)
PID TTY STAT TIME COMMAND
2088 pts/2 Ss 0:00 -bash
Затем я добавил параметр аргумента оболочки(-l
)в VSCode. Теперь вывод для эха $0
такой же, но обратите внимание на идентификатор$$
(текущего процесса, PID)/bin/bash
с опцией -l
(--login
).
$ echo $0
/bin/bash
$ ps $(echo $$)
PID TTY STAT TIME COMMAND
2309 pts/3 Ss 0:00 /bin/bash -l
Таким образом, чтобы проверить, является ли оболочка оболочкой входа в систему, вам нужно проверить как echo $0
, так и ps $(echo $$)
. В зависимости от реализации вывод должен быть либо -bash
, либо /bin/bash -l
bash
как неинтерактивная оболочка входа в систему? – Piotr Dobrogost 16.06.2013, 11:47echo $- | bash -lx
– Gilles 'SO- stop being evil' 16.06.2013, 15:11FOO
переменная среды (т.е..profile
содержитexport FOO=something
) затем это доступно всем подпроцессам, включаяfoo.sh
. Если Вы изменяетесь.profile
кому:export FOO=something_else
затем./foo.sh
все еще распечатаетsomething
до следующего раза Вы входите в систему. – Gilles 'SO- stop being evil' 06.10.2016, 18:13