루트 쓰기 권한 만있는 파일에 행을 추가하고 스크립트 실행을 계속하는 방법


9

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

코드는 다음과 같습니다.

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

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

답변:


13

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

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

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


2

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

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

와 달리 sudo비밀번호는로 캐시되지 않는 것 같습니다 su.
Ryne Everett

@Ryne Everett : 저는 sudo에 익숙하지 않습니다. 그러나 'su'의 동작은 실제로 OP의 스크립트에 필요한 것입니다. 대부분의 경우 나는 다른 방법으로 'su'를 사용합니다 : 루트에서 다른 사용자로 변경. 이 경우 모든 암호가 필요하지 않습니다.
miracle173

1

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당신이하지 않아도된다는 어떤 방식으로 초기 명령의 인용 (이미 시간이 꽤 추한 얻을 수 따옴표를 포함하는 라인을 인용) 변경합니다.


0

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

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


-2

트릭을 할 것입니다 :

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

ssh? 당신은 할 필요합니까 susudo하고 지정해야하지 않는다 어느 쪽도 아니 root는 기본 때문이다. OP가 단순히 문제를 해결하는 것이 아니라 무언가를 배우기를 원했기 때문에 조금 더 많은 설명이 좋을 것입니다.
Adaephon

나는 당신이 큰 따옴표와 함께 문제가
발생할 것 같아요
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.