운영 체제 과정의 일환으로 저는 학생들에게 Linux와 일부 코딩을 소개합니다. 학생들은 지정된 디렉터리에 프로그램을 제출하고 계정에 있는 이름을 사용합니다(예: ~/Prog1/Prog1.java
). 계획 제출을 최대 2일까지 연기할 수 있습니다.
나는 그들이 "제출" 후에 프로그램을 수정하는 것을 피할 수 있기를 바랍니다. 내 첫 번째 생각은 명령을 비활성화하거나 숨겨서 파일 touch
을 검사할 때 파일의 타임스탬프를 위조할 수 없도록 하는 것이었지만 ls -l
, 그것으로 충분할까요? 내가 감지하지 못한 채 소스 코드를 비밀리에 수정할 수 있는 상대적으로 쉬운 다른 방법이 있습니까? 그들은 Linux를 처음 접하기 때문에 지식이 많지 않습니다.
아니면 프로그램을 복사할 수 있지만 타임스탬프는 수정할 수 없도록 쓰기 전용 디렉터리를 만드는 방법이 있습니까? 내가 고려하지 않은 더 쉬운 방법이 있습니까?
이것은 Linux용 RedHat 7.5 버전입니다.
포스팅할까 고민하다가https://superuser.com/또는https://cseducators.stackexchange.com/근본적으로 Linux 문제로 생각되지만 더 적절하다면 내 질문을 그곳으로 옮기게 되어 기쁩니다.
나에게 주어진 변경/수정 시간을 확인하는 것이 stat
커밋 후 파일이 손상되지 않았는지 확인하는 완벽한 방법입니까?
답변1
chattr
파일을 불변으로 만들 수 있는 명령을 찾고 있을 수도 있습니다 . ~에서맨샤텔:
"i" 속성이 있는 파일은 수정할 수 없습니다. 삭제하거나 이름을 바꿀 수 없으며 파일에 대한 링크를 만들 수 없으며 파일에 데이터를 쓸 수 없습니다. 수퍼유저 또는 CAP_LINUX_IMMUTABLE 기능이 있는 프로세스만 이 속성을 설정하거나 지울 수 있습니다.
변경할 수 없는 속성을 설정합니다.
chattr +i ~/Prog1/Prog1.java
변경할 수 없는 속성을 제거합니다.
chattr -i ~/Prog1/Prog1.java
현재 속성을 보려면 다음을 사용할 수 있습니다
lsattr
(학생들은 이 명령을 사용하여 불변 속성이 설정되었는지 확인할 수도 있습니다).lsattr ~/Prog1/Prog1.java
cron
또한 2일 제출 간격 내에 제출 폴더에서 새 파일을 모니터링하는 작업을 추가해야 합니다 .
답변2
특정 폴더의 소유권을 쉽게 가져오면서 해당 폴더의 작업을 검사할 수 있습니다.
폴더의 소유권을 얻으려면:
chown teacher /path/to/file.java
또한 비소유자 계정은 다음 사항을 변경할 수 없습니다.chmod go-w /path/to/file.java
이제 이를 자동화하려면 at
다음 명령을 사용하여 코드 작업을 실행하세요.
at 10am Jul 31
, 그러면 새로운 명령줄이 표시됩니다 at>
. 거기에서 이전 chmod & chown
명령을 입력하면 거기에서 실행됩니다.
at
명령을 실행하려면 수퍼유저를 사용 하십시오 root
.