Linux에서 어떤 파일 내용이 수정되거나 추가되었는지 확인할 수 있는 방법이 있습니까? 나는 atime, ctime, mtime을 알고 있습니다. 내가 "myscript.sh" 스크립트를 생성했는데 누군가가 코드 몇 줄을 추가하거나 삭제하는 등 그 안에 뭔가를 변경했다고 가정해 보겠습니다. 파일이 생성된 후 무엇이 변경되었는지 알고 싶습니다.
어떤 아이디어가 있나요?
답변1
VCS를 통해 이 작업을 수행할 수 있습니다.자식. 먼저 Debian 시스템용
git을 설치합니다(미리 설치되어 있어야 하며, 그렇지 않은 경우 패키지 관리자에 있어야 합니다) . 그런 다음 해당 디렉토리에 파일( ) 을 저장할 디렉터리를 만들고 을 실행합니다 .(이렇게 하면 로컬이 생성됩니다. Git 저장소). 파일을 디렉터리에 추가하고 을 실행 하면 파일을 있는 그대로 저장할 수 있습니다 . 실행하여 파일이 편집되었는지 확인할 수 있습니다 . 다음과 유사한 내용이 표시됩니다.sudo apt-get install git
mkdir myDir
git init
git add -f *
git commit -m "file before editing"
git status
modified: myFile.txt
파일을 마지막으로 실행했던 시점으로 롤백하려면 다음 git commit
을 실행하면 됩니다 git reset --hard HEAD^
. 이렇게 하면 로컬 저장소가 마지막 커밋으로 돌아가게 됩니다.
다음을 사용하여 파일에 새로운 변경 사항을 저장할 수 있습니다 git commit
.
git commit -m "added 4 lines"
커밋(및 해당 메시지) 목록을 보려면 다음을 실행하세요 git log
.
VCS는 이를 위해 설계되었으므로 답변에 VCS를 사용합니다.
답변2
일반적으로 Unix에는 도구가 내장되어 있지 않습니다(또는 Unix와 같은 가장 일반적인 파일 시스템에는 도구가 내장되어 있지 않습니다).OpenVMS에 있음/있음), 따라서 이전 버전의 파일을 검색할 수는 없습니다.
가장 간단한 해결책은 "모니터링"하려는 파일의 개인 복사본을 보관한 다음 diff
시스템에 설치된 복사본과 함께 주기적으로 실행하는 것입니다.
다음 단계는 일종의 버전 제어 시스템에 파일을 저장하는 것입니다. Unix를 사용하는 가장 쉬운 방법은 일반적으로RCS이것은 매우 기본적이지만 주석에 적힌 대로 수행됩니다.
자식더 복잡하지만 하나 또는 몇 개의 파일만 관련된 경우에는 너무 번거로울 수 있습니다(RCS는 개별 파일을 처리하며 함께 속한 많은 파일의 "저장소" 개념이 없음).
답변3
@SahibPrime의 답변에 대한 귀하의 의견을 바탕으로 다음을 사용해야 합니다.관리자를 기다려주세요
홈페이지에서:
etckeeper
/etc
git
또는mercurial
저장소 에 저장할 수bazaar
있는 도구 모음 입니다darcs
. 이를 통해 git을 사용하여 /etc에 대한 변경 사항을 보거나 되돌릴 수 있습니다. 또는 백업이나 선택적 구성 변경을 위해 저장소를 다른 곳으로 푸시할 수도 있습니다.예를 들어 패키지 업그레이드 중에 변경된 내용을
apt
자동으로 커밋하기 위해 패키지 관리자에 연결됩니다 ./etc
git이 일반적으로 지원하지 않지만 /etc/shadow에 대한 권한과 같이 /etc에 중요한 파일 메타데이터를 추적합니다.버전 제어의 기본 사항을 알고 있다면 매우 모듈식이고 구성 가능하며 사용이 간단합니다.
SahibPrime이 언급하지 않은 한 가지는 이를 사용하여 git diff
현재 및/또는 이전에 커밋된 버전 사이에 어떤 변경 사항이 적용되었는지, 해당 변경 사항이 언제 적용되었는지 확인할 수 있다는 것입니다. 또한 개정 제어 파일의 이전 버전으로 쉽게 되돌릴 수도 있습니다.
적어도 데비안에서는 cron에서 매일 실행되므로 변경 사항을 커밋하는 것을 기억할 필요조차 없습니다. 다른 배포판에서도 cron에서 실행되는 것이 거의 확실합니다.
설치하고 필요할 때까지 완전히 잊어버리세요. 유지보수가 필요하지 않습니다.
git
(또는 기타 유사한 소프트웨어)을 사용하여 /usr/local의 변경 사항을 추적할 수도 있습니다 . 나는 /etc 및 /usr/local/{s,}bin/ 및 ~/bin과 같은 디렉토리에서 수년 동안 RCS를 사용했습니다. 나중에 그걸로 바꿨 svn
더니 더 좋아 etckeeper
졌네요 git
.
tldr:gitmeoutofhere
apt
2012년에 etckeeper로 전환한 것 같습니다. 그 이후로 나는 모든 변경 사항에 대한 개정 기록을 갖고 있습니다(적어도 매일, 설치 또는 업그레이드 전/후).
# git log | tail -5
commit 7e3bb0eade7ae9e211bb684be2e3c7d4a3128c24
Author: ...my.email.address.deleted...
Date: Wed Feb 29 12:53:30 2012 +1100
Initial commit
# git log | grep '^commit' | wc -l
1378
보거나 생각하거나 존재한다는 사실을 기억할 필요도 거의 없지만 필요할 때는 바로 거기에 있습니다.아주 재미있는. 내가 저지른 어리석은 일을 취소하고 모든 프로필의 잘 작동하고 양호한 버전을 즉시 복원할 수 있습니다.
구성 파일의 모든 개정 내역에 대해 수행할 수 있는 작업은 다음과 같습니다.
특정 파일에 대한 커밋 목록을 볼 수 있습니다.
# git log apache2/apache2.conf | sed -ne 's/commit //p' | head
2d0fabf90f2bc639d30bca925147fafd3fbd5e50
8022c7ca6dbe1661064604a646c52ca0d1f1b3ac
0620c88b8d1fd625f74f42059a4e8f056846df16
8c2fcfef72eca034b251654be44a268e92e39416
02329cf86655a2bb2c09c793b1d195a4de579cf1
5e449105f0ab75f9e903d8c75af5c8db6543c281
d8339212967af2c664b0c1776e9352f6c0e12ff8
7e3bb0eade7ae9e211bb684be2e3c7d4a3128c24
이러한 커밋이 언제 발생하는지 확인할 수 있습니다.
# git log 8022c7ca6dbe1661064604a646c52ca0d1f1b3ac | head -5
commit 8022c7ca6dbe1661064604a646c52ca0d1f1b3ac
Author: ...
Date: Tue Aug 20 12:26:53 2013 +1000
committing changes in /etc after apt run
차이점을 볼 수 있습니다.
# git diff 8022c7ca6dbe1661064604a646c52ca0d1f1b3ac apache2/apache2.conf
diff --git a/apache2/apache2.conf b/apache2/apache2.conf
index baf6d8a..617152c 100644
--- a/apache2/apache2.conf
+++ b/apache2/apache2.conf
@@ -71,7 +71,7 @@
#
# The accept serialization lock file MUST BE STORED ON A LOCAL DISK.
#
-Mutex file:${APACHE_LOCK_DIR} default
+#Mutex file:${APACHE_LOCK_DIR} default
#
# PidFile: The file in which the server should record its process
일부 및/또는 모든 콘텐츠를 이전 버전으로 되돌릴 수 있습니다. 가장 유용한 방법은 개별 파일을 복구하는 것입니다.
# git checkout 8022c7ca6dbe1661064604a646c52ca0d1f1b3ac apache2/apache2.conf
# git diff 8022c7ca6dbe1661064604a646c52ca0d1f1b3ac apache2/apache2.conf
#
마지막 커밋 이후 변경된 파일 목록을 볼 수 있습니다.
# git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: apache2/apache2.conf
no changes added to commit (use "git add" and/or "git commit -a")
원한다면 다시 커밋하거나( git add
및 사용 git commit
) 마음을 바꿔 최신 커밋을 다시 가져올 수 있습니다.
# git checkout 2d0fabf90f2bc639d30bca925147fafd3fbd5e50 apache2/apache2.conf
# git help status
#
답변4
침입탐지시스템(IDS)을 찾고 계실 수도 있습니다. 일부 IDS는 정기적으로 시스템의 모든 파일을 확인하고 예상치 못한 변경 사항이 있을 경우 경고합니다. 일반적인 예는 다음과 같습니다 tripwire
. 하지만 계속 403이 표시됩니다.tripwire.org지난 8시간.
이러한 시스템은 일반적으로 파일의 체크섬만 기억하므로 변경된 내용을 이해하려면 이를 백업과 비교해야 합니다.