파일과 디렉토리가 흩어져 있는 여러 위치에 프로그램이 설치되어 있습니다. 이 파일과 디렉터리를 수동으로 삭제해야 합니다. 다음과 같이 사용자가 만든 파일과 디렉터리를 삭제할 수 있다는 것을 알고 있습니다.
# find /home -user student -exec rm -rf {} \;
삭제하려는 파일과 디렉터리가 있는 프로그램의 이름을 지정하여 프로그램에서 동일한 작업을 수행할 수 있는 방법이 있습니까?
답변1
Hans Martin Mosner가 그의 답변에서 말했듯이, 어떤 프로그램이 특정 파일이나 디렉터리를 생성하거나 수정했는지 식별하기 위한 정보는 저장되지 않습니다.
그러나 find
프로그램을 사용하여 콘텐츠를 찾을 수 있습니다.가능한생성하거나 수정합니다. 먼저 "타임스탬프 파일"을 만든 다음 프로그램을 실행하면 됩니다. 실행 후 find
타임스탬프 파일과 관련된 타임스탬프를 기반으로 수정된 모든 파일을 찾으라는 메시지가 표시될 수 있습니다.
타임스탬프 파일 생성:
touch stamp
프로그램을 실행하세요.
find
타임스탬프 파일보다 수정 시간이 최신인 콘텐츠를 찾으려면 다음을 실행하세요 .find / -newer stamp
또는 어떤 사용자가 파일을 소유해야 하는지 알고 있는 경우
find / -user someuser -newer stamp
find
/
수정이 발생한 특정 하위 디렉터리에 대한 최상위 검색 경로를 좁힐 수 없으면 이 명령을 실행하는 데 꽤 오랜 시간이 걸릴 수 있습니다 . 또한 find
위 명령으로 생성된 모든 경로 이름 에 유의하세요.실행 중인 특정 프로그램이 건드리지 않았을 수 있습니다.. 파일이 생성된 이후 수많은 다른 프로그램이 실행 중일 수 있으며 stamp
파일을 생성하거나 변경했을 수도 있습니다.
답변2
프로그램을 실행하기 전에 이를 알고 있다면 프로그램을 특수 그룹에 set-gid 태그 지정할 수 있습니다.
아마도 이 작업을 수행하고 다시 실행하여 배치된 위치를 확인할 수 있습니다.
답변3
프로그램이 파일에 다시 쓰도록 할 수 있다면 tracefile
도움이 될 수 있습니다.
tracefile -ue bash -c 'seq 10 | xargs -n1 touch'
https://gitlab.com/ole.tange/tangetools/-/tree/master/tracefile
답변4
커널 인터페이스와 같이 프로그램 수행에 집중하고 싶은 작업을 미리 알고 있거나 감사 추적을 기록할 수 있는 경우(또는 그럴 수도 있지만 sysdig
이는 속도가 느리고 추적하려는 프로그램에 대한 완벽한 래퍼가 필요함) 실행되지 않기를 바랍니다.. .). 또한 다른 프로그램이 관련 프로그램에서 출력을 생성할 때 어떤 일이 발생하는지 고려해야 합니다. 또한 하위 프로세스가 수행하는 작업을 추적해야 합니까?SystemTap
strace
sudo
perl -e 'qx(echo subshell-io > foo)'
모든 프로그램이 접촉하는 모든 파일(및 사용자 및 그룹, 상위 프로세스 pid 등과 같은 기타 메타데이터)에 대한 감사 추적을 갖는 것은 확실히 가능합니다. 그러나 설정, 구축 및 유지 관리 비용이 많이 들 수 있습니다. 디렉토리 쓰기 를 제외하기 위해 레코드를 필터링하는 방법 /tmp
, 여러 쓰기 passwd.tmp
/ rename("passwd.tmp","passwd")
호출을 단일 논리 연산으로 집계하는 방법, 관심 있는 프로그램 수정 사례를 처리하는 방법이 필요할 수 있습니다. /etc/passwd
(다른 많은 공유 OS 파일 중에서) 프로그램 후 정리 중에 맹목적으로 삭제하고 싶지 않을 것입니다. 또는 dbus를 사용하여 프로그램에 대한 위임된 I/O를 처리하는 방법과 dbus를 사용하는 다른 프로세스를 어떻게 처리합니까? 귀하의 프로그램에 있는 임의의 비I/O 메시지가 다른 곳에서 I/O를 생성합니까?