Используется ли «mount -oloop» по умолчанию (когда ядро достаточно новое)?

Или, если вы чувствуете себя особенно смелым, gdb!

% lsof | grep deleted | grep deleteme
% perl -E 'while(1){ say "om nom nom"; sleep 1 }' > deleteme & rm deleteme
[2] 15720
% lsof | grep deleted | grep deleteme                                     
perl      15720    jdoe42    1w      REG                8,2        0    5376141 /home/jdoe42/deleteme (deleted)
% gdb -q -p 15720
...
(gdb) call close(1)
$1 = 0
(gdb) quit
...
% lsof | grep deleted | grep deleteme
% jobs
[1]  - running    perl -E 'while(1){ say "om nom nom"; sleep 1 }' > deleteme
% kill %1
% 
[1]  + terminated  perl -E 'while(1){ say "om nom nom"; sleep 1 }' > deleteme
% 

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

Ключевыми моментами являются получение номера дескриптора файла (через lsof или эквивалент), который здесь является STDOUT_FILENO (1w согласно lsof), поскольку именно на него перенаправляет оболочка, а затем вызов close(2) на этом дескрипторе файла. Файлы, открытые самой программой, скорее всего, будут иметь более высокие номера дескрипторов (от трех и выше); вопрос показывает, что стандартная ошибка идет в файл /tmp (что, по-видимому, является локальным недостатком безопасности, чтобы записать статическое имя файла под /tmp подобным образом).

0
06.03.2018, 07:37
2 ответа

Los enlaces gitno tienen nada que ver con el PATH, son una medida -de ahorro de espacio.

En términos generales, en la mayoría de los casos para el software "instalado", los enlaces físicos son preferibles a los enlaces simbólicos cuando sea posible, porque son más eficientes y resistentes. Verá bastantes binarios en /usr/bincon enlaces duros, incluido perl, y eso está bien.

gitlos paquetes tienden a usar enlaces simbólicos en su lugar, debido a la gran cantidad de enlaces involucrados y los problemas que pueden causar . Si instala gitdesde la fuente, usará enlaces duros de forma predeterminada si es posible; puede deshabilitarlo agregando NO_INSTALL_HARDLINKS=1a los argumentos del comando make install.

4
28.01.2020, 02:15

A menudo, un solo binario con múltiples funciones relacionadas tiene múltiples enlaces duros, para permitir que cada función tenga un comando distinto y memorable, y aún así no duplicar ningún código que todas esas funciones puedan tener en común.

Hacer que las diversas funciones de un solo binario aparezcan como comandos distintos también es una forma fácil, independiente -de shell para hacer que las funciones TAB -se puedan completar :, por ejemplo, en bash, si solo recuerda las primeras letras de algún comando, simplemente escriba las letras que recuerde y presione TAB dos veces :obtendrá una lista de todos los comandos con esas letras iniciales.

También se pueden usar enlaces simbólicos para esto, pero si se espera que todos los comandos enlazados estén en el mismo directorio, los enlaces duros son la solución más -eficiente :en lugar de duplicar un archivo completo, o simplemente al usar un inodo adicional como lo haría un enlace simbólico (en algunos sistemas de archivos ), un enlace duro ocupa solo una entrada de directorio.

Si lo desea, también puede hacer que un script se comporte así fácilmente:

#!/bin/sh

case "${0##*/}" in
    name1)
        # do something
        ;;
    name2)
        # do something else
        ;;
    *)
        # output an error message, or perhaps usage instructions
        ;;
esac
3
28.01.2020, 02:15

Теги

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