루트 쓰기 액세스만 사용하여 파일에 줄을 추가하고 스크립트를 계속 실행하는 방법

루트 쓰기 액세스만 사용하여 파일에 줄을 추가하고 스크립트를 계속 실행하는 방법

bash 스크립트를 배우려고 합니다. 가끔 root쓰기 권한이 필요한 파일에 줄을 추가 해야 하는 실제 문제를 해결하고 있습니다 .

코드는 다음과 같습니다.

# some code
echo "add this line to the code" >> fileName
# some code

어떻게든 스크립트에서 루트 비밀번호를 요청하고, 비밀번호를 확인하고, 성공적인 확인 후 파일을 수정하도록 할 수 있습니까? 그런 다음 스크립트는 사용자 모드로 돌아가서 명령을 계속 실행해야 합니다.

답변1

sudo매뉴얼 페이지에는 이와 같은 작업을 수행하는 방법을 설명하는 팁이 있습니다 . 내가 말한 것은 다음과 같습니다.

#!/usr/bin/bash
sudo sh -c "echo \"add this line to the code\" >> fileName"

당연히 권한을 얻으려면 먼저 사용자를 설정해야 합니다 sudo. sh루트가 소유한 파일로 리디렉션되기 때문에 쉘이 사용됩니다 . 또한 echo명령에 사용된 따옴표를 이스케이프 처리해야 했습니다 .

답변2

su대부분의 UNIX 시스템에서 사용 가능하며 작동합니다.

su root -c 'echo "add this line to the code" >> fileName'

답변3

당신은 tee그것을 사용할 수 있습니다 sudo:

echo "add this line to the code" | sudo tee -a filename > /dev/null

echo의 출력은 |(관로) 도착하다 sudo tee. tee다음에서 읽기표준 입력그리고 에 편지를 쓰세요표준 출력주어진 파일(이 경우 filename. -a(또는 --append)) tee이 파일에 추가되며, 이 파일이 없으면 파일을 덮어쓰게 됩니다. tee실행하면 sudo루트 권한이 있는 파일이 열립니다. 마지막으로 출력을 > /dev/null억제합니다 .tee표준 출력.

teesu -c전체 명령(사용 또는 리디렉션 포함)을 시작하는 대신 사용 의 한 가지 장점 sudo sh -c은 어떤 방식으로든 초기 명령에 대한 참조를 변경할 필요가 없다는 것입니다(이미 따옴표가 포함된 줄을 인용하면 때때로 매우 보기 흉해질 수 있습니다).

답변4

트릭을 수행합니다.

ssh host "sudo su root -c 'echo "add this line to the code" >> /etc/hosts'"

관련 정보