猫改变主人?

时间:2013-08-01 17:53:24

标签: linux bash ssh

我必须通过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
"

4 个答案:

答案 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