Поддержание текущего стиля командной строки после Используя 'su?'

Если вы хотите знать размер устройства (в байтах), вы можете использовать blockdev:

# blockdev --getsize64 /dev/sde
2000398934016

В этом примере /dev/sde - это 2TB диск, или, по крайней мере, это то, что видит ядро. Естественно, fdisk , parted и другие должны показывать одну и ту же информацию.

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

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

-121--123264-

Я выполнил пробег в запущенном экземпляре bash . Затем я вызвал команду exec sleep 100 . Теперь посмотрите, что происходит:

access("/bin/sleep", X_OK)              = 0
...
execve("/bin/sleep", ["sleep", "100"], [/* 14 vars */]) = 0
...
nanosleep({100, 0},
...
exit_group(0)                           = ?

Таким образом, вы можете видеть, что происходит почти так же, как когда вы называете сон обычным способом. bash проверяет, предоставлено ли исполняемое разрешение ( X _ OK ) для /bin/sleep с помощью системного вызова access () . Затем execve () выполняет программу, на которую указывает имя файла. После execve () syscall sleep управляет процессом. Делает это вещи: nanosleep () . Он также копает ту же самую pid. После завершения сна процесс также завершается. Не выполняется ли режим sleep или bash .

Доказательство:

В другом окне я наблюдал за процессом с помощью ps . Перед выполнением команды она выглядела следующим образом:

$ ps -o stat,pid,cmd -p <pid>
Ss+  10905 -bash

Во время выполнения

$ ps -o stat,pid,cmd -p <pid>
Ss+  10905 sleep 100

Afer sleep завершил процесс.

Что происходит при обычном запуске?

access("/bin/sleep", X_OK)              = 0
...
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f6c9fd089d0) = 19261
...
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WSTOPPED|WCONTINUED, NULL) = 19261
...
--- SIGCHLD (Child exited) @ 0 (0) ---

Проверяется разрешение на выполнение. Затем создается дочерний процесс clone () . Экземпляр bash теперь находится в фоновой группе процессов, sleep - в основной группе процессов. Наконец, вызов wait4 () ожидает завершения дочернего процесса (что требует 100 секунд).

-121--67354-

Сделать просто для удобства. Без него можно строить программное обеспечение, просто сложнее.

Когда вы запускаете make для создания чего-либо, он показывает вам команды, которые он выполняет. Эти команды можно выполнить вручную и получить тот же эффект.

$ echo "int main() {}" > test.c
$ make test
cc     test.c   -o test

Который создал файл с именем test .
Я могу получить тот же результат, просто сделав:

cc test.c -o test

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

0
18.02.2015, 02:14
2 ответа

Запустить SU -L $ username через терминал, чтобы войти в систему в качестве другого пользователя, не теряя текущего стиля подсказки.

1
28.01.2020, 02:20

Лучшая идея может быть использована Sudo вместо SU . Оперативное изменение важно, потому что он напоминает вам, что у вас возвышены привилегии и могут легко случайно сломать что-то, поэтому вы должны быть осторожны.

3
28.01.2020, 02:20

Теги

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