Использовать set -e
установить режим выхода на ошибке: если простая команда возвращает ненулевое состояние (указание на отказ), выходы оболочки.
Остерегайтесь этого set -e
не всегда умирает. Командам в тестовых положениях позволяют перестать работать (например. if failing_command
, failing_command || fallback
). Команды в подоболочке только приводят к выходу из подоболочки, не родителя: set -e; (false); echo foo
дисплеи foo
.
С другой стороны, или кроме того, в ударе (и ksh и zsh, но не простой sh), можно указать команду, это выполняется в случае, если команда возвращает ненулевое состояние, с ERR
прерывание, например. trap 'err=$?; echo >&2 "Exiting on error $err"; exit $err' ERR
. Отметьте это в случаях как (false); …
, ДОПУСКАТЬ ОШИБКУ прерывание выполняется в подоболочке, таким образом, это не может заставить родителя выходить.
ВОЗ
и и
в последний раз
показывают только, если вы вошли в систему. Когда вы используете SCP
, вы технически не вошли в систему, поскольку ваша оболочка на пульте сторона не была порождена как таковая.
Чтобы проследить такие вещи, которые вам нужно использовать учет процессов, пакет называемый PSACCT
может предоставить вам уровень регистрации, если это то, что вы после. Также ведение журнала через SSH может быть дополнена, чтобы показать вам некоторые из этих деталей, если это то, что вы хотите.
Команды , которые
и в последний раз
не предназначены для этой цели.
Эта терминология всегда путает людей с тех пор, как они связывают связь с вошедшим в систему, но они являются 2 совершенно разными государствами. Когда вы получите доступ к веб-серверу, вы употребляете ресурсы удаленной системы, не входите в систему. Это по сути то, что вы продолжаете, когда вы выполняете SCP
.
Выдержки от Last & Who Manage Pages
ПоследнееКтоПоследнее, lastb - показать список последних вошедших в систему пользователей
Кто - показывает, кто вошел в систему
Здесь я вошел в сервер, используя SFTP, но , который
и последних
не обращается.
$ ps auxf | less
...
root 3376 0.0 0.0 7212 1040 ? Ss Sep10 0:00 /usr/sbin/sshd
root 29066 0.0 0.0 10108 3004 ? Ss 09:44 0:00 \_ sshd: sam [priv]
sam 29071 0.0 0.0 10240 1836 ? S 09:44 0:00 | \_ sshd: sam@notty
sam 29072 0.1 0.0 6708 1740 ? Ss 09:44 0:00 | \_ /usr/libexec/openssh/sftp-server
root 29202 0.1 0.0 10084 3052 ? Ss 09:44 0:00 \_ sshd: root@pts/0
root 29204 0.6 0.0 6268 3052 pts/0 Ss 09:44 0:00 \_ -bash
root 29255 0.0 0.0 4624 1108 pts/0 R+ 09:45 0:00 \_ ps auxf
root 29256 0.0 0.0 4288 760 pts/0 S+ 09:45 0:00 \_ less
Поскольку у меня нет оболочки, который был выполнен в виде входа в систему Shell, я технически не вошел в систему. Когда I SSH
в систему как root, как показано выше, у меня есть оболочка, Bash
.
Выход Кто-a
несет это:
$ who -a
2014-09-10 05:15 398 id=si term=0 exit=0
system boot 2014-09-10 05:15
run-level 5 2014-09-10 05:15 last=S
2014-09-10 05:16 2307 id=l5 term=0 exit=0
LOGIN tty1 2014-09-10 05:16 3785 id=1
LOGIN tty2 2014-09-10 05:16 3786 id=2
LOGIN tty3 2014-09-10 05:16 3787 id=3
LOGIN tty4 2014-09-10 05:16 3788 id=4
LOGIN tty5 2014-09-10 05:16 3792 id=5
2014-09-10 05:16 3794 id=6
2014-09-10 05:16 3799 id=x
root + pts/0 2014-09-25 09:51 . 29300 (mulder.mydom.net)
pts/1 2014-09-24 16:36 20324 id=ts/1 term=0 exit=0
pts/1 2014-09-12 02:40 27603 id=/1 term=0 exit=0
pts/2 2014-09-12 03:21 27820 id=ts/2 term=0 exit=0
Обратите внимание, что нет ссылки на пользователя, SAM, с подключением SFTP. Если вы хотите определить, является ли оболочка или не взглянуть на этот u & l q & a под названием: Как проверить, является ли оболочка / интерактивная / пакет .