2013-02-15 82 views
1

有没有办法找到命令将输出重定向到(如果已经)的路径?获取命令输出已重定向到的路径

我试着使用:

ps -p PID -o cmd 

想我可以找一个>和提取的路径,但输出没有在它的一部分。我很确定它不仅被截断。

回答

2

您可以使用proc文件系统/proc/self/fd

readlink /proc/self/fd/1 

标准输出或2为标准错误。

2

如果您知道PID,只需检查/proc/ID/fd/1。它应与实际路径:

$ watch date > /tmp/1 & 
[1] 27346 
$ ls -l /proc/27346/fd/1 
l-wx------ 1 choroba users 64 2013-02-15 16:28 /proc/27346/fd/1 -> /tmp/1 
0

使用lsof(列表打开文件)命令查看进程已打开写入的文件。

例如:

$ lsof -p 31714 
COMMAND PID USER  FD TYPE DEVICE SIZE  NODE NAME 
bash 31714 dogbane 0u CHR 136,4     6 /dev/pts/4 
bash 31714 dogbane 1w REG 8,1  15 2032202 /tmp/t 

在FD(文件描述符)列中的w意味着/tmp/t是打开用于写入。

0

怎么样?

[[email protected] ~]# ls -l /proc/14170/exe 
lrwxrwxrwx 1 root root 0 Feb 15 10:36 /proc/14170/exe -> /usr/sbin/httpd 

再举一个例子:

[[email protected] ~]# readlink -f /proc/5352/exe 
/sbin/syslogd