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
--append
tee
tee
sudo
> /dev/null
tee
사용의 장점 중 하나 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'"