2013-08-01 2 views
-1

ssh를 통해 root가 소유 한 파일을 편집해야합니다. 파일에 항목을 추가하고 처음 9 줄을 보존하고 나머지는 임시 파일로 재정렬합니다. 나는> 파일에있는 내용을 덮어 씁니다. (그리고 그게 내가 원하는 것입니다.)하지만 파일의 소유자로서 루트를 보존해야합니다. 어떻게해야합니까? 감사! 내가 BASH 쓴 이후고양이가 주인을 변경합니까?

#!/bin/bash 
user="" 
echo "User:" 
read user 
ssh [email protected] " 
sed -i '\$a$user' file; 
(head -n 9 file ; tail -n +10 file | sort) > temp; 
cat temp > file; 
rm -f temp 
" 
+1

그냥 나를 위해 소유자를 변경하지 않는 스크립트 –

+0

의 끝'을 chown root.root의 file'을 추가? – Wrikken

답변

1

cat은 소유자를 변경하는 것이 아니며, sed입니다.

mv file file.bak 
sed '\$a$user' file.bak > file 
rm file.bak 

당신이 볼 수 있듯이,이 원본 파일의 이름으로 새로운 파일을 생성하고이 파일을 작성하는 사용자가 소유 : 당신이 sed -i를 사용하는 경우, 그것은 같은 것을한다.

이 문제를 방지하려면 -i 옵션을 사용하는 대신 원본 파일의 복사본을 만드십시오. 당신이로 로그인하고있는 XXXX 사용자가 비밀번호없는 액세스 할 수있는 XXXX 기계의 경우

sed '\$a$user' file | head -n 9 file ; tail -n +10 file | sort > temp 
cat temp > file 
rm temp 
+0

도움을 주셔서 감사합니다! echo "$ user">> 파일을 사용하여 소유자를 변경하지 않았습니다. – matmic

0

오랜만하지만 난 출발점이 소유권을 가지고있는 것

chown root $file // if you have a variable with the file name in 

또는

chown root thefile.txt //if you want it hard coded; 

방정식의 또 다른 변수가 될 것이라고 생각 응용 고양이? 내가 실행중인 응용 프로그램의 소유자가 누구 생각 세션이 다음 그러므로 루트에 속하는 것이기 때문에 그 넣어은

을 결정하는 파일의 소유권은 어쩌면 당신도

$ sudo cat temp > file 

을 시도 할 수있는 방법을 먹으 렴 출력은 루트에 속할 것입니다 ???

0

로그인하는 사용자가 루트가 될 수 없다고 생각합니까? 는 가장 좋은 건 물론

OUTFILE =의 = TMPFILE는, seding awking하고 tmp 파일에 greping 모든 주문을 할 경우 DD에게

DD를 사용하는 것입니다. 이 사용법의 dd는 새 파일을 만들지 않고도 동일합니다.

0
#!/bin/bash 
user="" 
echo "User:" 
read user 
ssh [email protected] " 
sed -i '\$a$user' file; 
(head -n 9 file ; tail -n +10 file | sort) > temp; 
sudo mv temp file; 
sudo chown root file 
" 

이 더 잘 작동합니다

cp file /tmp/file.$$ 
sed '\$a$user' /tmp/file.$$ > file 
rm /tmp/file.$$ 

은 또는 당신은 당신의 파이프 라인에 sed를 둘 수 있었다 sudo하려면. 당신은 당신을/etc에서이 항목을 가지고이 작업을 수행 할 수 있습니다 /의 sudoers가 파일 :

xxxx ALL=NOPASSWD: ALL 
관련 문제