Você faz tem um arquivo existente para referência - o em /proc/30304/fd
. É um pouco complicado usá-lo, já que o link regular () se recusa a aceitá-lo. Você precisará usar linkat () .
Escreva um pequeno programa em C. Coloque isso em foo.c
:
#include <fcntl.h>
#include <err.h>
int main(int argc, char *argv[]) {
char *src, *dstdir, *dstname;
int dirfd, r;
if (argc < 4)
errx(2, "not enough parameters");
src = argv[1]; dstdir = argv[2]; dstname = argv[3];
dirfd = open(dstdir, O_DIRECTORY);
if (dirfd < 0)
err(1, "open(%s) failed", dstdir);
r = linkat(AT_FDCWD, src, dirfd, dstname, AT_SYMLINK_FOLLOW);
if (r < 0)
err(1, "linkat(%s, %s/%s) failed", src, dstdir, dstname);
return 0;
}
Execute como:
make foo
./foo '/proc/30304/fd/4' '/var/log' 'recovered.log'