Eu tenho que editar um arquivo de propriedade do root via ssh. Eu adiciono uma entrada no arquivo, preservo as 9 primeiras linhas e reordenio o restante para um arquivo temporário. Eu sei que substitui o que está no arquivo (e isso é o que eu quero), mas eu preciso preservar a raiz como proprietário do arquivo. Como posso fazer isso? Obrigado!
#!/bin/bash
user=""
echo "User:"
read user
ssh xxxx@xxxx "
sed -i "$a$user" file;
(head -n 9 file ; tail -n +10 file | sort) > temp;
cat temp > file;
rm -f temp
"
Respostas:
1 para resposta № 1Não é cat
que está mudando o dono, é sed
. Quando você usa sed -i
faz algo como:
mv file file.bak
sed "$a$user" file.bak > file
rm file.bak
Como você pode ver, isso cria um novo arquivo com o nome do arquivo original e é de propriedade do usuário que cria o arquivo.
Se você quiser evitar isso, faça uma cópia do arquivo original em vez de usar o -i
opção.
cp file /tmp/file.$$
sed "$a$user" /tmp/file.$$ > file
rm /tmp/file.$$
Ou você poderia simplesmente colocar sed
em seu pipeline:
sed "$a$user" file | head -n 9 file ; tail -n +10 file | sort > temp
cat temp > file
rm temp
0 para resposta № 2
Já faz um tempo desde que escrevi no BASH, mas acho que um ponto de partida seria
chown root $file // if you have a variable with the file name in
ou
chown root thefile.txt //if you want it hard coded;
outra variável na equação seria quem tem a propriedade do aplicativo cat? Eu acho que quem é o proprietário do aplicativo em execução, é assim que a propriedade dos arquivos é decidida.
talvez você também possa tentar
$ sudo cat temp > file
porque a sessão pertenceria então à raiz e, portanto, a saída pertenceria à raiz ???
0 para resposta № 3
Eu entendo que o usuário que entra não pode se tornar root? Então, sua melhor aposta é usar o dd
dd if = tmpfile of = outfile
Claro, faça todo o pedido, seding, awking e greping no seu arquivo tmp. dd neste uso é equivalente> sem criar um novo arquivo
0 para a resposta № 4
#!/bin/bash
user=""
echo "User:"
read user
ssh xxxx@xxxx "
sed -i "$a$user" file;
(head -n 9 file ; tail -n +10 file | sort) > temp;
sudo mv temp file;
sudo chown root file
"
Isso funcionará melhor se, na máquina xxxx, o usuário xxxx que você está logando tiver acesso sem senha ao sudo. Você pode fazer isso com esta entrada em seu arquivo / etc / sudoers lá:
xxxx ALL=NOPASSWD: ALL