我必须通过ssh编辑root拥有的文件。我在文件中添加一个条目,保留前9行并将其余行重新排序到临时文件。我知道>覆盖文件中的内容(这就是我想要的)但我需要保留root作为文件的所有者。我怎样才能做到这一点?谢谢!
#!/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
"
答案 0 :(得分:1)
不是cat
正在更改所有者,而是sed
。当您使用sed -i
时,它会执行以下操作:
mv file file.bak
sed '\$a$user' file.bak > file
rm file.bak
如您所见,这会创建一个包含原始文件名称的新文件,并且该文件由创建该文件的用户拥有。
如果您想避免这种情况,请复制原始文件,而不是使用-i
选项。
cp file /tmp/file.$$
sed '\$a$user' /tmp/file.$$ > file
rm /tmp/file.$$
或者您可以将sed
放入您的管道中:
sed '\$a$user' file | head -n 9 file ; tail -n +10 file | sort > temp
cat temp > file
rm temp
答案 1 :(得分:0)
自从我在BASH写作以来已经有一段时间,但我认为起点是
chown root $file // if you have a variable with the file name in
或
chown root thefile.txt //if you want it hard coded;
等式中的另一个变量是谁拥有应用程序猫的所有权?我认为无论谁是正在运行的应用程序的所有者,这就决定了如何确定文件的所有权
也许你也可以试试
$ sudo cat temp > file
因为会话将属于根,因此输出将属于根???
答案 2 :(得分:0)
我认为登录的用户不能成为root用户? 你最好的选择是使用dd
dd if = tmpfile of = outfile
当然,在你的tmp文件上做所有的排序,发送,唤醒和greping。该用法中的dd等效于>没有创建新文件
答案 3 :(得分:0)
#!/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
"
如果在xxxx计算机上您正在登录的xxxx用户具有无密码访问sudo,这将更有效。您可以通过在/ etc / sudoers文件中输入此条目来执行此操作:
xxxx ALL=NOPASSWD: ALL