루트 쓰기 권한 만있는 파일에 행을 추가하고 스크립트 실행을 계속하는 방법 문제에 대해 노력하고 있으며 한 시점

bash 스크립팅을 배우려고합니다. 나는 실제적인 문제에 대해 노력하고 있으며 한 시점 root에서 쓰기 권한 이 필요한 파일에 줄을 추가해야합니다 .

코드는 다음과 같습니다.

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

어떻게 든 스크립트가 루트 암호를 요구하고, 암호를 확인하고, 인증이 성공하면 파일을 수정할 수 있습니까? 그런 다음 스크립트는 사용자 모드로 돌아가서 명령 실행을 계속해야합니다.



답변

sudo맨 페이지에는 이와 같은 작업을 수행하는 방법을 설명하는 팁 이 있습니다. 여기 하나의 라이너가 있습니다.

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

분명히, 먼저 sudo권한 을 갖도록 사용자를 설정해야합니다 . sh쉘 때문에 루트 소유의 파일로 리디렉션 사용됩니다. 또한 echo명령에 사용 된 따옴표를 피해야했습니다 .


답변

su 대부분의 유닉스 시스템에서 사용할 수 있으며 다음과 같이 작동합니다.

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

답변

tee함께 사용할 수 있습니다 sudo:

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

echo출력은 |( pipe ) 로로 리디렉션 됩니다 sudo tee.
이 경우 표준 입력tee 에서 읽고 지정된 파일 을 표준 출력에 씁니다 . (또는 )는 파일을 덮어 쓰지 않고 파일에 추가합니다. 로가 로 실행 이 루트 권한으로 파일을 엽니 다. 마지막으로 출력을 표준 출력 으로 억제 합니다 .filename-a--appendteeteesudo> /dev/nulltee

사용의 장점 중 하나 tee대신에 단지 전체 명령을 시작하는 재 지정을 포함 su -c하거나 sudo sh -c당신이하지 않아도된다는 어떤 방식으로 초기 명령의 인용 (이미 시간이 꽤 추한 얻을 수 따옴표를 포함하는 라인을 인용) 변경합니다.


답변

시도해보십시오이 명령은 Unix 및 Linux에서 사용할 수 있습니다.

sudo sh -c "echo 'add this line to the code' >> fileName"


답변

트릭을 할 것입니다 :

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